diff --git a/CHANGELOG.md b/CHANGELOG.md index a75bac68e2..bfe90f536d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.401.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.400.0...v1.401.0) (2023-07-16) + + +### Features + +* **checkout:** CHECKOUT-7538 Introduce extension messenger and command handler ([#2050](https://github.com/bigcommerce/checkout-sdk-js/issues/2050)) ([b43adec](https://github.com/bigcommerce/checkout-sdk-js/commit/b43adecf32105a6a7bf9451e4c80fd0beb77eae2)) + ## [1.400.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.399.2...v1.400.0) (2023-07-13) diff --git a/dist/checkout-button.js b/dist/checkout-button.js index 2447bfaefe..682d12fcdb 100644 --- a/dist/checkout-button.js +++ b/dist/checkout-button.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{createCheckoutButtonInitializer:()=>gs,createTimeout:()=>r.createTimeout});var n={};e.r(n),e.d(n,{createApplePayButtonStrategy:()=>Ta,createBoltButtonStrategy:()=>Fa,createPayPalCommerceAlternativeMethodsButtonStrategy:()=>ss,createPayPalCommerceButtonStrategy:()=>ts,createPayPalCommerceCreditButtonStrategy:()=>rs,createPayPalCommerceVenmoButtonStrategy:()=>os,createPaypalExpressButtonStrategy:()=>ms});const r=require("@bigcommerce/request-sender"),i=require("@bigcommerce/form-poster"),o=require("tslib"),a=require("@bigcommerce/data-store"),s=function(e){function t(t){var n,r,i=this.constructor,o=e.call(this,t||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(t,e),t}(Error);var u={body:{},headers:{},status:0};const c=function(e){function t(t,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,s=t||u,c=s.body,d=s.headers,p=s.status;return(a=e.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=c,a.headers=d,a.status=p,a.errors=o||[],a}return(0,o.__extends)(t,e),t}(s),d=function(e){function t(t){var n=e.call(this,t,{message:"There is a problem processing your payment. Please try again later."})||this;return n.name="PaymentMethodInvalidError",n.type="payment_method_invalid",n}return(0,o.__extends)(t,e),t}(c);const p=function(e){function t(t){var n,r,i=this.constructor,o=e.call(this,t||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(t,e),t}(Error);var l={body:{},headers:{},status:0};const h=function(e){function t(t,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,s=t||l,u=s.body,c=s.headers,d=s.status;return(a=e.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=u,a.headers=c,a.status=d,a.errors=o||[],a}return(0,o.__extends)(t,e),t}(p),f=function(e){function t(t,n){var r=e.call(this,t,{message:n||"An unexpected error has occurred. The checkout process cannot continue as a result."})||this;return r.name="UnrecoverableError",r.type="unrecoverable",r}return(0,o.__extends)(t,e),t}(h),m=require("lodash");function g(e){return e.reduce((function(e,t){return t?(0,o.__spreadArrays)(e,[t]):e}),[]).join(" ")}function y(e,t){var n=e.body.errors,r=void 0===n?[]:n;return new h(e,{message:_(r)||t,errors:r})}function _(e){if(Array.isArray(e))return e.reduce((function(e,t){return t&&t.message?(0,o.__spreadArrays)(e,[t.message]):e}),[]).join(" ")}const v=function(e){function t(t){var n=e.call(this,t,{message:"The request has timed out or aborted."})||this;return n.name="TimeoutError",n.type="timeout",n}return(0,o.__extends)(t,e),t}(h),C=function(){function e(){this._factoryMethods={},this.register("default",(function(e,t){return new h(e,{message:t})})),this.register("internal",(function(e,t){return function(e,t){var n=e.body,r=n.errors,i=void 0===r?[]:r;return new h(e,{message:g(i)||n.detail||n.title||t,errors:i.length?i.map((function(e){return{code:n.type,message:e}})):[{code:n.type,message:n.detail||n.title}]})}(e,t)})),this.register("storefront",(function(e,t){return function(e,t){var n=e.body;return new h(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)})),this.register("payment",(function(e,t){return y(e,t)})),this.register("timeout",(function(e){return new v(e)}))}return e.prototype.register=function(e,t){this._factoryMethods[e]=t},e.prototype.createError=function(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)},e.prototype._getType=function(e){if(0===e.status)return"timeout";if(this._isStorefrontErrorResponseBody(e.body))return"storefront";if(this._isInternalErrorResponseBody(e.body)){var t=(0,m.last)(e.body.type.split("/"));return t&&this._factoryMethods[t]?t:"internal"}var n=(0,m.last)(e.body&&e.body.errors);return n&&n.code&&this._factoryMethods[n.code]?n.code:"payment"},e.prototype._isStorefrontErrorResponseBody=function(e){var t=e;return!this._isInternalErrorResponseBody(e)&&"string"==typeof t.title&&"string"==typeof t.type&&"number"==typeof t.status&&"string"==typeof t.detail},e.prototype._isInternalErrorResponseBody=function(e){var t=e;return"object"==typeof t.errors&&"string"==typeof t.title&&"string"==typeof t.type&&"number"==typeof t.status},e}(),S=require("rxjs"),I=require("rxjs/operators");var E,w,A,b;function P(e,t){return Array.isArray(e)?e.map((function(e){return P(e,t)})):(0,m.isPlainObject)(e)?(0,m.transform)((0,m.omitBy)(e,t),(function(e,n,r){e[r]=P(n,t)}),{}):e}function O(e,t){return function(e){return e.type===w.ClearError}(t)?P(e,(function(e){return e===t.payload})):e}function T(e,t,n){return e===t||(e&&t&&"object"==typeof e&&"object"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(var r=0,i=e.length;r0}})),W=Tn(q,(function(e){return function(t){return!(!t||!t.nonce)||e()===Nn||e()===Ln}})),(0,An.memoizeOne)((function(e,t){return{getPaymentId:U({checkout:e,order:t}),getPaymentIdOrThrow:F({checkout:e,order:t}),getPaymentStatus:q({checkout:e,order:t}),getPaymentStatusOrThrow:B({checkout:e,order:t}),getPaymentToken:G({checkout:e,order:t}),getPaymentTokenOrThrow:x({checkout:e,order:t}),getPaymentRedirectUrl:Y({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:H({checkout:e,order:t}),isPaymentDataRequired:j({checkout:e,order:t}),isPaymentDataSubmitted:W({checkout:e,order:t})}}))),Ae=function(){var e=Tn((function(e){return e.errors.applyError}),(function(e){return function(){return e}})),t=Tn((function(e){return!!e.statuses.isApplying}),(function(e){return function(){return e}}));return(0,An.memoizeOne)((function(n){return void 0===n&&(n=Fn),{getApplyError:e(n),isApplying:t(n)}}))}(),be=function(){var e=Tn((function(e){return e.errors.updateError}),(function(e){return function(){return e}})),t=Tn((function(e){return!!e.statuses.isUpdating}),(function(e){return function(){return e}}));return(0,An.memoizeOne)((function(n){return void 0===n&&(n=gn),{getUpdateError:e(n),isUpdating:t(n)}}))}(),Pe=(K=Tn((function(e){return e.data}),(function(e){return function(){return e}})),Q=Tn((function(e){return e.errors.sendError}),(function(e){return function(){return e}})),J=Tn((function(e){return!!e.statuses.isSending}),(function(e){return function(){return e}})),(0,An.memoizeOne)((function(e){return void 0===e&&(e=an),{getEmail:K(e),getSendError:Q(e),isSending:J(e)}}))),Te=function(){var e=Tn((function(e){return e.data}),(function(e){return function(){return e}})),t=Tn((function(e){return e.data}),(function(e){return function(t){return null==e?void 0:e.find((function(e){return e.region===t}))}})),n=Tn((function(e){return e.errors.loadError}),(function(e){return function(){return e}})),r=Tn((function(e){return e.statuses.isLoading}),(function(e){return function(){return!!e}}));return(0,An.memoizeOne)((function(i){return void 0===i&&(i=Ne),{getExtensions:e(i),getExtensionByRegion:t(i),getLoadError:n(i),isLoading:r(i)}}))}();return function(e,t){void 0===t&&(t={});var n,r=X(e.billingAddress),i=$(e.cart),o=ee(e.checkoutButton),a=ne(e.countries),s=re(e.coupons),u=ie(e.customer),c=ae(e.customerStrategies),d=Te(e.extensions),p=ce(e.formFields),l=se(e.giftCertificates),h=ue(e.instruments),f=Ee(e.orderBillingAddress),m=pe(e.paymentMethods),g=le(e.paymentStrategies),y=he(e.pickupOptions),_=fe(e.remoteCheckout),v=me(e.consignments),C=ye(e.shippingCountries),S=_e(e.shippingStrategies),I=be(e.subscriptions),E=Ae(e.storeCredit),w=Pe(e.signInEmail),A=ve(e.consignments,i),b=Ce(e.checkout,r,i,A,s,u,l),P=Se(e.order,f,s),O=we(b,P),T={billingAddress:r,cart:i,checkout:b,checkoutButton:o,config:te(e.config,e.formFields),consignments:A,countries:a,coupons:s,customer:u,customerStrategies:c,extensions:d,form:p,giftCertificates:l,instruments:h,order:P,orderBillingAddress:f,payment:O,paymentMethods:m,paymentStrategies:g,pickupOptions:y,remoteCheckout:_,shippingAddress:v,shippingCountries:C,shippingStrategies:S,signInEmail:w,subscriptions:I,storeCredit:E};return t.shouldWarnMutation?(n=T,Object.keys(n).reduce((function(e,t){return e[t]=Dn(n[t]),e}),{})):T}}function Bn(e,t){void 0===e&&(e={});var n,r,i=(n=new C,["catalog_only","empty_cart","invalid_order_id","invalid_order_token","missing_order_token","missing_provider_token","missing_shipping_method","order_completion_error","order_could_not_be_finalized_error","order_create_failed","provider_fatal_error","provider_setup_error","stock_too_low"].forEach((function(e){n.register(e,(function(e,t){return new f(e,t)}))})),n.register("invalid_payment_provider",(function(e){return new d(e)})),n.register("payment_config_not_found",(function(e){return new d(e)})),r=n,function(e){return(0,S.from)(e).pipe((0,I.catchError)((function(e){if(e instanceof Error||e.payload instanceof Error)throw e;if((n=e.payload)&&"object"==typeof n&&["body","headers","status","statusText"].every((function(e){return Object.prototype.hasOwnProperty.call(n,e)}))){var t=e.payload.body&&e.payload.body.detail;throw(0,o.__assign)((0,o.__assign)({},e),{payload:r.createError(e.payload,t)})}var n;throw e})))}),s=qn();return(0,a.createDataStore)((0,a.combineReducers)({billingAddress:k,cart:H,checkout:Sn,checkoutButton:ee,config:ae,consignments:Nt,countries:je,coupons:pe,customer:Ee,customerStrategies:Te,extensions:Le,formFields:Ge,giftCertificates:ye,instruments:wt,orderBillingAddress:ot,order:Je,payment:st,paymentMethods:pt,paymentStrategies:_t,pickupOptions:xt,remoteCheckout:Rt,shippingCountries:Kt,shippingStrategies:en,signInEmail:sn,subscriptions:yn,storeCredit:ln}),e,(0,o.__assign)({actionTransformer:i,stateTransformer:function(e){return s(e)}},t))}function Gn(e,t,n){var r=new WeakMap;function i(e){var n=this;return function(){for(var i,a=[],s=0;s=400&&e.status<500)throw new or(e);throw e}))},e.prototype.updateCheckout=function(e,t,n){var r=void 0===n?{}:n,i=r.params,a=(void 0===i?{}:i).include,s=r.timeout,u="/api/storefront/checkout/"+e,c=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.put(u,{params:{include:rr(ir,a)},body:t,headers:c,timeout:s})},e}(),sr=function(){function e(){}return e.prototype.isEqual=function(e,t){return(0,m.isEqual)(this._normalize(e),this._normalize(t))},e.prototype._normalize=function(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((function(e,t){return(""+e.productId+e.variantId).localeCompare(""+t.productId+t.variantId)})).map((function(e){return{extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId}})),giftCertificates:e.lineItems.giftCertificates.slice().sort((function(e,t){return(""+e.id).localeCompare(""+t.id)})).map((function(e){return{amount:e.amount,recipient:e.recipient}})),physicalItems:e.lineItems.physicalItems.slice().sort((function(e,t){return(""+e.productId+e.variantId).localeCompare(""+t.productId+t.variantId)})).map((function(e){return{extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}}))}}},e}(),ur=function(e){function t(t,n){var r=e.call(this,"An update to your shopping cart has been detected and your available shipping costs have been updated.")||this;return r.name="CartChangedError",r.type="cart_changed",r.data={previous:t,updated:n},r}return(0,o.__extends)(t,e),t}(p),cr=function(){function e(e){this._checkoutRequestSender=e}return e.prototype.validate=function(e,t){var n=this;if(!e)throw new Pn(bn.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then((function(t){var r=new sr;if(!(e.outstandingBalance===t.body.outstandingBalance&&n._compareCoupons(e.coupons,t.body.coupons)&&n._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&r.isEqual(e.cart,t.body.cart)))throw new ur(n._getComparableCheckout(e),n._getComparableCheckout(t.body))}))},e.prototype._compareCoupons=function(e,t){return(0,m.isEqual)((0,m.map)(e,"code"),(0,m.map)(t,"code"))},e.prototype._compareGiftCertificates=function(e,t){return(0,m.isEqual)((0,m.map)(e,"code"),(0,m.map)(t,"code"))},e.prototype._getComparableCheckout=function(e){var t=e.cart,n=e.coupons,r=e.giftCertificates,i=e.outstandingBalance;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:r,outstandingBalance:i}},e}(),dr=function(){function e(e){this._configRequestSender=e}return e.prototype.loadConfig=function(e){var t=this;return S.Observable.create((function(n){n.next((0,a.createAction)(Q.LoadConfigRequested)),t._configRequestSender.loadConfig(e).then((function(e){n.next((0,a.createAction)(Q.LoadConfigSucceeded,e.body)),n.complete()})).catch((function(e){n.error((0,a.createErrorAction)(Q.LoadConfigFailed,e))}))}))},(0,o.__decorate)([Gn],e.prototype,"loadConfig",null),e}(),pr=function(){function e(e){this._requestSender=e}return e.prototype.loadConfig=function(e){var t=void 0===e?{}:e,n=t.timeout,r=t.params;return this._requestSender.get("/api/storefront/checkout-settings",{timeout:n,headers:(0,o.__assign)({Accept:Vn.JsonV1,"X-API-INTERNAL":Hn},jn),params:r}).catch((function(e){if(e.status>=400&&e.status<500)throw new or(e);throw e}))},e}();function lr(e){var t=e;return"object"==typeof t&&"object"==typeof t.payload&&"string"==typeof t.payload.token}const hr=function(){function e(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}return e.prototype.createCustomer=function(e,t){var n=this;return function(r){var i=r.getState().config.getStoreConfigOrThrow().checkoutSettings.isStorefrontSpamProtectionEnabled,s=function(i){return(0,S.from)(n._customerRequestSender.createAccount((0,o.__assign)((0,o.__assign)({},e),{token:i}),t)).pipe((0,I.switchMap)((function(){return(0,S.concat)(n._checkoutActionCreator.loadCurrentCheckout(t)(r),(0,S.of)((0,a.createAction)(me.CreateCustomerSucceeded)))})))};return(0,S.concat)((0,S.of)((0,a.createAction)(me.CreateCustomerRequested)),i?(0,S.from)(n._spamProtectionActionCreator.execute()(r)).pipe((0,I.switchMap)((function(e){var t;return lr(e)?(0,S.concat)((0,S.of)(e),s(null===(t=e.payload)||void 0===t?void 0:t.token)):(0,S.of)(e)}))):s()).pipe((0,I.catchError)((function(e){return Qn(me.CreateCustomerFailed,e)})))}},e.prototype.createAddress=function(e,t){var n=this;return(0,S.concat)((0,S.of)((0,a.createAction)(me.CreateCustomerAddressRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._customerRequestSender.createAddress(e,t)];case 1:return n=r.sent().body,[2,(0,a.createAction)(me.CreateCustomerAddressSucceeded,n)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(me.CreateCustomerAddressFailed,e)})))},e.prototype.signInCustomer=function(e,t){var n=this;return function(r){return(0,S.concat)((0,S.of)((0,a.createAction)(me.SignInCustomerRequested)),(0,S.from)(n._customerRequestSender.signInCustomer(e,t)).pipe((0,I.switchMap)((function(e){var i=e.body;return(0,S.concat)(n._checkoutActionCreator.loadCurrentCheckout(t)(r),(0,S.of)((0,a.createAction)(me.SignInCustomerSucceeded,i.data)))})))).pipe((0,I.catchError)((function(e){return Qn(me.SignInCustomerFailed,e)})))}},e.prototype.signOutCustomer=function(e){var t=this;return function(n){return(0,S.concat)((0,S.of)((0,a.createAction)(me.SignOutCustomerRequested)),(0,S.from)(t._customerRequestSender.signOutCustomer(e)).pipe((0,I.switchMap)((function(r){var i=r.body;return(0,S.concat)(t._checkoutActionCreator.loadCurrentCheckout(e)(n),(0,S.of)((0,a.createAction)(me.SignOutCustomerSucceeded,i.data)))})))).pipe((0,I.catchError)((function(e){return Qn(me.SignOutCustomerFailed,e)})))}},e}(),fr=function(){function e(e){this._requestSender=e}return e.prototype.createAccount=function(e,t){var n=(void 0===t?{}:t).timeout;return this._requestSender.post("/api/storefront/customer",{timeout:n,headers:jn,body:e})},e.prototype.createAddress=function(e,t){var n=(void 0===t?{}:t).timeout;return this._requestSender.post("/api/storefront/customer-address",{timeout:n,headers:jn,body:e})},e.prototype.signInCustomer=function(e,t){var n=(void 0===t?{}:t).timeout;return this._requestSender.post("/internalapi/v1/checkout/customer",{timeout:n,headers:jn,body:e})},e.prototype.signOutCustomer=function(e){var t=(void 0===e?{}:e).timeout;return this._requestSender.delete("/internalapi/v1/checkout/customer",{timeout:t,headers:jn})},e}(),mr=function(){function e(e){this._formFieldsRequestSender=e}return e.prototype.loadFormFields=function(e){var t=this;return(0,S.concat)((0,S.of)((0,a.createAction)(ke.LoadFormFieldsRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(t,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return[4,this._formFieldsRequestSender.loadFields(e)];case 1:return t=n.sent().body,[2,(0,a.createAction)(ke.LoadFormFieldsSucceeded,t)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(ke.LoadFormFieldsFailed,e)})))},(0,o.__decorate)([Gn],e.prototype,"loadFormFields",null),e}(),gr=function(){function e(e){this._requestSender=e}return e.prototype.loadFields=function(e){var t=(void 0===e?{}:e).timeout;return this._requestSender.get("/api/storefront/form-fields",{timeout:t,headers:(0,o.__assign)({Accept:Vn.JsonV1,"X-API-INTERNAL":Hn},jn)})},e}(),yr=function(e){var t=this,n=new Promise((function(e,n){t.cancel=n}));this.promise=Promise.race([e,n])},_r=function(e){function t(t){var n=e.call(this,t||"Unable to proceed because the required element is unexpectedly detached from the page.")||this;return n.name="UnexpectedDetachmentError",n.type="unexpected_detachment",n}return(0,o.__extends)(t,e),t}(p),vr=function(){function e(e){this._mutationObserver=e}return e.prototype.ensurePresence=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:n=new yr(t),(r=this._mutationObserver.create((function(t){t.forEach((function(t){0!==Array.from(t.removedNodes).filter((function(t){return e.some((function(e){return t===e||t.contains(e)}))})).length&&n.cancel(new _r)}))}))).observe(document.body,{childList:!0,subtree:!0}),o.label=1;case 1:return o.trys.push([1,3,,4]),[4,n.promise];case 2:return i=o.sent(),r.disconnect(),[2,i];case 3:throw a=o.sent(),r.disconnect(),a;case 4:return[2]}}))}))},e}();var Cr=function(){function e(e){void 0===e&&(e=window),this._window=e}return e.prototype.create=function(e){return new this._window.MutationObserver(e)},e}();const Sr=function(e){function t(t){var n=e.call(this,t||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(t,e),t}(p);function Ir(e){if(!/^(https?:)?\/\//.test(e))throw new Sr("The provided URL must be absolute.");var t=document.createElement("a");t.href=e;var n=t.port&&-1!==e.indexOf(t.hostname+":"+t.port)?t.port:"";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:t.protocol+"//"+t.hostname+(n?":"+n:""),pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function Er(e,t){return e.type===t}const wr=function(){function e(e,t){this._targetWindow=t,this._targetOrigin="*"===e?"*":Ir(e).origin}return e.prototype.post=function(e,t){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=t&&(0,S.fromEvent)(window,"message").pipe((0,I.filter)((function(e){return e.origin===n._targetOrigin&&Er(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)})),(0,I.map)((function(e){if(t.errorType===e.data.type)throw e.data;return e.data})),(0,I.take)(1)).toPromise();return r.postMessage(e,this._targetOrigin),i}},e.prototype.setTarget=function(e){this._targetWindow=e},e}(),Ar=function(e,t,n){return t&&n?br(0,t,n):function(e){var t=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return(0,o.__extends)(t,e),t}(e);return Object.getOwnPropertyNames(e.prototype).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&"constructor"!==n&&Object.defineProperty(t.prototype,n,br(e.prototype,n,r))})),t}(e)};function br(e,t,n){if("function"!=typeof n.value)return n;var r=n.value;return{get:function(){var e=r.bind(this);return Object.defineProperty(this,t,(0,o.__assign)((0,o.__assign)({},n),{value:e})),e},set:function(e){r=e}}}const Pr=function(){function e(e){var t;this._sourceOrigins=[Ir(e).origin,(t=Ir(e),Ir(0===t.hostname.indexOf("www")?t.href:t.href.replace(t.hostname,"www."+t.hostname))).origin],this._isListening=!1,this._listeners={}}return e.prototype.listen=function(){this._isListening||(this._isListening=!0,window.addEventListener("message",this._handleMessage))},e.prototype.stopListen=function(){this._isListening&&(this._isListening=!1,window.removeEventListener("message",this._handleMessage))},e.prototype.addListener=function(e,t){var n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)},e.prototype.removeListener=function(e,t){var n=this._listeners[e];if(n){var r=n.indexOf(t);r>=0&&n.splice(r,1)}},e.prototype.trigger=function(e){var t=this._listeners[e.type];t&&t.forEach((function(t){return t(e)}))},e.prototype._handleMessage=function(e){-1!==this._sourceOrigins.indexOf(e.origin)&&Er(e.data,e.data.type)&&this.trigger(e.data)},(0,o.__decorate)([Ar],e.prototype,"_handleMessage",null),e}(),Or=function(e){function t(){var t=e.call(this,"You haven't complete our spam protection challenge. Please try again.")||this;return t.name="SpamProtectionChallengeNotCompletedError",t.type="spam_protection_challenge_not_completed",t}return(0,o.__extends)(t,e),t}(p),Tr=function(e){function t(){var t=e.call(this,"Please complete our human verification challenge and try again.")||this;return t.name="CardingProtectionChallengeNotCompletedError",t.type="carding_protection_challenge_not_completed",t}return(0,o.__extends)(t,e),t}(p),Rr=function(e){function t(){var t=e.call(this,"We were not able to verify that you are not a robot. Please try again.")||this;return t.name="CardingProtectionFailedError",t.type="carding_protection_failed",t}return(0,o.__extends)(t,e),t}(p),Mr=function(){function e(e){this._googleRecaptcha=e}return e.prototype.handle=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){return"string"==typeof e?[2,this.handleWithRecaptchaSitekey(e,t)]:[2,this.handleWithPaymentHumanVerificationRequestError(e)]}))}))},e.prototype.handleWithPaymentHumanVerificationRequestError=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:if(!this._isPaymentHumanVerificationRequest(e))throw e;return[4,this._initialize(e.body.additional_action_required.data.key)];case 1:return t.sent(),[2,this._performRecaptcha()]}}))}))},e.prototype.handleWithRecaptchaSitekey=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("recaptcha_v2"!==e)throw Error("Human verification method is not supported.");if(!t)throw Error("Recaptcha site key is missing.");return[4,this._initialize(t)];case 1:return n.sent(),[2,this._performRecaptcha()]}}))}))},e.prototype._performRecaptcha=function(){var e=this;return this._googleRecaptcha.execute().pipe((0,I.take)(1)).pipe((0,I.switchMap)((function(t){var n=t.error,r=t.token;return(0,o.__awaiter)(e,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){if(n instanceof Or)throw new Tr;if(n||!r)throw new Rr;return[2,{type:"recaptcha_v2_verification",data:{human_verification_token:r}}]}))}))}))).toPromise()},e.prototype._initialize=function(e){var t="cardingProtectionContainer",n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),(n=document.createElement("div")).setAttribute("id",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)},e.prototype._isPaymentHumanVerificationRequest=function(e){var t=e.body||{},n=t.additional_action_required;return"additional_action_required"===t.status&&n&&"recaptcha_v2_verification"===n.type},e}();var Dr;!function(e){e[e.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",e[e.CustomerNotInitialized=1]="CustomerNotInitialized",e[e.PaymentNotInitialized=2]="PaymentNotInitialized",e[e.ShippingNotInitialized=3]="ShippingNotInitialized",e[e.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(Dr||(Dr={}));const kr=function(e){function t(t){var n=e.call(this,function(e){switch(e){case Dr.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case Dr.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case Dr.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case Dr.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(t))||this;return n.subtype=t,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(t,e),t}(p),Nr=function(e){function t(){var t=e.call(this,"We were not able to complete your spam protection verification. Please try again.")||this;return t.name="SpamProtectionFailedError",t.type="spam_protection_failed",t}return(0,o.__extends)(t,e),t}(p),Lr=function(e){function t(){var t=e.call(this,"Spam protection is not loaded. Please try again.")||this;return t.name="SpamProtectionNotLoadedError",t.type="spam_protection_failed",t}return(0,o.__extends)(t,e),t}(p),zr=function(){function e(e,t){var n=this;this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=(0,An.memoize)((function(e,t,r){var i=new S.Subject;if(!r)throw new Error;return n._widgetId=e.render(r.id,{sitekey:t,size:"invisible",callback:function(){i.next({token:e.getResponse(n._widgetId)}),e.reset(n._widgetId)},"error-callback":function(){i.next({error:new Nr})}}),i}),{isEqual:function(e,t){return e===t}})}return e.prototype.load=function(e,t){var n=this;return this.googleRecaptchaScriptLoader.load().then((function(r){r&&(n._event$=n._memoized(r,t,document.getElementById(e)),n._recaptcha=r)}))},e.prototype.execute=function(){var e=this;return(0,S.defer)((function(){var t=e._event$,n=e._recaptcha;if(!t||!n)throw new kr(Dr.SpamProtectionNotInitialized);return(0,S.defer)((function(){var e=document.querySelector('iframe[src*="bframe"]');return e?(0,S.of)(e):(0,S.throwError)(new Lr)})).pipe((0,I.retryWhen)((function(e){return e.pipe((0,I.delay)(250),(0,I.switchMap)((function(e,t){return t<28?(0,S.of)(e):(0,S.throwError)(e)})))})),(0,I.switchMap)((function(r){return e._watchRecaptchaChallengeWindow(t,r),n.execute(e._widgetId),t})),(0,I.catchError)((function(e){return(0,S.of)({error:e})})))}))},e.prototype._watchRecaptchaChallengeWindow=function(e,t){var n=t.parentElement;if(!n)throw new Lr;var r=n.parentElement;if(!r)throw new Lr;this.mutationObserverFactory.create((function(){"hidden"===r.style.visibility&&e.next({error:new Or})})).observe(r,{attributes:!0,attributeFilter:["style"]})},e}(),Ur=function(){function e(e,t){void 0===t&&(t=window),this._scriptLoader=e,this._window=t}return e.prototype.load=function(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise},e.prototype._loadScript=function(){var e=this,t="initRecaptcha",n=["onload="+t,"render=explicit"].join("&");return new Promise((function(r,i){e._window[t]=function(){return r(e._window.grecaptcha)},e._scriptLoader.loadScript("//www.google.com/recaptcha/api.js?"+n).catch((function(t){e._loadPromise=void 0,i(t)}))}))},e}();function Fr(e){return new zr(new Ur(e),new Cr)}const qr=function(e){function t(t){var n=e.call(this,t||"Unable to proceed due to invalid configuration provided for the hosted payment form.")||this;return n.name="InvalidHostedFormConfigError",n.type="invalid_hosted_form_config",n}return(0,o.__extends)(t,e),t}(p),Br=function(e){function t(t){var n=e.call(this,t||"Unable to proceed due to an unknown error with the hosted payment form.")||this;return n.name="InvalidHostedFormError",n.type="invalid_hosted_form",n}return(0,o.__extends)(t,e),t}(p),Gr=function(e){function t(t){var n=e.call(this,(0,o.__spreadArrays)(["Unable to proceed due to invalid user input values"],(0,m.flatMap)((0,m.values)(t),(function(e){return(0,m.map)(e,(function(e){return e.message}))}))).join(". "))||this;return n.errors=t,n.name="InvalidHostedFormValueError",n.type="invalid_hosted_form_value",n}return(0,o.__extends)(t,e),t}(p);var xr,Yr;!function(e){e.AttachRequested="HOSTED_FIELD:ATTACH_REQUESTED",e.SubmitRequested="HOSTED_FIELD:SUBMITTED_REQUESTED",e.ValidateRequested="HOSTED_FIELD:VALIDATE_REQUESTED"}(xr||(xr={})),function(e){e.AttachSucceeded="HOSTED_INPUT:ATTACH_SUCCEEDED",e.AttachFailed="HOSTED_INPUT:ATTACH_FAILED",e.BinChanged="HOSTED_INPUT:BIN_CHANGED",e.Blurred="HOSTED_INPUT:BLURRED",e.Changed="HOSTED_INPUT:CHANGED",e.CardTypeChanged="HOSTED_INPUT:CARD_TYPE_CHANGED",e.Entered="HOSTED_INPUT:ENTERED",e.Focused="HOSTED_INPUT:FOCUSED",e.SubmitSucceeded="HOSTED_INPUT:SUBMIT_SUCCEEDED",e.SubmitFailed="HOSTED_INPUT:SUBMIT_FAILED",e.Validated="HOSTED_INPUT:VALIDATED"}(Yr||(Yr={}));const Vr=function(){function e(e,t,n,r,i,o,a,s,u){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=r,this._styles=i,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=s,this._cardInstrument=u,this._iframe=document.createElement("iframe"),this._iframe.src="/checkout/payment/hosted-field?version=1.400.0",this._iframe.style.border="none",this._iframe.style.height="100%",this._iframe.style.overflow="hidden",this._iframe.style.width="100%"}return e.prototype.getType=function(){return this._type},e.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t,n=this;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:if(!(e=document.getElementById(this._containerId)))throw new qr("Unable to proceed because the provided container ID is not valid.");return e.appendChild(this._iframe),this._eventListener.listen(),t=(0,S.fromEvent)(this._iframe,"load").pipe((0,I.switchMap)((function(e){var t=e.target;return(0,o.__awaiter)(n,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(e=t&&t.contentWindow))throw new Error("The content window of the iframe cannot be accessed.");return this._eventPoster.setTarget(e),[4,this._eventPoster.post({type:xr.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:Yr.AttachSucceeded,errorType:Yr.AttachFailed})];case 1:return n.sent(),[2]}}))}))})),(0,I.take)(1)).toPromise(),[4,this._detachmentObserver.ensurePresence([this._iframe],t)];case 1:return r.sent(),[2]}}))}))},e.prototype.detach=function(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())},e.prototype.submitForm=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),n=this._eventPoster.post({type:xr.SubmitRequested,payload:{fields:e,data:t}},{successType:Yr.SubmitSucceeded,errorType:Yr.SubmitFailed}),[4,this._detachmentObserver.ensurePresence([this._iframe],n)];case 1:return[2,i.sent()];case 2:if(r=i.sent(),this._isSubmitErrorEvent(r)){if("hosted_form_error"===r.payload.error.code)throw new Br(r.payload.error.message);if(r.payload.response)throw y(r.payload.response);throw new Error(r.payload.error.message)}throw r;case 3:return[2]}}))}))},e.prototype.validateForm=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e=this._eventPoster.post({type:xr.ValidateRequested},{successType:Yr.Validated}),[4,this._detachmentObserver.ensurePresence([this._iframe],e)];case 1:if(!(t=n.sent().payload).isValid)throw new Gr(t.errors);return[2]}}))}))},e.prototype._getFontUrls=function(){var e=this,t="fonts.googleapis.com",n=document.querySelectorAll("link[href*='"+t+"'][rel='stylesheet']");return Array.prototype.slice.call(n).filter((function(e){return Ir(e.href).hostname===t})).filter((function(t){return(0,m.values)(e._styles).map((function(e){return e&&e.fontFamily})).filter((function(e){return"string"==typeof e})).some((function(e){return e.split(/,\s/).some((function(e){return-1!==t.href.indexOf(e.replace(" ","+"))}))}))})).map((function(e){return e.href}))},e.prototype._isSubmitErrorEvent=function(e){return e.type===Yr.SubmitFailed},e}(),Hr=function(){function e(e,t,n,r,i){var a=this;this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=r,this._paymentHumanVerificationHandler=i,this._handleEnter=function(e){var t=e.payload;return(0,o.__awaiter)(a,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.validate()];case 1:return r.sent(),[3,3];case 2:if("InvalidHostedFormValueError"!==(e=r.sent()).name)throw e;return[3,3];case 3:return(void 0===(n=this._eventCallbacks.onEnter)?m.noop:n)(t),[2]}}))}))};var s=this._eventCallbacks,u=s.onBlur,c=void 0===u?m.noop:u,d=s.onCardTypeChange,p=void 0===d?m.noop:d,l=s.onFocus,h=void 0===l?m.noop:l,f=s.onValidate,g=void 0===f?m.noop:f;this._eventListener.addListener(Yr.Blurred,(function(e){var t=e.payload;return c(t)})),this._eventListener.addListener(Yr.CardTypeChanged,(function(e){var t=e.payload;return p(t)})),this._eventListener.addListener(Yr.Focused,(function(e){var t=e.payload;return h(t)})),this._eventListener.addListener(Yr.Validated,(function(e){var t=e.payload;return g(t)})),this._eventListener.addListener(Yr.Entered,this._handleEnter),this._eventListener.addListener(Yr.CardTypeChanged,(function(e){var t=e.payload;return a._cardType=t.cardType})),this._eventListener.addListener(Yr.BinChanged,(function(e){var t=e.payload;return a._bin=t.bin}))}return e.prototype.getBin=function(){return this._bin},e.prototype.getCardType=function(){return this._cardType},e.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return this._eventListener.listen(),e=this._getFirstField(),t=(0,m.without)(this._fields,e),[4,e.attach()];case 1:return n.sent(),[4,Promise.all(t.map((function(e){return e.attach()})))];case 2:return n.sent(),[2]}}))}))},e.prototype.detach=function(){this._eventListener.stopListen(),this._fields.forEach((function(e){e.detach()}))},e.prototype.submit=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._getFirstField().submitForm(this._fields.map((function(e){return e.getType()})),this._payloadTransformer.transform(e,t))];case 1:case 4:return[2,i.sent()];case 2:return n=i.sent(),[4,this._paymentHumanVerificationHandler.handle(n)];case 3:return r=i.sent(),[4,this._getFirstField().submitForm(this._fields.map((function(e){return e.getType()})),this._payloadTransformer.transform(e,r))];case 5:return[2]}}))}))},e.prototype.validate=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){return[2,this._getFirstField().validateForm()]}))}))},e.prototype._getFirstField=function(){var e=this._fields[0];if(!e)throw new qr("Unable to proceed because the payment form has no field defined.");return e},e}();function jr(e){return Boolean(e.instrumentId)}const Wr=function(){function e(e){this._store=e}return e.prototype.transform=function(e,t){var n=this._store.getState(),r=n.checkout.getCheckout(),i=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),s=n.order.getOrderMeta(),u=(0,m.omit)(e.paymentData,"ccExpiry","ccName","ccNumber","ccCvv"),c=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),d=n.paymentMethods.getPaymentMethodsMeta(),p=o&&u&&jr(u)?n.payment.getPaymentToken()+", "+o.vaultAccessToken:n.payment.getPaymentToken();if(!p)throw new Pn(bn.MissingPaymentToken);return{additionalAction:t,authToken:p,checkout:r,config:i,order:a,orderMeta:s,payment:u,paymentMethod:c,paymentMethodMeta:d}},e}(),Kr=function(){function e(e){this._store=e}return e.prototype.create=function(e,t){var n=this,r=Object.keys(t.fields).reduce((function(r,i){var a=t.fields[i];return a?(0,o.__spreadArrays)(r,[new Vr(i,a.containerId,a.placeholder||"",a.accessibilityLabel||"",t.styles||{},new wr(e),new Pr(e),new vr(new Cr),"instrumentId"in a?n._getCardInstrument(a.instrumentId):void 0)]):r}),[]);return new Hr(r,new Pr(e),new Wr(this._store),(0,m.pick)(t,"onBlur","onEnter","onFocus","onCardTypeChange","onValidate"),new Mr(Fr((0,Kn.createScriptLoader)())))},e.prototype._getCardInstrument=function(e){var t=(0,this._store.getState().instruments.getCardInstrument)(e);if(!t)throw new Pn(bn.MissingPaymentInstrument);return t},e}(),Qr=function(e){function t(){var t=e.call(this,"You haven't complete our spam check. Please try again.")||this;return t.name="SpamProtectionNotCompletedError",t.type="spam_protection_not_completed",t}return(0,o.__extends)(t,e),t}(p),Zr=function(){function e(e,t){this._orderRequestSender=e,this._checkoutValidator=t}return e.prototype.loadOrder=function(e,t){var n=this;return new S.Observable((function(r){r.next((0,a.createAction)(ie.LoadOrderRequested)),n._orderRequestSender.loadOrder(e,t).then((function(e){r.next((0,a.createAction)(ie.LoadOrderSucceeded,e.body)),r.complete()})).catch((function(e){r.error((0,a.createErrorAction)(ie.LoadOrderFailed,e))}))}))},e.prototype.loadOrderPayments=function(e,t){var n=this;return new S.Observable((function(r){r.next((0,a.createAction)(ie.LoadOrderPaymentsRequested)),n._orderRequestSender.loadOrder(e,t).then((function(e){r.next((0,a.createAction)(ie.LoadOrderPaymentsSucceeded,e.body)),r.complete()})).catch((function(e){r.error((0,a.createErrorAction)(ie.LoadOrderPaymentsFailed,e))}))}))},e.prototype.loadCurrentOrder=function(e){var t=this;return function(n){return(0,S.defer)((function(){var r=t._getCurrentOrderId(n.getState());if(!r)throw new Pn(bn.MissingOrderId);return t.loadOrder(r,e)}))}},e.prototype.submitOrder=function(e,t){var n=this;return function(r){return(0,S.concat)((0,S.of)((0,a.createAction)(ie.SubmitOrderRequested)),(0,S.defer)((function(){var i=r.getState(),s=i.config.getExternalSource(),u=i.config.getVariantIdentificationToken(),c=i.checkout.getCheckout();if(!c)throw new Pn(bn.MissingCheckout);if(c.shouldExecuteSpamCheck)throw new Qr;return(0,S.from)(n._checkoutValidator.validate(c,t).then((function(){return n._orderRequestSender.submitOrder(n._mapToOrderRequestBody(null!=e?e:{},c.id,c.customerMessage,s),(0,o.__assign)((0,o.__assign)({},t),{headers:{checkoutVariant:u}}))}))).pipe((0,I.switchMap)((function(e){return(0,S.concat)(n.loadOrder(e.body.data.order.orderId,t),(0,S.of)((0,a.createAction)(ie.SubmitOrderSucceeded,e.body.data,(0,o.__assign)((0,o.__assign)({},e.body.meta),{token:e.headers.token}))))})))})).pipe((0,I.catchError)((function(e){return Qn(ie.SubmitOrderFailed,e)}))))}},e.prototype.finalizeOrder=function(e,t){var n=this;return(0,S.concat)((0,S.of)((0,a.createAction)(ie.FinalizeOrderRequested)),(0,S.from)(this._orderRequestSender.finalizeOrder(e,t)).pipe((0,I.switchMap)((function(r){return(0,S.concat)(n.loadOrder(e,t),(0,S.of)((0,a.createAction)(ie.FinalizeOrderSucceeded,r.body.data)))})))).pipe((0,I.catchError)((function(e){return Qn(ie.FinalizeOrderFailed,e)})))},e.prototype._getCurrentOrderId=function(e){var t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId},e.prototype._mapToOrderRequestBody=function(e,t,n,r){var i=e.payment,a=(0,o.__rest)(e,["payment"]);return i?(0,o.__assign)((0,o.__assign)({},a),{cartId:t,customerMessage:n,externalSource:r,payment:{paymentData:i.paymentData,name:i.methodId,gateway:i.gatewayId}}):(0,o.__assign)((0,o.__assign)({},a),{cartId:t,customerMessage:n,externalSource:r})},e}(),Jr=function(e){function t(t){var n=e.call(this,t||"Your checkout could not be processed because some details have changed. Please review your order and try again.")||this;return n.name="CartConsistencyError",n.type="cart_consistency",n}return(0,o.__extends)(t,e),t}(p),Xr=function(e){function t(t){var n=e.call(this,t||"The tax provider is unavailable.")||this;return n.name="OrderTaxProviderUnavailableError",n.type="tax_provider_unavailable",n}return(0,o.__extends)(t,e),t}(p),$r=function(){function e(e){this._requestSender=e}return e.prototype.loadOrder=function(e,t){var n=(void 0===t?{}:t).timeout,r="/api/storefront/orders/"+e,i=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.get(r,{params:{include:nr(["payments","lineItems.physicalItems.socialMedia","lineItems.physicalItems.options","lineItems.physicalItems.categories","lineItems.digitalItems.socialMedia","lineItems.digitalItems.options","lineItems.digitalItems.categories"])},headers:i,timeout:n})},e.prototype.submitOrder=function(e,t){var n=void 0===t?{}:t,r=n.headers,i=n.timeout;return this._requestSender.post("/internalapi/v1/checkout/order",{body:e,headers:(0,m.omitBy)((0,o.__assign)({"X-Checkout-Variant":r&&r.checkoutVariant},jn),m.isNil),timeout:i}).catch((function(e){if("tax_provider_unavailable"===e.body.type)throw new Xr;if("cart_has_changed"===e.body.type)throw new Jr;throw e}))},e.prototype.finalizeOrder=function(e,t){var n=(void 0===t?{}:t).timeout,r="/internalapi/v1/checkout/order/"+e;return this._requestSender.post(r,{timeout:n,headers:jn})},e}(),ei=function(){function e(e,t,n,r){var i=this;this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=r,this.initializeOffsitePayment=function(e){var t=e.methodId,n=e.gatewayId,r=e.instrumentId,o=e.target,s=e.promise,u=e.shouldSaveInstrument,c=e.shouldSetAsDefaultInstrument;return function(e){var d;r?d={formattedPayload:{bigpay_token:r}}:u&&(d={formattedPayload:{vault_payment_instrument:u,set_as_default_stored_instrument:c||null}});var p=i._paymentRequestTransformer.transform({gatewayId:n,methodId:t,paymentData:d},e.getState());return(0,S.concat)((0,S.of)((0,a.createAction)(nt.InitializeOffsitePaymentRequested)),Promise.race([i._paymentRequestSender.initializeOffsitePayment(p,o),s].filter(Boolean)).then((function(){return(0,a.createAction)(nt.InitializeOffsitePaymentSucceeded)}))).pipe((0,I.catchError)((function(e){return Qn(nt.InitializeOffsitePaymentFailed,e)})))}}}return e.prototype.submitPayment=function(e){var t=this;return function(n){return(0,S.concat)((0,S.of)((0,a.createAction)(nt.SubmitPaymentRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(t,void 0,void 0,(function(){var t,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,n.getState()))];case 1:case 4:return[2,i.sent()];case 2:return t=i.sent(),[4,this._paymentHumanVerificationHandler.handle(t)];case 3:return r=i.sent(),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform((0,o.__assign)((0,o.__assign)({},e),{additionalAction:r}),n.getState()))];case 5:return[2]}}))}))})).pipe((0,I.switchMap)((function(e){var r=e.body;return(0,S.concat)(t._orderActionCreator.loadCurrentOrder()(n),(0,S.of)((0,a.createAction)(nt.SubmitPaymentSucceeded,r)))})))).pipe((0,I.catchError)((function(e){return Qn(nt.SubmitPaymentFailed,e)})))}},e}(),ti=function(){function e(e){this._client=e}return e.prototype.submitPayment=function(e){var t=this;return new Promise((function(n,r){t._client.submitPayment(e,(function(e,i){e?r(t._transformResponse(e)):n(t._transformResponse(i))}))}))},e.prototype.initializeOffsitePayment=function(e,t){var n=this;return new Promise((function(){n._client.initializeOffsitePayment(e,null,t)}))},e.prototype._transformResponse=function(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}},e}(),ni=require("@bigcommerce/bigpay-client");function ri(e,t){var n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}const ii=function(){function e(e){this._decimalPlaces=e}return e.prototype.toInteger=function(e){return Math.round(e*Math.pow(10,this._decimalPlaces))},e}();var oi,ai=["per_item_discount","percentage_discount","per_total_discount","shipping_discount","free_shipping"];function si(e){return{code:e.code,discount:e.displayName,discountType:ai.indexOf(e.couponType)}}function ui(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function ci(e,t,n){return void 0===n&&(n="id"),Object.keys(e).reduce((function(r,i){return(0,o.__spreadArrays)(r,e[i].map((function(e){return"giftCertificates"===i?function(e,t){var n=new ii(t);return{id:e.id,imageUrl:"",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:"ItemGiftCertificateEntity",attributes:[],variantId:null}}(e,t):function(e,t,n,r){void 0===r&&(r="id");var i=new ii(n);return{id:e[r],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:i.toInteger(e.extendedListPrice),integerAmountAfterDiscount:i.toInteger(e.extendedSalePrice),integerDiscount:i.toInteger(e.discountAmount),integerUnitPrice:i.toInteger(e.listPrice),integerUnitPriceAfterDiscount:i.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map((function(e){return{name:e.name,value:e.value}})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case"physicalItems":return"ItemPhysicalEntity";case"digitalItems":return"ItemDigitalEntity";case"giftCertificates":return"ItemGiftCertificateEntity";default:return""}}(i),t,n)})))}),[])}function di(e){var t,n,r=e.cart.currency.decimalPlaces,i=new ii(r);return{id:e.cart.id,items:ci(e.cart.lineItems,r),currency:e.cart.currency.code,coupon:{discountedAmount:(0,m.reduce)(e.cart.coupons,(function(e,t){return e+t.discountedAmount}),0),coupons:e.cart.coupons.map(si)},discount:{amount:e.cart.discountAmount,integerAmount:i.toInteger(e.cart.discountAmount)},discountNotifications:(t=e.promotions,n=[],(t||[]).forEach((function(e){(e.banners||[]).forEach((function(e){n.push({placeholders:[],discountType:null,message:"",messageHtml:e.text})}))})),n),giftCertificate:{totalDiscountedAmount:(0,m.reduce)(e.giftCertificates,(function(e,t){return e+t.used}),0),appliedGiftCertificates:(0,m.keyBy)(e.giftCertificates.map(ui),"code")},shipping:{amount:e.shippingCostTotal,integerAmount:i.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(e.shippingCostBeforeDiscount),required:(0,m.some)(e.cart.lineItems.physicalItems,(function(e){return e.isShippingRequired}))},subtotal:{amount:e.subtotal,integerAmount:i.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:i.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:i.toInteger(e.grandTotal)}}}!function(e){e.APPLEPAY="applepay",e.AMAZON_PAY_V2="amazonpay",e.BRAINTREE_PAYPAL="braintreepaypal",e.BRAINTREE_VENMO="braintreevenmo",e.BRAINTREE_PAYPAL_CREDIT="braintreepaypalcredit",e.GOOGLEPAY_ADYENV2="googlepayadyenv2",e.GOOGLEPAY_ADYENV3="googlepayadyenv3",e.GOOGLEPAY_AUTHORIZENET="googlepayauthorizenet",e.GOOGLEPAY_BNZ="googlepaybnz",e.GOOGLEPAY_BRAINTREE="googlepaybraintree",e.GOOGLEPAY_CHECKOUTCOM="googlepaycheckoutcom",e.GOOGLEPAY_CYBERSOURCEV2="googlepaycybersourcev2",e.GOOGLEPAY_ORBITAL="googlepayorbital",e.GOOGLEPAY_STRIPE="googlepaystripe",e.GOOGLEPAY_STRIPEUPE="googlepaystripeupe",e.GOOGLEPAY_WORLDPAYACCESS="googlepayworldpayaccess",e.MASTERPASS="masterpass",e.PAYPALEXPRESS="paypalexpress"}(oi||(oi={}));const pi=oi;function li(e,t){var n=e.firstName||t.firstName||"",r=e.lastName||t.lastName||"";return{addresses:(e.addresses||[]).map((function(e){return ri(e)})),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||"",firstName:n,lastName:r,name:e.fullName||[n,r].join(" "),customerGroupName:e.customerGroup&&e.customerGroup.name}}const hi=function(){function e(){}return e.prototype.format=function(e){var t=e.split(new RegExp("\\s*/\\s*")),n=t[0],r=void 0===n?"":n,i=t[1],o=void 0===i?"":i,a=r.slice(0,2),s=4===o.length?o.slice(-2):o?o.slice(0,2):r.slice(2);return e.length<2?r:e.length>3&&!s?a:a+" / "+s},e.prototype.toObject=function(e){var t=e.split(new RegExp("\\s*/\\s*")),n=t[0],r=void 0===n?"":n,i=t[1],o=void 0===i?"":i;return/^\d+$/.test(r)&&/^\d+$/.test(o)?{month:1===r.length?"0"+r:r.slice(0,2),year:2===o.length?"20"+o:o.slice(0,4)}:{month:"",year:""}},e}(),fi=require("card-validator"),mi=function(){function e(){}return e.prototype.format=function(e){var t=(0,fi.number)(e).card;if(!t)return e;var n=(0,m.max)((0,fi.creditCardType)(e).map((function(e){return(0,m.max)(e.lengths)}))),r=this.unformat(e).slice(0,n);return t.gaps.filter((function(e){return r.length>e})).reduce((function(e,t,n){return[e.slice(0,t+n),e.slice(t+n)].join(" ")}),r)},e.prototype.unformat=function(e){return(0,fi.number)(e).card?e.replace(new RegExp(" ","g"),""):e},e}();function gi(e,t){void 0===t&&(t={});var n,r,i=e.currency.decimalPlaces,o=new ii(i);return{id:e.orderId,items:ci(e.lineItems,e.currency.decimalPlaces,"productId"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:_i(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:o.toInteger(e.baseAmount)},coupon:{discountedAmount:(0,m.reduce)(e.coupons,(function(e,t){return e+t.discountedAmount}),0),coupons:e.coupons.map(si)},discount:{amount:e.discountAmount,integerAmount:o.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:(n=e.payments,r=(0,m.filter)(n,{providerId:"giftcertificate"}),{totalDiscountedAmount:(0,m.reduce)(r,(function(e,t){return t.amount+e}),0),appliedGiftCertificates:(0,m.keyBy)(r.map((function(e){return{code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:""}}})),"code")}),socialData:Ci(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:o.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:o.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:yi(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:o.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:o.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function yi(e){var t=(0,m.find)(e,{providerId:"storecredit"});return t?t.amount:0}function _i(e,t){void 0===t&&(t={});var n,r=(0,m.find)(e,vi);return r?{id:r.providerId,status:(n=r.detail.step,"PAYMENT_STATUS_"+n),helpText:r.detail.instructions,returnUrl:t.returnUrl}:{}}function vi(e){return"giftcertificate"!==e.providerId&&"storecredit"!==e.providerId}function Ci(e){var t={};return(0,o.__spreadArrays)(e.lineItems.physicalItems,e.lineItems.digitalItems).forEach((function(e){var n;t[e.id]=(n=e,["fb","tw","gp"].reduce((function(e,t){var r=n.socialMedia&&(0,m.find)(n.socialMedia,(function(e){return e.code===t}));return r?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},e):e}),{}))})),t}function Si(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}const Ii=function(){function e(){this._cardExpiryFormatter=new hi,this._cardNumberFormatter=new mi}return e.prototype.transform=function(e,t){var n,r=t.billingAddress.getBillingAddress(),i=t.checkout.getCheckout(),a=t.customer.getCustomer(),s=t.order.getOrder(),u=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),c=this._mapShippingAddress(t,u),d=t.consignments.getConsignments(),p=t.consignments.getShippingOption(),l=t.config.getStoreConfig(),h=t.config.getContextConfig(),f=t.instruments.getInstrumentsMeta(),g=t.paymentMethods.getPaymentMethodsMeta(),y=t.order.getOrderMeta(),_=a&&r&&li(a,r),v=f&&e.paymentData&&(jr(e.paymentData)||(n=e.paymentData.formattedPayload)&&("string"==typeof n.bigpay_token||Boolean(n.bigpay_token&&n.bigpay_token.token)))?t.payment.getPaymentToken()+", "+f.vaultAccessToken:t.payment.getPaymentToken();if(!v)throw new Pn(bn.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:v,customer:_,billingAddress:r&&ri(r),shippingAddress:c&&ri(c,d),shippingOption:p&&Si(p,!0),cart:i&&di(i),order:s&&gi(s,y),orderMeta:y,payment:e.paymentData,paymentMethod:u&&this._transformPaymentMethod(u),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},g),{geoCountryCode:h&&h.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:(0,m.pick)(l&&l.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},e.prototype.transformWithHostedFormData=function(e,t,n){var r=t.additionalAction,i=t.authToken,a=t.checkout,s=t.config,u=t.order,c=t.orderMeta,d=t.payment,p=void 0===d?{}:d,l=t.paymentMethod,h=t.paymentMethodMeta,f=a&&a.consignments[0],g=f&&f.shippingAddress,y=f&&f.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:l&&this._transformPaymentMethod(l),customer:u&&u.billingAddress&&a&&li(a.customer,u.billingAddress),billingAddress:u&&u.billingAddress&&ri(u.billingAddress),shippingAddress:g&&a&&ri(g,a.consignments),shippingOption:y&&Si(y,!0),cart:a&&di(a),order:u&&gi(u,c),orderMeta:c,payment:this._transformHostedInputValues(e,p,n),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},h),{geoCountryCode:s&&s.context.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:s&&(0,m.pick)(s.storeConfig.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},e.prototype._transformPaymentMethod=function(e){return"multi-option"!==e.method||e.gateway?e.initializationData&&e.initializationData.gateway?(0,o.__assign)((0,o.__assign)({},e),{id:e.initializationData.gateway}):e.id===pi.BRAINTREE_VENMO?(0,o.__assign)((0,o.__assign)({},e),{id:pi.BRAINTREE_PAYPAL}):e:(0,o.__assign)((0,o.__assign)({},e),{gateway:e.id})},e.prototype._transformHostedInputValues=function(e,t,n){return"instrumentId"in t?(0,o.__assign)((0,o.__assign)({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):(0,o.__assign)((0,o.__assign)({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||""),ccName:e.cardName||"",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||""),hostedFormNonce:n})},e.prototype._mapShippingAddress=function(e,t){var n,r,i,o;if(t){var a=null===(r=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,s=null===(o=null===(i=t.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,u=e.consignments.getConsignments(),c=null==u?void 0:u.every((function(e){return e.selectedPickupOption}));if(a&&c&&"none"===s)return}return e.shippingAddress.getShippingAddress()},e}();var Ei;!function(e){e.AvailableShippingOptions="consignments.availableShippingOptions",e.PhysicalItemsCategoryNames="cart.lineItems.physicalItems.categoryNames",e.DigitalItemsCategoryNames="cart.lineItems.digitalItems.categoryNames"}(Ei||(Ei={}));const wi=function(){function e(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}return e.prototype.unassignItemsByAddress=function(e,t){var n=this;return function(r){var i=r.getState();if(!i.checkout.getCheckout())throw new Pn(bn.MissingCheckout);var o=n._consignmentHasAddress(e)?e.address:e.shippingAddress,a=i.consignments.getConsignmentByAddress(o);if(!a)throw new Sr("No consignment found for the specified address");var s=n._removeLineItems(e.lineItems,a,i.cart.getCart());return s.length?n.updateConsignment({id:a.id,address:o,lineItems:s},t)(r):n.deleteConsignment(a.id,t)(r)}},e.prototype.assignItemsByAddress=function(e,t){var n=this;return function(r){var i=r.getState(),o=n._consignmentHasAddress(e)?e.address:e.shippingAddress,a=i.consignments.getConsignmentByAddress(o);return n._createOrUpdateConsignment({id:a&&a.id,address:o,lineItems:n._addLineItems(e.lineItems,a,i.cart.getCart())},t)(r)}},e.prototype.selectShippingOption=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState(),s=o.checkout.getCheckout(),u=o.consignments.getConsignments();if(!s)throw new Pn(bn.MissingCheckout);if(!u||!u.length)throw new Pn(bn.MissingConsignments);var c={id:u[0].id,shippingOptionId:e},d={id:u[0].id};i.next((0,a.createAction)(x.UpdateShippingOptionRequested,void 0,d)),n._consignmentRequestSender.updateConsignment(s.id,c,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.UpdateShippingOptionSucceeded,t,d)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.UpdateShippingOptionFailed,e,d))}))}))}},e.prototype.loadShippingOptions=function(e){var t=this;return function(n){return S.Observable.create((function(r){var i=n.getState().checkout.getCheckout();if(!i)throw new Pn(bn.MissingCheckout);r.next((0,a.createAction)(x.LoadShippingOptionsRequested)),t._checkoutRequestSender.loadCheckout(i.id,(0,o.__assign)((0,o.__assign)({},e),{params:{include:[Ei.AvailableShippingOptions]}})).then((function(e){var t=e.body;r.next((0,a.createAction)(x.LoadShippingOptionsSucceeded,t)),r.complete()})).catch((function(e){r.error((0,a.createErrorAction)(x.LoadShippingOptionsFailed,e))}))}))}},e.prototype.updateAddress=function(e,t){var n=this;return function(r){var i=n._getUpdateAddressRequestBody(e,r),o=r.getState().consignments.getConsignments();return o&&o.length&&(i.id=o[0].id),n._createOrUpdateConsignment(i,t)(r)}},e.prototype.createConsignments=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new Pn(bn.MissingCheckout);i.next((0,a.createAction)(x.CreateConsignmentsRequested)),n._consignmentRequestSender.createConsignments(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.CreateConsignmentsSucceeded,t)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.CreateConsignmentsFailed,e))}))}))}},e.prototype.updateConsignment=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new Pn(bn.MissingCheckout);var s={id:e.id};i.next((0,a.createAction)(x.UpdateConsignmentRequested,void 0,s)),n._consignmentRequestSender.updateConsignment(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.UpdateConsignmentSucceeded,t,s)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.UpdateConsignmentFailed,e,s))}))}))}},e.prototype.deleteConsignment=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout(),s={id:e};if(!o||!o.id)throw new Pn(bn.MissingCheckout);i.next((0,a.createAction)(x.DeleteConsignmentRequested,void 0,s)),n._consignmentRequestSender.deleteConsignment(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.DeleteConsignmentSucceeded,t,s)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.DeleteConsignmentFailed,e,s))}))}))}},e.prototype.updateShippingOption=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new Pn(bn.MissingCheckout);var s={id:e.id};i.next((0,a.createAction)(x.UpdateShippingOptionRequested,void 0,s)),n._consignmentRequestSender.updateConsignment(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.UpdateShippingOptionSucceeded,t,s)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.UpdateShippingOptionFailed,e,s))}))}))}},e.prototype._createOrUpdateConsignment=function(e,t){var n=this;return function(r){var i=r.getState().checkout.getCheckout();if(!i||!i.id)throw new Pn(bn.MissingCheckout);return n._isUpdateConsignmentRequest(e)?n.updateConsignment(e,t)(r):n.createConsignments([e],t)(r)}},e.prototype._getUpdateAddressRequestBody=function(e,t){var n=t.getState().cart.getCart();if(!n)throw new Pn(bn.MissingCart);var r=n.lineItems,i=r.physicalItems,a=r.customItems,s=void 0===a?[]:a;return{address:e,lineItems:(0,o.__spreadArrays)(i,s).map((function(e){return{itemId:e.id,quantity:e.quantity}}))}},e.prototype._removeLineItems=function(e,t,n){if(!n)throw new Pn(bn.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map((function(t){var n=(0,m.find)(e,(function(e){return e.itemId===t.itemId}));return(0,o.__assign)((0,o.__assign)({},t),{quantity:n?t.quantity-n.quantity:t.quantity})})).filter((function(e){return e.quantity>0}))},e.prototype._addLineItems=function(e,t,n){if(!t)return e;if(!n)throw new Pn(bn.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter((function(e){return e.quantity>0}))},e.prototype._hydrateLineItems=function(e,t){return e.map((function(e){var n=(0,m.find)(t.lineItems.physicalItems,(function(t){return t.id===e}));return{itemId:e,quantity:n?n.quantity:0}}))},e.prototype._isUpdateConsignmentRequest=function(e){return!!e.id},e.prototype._consignmentHasAddress=function(e){return"object"==typeof e&&"address"in e},e}();var Ai=["consignments.availableShippingOptions","cart.lineItems.physicalItems.options","cart.lineItems.digitalItems.options","customer","promotions.banners"];const bi=function(){function e(e){this._requestSender=e}return e.prototype.createConsignments=function(e,t,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,s=(void 0===a?{}:a).include,u="/api/storefront/checkouts/"+e+"/consignments",c=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post(u,{body:t,params:{include:rr(Ai,s)},headers:c,timeout:i})},e.prototype.updateConsignment=function(e,t,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,s=(void 0===a?{}:a).include,u=t.id,c=(0,o.__rest)(t,["id"]),d="/api/storefront/checkouts/"+e+"/consignments/"+u,p=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.put(d,{body:c,params:{include:rr(Ai,s)},headers:p,timeout:i})},e.prototype.deleteConsignment=function(e,t,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+e+"/consignments/"+t,a=(0,o.__assign)({Accept:Vn.JsonV1},jn),s=nr(Ai);return this._requestSender.delete(i,{params:{include:s},headers:a,timeout:r})},e}(),Pi=function(){function e(e,t){this._googleRecaptcha=e,this._requestSender=t}return e.prototype.initialize=function(e){var t=this;return function(n){return(0,S.concat)((0,S.of)((0,a.createAction)(mn.InitializeRequested,void 0)),(0,S.defer)((function(){return(0,o.__awaiter)(t,void 0,void 0,(function(){var t,r,i,s,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return t=e?e.containerId:"spamProtectionContainer",e||document.getElementById(t)||((r=document.createElement("div")).setAttribute("id",t),document.body.appendChild(r)),i=n.getState(),s=i.config.getStoreConfigOrThrow(),u=s.checkoutSettings.googleRecaptchaSitekey,[4,this._googleRecaptcha.load(t,u)];case 1:return o.sent(),[2,(0,a.createAction)(mn.InitializeSucceeded)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(mn.InitializeFailed,e)})))}},e.prototype.verifyCheckoutSpamProtection=function(){var e=this;return function(t){return(0,S.defer)((function(){var n=t.getState().checkout.getCheckout();if(!n)throw new Pn(bn.MissingCheckout);return(0,S.concat)((0,S.of)((0,a.createAction)(mn.VerifyCheckoutRequested)),(0,S.from)(e.execute()(t)).pipe((0,I.switchMap)((function(t){return lr(t)&&t.payload?(0,S.from)(e._requestSender.validate(n.id,t.payload.token)).pipe((0,I.switchMap)((function(e){var n=e.body;return(0,S.concat)((0,S.of)(t),(0,S.of)((0,a.createAction)(mn.VerifyCheckoutSucceeded,n)))}))):(0,S.of)(t)})))).pipe((0,I.catchError)((function(e){return Qn(mn.VerifyCheckoutFailed,e)})))}))}},e.prototype.execute=function(){var e=this;return function(t){return(0,S.concat)((0,S.of)((0,a.createAction)(mn.ExecuteRequested)),e.initialize()(t),e._googleRecaptcha.execute().pipe((0,I.take)(1)).pipe((0,I.switchMap)((function(t){var n=t.error,r=t.token;return(0,o.__awaiter)(e,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){if(n instanceof Or)throw n;if(n||!r)throw new Nr;return[2,(0,a.createAction)(mn.ExecuteSucceeded,{token:r})]}))}))})))).pipe((0,I.catchError)((function(e){return Qn(mn.ExecuteFailed,e)})))}},e}(),Oi=function(){function e(e){this._requestSender=e}return e.prototype.validate=function(e,t,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+e+"/spam-protection",a=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post(i,{body:{token:t},headers:a,timeout:r})},e}(),Ti=function(){function e(e){this._storeCreditRequestSender=e}return e.prototype.applyStoreCredit=function(e,t){var n=this;return function(r){return(0,S.concat)((0,S.of)((0,a.createAction)(on.ApplyStoreCreditRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n,i,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=r.getState(),!(i=n.checkout.getCheckout()))throw new Pn(bn.MissingCheckout);return[4,e?this._storeCreditRequestSender.applyStoreCredit(i.id,t):this._storeCreditRequestSender.removeStoreCredit(i.id,t)];case 1:return s=o.sent().body,[2,(0,a.createAction)(on.ApplyStoreCreditSucceeded,s)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(on.ApplyStoreCreditFailed,e)})))}},e}(),Ri=function(){function e(e){this._requestSender=e}return e.prototype.applyStoreCredit=function(e,t){var n=(void 0===t?{}:t).timeout,r="/api/storefront/checkouts/"+e+"/store-credit",i=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:nr(ir)}})},e.prototype.removeStoreCredit=function(e,t){var n=(void 0===t?{}:t).timeout,r="/api/storefront/checkouts/"+e+"/store-credit",i=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:nr(ir)}})},e}(),Mi=function(e){function t(t){var n=e.call(this,t)||this;return n.name="UpdateSubscriptionsError",n.type="update_subscriptions",n}return(0,o.__extends)(t,e),t}(h),Di=function(){function e(e){this._subscriptionsRequestSender=e}return e.prototype.updateSubscriptions=function(e,t){var n=this;return(0,S.concat)((0,S.of)((0,a.createAction)(A.UpdateSubscriptionsRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._subscriptionsRequestSender.updateSubscriptions(e,t)];case 1:return n=r.sent().body,[2,(0,a.createAction)(A.UpdateSubscriptionsSucceeded,n)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(A.UpdateSubscriptionsFailed,new Mi(e))})))},e}(),ki=function(){function e(e){this._requestSender=e}return e.prototype.updateSubscriptions=function(e,t){var n=(void 0===t?{}:t).timeout,r=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post("/api/storefront/subscriptions",{body:e,headers:r,timeout:n})},e}();var Ni=(0,m.memoize)((function(e){return Array.isArray(e)?e.map((function(e){return Li(e)})):U(e)?Object.keys(e).reduce((function(t,n){var r;return(0,o.__assign)((0,o.__assign)({},t),((r={})[n]=Li(e[n]),r))}),{}):e}));Ni.cache=new WeakMap;var Li=function(e){return"object"==typeof e&&null!==e?Ni(e):e};function zi(e){return function(){for(var t=[],n=0;n55?55:e<25?25:e}function Qo(e){var t=e.billingAddress,n=e.email,r=e.firstName,i=e.lastName,o=e.phone,a=e.shippingAddress,s=t||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function Zo(e){var t=e.email,n=e.phone,r=e.shippingAddress,i=((null==r?void 0:r.recipientName)||"").split(" ");return{email:t,first_name:i[0]||"",last_name:i[1]||"",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}const Jo=function(){function e(e,t,n,r,i,o){this._store=e,this._checkoutActionCreator=t,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return e.prototype.initialize=function(e){var t,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s,u,c,d,p,l,h,f,m,g=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=e.braintreepaypal,i=e.containerId,a=e.methodId,u=(s=r||{}).messagingContainerId,c=s.onError,!a)throw new Sr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Sr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Sr('Unable to initialize payment because "options.braintreepaypal" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(d=this._store.getState(),p=d.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Sr('Unable to initialize payment because "options.braintreepaypal.currencyCode" argument is not provided.');return l=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:d=o.sent(),p=d.paymentMethods.getPaymentMethodOrThrow(a),l=d.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!p.clientToken)throw new Pn(bn.MissingPaymentMethod);return h={currency:l,intent:null===(t=p.initializationData)||void 0===t?void 0:t.intent,isCreditEnabled:null===(n=p.initializationData)||void 0===n?void 0:n.isCreditEnabled},f=function(e){g._renderPayPalComponents(e,r,i,a,Boolean(p.config.testMode))},m=function(e){return g._handleError(e,i,u,c)},this._braintreeSDKCreator.initialize(p.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(h,f,m)];case 4:return o.sent(),[2]}}))}))},e.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},e.prototype._renderPayPalComponents=function(e,t,n,r,i){var o=t.messagingContainerId;this._renderPayPalMessages(o),this._renderPayPalButton(e,t,n,r,i)},e.prototype._renderPayPalButton=function(e,t,n,r,i){var o=this,a=t.style,s=t.shouldProcessPayment,u=t.onAuthorizeError,c=this._window.paypal,d=null==c?void 0:c.FUNDING.PAYPAL;if(c&&d){var p=a?Wo(a):{},l=c.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:d,style:p,createOrder:function(){return o._setupPayment(e,t,r)},onApprove:function(t){return o._tokenizePayment(t,e,r,s,u)}});l.isEligible()&&l.render("#"+n)}else this._removeElement(n)},e.prototype._renderPayPalMessages=function(e){var t=e&&Boolean(document.getElementById(e)),n=this._window.paypal;if(n&&t){var r=this._store.getState().cart.getCartOrThrow();n.Messages({amount:r.cartAmount,placement:"cart"}).render("#"+e)}else this._removeElement(e)},e.prototype._setupPayment=function(e,t,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,s,u,c,d,p,l,h,f,m,g,y;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=t.buyNowInitializeOptions,s=t.shippingAddress,u=t.onPaymentError,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:a})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return p=c.customer.getCustomer(),l=c.paymentMethods.getPaymentMethodOrThrow(n),h=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,f=null!==(r=t.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,m=s||(null==p?void 0:p.addresses[0]),g=m?jo(m):void 0,[4,e.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:g,amount:h,currency:f,offerCredit:!1,intent:null===(i=l.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw y=o.sent(),u&&u(y),y;case 8:return[2]}}))}))},e.prototype._createBuyNowCart=function(e){var t=e.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new Pn(bn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._tokenizePayment=function(e,t,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var s,u,c,d,p,l;return(0,o.__generator)(this,(function(h){switch(h.label){case 0:return h.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return s=h.sent().deviceData,[4,t.tokenizePayment(e)];case 2:return u=h.sent(),c=u.details,d=u.nonce,p=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:s,billing_address:JSON.stringify(Qo(c)),shipping_address:JSON.stringify(Zo(c))},p&&{cart_id:p})),[2,u];case 3:throw l=h.sent(),i&&i(l),l;case 4:return[2]}}))}))},e.prototype._handleError=function(e,t,n,r){this._removeElement(t),this._removeElement(n),r&&r(e)},e.prototype._removeElement=function(e){var t=e&&document.getElementById(e);t&&t.remove()},e}();var Xo,$o,ea,ta,na;!function(e){e.HORIZONTAL="horizontal",e.VERTICAL="vertical"}(Xo||(Xo={})),function(e){e.SMALL="small",e.MEDIUM="medium",e.LARGE="large",e.RESPONSIVE="responsive"}($o||($o={})),function(e){e.GOLD="gold",e.BLUE="blue",e.SIlVER="silver",e.BLACK="black"}(ea||(ea={})),function(e){e.CHECKOUT="checkout",e.PAY="pay",e.BUYNOW="buynow",e.PAYPAL="paypal",e.CREDIT="credit"}(ta||(ta={})),function(e){e.PILL="pill",e.RECT="rect"}(na||(na={}));const ra=function(){function e(e,t,n,r,i,o){this._store=e,this._checkoutActionCreator=t,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return e.prototype.initialize=function(e){var t,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s,u,c,d,p,l,h=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=e.braintreepaypalcredit,i=e.containerId,!(a=e.methodId))throw new Sr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Sr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Sr('Unable to initialize payment because "options.braintreepaypalcredit" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(s=this._store.getState(),u=s.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Sr('Unable to initialize payment because "options.braintreepaypalcredit.currencyCode" argument is not provided.');return c=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:s=o.sent(),u=s.paymentMethods.getPaymentMethodOrThrow(a),c=s.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!u.clientToken)throw new Pn(bn.MissingPaymentMethod);return d={currency:c,intent:null===(t=u.initializationData)||void 0===t?void 0:t.intent,isCreditEnabled:null===(n=u.initializationData)||void 0===n?void 0:n.isCreditEnabled},p=function(e){return h._renderPayPalButton(e,r,i,a,Boolean(u.config.testMode))},l=function(e){return h._handleError(e,i,r.onError)},this._braintreeSDKCreator.initialize(u.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(d,p,l)];case 4:return o.sent(),[2]}}))}))},e.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},e.prototype._renderPayPalButton=function(e,t,n,r,i){var a=this,s=t.style,u=t.shouldProcessPayment,c=t.onAuthorizeError,d=this._window.paypal,p=!1;if(d){var l=[d.FUNDING.PAYLATER,d.FUNDING.CREDIT],h=s?Wo(s):{};l.forEach((function(s){var l=s===d.FUNDING.CREDIT?(0,o.__assign)({label:ta.CREDIT},h):h;if(!p){var f=d.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:s,style:l,createOrder:function(){return a._setupPayment(e,t,r)},onApprove:function(t){return a._tokenizePayment(t,e,r,u,c)}});f.isEligible()&&(f.render("#"+n),p=!0)}}))}d&&p||this._removeElement(n)},e.prototype._setupPayment=function(e,t,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,s,u,c,d,p,l,h,f,m,g,y;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=t.onPaymentError,s=t.shippingAddress,u=t.buyNowInitializeOptions,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:u})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return p=c.customer.getCustomer(),l=c.paymentMethods.getPaymentMethodOrThrow(n),h=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,f=null!==(r=t.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,m=s||(null==p?void 0:p.addresses[0]),g=m?jo(m):void 0,[4,e.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:g,amount:h,currency:f,offerCredit:!0,intent:null===(i=l.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw y=o.sent(),a&&a(y),y;case 8:return[2]}}))}))},e.prototype._createBuyNowCart=function(e){var t=e.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new Pn(bn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._tokenizePayment=function(e,t,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var s,u,c,d,p,l;return(0,o.__generator)(this,(function(h){switch(h.label){case 0:return h.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return s=h.sent().deviceData,[4,t.tokenizePayment(e)];case 2:return u=h.sent(),c=u.details,d=u.nonce,p=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:s,billing_address:JSON.stringify(Qo(c)),shipping_address:JSON.stringify(Zo(c))},p&&{cart_id:p})),[2,u];case 3:throw l=h.sent(),i&&i(l),l;case 4:return[2]}}))}))},e.prototype._handleError=function(e,t,n){this._removeElement(t),n&&n(e)},e.prototype._removeElement=function(e){var t=e&&document.getElementById(e);t&&t.remove()},e}();var ia={backgroundColor:"#3D95CE",backgroundPosition:"50% 50%",backgroundSize:"80px auto",backgroundImage:'url("/app/assets/img/payment-providers/venmo-logo-white.svg")',backgroundRepeat:"no-repeat",borderRadius:"4px",cursor:"pointer",transition:"0.2s ease",minHeight:"40px",minWidth:"150px",height:"100%",width:"100%"};const oa=function(){function e(e,t,n,r,i){this._store=e,this._paymentMethodActionCreator=t,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._onError=m.noop}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.braintreevenmo,n=e.containerId,!(r=e.methodId))throw new Sr('Unable to initialize payment because "options.methodId" argument is not provided.');return[4,this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(r))];case 1:if(i=o.sent(),!(a=i.paymentMethods.getPaymentMethodOrThrow(r)).clientToken)throw new Pn(bn.MissingPaymentMethod);if(!n)throw new Sr('Unable to initialize payment because "options.containerId" argument is not provided.');return this._onError=(null==t?void 0:t.onError)||this._handleError,this._braintreeSDKCreator.initialize(a.clientToken),[4,this._braintreeSDKCreator.getVenmoCheckout((function(e){return s._handleInitializationVenmoSuccess(e,n,null==t?void 0:t.buyNowInitializeOptions)}),(function(e){return s._handleInitializationVenmoError(e,n)}))];case 2:return o.sent(),[2]}}))}))},e.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},e.prototype._handleError=function(e){throw new Error(e.message)},e.prototype._handleInitializationVenmoSuccess=function(e,t,n){return this._renderVenmoButton(e,t,n)},e.prototype._handleInitializationVenmoError=function(e,t){return this._removeVenmoContainer(t),this._onError(e)},e.prototype._removeVenmoContainer=function(e){var t=document.getElementById(e);t&&t.remove()},e.prototype._renderVenmoButton=function(e,t,n){var r=this,i=document.getElementById(t);if(!i)throw new Sr("Unable to create wallet button without valid container ID.");i.setAttribute("aria-label","Venmo"),Object.assign(i.style,ia),i.addEventListener("click",(function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var t,r=this;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return i.setAttribute("disabled","true"),[4,this._createBuyNowCart(n)];case 1:return t=a.sent(),e.tokenize&&e.tokenize((function(e,n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return i.removeAttribute("disabled"),e?[2,this._onError(e)]:[4,this._handlePostForm(n,null==t?void 0:t.id)];case 1:return r.sent(),[2]}}))}))})),[2]}}))}))})),i.addEventListener("mouseenter",(function(){i.style.backgroundColor="#0a7fc2"})),i.addEventListener("mouseleave",(function(){i.style.backgroundColor=ia.backgroundColor}))},e.prototype._createBuyNowCart=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new Pn(bn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._handlePostForm=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return[4,this._braintreeSDKCreator.getDataCollector()];case 1:return n=a.sent().deviceData,r=e.nonce,i=e.details,this._formPoster.postForm("/checkout.php",(0,o.__assign)({nonce:r,provider:pi.BRAINTREE_VENMO,payment_type:"paypal",device_data:n,action:"set_external_checkout",billing_address:JSON.stringify(Qo(i)),shipping_address:JSON.stringify(Zo(i))},t&&{cart_id:t})),[2]}}))}))},e}();const aa=function(e){function t(t){var n=e.call(this,t||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(t,e),t}(s);var sa;!function(e){e[e.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",e[e.CustomerNotInitialized=1]="CustomerNotInitialized",e[e.PaymentNotInitialized=2]="PaymentNotInitialized",e[e.ShippingNotInitialized=3]="ShippingNotInitialized",e[e.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(sa||(sa={}));const ua=function(e){function t(t){var n=e.call(this,function(e){switch(e){case sa.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case sa.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case sa.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case sa.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(t))||this;return n.subtype=t,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(t,e),t}(s);var ca;!function(e){e[e.MissingBillingAddress=0]="MissingBillingAddress",e[e.MissingCart=1]="MissingCart",e[e.MissingCheckout=2]="MissingCheckout",e[e.MissingConsignments=3]="MissingConsignments",e[e.MissingCustomer=4]="MissingCustomer",e[e.MissingCheckoutConfig=5]="MissingCheckoutConfig",e[e.MissingOrder=6]="MissingOrder",e[e.MissingOrderConfig=7]="MissingOrderConfig",e[e.MissingOrderId=8]="MissingOrderId",e[e.MissingPayment=9]="MissingPayment",e[e.MissingPaymentId=10]="MissingPaymentId",e[e.MissingPaymentInstrument=11]="MissingPaymentInstrument",e[e.MissingPaymentMethod=12]="MissingPaymentMethod",e[e.MissingPaymentRedirectUrl=13]="MissingPaymentRedirectUrl",e[e.MissingPaymentStatus=14]="MissingPaymentStatus",e[e.MissingPaymentToken=15]="MissingPaymentToken",e[e.MissingShippingAddress=16]="MissingShippingAddress"}(ca||(ca={}));const da=function(e){function t(t){var n=e.call(this,function(e){switch(e){case ca.MissingBillingAddress:return"Unable to proceed because billing address data is unavailable.";case ca.MissingCart:return"Unable to proceed because cart data is unavailable.";case ca.MissingConsignments:return"Unable to proceed because consignments data is unavailable.";case ca.MissingCheckout:return"Unable to proceed because checkout data is unavailable.";case ca.MissingCustomer:return"Unable to proceed because customer data is unavailable.";case ca.MissingCheckoutConfig:case ca.MissingOrderConfig:return"Unable to proceed because configuration data is unavailable.";case ca.MissingOrder:return"Unable to proceed because order data is unavailable.";case ca.MissingOrderId:return"Unable to proceed because order ID is unavailable or not generated yet.";case ca.MissingPayment:return"Unable to proceed because payment data is unavailable.";case ca.MissingPaymentToken:return"Unable to proceed because the token required to submit a payment is missing.";case ca.MissingPaymentMethod:return"Unable to proceed because payment method data is unavailable or not properly configured.";case ca.MissingShippingAddress:return"Unable to proceed because shipping address data is unavailable.";default:return"Unable to proceed because the required data is unavailable."}}(t))||this;return n.subtype=t,n.name="MissingDataError",n.type="missing_data",n}return(0,o.__extends)(t,e),t}(s),pa=function(){function e(e,t,n,r,i){this._store=e,this._formPoster=t,this._checkoutActionCreator=n,this._googlePayPaymentProcessor=r,this._cartRequestSender=i}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.containerId,n=e.methodId,r=e.currencyCode,i=this._getGooglePayOptions(e),a=i.buyNowInitializeOptions,!t||!n)throw new aa('Unable to proceed because "containerId" argument is not provided.');if(s=this._store.getState(),u=s.paymentMethods.getPaymentMethod(n),c=((null==u?void 0:u.config)||{}).testMode,this._methodId=n,this._isBuyNowFlow=!!a,!this._isBuyNowFlow)return[3,2];if(!r)throw new aa('Unable to initialize payment because "options.currencyCode" argument is not provided.');return d=i.buyNowInitializeOptions,this._googlePayPaymentProcessor.updateBuyNowFlowFlag(this._isBuyNowFlow),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId(),this._getGooglePayClientOptions(r,c,d))];case 1:return o.sent(),[3,5];case 2:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 3:return o.sent(),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId())];case 4:o.sent(),o.label=5;case 5:return this._walletButton=this._createSignInButton(t,i,r),[2]}}))}))},e.prototype.deinitialize=function(){return this._walletButton&&this._walletButton.parentNode&&(this._walletButton.parentNode.removeChild(this._walletButton),this._walletButton=void 0),this._googlePayPaymentProcessor.deinitialize()},e.prototype._getGooglePayClientOptions=function(e,t,n){var r=this;return{environment:t?"TEST":"PRODUCTION",paymentDataCallbacks:{onPaymentDataChanged:function(t){var i=t.callbackTrigger;return(0,o.__awaiter)(r,void 0,void 0,(function(){var t,r,a,s,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(i!==go.INITIALIZE)return[2];o.label=1;case 1:return o.trys.push([1,5,,6]),t=this,[4,this._createBuyNowCart(n)];case 2:return t._buyNowCart=o.sent(),this._buyNowCart?(r=this._buyNowCart,a=r.id,s=r.cartAmount,[4,this._store.dispatch(this._checkoutActionCreator.loadCheckout(a))]):[3,4];case 3:return o.sent(),[2,{newTransactionInfo:{currencyCode:e,totalPrice:String(s),totalPriceStatus:yo.FINAL}}];case 4:return[3,6];case 5:throw u=o.sent(),new Go(u);case 6:return[2]}}))}))}}}},e.prototype._createSignInButton=function(e,t,n){var r=this,i=document.getElementById(e),o=t.buttonType,a=t.buttonColor;if(!i)throw new aa("Unable to create sign-in button without valid container ID.");var s=this._googlePayPaymentProcessor.createButton((function(e){return r._handleWalletButtonClick(e,n)}),o,a);return i.appendChild(s),s},e.prototype._getMethodId=function(){if(!this._methodId)throw new ua(sa.PaymentNotInitialized);return this._methodId},e.prototype._getGooglePayOptions=function(e){if(e.methodId===pi.GOOGLEPAY_ADYENV2&&e.googlepayadyenv2)return e.googlepayadyenv2;if(e.methodId===pi.GOOGLEPAY_ADYENV3&&e.googlepayadyenv3)return e.googlepayadyenv3;if(e.methodId===pi.GOOGLEPAY_AUTHORIZENET&&e.googlepayauthorizenet)return e.googlepayauthorizenet;if(e.methodId===pi.GOOGLEPAY_BNZ&&e.googlepaybnz)return e.googlepaybnz;if(e.methodId===pi.GOOGLEPAY_BRAINTREE&&e.googlepaybraintree)return e.googlepaybraintree;if(e.methodId===pi.GOOGLEPAY_CHECKOUTCOM&&e.googlepaycheckoutcom)return e.googlepaycheckoutcom;if(e.methodId===pi.GOOGLEPAY_CYBERSOURCEV2&&e.googlepaycybersourcev2)return e.googlepaycybersourcev2;if(e.methodId===pi.GOOGLEPAY_ORBITAL&&e.googlepayorbital)return e.googlepayorbital;if(e.methodId===pi.GOOGLEPAY_STRIPE&&e.googlepaystripe)return e.googlepaystripe;if(e.methodId===pi.GOOGLEPAY_STRIPEUPE&&e.googlepaystripeupe)return e.googlepaystripeupe;if(e.methodId===pi.GOOGLEPAY_WORLDPAYACCESS&&e.googlepayworldpayaccess)return e.googlepayworldpayaccess;throw new aa},e.prototype._createBuyNowCart=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new da(ca.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._handleWalletButtonClick=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:e.preventDefault(),i.label=1;case 1:return i.trys.push([1,7,,8]),this._isBuyNowFlow&&t&&this._googlePayPaymentProcessor.updatePaymentDataRequest({transactionInfo:{currencyCode:t,totalPrice:"0",totalPriceStatus:yo.ESTIMATED},callbackIntents:[_o.OFFER]}),[4,this._googlePayPaymentProcessor.displayWallet()];case 2:return n=i.sent(),[4,this._googlePayPaymentProcessor.handleSuccess(n)];case 3:return i.sent(),Xi(this._store.getState().cart.getCartOrThrow())>0&&n.shippingAddress?[4,this._googlePayPaymentProcessor.updateShippingAddress(n.shippingAddress)]:[3,5];case 4:i.sent(),i.label=5;case 5:return[4,this._onPaymentSelectComplete()];case 6:return i.sent(),[3,8];case 7:if((r=i.sent())&&"CANCELED"!==r.message)throw r;return[3,8];case 8:return[2]}}))}))},e.prototype._onPaymentSelectComplete=function(){var e,t=null===(e=this._buyNowCart)||void 0===e?void 0:e.id;this._formPoster.postForm("/checkout.php",(0,o.__assign)({headers:(0,o.__assign)({Accept:"text/html","Content-Type":"application/x-www-form-urlencoded"},jn)},t&&{action:"set_external_checkout",provider:this._methodId,cart_id:t}))},(0,o.__decorate)([Ar],e.prototype,"_handleWalletButtonClick",null),e}();var la={es:["es_es","es_mx","es_pe","es_co","es_ar","es_cl"],en:["en_us","en_gb","en_ca","en_es","en_fr","en_ie","en_sg","en_au","en_nz","en_my","en_hk","en_th","en_ae","en_sa","en_qa","en_kw","en_za"],pt:["pt_br"],zu:["zu_za"],ar:["ar_sa","ar_ae","ar_qa","ar_kw"],zh:["zh_sg","zh_hk"],ms:["ms_my"],uk:["uk_ua"],sv:["sv_se"],hr:["hr_hr"],pl:["pl_pl"],nl:["nl_be"],it:["it_it"],de:["de_de"],fr:["fr_fr","fr_ca"]};function ha(e){var t=e.replace("-","_").toLowerCase().split("_"),n=t[0],r=n+"_"+t[1],i=la[n];return i?i.indexOf(r)>-1?r:i[0]:"en_us"}const fa=function(){function e(e,t,n,r){this._store=e,this._checkoutActionCreator=t,this._masterpassScriptLoader=n,this._locale=r}return e.prototype.initialize=function(e){var t=this,n=e.containerId,r=e.methodId;if(!n||!r)throw new Sr('Unable to proceed because "containerId" argument is not provided.');return this._methodId=r,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(e){var n=e.paymentMethods.getPaymentMethod(r);if(!n||!n.initializationData.checkoutId)throw new Pn(bn.MissingPaymentMethod);var i={useMasterpassSrc:n.initializationData.isMasterpassSrcEnabled,language:ha(t._locale),testMode:n.config.testMode,checkoutId:n.initializationData.checkoutId};return t._masterpassScriptLoader.load(i)})).then((function(e){t._masterpassClient=e,t._signInButton=t._createSignInButton(n)}))},e.prototype.deinitialize=function(){return this._signInButton&&this._signInButton.parentNode&&(this._signInButton.removeEventListener("click",this._handleWalletButtonClick),this._signInButton.parentNode.removeChild(this._signInButton),this._signInButton=void 0),Promise.resolve()},e.prototype._createSignInButton=function(e){var t=document.getElementById(e),n=this._store.getState(),r=this._methodId?n.paymentMethods.getPaymentMethod(this._methodId):null,i=n.config.getStoreConfig();if(!t)throw new Error("Need a container to place the button");if(!r)throw new Pn(bn.MissingPaymentMethod);if(!i)throw new Sr("Unable to retrieve store configuration");var o=document.createElement("input");if(o.type="image",r.initializationData.isMasterpassSrcEnabled){var a=r.config.testMode?"sandbox.":"",s=r.initializationData.checkoutId,u=["locale="+ha(this._locale),"paymentmethod=master,visa,amex,discover","checkoutid="+s];o.src=["https://"+a+"src.mastercard.com/assets/img/btn/src_chk_btn_126x030px.svg",u.join("&")].join("?")}else o.src="https://static.masterpass.com/dyn/img/btn/global/mp_chk_btn_160x037px.svg";return t.appendChild(o),o.addEventListener("click",this._handleWalletButtonClick),o},e.prototype._createMasterpassPayload=function(){var e=this._store.getState(),t=e.checkout.getCheckout(),n=this._methodId?e.paymentMethods.getPaymentMethod(this._methodId):null;if(!t)throw new Pn(bn.MissingCheckout);if(!n)throw new Pn(bn.MissingPaymentMethod);return{checkoutId:n.initializationData.checkoutId,allowedCardTypes:n.initializationData.allowedCardTypes,amount:t.cart.cartAmount.toString(),currency:t.cart.currency.code,cartId:t.cart.id,callbackUrl:("cart",window.location.origin+"/checkout.php?action=set_external_checkout&provider=masterpass&gateway=stripe&origin=cart")}},e.prototype._handleWalletButtonClick=function(){if(!this._masterpassClient)throw new kr(Dr.CheckoutButtonNotInitialized);this._masterpassClient.checkout(this._createMasterpassPayload())},(0,o.__decorate)([Ar],e.prototype,"_handleWalletButtonClick",null),e}(),ma=function(){function e(e,t,n,r,i){void 0===i&&(i=""),this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=r,this._host=i}return e.prototype.initialize=function(e){var t=this,n=e.paypal,r=this._store.getState(),i=this._paymentMethod=r.paymentMethods.getPaymentMethod(e.methodId);if(!n)throw new Sr;if(!i)throw new Pn(bn.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then((function(r){var a,s,u;if(!i||!i.config.merchantId)throw new Pn(bn.MissingPaymentMethod);var c=i.config.merchantId,d=i.config.testMode?"sandbox":"production",p=((a={})[d]=n.clientId,a),l=r.FUNDING.CREDIT||"credit",h=n.allowCredit?[l]:[],f=n.allowCredit?[]:[l];return r.Button.render({env:d,client:p,commit:n.shouldProcessPayment,funding:{allowed:h,disallowed:f},style:(0,o.__assign)((0,o.__assign)({shape:na.RECT},(0,m.pick)(n.style,"layout","color","label","shape","tagline","fundingicons")),{size:"paypalexpress"===i.id&&"small"===(null===(s=n.style)||void 0===s?void 0:s.size)?$o.RESPONSIVE:null===(u=n.style)||void 0===u?void 0:u.size}),payment:function(e,r){return t._setupPayment(c,r,n.onPaymentError)},onAuthorize:function(e,r){return t._tokenizePayment(e,r,n.shouldProcessPayment,n.onAuthorizeError)}},e.containerId)}))},e.prototype.deinitialize=function(){return this._paymentMethod=void 0,Promise.resolve()},e.prototype._setupPayment=function(e,t,n){var r=this;if(!t)throw new kr(Dr.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(n){var i=n.cart.getCart(),a=i?i.id:"";return t.request.post(r._host+"/api/storefront/payment/paypalexpress",{merchantId:e,cartId:a},{headers:(0,o.__assign)({"X-API-INTERNAL":Hn},jn)})})).then((function(e){return e.id})).catch((function(e){throw n&&n(e),e}))},e.prototype._tokenizePayment=function(e,t,n,r){var i=this;if(!this._paymentMethod)throw new kr(Dr.CheckoutButtonNotInitialized);if(!t)throw new kr(Dr.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new Pn(bn.MissingPayment);var o=this._paymentMethod.id;return t.payment.get(e.paymentID).then((function(t){i._formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:o,action:n?"process_payment":"set_external_checkout",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})}))},e}();function ga(){try{return process.env.NODE_ENV||0}catch(e){return"development"}}const ya=function(){function e(e){this._console=e}return e.prototype.log=function(){for(var e=[],t=0;t0}));a.length>1&&a[0].matches===a[1].matches&&"development"===ga()&&Ca.warn("The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.");var s=a[0];if(s&&s.token)return s.token;if(this._useFallback){var u=null===(n=o.find((function(e){return e.default})))||void 0===n?void 0:n.token;if(u)return u}throw new Error("Unable to resolve to a registered token with the provided token.")},e}();function Ia(e,t){return Object.assign(e,{resolveIds:t})}const Ea=function(e){function t(t){var n=e.call(this,t||"Payment process was cancelled.")||this;return n.name="PaymentMethodCancelledError",n.type="payment_cancelled",n}return(0,o.__extends)(t,e),t}(s);const wa=function(e){function t(t){var n=e.call(this,t||"An unexpected error has occurred during buy now cart creation process. Please try again later.")||this;return n.name="BuyNowCartCreationError",n.type="buy_now_cart_creation_error",n}return(0,o.__extends)(t,e),t}(s);function Aa(e){if(!function(e){return"ApplePaySession"in e}(e))throw new Error("Apple pay is not supported")}const ba=function(){function e(){}return e.prototype.create=function(e){return Aa(window),new ApplePaySession(1,e)},e}();var Pa;!function(e){e.Subtotal="Subtotal",e.Shipping="Shipping"}(Pa||(Pa={}));const Oa=function(){function e(e,t,n){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._onAuthorizeCallback=m.noop,this._subTotalLabel=Pa.Subtotal,this._shippingLabel=Pa.Shipping}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.methodId,n=e.containerId,r=e.applepay,Aa(window),!t||!r)throw new da(ca.MissingPaymentMethod);return i=r.buttonClassName,a=r.onPaymentAuthorize,s=r.buyNowInitializeOptions,u=r.requiresShipping,this._requiresShipping=u,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=a,s?[3,2]:[4,this._paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return[4,this._paymentIntegrationService.loadPaymentMethod(t)];case 3:return o.sent(),c=this._paymentIntegrationService.getState(),this._paymentMethod=c.getPaymentMethodOrThrow(t),[4,this._paymentIntegrationService.verifyCheckoutSpamProtection()];case 4:return o.sent(),this._applePayButton=this._createButton(n,i),this._applePayButton.addEventListener("click",this._handleWalletButtonClick.bind(this)),[2,Promise.resolve()]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype._createButton=function(e,t){void 0===t&&(t="apple-pay-checkout-button");var n=document.getElementById(e);if(!n)throw new aa("Unable to create wallet button without valid container ID.");document.body.classList.add("apple-pay-supported");var r=document.createElement("div");return r.setAttribute("class",t),r.setAttribute("role","button"),r.setAttribute("aria-label","Apple Pay button"),n.appendChild(r),r},e.prototype._handleWalletButtonClick=function(e){var t;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,s,u,c,d,p,l,h,f;return(0,o.__generator)(this,(function(o){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new da(ca.MissingPaymentMethod);return this._buyNowInitializeOptions&&"function"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody?(n=this._paymentMethod.initializationData,r=n.countryCode,i=n.currencyCode,a=n.merchantCapabilities,s=n.supportedNetworks,u=n.storeName,h=this._getRequestWithEmptyTotal(r,i,s,a),this._requiresShipping&&(null===(t=h.requiredShippingContactFields)||void 0===t||t.push("postalAddress")),f=this._sessionFactory.create(h),this._handleApplePayEvents(f,this._paymentMethod,u),f.begin()):(c=this._paymentIntegrationService.getState(),d=c.getCartOrThrow(),p=c.getStoreConfigOrThrow(),l=c.getCheckoutOrThrow(),h=this._getBaseRequest(d,l,p,this._paymentMethod),f=this._sessionFactory.create(h),this._handleApplePayEvents(f,this._paymentMethod,p.storeProfile.storeName),f.begin()),[2]}))}))},e.prototype._getRequestWithEmptyTotal=function(e,t,n,r){return{countryCode:e,currencyCode:t,supportedNetworks:n,merchantCapabilities:r,total:{label:"",amount:"0",type:"pending"},requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"]}},e.prototype._getBaseRequest=function(e,t,n,r){var i,o=n.storeProfile,a=o.storeCountryCode,s=o.storeName,u=e.currency,c=u.code,d=u.decimalPlaces,p=r.initializationData,l=p.merchantCapabilities,h=p.supportedNetworks,f=e.lineItems.physicalItems.length>0,m={requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"],countryCode:a,currencyCode:c,merchantCapabilities:l,supportedNetworks:h,lineItems:[],total:f?{label:s,amount:""+t.grandTotal.toFixed(d),type:"pending"}:{label:s,amount:""+t.grandTotal.toFixed(d),type:"final"}};if(f)null===(i=m.requiredShippingContactFields)||void 0===i||i.push("postalAddress");else{var g=[{label:this._subTotalLabel,amount:""+t.subtotal.toFixed(d)}];t.taxes.forEach((function(e){return g.push({label:e.name,amount:""+e.amount.toFixed(d)})})),m.lineItems=g}return m},e.prototype._handleApplePayEvents=function(e,t,n){var r=this;e.onvalidatemerchant=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this._onValidateMerchant(t,n)];case 1:return r=i.sent().body,e.completeMerchantValidation(r),[3,3];case 2:throw i.sent(),new Error("Merchant validation failed");case 3:return[2]}}))}))},this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return[4,this._createBuyNowCart()];case 1:return t.sent(),this._handlePaymentMethodSelected(e),[2]}}))}))}),e.onshippingcontactselected=function(t){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return this._buyNowInitializeOptions&&this._requiresShipping?[4,this._createBuyNowCart()]:[3,2];case 1:r.sent(),r.label=2;case 2:return[4,this._handleShippingContactSelected(e,n,t)];case 3:return r.sent(),[2]}}))}))},e.onshippingmethodselected=function(t){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._handleShippingMethodSelected(e,n,t)];case 1:return r.sent(),[2]}}))}))},e.oncancel=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),e="/remote-checkout/"+t.id+"/signout",[4,this._requestSender.get(e)];case 1:return n.sent(),[4,this._paymentIntegrationService.loadCheckout()];case 2:return[2,n.sent()];case 3:throw n.sent(),new Ea;case 4:return[2]}}))}))},e.onpaymentauthorized=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){return[2,this._onPaymentAuthorized(n,e,t)]}))}))}},e.prototype._createBuyNowCart=function(){var e,t;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(i.trys.push([0,3,,4]),!(n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e)))throw new da(ca.MissingCart);return[4,this._paymentIntegrationService.createBuyNowCart(n)];case 1:return r=i.sent(),[4,this._paymentIntegrationService.loadCheckout(r.id)];case 2:return i.sent(),[3,4];case 3:throw i.sent(),new wa;case 4:return[2]}}))}))},e.prototype._handlePaymentMethodSelected=function(e){var t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getStoreConfigOrThrow(),i=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new da(ca.MissingPaymentMethod);var o=this._getBaseRequest(n,i,r,this._paymentMethod);delete o.total.type,e.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})},e.prototype._handleShippingContactSelected=function(e,t,n){var r;return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s,u,c,d,p,l,h,f,m,g;return(0,o.__generator)(this,(function(y){switch(y.label){case 0:i=this._transformContactToAddress(n.shippingContact),y.label=1;case 1:return y.trys.push([1,3,,4]),[4,this._paymentIntegrationService.updateShippingAddress(i)];case 2:return y.sent(),[3,4];case 3:throw y.sent(),e.abort(),new Error("Shipping address update failed");case 4:if(a=this._paymentIntegrationService.getState(),s=a.getCartOrThrow().currency.decimalPlaces,u=a.getCheckoutOrThrow(),c=null===(r=u.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,d=u.consignments[0].availableShippingOptions,p=null==d?void 0:d.find((function(e){return e.id===c})),l=null==d?void 0:d.filter((function(e){return e.id!==c})),h=p?[{label:p.description,amount:""+p.cost.toFixed(s),detail:p.additionalDescription,identifier:p.id}]:[],l&&(0,o.__spreadArrays)(l.filter((function(e){return e.isRecommended})),l.filter((function(e){return!e.isRecommended}))).forEach((function(e){return h.push({label:e.description,amount:""+e.cost.toFixed(s),detail:e.additionalDescription,identifier:e.id})})),!(d instanceof Array))throw new Error("Shipping options not available.");if(0===d.length)return e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:"pending",label:t,amount:""+u.grandTotal.toFixed(s)},[]),[2];f=d.find((function(e){return e.isRecommended})),m=f?f.id:d[0].id,g=p?p.id:m,y.label=5;case 5:return y.trys.push([5,7,,8]),[4,this._updateShippingOption(g)];case 6:return y.sent(),[3,8];case 7:throw y.sent(),new Error("Shipping options update failed");case 8:return a=this._paymentIntegrationService.getState(),u=a.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:h,newTotal:{type:"final",label:t,amount:""+u.grandTotal.toFixed(s)},newLineItems:this._getUpdatedLineItems(u,s)}),[2]}}))}))},e.prototype._handleShippingMethodSelected=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:r=n.shippingMethod.identifier,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,this._updateShippingOption(r)];case 2:return o.sent(),[3,4];case 3:throw o.sent(),e.abort(),new Error("Shipping option selection update failed.");case 4:return i=this._paymentIntegrationService.getState(),a=i.getCartOrThrow().currency.decimalPlaces,s=i.getCheckoutOrThrow(),e.completeShippingMethodSelection({newTotal:{type:"final",label:t,amount:""+s.grandTotal.toFixed(a)},newLineItems:this._getUpdatedLineItems(s,a)}),[2]}}))}))},e.prototype._getUpdatedLineItems=function(e,t){var n=[{label:this._subTotalLabel,amount:""+e.subtotal.toFixed(t)}];return e.taxes.forEach((function(e){return n.push({label:e.name,amount:""+e.amount.toFixed(t)})})),n.push({label:this._shippingLabel,amount:""+e.shippingCostTotal.toFixed(t)}),n},e.prototype._updateShippingOption=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){return[2,this._paymentIntegrationService.selectShippingOption(e)]}))}))},e.prototype._onValidateMerchant=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){return n=["validationUrl="+t.validationURL,"merchantIdentifier="+e.initializationData.merchantId,"displayName="+e.initializationData.storeName,"domainName="+window.location.hostname].join("&"),[2,this._requestSender.post((i=e.initializationData.paymentsUrl,i+"/api/public/v1/payments/applepay/validate_merchant"),{credentials:!1,headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded","X-XSRF-TOKEN":null},body:n})];var i}))}))},e.prototype._onPaymentAuthorized=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s,u,c,d,p,l,h,f,m;return(0,o.__generator)(this,(function(g){switch(g.label){case 0:r=e.payment,i=r.token,a=r.billingContact,s=r.shippingContact,u=this._paymentIntegrationService.getState(),c=u.getCartOrThrow(),d=c.lineItems.physicalItems.length>0,p={methodId:n.id,paymentData:{formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},l=this._transformContactToAddress(a),h=this._transformContactToAddress(s),f=null==s?void 0:s.emailAddress,m=(null==s?void 0:s.phoneNumber)||"",g.label=1;case 1:return g.trys.push([1,7,,8]),[4,this._paymentIntegrationService.updateBillingAddress((0,o.__assign)((0,o.__assign)({},l),{email:f,phone:m}))];case 2:return g.sent(),d?[4,this._paymentIntegrationService.updateShippingAddress(h)]:[3,4];case 3:g.sent(),g.label=4;case 4:return[4,this._paymentIntegrationService.submitOrder({useStoreCredit:!1})];case 5:return g.sent(),[4,this._paymentIntegrationService.submitPayment(p)];case 6:return g.sent(),t.completePayment(ApplePaySession.STATUS_SUCCESS),[2,this._onAuthorizeCallback()];case 7:throw g.sent(),t.completePayment(ApplePaySession.STATUS_FAILURE),new Error("Payment cannot complete");case 8:return[2]}}))}))},e.prototype._transformContactToAddress=function(e){return{firstName:(null==e?void 0:e.givenName)||"",lastName:(null==e?void 0:e.familyName)||"",city:(null==e?void 0:e.locality)||"",company:"",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||"",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||"",postalCode:(null==e?void 0:e.postalCode)||"",countryCode:(null==e?void 0:e.countryCode)||"",phone:(null==e?void 0:e.phoneNumber)||"",stateOrProvince:(null==e?void 0:e.administrativeArea)||"",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||"",customFields:[]}},e}(),Ta=Ia((function(e){var t=e.getState().getHost;return new Oa((0,r.createRequestSender)({host:t()}),e,new ba)}),[{id:"applepay"}]),Ra=require("query-string"),Ma=function(e){function t(t){var n=e.call(this,t||"Not implemented.")||this;return n.name="NotImplementedError",n.type="not_implemented",n}return(0,o.__extends)(t,e),t}(s);var Da,ka,Na;!function(e){e.SandboxMode="bolt_sandbox",e.StagingMode="bolt_staging",e.DevelopmentMode="bolt_development"}(Da||(Da={})),function(e){e.Small="small",e.Medium="medium",e.Large="large"}(ka||(ka={})),function(e){e.Pill="pill",e.Rect="rect"}(Na||(Na={}));const La=function(){function e(e,t,n){void 0===n&&(n=window),this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=n}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d,p,l,h,f;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.bolt,n=e.containerId,r=e.methodId,a=(i=t||{}).buyNowInitializeOptions,s=i.style,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.bolt" argument is not provided.');if(!Boolean(a))throw new Ma("Only buy now flow is implemented for Bolt button");if(!(null==a?void 0:a.storefrontApiToken)||"string"!=typeof a.storefrontApiToken)throw new aa('Unable to initialize payment because "options.storefrontApiToken" argument is not provided.');return u=this.paymentIntegrationService.getState(),c=u.getPaymentMethodOrThrow(r),d=c.initializationData,p=c.config,h=(l=d||{}).publishableKey,f=l.developerConfig,[4,this.boltScriptLoader.loadBoltClient(h,p.testMode,f,"BigCommerce",a.storefrontApiToken)];case 1:return o.sent(),this.renderButton(n,c,s),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r;"function"==typeof(null===(r=this.boltHostWindow.BoltConnect)||void 0===r?void 0:r.setupProductPageCheckout)&&(this.addButtonContainer(e,t,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())},e.prototype.addButtonContainer=function(e,t,n){var r=document.getElementById(e);if(r){var i=document.createElement("div"),o=document.createElement("object");i.setAttribute("id","product-page-checkout-wrapper"),i.setAttribute("class","bolt-button-wrapper"),i.setAttribute("style","display:none"),i.setAttribute("data-tid","product-page-checkout-wrapper"),o.setAttribute("data",this.getBoltObjectData(t,n)),o.setAttribute("class","bolt-product-checkout-button"),i.append(o),r.innerHTML="",r.append(i)}},e.prototype.getBoltObjectData=function(e,t){var n=e.initializationData,r=e.config,i=n||{},o=i.publishableKey,a=i.developerConfig,s=this.boltScriptLoader.getDomainURL(!!r.testMode,a),u=this.getButtonHeight(null==t?void 0:t.size),c=this.getButtonBorderRadius(null==t?void 0:t.shape,u);return(0,Ra.stringifyUrl)({url:"https://"+s+"/v1/checkout_button",query:{publishable_key:o,variant:"ppc",height:u,border_radius:c}})},e.prototype.getButtonHeight=function(e){if(e)switch(e){case ka.Small:return 25;case ka.Large:return 45;case ka.Medium:default:return 40}},e.prototype.getButtonBorderRadius=function(e,t){if(e)switch(e){case Na.Pill:return t?Math.round(t/2):void 0;case Na.Rect:default:return 4}},e}();const za=function(e){function t(t){var n=e.call(this,t||"Unable to proceed because the client library of a payment method is not loaded or ready to be used.")||this;return n.name="PaymentMethodClientUnavailableError",n.type="payment_method_client_unavailable",n}return(0,o.__extends)(t,e),t}(s),Ua=function(){function e(e,t){void 0===t&&(t=window),this.scriptLoader=e,this.boltHostWindow=t}return e.prototype.loadBoltClient=function(e,t,n,r,i){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(this.boltHostWindow.BoltCheckout)return[2,this.boltHostWindow.BoltCheckout];if(!e)throw new aa('Unable to initialize payment because "publishableKey" argument is not provided.');return[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!t,n)+"/connect-bigcommerce.js",this.getScriptOptions("bolt-connect",e,r,i))];case 1:return o.sent(),[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!t,n)+"/track.js",this.getScriptOptions("bolt-track",e))];case 2:if(o.sent(),!this.boltHostWindow.BoltCheckout)throw new za;return[2,this.boltHostWindow.BoltCheckout]}}))}))},e.prototype.loadBoltEmbedded=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return r={async:!0,attributes:{id:"bolt-embedded"}},[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!t,n)+"/embed.js",r)];case 1:if(i.sent(),!this.boltHostWindow.Bolt)throw new za;return[2,this.boltHostWindow.Bolt(e)]}}))}))},e.prototype.getDomainURL=function(e,t){if(!e)return"connect.bolt.com";if(t)switch(t.developerMode){case Da.StagingMode:return"connect-staging.bolt.com";case Da.DevelopmentMode:return"connect."+t.developerDomain}return"connect-sandbox.bolt.com"},e.prototype.getScriptOptions=function(e,t,n,r){return{async:!0,attributes:(0,o.__assign)((0,o.__assign)({id:e,"data-publishable-key":t},n&&{"data-shopping-cart-id":n}),r&&{"data-storefront-api-token":r})}},e}(),Fa=Ia((function(e){return new La(e,new Ua((0,Kn.getScriptLoader)()))}),[{id:"bolt"}]);var qa,Ba,Ga,xa,Ya,Va,Ha;!function(e){e.BuyNow="BUY_NOW"}(qa||(qa={})),function(e){e.AUTHORIZE="authorize",e.CAPTURE="capture"}(Ba||(Ba={})),function(e){e.paypal="paypal",e.checkout="checkout",e.buynow="buynow",e.pay="pay",e.installment="installment"}(Ga||(Ga={})),function(e){e.gold="gold",e.blue="blue",e.silver="silver",e.black="black",e.white="white"}(xa||(xa={})),function(e){e.pill="pill",e.rect="rect"}(Ya||(Ya={})),function(e){e.OXXO="oxxo"}(Va||(Va={})),function(e){e.Approved="APPROVED",e.Created="CREATED",e.PayerActionRequired="PAYER_ACTION_REQUIRED"}(Ha||(Ha={}));const ja=function(){function e(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=r}return e.prototype.loadPayPalSdk=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return r=this.paymentIntegrationService.getState(),i=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e),s=this,[4,this.paypalCommerceScriptLoader.getPayPalSDK(a,i,n)];case 1:return s.paypalSdk=o.sent(),[2,this.paypalSdk]}}))}))},e.prototype.getPayPalSdkOrThrow=function(){if(!this.paypalSdk)throw new za;return this.paypalSdk},e.prototype.createBuyNowCartOrThrow=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(t=e.getBuyNowCartRequestBody()))throw new da(ca.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this.paymentIntegrationService.createBuyNowCart(t)];case 2:return[2,n.sent()];case 3:throw n.sent(),new wa;case 4:return[2]}}))}))},e.prototype.createOrder=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n=this.paymentIntegrationService.getState().getCartOrThrow().id,[4,this.paypalCommerceRequestSender.createOrder(e,(0,o.__assign)({cartId:n},t))];case 1:return[2,r.sent().orderId]}}))}))},e.prototype.updateOrder=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getConsignmentsOrThrow()[0],r.label=1;case 1:return r.trys.push([1,3,,4]),[4,this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:n.availableShippingOptions,cartId:t.id,selectedShippingOption:n.selectedShippingOption})];case 2:return r.sent(),[3,4];case 3:throw r.sent(),new c;case 4:return[2]}}))}))},e.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.paypalCommerceRequestSender.getOrderStatus()];case 1:return[2,e.sent().status];case 2:throw e.sent(),new c;case 3:return[2]}}))}))},e.prototype.tokenizePayment=function(e,t){var n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new da(ca.MissingOrderId);return this.formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",action:"set_external_checkout",provider:e,order_id:t},n.source===qa.BuyNow&&{cart_id:n.id}))},e.prototype.submitPayment=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}},[4,this.paymentIntegrationService.submitPayment({methodId:e,paymentData:n})];case 1:return r.sent(),[2]}}))}))},e.prototype.getShippingOptionOrThrow=function(e){var t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find((function(e){return e.isRecommended})),i=(e?n.find((function(t){return t.id===e})):n.find((function(e){var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)})))||r||n[0];if(!i)throw new Error("Your order can't be shipped to this address");return i},e.prototype.getAddress=function(e){return{firstName:(null==e?void 0:e.firstName)||"",lastName:(null==e?void 0:e.lastName)||"",email:(null==e?void 0:e.email)||"",phone:"",company:"",address1:(null==e?void 0:e.address1)||"",address2:"",city:(null==e?void 0:e.city)||"",countryCode:(null==e?void 0:e.countryCode)||"",postalCode:(null==e?void 0:e.postalCode)||"",stateOrProvince:"",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||"",customFields:[]}},e.prototype.getBillingAddressFromOrderDetails=function(e){var t=e.payer;return this.getAddress({firstName:t.name.given_name,lastName:t.name.surname,email:t.email_address,address1:t.address.address_line_1,city:t.address.admin_area_2,countryCode:t.address.country_code,postalCode:t.address.postal_code,stateOrProvinceCode:t.address.admin_area_1})},e.prototype.getShippingAddressFromOrderDetails=function(e){var t,n,r=e.payer,i=(null===(n=null===(t=e.purchase_units[0])||void 0===t?void 0:t.shipping)||void 0===n?void 0:n.address)||{};return this.getAddress({firstName:r.name.given_name,lastName:r.name.surname,email:r.email_address,address1:i.address_line_1,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})},e.prototype.getValidButtonStyle=function(e){var t=e||{},n=t.color,r=t.height,i=t.label,o=t.shape,a={color:n&&xa[n]?n:void 0,height:this.getValidHeight(r),label:i&&Ga[i]?i:void 0,shape:o&&Ya[o]?o:void 0};return(0,m.omitBy)(a,m.isNil)},e.prototype.getValidHeight=function(e){return e&&"number"==typeof e?e>55?55:e<25?25:e:40},e.prototype.removeElement=function(e){var t=e&&document.getElementById(e);t&&t.remove()},e}();var Wa,Ka="This API endpoint is for internal use only and may change in the future";!function(e){e.Json="application/json",e.JsonV1="application/vnd.bc.v1+json"}(Wa||(Wa={}));const Qa=Wa;var Za={"X-Checkout-SDK-Version":"1.400.0"};const Ja=function(){function e(e){this.requestSender=e}return e.prototype.createOrder=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return n="/api/storefront/payment/"+e,r=t,i=(0,o.__assign)({"X-API-INTERNAL":Ka,"Content-Type":Qa.Json},Za),[4,this.requestSender.post(n,{headers:i,body:r})];case 1:return[2,a.sent().body]}}))}))},e.prototype.updateOrder=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return t=e,n=(0,o.__assign)({"X-API-INTERNAL":Ka,"Content-Type":Qa.Json},Za),[4,this.requestSender.put("/api/storefront/initialization/paypalcommerce",{headers:n,body:t})];case 1:return[2,r.sent().body]}}))}))},e.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return e=(0,o.__assign)({"X-API-INTERNAL":Ka,"Content-Type":Qa.Json},Za),[4,this.requestSender.get("/api/storefront/initialization/paypalcommerce",{headers:e})];case 1:return[2,t.sent().body]}}))}))},e}(),Xa=function(){function e(e){this.scriptLoader=e,this.window=window}return e.prototype.getPayPalSDK=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return this.paypalSdk?[3,2]:(r=this,[4,this.loadPayPalSDK(this.getPayPalSdkScriptConfigOrThrow(e,t,n))]);case 1:r.paypalSdk=i.sent(),i.label=2;case 2:return[2,this.paypalSdk]}}))}))},e.prototype.loadPayPalSDK=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return this.window.paypalLoadScript?[3,2]:[4,this.scriptLoader.loadScript("https://unpkg.com/@paypal/paypal-js@5.0.5/dist/iife/paypal-js.min.js",{async:!0,attributes:{}})];case 1:if(t.sent(),!this.window.paypalLoadScript)throw new za;t.label=2;case 2:return[4,this.window.paypalLoadScript(e)];case 3:if(t.sent(),!this.window.paypal)throw new za;return[2,this.window.paypal]}}))}))},e.prototype.getPayPalSdkScriptConfigOrThrow=function(e,t,n){void 0===n&&(n=!0);var r=e.id,i=e.clientToken,a=e.initializationData;if(!(null==a?void 0:a.clientId))throw new da(ca.MissingPaymentMethod);var s=a.intent,u=a.clientId,c=a.merchantId,d=a.buyerCountry,p=a.attributionId,l=a.isVenmoEnabled,h=a.isHostedCheckoutEnabled,f=a.isPayPalCreditAvailable,m=a.isDeveloperModeApplicable,g=a.availableAlternativePaymentMethods,y=void 0===g?[]:g,_=a.enabledAlternativePaymentMethods,v=void 0===_?[]:_,C=h||n,S="paypalcommercecreditcards"===r,I=S?["card"]:[],E=S?[]:["card"],w=f?["credit","paylater"]:[],A=f?[]:["credit","paylater"],b=n||!C,P=b&&l?["venmo"]:[],O=b&&l?[]:["venmo"],T=b?v:[],R=b?y.filter((function(e){return!v.includes(e)})):y,M=(0,o.__spreadArrays)(E,A,O,R),D=(0,o.__spreadArrays)(I,w,P,T);return(0,o.__assign)({"client-id":u,"data-partner-attribution-id":p,"data-client-token":i,"merchant-id":c,"enable-funding":D.length>0?D:void 0,"disable-funding":M.length>0?M:void 0,commit:C,components:["buttons","hosted-fields","messages","payment-fields"],currency:t,intent:s},m&&{"buyer-country":d})},e}(),$a=function(e){var t=e.getState().getHost;return new ja((0,i.createFormPoster)(),e,new Ja((0,r.createRequestSender)({host:t()})),new Xa((0,Kn.getScriptLoader)()))},es=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){var t;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=e.paypalcommerce,r=e.containerId,i=e.methodId,a=Boolean(null==n?void 0:n.buyNowInitializeOptions),!i)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!r)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.paypalcommerce" argument is not provided.');if(a&&!n.currencyCode)throw new aa('Unable to initialize payment because "options.paypalcommerce.currencyCode" argument is not provided.');if(a&&"function"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return a?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return s=a?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(i,s,!1)];case 3:return o.sent(),this.renderButton(r,i,n),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,s=n.onComplete,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommerce")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},p={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l={onShippingAddressChange:function(e){return r.onShippingAddressChange(e)},onShippingOptionsChange:function(e){return r.onShippingOptionsChange(e)},onApprove:function(e,n){return r.onHostedCheckoutApprove(e,n,t,s)}},h=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:u.FUNDING.PAYPAL,style:this.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&p),c&&l),f=u.Buttons(h);f.isEligible()?f.render("#"+e):this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e.prototype.onHostedCheckoutApprove=function(e,t,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!e.orderID)throw new da(ca.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,t.order.get()];case 1:s=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),u=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateBillingAddress(u)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,e.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},e.prototype.onShippingAddressChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.country_code,postalCode:e.shippingAddress.postal_code,stateOrProvinceCode:e.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(t)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(t)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},e.prototype.onShippingOptionsChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(t.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},e}(),ts=Ia((function(e){return new es(e,$a(e))}),[{id:"paypalcommerce"}]),ns=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.paypalcommercecredit,n=e.containerId,r=e.methodId,a=(i=t||{}).buyNowInitializeOptions,s=i.currencyCode,u=i.messagingContainerId,c=!!a,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.paypalcommercecredit" argument is not provided.');if(c&&!s)throw new aa('Unable to initialize payment because "options.paypalcommercecredit.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?s:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,t),this.renderMessages(u),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,s=n.onComplete,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercecredit")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},p={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l={onShippingAddressChange:function(e){return r.onShippingAddressChange(e)},onShippingOptionsChange:function(e){return r.onShippingOptionsChange(e)},onApprove:function(e,n){return r.onHostedCheckoutApprove(e,n,t,s)}},h=[u.FUNDING.PAYLATER,u.FUNDING.CREDIT],f=!1;h.forEach((function(t){if(!f){var n=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:t,style:r.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&p),c&&l),s=u.Buttons(n);s.isEligible()&&(s.render("#"+e),f=!0)}})),f||this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e.prototype.onHostedCheckoutApprove=function(e,t,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!e.orderID)throw new da(ca.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,t.order.get()];case 1:s=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),u=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateBillingAddress(u)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,e.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},e.prototype.onShippingAddressChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.country_code,postalCode:e.shippingAddress.postal_code,stateOrProvinceCode:e.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(t)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(t)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},e.prototype.onShippingOptionsChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(t.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},e.prototype.renderMessages=function(e){var t=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(e&&document.getElementById(e)){var n={amount:this.paymentIntegrationService.getState().getCartOrThrow().cartAmount,placement:"cart",style:{layout:"text"}};t.Messages(n).render("#"+e)}},e}(),rs=Ia((function(e){return new ns(e,$a(e))}),[{id:"paypalcommercecredit"}]),is=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.paypalcommercevenmo,n=e.containerId,r=e.methodId,a=(i=t||{}).buyNowInitializeOptions,s=i.currencyCode,u=!!a,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.paypalcommercevenmo" argument is not provided.');if(u&&!s)throw new aa('Unable to initialize payment because "options.paypalcommercevenmo.currencyCode" argument is not provided.');if(u&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return u?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return c=u?s:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,c,!1)];case 3:return o.sent(),this.renderButton(n,r,t),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),u=s.FUNDING.VENMO,c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercevenmo")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},d={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},p=(0,o.__assign)((0,o.__assign)({fundingSource:u,style:this.getValidVenmoButtonStyles(a)},c),i&&d),l=s.Buttons(p);l.isEligible()?l.render("#"+e):this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.getValidVenmoButtonStyles=function(e){var t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===xa.gold?(0,o.__assign)((0,o.__assign)({},t),{color:void 0}):t},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e}(),os=Ia((function(e){return new is(e,$a(e))}),[{id:"paypalcommercevenmo"}]),as=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.paypalcommercealternativemethods,n=e.containerId,r=e.methodId,a=(i=t||{}).apm,s=i.buyNowInitializeOptions,u=i.currencyCode,c=!!s,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods" argument is not provided.');if(!a)throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods.apm" argument is not provided.');if(c&&!u)throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==s?void 0:s.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?u:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,t),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.apm,a=n.buyNowInitializeOptions,s=n.style,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(!Object.values(u.FUNDING).includes(i))throw new aa('Unable to initialize PayPal button because "options.paypalcommercealternativemethods.apm" argument is not valid funding source.');var c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercealternativemethod")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},d={onClick:function(){return r.handleClick(a)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},p=(0,o.__assign)((0,o.__assign)({fundingSource:i,style:this.paypalCommerceIntegrationService.getValidButtonStyle(s)},c),a&&d),l=u.Buttons(p);l.isEligible()?l.render("#"+e):this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e}(),ss=Ia((function(e){return new as(e,$a(e))}),[{id:"paypalcommercealternativemethods"}]);var us,cs,ds,ps,ls;!function(e){e.HORIZONTAL="horizontal",e.VERTICAL="vertical"}(us||(us={})),function(e){e.SMALL="small",e.MEDIUM="medium",e.LARGE="large",e.RESPONSIVE="responsive"}(cs||(cs={})),function(e){e.GOLD="gold",e.BLUE="blue",e.SIlVER="silver",e.BLACK="black"}(ds||(ds={})),function(e){e.CHECKOUT="checkout",e.PAY="pay",e.BUYNOW="buynow",e.PAYPAL="paypal",e.CREDIT="credit"}(ps||(ps={})),function(e){e.PILL="pill",e.RECT="rect"}(ls||(ls={}));const hs=function(){function e(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(t=this.paymentIntegrationService.getState(),n=t.getPaymentMethodOrThrow(e.methodId),!e.paypal)throw new aa;if(!n.config.merchantId)throw new da(ca.MissingPaymentMethod);return[4,this.paypalExpressScriptLoader.loadPaypalSDK(n.config.merchantId)];case 1:return r=i.sent(),this.renderButton(e,r),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t){var n,r=this,i=e.containerId,o=e.methodId,a=e.paypal,s=a.allowCredit,u=a.clientId,c=a.onPaymentError,d=a.shouldProcessPayment,p=a.style,l=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!l.config.merchantId)throw new da(ca.MissingPaymentMethod);var h=l.config.merchantId,f=l.config.testMode?"sandbox":"production",m=((n={})[f]=u,n),g=t.FUNDING.CREDIT||"credit",y=s?[g]:[],_=s?[]:[g];return t.Button.render({env:f,client:m,commit:d,funding:{allowed:y,disallowed:_},style:this.getStyle(p),payment:function(e,t){return r.setupPayment(h,t,c)},onAuthorize:function(e,t){return r.tokenizePayment(e,o,t,d)}},i)},e.prototype.getStyle=function(e){var t=e||{},n=t.color,r=t.fundingicons,i=t.label,o=t.layout,a=t.shape,s=t.size,u=t.tagline;return{color:n,fundingicons:r,label:i,layout:o,shape:a||ls.RECT,size:"small"===s?cs.RESPONSIVE:s,tagline:u}},e.prototype.setupPayment=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s;return(0,o.__generator)(this,(function(u){switch(u.label){case 0:if(!t)throw new ua(sa.CheckoutButtonNotInitialized);u.label=1;case 1:return u.trys.push([1,4,,5]),[4,this.paymentIntegrationService.loadDefaultCheckout()];case 2:return r=u.sent(),i=r.getCartOrThrow().id,a=r.getHost()||"",[4,t.request.post(a+"/api/storefront/payment/paypalexpress",{merchantId:e,cartId:i},{headers:(0,o.__assign)({"X-API-INTERNAL":Ka},Za)})];case 3:return[2,u.sent().id];case 4:throw s=u.sent(),n&&n(s),s;case 5:return[2]}}))}))},e.prototype.tokenizePayment=function(e,t,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!n)throw new ua(sa.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new da(ca.MissingPayment);return i=this.paymentIntegrationService.getState(),a=i.getPaymentMethodOrThrow(t),[4,n.payment.get(e.paymentID)];case 1:return s=o.sent(),[2,this.formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:a.id,action:r?"process_payment":"set_external_checkout",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(s.payer.payer_info)})]}}))}))},e}();const fs=function(){function e(e){this.scriptLoader=e,this.window=window}return e.prototype.loadPaypalSDK=function(e){return void 0===e&&(e=""),(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t=(0,o.__assign)({async:!0,attributes:{"data-merchant-id":e}},e&&{attributes:{"data-merchant-id":e}}),[4,this.scriptLoader.loadScript("//www.paypalobjects.com/api/checkout.min.js",t)];case 1:if(n.sent(),!this.window.paypal)throw new za;return[2,this.window.paypal]}}))}))},e}(),ms=Ia((function(e){return new hs(e,new fs((0,Kn.getScriptLoader)()),(0,i.createFormPoster)())}),[{id:"paypalexpress"}]);function gs(e){var t=null!=e?e:{},o=t.host,a=t.locale,s=void 0===a?"en":a,u=Bn(),c=(0,r.createRequestSender)({host:o}),d=(0,i.createFormPoster)({host:o}),p=function(e,t){void 0===t&&(t=n);for(var r=new Sa,i=function(t){if(!function(e){return"resolveIds"in e}(t))return"continue";for(var n=0,i=t.resolveIds;n{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{createCheckoutButtonInitializer:()=>gs,createTimeout:()=>r.createTimeout});var n={};e.r(n),e.d(n,{createApplePayButtonStrategy:()=>Ta,createBoltButtonStrategy:()=>Fa,createPayPalCommerceAlternativeMethodsButtonStrategy:()=>ss,createPayPalCommerceButtonStrategy:()=>ts,createPayPalCommerceCreditButtonStrategy:()=>rs,createPayPalCommerceVenmoButtonStrategy:()=>os,createPaypalExpressButtonStrategy:()=>ms});const r=require("@bigcommerce/request-sender"),i=require("@bigcommerce/form-poster"),o=require("tslib"),a=require("@bigcommerce/data-store"),s=function(e){function t(t){var n,r,i=this.constructor,o=e.call(this,t||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(t,e),t}(Error);var u={body:{},headers:{},status:0};const c=function(e){function t(t,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,s=t||u,c=s.body,d=s.headers,p=s.status;return(a=e.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=c,a.headers=d,a.status=p,a.errors=o||[],a}return(0,o.__extends)(t,e),t}(s),d=function(e){function t(t){var n=e.call(this,t,{message:"There is a problem processing your payment. Please try again later."})||this;return n.name="PaymentMethodInvalidError",n.type="payment_method_invalid",n}return(0,o.__extends)(t,e),t}(c);const p=function(e){function t(t){var n,r,i=this.constructor,o=e.call(this,t||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(t,e),t}(Error);var l={body:{},headers:{},status:0};const h=function(e){function t(t,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,s=t||l,u=s.body,c=s.headers,d=s.status;return(a=e.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=u,a.headers=c,a.status=d,a.errors=o||[],a}return(0,o.__extends)(t,e),t}(p),f=function(e){function t(t,n){var r=e.call(this,t,{message:n||"An unexpected error has occurred. The checkout process cannot continue as a result."})||this;return r.name="UnrecoverableError",r.type="unrecoverable",r}return(0,o.__extends)(t,e),t}(h),m=require("lodash");function g(e){return e.reduce((function(e,t){return t?(0,o.__spreadArrays)(e,[t]):e}),[]).join(" ")}function y(e,t){var n=e.body.errors,r=void 0===n?[]:n;return new h(e,{message:_(r)||t,errors:r})}function _(e){if(Array.isArray(e))return e.reduce((function(e,t){return t&&t.message?(0,o.__spreadArrays)(e,[t.message]):e}),[]).join(" ")}const v=function(e){function t(t){var n=e.call(this,t,{message:"The request has timed out or aborted."})||this;return n.name="TimeoutError",n.type="timeout",n}return(0,o.__extends)(t,e),t}(h),C=function(){function e(){this._factoryMethods={},this.register("default",(function(e,t){return new h(e,{message:t})})),this.register("internal",(function(e,t){return function(e,t){var n=e.body,r=n.errors,i=void 0===r?[]:r;return new h(e,{message:g(i)||n.detail||n.title||t,errors:i.length?i.map((function(e){return{code:n.type,message:e}})):[{code:n.type,message:n.detail||n.title}]})}(e,t)})),this.register("storefront",(function(e,t){return function(e,t){var n=e.body;return new h(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)})),this.register("payment",(function(e,t){return y(e,t)})),this.register("timeout",(function(e){return new v(e)}))}return e.prototype.register=function(e,t){this._factoryMethods[e]=t},e.prototype.createError=function(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)},e.prototype._getType=function(e){if(0===e.status)return"timeout";if(this._isStorefrontErrorResponseBody(e.body))return"storefront";if(this._isInternalErrorResponseBody(e.body)){var t=(0,m.last)(e.body.type.split("/"));return t&&this._factoryMethods[t]?t:"internal"}var n=(0,m.last)(e.body&&e.body.errors);return n&&n.code&&this._factoryMethods[n.code]?n.code:"payment"},e.prototype._isStorefrontErrorResponseBody=function(e){var t=e;return!this._isInternalErrorResponseBody(e)&&"string"==typeof t.title&&"string"==typeof t.type&&"number"==typeof t.status&&"string"==typeof t.detail},e.prototype._isInternalErrorResponseBody=function(e){var t=e;return"object"==typeof t.errors&&"string"==typeof t.title&&"string"==typeof t.type&&"number"==typeof t.status},e}(),S=require("rxjs"),I=require("rxjs/operators");var E,w,A,b;function P(e,t){return Array.isArray(e)?e.map((function(e){return P(e,t)})):(0,m.isPlainObject)(e)?(0,m.transform)((0,m.omitBy)(e,t),(function(e,n,r){e[r]=P(n,t)}),{}):e}function O(e,t){return function(e){return e.type===w.ClearError}(t)?P(e,(function(e){return e===t.payload})):e}function T(e,t,n){return e===t||(e&&t&&"object"==typeof e&&"object"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(var r=0,i=e.length;r0}})),W=Tn(q,(function(e){return function(t){return!(!t||!t.nonce)||e()===Nn||e()===Ln}})),(0,An.memoizeOne)((function(e,t){return{getPaymentId:U({checkout:e,order:t}),getPaymentIdOrThrow:F({checkout:e,order:t}),getPaymentStatus:q({checkout:e,order:t}),getPaymentStatusOrThrow:B({checkout:e,order:t}),getPaymentToken:G({checkout:e,order:t}),getPaymentTokenOrThrow:x({checkout:e,order:t}),getPaymentRedirectUrl:Y({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:H({checkout:e,order:t}),isPaymentDataRequired:j({checkout:e,order:t}),isPaymentDataSubmitted:W({checkout:e,order:t})}}))),Ae=function(){var e=Tn((function(e){return e.errors.applyError}),(function(e){return function(){return e}})),t=Tn((function(e){return!!e.statuses.isApplying}),(function(e){return function(){return e}}));return(0,An.memoizeOne)((function(n){return void 0===n&&(n=Fn),{getApplyError:e(n),isApplying:t(n)}}))}(),be=function(){var e=Tn((function(e){return e.errors.updateError}),(function(e){return function(){return e}})),t=Tn((function(e){return!!e.statuses.isUpdating}),(function(e){return function(){return e}}));return(0,An.memoizeOne)((function(n){return void 0===n&&(n=gn),{getUpdateError:e(n),isUpdating:t(n)}}))}(),Pe=(K=Tn((function(e){return e.data}),(function(e){return function(){return e}})),Q=Tn((function(e){return e.errors.sendError}),(function(e){return function(){return e}})),J=Tn((function(e){return!!e.statuses.isSending}),(function(e){return function(){return e}})),(0,An.memoizeOne)((function(e){return void 0===e&&(e=an),{getEmail:K(e),getSendError:Q(e),isSending:J(e)}}))),Te=function(){var e=Tn((function(e){return e.data}),(function(e){return function(){return e}})),t=Tn((function(e){return e.data}),(function(e){return function(t){return null==e?void 0:e.find((function(e){return e.region===t}))}})),n=Tn((function(e){return e.errors.loadError}),(function(e){return function(){return e}})),r=Tn((function(e){return e.statuses.isLoading}),(function(e){return function(){return!!e}}));return(0,An.memoizeOne)((function(i){return void 0===i&&(i=Ne),{getExtensions:e(i),getExtensionByRegion:t(i),getLoadError:n(i),isLoading:r(i)}}))}();return function(e,t){void 0===t&&(t={});var n,r=X(e.billingAddress),i=$(e.cart),o=ee(e.checkoutButton),a=ne(e.countries),s=re(e.coupons),u=ie(e.customer),c=ae(e.customerStrategies),d=Te(e.extensions),p=ce(e.formFields),l=se(e.giftCertificates),h=ue(e.instruments),f=Ee(e.orderBillingAddress),m=pe(e.paymentMethods),g=le(e.paymentStrategies),y=he(e.pickupOptions),_=fe(e.remoteCheckout),v=me(e.consignments),C=ye(e.shippingCountries),S=_e(e.shippingStrategies),I=be(e.subscriptions),E=Ae(e.storeCredit),w=Pe(e.signInEmail),A=ve(e.consignments,i),b=Ce(e.checkout,r,i,A,s,u,l),P=Se(e.order,f,s),O=we(b,P),T={billingAddress:r,cart:i,checkout:b,checkoutButton:o,config:te(e.config,e.formFields),consignments:A,countries:a,coupons:s,customer:u,customerStrategies:c,extensions:d,form:p,giftCertificates:l,instruments:h,order:P,orderBillingAddress:f,payment:O,paymentMethods:m,paymentStrategies:g,pickupOptions:y,remoteCheckout:_,shippingAddress:v,shippingCountries:C,shippingStrategies:S,signInEmail:w,subscriptions:I,storeCredit:E};return t.shouldWarnMutation?(n=T,Object.keys(n).reduce((function(e,t){return e[t]=Dn(n[t]),e}),{})):T}}function Bn(e,t){void 0===e&&(e={});var n,r,i=(n=new C,["catalog_only","empty_cart","invalid_order_id","invalid_order_token","missing_order_token","missing_provider_token","missing_shipping_method","order_completion_error","order_could_not_be_finalized_error","order_create_failed","provider_fatal_error","provider_setup_error","stock_too_low"].forEach((function(e){n.register(e,(function(e,t){return new f(e,t)}))})),n.register("invalid_payment_provider",(function(e){return new d(e)})),n.register("payment_config_not_found",(function(e){return new d(e)})),r=n,function(e){return(0,S.from)(e).pipe((0,I.catchError)((function(e){if(e instanceof Error||e.payload instanceof Error)throw e;if((n=e.payload)&&"object"==typeof n&&["body","headers","status","statusText"].every((function(e){return Object.prototype.hasOwnProperty.call(n,e)}))){var t=e.payload.body&&e.payload.body.detail;throw(0,o.__assign)((0,o.__assign)({},e),{payload:r.createError(e.payload,t)})}var n;throw e})))}),s=qn();return(0,a.createDataStore)((0,a.combineReducers)({billingAddress:k,cart:H,checkout:Sn,checkoutButton:ee,config:ae,consignments:Nt,countries:je,coupons:pe,customer:Ee,customerStrategies:Te,extensions:Le,formFields:Ge,giftCertificates:ye,instruments:wt,orderBillingAddress:ot,order:Je,payment:st,paymentMethods:pt,paymentStrategies:_t,pickupOptions:xt,remoteCheckout:Rt,shippingCountries:Kt,shippingStrategies:en,signInEmail:sn,subscriptions:yn,storeCredit:ln}),e,(0,o.__assign)({actionTransformer:i,stateTransformer:function(e){return s(e)}},t))}function Gn(e,t,n){var r=new WeakMap;function i(e){var n=this;return function(){for(var i,a=[],s=0;s=400&&e.status<500)throw new or(e);throw e}))},e.prototype.updateCheckout=function(e,t,n){var r=void 0===n?{}:n,i=r.params,a=(void 0===i?{}:i).include,s=r.timeout,u="/api/storefront/checkout/"+e,c=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.put(u,{params:{include:rr(ir,a)},body:t,headers:c,timeout:s})},e}(),sr=function(){function e(){}return e.prototype.isEqual=function(e,t){return(0,m.isEqual)(this._normalize(e),this._normalize(t))},e.prototype._normalize=function(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((function(e,t){return(""+e.productId+e.variantId).localeCompare(""+t.productId+t.variantId)})).map((function(e){return{extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId}})),giftCertificates:e.lineItems.giftCertificates.slice().sort((function(e,t){return(""+e.id).localeCompare(""+t.id)})).map((function(e){return{amount:e.amount,recipient:e.recipient}})),physicalItems:e.lineItems.physicalItems.slice().sort((function(e,t){return(""+e.productId+e.variantId).localeCompare(""+t.productId+t.variantId)})).map((function(e){return{extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}}))}}},e}(),ur=function(e){function t(t,n){var r=e.call(this,"An update to your shopping cart has been detected and your available shipping costs have been updated.")||this;return r.name="CartChangedError",r.type="cart_changed",r.data={previous:t,updated:n},r}return(0,o.__extends)(t,e),t}(p),cr=function(){function e(e){this._checkoutRequestSender=e}return e.prototype.validate=function(e,t){var n=this;if(!e)throw new Pn(bn.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then((function(t){var r=new sr;if(!(e.outstandingBalance===t.body.outstandingBalance&&n._compareCoupons(e.coupons,t.body.coupons)&&n._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&r.isEqual(e.cart,t.body.cart)))throw new ur(n._getComparableCheckout(e),n._getComparableCheckout(t.body))}))},e.prototype._compareCoupons=function(e,t){return(0,m.isEqual)((0,m.map)(e,"code"),(0,m.map)(t,"code"))},e.prototype._compareGiftCertificates=function(e,t){return(0,m.isEqual)((0,m.map)(e,"code"),(0,m.map)(t,"code"))},e.prototype._getComparableCheckout=function(e){var t=e.cart,n=e.coupons,r=e.giftCertificates,i=e.outstandingBalance;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:r,outstandingBalance:i}},e}(),dr=function(){function e(e){this._configRequestSender=e}return e.prototype.loadConfig=function(e){var t=this;return S.Observable.create((function(n){n.next((0,a.createAction)(Q.LoadConfigRequested)),t._configRequestSender.loadConfig(e).then((function(e){n.next((0,a.createAction)(Q.LoadConfigSucceeded,e.body)),n.complete()})).catch((function(e){n.error((0,a.createErrorAction)(Q.LoadConfigFailed,e))}))}))},(0,o.__decorate)([Gn],e.prototype,"loadConfig",null),e}(),pr=function(){function e(e){this._requestSender=e}return e.prototype.loadConfig=function(e){var t=void 0===e?{}:e,n=t.timeout,r=t.params;return this._requestSender.get("/api/storefront/checkout-settings",{timeout:n,headers:(0,o.__assign)({Accept:Vn.JsonV1,"X-API-INTERNAL":Hn},jn),params:r}).catch((function(e){if(e.status>=400&&e.status<500)throw new or(e);throw e}))},e}();function lr(e){var t=e;return"object"==typeof t&&"object"==typeof t.payload&&"string"==typeof t.payload.token}const hr=function(){function e(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}return e.prototype.createCustomer=function(e,t){var n=this;return function(r){var i=r.getState().config.getStoreConfigOrThrow().checkoutSettings.isStorefrontSpamProtectionEnabled,s=function(i){return(0,S.from)(n._customerRequestSender.createAccount((0,o.__assign)((0,o.__assign)({},e),{token:i}),t)).pipe((0,I.switchMap)((function(){return(0,S.concat)(n._checkoutActionCreator.loadCurrentCheckout(t)(r),(0,S.of)((0,a.createAction)(me.CreateCustomerSucceeded)))})))};return(0,S.concat)((0,S.of)((0,a.createAction)(me.CreateCustomerRequested)),i?(0,S.from)(n._spamProtectionActionCreator.execute()(r)).pipe((0,I.switchMap)((function(e){var t;return lr(e)?(0,S.concat)((0,S.of)(e),s(null===(t=e.payload)||void 0===t?void 0:t.token)):(0,S.of)(e)}))):s()).pipe((0,I.catchError)((function(e){return Qn(me.CreateCustomerFailed,e)})))}},e.prototype.createAddress=function(e,t){var n=this;return(0,S.concat)((0,S.of)((0,a.createAction)(me.CreateCustomerAddressRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._customerRequestSender.createAddress(e,t)];case 1:return n=r.sent().body,[2,(0,a.createAction)(me.CreateCustomerAddressSucceeded,n)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(me.CreateCustomerAddressFailed,e)})))},e.prototype.signInCustomer=function(e,t){var n=this;return function(r){return(0,S.concat)((0,S.of)((0,a.createAction)(me.SignInCustomerRequested)),(0,S.from)(n._customerRequestSender.signInCustomer(e,t)).pipe((0,I.switchMap)((function(e){var i=e.body;return(0,S.concat)(n._checkoutActionCreator.loadCurrentCheckout(t)(r),(0,S.of)((0,a.createAction)(me.SignInCustomerSucceeded,i.data)))})))).pipe((0,I.catchError)((function(e){return Qn(me.SignInCustomerFailed,e)})))}},e.prototype.signOutCustomer=function(e){var t=this;return function(n){return(0,S.concat)((0,S.of)((0,a.createAction)(me.SignOutCustomerRequested)),(0,S.from)(t._customerRequestSender.signOutCustomer(e)).pipe((0,I.switchMap)((function(r){var i=r.body;return(0,S.concat)(t._checkoutActionCreator.loadCurrentCheckout(e)(n),(0,S.of)((0,a.createAction)(me.SignOutCustomerSucceeded,i.data)))})))).pipe((0,I.catchError)((function(e){return Qn(me.SignOutCustomerFailed,e)})))}},e}(),fr=function(){function e(e){this._requestSender=e}return e.prototype.createAccount=function(e,t){var n=(void 0===t?{}:t).timeout;return this._requestSender.post("/api/storefront/customer",{timeout:n,headers:jn,body:e})},e.prototype.createAddress=function(e,t){var n=(void 0===t?{}:t).timeout;return this._requestSender.post("/api/storefront/customer-address",{timeout:n,headers:jn,body:e})},e.prototype.signInCustomer=function(e,t){var n=(void 0===t?{}:t).timeout;return this._requestSender.post("/internalapi/v1/checkout/customer",{timeout:n,headers:jn,body:e})},e.prototype.signOutCustomer=function(e){var t=(void 0===e?{}:e).timeout;return this._requestSender.delete("/internalapi/v1/checkout/customer",{timeout:t,headers:jn})},e}(),mr=function(){function e(e){this._formFieldsRequestSender=e}return e.prototype.loadFormFields=function(e){var t=this;return(0,S.concat)((0,S.of)((0,a.createAction)(ke.LoadFormFieldsRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(t,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return[4,this._formFieldsRequestSender.loadFields(e)];case 1:return t=n.sent().body,[2,(0,a.createAction)(ke.LoadFormFieldsSucceeded,t)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(ke.LoadFormFieldsFailed,e)})))},(0,o.__decorate)([Gn],e.prototype,"loadFormFields",null),e}(),gr=function(){function e(e){this._requestSender=e}return e.prototype.loadFields=function(e){var t=(void 0===e?{}:e).timeout;return this._requestSender.get("/api/storefront/form-fields",{timeout:t,headers:(0,o.__assign)({Accept:Vn.JsonV1,"X-API-INTERNAL":Hn},jn)})},e}(),yr=function(e){var t=this,n=new Promise((function(e,n){t.cancel=n}));this.promise=Promise.race([e,n])},_r=function(e){function t(t){var n=e.call(this,t||"Unable to proceed because the required element is unexpectedly detached from the page.")||this;return n.name="UnexpectedDetachmentError",n.type="unexpected_detachment",n}return(0,o.__extends)(t,e),t}(p),vr=function(){function e(e){this._mutationObserver=e}return e.prototype.ensurePresence=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:n=new yr(t),(r=this._mutationObserver.create((function(t){t.forEach((function(t){0!==Array.from(t.removedNodes).filter((function(t){return e.some((function(e){return t===e||t.contains(e)}))})).length&&n.cancel(new _r)}))}))).observe(document.body,{childList:!0,subtree:!0}),o.label=1;case 1:return o.trys.push([1,3,,4]),[4,n.promise];case 2:return i=o.sent(),r.disconnect(),[2,i];case 3:throw a=o.sent(),r.disconnect(),a;case 4:return[2]}}))}))},e}();var Cr=function(){function e(e){void 0===e&&(e=window),this._window=e}return e.prototype.create=function(e){return new this._window.MutationObserver(e)},e}();const Sr=function(e){function t(t){var n=e.call(this,t||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(t,e),t}(p);function Ir(e){if(!/^(https?:)?\/\//.test(e))throw new Sr("The provided URL must be absolute.");var t=document.createElement("a");t.href=e;var n=t.port&&-1!==e.indexOf(t.hostname+":"+t.port)?t.port:"";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:t.protocol+"//"+t.hostname+(n?":"+n:""),pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function Er(e,t){return e.type===t}const wr=function(){function e(e,t){this._targetWindow=t,this._targetOrigin="*"===e?"*":Ir(e).origin}return e.prototype.post=function(e,t){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=t&&(0,S.fromEvent)(window,"message").pipe((0,I.filter)((function(e){return e.origin===n._targetOrigin&&Er(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)})),(0,I.map)((function(e){if(t.errorType===e.data.type)throw e.data;return e.data})),(0,I.take)(1)).toPromise();return r.postMessage(e,this._targetOrigin),i}},e.prototype.setTarget=function(e){this._targetWindow=e},e}(),Ar=function(e,t,n){return t&&n?br(0,t,n):function(e){var t=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return(0,o.__extends)(t,e),t}(e);return Object.getOwnPropertyNames(e.prototype).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&"constructor"!==n&&Object.defineProperty(t.prototype,n,br(e.prototype,n,r))})),t}(e)};function br(e,t,n){if("function"!=typeof n.value)return n;var r=n.value;return{get:function(){var e=r.bind(this);return Object.defineProperty(this,t,(0,o.__assign)((0,o.__assign)({},n),{value:e})),e},set:function(e){r=e}}}const Pr=function(){function e(e){var t;this._sourceOrigins=[Ir(e).origin,(t=Ir(e),Ir(0===t.hostname.indexOf("www")?t.href:t.href.replace(t.hostname,"www."+t.hostname))).origin],this._isListening=!1,this._listeners={}}return e.prototype.listen=function(){this._isListening||(this._isListening=!0,window.addEventListener("message",this._handleMessage))},e.prototype.stopListen=function(){this._isListening&&(this._isListening=!1,window.removeEventListener("message",this._handleMessage))},e.prototype.addListener=function(e,t){var n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)},e.prototype.removeListener=function(e,t){var n=this._listeners[e];if(n){var r=n.indexOf(t);r>=0&&n.splice(r,1)}},e.prototype.trigger=function(e){var t=this._listeners[e.type];t&&t.forEach((function(t){return t(e)}))},e.prototype._handleMessage=function(e){-1!==this._sourceOrigins.indexOf(e.origin)&&Er(e.data,e.data.type)&&this.trigger(e.data)},(0,o.__decorate)([Ar],e.prototype,"_handleMessage",null),e}(),Or=function(e){function t(){var t=e.call(this,"You haven't complete our spam protection challenge. Please try again.")||this;return t.name="SpamProtectionChallengeNotCompletedError",t.type="spam_protection_challenge_not_completed",t}return(0,o.__extends)(t,e),t}(p),Tr=function(e){function t(){var t=e.call(this,"Please complete our human verification challenge and try again.")||this;return t.name="CardingProtectionChallengeNotCompletedError",t.type="carding_protection_challenge_not_completed",t}return(0,o.__extends)(t,e),t}(p),Rr=function(e){function t(){var t=e.call(this,"We were not able to verify that you are not a robot. Please try again.")||this;return t.name="CardingProtectionFailedError",t.type="carding_protection_failed",t}return(0,o.__extends)(t,e),t}(p),Mr=function(){function e(e){this._googleRecaptcha=e}return e.prototype.handle=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){return"string"==typeof e?[2,this.handleWithRecaptchaSitekey(e,t)]:[2,this.handleWithPaymentHumanVerificationRequestError(e)]}))}))},e.prototype.handleWithPaymentHumanVerificationRequestError=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:if(!this._isPaymentHumanVerificationRequest(e))throw e;return[4,this._initialize(e.body.additional_action_required.data.key)];case 1:return t.sent(),[2,this._performRecaptcha()]}}))}))},e.prototype.handleWithRecaptchaSitekey=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("recaptcha_v2"!==e)throw Error("Human verification method is not supported.");if(!t)throw Error("Recaptcha site key is missing.");return[4,this._initialize(t)];case 1:return n.sent(),[2,this._performRecaptcha()]}}))}))},e.prototype._performRecaptcha=function(){var e=this;return this._googleRecaptcha.execute().pipe((0,I.take)(1)).pipe((0,I.switchMap)((function(t){var n=t.error,r=t.token;return(0,o.__awaiter)(e,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){if(n instanceof Or)throw new Tr;if(n||!r)throw new Rr;return[2,{type:"recaptcha_v2_verification",data:{human_verification_token:r}}]}))}))}))).toPromise()},e.prototype._initialize=function(e){var t="cardingProtectionContainer",n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),(n=document.createElement("div")).setAttribute("id",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)},e.prototype._isPaymentHumanVerificationRequest=function(e){var t=e.body||{},n=t.additional_action_required;return"additional_action_required"===t.status&&n&&"recaptcha_v2_verification"===n.type},e}();var Dr;!function(e){e[e.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",e[e.CustomerNotInitialized=1]="CustomerNotInitialized",e[e.PaymentNotInitialized=2]="PaymentNotInitialized",e[e.ShippingNotInitialized=3]="ShippingNotInitialized",e[e.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(Dr||(Dr={}));const kr=function(e){function t(t){var n=e.call(this,function(e){switch(e){case Dr.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case Dr.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case Dr.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case Dr.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(t))||this;return n.subtype=t,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(t,e),t}(p),Nr=function(e){function t(){var t=e.call(this,"We were not able to complete your spam protection verification. Please try again.")||this;return t.name="SpamProtectionFailedError",t.type="spam_protection_failed",t}return(0,o.__extends)(t,e),t}(p),Lr=function(e){function t(){var t=e.call(this,"Spam protection is not loaded. Please try again.")||this;return t.name="SpamProtectionNotLoadedError",t.type="spam_protection_failed",t}return(0,o.__extends)(t,e),t}(p),zr=function(){function e(e,t){var n=this;this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=(0,An.memoize)((function(e,t,r){var i=new S.Subject;if(!r)throw new Error;return n._widgetId=e.render(r.id,{sitekey:t,size:"invisible",callback:function(){i.next({token:e.getResponse(n._widgetId)}),e.reset(n._widgetId)},"error-callback":function(){i.next({error:new Nr})}}),i}),{isEqual:function(e,t){return e===t}})}return e.prototype.load=function(e,t){var n=this;return this.googleRecaptchaScriptLoader.load().then((function(r){r&&(n._event$=n._memoized(r,t,document.getElementById(e)),n._recaptcha=r)}))},e.prototype.execute=function(){var e=this;return(0,S.defer)((function(){var t=e._event$,n=e._recaptcha;if(!t||!n)throw new kr(Dr.SpamProtectionNotInitialized);return(0,S.defer)((function(){var e=document.querySelector('iframe[src*="bframe"]');return e?(0,S.of)(e):(0,S.throwError)(new Lr)})).pipe((0,I.retryWhen)((function(e){return e.pipe((0,I.delay)(250),(0,I.switchMap)((function(e,t){return t<28?(0,S.of)(e):(0,S.throwError)(e)})))})),(0,I.switchMap)((function(r){return e._watchRecaptchaChallengeWindow(t,r),n.execute(e._widgetId),t})),(0,I.catchError)((function(e){return(0,S.of)({error:e})})))}))},e.prototype._watchRecaptchaChallengeWindow=function(e,t){var n=t.parentElement;if(!n)throw new Lr;var r=n.parentElement;if(!r)throw new Lr;this.mutationObserverFactory.create((function(){"hidden"===r.style.visibility&&e.next({error:new Or})})).observe(r,{attributes:!0,attributeFilter:["style"]})},e}(),Ur=function(){function e(e,t){void 0===t&&(t=window),this._scriptLoader=e,this._window=t}return e.prototype.load=function(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise},e.prototype._loadScript=function(){var e=this,t="initRecaptcha",n=["onload="+t,"render=explicit"].join("&");return new Promise((function(r,i){e._window[t]=function(){return r(e._window.grecaptcha)},e._scriptLoader.loadScript("//www.google.com/recaptcha/api.js?"+n).catch((function(t){e._loadPromise=void 0,i(t)}))}))},e}();function Fr(e){return new zr(new Ur(e),new Cr)}const qr=function(e){function t(t){var n=e.call(this,t||"Unable to proceed due to invalid configuration provided for the hosted payment form.")||this;return n.name="InvalidHostedFormConfigError",n.type="invalid_hosted_form_config",n}return(0,o.__extends)(t,e),t}(p),Br=function(e){function t(t){var n=e.call(this,t||"Unable to proceed due to an unknown error with the hosted payment form.")||this;return n.name="InvalidHostedFormError",n.type="invalid_hosted_form",n}return(0,o.__extends)(t,e),t}(p),Gr=function(e){function t(t){var n=e.call(this,(0,o.__spreadArrays)(["Unable to proceed due to invalid user input values"],(0,m.flatMap)((0,m.values)(t),(function(e){return(0,m.map)(e,(function(e){return e.message}))}))).join(". "))||this;return n.errors=t,n.name="InvalidHostedFormValueError",n.type="invalid_hosted_form_value",n}return(0,o.__extends)(t,e),t}(p);var xr,Yr;!function(e){e.AttachRequested="HOSTED_FIELD:ATTACH_REQUESTED",e.SubmitRequested="HOSTED_FIELD:SUBMITTED_REQUESTED",e.ValidateRequested="HOSTED_FIELD:VALIDATE_REQUESTED"}(xr||(xr={})),function(e){e.AttachSucceeded="HOSTED_INPUT:ATTACH_SUCCEEDED",e.AttachFailed="HOSTED_INPUT:ATTACH_FAILED",e.BinChanged="HOSTED_INPUT:BIN_CHANGED",e.Blurred="HOSTED_INPUT:BLURRED",e.Changed="HOSTED_INPUT:CHANGED",e.CardTypeChanged="HOSTED_INPUT:CARD_TYPE_CHANGED",e.Entered="HOSTED_INPUT:ENTERED",e.Focused="HOSTED_INPUT:FOCUSED",e.SubmitSucceeded="HOSTED_INPUT:SUBMIT_SUCCEEDED",e.SubmitFailed="HOSTED_INPUT:SUBMIT_FAILED",e.Validated="HOSTED_INPUT:VALIDATED"}(Yr||(Yr={}));const Vr=function(){function e(e,t,n,r,i,o,a,s,u){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=r,this._styles=i,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=s,this._cardInstrument=u,this._iframe=document.createElement("iframe"),this._iframe.src="/checkout/payment/hosted-field?version=1.401.0",this._iframe.style.border="none",this._iframe.style.height="100%",this._iframe.style.overflow="hidden",this._iframe.style.width="100%"}return e.prototype.getType=function(){return this._type},e.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t,n=this;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:if(!(e=document.getElementById(this._containerId)))throw new qr("Unable to proceed because the provided container ID is not valid.");return e.appendChild(this._iframe),this._eventListener.listen(),t=(0,S.fromEvent)(this._iframe,"load").pipe((0,I.switchMap)((function(e){var t=e.target;return(0,o.__awaiter)(n,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(e=t&&t.contentWindow))throw new Error("The content window of the iframe cannot be accessed.");return this._eventPoster.setTarget(e),[4,this._eventPoster.post({type:xr.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:Yr.AttachSucceeded,errorType:Yr.AttachFailed})];case 1:return n.sent(),[2]}}))}))})),(0,I.take)(1)).toPromise(),[4,this._detachmentObserver.ensurePresence([this._iframe],t)];case 1:return r.sent(),[2]}}))}))},e.prototype.detach=function(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())},e.prototype.submitForm=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),n=this._eventPoster.post({type:xr.SubmitRequested,payload:{fields:e,data:t}},{successType:Yr.SubmitSucceeded,errorType:Yr.SubmitFailed}),[4,this._detachmentObserver.ensurePresence([this._iframe],n)];case 1:return[2,i.sent()];case 2:if(r=i.sent(),this._isSubmitErrorEvent(r)){if("hosted_form_error"===r.payload.error.code)throw new Br(r.payload.error.message);if(r.payload.response)throw y(r.payload.response);throw new Error(r.payload.error.message)}throw r;case 3:return[2]}}))}))},e.prototype.validateForm=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e=this._eventPoster.post({type:xr.ValidateRequested},{successType:Yr.Validated}),[4,this._detachmentObserver.ensurePresence([this._iframe],e)];case 1:if(!(t=n.sent().payload).isValid)throw new Gr(t.errors);return[2]}}))}))},e.prototype._getFontUrls=function(){var e=this,t="fonts.googleapis.com",n=document.querySelectorAll("link[href*='"+t+"'][rel='stylesheet']");return Array.prototype.slice.call(n).filter((function(e){return Ir(e.href).hostname===t})).filter((function(t){return(0,m.values)(e._styles).map((function(e){return e&&e.fontFamily})).filter((function(e){return"string"==typeof e})).some((function(e){return e.split(/,\s/).some((function(e){return-1!==t.href.indexOf(e.replace(" ","+"))}))}))})).map((function(e){return e.href}))},e.prototype._isSubmitErrorEvent=function(e){return e.type===Yr.SubmitFailed},e}(),Hr=function(){function e(e,t,n,r,i){var a=this;this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=r,this._paymentHumanVerificationHandler=i,this._handleEnter=function(e){var t=e.payload;return(0,o.__awaiter)(a,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.validate()];case 1:return r.sent(),[3,3];case 2:if("InvalidHostedFormValueError"!==(e=r.sent()).name)throw e;return[3,3];case 3:return(void 0===(n=this._eventCallbacks.onEnter)?m.noop:n)(t),[2]}}))}))};var s=this._eventCallbacks,u=s.onBlur,c=void 0===u?m.noop:u,d=s.onCardTypeChange,p=void 0===d?m.noop:d,l=s.onFocus,h=void 0===l?m.noop:l,f=s.onValidate,g=void 0===f?m.noop:f;this._eventListener.addListener(Yr.Blurred,(function(e){var t=e.payload;return c(t)})),this._eventListener.addListener(Yr.CardTypeChanged,(function(e){var t=e.payload;return p(t)})),this._eventListener.addListener(Yr.Focused,(function(e){var t=e.payload;return h(t)})),this._eventListener.addListener(Yr.Validated,(function(e){var t=e.payload;return g(t)})),this._eventListener.addListener(Yr.Entered,this._handleEnter),this._eventListener.addListener(Yr.CardTypeChanged,(function(e){var t=e.payload;return a._cardType=t.cardType})),this._eventListener.addListener(Yr.BinChanged,(function(e){var t=e.payload;return a._bin=t.bin}))}return e.prototype.getBin=function(){return this._bin},e.prototype.getCardType=function(){return this._cardType},e.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return this._eventListener.listen(),e=this._getFirstField(),t=(0,m.without)(this._fields,e),[4,e.attach()];case 1:return n.sent(),[4,Promise.all(t.map((function(e){return e.attach()})))];case 2:return n.sent(),[2]}}))}))},e.prototype.detach=function(){this._eventListener.stopListen(),this._fields.forEach((function(e){e.detach()}))},e.prototype.submit=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._getFirstField().submitForm(this._fields.map((function(e){return e.getType()})),this._payloadTransformer.transform(e,t))];case 1:case 4:return[2,i.sent()];case 2:return n=i.sent(),[4,this._paymentHumanVerificationHandler.handle(n)];case 3:return r=i.sent(),[4,this._getFirstField().submitForm(this._fields.map((function(e){return e.getType()})),this._payloadTransformer.transform(e,r))];case 5:return[2]}}))}))},e.prototype.validate=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){return[2,this._getFirstField().validateForm()]}))}))},e.prototype._getFirstField=function(){var e=this._fields[0];if(!e)throw new qr("Unable to proceed because the payment form has no field defined.");return e},e}();function jr(e){return Boolean(e.instrumentId)}const Wr=function(){function e(e){this._store=e}return e.prototype.transform=function(e,t){var n=this._store.getState(),r=n.checkout.getCheckout(),i=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),s=n.order.getOrderMeta(),u=(0,m.omit)(e.paymentData,"ccExpiry","ccName","ccNumber","ccCvv"),c=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),d=n.paymentMethods.getPaymentMethodsMeta(),p=o&&u&&jr(u)?n.payment.getPaymentToken()+", "+o.vaultAccessToken:n.payment.getPaymentToken();if(!p)throw new Pn(bn.MissingPaymentToken);return{additionalAction:t,authToken:p,checkout:r,config:i,order:a,orderMeta:s,payment:u,paymentMethod:c,paymentMethodMeta:d}},e}(),Kr=function(){function e(e){this._store=e}return e.prototype.create=function(e,t){var n=this,r=Object.keys(t.fields).reduce((function(r,i){var a=t.fields[i];return a?(0,o.__spreadArrays)(r,[new Vr(i,a.containerId,a.placeholder||"",a.accessibilityLabel||"",t.styles||{},new wr(e),new Pr(e),new vr(new Cr),"instrumentId"in a?n._getCardInstrument(a.instrumentId):void 0)]):r}),[]);return new Hr(r,new Pr(e),new Wr(this._store),(0,m.pick)(t,"onBlur","onEnter","onFocus","onCardTypeChange","onValidate"),new Mr(Fr((0,Kn.createScriptLoader)())))},e.prototype._getCardInstrument=function(e){var t=(0,this._store.getState().instruments.getCardInstrument)(e);if(!t)throw new Pn(bn.MissingPaymentInstrument);return t},e}(),Qr=function(e){function t(){var t=e.call(this,"You haven't complete our spam check. Please try again.")||this;return t.name="SpamProtectionNotCompletedError",t.type="spam_protection_not_completed",t}return(0,o.__extends)(t,e),t}(p),Zr=function(){function e(e,t){this._orderRequestSender=e,this._checkoutValidator=t}return e.prototype.loadOrder=function(e,t){var n=this;return new S.Observable((function(r){r.next((0,a.createAction)(ie.LoadOrderRequested)),n._orderRequestSender.loadOrder(e,t).then((function(e){r.next((0,a.createAction)(ie.LoadOrderSucceeded,e.body)),r.complete()})).catch((function(e){r.error((0,a.createErrorAction)(ie.LoadOrderFailed,e))}))}))},e.prototype.loadOrderPayments=function(e,t){var n=this;return new S.Observable((function(r){r.next((0,a.createAction)(ie.LoadOrderPaymentsRequested)),n._orderRequestSender.loadOrder(e,t).then((function(e){r.next((0,a.createAction)(ie.LoadOrderPaymentsSucceeded,e.body)),r.complete()})).catch((function(e){r.error((0,a.createErrorAction)(ie.LoadOrderPaymentsFailed,e))}))}))},e.prototype.loadCurrentOrder=function(e){var t=this;return function(n){return(0,S.defer)((function(){var r=t._getCurrentOrderId(n.getState());if(!r)throw new Pn(bn.MissingOrderId);return t.loadOrder(r,e)}))}},e.prototype.submitOrder=function(e,t){var n=this;return function(r){return(0,S.concat)((0,S.of)((0,a.createAction)(ie.SubmitOrderRequested)),(0,S.defer)((function(){var i=r.getState(),s=i.config.getExternalSource(),u=i.config.getVariantIdentificationToken(),c=i.checkout.getCheckout();if(!c)throw new Pn(bn.MissingCheckout);if(c.shouldExecuteSpamCheck)throw new Qr;return(0,S.from)(n._checkoutValidator.validate(c,t).then((function(){return n._orderRequestSender.submitOrder(n._mapToOrderRequestBody(null!=e?e:{},c.id,c.customerMessage,s),(0,o.__assign)((0,o.__assign)({},t),{headers:{checkoutVariant:u}}))}))).pipe((0,I.switchMap)((function(e){return(0,S.concat)(n.loadOrder(e.body.data.order.orderId,t),(0,S.of)((0,a.createAction)(ie.SubmitOrderSucceeded,e.body.data,(0,o.__assign)((0,o.__assign)({},e.body.meta),{token:e.headers.token}))))})))})).pipe((0,I.catchError)((function(e){return Qn(ie.SubmitOrderFailed,e)}))))}},e.prototype.finalizeOrder=function(e,t){var n=this;return(0,S.concat)((0,S.of)((0,a.createAction)(ie.FinalizeOrderRequested)),(0,S.from)(this._orderRequestSender.finalizeOrder(e,t)).pipe((0,I.switchMap)((function(r){return(0,S.concat)(n.loadOrder(e,t),(0,S.of)((0,a.createAction)(ie.FinalizeOrderSucceeded,r.body.data)))})))).pipe((0,I.catchError)((function(e){return Qn(ie.FinalizeOrderFailed,e)})))},e.prototype._getCurrentOrderId=function(e){var t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId},e.prototype._mapToOrderRequestBody=function(e,t,n,r){var i=e.payment,a=(0,o.__rest)(e,["payment"]);return i?(0,o.__assign)((0,o.__assign)({},a),{cartId:t,customerMessage:n,externalSource:r,payment:{paymentData:i.paymentData,name:i.methodId,gateway:i.gatewayId}}):(0,o.__assign)((0,o.__assign)({},a),{cartId:t,customerMessage:n,externalSource:r})},e}(),Jr=function(e){function t(t){var n=e.call(this,t||"Your checkout could not be processed because some details have changed. Please review your order and try again.")||this;return n.name="CartConsistencyError",n.type="cart_consistency",n}return(0,o.__extends)(t,e),t}(p),Xr=function(e){function t(t){var n=e.call(this,t||"The tax provider is unavailable.")||this;return n.name="OrderTaxProviderUnavailableError",n.type="tax_provider_unavailable",n}return(0,o.__extends)(t,e),t}(p),$r=function(){function e(e){this._requestSender=e}return e.prototype.loadOrder=function(e,t){var n=(void 0===t?{}:t).timeout,r="/api/storefront/orders/"+e,i=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.get(r,{params:{include:nr(["payments","lineItems.physicalItems.socialMedia","lineItems.physicalItems.options","lineItems.physicalItems.categories","lineItems.digitalItems.socialMedia","lineItems.digitalItems.options","lineItems.digitalItems.categories"])},headers:i,timeout:n})},e.prototype.submitOrder=function(e,t){var n=void 0===t?{}:t,r=n.headers,i=n.timeout;return this._requestSender.post("/internalapi/v1/checkout/order",{body:e,headers:(0,m.omitBy)((0,o.__assign)({"X-Checkout-Variant":r&&r.checkoutVariant},jn),m.isNil),timeout:i}).catch((function(e){if("tax_provider_unavailable"===e.body.type)throw new Xr;if("cart_has_changed"===e.body.type)throw new Jr;throw e}))},e.prototype.finalizeOrder=function(e,t){var n=(void 0===t?{}:t).timeout,r="/internalapi/v1/checkout/order/"+e;return this._requestSender.post(r,{timeout:n,headers:jn})},e}(),ei=function(){function e(e,t,n,r){var i=this;this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=r,this.initializeOffsitePayment=function(e){var t=e.methodId,n=e.gatewayId,r=e.instrumentId,o=e.target,s=e.promise,u=e.shouldSaveInstrument,c=e.shouldSetAsDefaultInstrument;return function(e){var d;r?d={formattedPayload:{bigpay_token:r}}:u&&(d={formattedPayload:{vault_payment_instrument:u,set_as_default_stored_instrument:c||null}});var p=i._paymentRequestTransformer.transform({gatewayId:n,methodId:t,paymentData:d},e.getState());return(0,S.concat)((0,S.of)((0,a.createAction)(nt.InitializeOffsitePaymentRequested)),Promise.race([i._paymentRequestSender.initializeOffsitePayment(p,o),s].filter(Boolean)).then((function(){return(0,a.createAction)(nt.InitializeOffsitePaymentSucceeded)}))).pipe((0,I.catchError)((function(e){return Qn(nt.InitializeOffsitePaymentFailed,e)})))}}}return e.prototype.submitPayment=function(e){var t=this;return function(n){return(0,S.concat)((0,S.of)((0,a.createAction)(nt.SubmitPaymentRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(t,void 0,void 0,(function(){var t,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,n.getState()))];case 1:case 4:return[2,i.sent()];case 2:return t=i.sent(),[4,this._paymentHumanVerificationHandler.handle(t)];case 3:return r=i.sent(),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform((0,o.__assign)((0,o.__assign)({},e),{additionalAction:r}),n.getState()))];case 5:return[2]}}))}))})).pipe((0,I.switchMap)((function(e){var r=e.body;return(0,S.concat)(t._orderActionCreator.loadCurrentOrder()(n),(0,S.of)((0,a.createAction)(nt.SubmitPaymentSucceeded,r)))})))).pipe((0,I.catchError)((function(e){return Qn(nt.SubmitPaymentFailed,e)})))}},e}(),ti=function(){function e(e){this._client=e}return e.prototype.submitPayment=function(e){var t=this;return new Promise((function(n,r){t._client.submitPayment(e,(function(e,i){e?r(t._transformResponse(e)):n(t._transformResponse(i))}))}))},e.prototype.initializeOffsitePayment=function(e,t){var n=this;return new Promise((function(){n._client.initializeOffsitePayment(e,null,t)}))},e.prototype._transformResponse=function(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}},e}(),ni=require("@bigcommerce/bigpay-client");function ri(e,t){var n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}const ii=function(){function e(e){this._decimalPlaces=e}return e.prototype.toInteger=function(e){return Math.round(e*Math.pow(10,this._decimalPlaces))},e}();var oi,ai=["per_item_discount","percentage_discount","per_total_discount","shipping_discount","free_shipping"];function si(e){return{code:e.code,discount:e.displayName,discountType:ai.indexOf(e.couponType)}}function ui(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function ci(e,t,n){return void 0===n&&(n="id"),Object.keys(e).reduce((function(r,i){return(0,o.__spreadArrays)(r,e[i].map((function(e){return"giftCertificates"===i?function(e,t){var n=new ii(t);return{id:e.id,imageUrl:"",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:"ItemGiftCertificateEntity",attributes:[],variantId:null}}(e,t):function(e,t,n,r){void 0===r&&(r="id");var i=new ii(n);return{id:e[r],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:i.toInteger(e.extendedListPrice),integerAmountAfterDiscount:i.toInteger(e.extendedSalePrice),integerDiscount:i.toInteger(e.discountAmount),integerUnitPrice:i.toInteger(e.listPrice),integerUnitPriceAfterDiscount:i.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map((function(e){return{name:e.name,value:e.value}})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case"physicalItems":return"ItemPhysicalEntity";case"digitalItems":return"ItemDigitalEntity";case"giftCertificates":return"ItemGiftCertificateEntity";default:return""}}(i),t,n)})))}),[])}function di(e){var t,n,r=e.cart.currency.decimalPlaces,i=new ii(r);return{id:e.cart.id,items:ci(e.cart.lineItems,r),currency:e.cart.currency.code,coupon:{discountedAmount:(0,m.reduce)(e.cart.coupons,(function(e,t){return e+t.discountedAmount}),0),coupons:e.cart.coupons.map(si)},discount:{amount:e.cart.discountAmount,integerAmount:i.toInteger(e.cart.discountAmount)},discountNotifications:(t=e.promotions,n=[],(t||[]).forEach((function(e){(e.banners||[]).forEach((function(e){n.push({placeholders:[],discountType:null,message:"",messageHtml:e.text})}))})),n),giftCertificate:{totalDiscountedAmount:(0,m.reduce)(e.giftCertificates,(function(e,t){return e+t.used}),0),appliedGiftCertificates:(0,m.keyBy)(e.giftCertificates.map(ui),"code")},shipping:{amount:e.shippingCostTotal,integerAmount:i.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(e.shippingCostBeforeDiscount),required:(0,m.some)(e.cart.lineItems.physicalItems,(function(e){return e.isShippingRequired}))},subtotal:{amount:e.subtotal,integerAmount:i.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:i.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:i.toInteger(e.grandTotal)}}}!function(e){e.APPLEPAY="applepay",e.AMAZON_PAY_V2="amazonpay",e.BRAINTREE_PAYPAL="braintreepaypal",e.BRAINTREE_VENMO="braintreevenmo",e.BRAINTREE_PAYPAL_CREDIT="braintreepaypalcredit",e.GOOGLEPAY_ADYENV2="googlepayadyenv2",e.GOOGLEPAY_ADYENV3="googlepayadyenv3",e.GOOGLEPAY_AUTHORIZENET="googlepayauthorizenet",e.GOOGLEPAY_BNZ="googlepaybnz",e.GOOGLEPAY_BRAINTREE="googlepaybraintree",e.GOOGLEPAY_CHECKOUTCOM="googlepaycheckoutcom",e.GOOGLEPAY_CYBERSOURCEV2="googlepaycybersourcev2",e.GOOGLEPAY_ORBITAL="googlepayorbital",e.GOOGLEPAY_STRIPE="googlepaystripe",e.GOOGLEPAY_STRIPEUPE="googlepaystripeupe",e.GOOGLEPAY_WORLDPAYACCESS="googlepayworldpayaccess",e.MASTERPASS="masterpass",e.PAYPALEXPRESS="paypalexpress"}(oi||(oi={}));const pi=oi;function li(e,t){var n=e.firstName||t.firstName||"",r=e.lastName||t.lastName||"";return{addresses:(e.addresses||[]).map((function(e){return ri(e)})),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||"",firstName:n,lastName:r,name:e.fullName||[n,r].join(" "),customerGroupName:e.customerGroup&&e.customerGroup.name}}const hi=function(){function e(){}return e.prototype.format=function(e){var t=e.split(new RegExp("\\s*/\\s*")),n=t[0],r=void 0===n?"":n,i=t[1],o=void 0===i?"":i,a=r.slice(0,2),s=4===o.length?o.slice(-2):o?o.slice(0,2):r.slice(2);return e.length<2?r:e.length>3&&!s?a:a+" / "+s},e.prototype.toObject=function(e){var t=e.split(new RegExp("\\s*/\\s*")),n=t[0],r=void 0===n?"":n,i=t[1],o=void 0===i?"":i;return/^\d+$/.test(r)&&/^\d+$/.test(o)?{month:1===r.length?"0"+r:r.slice(0,2),year:2===o.length?"20"+o:o.slice(0,4)}:{month:"",year:""}},e}(),fi=require("card-validator"),mi=function(){function e(){}return e.prototype.format=function(e){var t=(0,fi.number)(e).card;if(!t)return e;var n=(0,m.max)((0,fi.creditCardType)(e).map((function(e){return(0,m.max)(e.lengths)}))),r=this.unformat(e).slice(0,n);return t.gaps.filter((function(e){return r.length>e})).reduce((function(e,t,n){return[e.slice(0,t+n),e.slice(t+n)].join(" ")}),r)},e.prototype.unformat=function(e){return(0,fi.number)(e).card?e.replace(new RegExp(" ","g"),""):e},e}();function gi(e,t){void 0===t&&(t={});var n,r,i=e.currency.decimalPlaces,o=new ii(i);return{id:e.orderId,items:ci(e.lineItems,e.currency.decimalPlaces,"productId"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:_i(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:o.toInteger(e.baseAmount)},coupon:{discountedAmount:(0,m.reduce)(e.coupons,(function(e,t){return e+t.discountedAmount}),0),coupons:e.coupons.map(si)},discount:{amount:e.discountAmount,integerAmount:o.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:(n=e.payments,r=(0,m.filter)(n,{providerId:"giftcertificate"}),{totalDiscountedAmount:(0,m.reduce)(r,(function(e,t){return t.amount+e}),0),appliedGiftCertificates:(0,m.keyBy)(r.map((function(e){return{code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:""}}})),"code")}),socialData:Ci(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:o.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:o.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:yi(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:o.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:o.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function yi(e){var t=(0,m.find)(e,{providerId:"storecredit"});return t?t.amount:0}function _i(e,t){void 0===t&&(t={});var n,r=(0,m.find)(e,vi);return r?{id:r.providerId,status:(n=r.detail.step,"PAYMENT_STATUS_"+n),helpText:r.detail.instructions,returnUrl:t.returnUrl}:{}}function vi(e){return"giftcertificate"!==e.providerId&&"storecredit"!==e.providerId}function Ci(e){var t={};return(0,o.__spreadArrays)(e.lineItems.physicalItems,e.lineItems.digitalItems).forEach((function(e){var n;t[e.id]=(n=e,["fb","tw","gp"].reduce((function(e,t){var r=n.socialMedia&&(0,m.find)(n.socialMedia,(function(e){return e.code===t}));return r?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},e):e}),{}))})),t}function Si(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}const Ii=function(){function e(){this._cardExpiryFormatter=new hi,this._cardNumberFormatter=new mi}return e.prototype.transform=function(e,t){var n,r=t.billingAddress.getBillingAddress(),i=t.checkout.getCheckout(),a=t.customer.getCustomer(),s=t.order.getOrder(),u=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),c=this._mapShippingAddress(t,u),d=t.consignments.getConsignments(),p=t.consignments.getShippingOption(),l=t.config.getStoreConfig(),h=t.config.getContextConfig(),f=t.instruments.getInstrumentsMeta(),g=t.paymentMethods.getPaymentMethodsMeta(),y=t.order.getOrderMeta(),_=a&&r&&li(a,r),v=f&&e.paymentData&&(jr(e.paymentData)||(n=e.paymentData.formattedPayload)&&("string"==typeof n.bigpay_token||Boolean(n.bigpay_token&&n.bigpay_token.token)))?t.payment.getPaymentToken()+", "+f.vaultAccessToken:t.payment.getPaymentToken();if(!v)throw new Pn(bn.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:v,customer:_,billingAddress:r&&ri(r),shippingAddress:c&&ri(c,d),shippingOption:p&&Si(p,!0),cart:i&&di(i),order:s&&gi(s,y),orderMeta:y,payment:e.paymentData,paymentMethod:u&&this._transformPaymentMethod(u),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},g),{geoCountryCode:h&&h.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:(0,m.pick)(l&&l.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},e.prototype.transformWithHostedFormData=function(e,t,n){var r=t.additionalAction,i=t.authToken,a=t.checkout,s=t.config,u=t.order,c=t.orderMeta,d=t.payment,p=void 0===d?{}:d,l=t.paymentMethod,h=t.paymentMethodMeta,f=a&&a.consignments[0],g=f&&f.shippingAddress,y=f&&f.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:l&&this._transformPaymentMethod(l),customer:u&&u.billingAddress&&a&&li(a.customer,u.billingAddress),billingAddress:u&&u.billingAddress&&ri(u.billingAddress),shippingAddress:g&&a&&ri(g,a.consignments),shippingOption:y&&Si(y,!0),cart:a&&di(a),order:u&&gi(u,c),orderMeta:c,payment:this._transformHostedInputValues(e,p,n),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},h),{geoCountryCode:s&&s.context.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:s&&(0,m.pick)(s.storeConfig.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},e.prototype._transformPaymentMethod=function(e){return"multi-option"!==e.method||e.gateway?e.initializationData&&e.initializationData.gateway?(0,o.__assign)((0,o.__assign)({},e),{id:e.initializationData.gateway}):e.id===pi.BRAINTREE_VENMO?(0,o.__assign)((0,o.__assign)({},e),{id:pi.BRAINTREE_PAYPAL}):e:(0,o.__assign)((0,o.__assign)({},e),{gateway:e.id})},e.prototype._transformHostedInputValues=function(e,t,n){return"instrumentId"in t?(0,o.__assign)((0,o.__assign)({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):(0,o.__assign)((0,o.__assign)({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||""),ccName:e.cardName||"",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||""),hostedFormNonce:n})},e.prototype._mapShippingAddress=function(e,t){var n,r,i,o;if(t){var a=null===(r=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,s=null===(o=null===(i=t.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,u=e.consignments.getConsignments(),c=null==u?void 0:u.every((function(e){return e.selectedPickupOption}));if(a&&c&&"none"===s)return}return e.shippingAddress.getShippingAddress()},e}();var Ei;!function(e){e.AvailableShippingOptions="consignments.availableShippingOptions",e.PhysicalItemsCategoryNames="cart.lineItems.physicalItems.categoryNames",e.DigitalItemsCategoryNames="cart.lineItems.digitalItems.categoryNames"}(Ei||(Ei={}));const wi=function(){function e(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}return e.prototype.unassignItemsByAddress=function(e,t){var n=this;return function(r){var i=r.getState();if(!i.checkout.getCheckout())throw new Pn(bn.MissingCheckout);var o=n._consignmentHasAddress(e)?e.address:e.shippingAddress,a=i.consignments.getConsignmentByAddress(o);if(!a)throw new Sr("No consignment found for the specified address");var s=n._removeLineItems(e.lineItems,a,i.cart.getCart());return s.length?n.updateConsignment({id:a.id,address:o,lineItems:s},t)(r):n.deleteConsignment(a.id,t)(r)}},e.prototype.assignItemsByAddress=function(e,t){var n=this;return function(r){var i=r.getState(),o=n._consignmentHasAddress(e)?e.address:e.shippingAddress,a=i.consignments.getConsignmentByAddress(o);return n._createOrUpdateConsignment({id:a&&a.id,address:o,lineItems:n._addLineItems(e.lineItems,a,i.cart.getCart())},t)(r)}},e.prototype.selectShippingOption=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState(),s=o.checkout.getCheckout(),u=o.consignments.getConsignments();if(!s)throw new Pn(bn.MissingCheckout);if(!u||!u.length)throw new Pn(bn.MissingConsignments);var c={id:u[0].id,shippingOptionId:e},d={id:u[0].id};i.next((0,a.createAction)(x.UpdateShippingOptionRequested,void 0,d)),n._consignmentRequestSender.updateConsignment(s.id,c,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.UpdateShippingOptionSucceeded,t,d)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.UpdateShippingOptionFailed,e,d))}))}))}},e.prototype.loadShippingOptions=function(e){var t=this;return function(n){return S.Observable.create((function(r){var i=n.getState().checkout.getCheckout();if(!i)throw new Pn(bn.MissingCheckout);r.next((0,a.createAction)(x.LoadShippingOptionsRequested)),t._checkoutRequestSender.loadCheckout(i.id,(0,o.__assign)((0,o.__assign)({},e),{params:{include:[Ei.AvailableShippingOptions]}})).then((function(e){var t=e.body;r.next((0,a.createAction)(x.LoadShippingOptionsSucceeded,t)),r.complete()})).catch((function(e){r.error((0,a.createErrorAction)(x.LoadShippingOptionsFailed,e))}))}))}},e.prototype.updateAddress=function(e,t){var n=this;return function(r){var i=n._getUpdateAddressRequestBody(e,r),o=r.getState().consignments.getConsignments();return o&&o.length&&(i.id=o[0].id),n._createOrUpdateConsignment(i,t)(r)}},e.prototype.createConsignments=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new Pn(bn.MissingCheckout);i.next((0,a.createAction)(x.CreateConsignmentsRequested)),n._consignmentRequestSender.createConsignments(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.CreateConsignmentsSucceeded,t)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.CreateConsignmentsFailed,e))}))}))}},e.prototype.updateConsignment=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new Pn(bn.MissingCheckout);var s={id:e.id};i.next((0,a.createAction)(x.UpdateConsignmentRequested,void 0,s)),n._consignmentRequestSender.updateConsignment(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.UpdateConsignmentSucceeded,t,s)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.UpdateConsignmentFailed,e,s))}))}))}},e.prototype.deleteConsignment=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout(),s={id:e};if(!o||!o.id)throw new Pn(bn.MissingCheckout);i.next((0,a.createAction)(x.DeleteConsignmentRequested,void 0,s)),n._consignmentRequestSender.deleteConsignment(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.DeleteConsignmentSucceeded,t,s)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.DeleteConsignmentFailed,e,s))}))}))}},e.prototype.updateShippingOption=function(e,t){var n=this;return function(r){return S.Observable.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new Pn(bn.MissingCheckout);var s={id:e.id};i.next((0,a.createAction)(x.UpdateShippingOptionRequested,void 0,s)),n._consignmentRequestSender.updateConsignment(o.id,e,t).then((function(e){var t=e.body;i.next((0,a.createAction)(x.UpdateShippingOptionSucceeded,t,s)),i.complete()})).catch((function(e){i.error((0,a.createErrorAction)(x.UpdateShippingOptionFailed,e,s))}))}))}},e.prototype._createOrUpdateConsignment=function(e,t){var n=this;return function(r){var i=r.getState().checkout.getCheckout();if(!i||!i.id)throw new Pn(bn.MissingCheckout);return n._isUpdateConsignmentRequest(e)?n.updateConsignment(e,t)(r):n.createConsignments([e],t)(r)}},e.prototype._getUpdateAddressRequestBody=function(e,t){var n=t.getState().cart.getCart();if(!n)throw new Pn(bn.MissingCart);var r=n.lineItems,i=r.physicalItems,a=r.customItems,s=void 0===a?[]:a;return{address:e,lineItems:(0,o.__spreadArrays)(i,s).map((function(e){return{itemId:e.id,quantity:e.quantity}}))}},e.prototype._removeLineItems=function(e,t,n){if(!n)throw new Pn(bn.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map((function(t){var n=(0,m.find)(e,(function(e){return e.itemId===t.itemId}));return(0,o.__assign)((0,o.__assign)({},t),{quantity:n?t.quantity-n.quantity:t.quantity})})).filter((function(e){return e.quantity>0}))},e.prototype._addLineItems=function(e,t,n){if(!t)return e;if(!n)throw new Pn(bn.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter((function(e){return e.quantity>0}))},e.prototype._hydrateLineItems=function(e,t){return e.map((function(e){var n=(0,m.find)(t.lineItems.physicalItems,(function(t){return t.id===e}));return{itemId:e,quantity:n?n.quantity:0}}))},e.prototype._isUpdateConsignmentRequest=function(e){return!!e.id},e.prototype._consignmentHasAddress=function(e){return"object"==typeof e&&"address"in e},e}();var Ai=["consignments.availableShippingOptions","cart.lineItems.physicalItems.options","cart.lineItems.digitalItems.options","customer","promotions.banners"];const bi=function(){function e(e){this._requestSender=e}return e.prototype.createConsignments=function(e,t,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,s=(void 0===a?{}:a).include,u="/api/storefront/checkouts/"+e+"/consignments",c=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post(u,{body:t,params:{include:rr(Ai,s)},headers:c,timeout:i})},e.prototype.updateConsignment=function(e,t,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,s=(void 0===a?{}:a).include,u=t.id,c=(0,o.__rest)(t,["id"]),d="/api/storefront/checkouts/"+e+"/consignments/"+u,p=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.put(d,{body:c,params:{include:rr(Ai,s)},headers:p,timeout:i})},e.prototype.deleteConsignment=function(e,t,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+e+"/consignments/"+t,a=(0,o.__assign)({Accept:Vn.JsonV1},jn),s=nr(Ai);return this._requestSender.delete(i,{params:{include:s},headers:a,timeout:r})},e}(),Pi=function(){function e(e,t){this._googleRecaptcha=e,this._requestSender=t}return e.prototype.initialize=function(e){var t=this;return function(n){return(0,S.concat)((0,S.of)((0,a.createAction)(mn.InitializeRequested,void 0)),(0,S.defer)((function(){return(0,o.__awaiter)(t,void 0,void 0,(function(){var t,r,i,s,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return t=e?e.containerId:"spamProtectionContainer",e||document.getElementById(t)||((r=document.createElement("div")).setAttribute("id",t),document.body.appendChild(r)),i=n.getState(),s=i.config.getStoreConfigOrThrow(),u=s.checkoutSettings.googleRecaptchaSitekey,[4,this._googleRecaptcha.load(t,u)];case 1:return o.sent(),[2,(0,a.createAction)(mn.InitializeSucceeded)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(mn.InitializeFailed,e)})))}},e.prototype.verifyCheckoutSpamProtection=function(){var e=this;return function(t){return(0,S.defer)((function(){var n=t.getState().checkout.getCheckout();if(!n)throw new Pn(bn.MissingCheckout);return(0,S.concat)((0,S.of)((0,a.createAction)(mn.VerifyCheckoutRequested)),(0,S.from)(e.execute()(t)).pipe((0,I.switchMap)((function(t){return lr(t)&&t.payload?(0,S.from)(e._requestSender.validate(n.id,t.payload.token)).pipe((0,I.switchMap)((function(e){var n=e.body;return(0,S.concat)((0,S.of)(t),(0,S.of)((0,a.createAction)(mn.VerifyCheckoutSucceeded,n)))}))):(0,S.of)(t)})))).pipe((0,I.catchError)((function(e){return Qn(mn.VerifyCheckoutFailed,e)})))}))}},e.prototype.execute=function(){var e=this;return function(t){return(0,S.concat)((0,S.of)((0,a.createAction)(mn.ExecuteRequested)),e.initialize()(t),e._googleRecaptcha.execute().pipe((0,I.take)(1)).pipe((0,I.switchMap)((function(t){var n=t.error,r=t.token;return(0,o.__awaiter)(e,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){if(n instanceof Or)throw n;if(n||!r)throw new Nr;return[2,(0,a.createAction)(mn.ExecuteSucceeded,{token:r})]}))}))})))).pipe((0,I.catchError)((function(e){return Qn(mn.ExecuteFailed,e)})))}},e}(),Oi=function(){function e(e){this._requestSender=e}return e.prototype.validate=function(e,t,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+e+"/spam-protection",a=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post(i,{body:{token:t},headers:a,timeout:r})},e}(),Ti=function(){function e(e){this._storeCreditRequestSender=e}return e.prototype.applyStoreCredit=function(e,t){var n=this;return function(r){return(0,S.concat)((0,S.of)((0,a.createAction)(on.ApplyStoreCreditRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n,i,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=r.getState(),!(i=n.checkout.getCheckout()))throw new Pn(bn.MissingCheckout);return[4,e?this._storeCreditRequestSender.applyStoreCredit(i.id,t):this._storeCreditRequestSender.removeStoreCredit(i.id,t)];case 1:return s=o.sent().body,[2,(0,a.createAction)(on.ApplyStoreCreditSucceeded,s)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(on.ApplyStoreCreditFailed,e)})))}},e}(),Ri=function(){function e(e){this._requestSender=e}return e.prototype.applyStoreCredit=function(e,t){var n=(void 0===t?{}:t).timeout,r="/api/storefront/checkouts/"+e+"/store-credit",i=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:nr(ir)}})},e.prototype.removeStoreCredit=function(e,t){var n=(void 0===t?{}:t).timeout,r="/api/storefront/checkouts/"+e+"/store-credit",i=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:nr(ir)}})},e}(),Mi=function(e){function t(t){var n=e.call(this,t)||this;return n.name="UpdateSubscriptionsError",n.type="update_subscriptions",n}return(0,o.__extends)(t,e),t}(h),Di=function(){function e(e){this._subscriptionsRequestSender=e}return e.prototype.updateSubscriptions=function(e,t){var n=this;return(0,S.concat)((0,S.of)((0,a.createAction)(A.UpdateSubscriptionsRequested)),(0,S.defer)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._subscriptionsRequestSender.updateSubscriptions(e,t)];case 1:return n=r.sent().body,[2,(0,a.createAction)(A.UpdateSubscriptionsSucceeded,n)]}}))}))}))).pipe((0,I.catchError)((function(e){return Qn(A.UpdateSubscriptionsFailed,new Mi(e))})))},e}(),ki=function(){function e(e){this._requestSender=e}return e.prototype.updateSubscriptions=function(e,t){var n=(void 0===t?{}:t).timeout,r=(0,o.__assign)({Accept:Vn.JsonV1},jn);return this._requestSender.post("/api/storefront/subscriptions",{body:e,headers:r,timeout:n})},e}();var Ni=(0,m.memoize)((function(e){return Array.isArray(e)?e.map((function(e){return Li(e)})):U(e)?Object.keys(e).reduce((function(t,n){var r;return(0,o.__assign)((0,o.__assign)({},t),((r={})[n]=Li(e[n]),r))}),{}):e}));Ni.cache=new WeakMap;var Li=function(e){return"object"==typeof e&&null!==e?Ni(e):e};function zi(e){return function(){for(var t=[],n=0;n55?55:e<25?25:e}function Qo(e){var t=e.billingAddress,n=e.email,r=e.firstName,i=e.lastName,o=e.phone,a=e.shippingAddress,s=t||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function Zo(e){var t=e.email,n=e.phone,r=e.shippingAddress,i=((null==r?void 0:r.recipientName)||"").split(" ");return{email:t,first_name:i[0]||"",last_name:i[1]||"",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}const Jo=function(){function e(e,t,n,r,i,o){this._store=e,this._checkoutActionCreator=t,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return e.prototype.initialize=function(e){var t,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s,u,c,d,p,l,h,f,m,g=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=e.braintreepaypal,i=e.containerId,a=e.methodId,u=(s=r||{}).messagingContainerId,c=s.onError,!a)throw new Sr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Sr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Sr('Unable to initialize payment because "options.braintreepaypal" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(d=this._store.getState(),p=d.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Sr('Unable to initialize payment because "options.braintreepaypal.currencyCode" argument is not provided.');return l=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:d=o.sent(),p=d.paymentMethods.getPaymentMethodOrThrow(a),l=d.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!p.clientToken)throw new Pn(bn.MissingPaymentMethod);return h={currency:l,intent:null===(t=p.initializationData)||void 0===t?void 0:t.intent,isCreditEnabled:null===(n=p.initializationData)||void 0===n?void 0:n.isCreditEnabled},f=function(e){g._renderPayPalComponents(e,r,i,a,Boolean(p.config.testMode))},m=function(e){return g._handleError(e,i,u,c)},this._braintreeSDKCreator.initialize(p.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(h,f,m)];case 4:return o.sent(),[2]}}))}))},e.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},e.prototype._renderPayPalComponents=function(e,t,n,r,i){var o=t.messagingContainerId;this._renderPayPalMessages(o),this._renderPayPalButton(e,t,n,r,i)},e.prototype._renderPayPalButton=function(e,t,n,r,i){var o=this,a=t.style,s=t.shouldProcessPayment,u=t.onAuthorizeError,c=this._window.paypal,d=null==c?void 0:c.FUNDING.PAYPAL;if(c&&d){var p=a?Wo(a):{},l=c.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:d,style:p,createOrder:function(){return o._setupPayment(e,t,r)},onApprove:function(t){return o._tokenizePayment(t,e,r,s,u)}});l.isEligible()&&l.render("#"+n)}else this._removeElement(n)},e.prototype._renderPayPalMessages=function(e){var t=e&&Boolean(document.getElementById(e)),n=this._window.paypal;if(n&&t){var r=this._store.getState().cart.getCartOrThrow();n.Messages({amount:r.cartAmount,placement:"cart"}).render("#"+e)}else this._removeElement(e)},e.prototype._setupPayment=function(e,t,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,s,u,c,d,p,l,h,f,m,g,y;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=t.buyNowInitializeOptions,s=t.shippingAddress,u=t.onPaymentError,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:a})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return p=c.customer.getCustomer(),l=c.paymentMethods.getPaymentMethodOrThrow(n),h=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,f=null!==(r=t.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,m=s||(null==p?void 0:p.addresses[0]),g=m?jo(m):void 0,[4,e.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:g,amount:h,currency:f,offerCredit:!1,intent:null===(i=l.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw y=o.sent(),u&&u(y),y;case 8:return[2]}}))}))},e.prototype._createBuyNowCart=function(e){var t=e.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new Pn(bn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._tokenizePayment=function(e,t,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var s,u,c,d,p,l;return(0,o.__generator)(this,(function(h){switch(h.label){case 0:return h.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return s=h.sent().deviceData,[4,t.tokenizePayment(e)];case 2:return u=h.sent(),c=u.details,d=u.nonce,p=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:s,billing_address:JSON.stringify(Qo(c)),shipping_address:JSON.stringify(Zo(c))},p&&{cart_id:p})),[2,u];case 3:throw l=h.sent(),i&&i(l),l;case 4:return[2]}}))}))},e.prototype._handleError=function(e,t,n,r){this._removeElement(t),this._removeElement(n),r&&r(e)},e.prototype._removeElement=function(e){var t=e&&document.getElementById(e);t&&t.remove()},e}();var Xo,$o,ea,ta,na;!function(e){e.HORIZONTAL="horizontal",e.VERTICAL="vertical"}(Xo||(Xo={})),function(e){e.SMALL="small",e.MEDIUM="medium",e.LARGE="large",e.RESPONSIVE="responsive"}($o||($o={})),function(e){e.GOLD="gold",e.BLUE="blue",e.SIlVER="silver",e.BLACK="black"}(ea||(ea={})),function(e){e.CHECKOUT="checkout",e.PAY="pay",e.BUYNOW="buynow",e.PAYPAL="paypal",e.CREDIT="credit"}(ta||(ta={})),function(e){e.PILL="pill",e.RECT="rect"}(na||(na={}));const ra=function(){function e(e,t,n,r,i,o){this._store=e,this._checkoutActionCreator=t,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return e.prototype.initialize=function(e){var t,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s,u,c,d,p,l,h=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=e.braintreepaypalcredit,i=e.containerId,!(a=e.methodId))throw new Sr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Sr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Sr('Unable to initialize payment because "options.braintreepaypalcredit" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(s=this._store.getState(),u=s.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Sr('Unable to initialize payment because "options.braintreepaypalcredit.currencyCode" argument is not provided.');return c=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:s=o.sent(),u=s.paymentMethods.getPaymentMethodOrThrow(a),c=s.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!u.clientToken)throw new Pn(bn.MissingPaymentMethod);return d={currency:c,intent:null===(t=u.initializationData)||void 0===t?void 0:t.intent,isCreditEnabled:null===(n=u.initializationData)||void 0===n?void 0:n.isCreditEnabled},p=function(e){return h._renderPayPalButton(e,r,i,a,Boolean(u.config.testMode))},l=function(e){return h._handleError(e,i,r.onError)},this._braintreeSDKCreator.initialize(u.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(d,p,l)];case 4:return o.sent(),[2]}}))}))},e.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},e.prototype._renderPayPalButton=function(e,t,n,r,i){var a=this,s=t.style,u=t.shouldProcessPayment,c=t.onAuthorizeError,d=this._window.paypal,p=!1;if(d){var l=[d.FUNDING.PAYLATER,d.FUNDING.CREDIT],h=s?Wo(s):{};l.forEach((function(s){var l=s===d.FUNDING.CREDIT?(0,o.__assign)({label:ta.CREDIT},h):h;if(!p){var f=d.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:s,style:l,createOrder:function(){return a._setupPayment(e,t,r)},onApprove:function(t){return a._tokenizePayment(t,e,r,u,c)}});f.isEligible()&&(f.render("#"+n),p=!0)}}))}d&&p||this._removeElement(n)},e.prototype._setupPayment=function(e,t,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,s,u,c,d,p,l,h,f,m,g,y;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=t.onPaymentError,s=t.shippingAddress,u=t.buyNowInitializeOptions,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:u})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return p=c.customer.getCustomer(),l=c.paymentMethods.getPaymentMethodOrThrow(n),h=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,f=null!==(r=t.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,m=s||(null==p?void 0:p.addresses[0]),g=m?jo(m):void 0,[4,e.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:g,amount:h,currency:f,offerCredit:!0,intent:null===(i=l.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw y=o.sent(),a&&a(y),y;case 8:return[2]}}))}))},e.prototype._createBuyNowCart=function(e){var t=e.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new Pn(bn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._tokenizePayment=function(e,t,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var s,u,c,d,p,l;return(0,o.__generator)(this,(function(h){switch(h.label){case 0:return h.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return s=h.sent().deviceData,[4,t.tokenizePayment(e)];case 2:return u=h.sent(),c=u.details,d=u.nonce,p=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:s,billing_address:JSON.stringify(Qo(c)),shipping_address:JSON.stringify(Zo(c))},p&&{cart_id:p})),[2,u];case 3:throw l=h.sent(),i&&i(l),l;case 4:return[2]}}))}))},e.prototype._handleError=function(e,t,n){this._removeElement(t),n&&n(e)},e.prototype._removeElement=function(e){var t=e&&document.getElementById(e);t&&t.remove()},e}();var ia={backgroundColor:"#3D95CE",backgroundPosition:"50% 50%",backgroundSize:"80px auto",backgroundImage:'url("/app/assets/img/payment-providers/venmo-logo-white.svg")',backgroundRepeat:"no-repeat",borderRadius:"4px",cursor:"pointer",transition:"0.2s ease",minHeight:"40px",minWidth:"150px",height:"100%",width:"100%"};const oa=function(){function e(e,t,n,r,i){this._store=e,this._paymentMethodActionCreator=t,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._onError=m.noop}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.braintreevenmo,n=e.containerId,!(r=e.methodId))throw new Sr('Unable to initialize payment because "options.methodId" argument is not provided.');return[4,this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(r))];case 1:if(i=o.sent(),!(a=i.paymentMethods.getPaymentMethodOrThrow(r)).clientToken)throw new Pn(bn.MissingPaymentMethod);if(!n)throw new Sr('Unable to initialize payment because "options.containerId" argument is not provided.');return this._onError=(null==t?void 0:t.onError)||this._handleError,this._braintreeSDKCreator.initialize(a.clientToken),[4,this._braintreeSDKCreator.getVenmoCheckout((function(e){return s._handleInitializationVenmoSuccess(e,n,null==t?void 0:t.buyNowInitializeOptions)}),(function(e){return s._handleInitializationVenmoError(e,n)}))];case 2:return o.sent(),[2]}}))}))},e.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},e.prototype._handleError=function(e){throw new Error(e.message)},e.prototype._handleInitializationVenmoSuccess=function(e,t,n){return this._renderVenmoButton(e,t,n)},e.prototype._handleInitializationVenmoError=function(e,t){return this._removeVenmoContainer(t),this._onError(e)},e.prototype._removeVenmoContainer=function(e){var t=document.getElementById(e);t&&t.remove()},e.prototype._renderVenmoButton=function(e,t,n){var r=this,i=document.getElementById(t);if(!i)throw new Sr("Unable to create wallet button without valid container ID.");i.setAttribute("aria-label","Venmo"),Object.assign(i.style,ia),i.addEventListener("click",(function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var t,r=this;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return i.setAttribute("disabled","true"),[4,this._createBuyNowCart(n)];case 1:return t=a.sent(),e.tokenize&&e.tokenize((function(e,n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return i.removeAttribute("disabled"),e?[2,this._onError(e)]:[4,this._handlePostForm(n,null==t?void 0:t.id)];case 1:return r.sent(),[2]}}))}))})),[2]}}))}))})),i.addEventListener("mouseenter",(function(){i.style.backgroundColor="#0a7fc2"})),i.addEventListener("mouseleave",(function(){i.style.backgroundColor=ia.backgroundColor}))},e.prototype._createBuyNowCart=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new Pn(bn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._handlePostForm=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return[4,this._braintreeSDKCreator.getDataCollector()];case 1:return n=a.sent().deviceData,r=e.nonce,i=e.details,this._formPoster.postForm("/checkout.php",(0,o.__assign)({nonce:r,provider:pi.BRAINTREE_VENMO,payment_type:"paypal",device_data:n,action:"set_external_checkout",billing_address:JSON.stringify(Qo(i)),shipping_address:JSON.stringify(Zo(i))},t&&{cart_id:t})),[2]}}))}))},e}();const aa=function(e){function t(t){var n=e.call(this,t||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(t,e),t}(s);var sa;!function(e){e[e.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",e[e.CustomerNotInitialized=1]="CustomerNotInitialized",e[e.PaymentNotInitialized=2]="PaymentNotInitialized",e[e.ShippingNotInitialized=3]="ShippingNotInitialized",e[e.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(sa||(sa={}));const ua=function(e){function t(t){var n=e.call(this,function(e){switch(e){case sa.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case sa.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case sa.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case sa.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(t))||this;return n.subtype=t,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(t,e),t}(s);var ca;!function(e){e[e.MissingBillingAddress=0]="MissingBillingAddress",e[e.MissingCart=1]="MissingCart",e[e.MissingCheckout=2]="MissingCheckout",e[e.MissingConsignments=3]="MissingConsignments",e[e.MissingCustomer=4]="MissingCustomer",e[e.MissingCheckoutConfig=5]="MissingCheckoutConfig",e[e.MissingOrder=6]="MissingOrder",e[e.MissingOrderConfig=7]="MissingOrderConfig",e[e.MissingOrderId=8]="MissingOrderId",e[e.MissingPayment=9]="MissingPayment",e[e.MissingPaymentId=10]="MissingPaymentId",e[e.MissingPaymentInstrument=11]="MissingPaymentInstrument",e[e.MissingPaymentMethod=12]="MissingPaymentMethod",e[e.MissingPaymentRedirectUrl=13]="MissingPaymentRedirectUrl",e[e.MissingPaymentStatus=14]="MissingPaymentStatus",e[e.MissingPaymentToken=15]="MissingPaymentToken",e[e.MissingShippingAddress=16]="MissingShippingAddress"}(ca||(ca={}));const da=function(e){function t(t){var n=e.call(this,function(e){switch(e){case ca.MissingBillingAddress:return"Unable to proceed because billing address data is unavailable.";case ca.MissingCart:return"Unable to proceed because cart data is unavailable.";case ca.MissingConsignments:return"Unable to proceed because consignments data is unavailable.";case ca.MissingCheckout:return"Unable to proceed because checkout data is unavailable.";case ca.MissingCustomer:return"Unable to proceed because customer data is unavailable.";case ca.MissingCheckoutConfig:case ca.MissingOrderConfig:return"Unable to proceed because configuration data is unavailable.";case ca.MissingOrder:return"Unable to proceed because order data is unavailable.";case ca.MissingOrderId:return"Unable to proceed because order ID is unavailable or not generated yet.";case ca.MissingPayment:return"Unable to proceed because payment data is unavailable.";case ca.MissingPaymentToken:return"Unable to proceed because the token required to submit a payment is missing.";case ca.MissingPaymentMethod:return"Unable to proceed because payment method data is unavailable or not properly configured.";case ca.MissingShippingAddress:return"Unable to proceed because shipping address data is unavailable.";default:return"Unable to proceed because the required data is unavailable."}}(t))||this;return n.subtype=t,n.name="MissingDataError",n.type="missing_data",n}return(0,o.__extends)(t,e),t}(s),pa=function(){function e(e,t,n,r,i){this._store=e,this._formPoster=t,this._checkoutActionCreator=n,this._googlePayPaymentProcessor=r,this._cartRequestSender=i}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.containerId,n=e.methodId,r=e.currencyCode,i=this._getGooglePayOptions(e),a=i.buyNowInitializeOptions,!t||!n)throw new aa('Unable to proceed because "containerId" argument is not provided.');if(s=this._store.getState(),u=s.paymentMethods.getPaymentMethod(n),c=((null==u?void 0:u.config)||{}).testMode,this._methodId=n,this._isBuyNowFlow=!!a,!this._isBuyNowFlow)return[3,2];if(!r)throw new aa('Unable to initialize payment because "options.currencyCode" argument is not provided.');return d=i.buyNowInitializeOptions,this._googlePayPaymentProcessor.updateBuyNowFlowFlag(this._isBuyNowFlow),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId(),this._getGooglePayClientOptions(r,c,d))];case 1:return o.sent(),[3,5];case 2:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 3:return o.sent(),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId())];case 4:o.sent(),o.label=5;case 5:return this._walletButton=this._createSignInButton(t,i,r),[2]}}))}))},e.prototype.deinitialize=function(){return this._walletButton&&this._walletButton.parentNode&&(this._walletButton.parentNode.removeChild(this._walletButton),this._walletButton=void 0),this._googlePayPaymentProcessor.deinitialize()},e.prototype._getGooglePayClientOptions=function(e,t,n){var r=this;return{environment:t?"TEST":"PRODUCTION",paymentDataCallbacks:{onPaymentDataChanged:function(t){var i=t.callbackTrigger;return(0,o.__awaiter)(r,void 0,void 0,(function(){var t,r,a,s,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(i!==go.INITIALIZE)return[2];o.label=1;case 1:return o.trys.push([1,5,,6]),t=this,[4,this._createBuyNowCart(n)];case 2:return t._buyNowCart=o.sent(),this._buyNowCart?(r=this._buyNowCart,a=r.id,s=r.cartAmount,[4,this._store.dispatch(this._checkoutActionCreator.loadCheckout(a))]):[3,4];case 3:return o.sent(),[2,{newTransactionInfo:{currencyCode:e,totalPrice:String(s),totalPriceStatus:yo.FINAL}}];case 4:return[3,6];case 5:throw u=o.sent(),new Go(u);case 6:return[2]}}))}))}}}},e.prototype._createSignInButton=function(e,t,n){var r=this,i=document.getElementById(e),o=t.buttonType,a=t.buttonColor;if(!i)throw new aa("Unable to create sign-in button without valid container ID.");var s=this._googlePayPaymentProcessor.createButton((function(e){return r._handleWalletButtonClick(e,n)}),o,a);return i.appendChild(s),s},e.prototype._getMethodId=function(){if(!this._methodId)throw new ua(sa.PaymentNotInitialized);return this._methodId},e.prototype._getGooglePayOptions=function(e){if(e.methodId===pi.GOOGLEPAY_ADYENV2&&e.googlepayadyenv2)return e.googlepayadyenv2;if(e.methodId===pi.GOOGLEPAY_ADYENV3&&e.googlepayadyenv3)return e.googlepayadyenv3;if(e.methodId===pi.GOOGLEPAY_AUTHORIZENET&&e.googlepayauthorizenet)return e.googlepayauthorizenet;if(e.methodId===pi.GOOGLEPAY_BNZ&&e.googlepaybnz)return e.googlepaybnz;if(e.methodId===pi.GOOGLEPAY_BRAINTREE&&e.googlepaybraintree)return e.googlepaybraintree;if(e.methodId===pi.GOOGLEPAY_CHECKOUTCOM&&e.googlepaycheckoutcom)return e.googlepaycheckoutcom;if(e.methodId===pi.GOOGLEPAY_CYBERSOURCEV2&&e.googlepaycybersourcev2)return e.googlepaycybersourcev2;if(e.methodId===pi.GOOGLEPAY_ORBITAL&&e.googlepayorbital)return e.googlepayorbital;if(e.methodId===pi.GOOGLEPAY_STRIPE&&e.googlepaystripe)return e.googlepaystripe;if(e.methodId===pi.GOOGLEPAY_STRIPEUPE&&e.googlepaystripeupe)return e.googlepaystripeupe;if(e.methodId===pi.GOOGLEPAY_WORLDPAYACCESS&&e.googlepayworldpayaccess)return e.googlepayworldpayaccess;throw new aa},e.prototype._createBuyNowCart=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new da(ca.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new Go;case 4:return[2]}}))}))},e.prototype._handleWalletButtonClick=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:e.preventDefault(),i.label=1;case 1:return i.trys.push([1,7,,8]),this._isBuyNowFlow&&t&&this._googlePayPaymentProcessor.updatePaymentDataRequest({transactionInfo:{currencyCode:t,totalPrice:"0",totalPriceStatus:yo.ESTIMATED},callbackIntents:[_o.OFFER]}),[4,this._googlePayPaymentProcessor.displayWallet()];case 2:return n=i.sent(),[4,this._googlePayPaymentProcessor.handleSuccess(n)];case 3:return i.sent(),Xi(this._store.getState().cart.getCartOrThrow())>0&&n.shippingAddress?[4,this._googlePayPaymentProcessor.updateShippingAddress(n.shippingAddress)]:[3,5];case 4:i.sent(),i.label=5;case 5:return[4,this._onPaymentSelectComplete()];case 6:return i.sent(),[3,8];case 7:if((r=i.sent())&&"CANCELED"!==r.message)throw r;return[3,8];case 8:return[2]}}))}))},e.prototype._onPaymentSelectComplete=function(){var e,t=null===(e=this._buyNowCart)||void 0===e?void 0:e.id;this._formPoster.postForm("/checkout.php",(0,o.__assign)({headers:(0,o.__assign)({Accept:"text/html","Content-Type":"application/x-www-form-urlencoded"},jn)},t&&{action:"set_external_checkout",provider:this._methodId,cart_id:t}))},(0,o.__decorate)([Ar],e.prototype,"_handleWalletButtonClick",null),e}();var la={es:["es_es","es_mx","es_pe","es_co","es_ar","es_cl"],en:["en_us","en_gb","en_ca","en_es","en_fr","en_ie","en_sg","en_au","en_nz","en_my","en_hk","en_th","en_ae","en_sa","en_qa","en_kw","en_za"],pt:["pt_br"],zu:["zu_za"],ar:["ar_sa","ar_ae","ar_qa","ar_kw"],zh:["zh_sg","zh_hk"],ms:["ms_my"],uk:["uk_ua"],sv:["sv_se"],hr:["hr_hr"],pl:["pl_pl"],nl:["nl_be"],it:["it_it"],de:["de_de"],fr:["fr_fr","fr_ca"]};function ha(e){var t=e.replace("-","_").toLowerCase().split("_"),n=t[0],r=n+"_"+t[1],i=la[n];return i?i.indexOf(r)>-1?r:i[0]:"en_us"}const fa=function(){function e(e,t,n,r){this._store=e,this._checkoutActionCreator=t,this._masterpassScriptLoader=n,this._locale=r}return e.prototype.initialize=function(e){var t=this,n=e.containerId,r=e.methodId;if(!n||!r)throw new Sr('Unable to proceed because "containerId" argument is not provided.');return this._methodId=r,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(e){var n=e.paymentMethods.getPaymentMethod(r);if(!n||!n.initializationData.checkoutId)throw new Pn(bn.MissingPaymentMethod);var i={useMasterpassSrc:n.initializationData.isMasterpassSrcEnabled,language:ha(t._locale),testMode:n.config.testMode,checkoutId:n.initializationData.checkoutId};return t._masterpassScriptLoader.load(i)})).then((function(e){t._masterpassClient=e,t._signInButton=t._createSignInButton(n)}))},e.prototype.deinitialize=function(){return this._signInButton&&this._signInButton.parentNode&&(this._signInButton.removeEventListener("click",this._handleWalletButtonClick),this._signInButton.parentNode.removeChild(this._signInButton),this._signInButton=void 0),Promise.resolve()},e.prototype._createSignInButton=function(e){var t=document.getElementById(e),n=this._store.getState(),r=this._methodId?n.paymentMethods.getPaymentMethod(this._methodId):null,i=n.config.getStoreConfig();if(!t)throw new Error("Need a container to place the button");if(!r)throw new Pn(bn.MissingPaymentMethod);if(!i)throw new Sr("Unable to retrieve store configuration");var o=document.createElement("input");if(o.type="image",r.initializationData.isMasterpassSrcEnabled){var a=r.config.testMode?"sandbox.":"",s=r.initializationData.checkoutId,u=["locale="+ha(this._locale),"paymentmethod=master,visa,amex,discover","checkoutid="+s];o.src=["https://"+a+"src.mastercard.com/assets/img/btn/src_chk_btn_126x030px.svg",u.join("&")].join("?")}else o.src="https://static.masterpass.com/dyn/img/btn/global/mp_chk_btn_160x037px.svg";return t.appendChild(o),o.addEventListener("click",this._handleWalletButtonClick),o},e.prototype._createMasterpassPayload=function(){var e=this._store.getState(),t=e.checkout.getCheckout(),n=this._methodId?e.paymentMethods.getPaymentMethod(this._methodId):null;if(!t)throw new Pn(bn.MissingCheckout);if(!n)throw new Pn(bn.MissingPaymentMethod);return{checkoutId:n.initializationData.checkoutId,allowedCardTypes:n.initializationData.allowedCardTypes,amount:t.cart.cartAmount.toString(),currency:t.cart.currency.code,cartId:t.cart.id,callbackUrl:("cart",window.location.origin+"/checkout.php?action=set_external_checkout&provider=masterpass&gateway=stripe&origin=cart")}},e.prototype._handleWalletButtonClick=function(){if(!this._masterpassClient)throw new kr(Dr.CheckoutButtonNotInitialized);this._masterpassClient.checkout(this._createMasterpassPayload())},(0,o.__decorate)([Ar],e.prototype,"_handleWalletButtonClick",null),e}(),ma=function(){function e(e,t,n,r,i){void 0===i&&(i=""),this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=r,this._host=i}return e.prototype.initialize=function(e){var t=this,n=e.paypal,r=this._store.getState(),i=this._paymentMethod=r.paymentMethods.getPaymentMethod(e.methodId);if(!n)throw new Sr;if(!i)throw new Pn(bn.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then((function(r){var a,s,u;if(!i||!i.config.merchantId)throw new Pn(bn.MissingPaymentMethod);var c=i.config.merchantId,d=i.config.testMode?"sandbox":"production",p=((a={})[d]=n.clientId,a),l=r.FUNDING.CREDIT||"credit",h=n.allowCredit?[l]:[],f=n.allowCredit?[]:[l];return r.Button.render({env:d,client:p,commit:n.shouldProcessPayment,funding:{allowed:h,disallowed:f},style:(0,o.__assign)((0,o.__assign)({shape:na.RECT},(0,m.pick)(n.style,"layout","color","label","shape","tagline","fundingicons")),{size:"paypalexpress"===i.id&&"small"===(null===(s=n.style)||void 0===s?void 0:s.size)?$o.RESPONSIVE:null===(u=n.style)||void 0===u?void 0:u.size}),payment:function(e,r){return t._setupPayment(c,r,n.onPaymentError)},onAuthorize:function(e,r){return t._tokenizePayment(e,r,n.shouldProcessPayment,n.onAuthorizeError)}},e.containerId)}))},e.prototype.deinitialize=function(){return this._paymentMethod=void 0,Promise.resolve()},e.prototype._setupPayment=function(e,t,n){var r=this;if(!t)throw new kr(Dr.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(n){var i=n.cart.getCart(),a=i?i.id:"";return t.request.post(r._host+"/api/storefront/payment/paypalexpress",{merchantId:e,cartId:a},{headers:(0,o.__assign)({"X-API-INTERNAL":Hn},jn)})})).then((function(e){return e.id})).catch((function(e){throw n&&n(e),e}))},e.prototype._tokenizePayment=function(e,t,n,r){var i=this;if(!this._paymentMethod)throw new kr(Dr.CheckoutButtonNotInitialized);if(!t)throw new kr(Dr.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new Pn(bn.MissingPayment);var o=this._paymentMethod.id;return t.payment.get(e.paymentID).then((function(t){i._formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:o,action:n?"process_payment":"set_external_checkout",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})}))},e}();function ga(){try{return process.env.NODE_ENV||0}catch(e){return"development"}}const ya=function(){function e(e){this._console=e}return e.prototype.log=function(){for(var e=[],t=0;t0}));a.length>1&&a[0].matches===a[1].matches&&"development"===ga()&&Ca.warn("The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.");var s=a[0];if(s&&s.token)return s.token;if(this._useFallback){var u=null===(n=o.find((function(e){return e.default})))||void 0===n?void 0:n.token;if(u)return u}throw new Error("Unable to resolve to a registered token with the provided token.")},e}();function Ia(e,t){return Object.assign(e,{resolveIds:t})}const Ea=function(e){function t(t){var n=e.call(this,t||"Payment process was cancelled.")||this;return n.name="PaymentMethodCancelledError",n.type="payment_cancelled",n}return(0,o.__extends)(t,e),t}(s);const wa=function(e){function t(t){var n=e.call(this,t||"An unexpected error has occurred during buy now cart creation process. Please try again later.")||this;return n.name="BuyNowCartCreationError",n.type="buy_now_cart_creation_error",n}return(0,o.__extends)(t,e),t}(s);function Aa(e){if(!function(e){return"ApplePaySession"in e}(e))throw new Error("Apple pay is not supported")}const ba=function(){function e(){}return e.prototype.create=function(e){return Aa(window),new ApplePaySession(1,e)},e}();var Pa;!function(e){e.Subtotal="Subtotal",e.Shipping="Shipping"}(Pa||(Pa={}));const Oa=function(){function e(e,t,n){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._onAuthorizeCallback=m.noop,this._subTotalLabel=Pa.Subtotal,this._shippingLabel=Pa.Shipping}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.methodId,n=e.containerId,r=e.applepay,Aa(window),!t||!r)throw new da(ca.MissingPaymentMethod);return i=r.buttonClassName,a=r.onPaymentAuthorize,s=r.buyNowInitializeOptions,u=r.requiresShipping,this._requiresShipping=u,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=a,s?[3,2]:[4,this._paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return[4,this._paymentIntegrationService.loadPaymentMethod(t)];case 3:return o.sent(),c=this._paymentIntegrationService.getState(),this._paymentMethod=c.getPaymentMethodOrThrow(t),[4,this._paymentIntegrationService.verifyCheckoutSpamProtection()];case 4:return o.sent(),this._applePayButton=this._createButton(n,i),this._applePayButton.addEventListener("click",this._handleWalletButtonClick.bind(this)),[2,Promise.resolve()]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype._createButton=function(e,t){void 0===t&&(t="apple-pay-checkout-button");var n=document.getElementById(e);if(!n)throw new aa("Unable to create wallet button without valid container ID.");document.body.classList.add("apple-pay-supported");var r=document.createElement("div");return r.setAttribute("class",t),r.setAttribute("role","button"),r.setAttribute("aria-label","Apple Pay button"),n.appendChild(r),r},e.prototype._handleWalletButtonClick=function(e){var t;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,s,u,c,d,p,l,h,f;return(0,o.__generator)(this,(function(o){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new da(ca.MissingPaymentMethod);return this._buyNowInitializeOptions&&"function"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody?(n=this._paymentMethod.initializationData,r=n.countryCode,i=n.currencyCode,a=n.merchantCapabilities,s=n.supportedNetworks,u=n.storeName,h=this._getRequestWithEmptyTotal(r,i,s,a),this._requiresShipping&&(null===(t=h.requiredShippingContactFields)||void 0===t||t.push("postalAddress")),f=this._sessionFactory.create(h),this._handleApplePayEvents(f,this._paymentMethod,u),f.begin()):(c=this._paymentIntegrationService.getState(),d=c.getCartOrThrow(),p=c.getStoreConfigOrThrow(),l=c.getCheckoutOrThrow(),h=this._getBaseRequest(d,l,p,this._paymentMethod),f=this._sessionFactory.create(h),this._handleApplePayEvents(f,this._paymentMethod,p.storeProfile.storeName),f.begin()),[2]}))}))},e.prototype._getRequestWithEmptyTotal=function(e,t,n,r){return{countryCode:e,currencyCode:t,supportedNetworks:n,merchantCapabilities:r,total:{label:"",amount:"0",type:"pending"},requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"]}},e.prototype._getBaseRequest=function(e,t,n,r){var i,o=n.storeProfile,a=o.storeCountryCode,s=o.storeName,u=e.currency,c=u.code,d=u.decimalPlaces,p=r.initializationData,l=p.merchantCapabilities,h=p.supportedNetworks,f=e.lineItems.physicalItems.length>0,m={requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"],countryCode:a,currencyCode:c,merchantCapabilities:l,supportedNetworks:h,lineItems:[],total:f?{label:s,amount:""+t.grandTotal.toFixed(d),type:"pending"}:{label:s,amount:""+t.grandTotal.toFixed(d),type:"final"}};if(f)null===(i=m.requiredShippingContactFields)||void 0===i||i.push("postalAddress");else{var g=[{label:this._subTotalLabel,amount:""+t.subtotal.toFixed(d)}];t.taxes.forEach((function(e){return g.push({label:e.name,amount:""+e.amount.toFixed(d)})})),m.lineItems=g}return m},e.prototype._handleApplePayEvents=function(e,t,n){var r=this;e.onvalidatemerchant=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this._onValidateMerchant(t,n)];case 1:return r=i.sent().body,e.completeMerchantValidation(r),[3,3];case 2:throw i.sent(),new Error("Merchant validation failed");case 3:return[2]}}))}))},this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return[4,this._createBuyNowCart()];case 1:return t.sent(),this._handlePaymentMethodSelected(e),[2]}}))}))}),e.onshippingcontactselected=function(t){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return this._buyNowInitializeOptions&&this._requiresShipping?[4,this._createBuyNowCart()]:[3,2];case 1:r.sent(),r.label=2;case 2:return[4,this._handleShippingContactSelected(e,n,t)];case 3:return r.sent(),[2]}}))}))},e.onshippingmethodselected=function(t){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._handleShippingMethodSelected(e,n,t)];case 1:return r.sent(),[2]}}))}))},e.oncancel=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),e="/remote-checkout/"+t.id+"/signout",[4,this._requestSender.get(e)];case 1:return n.sent(),[4,this._paymentIntegrationService.loadCheckout()];case 2:return[2,n.sent()];case 3:throw n.sent(),new Ea;case 4:return[2]}}))}))},e.onpaymentauthorized=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){return[2,this._onPaymentAuthorized(n,e,t)]}))}))}},e.prototype._createBuyNowCart=function(){var e,t;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(i.trys.push([0,3,,4]),!(n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e)))throw new da(ca.MissingCart);return[4,this._paymentIntegrationService.createBuyNowCart(n)];case 1:return r=i.sent(),[4,this._paymentIntegrationService.loadCheckout(r.id)];case 2:return i.sent(),[3,4];case 3:throw i.sent(),new wa;case 4:return[2]}}))}))},e.prototype._handlePaymentMethodSelected=function(e){var t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getStoreConfigOrThrow(),i=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new da(ca.MissingPaymentMethod);var o=this._getBaseRequest(n,i,r,this._paymentMethod);delete o.total.type,e.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})},e.prototype._handleShippingContactSelected=function(e,t,n){var r;return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s,u,c,d,p,l,h,f,m,g;return(0,o.__generator)(this,(function(y){switch(y.label){case 0:i=this._transformContactToAddress(n.shippingContact),y.label=1;case 1:return y.trys.push([1,3,,4]),[4,this._paymentIntegrationService.updateShippingAddress(i)];case 2:return y.sent(),[3,4];case 3:throw y.sent(),e.abort(),new Error("Shipping address update failed");case 4:if(a=this._paymentIntegrationService.getState(),s=a.getCartOrThrow().currency.decimalPlaces,u=a.getCheckoutOrThrow(),c=null===(r=u.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,d=u.consignments[0].availableShippingOptions,p=null==d?void 0:d.find((function(e){return e.id===c})),l=null==d?void 0:d.filter((function(e){return e.id!==c})),h=p?[{label:p.description,amount:""+p.cost.toFixed(s),detail:p.additionalDescription,identifier:p.id}]:[],l&&(0,o.__spreadArrays)(l.filter((function(e){return e.isRecommended})),l.filter((function(e){return!e.isRecommended}))).forEach((function(e){return h.push({label:e.description,amount:""+e.cost.toFixed(s),detail:e.additionalDescription,identifier:e.id})})),!(d instanceof Array))throw new Error("Shipping options not available.");if(0===d.length)return e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:"pending",label:t,amount:""+u.grandTotal.toFixed(s)},[]),[2];f=d.find((function(e){return e.isRecommended})),m=f?f.id:d[0].id,g=p?p.id:m,y.label=5;case 5:return y.trys.push([5,7,,8]),[4,this._updateShippingOption(g)];case 6:return y.sent(),[3,8];case 7:throw y.sent(),new Error("Shipping options update failed");case 8:return a=this._paymentIntegrationService.getState(),u=a.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:h,newTotal:{type:"final",label:t,amount:""+u.grandTotal.toFixed(s)},newLineItems:this._getUpdatedLineItems(u,s)}),[2]}}))}))},e.prototype._handleShippingMethodSelected=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:r=n.shippingMethod.identifier,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,this._updateShippingOption(r)];case 2:return o.sent(),[3,4];case 3:throw o.sent(),e.abort(),new Error("Shipping option selection update failed.");case 4:return i=this._paymentIntegrationService.getState(),a=i.getCartOrThrow().currency.decimalPlaces,s=i.getCheckoutOrThrow(),e.completeShippingMethodSelection({newTotal:{type:"final",label:t,amount:""+s.grandTotal.toFixed(a)},newLineItems:this._getUpdatedLineItems(s,a)}),[2]}}))}))},e.prototype._getUpdatedLineItems=function(e,t){var n=[{label:this._subTotalLabel,amount:""+e.subtotal.toFixed(t)}];return e.taxes.forEach((function(e){return n.push({label:e.name,amount:""+e.amount.toFixed(t)})})),n.push({label:this._shippingLabel,amount:""+e.shippingCostTotal.toFixed(t)}),n},e.prototype._updateShippingOption=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){return[2,this._paymentIntegrationService.selectShippingOption(e)]}))}))},e.prototype._onValidateMerchant=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){return n=["validationUrl="+t.validationURL,"merchantIdentifier="+e.initializationData.merchantId,"displayName="+e.initializationData.storeName,"domainName="+window.location.hostname].join("&"),[2,this._requestSender.post((i=e.initializationData.paymentsUrl,i+"/api/public/v1/payments/applepay/validate_merchant"),{credentials:!1,headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded","X-XSRF-TOKEN":null},body:n})];var i}))}))},e.prototype._onPaymentAuthorized=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s,u,c,d,p,l,h,f,m;return(0,o.__generator)(this,(function(g){switch(g.label){case 0:r=e.payment,i=r.token,a=r.billingContact,s=r.shippingContact,u=this._paymentIntegrationService.getState(),c=u.getCartOrThrow(),d=c.lineItems.physicalItems.length>0,p={methodId:n.id,paymentData:{formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},l=this._transformContactToAddress(a),h=this._transformContactToAddress(s),f=null==s?void 0:s.emailAddress,m=(null==s?void 0:s.phoneNumber)||"",g.label=1;case 1:return g.trys.push([1,7,,8]),[4,this._paymentIntegrationService.updateBillingAddress((0,o.__assign)((0,o.__assign)({},l),{email:f,phone:m}))];case 2:return g.sent(),d?[4,this._paymentIntegrationService.updateShippingAddress(h)]:[3,4];case 3:g.sent(),g.label=4;case 4:return[4,this._paymentIntegrationService.submitOrder({useStoreCredit:!1})];case 5:return g.sent(),[4,this._paymentIntegrationService.submitPayment(p)];case 6:return g.sent(),t.completePayment(ApplePaySession.STATUS_SUCCESS),[2,this._onAuthorizeCallback()];case 7:throw g.sent(),t.completePayment(ApplePaySession.STATUS_FAILURE),new Error("Payment cannot complete");case 8:return[2]}}))}))},e.prototype._transformContactToAddress=function(e){return{firstName:(null==e?void 0:e.givenName)||"",lastName:(null==e?void 0:e.familyName)||"",city:(null==e?void 0:e.locality)||"",company:"",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||"",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||"",postalCode:(null==e?void 0:e.postalCode)||"",countryCode:(null==e?void 0:e.countryCode)||"",phone:(null==e?void 0:e.phoneNumber)||"",stateOrProvince:(null==e?void 0:e.administrativeArea)||"",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||"",customFields:[]}},e}(),Ta=Ia((function(e){var t=e.getState().getHost;return new Oa((0,r.createRequestSender)({host:t()}),e,new ba)}),[{id:"applepay"}]),Ra=require("query-string"),Ma=function(e){function t(t){var n=e.call(this,t||"Not implemented.")||this;return n.name="NotImplementedError",n.type="not_implemented",n}return(0,o.__extends)(t,e),t}(s);var Da,ka,Na;!function(e){e.SandboxMode="bolt_sandbox",e.StagingMode="bolt_staging",e.DevelopmentMode="bolt_development"}(Da||(Da={})),function(e){e.Small="small",e.Medium="medium",e.Large="large"}(ka||(ka={})),function(e){e.Pill="pill",e.Rect="rect"}(Na||(Na={}));const La=function(){function e(e,t,n){void 0===n&&(n=window),this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=n}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d,p,l,h,f;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.bolt,n=e.containerId,r=e.methodId,a=(i=t||{}).buyNowInitializeOptions,s=i.style,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.bolt" argument is not provided.');if(!Boolean(a))throw new Ma("Only buy now flow is implemented for Bolt button");if(!(null==a?void 0:a.storefrontApiToken)||"string"!=typeof a.storefrontApiToken)throw new aa('Unable to initialize payment because "options.storefrontApiToken" argument is not provided.');return u=this.paymentIntegrationService.getState(),c=u.getPaymentMethodOrThrow(r),d=c.initializationData,p=c.config,h=(l=d||{}).publishableKey,f=l.developerConfig,[4,this.boltScriptLoader.loadBoltClient(h,p.testMode,f,"BigCommerce",a.storefrontApiToken)];case 1:return o.sent(),this.renderButton(n,c,s),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r;"function"==typeof(null===(r=this.boltHostWindow.BoltConnect)||void 0===r?void 0:r.setupProductPageCheckout)&&(this.addButtonContainer(e,t,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())},e.prototype.addButtonContainer=function(e,t,n){var r=document.getElementById(e);if(r){var i=document.createElement("div"),o=document.createElement("object");i.setAttribute("id","product-page-checkout-wrapper"),i.setAttribute("class","bolt-button-wrapper"),i.setAttribute("style","display:none"),i.setAttribute("data-tid","product-page-checkout-wrapper"),o.setAttribute("data",this.getBoltObjectData(t,n)),o.setAttribute("class","bolt-product-checkout-button"),i.append(o),r.innerHTML="",r.append(i)}},e.prototype.getBoltObjectData=function(e,t){var n=e.initializationData,r=e.config,i=n||{},o=i.publishableKey,a=i.developerConfig,s=this.boltScriptLoader.getDomainURL(!!r.testMode,a),u=this.getButtonHeight(null==t?void 0:t.size),c=this.getButtonBorderRadius(null==t?void 0:t.shape,u);return(0,Ra.stringifyUrl)({url:"https://"+s+"/v1/checkout_button",query:{publishable_key:o,variant:"ppc",height:u,border_radius:c}})},e.prototype.getButtonHeight=function(e){if(e)switch(e){case ka.Small:return 25;case ka.Large:return 45;case ka.Medium:default:return 40}},e.prototype.getButtonBorderRadius=function(e,t){if(e)switch(e){case Na.Pill:return t?Math.round(t/2):void 0;case Na.Rect:default:return 4}},e}();const za=function(e){function t(t){var n=e.call(this,t||"Unable to proceed because the client library of a payment method is not loaded or ready to be used.")||this;return n.name="PaymentMethodClientUnavailableError",n.type="payment_method_client_unavailable",n}return(0,o.__extends)(t,e),t}(s),Ua=function(){function e(e,t){void 0===t&&(t=window),this.scriptLoader=e,this.boltHostWindow=t}return e.prototype.loadBoltClient=function(e,t,n,r,i){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(this.boltHostWindow.BoltCheckout)return[2,this.boltHostWindow.BoltCheckout];if(!e)throw new aa('Unable to initialize payment because "publishableKey" argument is not provided.');return[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!t,n)+"/connect-bigcommerce.js",this.getScriptOptions("bolt-connect",e,r,i))];case 1:return o.sent(),[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!t,n)+"/track.js",this.getScriptOptions("bolt-track",e))];case 2:if(o.sent(),!this.boltHostWindow.BoltCheckout)throw new za;return[2,this.boltHostWindow.BoltCheckout]}}))}))},e.prototype.loadBoltEmbedded=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return r={async:!0,attributes:{id:"bolt-embedded"}},[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!t,n)+"/embed.js",r)];case 1:if(i.sent(),!this.boltHostWindow.Bolt)throw new za;return[2,this.boltHostWindow.Bolt(e)]}}))}))},e.prototype.getDomainURL=function(e,t){if(!e)return"connect.bolt.com";if(t)switch(t.developerMode){case Da.StagingMode:return"connect-staging.bolt.com";case Da.DevelopmentMode:return"connect."+t.developerDomain}return"connect-sandbox.bolt.com"},e.prototype.getScriptOptions=function(e,t,n,r){return{async:!0,attributes:(0,o.__assign)((0,o.__assign)({id:e,"data-publishable-key":t},n&&{"data-shopping-cart-id":n}),r&&{"data-storefront-api-token":r})}},e}(),Fa=Ia((function(e){return new La(e,new Ua((0,Kn.getScriptLoader)()))}),[{id:"bolt"}]);var qa,Ba,Ga,xa,Ya,Va,Ha;!function(e){e.BuyNow="BUY_NOW"}(qa||(qa={})),function(e){e.AUTHORIZE="authorize",e.CAPTURE="capture"}(Ba||(Ba={})),function(e){e.paypal="paypal",e.checkout="checkout",e.buynow="buynow",e.pay="pay",e.installment="installment"}(Ga||(Ga={})),function(e){e.gold="gold",e.blue="blue",e.silver="silver",e.black="black",e.white="white"}(xa||(xa={})),function(e){e.pill="pill",e.rect="rect"}(Ya||(Ya={})),function(e){e.OXXO="oxxo"}(Va||(Va={})),function(e){e.Approved="APPROVED",e.Created="CREATED",e.PayerActionRequired="PAYER_ACTION_REQUIRED"}(Ha||(Ha={}));const ja=function(){function e(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=r}return e.prototype.loadPayPalSdk=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return r=this.paymentIntegrationService.getState(),i=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e),s=this,[4,this.paypalCommerceScriptLoader.getPayPalSDK(a,i,n)];case 1:return s.paypalSdk=o.sent(),[2,this.paypalSdk]}}))}))},e.prototype.getPayPalSdkOrThrow=function(){if(!this.paypalSdk)throw new za;return this.paypalSdk},e.prototype.createBuyNowCartOrThrow=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(t=e.getBuyNowCartRequestBody()))throw new da(ca.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this.paymentIntegrationService.createBuyNowCart(t)];case 2:return[2,n.sent()];case 3:throw n.sent(),new wa;case 4:return[2]}}))}))},e.prototype.createOrder=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n=this.paymentIntegrationService.getState().getCartOrThrow().id,[4,this.paypalCommerceRequestSender.createOrder(e,(0,o.__assign)({cartId:n},t))];case 1:return[2,r.sent().orderId]}}))}))},e.prototype.updateOrder=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getConsignmentsOrThrow()[0],r.label=1;case 1:return r.trys.push([1,3,,4]),[4,this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:n.availableShippingOptions,cartId:t.id,selectedShippingOption:n.selectedShippingOption})];case 2:return r.sent(),[3,4];case 3:throw r.sent(),new c;case 4:return[2]}}))}))},e.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,this.paypalCommerceRequestSender.getOrderStatus()];case 1:return[2,e.sent().status];case 2:throw e.sent(),new c;case 3:return[2]}}))}))},e.prototype.tokenizePayment=function(e,t){var n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new da(ca.MissingOrderId);return this.formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",action:"set_external_checkout",provider:e,order_id:t},n.source===qa.BuyNow&&{cart_id:n.id}))},e.prototype.submitPayment=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}},[4,this.paymentIntegrationService.submitPayment({methodId:e,paymentData:n})];case 1:return r.sent(),[2]}}))}))},e.prototype.getShippingOptionOrThrow=function(e){var t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find((function(e){return e.isRecommended})),i=(e?n.find((function(t){return t.id===e})):n.find((function(e){var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)})))||r||n[0];if(!i)throw new Error("Your order can't be shipped to this address");return i},e.prototype.getAddress=function(e){return{firstName:(null==e?void 0:e.firstName)||"",lastName:(null==e?void 0:e.lastName)||"",email:(null==e?void 0:e.email)||"",phone:"",company:"",address1:(null==e?void 0:e.address1)||"",address2:"",city:(null==e?void 0:e.city)||"",countryCode:(null==e?void 0:e.countryCode)||"",postalCode:(null==e?void 0:e.postalCode)||"",stateOrProvince:"",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||"",customFields:[]}},e.prototype.getBillingAddressFromOrderDetails=function(e){var t=e.payer;return this.getAddress({firstName:t.name.given_name,lastName:t.name.surname,email:t.email_address,address1:t.address.address_line_1,city:t.address.admin_area_2,countryCode:t.address.country_code,postalCode:t.address.postal_code,stateOrProvinceCode:t.address.admin_area_1})},e.prototype.getShippingAddressFromOrderDetails=function(e){var t,n,r=e.payer,i=(null===(n=null===(t=e.purchase_units[0])||void 0===t?void 0:t.shipping)||void 0===n?void 0:n.address)||{};return this.getAddress({firstName:r.name.given_name,lastName:r.name.surname,email:r.email_address,address1:i.address_line_1,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})},e.prototype.getValidButtonStyle=function(e){var t=e||{},n=t.color,r=t.height,i=t.label,o=t.shape,a={color:n&&xa[n]?n:void 0,height:this.getValidHeight(r),label:i&&Ga[i]?i:void 0,shape:o&&Ya[o]?o:void 0};return(0,m.omitBy)(a,m.isNil)},e.prototype.getValidHeight=function(e){return e&&"number"==typeof e?e>55?55:e<25?25:e:40},e.prototype.removeElement=function(e){var t=e&&document.getElementById(e);t&&t.remove()},e}();var Wa,Ka="This API endpoint is for internal use only and may change in the future";!function(e){e.Json="application/json",e.JsonV1="application/vnd.bc.v1+json"}(Wa||(Wa={}));const Qa=Wa;var Za={"X-Checkout-SDK-Version":"1.401.0"};const Ja=function(){function e(e){this.requestSender=e}return e.prototype.createOrder=function(e,t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return n="/api/storefront/payment/"+e,r=t,i=(0,o.__assign)({"X-API-INTERNAL":Ka,"Content-Type":Qa.Json},Za),[4,this.requestSender.post(n,{headers:i,body:r})];case 1:return[2,a.sent().body]}}))}))},e.prototype.updateOrder=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return t=e,n=(0,o.__assign)({"X-API-INTERNAL":Ka,"Content-Type":Qa.Json},Za),[4,this.requestSender.put("/api/storefront/initialization/paypalcommerce",{headers:n,body:t})];case 1:return[2,r.sent().body]}}))}))},e.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return e=(0,o.__assign)({"X-API-INTERNAL":Ka,"Content-Type":Qa.Json},Za),[4,this.requestSender.get("/api/storefront/initialization/paypalcommerce",{headers:e})];case 1:return[2,t.sent().body]}}))}))},e}(),Xa=function(){function e(e){this.scriptLoader=e,this.window=window}return e.prototype.getPayPalSDK=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return this.paypalSdk?[3,2]:(r=this,[4,this.loadPayPalSDK(this.getPayPalSdkScriptConfigOrThrow(e,t,n))]);case 1:r.paypalSdk=i.sent(),i.label=2;case 2:return[2,this.paypalSdk]}}))}))},e.prototype.loadPayPalSDK=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return this.window.paypalLoadScript?[3,2]:[4,this.scriptLoader.loadScript("https://unpkg.com/@paypal/paypal-js@5.0.5/dist/iife/paypal-js.min.js",{async:!0,attributes:{}})];case 1:if(t.sent(),!this.window.paypalLoadScript)throw new za;t.label=2;case 2:return[4,this.window.paypalLoadScript(e)];case 3:if(t.sent(),!this.window.paypal)throw new za;return[2,this.window.paypal]}}))}))},e.prototype.getPayPalSdkScriptConfigOrThrow=function(e,t,n){void 0===n&&(n=!0);var r=e.id,i=e.clientToken,a=e.initializationData;if(!(null==a?void 0:a.clientId))throw new da(ca.MissingPaymentMethod);var s=a.intent,u=a.clientId,c=a.merchantId,d=a.buyerCountry,p=a.attributionId,l=a.isVenmoEnabled,h=a.isHostedCheckoutEnabled,f=a.isPayPalCreditAvailable,m=a.isDeveloperModeApplicable,g=a.availableAlternativePaymentMethods,y=void 0===g?[]:g,_=a.enabledAlternativePaymentMethods,v=void 0===_?[]:_,C=h||n,S="paypalcommercecreditcards"===r,I=S?["card"]:[],E=S?[]:["card"],w=f?["credit","paylater"]:[],A=f?[]:["credit","paylater"],b=n||!C,P=b&&l?["venmo"]:[],O=b&&l?[]:["venmo"],T=b?v:[],R=b?y.filter((function(e){return!v.includes(e)})):y,M=(0,o.__spreadArrays)(E,A,O,R),D=(0,o.__spreadArrays)(I,w,P,T);return(0,o.__assign)({"client-id":u,"data-partner-attribution-id":p,"data-client-token":i,"merchant-id":c,"enable-funding":D.length>0?D:void 0,"disable-funding":M.length>0?M:void 0,commit:C,components:["buttons","hosted-fields","messages","payment-fields"],currency:t,intent:s},m&&{"buyer-country":d})},e}(),$a=function(e){var t=e.getState().getHost;return new ja((0,i.createFormPoster)(),e,new Ja((0,r.createRequestSender)({host:t()})),new Xa((0,Kn.getScriptLoader)()))},es=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){var t;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=e.paypalcommerce,r=e.containerId,i=e.methodId,a=Boolean(null==n?void 0:n.buyNowInitializeOptions),!i)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!r)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.paypalcommerce" argument is not provided.');if(a&&!n.currencyCode)throw new aa('Unable to initialize payment because "options.paypalcommerce.currencyCode" argument is not provided.');if(a&&"function"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return a?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return s=a?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(i,s,!1)];case 3:return o.sent(),this.renderButton(r,i,n),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,s=n.onComplete,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommerce")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},p={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l={onShippingAddressChange:function(e){return r.onShippingAddressChange(e)},onShippingOptionsChange:function(e){return r.onShippingOptionsChange(e)},onApprove:function(e,n){return r.onHostedCheckoutApprove(e,n,t,s)}},h=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:u.FUNDING.PAYPAL,style:this.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&p),c&&l),f=u.Buttons(h);f.isEligible()?f.render("#"+e):this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e.prototype.onHostedCheckoutApprove=function(e,t,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!e.orderID)throw new da(ca.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,t.order.get()];case 1:s=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),u=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateBillingAddress(u)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,e.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},e.prototype.onShippingAddressChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.country_code,postalCode:e.shippingAddress.postal_code,stateOrProvinceCode:e.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(t)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(t)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},e.prototype.onShippingOptionsChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(t.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},e}(),ts=Ia((function(e){return new es(e,$a(e))}),[{id:"paypalcommerce"}]),ns=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.paypalcommercecredit,n=e.containerId,r=e.methodId,a=(i=t||{}).buyNowInitializeOptions,s=i.currencyCode,u=i.messagingContainerId,c=!!a,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.paypalcommercecredit" argument is not provided.');if(c&&!s)throw new aa('Unable to initialize payment because "options.paypalcommercecredit.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?s:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,t),this.renderMessages(u),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,s=n.onComplete,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercecredit")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},p={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l={onShippingAddressChange:function(e){return r.onShippingAddressChange(e)},onShippingOptionsChange:function(e){return r.onShippingOptionsChange(e)},onApprove:function(e,n){return r.onHostedCheckoutApprove(e,n,t,s)}},h=[u.FUNDING.PAYLATER,u.FUNDING.CREDIT],f=!1;h.forEach((function(t){if(!f){var n=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:t,style:r.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&p),c&&l),s=u.Buttons(n);s.isEligible()&&(s.render("#"+e),f=!0)}})),f||this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e.prototype.onHostedCheckoutApprove=function(e,t,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!e.orderID)throw new da(ca.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,t.order.get()];case 1:s=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),u=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateBillingAddress(u)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(s),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,e.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},e.prototype.onShippingAddressChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.country_code,postalCode:e.shippingAddress.postal_code,stateOrProvinceCode:e.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(t)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(t)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},e.prototype.onShippingOptionsChange=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(t.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},e.prototype.renderMessages=function(e){var t=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(e&&document.getElementById(e)){var n={amount:this.paymentIntegrationService.getState().getCartOrThrow().cartAmount,placement:"cart",style:{layout:"text"}};t.Messages(n).render("#"+e)}},e}(),rs=Ia((function(e){return new ns(e,$a(e))}),[{id:"paypalcommercecredit"}]),is=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.paypalcommercevenmo,n=e.containerId,r=e.methodId,a=(i=t||{}).buyNowInitializeOptions,s=i.currencyCode,u=!!a,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.paypalcommercevenmo" argument is not provided.');if(u&&!s)throw new aa('Unable to initialize payment because "options.paypalcommercevenmo.currencyCode" argument is not provided.');if(u&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return u?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return c=u?s:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,c,!1)];case 3:return o.sent(),this.renderButton(n,r,t),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),u=s.FUNDING.VENMO,c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercevenmo")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},d={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},p=(0,o.__assign)((0,o.__assign)({fundingSource:u,style:this.getValidVenmoButtonStyles(a)},c),i&&d),l=s.Buttons(p);l.isEligible()?l.render("#"+e):this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.getValidVenmoButtonStyles=function(e){var t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===xa.gold?(0,o.__assign)((0,o.__assign)({},t),{color:void 0}):t},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e}(),os=Ia((function(e){return new is(e,$a(e))}),[{id:"paypalcommercevenmo"}]),as=function(){function e(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r,i,a,s,u,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(t=e.paypalcommercealternativemethods,n=e.containerId,r=e.methodId,a=(i=t||{}).apm,s=i.buyNowInitializeOptions,u=i.currencyCode,c=!!s,!r)throw new aa('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new aa('Unable to initialize payment because "options.containerId" argument is not provided.');if(!t)throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods" argument is not provided.');if(!a)throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods.apm" argument is not provided.');if(c&&!u)throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==s?void 0:s.getBuyNowCartRequestBody))throw new aa('Unable to initialize payment because "options.paypalcommercealternativemethods.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?u:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,t),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t,n){var r=this,i=n.apm,a=n.buyNowInitializeOptions,s=n.style,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(!Object.values(u.FUNDING).includes(i))throw new aa('Unable to initialize PayPal button because "options.paypalcommercealternativemethods.apm" argument is not valid funding source.');var c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercealternativemethod")},onApprove:function(e){var n=e.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(t,n)}},d={onClick:function(){return r.handleClick(a)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},p=(0,o.__assign)((0,o.__assign)({fundingSource:i,style:this.paypalCommerceIntegrationService.getValidButtonStyle(s)},c),a&&d),l=u.Buttons(p);l.isEligible()?l.render("#"+e):this.paypalCommerceIntegrationService.removeElement(e)},e.prototype.handleClick=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e)]:[3,3];case 1:return t=n.sent(),[4,this.paymentIntegrationService.loadCheckout(t.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},e}(),ss=Ia((function(e){return new as(e,$a(e))}),[{id:"paypalcommercealternativemethods"}]);var us,cs,ds,ps,ls;!function(e){e.HORIZONTAL="horizontal",e.VERTICAL="vertical"}(us||(us={})),function(e){e.SMALL="small",e.MEDIUM="medium",e.LARGE="large",e.RESPONSIVE="responsive"}(cs||(cs={})),function(e){e.GOLD="gold",e.BLUE="blue",e.SIlVER="silver",e.BLACK="black"}(ds||(ds={})),function(e){e.CHECKOUT="checkout",e.PAY="pay",e.BUYNOW="buynow",e.PAYPAL="paypal",e.CREDIT="credit"}(ps||(ps={})),function(e){e.PILL="pill",e.RECT="rect"}(ls||(ls={}));const hs=function(){function e(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}return e.prototype.initialize=function(e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(t=this.paymentIntegrationService.getState(),n=t.getPaymentMethodOrThrow(e.methodId),!e.paypal)throw new aa;if(!n.config.merchantId)throw new da(ca.MissingPaymentMethod);return[4,this.paypalExpressScriptLoader.loadPaypalSDK(n.config.merchantId)];case 1:return r=i.sent(),this.renderButton(e,r),[2]}}))}))},e.prototype.deinitialize=function(){return Promise.resolve()},e.prototype.renderButton=function(e,t){var n,r=this,i=e.containerId,o=e.methodId,a=e.paypal,s=a.allowCredit,u=a.clientId,c=a.onPaymentError,d=a.shouldProcessPayment,p=a.style,l=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!l.config.merchantId)throw new da(ca.MissingPaymentMethod);var h=l.config.merchantId,f=l.config.testMode?"sandbox":"production",m=((n={})[f]=u,n),g=t.FUNDING.CREDIT||"credit",y=s?[g]:[],_=s?[]:[g];return t.Button.render({env:f,client:m,commit:d,funding:{allowed:y,disallowed:_},style:this.getStyle(p),payment:function(e,t){return r.setupPayment(h,t,c)},onAuthorize:function(e,t){return r.tokenizePayment(e,o,t,d)}},i)},e.prototype.getStyle=function(e){var t=e||{},n=t.color,r=t.fundingicons,i=t.label,o=t.layout,a=t.shape,s=t.size,u=t.tagline;return{color:n,fundingicons:r,label:i,layout:o,shape:a||ls.RECT,size:"small"===s?cs.RESPONSIVE:s,tagline:u}},e.prototype.setupPayment=function(e,t,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,s;return(0,o.__generator)(this,(function(u){switch(u.label){case 0:if(!t)throw new ua(sa.CheckoutButtonNotInitialized);u.label=1;case 1:return u.trys.push([1,4,,5]),[4,this.paymentIntegrationService.loadDefaultCheckout()];case 2:return r=u.sent(),i=r.getCartOrThrow().id,a=r.getHost()||"",[4,t.request.post(a+"/api/storefront/payment/paypalexpress",{merchantId:e,cartId:i},{headers:(0,o.__assign)({"X-API-INTERNAL":Ka},Za)})];case 3:return[2,u.sent().id];case 4:throw s=u.sent(),n&&n(s),s;case 5:return[2]}}))}))},e.prototype.tokenizePayment=function(e,t,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!n)throw new ua(sa.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new da(ca.MissingPayment);return i=this.paymentIntegrationService.getState(),a=i.getPaymentMethodOrThrow(t),[4,n.payment.get(e.paymentID)];case 1:return s=o.sent(),[2,this.formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:a.id,action:r?"process_payment":"set_external_checkout",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(s.payer.payer_info)})]}}))}))},e}();const fs=function(){function e(e){this.scriptLoader=e,this.window=window}return e.prototype.loadPaypalSDK=function(e){return void 0===e&&(e=""),(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t=(0,o.__assign)({async:!0,attributes:{"data-merchant-id":e}},e&&{attributes:{"data-merchant-id":e}}),[4,this.scriptLoader.loadScript("//www.paypalobjects.com/api/checkout.min.js",t)];case 1:if(n.sent(),!this.window.paypal)throw new za;return[2,this.window.paypal]}}))}))},e}(),ms=Ia((function(e){return new hs(e,new fs((0,Kn.getScriptLoader)()),(0,i.createFormPoster)())}),[{id:"paypalexpress"}]);function gs(e){var t=null!=e?e:{},o=t.host,a=t.locale,s=void 0===a?"en":a,u=Bn(),c=(0,r.createRequestSender)({host:o}),d=(0,i.createFormPoster)({host:o}),p=function(e,t){void 0===t&&(t=n);for(var r=new Sa,i=function(t){if(!function(e){return"resolveIds"in e}(t))return"continue";for(var n=0,i=t.resolveIds;n {\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(\"@bigcommerce/form-poster\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"tslib\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/data-store\");","import CustomError from './custom-error';\nimport setPrototypeOf from './set-prototype-of';\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 { 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 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,\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 RequestError from './request-error';\n\n/**\n * Throw this error if we are unable to successfully submit a server request\n * using a payment method because the method has invalid configuration or is in\n * an invalid state.\n */\nexport default class PaymentMethodInvalidError extends RequestError {\n constructor(response?: Response) {\n super(response, {\n message: 'There is a problem processing your payment. Please try again later.',\n });\n\n this.name = 'PaymentMethodInvalidError';\n this.type = 'payment_method_invalid';\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 { 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 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,\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 RequestError from './request-error';\n\n/**\n * Throw this error if there is an unexpected error and it is not possible to\n * recover from unless the shopper creates a new checkout session.\n */\nexport default class UnrecoverableError extends RequestError {\n constructor(response: Response, message?: string) {\n super(response, {\n message:\n message ||\n 'An unexpected error has occurred. The checkout process cannot continue as a result.',\n });\n\n this.name = 'UnrecoverableError';\n this.type = 'unrecoverable';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromInternalErrorResponse(\n response: Response,\n message?: string,\n): RequestError {\n const { body } = response;\n const { errors = [] } = body;\n\n return new RequestError(response, {\n message: joinErrors(errors) || body.detail || body.title || message,\n errors: errors.length\n ? errors.map((message) => ({ code: body.type, message }))\n : [{ code: body.type, message: body.detail || body.title }],\n });\n}\n\nfunction joinErrors(errors: string[]): string | undefined {\n return errors\n .reduce((result: string[], error) => {\n if (error) {\n return [...result, error];\n }\n\n return result;\n }, [])\n .join(' ');\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromPaymentErrorResponse(\n response: Response,\n message?: string,\n): RequestError {\n const { body } = response;\n const { errors = [] } = body;\n\n return new RequestError(response, {\n message: joinErrors(errors) || message,\n errors,\n });\n}\n\nfunction joinErrors(errors: Array<{ code: string; message?: string }>): string | undefined {\n if (!Array.isArray(errors)) {\n return;\n }\n\n return errors\n .reduce((result: string[], error) => {\n if (error && error.message) {\n return [...result, error.message];\n }\n\n return result;\n }, [])\n .join(' ');\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if a request fails to complete within its required timeframe\n * because of a network issue.\n */\nexport default class TimeoutError extends RequestError {\n constructor(response?: Response) {\n super(response, {\n message: 'The request has timed out or aborted.',\n });\n\n this.name = 'TimeoutError';\n this.type = 'timeout';\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\nimport { last } from 'lodash';\n\nimport {\n ErrorResponseBody,\n InternalErrorResponseBody,\n StorefrontErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n mapFromInternalErrorResponse,\n mapFromPaymentErrorResponse,\n mapFromStorefrontErrorResponse,\n RequestError,\n TimeoutError,\n} from './errors';\n\nexport default class RequestErrorFactory {\n private _factoryMethods: { [key: string]: ErrorFactoryMethod } = {};\n\n constructor() {\n this.register('default', (response, message) => new RequestError(response, { message }));\n this.register('internal', (response, message) =>\n mapFromInternalErrorResponse(response, message),\n );\n this.register('storefront', (response, message) =>\n mapFromStorefrontErrorResponse(response, message),\n );\n this.register('payment', (response, message) =>\n mapFromPaymentErrorResponse(response, message),\n );\n this.register('timeout', (response) => new TimeoutError(response));\n }\n\n register(type: string, factoryMethod: ErrorFactoryMethod): void {\n this._factoryMethods[type] = factoryMethod;\n }\n\n createError(response: Response, message?: string): RequestError {\n const factoryMethod =\n this._factoryMethods[this._getType(response)] || this._factoryMethods.default;\n\n return factoryMethod(response, message);\n }\n\n private _getType(response: Response): string {\n if (response.status === 0) {\n return 'timeout';\n }\n\n if (this._isStorefrontErrorResponseBody(response.body)) {\n return 'storefront';\n }\n\n if (this._isInternalErrorResponseBody(response.body)) {\n const internalType = last(response.body.type.split('/'));\n\n return internalType && this._factoryMethods[internalType] ? internalType : 'internal';\n }\n\n const error = last(response.body && response.body.errors);\n\n if (error && error.code && this._factoryMethods[error.code]) {\n return error.code;\n }\n\n return 'payment';\n }\n\n private _isStorefrontErrorResponseBody(\n errorResponse: ErrorResponseBody,\n ): errorResponse is StorefrontErrorResponseBody {\n const storefrontErrorResponse = errorResponse as StorefrontErrorResponseBody;\n\n return (\n !this._isInternalErrorResponseBody(errorResponse) &&\n typeof storefrontErrorResponse.title === 'string' &&\n typeof storefrontErrorResponse.type === 'string' &&\n typeof storefrontErrorResponse.status === 'number' &&\n typeof storefrontErrorResponse.detail === 'string'\n );\n }\n\n private _isInternalErrorResponseBody(\n errorResponse: ErrorResponseBody,\n ): errorResponse is InternalErrorResponseBody {\n const internalErrorResponse = errorResponse as InternalErrorResponseBody;\n\n return (\n typeof internalErrorResponse.errors === 'object' &&\n typeof internalErrorResponse.title === 'string' &&\n typeof internalErrorResponse.type === 'string' &&\n typeof internalErrorResponse.status === 'number'\n );\n }\n}\n\nexport type ErrorFactoryMethod = (response: Response, message?: string) => RequestError;\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromStorefrontErrorResponse(\n response: Response,\n message?: string,\n): RequestError {\n const { body } = response;\n\n return new RequestError(response, {\n message: message || body.detail || body.title,\n errors: [\n {\n code: body.code || body.type,\n message: body.detail || body.title,\n },\n ],\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs/operators\");","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadConfigAction } from '../config';\nimport { LoadFormFieldsAction } from '../form';\n\nimport Checkout from './checkout';\n\nexport enum CheckoutActionType {\n LoadCheckoutRequested = 'LOAD_CHECKOUT_REQUESTED',\n LoadCheckoutSucceeded = 'LOAD_CHECKOUT_SUCCEEDED',\n LoadCheckoutFailed = 'LOAD_CHECKOUT_FAILED',\n\n UpdateCheckoutRequested = 'UPDATE_CHECKOUT_REQUESTED',\n UpdateCheckoutSucceeded = 'UPDATE_CHECKOUT_SUCCEEDED',\n UpdateCheckoutFailed = 'UPDATE_CHECKOUT_FAILED',\n}\n\nexport type CheckoutAction = LoadCheckoutAction | UpdateCheckoutAction;\n\nexport type LoadCheckoutAction =\n | LoadCheckoutRequestedAction\n | LoadCheckoutSucceededAction\n | LoadCheckoutFailedAction\n | LoadFormFieldsAction\n | LoadConfigAction;\n\nexport type UpdateCheckoutAction =\n | UpdateCheckoutRequestedAction\n | UpdateCheckoutSucceededAction\n | UpdateCheckoutFailedAction;\n\nexport interface LoadCheckoutRequestedAction extends Action {\n type: CheckoutActionType.LoadCheckoutRequested;\n}\n\nexport interface LoadCheckoutSucceededAction extends Action {\n type: CheckoutActionType.LoadCheckoutSucceeded;\n}\n\nexport interface LoadCheckoutFailedAction extends Action {\n type: CheckoutActionType.LoadCheckoutFailed;\n}\n\nexport interface UpdateCheckoutRequestedAction extends Action {\n type: CheckoutActionType.UpdateCheckoutRequested;\n}\n\nexport interface UpdateCheckoutSucceededAction extends Action {\n type: CheckoutActionType.UpdateCheckoutSucceeded;\n}\n\nexport interface UpdateCheckoutFailedAction extends Action {\n type: CheckoutActionType.UpdateCheckoutFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nexport enum ErrorActionType {\n ClearError = 'CLEAR_ERROR',\n}\n\nexport type ErrorAction = ClearErrorAction;\n\nexport interface ClearErrorAction extends Action {\n type: ErrorActionType.ClearError;\n payload: Error;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Subscriptions } from './subscriptions';\n\nexport enum SubscriptionsActionType {\n UpdateSubscriptionsRequested = 'UPDATE_SUBSCRIPTIONS_REQUESTED',\n UpdateSubscriptionsSucceeded = 'UPDATE_SUBSCRIPTIONS_SUCCEEDED',\n UpdateSubscriptionsFailed = 'UPDATE_SUBSCRIPTIONS_FAILED',\n}\nexport type UpdateSubscriptionsAction =\n | UpdateSubscriptionsRequestedAction\n | UpdateSubscriptionsSucceededAction\n | UpdateSubscriptionsFailedAction;\n\nexport interface UpdateSubscriptionsRequestedAction extends Action {\n type: SubscriptionsActionType.UpdateSubscriptionsRequested;\n}\n\nexport interface UpdateSubscriptionsSucceededAction extends Action {\n type: SubscriptionsActionType.UpdateSubscriptionsSucceeded;\n}\n\nexport interface UpdateSubscriptionsFailedAction extends Action {\n type: SubscriptionsActionType.UpdateSubscriptionsFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nexport enum BillingAddressActionType {\n UpdateBillingAddressRequested = 'UPDATE_BILLING_ADDRESS_REQUESTED',\n UpdateBillingAddressSucceeded = 'UPDATE_BILLING_ADDRESS_SUCCEEDED',\n UpdateBillingAddressFailed = 'UPDATE_BILLING_ADDRESS_FAILED',\n\n ContinueAsGuestRequested = 'CONTINUE_AS_GUEST_REQUESTED',\n ContinueAsGuestSucceeded = 'CONTINUE_AS_GUEST_SUCCEEDED',\n ContinueAsGuestFailed = 'CONTINUE_AS_GUEST_FAILED',\n}\n\nexport type BillingAddressAction = ContinueAsGuestAction | UpdateBillingAddressAction;\n\nexport type UpdateBillingAddressAction =\n | UpdateBillingAddressRequested\n | UpdateBillingAddressSucceeded\n | UpdateBillingAddressFailed;\n\nexport type ContinueAsGuestAction =\n | ContinueAsGuestRequested\n | ContinueAsGuestSucceeded\n | ContinueAsGuestFailed;\n\nexport interface UpdateBillingAddressRequested extends Action {\n type: BillingAddressActionType.UpdateBillingAddressRequested;\n}\n\nexport interface UpdateBillingAddressSucceeded extends Action {\n type: BillingAddressActionType.UpdateBillingAddressSucceeded;\n}\n\nexport interface UpdateBillingAddressFailed extends Action {\n type: BillingAddressActionType.UpdateBillingAddressFailed;\n}\n\nexport interface ContinueAsGuestRequested extends Action {\n type: BillingAddressActionType.ContinueAsGuestRequested;\n}\n\nexport interface ContinueAsGuestSucceeded extends Action {\n type: BillingAddressActionType.ContinueAsGuestSucceeded;\n}\n\nexport interface ContinueAsGuestFailed extends Action {\n type: BillingAddressActionType.ContinueAsGuestFailed;\n}\n","import { isPlainObject, omitBy, transform } from 'lodash';\n\nexport default function omitDeep(\n object: any,\n predicate: (value: any, key: string) => boolean,\n): any {\n if (Array.isArray(object)) {\n return object.map((value) => omitDeep(value, predicate));\n }\n\n if (isPlainObject(object)) {\n return transform(\n omitBy(object, predicate),\n (result, value, key) => {\n result[key] = omitDeep(value, predicate);\n },\n {} as { [key: string]: any },\n );\n }\n\n return object;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { omitDeep } from '../utility';\n\nimport { ClearErrorAction, ErrorActionType } from './error-actions';\n\nexport default function clearErrorReducer<\n TState extends { [key: string]: any },\n TAction extends Action,\n>(state: TState, action: TAction): TState | undefined {\n if (isClearErrorAction(action)) {\n return omitDeep(state, (value) => value === action.payload);\n }\n\n return state;\n}\n\nfunction isClearErrorAction(action: Action): action is ClearErrorAction {\n return action.type === ErrorActionType.ClearError;\n}\n","export interface CompareOptions {\n keyFilter?(key: string): boolean;\n}\n\nexport default function isEqual(objectA: any, objectB: any, options?: CompareOptions): boolean {\n if (objectA === objectB) {\n return true;\n }\n\n if (objectA && objectB && typeof objectA === 'object' && typeof objectB === 'object') {\n if (Array.isArray(objectA) && Array.isArray(objectB)) {\n return isArrayEqual(objectA, objectB, options);\n }\n\n if (Array.isArray(objectA) || Array.isArray(objectB)) {\n return false;\n }\n\n if (objectA instanceof Date && objectB instanceof Date) {\n return isDateEqual(objectA, objectB);\n }\n\n if (objectA instanceof Date || objectB instanceof Date) {\n return false;\n }\n\n if (objectA instanceof RegExp && objectB instanceof RegExp) {\n return isRegExpEqual(objectA, objectB);\n }\n\n if (objectA instanceof RegExp || objectB instanceof RegExp) {\n return false;\n }\n\n return isObjectEqual(objectA, objectB, options);\n }\n\n return objectA === objectB;\n}\n\nfunction isRegExpEqual(objectA: RegExp, objectB: RegExp): boolean {\n return objectA.toString() === objectB.toString();\n}\n\nfunction isDateEqual(objectA: Date, objectB: Date): boolean {\n return objectA.getTime() === objectB.getTime();\n}\n\nfunction isArrayEqual(objectA: any[], objectB: any[], options?: CompareOptions): boolean {\n if (objectA.length !== objectB.length) {\n return false;\n }\n\n for (let index = 0, length = objectA.length; index < length; index++) {\n if (!isEqual(objectA[index], objectB[index], options)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isObjectEqual(\n objectA: { [key: string]: any },\n objectB: { [key: string]: any },\n options?: CompareOptions,\n): boolean {\n const filter = options && options.keyFilter;\n const keysA = filter ? Object.keys(objectA).filter(filter) : Object.keys(objectA);\n const keysB = filter ? Object.keys(objectB).filter(filter) : Object.keys(objectB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (let index = 0, length = keysA.length; index < length; index++) {\n const key = keysA[index];\n\n if (!Object.prototype.hasOwnProperty.call(objectB, key)) {\n return false;\n }\n\n if (!isEqual(objectA[key], objectB[key], options)) {\n return false;\n }\n }\n\n return true;\n}\n","import isEqual from './is-equal';\n\n/**\n * Replace the current value with a new value if the former is different to the\n * latter.\n */\nexport default function replace(currentValue: T, newValue?: T): T {\n if (newValue === undefined || isEqual(currentValue, newValue)) {\n return currentValue;\n }\n\n return newValue;\n}\n","import isEqual from './is-equal';\n\n/**\n * Set a new value to an object under a key if the new value is different to the\n * current value of the key.\n */\nexport default function objectSet(\n object: T | undefined,\n key: K,\n value: T[K],\n): T {\n if (\n object &&\n Object.prototype.hasOwnProperty.call(object, key) &&\n isEqual(object[key], value)\n ) {\n return object;\n }\n\n return {\n ...(object as any),\n [key]: value,\n };\n}\n","import BillingAddress from './billing-address';\n\nexport default interface BillingAddressState {\n data?: BillingAddress;\n errors: BillingAddressErrorsState;\n statuses: BillingAddressStatusesState;\n}\n\nexport interface BillingAddressErrorsState {\n loadError?: Error;\n updateError?: Error;\n continueAsGuestError?: Error;\n}\n\nexport interface BillingAddressStatusesState {\n isLoading?: boolean;\n isUpdating?: boolean;\n isContinuingAsGuest?: boolean;\n}\n\nexport const DEFAULT_STATE: BillingAddressState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet, replace } from '../common/utility';\nimport { OrderAction } from '../order';\nimport { SubscriptionsActionType, UpdateSubscriptionsAction } from '../subscription';\n\nimport BillingAddress from './billing-address';\nimport { BillingAddressAction, BillingAddressActionType } from './billing-address-actions';\nimport BillingAddressState, {\n BillingAddressErrorsState,\n BillingAddressStatusesState,\n DEFAULT_STATE,\n} from './billing-address-state';\n\nexport default function billingAddressReducer(\n state: BillingAddressState = DEFAULT_STATE,\n action: Action,\n): BillingAddressState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: BillingAddress | undefined,\n action: CheckoutAction | BillingAddressAction | OrderAction,\n): BillingAddress | undefined {\n switch (action.type) {\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return replace(data, action.payload && action.payload.billingAddress);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: BillingAddressErrorsState = DEFAULT_STATE.errors,\n action: CheckoutAction | BillingAddressAction | OrderAction | UpdateSubscriptionsAction,\n): BillingAddressErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case BillingAddressActionType.UpdateBillingAddressRequested:\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n return objectSet(errors, 'updateError', undefined);\n\n case BillingAddressActionType.UpdateBillingAddressFailed:\n return objectSet(errors, 'updateError', action.payload);\n\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n case BillingAddressActionType.ContinueAsGuestRequested:\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n return objectSet(errors, 'continueAsGuestError', undefined);\n\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n case BillingAddressActionType.ContinueAsGuestFailed:\n return objectSet(errors, 'continueAsGuestError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: BillingAddressStatusesState = DEFAULT_STATE.statuses,\n action: CheckoutAction | BillingAddressAction | OrderAction | UpdateSubscriptionsAction,\n): BillingAddressStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case BillingAddressActionType.UpdateBillingAddressRequested:\n return objectSet(statuses, 'isUpdating', true);\n\n case BillingAddressActionType.UpdateBillingAddressFailed:\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n return objectSet(statuses, 'isUpdating', false);\n\n case BillingAddressActionType.ContinueAsGuestRequested:\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n return objectSet(statuses, 'isContinuingAsGuest', true);\n\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n case BillingAddressActionType.ContinueAsGuestFailed:\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n return objectSet(statuses, 'isContinuingAsGuest', false);\n\n default:\n return statuses;\n }\n}\n","import { isPlainObject as lodashIsPlainObject } from 'lodash';\n\n// We need this wrapper because Lodash's version doesn't act as a type guard\nexport default function isPlainObject(value: any): value is object {\n return lodashIsPlainObject(value);\n}\n","import { isArray } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\nimport objectMerge from './object-merge';\nimport replace from './replace';\n\nexport interface ArrayReplaceOptions {\n matchObject(objectA: any, objectB: any): boolean;\n}\n\nfunction arrayReplace(\n currentArray: T[] | undefined,\n newArray: T[],\n options?: ArrayReplaceOptions,\n): T[];\nfunction arrayReplace(\n currentArray: T[],\n newArray?: T[],\n options?: ArrayReplaceOptions,\n): undefined;\nfunction arrayReplace(\n currentArray?: T[],\n newArray?: T[],\n options?: ArrayReplaceOptions,\n): T[] | undefined;\n\nfunction arrayReplace(\n currentArray?: T[],\n newArray?: T[],\n options?: ArrayReplaceOptions,\n): T[] | undefined {\n const { matchObject = (a: any, b: any) => a.id !== undefined && a.id === b.id } = options || {};\n\n // Return the new array if the current array does not exist\n if (!currentArray) {\n return newArray;\n }\n\n // If the new array does not exist, or the current array is strictly equal\n // to the new array, exit early and return the current array so that the\n // object reference doesn't change\n if (!newArray || currentArray === newArray) {\n return currentArray;\n }\n\n // Otherwise, try to replace the items of the current array with the new\n // array. If the item from the two arrays are the same, keep the current\n // one. Do it recursively until all arrays are replaced.\n let sameAsCurrentCount = 0;\n let sameAsNewCount = 0;\n\n const countSameAsReplaced = (replacedValue: T, currentValue: T, newValue: T): T => {\n sameAsCurrentCount += replacedValue === currentValue ? 1 : 0;\n sameAsNewCount += replacedValue === newValue ? 1 : 0;\n\n return replacedValue;\n };\n\n const result = newArray.map((newItem, index) => {\n const currentItem = currentArray && currentArray[index];\n\n if (isPlainObject(currentItem) && isPlainObject(newItem)) {\n if (matchObject(currentItem, newItem)) {\n return countSameAsReplaced(objectMerge(currentItem, newItem), currentItem, newItem);\n }\n\n return countSameAsReplaced(replace(currentItem, newItem), currentItem, newItem);\n }\n\n if (isArray(currentItem) && isArray(newItem)) {\n return countSameAsReplaced(arrayReplace(currentItem, newItem), currentItem, newItem);\n }\n\n return countSameAsReplaced(replace(currentItem, newItem), currentItem, newItem);\n }) as T[];\n\n // If all items in the result are identical to the current array, and the\n // current array and the new array have the same size, simply return the\n // current array instead of the result.\n if (\n sameAsCurrentCount === newArray.length &&\n currentArray &&\n currentArray.length === newArray.length\n ) {\n return currentArray;\n }\n\n // If all items in the result are identical to the new array, simply return\n // the new array.\n if (sameAsNewCount === newArray.length) {\n return newArray;\n }\n\n return result;\n}\n\nexport default arrayReplace;\n","import { isArray } from 'lodash';\n\nimport arrayReplace from './array-replace';\nimport isPlainObject from './is-plain-object';\nimport objectSet from './object-set';\n\nfunction objectMerge(currentObject: T, newObject?: Partial): T;\nfunction objectMerge(\n currentObject: T | undefined,\n newObject: Partial,\n): Partial;\nfunction objectMerge(currentObject?: T, newObject?: Partial): T | undefined;\n\nfunction objectMerge(\n currentObject?: T,\n newObject?: Partial,\n): T | Partial | undefined {\n if (!currentObject) {\n return newObject;\n }\n\n // If the new object does not exist but the current object does, or the new\n // object is strictly equal to the current object, return the current object\n if (!newObject || currentObject === newObject) {\n return currentObject;\n }\n\n // If both objects exist, but some values might be different, perform a merge.\n // Retain values that are equal and only replace them with the new values if\n // they are different.\n return (Object.keys(newObject) as Array).reduce((result, key) => {\n const currentValue = result[key];\n const newValue = newObject[key];\n\n if (isPlainObject(currentValue) && isPlainObject(newValue)) {\n return objectSet(result, key, objectMerge(currentValue, newValue));\n }\n\n if (isArray(currentValue) && isArray(newValue)) {\n return objectSet(result, key, arrayReplace(currentValue, newValue) as any);\n }\n\n return objectSet(result, key, newValue as any);\n }, currentObject);\n}\n\nexport default objectMerge;\n","import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum CouponActionType {\n ApplyCouponRequested = 'APPLY_COUPON_REQUESTED',\n ApplyCouponSucceeded = 'APPLY_COUPON_SUCCEEDED',\n ApplyCouponFailed = 'APPLY_COUPON_FAILED',\n\n RemoveCouponRequested = 'REMOVE_COUPON_REQUESTED',\n RemoveCouponSucceeded = 'REMOVE_COUPON_SUCCEEDED',\n RemoveCouponFailed = 'REMOVE_COUPON_FAILED',\n}\n\nexport type CouponAction = ApplyCouponAction | RemoveCouponAction;\n\nexport type ApplyCouponAction =\n | ApplyCouponRequestedAction\n | ApplyCouponSucceededAction\n | ApplyCouponFailedAction;\n\nexport type RemoveCouponAction =\n | RemoveCouponRequestedAction\n | RemoveCouponSucceededAction\n | RemoveCouponFailedAction;\n\nexport interface ApplyCouponRequestedAction extends Action {\n type: CouponActionType.ApplyCouponRequested;\n}\n\nexport interface ApplyCouponSucceededAction extends Action {\n type: CouponActionType.ApplyCouponSucceeded;\n}\n\nexport interface ApplyCouponFailedAction extends Action> {\n type: CouponActionType.ApplyCouponFailed;\n}\n\nexport interface RemoveCouponRequestedAction extends Action {\n type: CouponActionType.RemoveCouponRequested;\n}\n\nexport interface RemoveCouponSucceededAction extends Action {\n type: CouponActionType.RemoveCouponSucceeded;\n}\n\nexport interface RemoveCouponFailedAction extends Action {\n type: CouponActionType.RemoveCouponFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum GiftCertificateActionType {\n ApplyGiftCertificateRequested = 'APPLY_GIFT_CERTIFICATE_REQUESTED',\n ApplyGiftCertificateSucceeded = 'APPLY_GIFT_CERTIFICATE_SUCCEEDED',\n ApplyGiftCertificateFailed = 'APPLY_GIFT_CERTIFICATE_FAILED',\n\n RemoveGiftCertificateRequested = 'REMOVE_GIFT_CERTIFICATE_REQUESTED',\n RemoveGiftCertificateSucceeded = 'REMOVE_GIFT_CERTIFICATE_SUCCEEDED',\n RemoveGiftCertificateFailed = 'REMOVE_GIFT_CERTIFICATE_FAILED',\n}\n\nexport type GiftCertificateAction = ApplyGiftCertificateAction | RemoveGiftCertificateAction;\n\nexport type ApplyGiftCertificateAction =\n | ApplyGiftCertificateRequestedAction\n | ApplyGiftCertificateSucceededAction\n | ApplyGiftCertificateFailedAction;\n\nexport type RemoveGiftCertificateAction =\n | RemoveGiftCertificateRequestedAction\n | RemoveGiftCertificateSucceededAction\n | RemoveGiftCertificateFailedAction;\n\nexport interface ApplyGiftCertificateRequestedAction extends Action {\n type: GiftCertificateActionType.ApplyGiftCertificateRequested;\n}\n\nexport interface ApplyGiftCertificateSucceededAction extends Action {\n type: GiftCertificateActionType.ApplyGiftCertificateSucceeded;\n}\n\nexport interface ApplyGiftCertificateFailedAction\n extends Action> {\n type: GiftCertificateActionType.ApplyGiftCertificateFailed;\n}\n\nexport interface RemoveGiftCertificateRequestedAction extends Action {\n type: GiftCertificateActionType.RemoveGiftCertificateRequested;\n}\n\nexport interface RemoveGiftCertificateSucceededAction extends Action {\n type: GiftCertificateActionType.RemoveGiftCertificateSucceeded;\n}\n\nexport interface RemoveGiftCertificateFailedAction\n extends Action> {\n type: GiftCertificateActionType.RemoveGiftCertificateFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nimport { ConsignmentMeta } from './consignment';\n\nexport enum ConsignmentActionType {\n CreateConsignmentsRequested = 'CREATE_CONSIGNMENTS_REQUESTED',\n CreateConsignmentsSucceeded = 'CREATE_CONSIGNMENTS_SUCCEEDED',\n CreateConsignmentsFailed = 'CREATE_CONSIGNMENTS_FAILED',\n\n UpdateConsignmentRequested = 'UPDATE_CONSIGNMENT_REQUESTED',\n UpdateConsignmentSucceeded = 'UPDATE_CONSIGNMENT_SUCCEEDED',\n UpdateConsignmentFailed = 'UPDATE_CONSIGNMENT_FAILED',\n\n DeleteConsignmentRequested = 'DELETE_CONSIGNMENT_REQUESTED',\n DeleteConsignmentSucceeded = 'DELETE_CONSIGNMENT_SUCCEEDED',\n DeleteConsignmentFailed = 'DELETE_CONSIGNMENT_FAILED',\n\n UpdateShippingOptionRequested = 'UPDATE_SHIPPING_OPTION_REQUESTED',\n UpdateShippingOptionSucceeded = 'UPDATE_SHIPPING_OPTION_SUCCEEDED',\n UpdateShippingOptionFailed = 'UPDATE_SHIPPING_OPTION_FAILED',\n\n LoadShippingOptionsRequested = 'LOAD_SHIPPING_OPTIONS_REQUESTED',\n LoadShippingOptionsSucceeded = 'LOAD_SHIPPING_OPTIONS_SUCCEEDED',\n LoadShippingOptionsFailed = 'LOAD_SHIPPING_OPTIONS_FAILED',\n}\n\nexport type ConsignmentAction =\n | CreateConsignmentsAction\n | UpdateConsignmentAction\n | DeleteConsignmentAction\n | UpdateShippingOptionAction\n | LoadShippingOptionsAction;\n\nexport type CreateConsignmentsAction =\n | CreateConsignmentsRequestedAction\n | CreateConsignmentsSucceededAction\n | CreateConsignmentsFailedAction;\n\nexport type UpdateConsignmentAction =\n | UpdateConsignmentRequestedAction\n | UpdateConsignmentSucceededAction\n | UpdateConsignmentFailedAction;\n\nexport type DeleteConsignmentAction =\n | DeleteConsignmentRequestedAction\n | DeleteConsignmentSucceededAction\n | DeleteConsignmentFailedAction;\n\nexport type UpdateShippingOptionAction =\n | UpdateShippingOptionRequestedAction\n | UpdateShippingOptionSucceededAction\n | UpdateShippingOptionFailedAction;\n\nexport type LoadShippingOptionsAction =\n | LoadShippingOptionsRequestedAction\n | LoadShippingOptionsSucceededAction\n | LoadShippingOptionsFailedAction;\n\nexport interface CreateConsignmentsRequestedAction extends Action {\n type: ConsignmentActionType.CreateConsignmentsRequested;\n}\n\nexport interface CreateConsignmentsSucceededAction extends Action {\n type: ConsignmentActionType.CreateConsignmentsSucceeded;\n}\n\nexport interface CreateConsignmentsFailedAction extends Action {\n type: ConsignmentActionType.CreateConsignmentsFailed;\n}\n\nexport interface UpdateConsignmentRequestedAction extends Action {\n type: ConsignmentActionType.UpdateConsignmentRequested;\n}\n\nexport interface UpdateConsignmentSucceededAction extends Action {\n type: ConsignmentActionType.UpdateConsignmentSucceeded;\n}\n\nexport interface UpdateConsignmentFailedAction extends Action {\n type: ConsignmentActionType.UpdateConsignmentFailed;\n}\n\nexport interface DeleteConsignmentRequestedAction extends Action {\n type: ConsignmentActionType.DeleteConsignmentRequested;\n}\n\nexport interface DeleteConsignmentSucceededAction extends Action {\n type: ConsignmentActionType.DeleteConsignmentSucceeded;\n}\n\nexport interface DeleteConsignmentFailedAction extends Action {\n type: ConsignmentActionType.DeleteConsignmentFailed;\n}\n\nexport interface UpdateShippingOptionRequestedAction extends Action {\n type: ConsignmentActionType.UpdateShippingOptionRequested;\n}\n\nexport interface UpdateShippingOptionSucceededAction extends Action {\n type: ConsignmentActionType.UpdateShippingOptionSucceeded;\n}\n\nexport interface UpdateShippingOptionFailedAction extends Action {\n type: ConsignmentActionType.UpdateShippingOptionFailed;\n}\n\nexport interface LoadShippingOptionsRequestedAction extends Action {\n type: ConsignmentActionType.LoadShippingOptionsRequested;\n}\n\nexport interface LoadShippingOptionsSucceededAction extends Action {\n type: ConsignmentActionType.LoadShippingOptionsSucceeded;\n}\n\nexport interface LoadShippingOptionsFailedAction extends Action {\n type: ConsignmentActionType.LoadShippingOptionsFailed;\n}\n","import Cart from './cart';\n\nexport default interface CartState {\n data?: Cart;\n errors: CartErrorsState;\n statuses: CartStatusesState;\n}\n\nexport interface CartErrorsState {\n loadError?: Error;\n}\n\nexport interface CartStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: CartState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadPaymentMethodAction } from '../payment';\n\nimport { CheckoutButtonMethodType } from './strategies';\n\nexport enum CheckoutButtonActionType {\n InitializeButtonFailed = 'INITIALIZE_BUTTON_FAILED',\n InitializeButtonRequested = 'INITIALIZE_BUTTON_REQUESTED',\n InitializeButtonSucceeded = 'INITIALIZE_BUTTON_SUCCEEDED',\n\n DeinitializeButtonFailed = 'DEINITIALIZE_BUTTON_FAILED',\n DeinitializeButtonRequested = 'DEINITIALIZE_BUTTON_REQUESTED',\n DeinitializeButtonSucceeded = 'DEINITIALIZE_BUTTON_SUCCEEDED',\n}\n\nexport type CheckoutButtonAction = InitializeButtonAction | DeinitializeButtonAction;\n\nexport type InitializeButtonAction =\n | InitializeButtonRequestedAction\n | InitializeButtonSucceededAction\n | InitializeButtonFailedAction\n | LoadPaymentMethodAction;\n\nexport type DeinitializeButtonAction =\n | DeinitializeButtonRequestedAction\n | DeinitializeButtonSucceededAction\n | DeinitializeButtonFailedAction;\n\nexport interface CheckoutButtonActionMeta {\n methodId: CheckoutButtonMethodType;\n}\n\nexport interface InitializeButtonActionMeta extends CheckoutButtonActionMeta {\n containerId: string;\n}\n\nexport interface InitializeButtonRequestedAction\n extends Action {\n type: CheckoutButtonActionType.InitializeButtonRequested;\n}\n\nexport interface InitializeButtonSucceededAction\n extends Action {\n type: CheckoutButtonActionType.InitializeButtonSucceeded;\n}\n\nexport interface InitializeButtonFailedAction extends Action {\n type: CheckoutButtonActionType.InitializeButtonFailed;\n}\n\nexport interface DeinitializeButtonRequestedAction\n extends Action {\n type: CheckoutButtonActionType.DeinitializeButtonRequested;\n}\n\nexport interface DeinitializeButtonSucceededAction\n extends Action {\n type: CheckoutButtonActionType.DeinitializeButtonSucceeded;\n}\n\nexport interface DeinitializeButtonFailedAction extends Action {\n type: CheckoutButtonActionType.DeinitializeButtonFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { BillingAddressAction, BillingAddressActionType } from '../billing';\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\nimport {\n CouponAction,\n CouponActionType,\n GiftCertificateAction,\n GiftCertificateActionType,\n} from '../coupon';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport Cart from './cart';\nimport CartState, { CartErrorsState, CartStatusesState, DEFAULT_STATE } from './cart-state';\n\nexport default function cartReducer(state: CartState = DEFAULT_STATE, action: Action): CartState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Cart | undefined,\n action:\n | BillingAddressAction\n | CheckoutAction\n | ConsignmentAction\n | CouponAction\n | GiftCertificateAction,\n): Cart | undefined {\n switch (action.type) {\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n return objectMerge(data, action.payload && action.payload.cart);\n\n default:\n return data;\n }\n}\n\nfunction statusesReducer(\n statuses: CartStatusesState = DEFAULT_STATE.statuses,\n action: CheckoutAction,\n): CartStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CheckoutActionType.LoadCheckoutFailed:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n\nfunction errorsReducer(\n errors: CartErrorsState = DEFAULT_STATE.errors,\n action: CheckoutAction,\n): CartErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n","import { CheckoutButtonMethodType } from './strategies';\n\nexport default interface CheckoutButtonState {\n data: {\n [key in CheckoutButtonMethodType]?: CheckoutButtonDataState | undefined;\n };\n errors: {\n [key in CheckoutButtonMethodType]?: CheckoutButtonErrorsState | undefined;\n };\n statuses: {\n [key in CheckoutButtonMethodType]?: CheckoutButtonStatusesState | undefined;\n };\n}\n\nexport interface CheckoutButtonDataState {\n initializedContainers: {\n [key: string]: boolean;\n };\n}\n\nexport interface CheckoutButtonErrorsState {\n initializeError?: Error;\n deinitializeError?: Error;\n}\n\nexport interface CheckoutButtonStatusesState {\n isInitializing?: boolean;\n isDeinitializing?: boolean;\n}\n\nexport const DEFAULT_STATE: CheckoutButtonState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport Config from './config';\n\nexport enum ConfigActionType {\n LoadConfigRequested = 'LOAD_CONFIG_REQUESTED',\n LoadConfigSucceeded = 'LOAD_CONFIG_SUCCEEDED',\n LoadConfigFailed = 'LOAD_CONFIG_FAILED',\n}\n\nexport type LoadConfigAction =\n | LoadConfigRequestedAction\n | LoadConfigSucceededAction\n | LoadConfigFailedAction;\n\nexport interface LoadConfigRequestedAction extends Action {\n type: ConfigActionType.LoadConfigRequested;\n}\n\nexport interface LoadConfigSucceededAction extends Action {\n type: ConfigActionType.LoadConfigSucceeded;\n}\n\nexport interface LoadConfigFailedAction extends Action {\n type: ConfigActionType.LoadConfigFailed;\n}\n","import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { CheckoutButtonAction, CheckoutButtonActionType } from './checkout-button-actions';\nimport CheckoutButtonState, {\n CheckoutButtonDataState,\n CheckoutButtonErrorsState,\n CheckoutButtonStatusesState,\n DEFAULT_STATE,\n} from './checkout-button-state';\n\nconst DEFAULT_DATA_STATE: CheckoutButtonDataState = { initializedContainers: {} };\nconst DEFAULT_ERROR_STATE: CheckoutButtonErrorsState = {};\nconst DEFAULT_STATUS_STATE: CheckoutButtonStatusesState = {};\n\nexport default function checkoutButtonReducer(\n state: CheckoutButtonState = DEFAULT_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonState {\n if (!action.meta || !action.meta.methodId) {\n return state;\n }\n\n const reducer = combineReducers({\n data: combineReducers({\n [action.meta.methodId]: dataReducer,\n }),\n errors: combineReducers({\n [action.meta.methodId]: errorsReducer,\n }),\n statuses: combineReducers({\n [action.meta.methodId]: statusesReducer,\n }),\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: CheckoutButtonDataState = DEFAULT_DATA_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonDataState {\n switch (action.type) {\n case CheckoutButtonActionType.InitializeButtonSucceeded:\n if (!action.meta || !action.meta.containerId) {\n return data;\n }\n\n return objectMerge(data, {\n initializedContainers: {\n [action.meta.containerId]: true,\n },\n });\n\n case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n return objectSet(data, 'initializedContainers', {});\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: CheckoutButtonErrorsState = DEFAULT_ERROR_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonErrorsState {\n switch (action.type) {\n case CheckoutButtonActionType.InitializeButtonRequested:\n case CheckoutButtonActionType.InitializeButtonSucceeded:\n return objectSet(errors, 'initializeError', undefined);\n\n case CheckoutButtonActionType.InitializeButtonFailed:\n return objectSet(errors, 'initializeError', action.payload);\n\n case CheckoutButtonActionType.DeinitializeButtonRequested:\n case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n return objectSet(errors, 'deinitializeError', undefined);\n\n case CheckoutButtonActionType.DeinitializeButtonFailed:\n return objectSet(errors, 'deinitializeError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CheckoutButtonStatusesState = DEFAULT_STATUS_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonStatusesState {\n switch (action.type) {\n case CheckoutButtonActionType.InitializeButtonRequested:\n return objectSet(statuses, 'isInitializing', true);\n\n case CheckoutButtonActionType.InitializeButtonFailed:\n case CheckoutButtonActionType.InitializeButtonSucceeded:\n return objectSet(statuses, 'isInitializing', false);\n\n case CheckoutButtonActionType.DeinitializeButtonRequested:\n return objectSet(statuses, 'isDeinitializing', true);\n\n case CheckoutButtonActionType.DeinitializeButtonFailed:\n case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n return objectSet(statuses, 'isDeinitializing', false);\n\n default:\n return statuses;\n }\n}\n","import Config from './config';\n\nexport default interface ConfigState {\n data?: Config;\n meta?: ConfigMetaState;\n errors: ConfigErrorsState;\n statuses: ConfigStatusesState;\n}\n\nexport interface ConfigMetaState {\n externalSource?: string;\n variantIdentificationToken?: string;\n host?: string;\n locale?: string;\n}\n\nexport interface ConfigErrorsState {\n loadError?: Error;\n}\n\nexport interface ConfigStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ConfigState = {\n meta: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { InternalOrderResponseData } from './internal-order-responses';\nimport Order from './order';\n\nexport enum OrderActionType {\n LoadOrderRequested = 'LOAD_ORDER_REQUESTED',\n LoadOrderSucceeded = 'LOAD_ORDER_SUCCEEDED',\n LoadOrderFailed = 'LOAD_ORDER_FAILED',\n\n LoadOrderPaymentsRequested = 'LOAD_ORDER_PAYMENTS_REQUESTED',\n LoadOrderPaymentsSucceeded = 'LOAD_ORDER_PAYMENTS_SUCCEEDED',\n LoadOrderPaymentsFailed = 'LOAD_ORDER_PAYMENTS_FAILED',\n\n SubmitOrderRequested = 'SUBMIT_ORDER_REQUESTED',\n SubmitOrderSucceeded = 'SUBMIT_ORDER_SUCCEEDED',\n SubmitOrderFailed = 'SUBMIT_ORDER_FAILED',\n\n FinalizeOrderRequested = 'FINALIZE_ORDER_REQUESTED',\n FinalizeOrderSucceeded = 'FINALIZE_ORDER_SUCCEEDED',\n FinalizeOrderFailed = 'FINALIZE_ORDER_FAILED',\n}\n\nexport type OrderAction =\n | LoadOrderAction\n | LoadOrderPaymentsAction\n | SubmitOrderAction\n | FinalizeOrderAction;\n\nexport type LoadOrderPaymentsAction =\n | LoadOrderPaymentsRequestedAction\n | LoadOrderPaymentsSucceededAction\n | LoadOrderPaymentsFailedAction;\n\nexport type LoadOrderAction =\n | LoadOrderRequestedAction\n | LoadOrderSucceededAction\n | LoadOrderFailedAction;\n\nexport type SubmitOrderAction =\n | SubmitOrderRequestedAction\n | SubmitOrderSucceededAction\n | SubmitOrderFailedAction\n | LoadOrderAction;\n\nexport type FinalizeOrderAction =\n | FinalizeOrderRequestedAction\n | FinalizeOrderSucceededAction\n | FinalizeOrderFailedAction\n | LoadOrderAction;\n\nexport interface LoadOrderRequestedAction extends Action {\n type: OrderActionType.LoadOrderRequested;\n}\n\nexport interface LoadOrderSucceededAction extends Action {\n type: OrderActionType.LoadOrderSucceeded;\n}\n\nexport interface LoadOrderFailedAction extends Action {\n type: OrderActionType.LoadOrderFailed;\n}\n\nexport interface LoadOrderPaymentsRequestedAction extends Action {\n type: OrderActionType.LoadOrderPaymentsRequested;\n}\n\nexport interface LoadOrderPaymentsSucceededAction extends Action {\n type: OrderActionType.LoadOrderPaymentsSucceeded;\n}\n\nexport interface LoadOrderPaymentsFailedAction extends Action {\n type: OrderActionType.LoadOrderPaymentsFailed;\n}\n\nexport interface SubmitOrderRequestedAction extends Action {\n type: OrderActionType.SubmitOrderRequested;\n}\n\nexport interface SubmitOrderSucceededAction extends Action {\n type: OrderActionType.SubmitOrderSucceeded;\n}\n\nexport interface SubmitOrderFailedAction extends Action {\n type: OrderActionType.SubmitOrderFailed;\n}\n\nexport interface FinalizeOrderRequestedAction extends Action {\n type: OrderActionType.FinalizeOrderRequested;\n}\n\nexport interface FinalizeOrderSucceededAction extends Action {\n type: OrderActionType.FinalizeOrderSucceeded;\n}\n\nexport interface FinalizeOrderFailedAction extends Action {\n type: OrderActionType.FinalizeOrderFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport Config from './config';\nimport { ConfigActionType, LoadConfigAction } from './config-actions';\nimport ConfigState, { ConfigErrorsState, ConfigStatusesState, DEFAULT_STATE } from './config-state';\n\nexport default function configReducer(\n state: ConfigState = DEFAULT_STATE,\n action: Action,\n): ConfigState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(data: Config | undefined, action: LoadConfigAction): Config | undefined {\n switch (action.type) {\n case ConfigActionType.LoadConfigSucceeded:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: ConfigErrorsState = DEFAULT_STATE.errors,\n action: LoadConfigAction,\n): ConfigErrorsState {\n switch (action.type) {\n case ConfigActionType.LoadConfigSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case ConfigActionType.LoadConfigFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ConfigStatusesState = DEFAULT_STATE.statuses,\n action: LoadConfigAction,\n): ConfigStatusesState {\n switch (action.type) {\n case ConfigActionType.LoadConfigRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ConfigActionType.LoadConfigSucceeded:\n case ConfigActionType.LoadConfigFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nimport Coupon from './coupon';\n\nexport default interface CouponState {\n data?: Coupon[];\n errors: CouponErrorsState;\n statuses: CouponStatusesState;\n}\n\nexport interface CouponErrorsState {\n applyCouponError?: RequestError;\n removeCouponError?: RequestError;\n}\n\nexport interface CouponStatusesState {\n isApplyingCoupon?: boolean;\n isRemovingCoupon?: boolean;\n}\n\nexport const DEFAULT_STATE: CouponState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { OrderAction, OrderActionType } from '../order';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport Coupon from './coupon';\nimport { CouponAction, CouponActionType } from './coupon-actions';\nimport CouponState, { CouponErrorsState, CouponStatusesState, DEFAULT_STATE } from './coupon-state';\n\nexport default function couponReducer(\n state: CouponState = DEFAULT_STATE,\n action: Action,\n): CouponState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Coupon[] | undefined,\n action: CouponAction | CheckoutAction | OrderAction | ConsignmentAction,\n): Coupon[] | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case OrderActionType.LoadOrderSucceeded:\n return arrayReplace(data, action.payload && action.payload.coupons);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(errors: CouponErrorsState = {}, action: CouponAction): CouponErrorsState {\n switch (action.type) {\n case CouponActionType.ApplyCouponRequested:\n case CouponActionType.ApplyCouponSucceeded:\n return objectSet(errors, 'applyCouponError', undefined);\n\n case CouponActionType.ApplyCouponFailed:\n return objectSet(errors, 'applyCouponError', action.payload);\n\n case CouponActionType.RemoveCouponRequested:\n case CouponActionType.RemoveCouponSucceeded:\n return objectSet(errors, 'removeCouponError', undefined);\n\n case CouponActionType.RemoveCouponFailed:\n return objectSet(errors, 'removeCouponError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CouponStatusesState = {},\n action: CouponAction,\n): CouponStatusesState {\n switch (action.type) {\n case CouponActionType.ApplyCouponRequested:\n return objectSet(statuses, 'isApplyingCoupon', true);\n\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.ApplyCouponFailed:\n return objectSet(statuses, 'isApplyingCoupon', false);\n\n case CouponActionType.RemoveCouponRequested:\n return objectSet(statuses, 'isRemovingCoupon', true);\n\n case CouponActionType.RemoveCouponSucceeded:\n case CouponActionType.RemoveCouponFailed:\n return objectSet(statuses, 'isRemovingCoupon', false);\n\n default:\n return statuses;\n }\n}\n","import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nimport GiftCertificate from './gift-certificate';\n\nexport default interface GiftCertificateState {\n data?: GiftCertificate[];\n errors: GiftCertificateErrorsState;\n statuses: GiftCertificateStatusesState;\n}\n\nexport interface GiftCertificateErrorsState {\n applyGiftCertificateError?: RequestError;\n removeGiftCertificateError?: RequestError;\n}\n\nexport interface GiftCertificateStatusesState {\n isApplyingGiftCertificate?: boolean;\n isRemovingGiftCertificate?: boolean;\n}\n\nexport const DEFAULT_STATE: GiftCertificateState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadCheckoutAction } from '../checkout';\nimport { SpamProtectionAction } from '../spam-protection';\n\nimport Customer from './customer';\nimport { InternalCustomerResponseData } from './internal-customer-responses';\n\nexport enum CustomerActionType {\n SignInCustomerRequested = 'SIGN_IN_CUSTOMER_REQUESTED',\n SignInCustomerSucceeded = 'SIGN_IN_CUSTOMER_SUCCEEDED',\n SignInCustomerFailed = 'SIGN_IN_CUSTOMER_FAILED',\n\n SignOutCustomerRequested = 'SIGN_OUT_CUSTOMER_REQUESTED',\n SignOutCustomerSucceeded = 'SIGN_OUT_CUSTOMER_SUCCEEDED',\n SignOutCustomerFailed = 'SIGN_OUT_CUSTOMER_FAILED',\n\n CreateCustomerRequested = 'CREATE_CUSTOMER_REQUESTED',\n CreateCustomerSucceeded = 'CREATE_CUSTOMER_SUCCEEDED',\n CreateCustomerFailed = 'CREATE_CUSTOMER_FAILED',\n\n CreateCustomerAddressRequested = 'CREATE_CUSTOMER_ADDRESS_REQUESTED',\n CreateCustomerAddressSucceeded = 'CREATE_CUSTOMER_ADDRESS_SUCCEEDED',\n CreateCustomerAddressFailed = 'CREATE_CUSTOMER_ADDRESS_FAILED',\n\n StripeLinkAuthenticated = 'STRIPE_LINK_AUTHENTICATED',\n}\n\nexport type CustomerAction =\n | SignInCustomerAction\n | SignOutCustomerAction\n | CreateCustomerAddressAction\n | CreateCustomerAction;\n\nexport type CreateCustomerAction =\n | CreateCustomerRequestedAction\n | CreateCustomerSucceededAction\n | CreateCustomerFailedAction\n | SpamProtectionAction\n | LoadCheckoutAction;\n\nexport type CreateCustomerAddressAction =\n | CreateCustomerAddressRequestedAction\n | CreateCustomerAddressSucceededAction\n | CreateCustomerAddressFailedAction\n | LoadCheckoutAction;\n\nexport type SignInCustomerAction =\n | SignInCustomerRequestedAction\n | SignInCustomerSucceededAction\n | SignInCustomerFailedAction\n | LoadCheckoutAction;\n\nexport type SignOutCustomerAction =\n | SignOutCustomerRequestedAction\n | SignOutCustomerSucceededAction\n | SignOutCustomerFailedAction\n | LoadCheckoutAction;\n\nexport interface SignInCustomerRequestedAction extends Action {\n type: CustomerActionType.SignInCustomerRequested;\n}\n\nexport interface StripeLinkAuthenticatedAction extends Action {\n type: CustomerActionType.StripeLinkAuthenticated;\n}\n\nexport interface SignInCustomerSucceededAction extends Action {\n type: CustomerActionType.SignInCustomerSucceeded;\n}\n\nexport interface SignInCustomerFailedAction extends Action {\n type: CustomerActionType.SignInCustomerFailed;\n}\n\nexport interface SignOutCustomerRequestedAction extends Action {\n type: CustomerActionType.SignOutCustomerRequested;\n}\n\nexport interface SignOutCustomerSucceededAction extends Action {\n type: CustomerActionType.SignOutCustomerSucceeded;\n}\n\nexport interface SignOutCustomerFailedAction extends Action {\n type: CustomerActionType.SignOutCustomerFailed;\n}\n\nexport interface CreateCustomerRequestedAction extends Action {\n type: CustomerActionType.CreateCustomerRequested;\n}\n\nexport interface CreateCustomerSucceededAction extends Action {\n type: CustomerActionType.CreateCustomerSucceeded;\n}\n\nexport interface CreateCustomerFailedAction extends Action {\n type: CustomerActionType.CreateCustomerFailed;\n}\n\nexport interface CreateCustomerAddressRequestedAction extends Action {\n type: CustomerActionType.CreateCustomerAddressRequested;\n}\n\nexport interface CreateCustomerAddressSucceededAction extends Action {\n type: CustomerActionType.CreateCustomerAddressSucceeded;\n}\n\nexport interface CreateCustomerAddressFailedAction extends Action {\n type: CustomerActionType.CreateCustomerAddressFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport { CouponAction, CouponActionType } from './coupon-actions';\nimport GiftCertificate from './gift-certificate';\nimport { GiftCertificateAction, GiftCertificateActionType } from './gift-certificate-actions';\nimport GiftCertificateState, {\n DEFAULT_STATE,\n GiftCertificateErrorsState,\n GiftCertificateStatusesState,\n} from './gift-certificate-state';\n\nexport default function giftCertificateReducer(\n state: GiftCertificateState = DEFAULT_STATE,\n action: Action,\n): GiftCertificateState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: GiftCertificate[] | undefined,\n action: CheckoutAction | GiftCertificateAction | ConsignmentAction | CouponAction,\n): GiftCertificate[] | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n return arrayReplace(data, action.payload && action.payload.giftCertificates);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: GiftCertificateErrorsState = DEFAULT_STATE.errors,\n action: GiftCertificateAction,\n): GiftCertificateErrorsState {\n switch (action.type) {\n case GiftCertificateActionType.ApplyGiftCertificateRequested:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n return objectSet(errors, 'applyGiftCertificateError', undefined);\n\n case GiftCertificateActionType.ApplyGiftCertificateFailed:\n return objectSet(errors, 'applyGiftCertificateError', action.payload);\n\n case GiftCertificateActionType.RemoveGiftCertificateRequested:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n return objectSet(errors, 'removeGiftCertificateError', undefined);\n\n case GiftCertificateActionType.RemoveGiftCertificateFailed:\n return objectSet(errors, 'removeGiftCertificateError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: GiftCertificateStatusesState = DEFAULT_STATE.statuses,\n action: GiftCertificateAction,\n): GiftCertificateStatusesState {\n switch (action.type) {\n case GiftCertificateActionType.ApplyGiftCertificateRequested:\n return objectSet(statuses, 'isApplyingGiftCertificate', true);\n\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateFailed:\n return objectSet(statuses, 'isApplyingGiftCertificate', false);\n\n case GiftCertificateActionType.RemoveGiftCertificateRequested:\n return objectSet(statuses, 'isRemovingGiftCertificate', true);\n\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateFailed:\n return objectSet(statuses, 'isRemovingGiftCertificate', false);\n\n default:\n return statuses;\n }\n}\n","import Customer from './customer';\n\nexport default interface CustomerState {\n data?: Customer;\n statuses: CustomerStatusesState;\n errors: CustomerErrorsState;\n}\n\nexport interface CustomerErrorsState {\n createError?: Error;\n createAddressError?: Error;\n}\n\nexport interface CustomerStatusesState {\n isCreating?: boolean;\n isCreatingAddress?: boolean;\n}\n\nexport const DEFAULT_STATE: CustomerState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nexport enum CustomerStrategyActionType {\n SignInFailed = 'CUSTOMER_STRATEGY_SIGN_IN_FAILED',\n SignInRequested = 'CUSTOMER_STRATEGY_SIGN_IN_REQUESTED',\n SignInSucceeded = 'CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED',\n SignOutFailed = 'CUSTOMER_STRATEGY_SIGN_OUT_FAILED',\n SignOutRequested = 'CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED',\n SignOutSucceeded = 'CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED',\n ExecutePaymentMethodCheckoutFailed = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED',\n ExecutePaymentMethodCheckoutRequested = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED',\n ExecutePaymentMethodCheckoutSucceeded = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED',\n InitializeFailed = 'CUSTOMER_STRATEGY_INITIALIZE_FAILED',\n InitializeRequested = 'CUSTOMER_STRATEGY_INITIALIZE_REQUESTED',\n InitializeSucceeded = 'CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED',\n DeinitializeFailed = 'CUSTOMER_STRATEGY_DEINITIALIZE_FAILED',\n DeinitializeRequested = 'CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED',\n DeinitializeSucceeded = 'CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED',\n WidgetInteractionStarted = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED',\n WidgetInteractionFinished = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED',\n WidgetInteractionFailed = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type CustomerStrategyAction =\n | CustomerStrategySignInAction\n | CustomerStrategySignOutAction\n | CustomerStrategyExecutePaymentMethodCheckoutAction\n | CustomerStrategyInitializeAction\n | CustomerStrategyDeinitializeAction\n | CustomerStrategyWidgetAction;\n\nexport type CustomerStrategySignInAction =\n | SignInRequestedAction\n | SignInSucceededAction\n | SignInFailedAction;\n\nexport type CustomerStrategySignOutAction =\n | SignOutRequestedAction\n | SignOutSucceededAction\n | SignOutFailedAction;\n\nexport type CustomerStrategyExecutePaymentMethodCheckoutAction =\n | ExecutePaymentMethodCheckoutRequestedAction\n | ExecutePaymentMethodCheckoutSucceededAction\n | ExecutePaymentMethodCheckoutFailedAction;\n\nexport type CustomerStrategyInitializeAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction;\n\nexport type CustomerStrategyDeinitializeAction =\n | DeinitializeRequestedAction\n | DeinitializeSucceededAction\n | DeinitializeFailedAction;\n\nexport type CustomerStrategyWidgetAction =\n | WidgetInteractionStartedAction\n | WidgetInteractionFinishedAction\n | WidgetInteractionFailedAction;\n\nexport interface SignInRequestedAction extends Action {\n type: CustomerStrategyActionType.SignInRequested;\n}\n\nexport interface SignInSucceededAction extends Action {\n type: CustomerStrategyActionType.SignInSucceeded;\n}\n\nexport interface SignInFailedAction extends Action {\n type: CustomerStrategyActionType.SignInFailed;\n}\n\nexport interface SignOutRequestedAction extends Action {\n type: CustomerStrategyActionType.SignOutRequested;\n}\n\nexport interface SignOutSucceededAction extends Action {\n type: CustomerStrategyActionType.SignOutSucceeded;\n}\n\nexport interface SignOutFailedAction extends Action {\n type: CustomerStrategyActionType.SignOutFailed;\n}\n\nexport interface ExecutePaymentMethodCheckoutRequestedAction extends Action {\n type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested;\n}\n\nexport interface ExecutePaymentMethodCheckoutSucceededAction extends Action {\n type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded;\n}\n\nexport interface ExecutePaymentMethodCheckoutFailedAction extends Action {\n type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n type: CustomerStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: CustomerStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: CustomerStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n type: CustomerStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n type: CustomerStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action {\n type: CustomerStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n type: CustomerStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n type: CustomerStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action {\n type: CustomerStrategyActionType.WidgetInteractionFailed;\n}\n","import { combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { BillingAddressActionType, ContinueAsGuestAction } from '../billing';\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport Customer from './customer';\nimport {\n CustomerAction,\n CustomerActionType,\n StripeLinkAuthenticatedAction,\n} from './customer-actions';\nimport CustomerState, {\n CustomerErrorsState,\n CustomerStatusesState,\n DEFAULT_STATE,\n} from './customer-state';\n\ntype ReducerActionType =\n | CheckoutAction\n | ContinueAsGuestAction\n | CustomerAction\n | StripeLinkAuthenticatedAction;\n\nexport default function customerReducer(\n state: CustomerState = DEFAULT_STATE,\n action: ReducerActionType,\n): CustomerState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(data: Customer | undefined, action: ReducerActionType): Customer | undefined {\n switch (action.type) {\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectMerge(data, action.payload && action.payload.customer);\n\n case CustomerActionType.CreateCustomerAddressSucceeded:\n return objectMerge(data, action.payload);\n\n case CustomerActionType.StripeLinkAuthenticated:\n return objectSet(data, 'isStripeLinkAuthenticated', action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: CustomerErrorsState = DEFAULT_STATE.errors,\n action: ReducerActionType,\n): CustomerErrorsState {\n switch (action.type) {\n case CustomerActionType.CreateCustomerRequested:\n case CustomerActionType.CreateCustomerSucceeded:\n return objectSet(errors, 'createError', undefined);\n\n case CustomerActionType.CreateCustomerFailed:\n return objectSet(errors, 'createError', action.payload);\n\n case CustomerActionType.CreateCustomerAddressRequested:\n case CustomerActionType.CreateCustomerAddressSucceeded:\n return objectSet(errors, 'createAddressError', undefined);\n\n case CustomerActionType.CreateCustomerAddressFailed:\n return objectSet(errors, 'createAddressError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CustomerStatusesState = DEFAULT_STATE.statuses,\n action: ReducerActionType,\n): CustomerStatusesState {\n switch (action.type) {\n case CustomerActionType.CreateCustomerRequested:\n return objectSet(statuses, 'isCreating', true);\n\n case CustomerActionType.CreateCustomerFailed:\n case CustomerActionType.CreateCustomerSucceeded:\n return objectSet(statuses, 'isCreating', false);\n\n case CustomerActionType.CreateCustomerAddressRequested:\n return objectSet(statuses, 'isCreatingAddress', true);\n\n case CustomerActionType.CreateCustomerAddressFailed:\n case CustomerActionType.CreateCustomerAddressSucceeded:\n return objectSet(statuses, 'isCreatingAddress', false);\n\n default:\n return statuses;\n }\n}\n","export default interface CustomerStrategyState {\n data: CustomerStrategyDataState;\n errors: CustomerStrategyErrorsState;\n statuses: CustomerStrategyStatusesState;\n}\n\nexport interface CustomerStrategyDataState {\n [key: string]: {\n isInitialized: boolean;\n };\n}\n\nexport interface CustomerStrategyErrorsState {\n deinitializeError?: Error;\n deinitializeMethodId?: string;\n initializeErrors?: { [key: string]: Error };\n initializeMethodId?: string;\n signInError?: Error;\n signInMethodId?: string;\n signOutError?: Error;\n signOutMethodId?: string;\n executePaymentMethodCheckoutError?: Error;\n executePaymentMethodCheckoutMethodId?: string;\n widgetInteractionError?: Error;\n widgetInteractionMethodId?: string;\n}\n\nexport interface CustomerStrategyStatusesState {\n deinitializeMethodId?: string;\n initializeMethodId?: string;\n isDeinitializing?: boolean;\n isInitializing?: boolean;\n isSigningIn?: boolean;\n isSigningOut?: boolean;\n signInMethodId?: string;\n signOutMethodId?: string;\n isExecutingPaymentMethodCheckout?: boolean;\n executePaymentMethodCheckoutMethodId?: string;\n isWidgetInteracting?: boolean;\n widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: CustomerStrategyState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Extension } from './extension';\n\nexport enum ExtensionActionType {\n LoadExtensionsRequested = 'LOAD_EXTENSIONS_REQUESTED',\n LoadExtensionsSucceeded = 'LOAD_EXTENSIONS_SUCCEEDED',\n LoadExtensionsFailed = 'LOAD_EXTENSIONS_FAILED',\n RenderExtensionRequested = 'RENDER_EXTENSION_REQUESTED',\n RenderExtensionSucceeded = 'RENDER_EXTENSION_SUCCEEDED',\n RenderExtensionFailed = 'RENDER_EXTENSION_FAILED',\n}\n\nexport type ExtensionAction =\n | LoadExtensionsRequestedAction\n | LoadExtensionsSucceededAction\n | LoadExtensionsFailedAction\n | RenderExtensionRequestedAction\n | RenderExtensionSucceededAction\n | RenderExtensionFailedAction;\n\nexport interface LoadExtensionsRequestedAction extends Action {\n type: ExtensionActionType.LoadExtensionsRequested;\n}\n\nexport interface LoadExtensionsSucceededAction extends Action {\n type: ExtensionActionType.LoadExtensionsSucceeded;\n}\n\nexport interface LoadExtensionsFailedAction extends Action {\n type: ExtensionActionType.LoadExtensionsFailed;\n}\n\nexport interface RenderExtensionRequestedAction extends Action {\n type: ExtensionActionType.RenderExtensionRequested;\n}\n\nexport interface RenderExtensionSucceededAction extends Action {\n type: ExtensionActionType.RenderExtensionSucceeded;\n}\n\nexport interface RenderExtensionFailedAction extends Action {\n type: ExtensionActionType.RenderExtensionFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { CustomerStrategyAction, CustomerStrategyActionType } from './customer-strategy-actions';\nimport CustomerStrategyState, {\n CustomerStrategyDataState,\n CustomerStrategyErrorsState,\n CustomerStrategyStatusesState,\n DEFAULT_STATE,\n} from './customer-strategy-state';\n\nexport default function customerStrategyReducer(\n state: CustomerStrategyState = DEFAULT_STATE,\n action: Action,\n): CustomerStrategyState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: CustomerStrategyDataState = DEFAULT_STATE.data,\n action: CustomerStrategyAction,\n): CustomerStrategyDataState {\n switch (action.type) {\n case CustomerStrategyActionType.InitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: true,\n },\n });\n\n case CustomerStrategyActionType.DeinitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: false,\n },\n });\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: CustomerStrategyErrorsState = DEFAULT_STATE.errors,\n action: CustomerStrategyAction,\n): CustomerStrategyErrorsState {\n switch (action.type) {\n case CustomerStrategyActionType.InitializeRequested:\n case CustomerStrategyActionType.InitializeSucceeded:\n return objectMerge(errors, {\n initializeErrors: { ...errors.initializeErrors },\n initializeMethodId: errors.initializeMethodId\n ? errors.initializeMethodId\n : undefined,\n });\n\n case CustomerStrategyActionType.InitializeFailed:\n return objectMerge(errors, {\n initializeErrors: {\n ...errors.initializeErrors,\n [action.meta && action.meta.methodId]: action.payload,\n },\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.DeinitializeRequested:\n case CustomerStrategyActionType.DeinitializeSucceeded:\n return objectMerge(errors, {\n deinitializeError: undefined,\n deinitializeMethodId: undefined,\n });\n\n case CustomerStrategyActionType.DeinitializeFailed:\n return objectMerge(errors, {\n deinitializeError: action.payload,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignInRequested:\n case CustomerStrategyActionType.SignInSucceeded:\n return objectMerge(errors, {\n signInError: undefined,\n signInMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignInFailed:\n return objectMerge(errors, {\n signInError: action.payload,\n signInMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignOutRequested:\n case CustomerStrategyActionType.SignOutSucceeded:\n return objectMerge(errors, {\n signOutError: undefined,\n signOutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignOutFailed:\n return objectMerge(errors, {\n signOutError: action.payload,\n signOutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested:\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded:\n return objectMerge(errors, {\n executePaymentMethodCheckoutError: undefined,\n executePaymentMethodCheckoutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed:\n return objectMerge(errors, {\n executePaymentMethodCheckoutError: action.payload,\n executePaymentMethodCheckoutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.WidgetInteractionStarted:\n case CustomerStrategyActionType.WidgetInteractionFinished:\n return objectMerge(errors, {\n widgetInteractionError: undefined,\n widgetInteractionMethodId: undefined,\n });\n\n case CustomerStrategyActionType.WidgetInteractionFailed:\n return objectMerge(errors, {\n widgetInteractionError: action.payload,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CustomerStrategyStatusesState = DEFAULT_STATE.statuses,\n action: CustomerStrategyAction,\n): CustomerStrategyStatusesState {\n switch (action.type) {\n case CustomerStrategyActionType.InitializeRequested:\n return objectMerge(statuses, {\n isInitializing: true,\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.InitializeFailed:\n case CustomerStrategyActionType.InitializeSucceeded:\n return objectMerge(statuses, {\n isInitializing: false,\n initializeMethodId: undefined,\n });\n\n case CustomerStrategyActionType.DeinitializeRequested:\n return objectMerge(statuses, {\n isDeinitializing: true,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.DeinitializeFailed:\n case CustomerStrategyActionType.DeinitializeSucceeded:\n return objectMerge(statuses, {\n isDeinitializing: false,\n deinitializeMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignInRequested:\n return objectMerge(statuses, {\n isSigningIn: true,\n signInMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignInFailed:\n case CustomerStrategyActionType.SignInSucceeded:\n return objectMerge(statuses, {\n isSigningIn: false,\n signInMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignOutRequested:\n return objectMerge(statuses, {\n isSigningOut: true,\n signOutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignOutFailed:\n case CustomerStrategyActionType.SignOutSucceeded:\n return objectMerge(statuses, {\n isSigningOut: false,\n signOutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested:\n return objectMerge(statuses, {\n isExecutingPaymentMethodCheckout: true,\n executePaymentMethodCheckoutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed:\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded:\n return objectMerge(statuses, {\n isExecutingPaymentMethodCheckout: false,\n executePaymentMethodCheckoutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.WidgetInteractionStarted:\n return objectMerge(statuses, {\n isWidgetInteracting: true,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n case CustomerStrategyActionType.WidgetInteractionFinished:\n case CustomerStrategyActionType.WidgetInteractionFailed:\n return objectMerge(statuses, {\n isWidgetInteracting: false,\n widgetInteractionMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { Extension } from './extension';\n\nexport interface ExtensionState {\n data?: Extension[];\n errors: ExtensionErrorsState;\n statuses: ExtensionStatusesState;\n}\n\nexport interface ExtensionErrorsState {\n loadError?: Error;\n}\n\nexport interface ExtensionStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ExtensionState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { FormFields } from './form-field';\n\nexport enum FormFieldsActionType {\n LoadFormFieldsRequested = 'LOAD_FORM_FIELDS_REQUESTED',\n LoadFormFieldsSucceeded = 'LOAD_FORM_FIELDS_SUCCEEDED',\n LoadFormFieldsFailed = 'LOAD_FORM_FIELDS_FAILED',\n}\n\nexport type LoadFormFieldsAction =\n | LoadFormFieldsRequestedAction\n | LoadFormFieldsSucceededAction\n | LoadFormFieldsFailedAction;\n\nexport interface LoadFormFieldsRequestedAction extends Action {\n type: FormFieldsActionType.LoadFormFieldsRequested;\n}\n\nexport interface LoadFormFieldsSucceededAction extends Action {\n type: FormFieldsActionType.LoadFormFieldsSucceeded;\n}\n\nexport interface LoadFormFieldsFailedAction extends Action {\n type: FormFieldsActionType.LoadFormFieldsFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\n\nimport { Extension } from './extension';\nimport { ExtensionAction, ExtensionActionType } from './extension-actions';\nimport {\n DEFAULT_STATE,\n ExtensionErrorsState,\n ExtensionState,\n ExtensionStatusesState,\n} from './extension-state';\n\nexport function extensionReducer(\n state: ExtensionState = DEFAULT_STATE,\n action: Action,\n): ExtensionState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Extension[] | undefined,\n action: ExtensionAction,\n): Extension[] | undefined {\n if (action.type === ExtensionActionType.LoadExtensionsSucceeded) {\n return arrayReplace(data, action.payload);\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: ExtensionErrorsState = DEFAULT_STATE.errors,\n action: ExtensionAction,\n): ExtensionErrorsState {\n switch (action.type) {\n case ExtensionActionType.LoadExtensionsRequested:\n case ExtensionActionType.LoadExtensionsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case ExtensionActionType.LoadExtensionsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ExtensionStatusesState = DEFAULT_STATE.statuses,\n action: ExtensionAction,\n): ExtensionStatusesState {\n switch (action.type) {\n case ExtensionActionType.LoadExtensionsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ExtensionActionType.LoadExtensionsSucceeded:\n case ExtensionActionType.LoadExtensionsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { FormFields } from './form-field';\n\nexport default interface FormFieldsState {\n data?: FormFields;\n errors: FormFieldsErrorState;\n statuses: FormFieldsStatusesState;\n}\n\nexport interface FormFieldsErrorState {\n loadError?: Error;\n}\n\nexport interface FormFieldsStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: FormFieldsState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport Country from './country';\n\nexport enum CountryActionType {\n LoadCountriesRequested = 'LOAD_COUNTRIES_REQUESTED',\n LoadCountriesSucceeded = 'LOAD_COUNTRIES_SUCCEEDED',\n LoadCountriesFailed = 'LOAD_COUNTRIES_FAILED',\n}\n\nexport type LoadCountriesAction =\n | LoadCountriesRequestedAction\n | LoadCountriesSucceededAction\n | LoadCountriesFailedAction;\n\nexport interface LoadCountriesRequestedAction extends Action {\n type: CountryActionType.LoadCountriesRequested;\n}\n\nexport interface LoadCountriesSucceededAction extends Action {\n type: CountryActionType.LoadCountriesSucceeded;\n}\n\nexport interface LoadCountriesFailedAction extends Action {\n type: CountryActionType.LoadCountriesFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { FormFields } from './form-field';\nimport { FormFieldsActionType, LoadFormFieldsAction } from './form-fields-actions';\nimport FormFieldsState, {\n DEFAULT_STATE,\n FormFieldsErrorState,\n FormFieldsStatusesState,\n} from './form-fields-state';\n\nexport default function formFieldsReducer(\n state: FormFieldsState = DEFAULT_STATE,\n action: Action,\n): FormFieldsState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: FormFields | undefined,\n action: LoadFormFieldsAction,\n): FormFields | undefined {\n switch (action.type) {\n case FormFieldsActionType.LoadFormFieldsSucceeded:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: FormFieldsErrorState = DEFAULT_STATE.errors,\n action: LoadFormFieldsAction,\n): FormFieldsErrorState {\n switch (action.type) {\n case FormFieldsActionType.LoadFormFieldsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case FormFieldsActionType.LoadFormFieldsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: FormFieldsStatusesState = DEFAULT_STATE.statuses,\n action: LoadFormFieldsAction,\n): FormFieldsStatusesState {\n switch (action.type) {\n case FormFieldsActionType.LoadFormFieldsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case FormFieldsActionType.LoadFormFieldsSucceeded:\n case FormFieldsActionType.LoadFormFieldsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import Country from './country';\n\nexport default interface CountryState {\n data?: Country[];\n errors: CountryErrorsState;\n statuses: CountryStatusesState;\n}\n\nexport interface CountryErrorsState {\n loadError?: Error;\n}\n\nexport interface CountryStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: CountryState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\n\nimport Country from './country';\nimport { CountryActionType, LoadCountriesAction } from './country-actions';\nimport CountryState, {\n CountryErrorsState,\n CountryStatusesState,\n DEFAULT_STATE,\n} from './country-state';\n\nexport default function countryReducer(\n state: CountryState = DEFAULT_STATE,\n action: Action,\n): CountryState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Country[] | undefined,\n action: LoadCountriesAction,\n): Country[] | undefined {\n switch (action.type) {\n case CountryActionType.LoadCountriesSucceeded:\n return arrayReplace(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: CountryErrorsState = DEFAULT_STATE.errors,\n action: LoadCountriesAction,\n): CountryErrorsState {\n switch (action.type) {\n case CountryActionType.LoadCountriesRequested:\n case CountryActionType.LoadCountriesSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CountryActionType.LoadCountriesFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CountryStatusesState = DEFAULT_STATE.statuses,\n action: LoadCountriesAction,\n): CountryStatusesState {\n switch (action.type) {\n case CountryActionType.LoadCountriesRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CountryActionType.LoadCountriesSucceeded:\n case CountryActionType.LoadCountriesFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { Omit } from '../common/types';\n\nimport { InternalOrderMeta, InternalOrderPayment } from './internal-order';\nimport Order from './order';\n\nexport default interface OrderState {\n data?: OrderDataState;\n meta?: OrderMetaState;\n errors: OrderErrorsState;\n statuses: OrderStatusesState;\n}\n\nexport type OrderDataState = Omit;\n\nexport interface OrderMetaState extends InternalOrderMeta {\n token?: string;\n orderToken?: string;\n callbackUrl?: string;\n payment?: InternalOrderPayment;\n}\n\nexport interface OrderErrorsState {\n loadError?: Error;\n submitError?: Error;\n finalizeError?: Error;\n}\n\nexport interface OrderStatusesState {\n isLoading?: boolean;\n isSubmitting?: boolean;\n isFinalizing?: boolean;\n}\n\nexport const DEFAULT_STATE: OrderState = {\n errors: {},\n meta: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { OrderAction, OrderActionType } from './order-actions';\nimport OrderState, {\n DEFAULT_STATE,\n OrderDataState,\n OrderErrorsState,\n OrderMetaState,\n OrderStatusesState,\n} from './order-state';\n\nexport default function orderReducer(\n state: OrderState = DEFAULT_STATE,\n action: Action,\n): OrderState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n meta: metaReducer,\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: OrderDataState | undefined,\n action: OrderAction,\n): OrderDataState | undefined {\n switch (action.type) {\n case OrderActionType.LoadOrderSucceeded:\n case OrderActionType.LoadOrderPaymentsSucceeded:\n return objectMerge(\n data,\n omit(action.payload, ['billingAddress', 'coupons']),\n ) as OrderDataState;\n\n default:\n return data;\n }\n}\n\nfunction metaReducer(\n meta: OrderMetaState | undefined,\n action: OrderAction,\n): OrderMetaState | undefined {\n switch (action.type) {\n case OrderActionType.FinalizeOrderSucceeded:\n case OrderActionType.SubmitOrderSucceeded:\n return objectMerge(meta, {\n ...action.meta,\n callbackUrl: action.payload && action.payload.order.callbackUrl,\n orderToken: action.payload && action.payload.order.token,\n payment: action.payload && action.payload.order && action.payload.order.payment,\n });\n\n default:\n return meta;\n }\n}\n\nfunction errorsReducer(\n errors: OrderErrorsState = DEFAULT_STATE.errors,\n action: OrderAction,\n): OrderErrorsState {\n switch (action.type) {\n case OrderActionType.LoadOrderRequested:\n case OrderActionType.LoadOrderSucceeded:\n case OrderActionType.LoadOrderPaymentsSucceeded:\n case OrderActionType.LoadOrderPaymentsRequested:\n return objectSet(errors, 'loadError', undefined);\n\n case OrderActionType.LoadOrderFailed:\n case OrderActionType.LoadOrderPaymentsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: OrderStatusesState = DEFAULT_STATE.statuses,\n action: OrderAction,\n): OrderStatusesState {\n switch (action.type) {\n case OrderActionType.LoadOrderRequested:\n case OrderActionType.LoadOrderPaymentsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case OrderActionType.LoadOrderSucceeded:\n case OrderActionType.LoadOrderFailed:\n case OrderActionType.LoadOrderPaymentsSucceeded:\n case OrderActionType.LoadOrderPaymentsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { Address } from '../address';\n\nexport interface OrderBillingAddress extends Address {\n email?: string;\n}\n\nexport default interface OrderBillingAddressState {\n data?: OrderBillingAddress;\n}\n\nexport const DEFAULT_STATE: OrderBillingAddressState = {};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderAction } from '../order';\n\nimport PaymentResponseBody from './payment-response-body';\n\nexport enum PaymentActionType {\n SubmitPaymentRequested = 'SUBMIT_PAYMENT_REQUESTED',\n SubmitPaymentSucceeded = 'SUBMIT_PAYMENT_SUCCEEDED',\n SubmitPaymentFailed = 'SUBMIT_PAYMENT_FAILED',\n\n InitializeOffsitePaymentRequested = 'INITIALIZE_OFFSITE_PAYMENT_REQUESTED',\n InitializeOffsitePaymentSucceeded = 'INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED',\n InitializeOffsitePaymentFailed = 'INITIALIZE_OFFSITE_PAYMENT_FAILED',\n}\n\nexport type PaymentAction = SubmitPaymentAction | InitializeOffsitePaymentAction;\n\nexport type SubmitPaymentAction =\n | SubmitPaymentRequestedAction\n | SubmitPaymentSucceededAction\n | SubmitPaymentFailedAction\n | LoadOrderAction;\n\nexport type InitializeOffsitePaymentAction =\n | InitializeOffsitePaymentRequestedAction\n | InitializeOffsitePaymentSucceededAction\n | InitializeOffsitePaymentFailedAction;\n\nexport interface SubmitPaymentRequestedAction extends Action {\n type: PaymentActionType.SubmitPaymentRequested;\n}\n\nexport interface SubmitPaymentSucceededAction extends Action {\n type: PaymentActionType.SubmitPaymentSucceeded;\n}\n\nexport interface SubmitPaymentFailedAction extends Action {\n type: PaymentActionType.SubmitPaymentFailed;\n}\n\nexport interface InitializeOffsitePaymentRequestedAction extends Action {\n type: PaymentActionType.InitializeOffsitePaymentRequested;\n}\n\nexport interface InitializeOffsitePaymentSucceededAction extends Action {\n type: PaymentActionType.InitializeOffsitePaymentSucceeded;\n}\n\nexport interface InitializeOffsitePaymentFailedAction extends Action {\n type: PaymentActionType.InitializeOffsitePaymentFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport enum PaymentMethodActionType {\n LoadPaymentMethodRequested = 'LOAD_PAYMENT_METHOD_REQUESTED',\n LoadPaymentMethodSucceeded = 'LOAD_PAYMENT_METHOD_SUCCEEDED',\n LoadPaymentMethodFailed = 'LOAD_PAYMENT_METHOD_FAILED',\n\n LoadPaymentMethodsRequested = 'LOAD_PAYMENT_METHODS_REQUESTED',\n LoadPaymentMethodsSucceeded = 'LOAD_PAYMENT_METHODS_SUCCEEDED',\n LoadPaymentMethodsFailed = 'LOAD_PAYMENT_METHODS_FAILED',\n}\n\nexport type PaymentMethodAction = LoadPaymentMethodAction | LoadPaymentMethodsAction;\n\nexport type LoadPaymentMethodAction =\n | LoadPaymentMethodRequestedAction\n | LoadPaymentMethodSucceededAction\n | LoadPaymentMethodFailedAction;\n\nexport type LoadPaymentMethodsAction =\n | LoadPaymentMethodsRequestedAction\n | LoadPaymentMethodsSucceededAction\n | LoadPaymentMethodsFailedAction;\n\nexport interface LoadPaymentMethodRequestedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodRequested;\n}\n\nexport interface LoadPaymentMethodSucceededAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodSucceeded;\n}\n\nexport interface LoadPaymentMethodFailedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodFailed;\n}\n\nexport interface LoadPaymentMethodsRequestedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodsRequested;\n}\n\nexport interface LoadPaymentMethodsSucceededAction\n extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodsSucceeded;\n}\n\nexport interface LoadPaymentMethodsFailedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodsFailed;\n}\n","import { Action, combineReducers } from '@bigcommerce/data-store';\n\nimport { replace } from '../common/utility';\nimport { OrderAction, OrderActionType } from '../order';\n\nimport OrderBillingAddressState, {\n DEFAULT_STATE,\n OrderBillingAddress,\n} from './order-billing-address-state';\n\nexport default function orderBillingAddressReducer(\n state: OrderBillingAddressState = DEFAULT_STATE,\n action: Action,\n): OrderBillingAddressState {\n const reducer = combineReducers({\n data: dataReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: OrderBillingAddress | undefined,\n action: OrderAction,\n): OrderBillingAddress | undefined {\n switch (action.type) {\n case OrderActionType.LoadOrderPaymentsSucceeded:\n case OrderActionType.LoadOrderSucceeded:\n return replace(data, action.payload && action.payload.billingAddress);\n\n default:\n return data;\n }\n}\n","import { combineReducers } from '@bigcommerce/data-store';\n\nimport { PaymentAction, PaymentActionType } from './payment-actions';\nimport PaymentResponseBody from './payment-response-body';\nimport PaymentState from './payment-state';\n\nexport default function paymentReducer(\n state: PaymentState = {},\n action: PaymentAction,\n): PaymentState {\n const reducer = combineReducers({\n data: dataReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentResponseBody | undefined,\n action: PaymentAction,\n): PaymentResponseBody | undefined {\n switch (action.type) {\n case PaymentActionType.SubmitPaymentSucceeded:\n return action.payload;\n\n default:\n return data;\n }\n}\n","import PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport default interface PaymentMethodState {\n data?: PaymentMethod[];\n meta?: PaymentMethodMeta;\n errors: PaymentMethodErrorsState;\n statuses: PaymentMethodStatusesState;\n}\n\nexport interface PaymentMethodErrorsState {\n loadMethodId?: string;\n loadError?: Error;\n loadMethodError?: Error;\n}\n\nexport interface PaymentMethodStatusesState {\n loadMethodId?: string;\n isLoading?: boolean;\n isLoadingMethod?: boolean;\n}\n\nexport const DEFAULT_STATE: PaymentMethodState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderPaymentsAction } from '../order';\n\nexport enum PaymentStrategyActionType {\n ExecuteFailed = 'PAYMENT_STRATEGY_EXECUTE_FAILED',\n ExecuteRequested = 'PAYMENT_STRATEGY_EXECUTE_REQUESTED',\n ExecuteSucceeded = 'PAYMENT_STRATEGY_EXECUTE_SUCCEEDED',\n FinalizeFailed = 'PAYMENT_STRATEGY_FINALIZE_FAILED',\n FinalizeRequested = 'PAYMENT_STRATEGY_FINALIZE_REQUESTED',\n FinalizeSucceeded = 'PAYMENT_STRATEGY_FINALIZE_SUCCEEDED',\n InitializeFailed = 'PAYMENT_STRATEGY_INITIALIZE_FAILED',\n InitializeRequested = 'PAYMENT_STRATEGY_INITIALIZE_REQUESTED',\n InitializeSucceeded = 'PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED',\n DeinitializeFailed = 'PAYMENT_STRATEGY_DEINITIALIZE_FAILED',\n DeinitializeRequested = 'PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED',\n DeinitializeSucceeded = 'PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED',\n WidgetInteractionStarted = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED',\n WidgetInteractionFinished = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED',\n WidgetInteractionFailed = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type PaymentStrategyAction =\n | PaymentStrategyExecuteAction\n | PaymentStrategyFinalizeAction\n | PaymentStrategyInitializeAction\n | PaymentStrategyDeinitializeAction\n | PaymentStrategyWidgetAction;\n\nexport type PaymentStrategyExecuteAction =\n | ExecuteRequestedAction\n | ExecuteSucceededAction\n | ExecuteFailedAction\n | LoadOrderPaymentsAction;\n\nexport type PaymentStrategyFinalizeAction =\n | FinalizeRequestedAction\n | FinalizeSucceededAction\n | FinalizeFailedAction\n | LoadOrderPaymentsAction;\n\nexport type PaymentStrategyInitializeAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction;\n\nexport type PaymentStrategyDeinitializeAction =\n | DeinitializeRequestedAction\n | DeinitializeSucceededAction\n | DeinitializeFailedAction;\n\nexport type PaymentStrategyWidgetAction =\n | WidgetInteractionStartedAction\n | WidgetInteractionFinishedAction\n | WidgetInteractionFailedAction;\n\nexport interface ExecuteRequestedAction extends Action {\n type: PaymentStrategyActionType.ExecuteRequested;\n}\n\nexport interface ExecuteSucceededAction extends Action {\n type: PaymentStrategyActionType.ExecuteSucceeded;\n}\n\nexport interface ExecuteFailedAction extends Action {\n type: PaymentStrategyActionType.ExecuteFailed;\n}\n\nexport interface FinalizeRequestedAction extends Action {\n type: PaymentStrategyActionType.FinalizeRequested;\n}\n\nexport interface FinalizeSucceededAction extends Action {\n type: PaymentStrategyActionType.FinalizeSucceeded;\n}\n\nexport interface FinalizeFailedAction extends Action {\n type: PaymentStrategyActionType.FinalizeFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n type: PaymentStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: PaymentStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: PaymentStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n type: PaymentStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n type: PaymentStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action {\n type: PaymentStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n type: PaymentStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n type: PaymentStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action {\n type: PaymentStrategyActionType.WidgetInteractionFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, mergeOrPush, objectMerge, objectSet } from '../common/utility';\n\nimport PaymentMethod from './payment-method';\nimport { PaymentMethodAction, PaymentMethodActionType } from './payment-method-actions';\nimport PaymentMethodMeta from './payment-method-meta';\nimport PaymentMethodState, {\n DEFAULT_STATE,\n PaymentMethodErrorsState,\n PaymentMethodStatusesState,\n} from './payment-method-state';\n\nexport default function paymentMethodReducer(\n state: PaymentMethodState = DEFAULT_STATE,\n action: Action,\n): PaymentMethodState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n meta: metaReducer,\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentMethod[] | undefined,\n action: PaymentMethodAction,\n): PaymentMethod[] | undefined {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n return mergeOrPush(\n data || [],\n action.payload,\n action.payload && {\n id: action.payload.id,\n gateway: action.payload.gateway,\n },\n );\n\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n return arrayReplace(data, action.payload, {\n matchObject: (methodA, methodB) =>\n methodA.id === methodB.id && methodA.gateway === methodB.gateway,\n });\n\n default:\n return data;\n }\n}\n\nfunction metaReducer(\n meta: PaymentMethodMeta | undefined,\n action: PaymentMethodAction,\n): PaymentMethodMeta | undefined {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n return objectMerge(meta, action.meta);\n\n default:\n return meta;\n }\n}\n\nfunction errorsReducer(\n errors: PaymentMethodErrorsState = DEFAULT_STATE.errors,\n action: PaymentMethodAction,\n): PaymentMethodErrorsState {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodsRequested:\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case PaymentMethodActionType.LoadPaymentMethodsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case PaymentMethodActionType.LoadPaymentMethodRequested:\n case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n return objectMerge(errors, {\n loadMethodId: undefined,\n loadMethodError: undefined,\n });\n\n case PaymentMethodActionType.LoadPaymentMethodFailed:\n return objectMerge(errors, {\n loadMethodId: action.meta.methodId,\n loadMethodError: action.payload,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: PaymentMethodStatusesState = DEFAULT_STATE.statuses,\n action: PaymentMethodAction,\n): PaymentMethodStatusesState {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n case PaymentMethodActionType.LoadPaymentMethodsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case PaymentMethodActionType.LoadPaymentMethodRequested:\n return objectMerge(statuses, {\n isLoadingMethod: true,\n loadMethodId: action.meta.methodId,\n });\n\n case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n case PaymentMethodActionType.LoadPaymentMethodFailed:\n return objectMerge(statuses, {\n isLoadingMethod: false,\n loadMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { findIndex, pick, pickBy, ValueKeyIteratee } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\nimport objectMerge from './object-merge';\n\n/**\n * Push an item to an array if it doesn't exist in the array. Otherwise, merge\n * with the existing item in the array. This function always returns a new array.\n */\nexport default function mergeOrPush(array: T[], item?: T, predicate?: ValueKeyIteratee): T[] {\n if (!item) {\n return array;\n }\n\n const defaultPredicate = pick(item, 'id');\n const index = findIndex(\n array,\n typeof predicate === 'object' ? pickBy(predicate) : predicate || defaultPredicate,\n );\n const newArray = [...array];\n\n if (index === -1) {\n newArray.push(item);\n } else {\n const existingItem = array[index];\n\n newArray[index] =\n isPlainObject(existingItem) && isPlainObject(item)\n ? objectMerge(existingItem, item)\n : item;\n }\n\n return newArray;\n}\n","export default interface PaymentStrategyState {\n data: PaymentStrategyDataState;\n errors: PaymentStrategyErrorsState;\n statuses: PaymentStrategyStatusesState;\n}\n\nexport interface PaymentStrategyDataState {\n [key: string]: {\n isInitialized: boolean;\n };\n}\n\nexport interface PaymentStrategyErrorsState {\n deinitializeError?: Error;\n deinitializeMethodId?: string;\n executeError?: Error;\n executeMethodId?: string;\n finalizeError?: Error;\n finalizeMethodId?: string;\n initializeError?: Error;\n initializeMethodId?: string;\n widgetInteractionError?: Error;\n widgetInteractionMethodId?: string;\n}\n\nexport interface PaymentStrategyStatusesState {\n deinitializeMethodId?: string;\n executeMethodId?: string;\n finalizeMethodId?: string;\n initializeMethodId?: string;\n isDeinitializing?: boolean;\n isExecuting?: boolean;\n isFinalizing?: boolean;\n isInitializing?: boolean;\n isWidgetInteracting?: boolean;\n widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: PaymentStrategyState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { VaultAccessToken } from './instrument';\nimport { InstrumentsResponseBody } from './instrument-response-body';\n\nexport enum InstrumentActionType {\n LoadInstrumentsRequested = 'LOAD_INSTRUMENTS_REQUESTED',\n LoadInstrumentsSucceeded = 'LOAD_INSTRUMENTS_SUCCEEDED',\n LoadInstrumentsFailed = 'LOAD_INSTRUMENTS_FAILED',\n\n DeleteInstrumentRequested = 'DELETE_INSTRUMENT_REQUESTED',\n DeleteInstrumentSucceeded = 'DELETE_INSTRUMENT_SUCCEEDED',\n DeleteInstrumentFailed = 'DELETE_INSTRUMENT_FAILED',\n}\n\nexport type InstrumentAction = LoadInstrumentsAction | DeleteInstrumentAction;\n\nexport type LoadInstrumentsAction =\n | LoadInstrumentsRequestedAction\n | LoadInstrumentsSucceededAction\n | LoadInstrumentsFailedAction;\n\nexport type DeleteInstrumentAction =\n | DeleteInstrumentRequestedAction\n | DeleteInstrumentSucceededAction\n | DeleteInstrumentFailedAction;\n\nexport interface LoadInstrumentsRequestedAction extends Action {\n type: InstrumentActionType.LoadInstrumentsRequested;\n}\n\nexport interface LoadInstrumentsSucceededAction\n extends Action {\n type: InstrumentActionType.LoadInstrumentsSucceeded;\n}\n\nexport interface LoadInstrumentsFailedAction extends Action {\n type: InstrumentActionType.LoadInstrumentsFailed;\n}\n\nexport interface DeleteInstrumentRequestedAction extends Action {\n type: InstrumentActionType.DeleteInstrumentRequested;\n}\n\nexport interface DeleteInstrumentSucceededAction\n extends Action {\n type: InstrumentActionType.DeleteInstrumentSucceeded;\n}\n\nexport interface DeleteInstrumentFailedAction extends Action {\n type: InstrumentActionType.DeleteInstrumentFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { PaymentStrategyAction, PaymentStrategyActionType } from './payment-strategy-actions';\nimport PaymentStrategyState, {\n DEFAULT_STATE,\n PaymentStrategyDataState,\n PaymentStrategyErrorsState,\n PaymentStrategyStatusesState,\n} from './payment-strategy-state';\n\nexport default function paymentStrategyReducer(\n state: PaymentStrategyState = DEFAULT_STATE,\n action: Action,\n): PaymentStrategyState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentStrategyDataState = DEFAULT_STATE.data,\n action: PaymentStrategyAction,\n): PaymentStrategyDataState {\n switch (action.type) {\n case PaymentStrategyActionType.InitializeSucceeded: {\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n const initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n\n return objectMerge(data, {\n [initializeMethodId]: {\n isInitialized: true,\n },\n });\n }\n\n break;\n }\n\n case PaymentStrategyActionType.DeinitializeSucceeded: {\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n const initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n\n return objectMerge(data, {\n [initializeMethodId]: {\n isInitialized: false,\n },\n });\n }\n }\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: PaymentStrategyErrorsState = DEFAULT_STATE.errors,\n action: PaymentStrategyAction,\n): PaymentStrategyErrorsState {\n switch (action.type) {\n case PaymentStrategyActionType.InitializeRequested:\n case PaymentStrategyActionType.InitializeSucceeded:\n return objectMerge(errors, {\n initializeError: undefined,\n initializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.InitializeFailed: {\n let initializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(errors, {\n initializeError: action.payload,\n initializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.DeinitializeRequested:\n case PaymentStrategyActionType.DeinitializeSucceeded:\n return objectMerge(errors, {\n deinitializeError: undefined,\n deinitializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.DeinitializeFailed: {\n let deinitializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n deinitializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(errors, {\n deinitializeError: action.payload,\n deinitializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.ExecuteRequested:\n case PaymentStrategyActionType.ExecuteSucceeded:\n return objectMerge(errors, {\n executeError: undefined,\n executeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.ExecuteFailed:\n return objectMerge(errors, {\n executeError: action.payload,\n executeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.FinalizeRequested:\n case PaymentStrategyActionType.FinalizeSucceeded:\n return objectMerge(errors, {\n finalizeError: undefined,\n finalizeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.FinalizeFailed:\n return objectMerge(errors, {\n finalizeError: action.payload,\n finalizeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.WidgetInteractionStarted:\n case PaymentStrategyActionType.WidgetInteractionFinished:\n return objectMerge(errors, {\n widgetInteractionError: undefined,\n widgetInteractionMethodId: undefined,\n });\n\n case PaymentStrategyActionType.WidgetInteractionFailed:\n return objectMerge(errors, {\n widgetInteractionError: action.payload,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: PaymentStrategyStatusesState = DEFAULT_STATE.statuses,\n action: PaymentStrategyAction,\n): PaymentStrategyStatusesState {\n switch (action.type) {\n case PaymentStrategyActionType.InitializeRequested: {\n let initializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(statuses, {\n isInitializing: true,\n initializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.InitializeFailed:\n case PaymentStrategyActionType.InitializeSucceeded:\n return objectMerge(statuses, {\n isInitializing: false,\n initializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.DeinitializeRequested: {\n let deinitializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n deinitializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(statuses, {\n isDeinitializing: true,\n deinitializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.DeinitializeFailed:\n case PaymentStrategyActionType.DeinitializeSucceeded:\n return objectMerge(statuses, {\n isDeinitializing: false,\n deinitializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.ExecuteRequested:\n return objectMerge(statuses, {\n isExecuting: true,\n executeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.ExecuteFailed:\n case PaymentStrategyActionType.ExecuteSucceeded:\n return objectMerge(statuses, {\n isExecuting: false,\n executeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.FinalizeRequested:\n return objectMerge(statuses, {\n isFinalizing: true,\n finalizeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.FinalizeFailed:\n case PaymentStrategyActionType.FinalizeSucceeded:\n return objectMerge(statuses, {\n isFinalizing: false,\n finalizeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.WidgetInteractionStarted:\n return objectMerge(statuses, {\n isWidgetInteracting: true,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n case PaymentStrategyActionType.WidgetInteractionFinished:\n case PaymentStrategyActionType.WidgetInteractionFailed:\n return objectMerge(statuses, {\n isWidgetInteracting: false,\n widgetInteractionMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import PaymentInstrument, { VaultAccessToken } from './instrument';\n\nexport default interface InstrumentState {\n data?: PaymentInstrument[];\n meta?: InstrumentMeta;\n errors: InstrumentErrorState;\n statuses: InstrumentStatusState;\n}\n\nexport interface InstrumentErrorState {\n deleteError?: Error;\n failedInstrument?: string;\n loadError?: Error;\n vaultError?: Error;\n}\n\nexport interface InstrumentStatusState {\n isDeleting?: boolean;\n isLoading?: boolean;\n isVaulting?: boolean;\n deletingInstrument?: string;\n}\n\nexport type InstrumentMeta = VaultAccessToken;\n\nexport const DEFAULT_STATE = {\n data: [],\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { AmazonPayRemoteCheckout } from './methods';\n\nexport enum RemoteCheckoutActionType {\n ForgetCheckoutRemoteCustomerRequested = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED',\n ForgetCheckoutRemoteCustomerSucceeded = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED',\n ForgetCheckoutRemoteCustomerFailed = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED',\n\n InitializeRemoteBillingRequested = 'INITIALIZE_REMOTE_BILLING_REQUESTED',\n InitializeRemoteBillingSucceeded = 'INITIALIZE_REMOTE_BILLING_SUCCEEDED',\n InitializeRemoteBillingFailed = 'INITIALIZE_REMOTE_BILLING_FAILED',\n\n InitializeRemoteShippingRequested = 'INITIALIZE_REMOTE_SHIPPING_REQUESTED',\n InitializeRemoteShippingSucceeded = 'INITIALIZE_REMOTE_SHIPPING_SUCCEEDED',\n InitializeRemoteShippingFailed = 'INITIALIZE_REMOTE_SHIPPING_FAILED',\n\n InitializeRemotePaymentRequested = 'INITIALIZE_REMOTE_PAYMENT_REQUESTED',\n InitializeRemotePaymentSucceeded = 'INITIALIZE_REMOTE_PAYMENT_SUCCEEDED',\n InitializeRemotePaymentFailed = 'INITIALIZE_REMOTE_PAYMENT_FAILED',\n\n LoadRemoteSettingsRequested = 'LOAD_REMOTE_SETTINGS_REQUESTED',\n LoadRemoteSettingsSucceeded = 'LOAD_REMOTE_SETTINGS_SUCCEEDED',\n LoadRemoteSettingsFailed = 'LOAD_REMOTE_SETTINGS_FAILED',\n\n SignOutRemoteCustomerRequested = 'SIGN_OUT_REMOTE_CUSTOMER_REQUESTED',\n SignOutRemoteCustomerSucceeded = 'SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED',\n SignOutRemoteCustomerFailed = 'SIGN_OUT_REMOTE_CUSTOMER_FAILED',\n\n UpdateRemoteCheckout = 'UPDATE_REMOTE_CHECKOUT',\n}\n\nexport type RemoteCheckoutAction =\n | ForgetCheckoutRemoteCustomerAction\n | InitializeRemoteBillingAction\n | InitializeRemoteShippingAction\n | InitializeRemotePaymentAction\n | SignOutRemoteCustomerAction\n | LoadRemoteSettingsAction\n | UpdateRemoteCheckoutAction;\n\nexport type ForgetCheckoutRemoteCustomerAction =\n | ForgetCheckoutRemoteCustomerRequestedAction\n | ForgetCheckoutRemoteCustomerSucceededAction\n | ForgetCheckoutRemoteCustomerFailedAction;\n\nexport interface ForgetCheckoutRemoteCustomerRequestedAction extends Action {\n type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerRequested;\n}\n\nexport interface ForgetCheckoutRemoteCustomerSucceededAction extends Action {\n type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerSucceeded;\n}\n\nexport interface ForgetCheckoutRemoteCustomerFailedAction extends Action {\n type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerFailed;\n}\n\nexport type InitializeRemoteBillingAction =\n | InitializeRemoteBillingSucceededAction\n | InitializeRemoteBillingFailedAction\n | InitializeRemoteBillingRequestedAction;\n\nexport interface InitializeRemoteBillingSucceededAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteBillingSucceeded;\n}\n\nexport interface InitializeRemoteBillingFailedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteBillingFailed;\n}\n\nexport interface InitializeRemoteBillingRequestedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteBillingRequested;\n}\n\nexport type InitializeRemoteShippingAction =\n | InitializeRemoteShippingSucceededAction\n | InitializeRemoteShippingFailedAction\n | InitializeRemoteShippingRequestedAction;\n\nexport interface InitializeRemoteShippingSucceededAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteShippingSucceeded;\n}\n\nexport interface InitializeRemoteShippingFailedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteShippingFailed;\n}\n\nexport interface InitializeRemoteShippingRequestedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteShippingRequested;\n}\n\nexport type InitializeRemotePaymentAction =\n | InitializeRemotePaymentSucceededAction\n | InitializeRemotePaymentFailedAction\n | InitializeRemotePaymentRequestedAction;\n\nexport interface InitializeRemotePaymentSucceededAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemotePaymentSucceeded;\n}\n\nexport interface InitializeRemotePaymentFailedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemotePaymentFailed;\n}\n\nexport interface InitializeRemotePaymentRequestedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemotePaymentRequested;\n}\n\nexport type SignOutRemoteCustomerAction =\n | SignOutRemoteCustomerSucceededAction\n | SignOutRemoteCustomerFailedAction\n | SignOutRemoteCustomerRequestedAction;\n\nexport interface SignOutRemoteCustomerSucceededAction extends Action {\n type: RemoteCheckoutActionType.SignOutRemoteCustomerSucceeded;\n}\n\nexport interface SignOutRemoteCustomerFailedAction extends Action {\n type: RemoteCheckoutActionType.SignOutRemoteCustomerFailed;\n}\n\nexport interface SignOutRemoteCustomerRequestedAction extends Action {\n type: RemoteCheckoutActionType.SignOutRemoteCustomerRequested;\n}\n\nexport type LoadRemoteSettingsAction =\n | LoadRemoteSettingsSucceededAction\n | LoadRemoteSettingsRequestedAction\n | LoadRemoteSettingsFailedAction;\n\nexport interface LoadRemoteSettingsSucceededAction extends Action {\n type: RemoteCheckoutActionType.LoadRemoteSettingsSucceeded;\n}\n\nexport interface LoadRemoteSettingsRequestedAction extends Action {\n type: RemoteCheckoutActionType.LoadRemoteSettingsRequested;\n}\n\nexport interface LoadRemoteSettingsFailedAction extends Action {\n type: RemoteCheckoutActionType.LoadRemoteSettingsFailed;\n}\n\nexport interface UpdateRemoteCheckoutAction extends Action {\n type: RemoteCheckoutActionType.UpdateRemoteCheckout;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../../common/error';\nimport { arrayReplace, objectMerge, objectSet } from '../../common/utility';\n\nimport PaymentInstrument from './instrument';\nimport { InstrumentAction, InstrumentActionType } from './instrument-actions';\nimport InstrumentState, {\n DEFAULT_STATE,\n InstrumentErrorState,\n InstrumentMeta,\n InstrumentStatusState,\n} from './instrument-state';\n\nexport default function instrumentReducer(\n state: InstrumentState = DEFAULT_STATE,\n action: Action,\n): InstrumentState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n meta: metaReducer,\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentInstrument[] = DEFAULT_STATE.data,\n action: InstrumentAction,\n): PaymentInstrument[] {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsSucceeded:\n return arrayReplace(data, (action.payload && action.payload.vaultedInstruments) || []);\n\n default:\n return data;\n }\n}\n\nfunction metaReducer(\n meta: InstrumentMeta | undefined,\n action: InstrumentAction,\n): InstrumentMeta | undefined {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsSucceeded:\n case InstrumentActionType.DeleteInstrumentSucceeded:\n return objectMerge(meta, action.meta);\n\n default:\n return meta;\n }\n}\n\nfunction errorsReducer(\n errors: InstrumentErrorState = DEFAULT_STATE.errors,\n action: InstrumentAction,\n): InstrumentErrorState {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsRequested:\n case InstrumentActionType.LoadInstrumentsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case InstrumentActionType.DeleteInstrumentRequested:\n case InstrumentActionType.DeleteInstrumentSucceeded:\n return objectMerge(errors, {\n deleteError: undefined,\n failedInstrument: undefined,\n });\n\n case InstrumentActionType.LoadInstrumentsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case InstrumentActionType.DeleteInstrumentFailed:\n return objectMerge(errors, {\n deleteError: action.payload,\n failedInstrument: action.meta.instrumentId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: InstrumentStatusState = DEFAULT_STATE.statuses,\n action: InstrumentAction,\n): InstrumentStatusState {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case InstrumentActionType.DeleteInstrumentRequested:\n return objectMerge(statuses, {\n isDeleting: true,\n deletingInstrument: action.meta.instrumentId,\n });\n\n case InstrumentActionType.LoadInstrumentsSucceeded:\n case InstrumentActionType.LoadInstrumentsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case InstrumentActionType.DeleteInstrumentSucceeded:\n case InstrumentActionType.DeleteInstrumentFailed:\n return objectMerge(statuses, {\n isDeleting: false,\n deletingInstrument: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { AmazonPayRemoteCheckout } from './methods';\n\nexport default interface RemoteCheckoutState {\n data: RemoteCheckoutStateData;\n}\n\nexport interface RemoteCheckoutStateData {\n amazon?: AmazonPayRemoteCheckout;\n}\n\nexport const DEFAULT_STATE: RemoteCheckoutState = {\n data: {},\n};\n","import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport RemoteCheckout from './remote-checkout';\nimport { RemoteCheckoutAction, RemoteCheckoutActionType } from './remote-checkout-actions';\nimport RemoteCheckoutState, {\n DEFAULT_STATE,\n RemoteCheckoutStateData,\n} from './remote-checkout-state';\n\nexport default function remoteCheckoutReducer(\n state: RemoteCheckoutState = DEFAULT_STATE,\n action: RemoteCheckoutAction,\n): RemoteCheckoutState {\n if (!action.meta || !action.meta.methodId) {\n return state;\n }\n\n const reducer = combineReducers({\n data: combineReducers({\n [action.meta.methodId]: dataReducer,\n }),\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(data: RemoteCheckout, action: RemoteCheckoutAction): RemoteCheckout {\n switch (action.type) {\n case RemoteCheckoutActionType.InitializeRemoteBillingSucceeded:\n return objectSet(data, 'billing' as any, action.payload && action.payload.billing);\n\n case RemoteCheckoutActionType.InitializeRemoteShippingSucceeded:\n return objectSet(data, 'shipping' as any, action.payload && action.payload.shipping);\n\n case RemoteCheckoutActionType.LoadRemoteSettingsSucceeded:\n return objectSet(data, 'settings', action.payload);\n\n case RemoteCheckoutActionType.UpdateRemoteCheckout:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n","import Consignment from './consignment';\n\nexport default interface ConsignmentState {\n data?: Consignment[];\n errors: ConsignmentErrorsState;\n statuses: ConsignmentStatusesState;\n}\n\nexport interface ConsignmentErrorsState {\n loadError?: Error;\n loadShippingOptionsError?: Error;\n createError?: Error;\n updateError: { [key: string]: Error | undefined };\n deleteError: { [key: string]: Error | undefined };\n updateShippingOptionError: { [key: string]: Error | undefined };\n}\n\nexport interface ConsignmentStatusesState {\n isLoading?: boolean;\n isLoadingShippingOptions?: boolean;\n isCreating?: boolean;\n isUpdating: { [key: string]: boolean };\n isDeleting: { [key: string]: boolean };\n isUpdatingShippingOption: { [key: string]: boolean };\n}\n\nexport const DEFAULT_STATE: ConsignmentState = {\n errors: {\n updateShippingOptionError: {},\n updateError: {},\n deleteError: {},\n },\n statuses: {\n isUpdating: {},\n isUpdatingShippingOption: {},\n isDeleting: {},\n },\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { PickupOptionMeta, PickupOptionResult } from './pickup-option';\n\nexport enum PickupOptionActionType {\n LoadPickupOptionsRequested = 'LOAD_PICKUP_OPTIONS_REQUESTED',\n LoadPickupOptionsSucceeded = 'LOAD_PICKUP_OPTIONS_SUCCEEDED',\n LoadPickupOptionsFailed = 'LOAD_PICKUP_OPTIONS_FAILED',\n}\n\nexport type LoadPickupOptionsAction =\n | PickupOptionRequestedAction\n | LoadPickupOptionsSucceededAction\n | LoadPickupOptionsFailedAction;\n\nexport interface PickupOptionRequestedAction extends Action {\n type: PickupOptionActionType.LoadPickupOptionsRequested;\n}\n\nexport interface LoadPickupOptionsSucceededAction\n extends Action {\n type: PickupOptionActionType.LoadPickupOptionsSucceeded;\n}\n\nexport interface LoadPickupOptionsFailedAction extends Action {\n type: PickupOptionActionType.LoadPickupOptionsFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectMerge, objectSet } from '../common/utility';\nimport { CouponAction, CouponActionType } from '../coupon';\nimport { CustomerAction, CustomerActionType } from '../customer';\n\nimport Consignment from './consignment';\nimport { ConsignmentAction, ConsignmentActionType } from './consignment-actions';\nimport ConsignmentState, {\n ConsignmentErrorsState,\n ConsignmentStatusesState,\n DEFAULT_STATE,\n} from './consignment-state';\n\nexport default function consignmentReducer(\n state: ConsignmentState = DEFAULT_STATE,\n action: Action,\n): ConsignmentState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Consignment[] | undefined,\n action: ConsignmentAction | CheckoutAction | CouponAction | CustomerAction,\n): Consignment[] | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n return arrayReplace(data, action.payload && action.payload.consignments);\n\n case CustomerActionType.SignOutCustomerSucceeded:\n return arrayReplace(data, []);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: ConsignmentErrorsState = DEFAULT_STATE.errors,\n action: ConsignmentAction | CheckoutAction,\n): ConsignmentErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case ConsignmentActionType.LoadShippingOptionsRequested:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n case ConsignmentActionType.LoadShippingOptionsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case ConsignmentActionType.CreateConsignmentsRequested:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n return objectSet(errors, 'createError', undefined);\n\n case ConsignmentActionType.CreateConsignmentsFailed:\n return objectSet(errors, 'createError', action.payload);\n\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.UpdateConsignmentRequested:\n if (action.meta) {\n return objectMerge(errors, {\n updateError: {\n [action.meta.id]: undefined,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.UpdateConsignmentFailed:\n if (action.meta) {\n return objectMerge(errors, {\n updateError: {\n [action.meta.id]: action.payload,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentRequested:\n if (action.meta) {\n return objectMerge(errors, {\n deleteError: {\n [action.meta.id]: undefined,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.DeleteConsignmentFailed:\n if (action.meta) {\n return objectMerge(errors, {\n deleteError: {\n [action.meta.id]: action.payload,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.UpdateShippingOptionRequested:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n if (action.meta) {\n return objectMerge(errors, {\n updateShippingOptionError: {\n [action.meta.id]: undefined,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.UpdateShippingOptionFailed:\n if (action.meta) {\n return objectMerge(errors, {\n updateShippingOptionError: {\n [action.meta.id]: action.payload,\n },\n });\n }\n\n return errors;\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ConsignmentStatusesState = DEFAULT_STATE.statuses,\n action: ConsignmentAction | CheckoutAction,\n): ConsignmentStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ConsignmentActionType.LoadShippingOptionsRequested:\n return objectSet(statuses, 'isLoadingShippingOptions', true);\n\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case ConsignmentActionType.LoadShippingOptionsFailed:\n return objectSet(statuses, 'isLoadingShippingOptions', false);\n\n case ConsignmentActionType.CreateConsignmentsRequested:\n return objectSet(statuses, 'isCreating', true);\n\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.CreateConsignmentsFailed:\n return objectSet(statuses, 'isCreating', false);\n\n case ConsignmentActionType.UpdateConsignmentRequested:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdating: {\n [action.meta.id]: true,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.UpdateConsignmentFailed:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdating: {\n [action.meta.id]: false,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.DeleteConsignmentRequested:\n if (action.meta) {\n return objectMerge(statuses, {\n isDeleting: {\n [action.meta.id]: true,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentFailed:\n if (action.meta) {\n return objectMerge(statuses, {\n isDeleting: {\n [action.meta.id]: false,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.UpdateShippingOptionRequested:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdatingShippingOption: {\n [action.meta.id]: true,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case ConsignmentActionType.UpdateShippingOptionFailed:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdatingShippingOption: {\n [action.meta.id]: false,\n },\n });\n }\n\n return statuses;\n\n default:\n return statuses;\n }\n}\n","/**\n * Takes a nested object and flattens it.\n */\nexport default function objectFlatten(\n object: { [key: string]: any },\n parent?: string,\n): { [key: string]: any } {\n const flattened: { [key: string]: any } = {};\n\n Object.keys(object).forEach((key: string) => {\n const value = object[key];\n const keyString = parent ? `${parent}.${key}` : key;\n\n if (typeof value === 'object') {\n Object.assign(flattened, objectFlatten(value, keyString));\n } else {\n flattened[keyString] = value;\n }\n });\n\n return flattened;\n}\n","export default function objectWithSortedKeys(object: { [key: string]: any }) {\n const keys = Object.keys(object);\n const sortedKeys = keys.sort();\n\n const sortedArray = sortedKeys.reduce(\n (previous, current) => ({\n ...previous,\n [current]: object[current],\n }),\n {},\n );\n\n return sortedArray;\n}\n","import { PickupOptionQueryMap } from './pickup-option';\n\nexport default interface PickupOptionState {\n data?: PickupOptionQueryMap;\n errors: PickupOptionErrorsState;\n statuses: PickupOptionStatusesState;\n}\n\nexport interface PickupOptionErrorsState {\n loadError?: Error;\n}\n\nexport interface PickupOptionStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: PickupOptionState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Country } from '../geography';\n\nexport enum ShippingCountryActionType {\n LoadShippingCountriesRequested = 'LOAD_SHIPPING_COUNTRIES_REQUESTED',\n LoadShippingCountriesSucceeded = 'LOAD_SHIPPING_COUNTRIES_SUCCEEDED',\n LoadShippingCountriesFailed = 'LOAD_SHIPPING_COUNTRIES_FAILED',\n}\n\nexport type LoadShippingCountriesAction =\n | LoadShippingCountriesRequestedAction\n | LoadShippingCountriesSucceededAction\n | LoadShippingCountriesFailedAction;\n\nexport interface LoadShippingCountriesRequestedAction extends Action {\n type: ShippingCountryActionType.LoadShippingCountriesRequested;\n}\n\nexport interface LoadShippingCountriesSucceededAction extends Action {\n type: ShippingCountryActionType.LoadShippingCountriesSucceeded;\n}\n\nexport interface LoadShippingCountriesFailedAction extends Action {\n type: ShippingCountryActionType.LoadShippingCountriesFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectFlatten, objectSet, objectWithSortedKeys } from '../common/utility';\n\nimport { PickupOptionQueryMap } from './pickup-option';\nimport { LoadPickupOptionsAction, PickupOptionActionType } from './pickup-option-actions';\nimport PickupOptionState, {\n DEFAULT_STATE,\n PickupOptionErrorsState,\n PickupOptionStatusesState,\n} from './pickup-option-state';\n\nexport default function pickupOptionReducer(\n state: PickupOptionState = DEFAULT_STATE,\n action: Action,\n): PickupOptionState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PickupOptionQueryMap | undefined,\n action: LoadPickupOptionsAction,\n): PickupOptionQueryMap | undefined {\n switch (action.type) {\n case PickupOptionActionType.LoadPickupOptionsSucceeded:\n if (action.meta) {\n const optionQuery = {\n consignmentId: action.meta.consignmentId,\n searchArea: action.meta.searchArea,\n };\n const flattenedMeta = objectFlatten(optionQuery);\n const sortedflattenedMeta = objectWithSortedKeys(flattenedMeta);\n const keyString = btoa(`${JSON.stringify(sortedflattenedMeta)}`);\n\n return objectSet(data, keyString, action.payload);\n }\n\n break;\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(errors: PickupOptionErrorsState = DEFAULT_STATE.errors, action: Action) {\n switch (action.type) {\n case PickupOptionActionType.LoadPickupOptionsRequested:\n case PickupOptionActionType.LoadPickupOptionsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case PickupOptionActionType.LoadPickupOptionsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: PickupOptionStatusesState = DEFAULT_STATE.statuses,\n action: Action,\n) {\n switch (action.type) {\n case PickupOptionActionType.LoadPickupOptionsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case PickupOptionActionType.LoadPickupOptionsSucceeded:\n case PickupOptionActionType.LoadPickupOptionsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { Country } from '../geography';\n\nexport default interface ShippingCountryState {\n data?: Country[];\n errors: ShippingCountryErrorsState;\n statuses: ShippingCountryStatusesState;\n}\n\nexport interface ShippingCountryErrorsState {\n loadError?: Error;\n}\n\nexport interface ShippingCountryStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ShippingCountryState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nexport enum ShippingStrategyActionType {\n UpdateAddressFailed = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED',\n UpdateAddressRequested = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED',\n UpdateAddressSucceeded = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED',\n SelectOptionFailed = 'SHIPPING_STRATEGY_SELECT_OPTION_FAILED',\n SelectOptionRequested = 'SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED',\n SelectOptionSucceeded = 'SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED',\n InitializeFailed = 'SHIPPING_STRATEGY_INITIALIZE_FAILED',\n InitializeRequested = 'SHIPPING_STRATEGY_INITIALIZE_REQUESTED',\n InitializeSucceeded = 'SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED',\n DeinitializeFailed = 'SHIPPING_STRATEGY_DEINITIALIZE_FAILED',\n DeinitializeRequested = 'SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED',\n DeinitializeSucceeded = 'SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED',\n WidgetInteractionStarted = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED',\n WidgetInteractionFinished = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED',\n WidgetInteractionFailed = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type ShippingStrategyAction =\n | ShippingStrategyUpdateAddressAction\n | ShippingStrategySelectOptionAction\n | ShippingStrategyInitializeAction\n | ShippingStrategyDeinitializeAction\n | ShippingStrategyWidgetAction;\n\nexport type ShippingStrategyUpdateAddressAction =\n | UpdateAddressRequestedAction\n | UpdateAddressSucceededAction\n | UpdateAddressFailedAction;\n\nexport type ShippingStrategySelectOptionAction =\n | SelectOptionRequestedAction\n | SelectOptionSucceededAction\n | SelectOptionFailedAction;\n\nexport type ShippingStrategyInitializeAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction;\n\nexport type ShippingStrategyDeinitializeAction =\n | DeinitializeRequestedAction\n | DeinitializeSucceededAction\n | DeinitializeFailedAction;\n\nexport type ShippingStrategyWidgetAction =\n | WidgetInteractionStartedAction\n | WidgetInteractionFinishedAction\n | WidgetInteractionFailedAction;\n\nexport interface UpdateAddressRequestedAction extends Action {\n type: ShippingStrategyActionType.UpdateAddressRequested;\n}\n\nexport interface UpdateAddressSucceededAction extends Action {\n type: ShippingStrategyActionType.UpdateAddressSucceeded;\n}\n\nexport interface UpdateAddressFailedAction extends Action {\n type: ShippingStrategyActionType.UpdateAddressFailed;\n}\n\nexport interface SelectOptionRequestedAction extends Action {\n type: ShippingStrategyActionType.SelectOptionRequested;\n}\n\nexport interface SelectOptionSucceededAction extends Action {\n type: ShippingStrategyActionType.SelectOptionSucceeded;\n}\n\nexport interface SelectOptionFailedAction extends Action {\n type: ShippingStrategyActionType.SelectOptionFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n type: ShippingStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: ShippingStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: ShippingStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n type: ShippingStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n type: ShippingStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action {\n type: ShippingStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n type: ShippingStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n type: ShippingStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action {\n type: ShippingStrategyActionType.WidgetInteractionFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { Country } from '../geography';\n\nimport { LoadShippingCountriesAction, ShippingCountryActionType } from './shipping-country-actions';\nimport ShippingCountryState, {\n DEFAULT_STATE,\n ShippingCountryErrorsState,\n ShippingCountryStatusesState,\n} from './shipping-country-state';\n\nexport default function shippingCountryReducer(\n state: ShippingCountryState = DEFAULT_STATE,\n action: Action,\n): ShippingCountryState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Country[] | undefined,\n action: LoadShippingCountriesAction,\n): Country[] | undefined {\n switch (action.type) {\n case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n return arrayReplace(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: ShippingCountryErrorsState = DEFAULT_STATE.errors,\n action: LoadShippingCountriesAction,\n): ShippingCountryErrorsState {\n switch (action.type) {\n case ShippingCountryActionType.LoadShippingCountriesRequested:\n case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case ShippingCountryActionType.LoadShippingCountriesFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ShippingCountryStatusesState = DEFAULT_STATE.statuses,\n action: LoadShippingCountriesAction,\n): ShippingCountryStatusesState {\n switch (action.type) {\n case ShippingCountryActionType.LoadShippingCountriesRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n case ShippingCountryActionType.LoadShippingCountriesFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","export default interface ShippingStrategyState {\n data: ShippingStrategyDataState;\n errors: ShippingStrategyErrorsState;\n statuses: ShippingStrategyStatusesState;\n}\n\nexport interface ShippingStrategyDataState {\n [key: string]: {\n isInitialized: boolean;\n };\n}\n\nexport interface ShippingStrategyErrorsState {\n deinitializeError?: Error;\n deinitializeMethodId?: string;\n initializeError?: Error;\n initializeMethodId?: string;\n updateAddressError?: Error;\n updateAddressMethodId?: string;\n selectOptionError?: Error;\n selectOptionMethodId?: string;\n widgetInteractionError?: Error;\n widgetInteractionMethodId?: string;\n}\n\nexport interface ShippingStrategyStatusesState {\n deinitializeMethodId?: string;\n initializeMethodId?: string;\n isDeinitializing?: boolean;\n isInitializing?: boolean;\n isUpdatingAddress?: boolean;\n isSelectingOption?: boolean;\n updateAddressMethodId?: string;\n selectOptionMethodId?: string;\n isWidgetInteracting?: boolean;\n widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: ShippingStrategyState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { SignInEmail } from './signin-email';\n\nexport enum SignInEmailActionType {\n SendSignInEmailRequested = 'SEND_SIGNIN_EMAIL_REQUESTED',\n SendSignInEmailSucceeded = 'SEND_SIGNIN_EMAIL_SUCCEEDED',\n SendSignInEmailFailed = 'SEND_SIGNIN_EMAIL_FAILED',\n}\nexport type SendSignInEmailAction =\n | SendSignInEmailRequestedAction\n | SendSignInEmailSucceededAction\n | SendSignInEmailFailedAction;\n\nexport interface SendSignInEmailRequestedAction extends Action {\n type: SignInEmailActionType.SendSignInEmailRequested;\n}\n\nexport interface SendSignInEmailSucceededAction extends Action {\n type: SignInEmailActionType.SendSignInEmailSucceeded;\n}\n\nexport interface SendSignInEmailFailedAction extends Action {\n type: SignInEmailActionType.SendSignInEmailFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { ShippingStrategyAction, ShippingStrategyActionType } from './shipping-strategy-actions';\nimport ShippingStrategyState, {\n DEFAULT_STATE,\n ShippingStrategyDataState,\n ShippingStrategyErrorsState,\n ShippingStrategyStatusesState,\n} from './shipping-strategy-state';\n\nexport default function shippingStrategyReducer(\n state: ShippingStrategyState = DEFAULT_STATE,\n action: Action,\n): ShippingStrategyState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: ShippingStrategyDataState = DEFAULT_STATE.data,\n action: ShippingStrategyAction,\n): ShippingStrategyDataState {\n switch (action.type) {\n case ShippingStrategyActionType.InitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: true,\n },\n });\n\n case ShippingStrategyActionType.DeinitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: false,\n },\n });\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: ShippingStrategyErrorsState = DEFAULT_STATE.errors,\n action: ShippingStrategyAction,\n): ShippingStrategyErrorsState {\n switch (action.type) {\n case ShippingStrategyActionType.InitializeRequested:\n case ShippingStrategyActionType.InitializeSucceeded:\n return objectMerge(errors, {\n initializeError: undefined,\n initializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.InitializeFailed:\n return objectMerge(errors, {\n initializeError: action.payload,\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.DeinitializeRequested:\n case ShippingStrategyActionType.DeinitializeSucceeded:\n return objectMerge(errors, {\n deinitializeError: undefined,\n deinitializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.DeinitializeFailed:\n return objectMerge(errors, {\n deinitializeError: action.payload,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.UpdateAddressRequested:\n case ShippingStrategyActionType.UpdateAddressSucceeded:\n return objectMerge(errors, {\n updateAddressError: undefined,\n updateAddressMethodId: undefined,\n });\n\n case ShippingStrategyActionType.UpdateAddressFailed:\n return objectMerge(errors, {\n updateAddressError: action.payload,\n updateAddressMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.SelectOptionRequested:\n case ShippingStrategyActionType.SelectOptionSucceeded:\n return objectMerge(errors, {\n selectOptionError: undefined,\n selectOptionMethodId: undefined,\n });\n\n case ShippingStrategyActionType.SelectOptionFailed:\n return objectMerge(errors, {\n selectOptionError: action.payload,\n selectOptionMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.WidgetInteractionStarted:\n case ShippingStrategyActionType.WidgetInteractionFinished:\n return objectMerge(errors, {\n widgetInteractionError: undefined,\n widgetInteractionMethodId: undefined,\n });\n\n case ShippingStrategyActionType.WidgetInteractionFailed:\n return objectMerge(errors, {\n widgetInteractionError: action.payload,\n widgetInteractionMethodId: action.meta && action.meta.methodId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ShippingStrategyStatusesState = DEFAULT_STATE.statuses,\n action: ShippingStrategyAction,\n): ShippingStrategyStatusesState {\n switch (action.type) {\n case ShippingStrategyActionType.InitializeRequested:\n return objectMerge(statuses, {\n isInitializing: true,\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.InitializeFailed:\n case ShippingStrategyActionType.InitializeSucceeded:\n return objectMerge(statuses, {\n isInitializing: false,\n initializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.DeinitializeRequested:\n return objectMerge(statuses, {\n isDeinitializing: true,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.DeinitializeFailed:\n case ShippingStrategyActionType.DeinitializeSucceeded:\n return objectMerge(statuses, {\n isDeinitializing: false,\n deinitializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.UpdateAddressRequested:\n return objectMerge(statuses, {\n isUpdatingAddress: true,\n updateAddressMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.UpdateAddressFailed:\n case ShippingStrategyActionType.UpdateAddressSucceeded:\n return objectMerge(statuses, {\n isUpdatingAddress: false,\n updateAddressMethodId: undefined,\n });\n\n case ShippingStrategyActionType.SelectOptionRequested:\n return objectMerge(statuses, {\n isSelectingOption: true,\n selectOptionMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.SelectOptionFailed:\n case ShippingStrategyActionType.SelectOptionSucceeded:\n return objectMerge(statuses, {\n isSelectingOption: false,\n selectOptionMethodId: undefined,\n });\n\n case ShippingStrategyActionType.WidgetInteractionStarted:\n return objectMerge(statuses, {\n isWidgetInteracting: true,\n widgetInteractionMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.WidgetInteractionFinished:\n case ShippingStrategyActionType.WidgetInteractionFailed:\n return objectMerge(statuses, {\n isWidgetInteracting: false,\n widgetInteractionMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { SignInEmail } from './signin-email';\n\nexport default interface SignInEmailState {\n data?: SignInEmail;\n errors: SignInEmailErrorsState;\n statuses: SignInEmailStatusesState;\n}\n\nexport interface SignInEmailErrorsState {\n sendError?: Error;\n}\n\nexport interface SignInEmailStatusesState {\n isSending?: boolean;\n}\n\nexport const DEFAULT_STATE: SignInEmailState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum StoreCreditActionType {\n ApplyStoreCreditRequested = 'APPLY_STORE_CREDIT_REQUESTED',\n ApplyStoreCreditSucceeded = 'APPLY_STORE_CREDIT_SUCCEEDED',\n ApplyStoreCreditFailed = 'APPLY_STORE_CREDIT_FAILED',\n}\n\nexport type StoreCreditAction = ApplyStoreCreditAction;\n\nexport type ApplyStoreCreditAction =\n | ApplyStoreCreditRequestedAction\n | ApplyStoreCreditSucceededAction\n | ApplyStoreCreditFailedAction;\n\nexport interface ApplyStoreCreditRequestedAction extends Action {\n type: StoreCreditActionType.ApplyStoreCreditRequested;\n}\n\nexport interface ApplyStoreCreditSucceededAction extends Action {\n type: StoreCreditActionType.ApplyStoreCreditSucceeded;\n}\n\nexport interface ApplyStoreCreditFailedAction\n extends Action> {\n type: StoreCreditActionType.ApplyStoreCreditFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { SignInEmail } from './signin-email';\nimport { SendSignInEmailAction, SignInEmailActionType } from './signin-email-actions';\nimport SignInEmailState, {\n DEFAULT_STATE,\n SignInEmailErrorsState,\n SignInEmailStatusesState,\n} from './signin-email-state';\n\nexport default function signInEmailReducer(\n state: SignInEmailState = DEFAULT_STATE,\n action: Action,\n): SignInEmailState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: SignInEmail | undefined,\n action: SendSignInEmailAction,\n): SignInEmail | undefined {\n switch (action.type) {\n case SignInEmailActionType.SendSignInEmailSucceeded:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: SignInEmailErrorsState = DEFAULT_STATE.errors,\n action: SendSignInEmailAction,\n): SignInEmailErrorsState {\n switch (action.type) {\n case SignInEmailActionType.SendSignInEmailRequested:\n case SignInEmailActionType.SendSignInEmailSucceeded:\n return objectSet(errors, 'sendError', undefined);\n\n case SignInEmailActionType.SendSignInEmailFailed:\n return objectSet(errors, 'sendError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: SignInEmailStatusesState = DEFAULT_STATE.statuses,\n action: SendSignInEmailAction,\n): SignInEmailStatusesState {\n switch (action.type) {\n case SignInEmailActionType.SendSignInEmailRequested:\n return objectSet(statuses, 'isSending', true);\n\n case SignInEmailActionType.SendSignInEmailFailed:\n case SignInEmailActionType.SendSignInEmailSucceeded:\n return objectSet(statuses, 'isSending', false);\n\n default:\n return statuses;\n }\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\n\nimport { StoreCreditAction, StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditState, {\n StoreCreditErrorsState,\n StoreCreditStatusesState,\n} from './store-credit-state';\n\nconst DEFAULT_STATE: StoreCreditState = {\n errors: {},\n statuses: {},\n};\n\nexport default function storeCreditReducer(\n state: StoreCreditState = DEFAULT_STATE,\n action: Action,\n): StoreCreditState {\n const reducer = combineReducers({\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction errorsReducer(\n errors: StoreCreditErrorsState = DEFAULT_STATE.errors,\n action: StoreCreditAction,\n): StoreCreditErrorsState {\n switch (action.type) {\n case StoreCreditActionType.ApplyStoreCreditRequested:\n case StoreCreditActionType.ApplyStoreCreditSucceeded:\n return objectSet(errors, 'applyError', undefined);\n\n case StoreCreditActionType.ApplyStoreCreditFailed:\n return objectSet(errors, 'applyError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: StoreCreditStatusesState = DEFAULT_STATE.statuses,\n action: StoreCreditAction,\n): StoreCreditStatusesState {\n switch (action.type) {\n case StoreCreditActionType.ApplyStoreCreditRequested:\n return objectSet(statuses, 'isApplying', true);\n\n case StoreCreditActionType.ApplyStoreCreditSucceeded:\n case StoreCreditActionType.ApplyStoreCreditFailed:\n return objectSet(statuses, 'isApplying', false);\n\n default:\n return statuses;\n }\n}\n","export default interface SubscriptionsState {\n errors: SubscriptionsErrorsState;\n statuses: SubscriptionsStatusesState;\n}\n\nexport interface SubscriptionsErrorsState {\n updateError?: Error;\n}\n\nexport interface SubscriptionsStatusesState {\n isUpdating?: boolean;\n}\n\nexport const DEFAULT_STATE: SubscriptionsState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nexport enum SpamProtectionActionType {\n InitializeFailed = 'SPAM_PROTECTION_INITIALIZE_FAILED',\n InitializeSucceeded = 'SPAM_PROTECTION_INITIALIZE_SUCCEEDED',\n InitializeRequested = 'SPAM_PROTECTION_INITIALIZE_REQUESTED',\n VerifyCheckoutRequested = 'SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED',\n VerifyCheckoutSucceeded = 'SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED',\n VerifyCheckoutFailed = 'SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED',\n ExecuteRequested = 'SPAM_PROTECTION_EXECUTE_REQUESTED',\n ExecuteSucceeded = 'SPAM_PROTECTION_EXECUTE_SUCCEEDED',\n ExecuteFailed = 'SPAM_PROTECTION_EXECUTE_FAILED',\n}\n\nexport type SpamProtectionAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction\n | ExecuteRequestedAction\n | ExecuteSucceededAction\n | ExecuteFailedAction\n | CheckoutVerifyRequestedAction\n | CheckoutVerifyFailedAction\n | CheckoutVerifySucceededAction;\n\nexport interface InitializeRequestedAction extends Action {\n type: SpamProtectionActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: SpamProtectionActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: SpamProtectionActionType.InitializeFailed;\n}\n\nexport interface ExecuteRequestedAction extends Action {\n type: SpamProtectionActionType.ExecuteRequested;\n}\n\nexport interface ExecuteSucceededAction extends Action<{ token: string }> {\n type: SpamProtectionActionType.ExecuteSucceeded;\n}\n\nexport interface ExecuteFailedAction extends Action {\n type: SpamProtectionActionType.ExecuteFailed;\n}\n\nexport interface CheckoutVerifyRequestedAction extends Action {\n type: SpamProtectionActionType.VerifyCheckoutRequested;\n}\n\nexport interface CheckoutVerifyFailedAction extends Action {\n type: SpamProtectionActionType.VerifyCheckoutFailed;\n}\n\nexport interface CheckoutVerifySucceededAction extends Action {\n type: SpamProtectionActionType.VerifyCheckoutSucceeded;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\nimport { SubscriptionsActionType, UpdateSubscriptionsAction } from '../subscription';\n\nimport SubscriptionsState, {\n DEFAULT_STATE,\n SubscriptionsErrorsState,\n SubscriptionsStatusesState,\n} from './subscriptions-state';\n\nexport default function subscriptionsReducer(\n state: SubscriptionsState = DEFAULT_STATE,\n action: Action,\n): SubscriptionsState {\n const reducer = combineReducers({\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction errorsReducer(\n errors: SubscriptionsErrorsState = DEFAULT_STATE.errors,\n action: UpdateSubscriptionsAction,\n): SubscriptionsErrorsState {\n switch (action.type) {\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n return objectSet(errors, 'updateError', undefined);\n\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n return objectSet(errors, 'updateError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: SubscriptionsStatusesState = DEFAULT_STATE.statuses,\n action: UpdateSubscriptionsAction,\n): SubscriptionsStatusesState {\n switch (action.type) {\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n return objectSet(statuses, 'isUpdating', true);\n\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n return objectSet(statuses, 'isUpdating', false);\n\n default:\n return statuses;\n }\n}\n","import { Omit } from '../common/types';\n\nimport Checkout from './checkout';\n\nexport default interface CheckoutState {\n data?: CheckoutDataState;\n errors: CheckoutErrorsState;\n statuses: CheckoutStatusesState;\n}\n\nexport type CheckoutDataState = Omit<\n Checkout,\n 'billingAddress' | 'cart' | 'consignments' | 'coupons' | 'giftCertificates'\n>;\n\nexport interface CheckoutErrorsState {\n loadError?: Error;\n updateError?: Error;\n}\n\nexport interface CheckoutStatusesState {\n isExecutingSpamCheck?: boolean;\n isLoading?: boolean;\n isUpdating?: boolean;\n}\n\nexport const DEFAULT_STATE: CheckoutState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { BillingAddressAction, BillingAddressActionType } from '../billing';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\nimport {\n CouponAction,\n CouponActionType,\n GiftCertificateAction,\n GiftCertificateActionType,\n} from '../coupon';\nimport { OrderAction, OrderActionType } from '../order';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\nimport { SpamProtectionAction, SpamProtectionActionType } from '../spam-protection';\nimport { StoreCreditAction, StoreCreditActionType } from '../store-credit';\n\nimport { CheckoutAction, CheckoutActionType } from './checkout-actions';\nimport CheckoutState, {\n CheckoutDataState,\n CheckoutErrorsState,\n CheckoutStatusesState,\n DEFAULT_STATE,\n} from './checkout-state';\n\nexport default function checkoutReducer(\n state: CheckoutState = DEFAULT_STATE,\n action: Action,\n): CheckoutState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: CheckoutDataState | undefined,\n action:\n | CheckoutAction\n | BillingAddressAction\n | ConsignmentAction\n | CouponAction\n | GiftCertificateAction\n | OrderAction\n | SpamProtectionAction\n | StoreCreditAction,\n): CheckoutDataState | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CheckoutActionType.UpdateCheckoutSucceeded:\n case StoreCreditActionType.ApplyStoreCreditSucceeded:\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n case SpamProtectionActionType.VerifyCheckoutSucceeded:\n return objectMerge(\n data,\n omit(action.payload, [\n 'billingAddress',\n 'cart',\n 'consignments',\n 'customer',\n 'coupons',\n 'giftCertificates',\n ]),\n ) as CheckoutDataState;\n\n case OrderActionType.SubmitOrderSucceeded:\n return objectSet(data, 'orderId', action.payload && action.payload.order.orderId);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: CheckoutErrorsState = DEFAULT_STATE.errors,\n action: CheckoutAction | OrderAction,\n): CheckoutErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case CheckoutActionType.UpdateCheckoutRequested:\n case CheckoutActionType.UpdateCheckoutSucceeded:\n return objectSet(errors, 'updateError', undefined);\n\n case CheckoutActionType.UpdateCheckoutFailed:\n return objectSet(errors, 'updateError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CheckoutStatusesState = DEFAULT_STATE.statuses,\n action: CheckoutAction | OrderAction | SpamProtectionAction,\n): CheckoutStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CheckoutActionType.LoadCheckoutFailed:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(statuses, 'isLoading', false);\n\n case CheckoutActionType.UpdateCheckoutRequested:\n return objectSet(statuses, 'isUpdating', true);\n\n case CheckoutActionType.UpdateCheckoutFailed:\n case CheckoutActionType.UpdateCheckoutSucceeded:\n return objectSet(statuses, 'isUpdating', false);\n\n case SpamProtectionActionType.ExecuteRequested:\n return objectSet(statuses, 'isExecutingSpamCheck', true);\n\n case SpamProtectionActionType.ExecuteFailed:\n case SpamProtectionActionType.ExecuteSucceeded:\n return objectSet(statuses, 'isExecutingSpamCheck', false);\n\n default:\n return statuses;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/memoize\");","import StandardError from './standard-error';\n\nexport enum MissingDataErrorType {\n MissingBillingAddress,\n MissingCart,\n MissingCheckout,\n MissingConsignments,\n MissingCustomer,\n MissingCheckoutConfig,\n MissingOrder,\n MissingOrderConfig,\n MissingOrderId,\n MissingPayment,\n MissingPaymentId,\n MissingPaymentInstrument,\n MissingPaymentMethod,\n MissingPaymentRedirectUrl,\n MissingPaymentStatus,\n MissingPaymentToken,\n MissingShippingAddress,\n}\n\n/**\n * Throw this error when data that is expected to exist is missing. Usually it\n * is due to the fact that certain data has not been retrieved from or saved to\n * the server yet. And such data is required to perform certain actions.\n */\nexport default class MissingDataError extends StandardError {\n constructor(public subtype: MissingDataErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'MissingDataError';\n this.type = 'missing_data';\n }\n}\n\nfunction getErrorMessage(type: MissingDataErrorType): string {\n switch (type) {\n case MissingDataErrorType.MissingBillingAddress:\n return 'Unable to proceed because billing address data is unavailable.';\n\n case MissingDataErrorType.MissingCart:\n return 'Unable to proceed because cart data is unavailable.';\n\n case MissingDataErrorType.MissingConsignments:\n return 'Unable to proceed because consignments data is unavailable.';\n\n case MissingDataErrorType.MissingCheckout:\n return 'Unable to proceed because checkout data is unavailable.';\n\n case MissingDataErrorType.MissingCustomer:\n return 'Unable to proceed because customer data is unavailable.';\n\n case MissingDataErrorType.MissingCheckoutConfig:\n case MissingDataErrorType.MissingOrderConfig:\n return 'Unable to proceed because configuration data is unavailable.';\n\n case MissingDataErrorType.MissingOrder:\n return 'Unable to proceed because order data is unavailable.';\n\n case MissingDataErrorType.MissingOrderId:\n return 'Unable to proceed because order ID is unavailable or not generated yet.';\n\n case MissingDataErrorType.MissingPayment:\n return 'Unable to proceed because payment data is unavailable.';\n\n case MissingDataErrorType.MissingPaymentToken:\n return 'Unable to proceed because the token required to submit a payment is missing.';\n\n case MissingDataErrorType.MissingPaymentMethod:\n return 'Unable to proceed because payment method data is unavailable or not properly configured.';\n\n case MissingDataErrorType.MissingShippingAddress:\n return 'Unable to proceed because shipping address data is unavailable.';\n\n default:\n return 'Unable to proceed because the required data is unavailable.';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"reselect\");","import { createSelector as defaultSelectorCreator } from 'reselect';\n\nimport withMemoizedCombiner from './with-memoized-combiner';\n\n/**\n * This is a decorated version of Reselect's default `createSelector` function.\n * If the return value of the combiner function is a function, it will create a\n * memorized version of that function and return it instead.\n */\nexport default withMemoizedCombiner(defaultSelectorCreator);\n","import { memoize } from '@bigcommerce/memoize';\nimport { createSelector as defaultSelectorCreator } from 'reselect';\n\n/**\n * Decorate selector creators with the ability to memoize the return value of\n * their combiner if it is a function (which effectively works as a partially\n * applied combiner).\n */\nexport default function withMemoizedCombiner(\n creator: T,\n): T {\n return ((...args: any[]) => {\n const combiner = args.pop();\n\n // Reselect's default `createSelector` has many overloads. To avoid having\n // to redefine all of them, we're using `any` to bypass the typechecker.\n return (creator as any)(...args, (...combinerArgs: any[]) => {\n // Although there are many overloads, all of them have the last argument\n // as the combiner.\n const result = combiner(...combinerArgs);\n\n if (typeof result === 'function') {\n return memoize(result);\n }\n\n return result;\n });\n }) as T;\n}\n","export default function guard(value: T, errorFactory?: () => Error): NonNullable {\n if (value === undefined || value === null) {\n throw errorFactory ? errorFactory() : new Error('An unexpected error has occurred.');\n }\n\n return value as NonNullable;\n}\n","import { deepFreeze } from '@bigcommerce/data-store';\n\n// tslint:disable-next-line:ban-types\ntype FunctionProperties = { [K in keyof T]: T[K] extends Function ? T[K] : never };\n\nexport default function createFreezeProxy(target: T): T {\n return createProxy(\n target,\n (target, name) =>\n (...args: any[]) =>\n deepFreeze(target[name].call(target, ...args)),\n );\n}\n\nexport function createFreezeProxies(\n map: TMap,\n): TMap {\n return Object.keys(map).reduce((result, key) => {\n result[key] = createFreezeProxy(map[key]);\n\n return result;\n }, {} as { [key: string]: T }) as TMap;\n}\n\nfunction createProxy(\n target: T,\n trap: (target: FunctionProperties, name: keyof FunctionProperties, proxy: T) => any,\n): T {\n const proxy = Object.create(target);\n\n traversePrototypeOf(target, (prototype) => {\n Object.getOwnPropertyNames(prototype).forEach((name) => {\n if (\n name === 'constructor' ||\n typeof proxy[name] !== 'function' ||\n name.charAt(0) === '_'\n ) {\n return;\n }\n\n proxy[name] = trap(target as FunctionProperties, name as keyof T, proxy);\n });\n });\n\n return proxy;\n}\n\nfunction traversePrototypeOf(target: object, iteratee: (prototype: object) => void): void {\n let prototype = Object.getPrototypeOf(target);\n\n while (prototype) {\n iteratee(prototype);\n\n prototype = Object.getPrototypeOf(prototype);\n }\n}\n","export const HOSTED = 'PAYMENT_TYPE_HOSTED';\nexport const OFFLINE = 'PAYMENT_TYPE_OFFLINE';\n","export const ACKNOWLEDGE = 'ACKNOWLEDGE';\nexport const FINALIZE = 'FINALIZE';\nexport const INITIALIZE = 'INITIALIZE';\n","import PaymentInstrument from './instrument';\n\ninterface SupportedInstruments {\n [key: string]: Pick;\n}\n\nconst supportedInstruments: SupportedInstruments = {\n 'mollie.credit_card': {\n provider: 'mollie',\n method: 'credit_card',\n },\n 'adyenv2.scheme': {\n provider: 'adyenv2',\n method: 'scheme',\n },\n 'adyenv3.scheme': {\n provider: 'adyenv3',\n method: 'scheme',\n },\n 'adyenv2.bcmc': {\n provider: 'adyenv2',\n method: 'bcmc',\n },\n 'adyenv2.ideal': {\n provider: 'adyenv2',\n method: 'ideal',\n },\n 'adyenv2.sepadirectdebit': {\n provider: 'adyenv2',\n method: 'sepadirectdebit',\n },\n 'adyenv2.directEbanking': {\n provider: 'adyenv2',\n method: 'directEbanking',\n },\n 'adyenv2.giropay': {\n provider: 'adyenv2',\n method: 'giropay',\n },\n barclays: {\n provider: 'barclays',\n method: 'credit_card',\n },\n braintree: {\n provider: 'braintree',\n method: 'credit_card',\n },\n braintreepaypal: {\n provider: 'braintree',\n method: 'paypal',\n },\n braintreeach: {\n provider: 'braintree',\n method: 'ach',\n },\n authorizenet: {\n provider: 'authorizenet',\n method: 'credit_card',\n },\n elavon: {\n provider: 'elavon',\n method: 'credit_card',\n },\n checkoutcom: {\n provider: 'checkoutcom',\n method: 'credit_card',\n },\n 'checkoutcom.credit_card': {\n provider: 'checkoutcom',\n method: 'credit_card',\n },\n 'checkoutcom.card': {\n provider: 'checkoutcom',\n method: 'card',\n },\n sagepay: {\n provider: 'sagepay',\n method: 'credit_card',\n },\n stripe: {\n provider: 'stripe',\n method: 'credit_card',\n },\n 'stripev3.card': {\n provider: 'stripev3',\n method: 'card',\n },\n 'stripeupe.card': {\n provider: 'stripeupe',\n method: 'card',\n },\n cybersource: {\n provider: 'cybersource',\n method: 'credit_card',\n },\n cybersourcev2: {\n provider: 'cybersourcev2',\n method: 'credit_card',\n },\n bnz: {\n provider: 'bnz',\n method: 'credit_card',\n },\n converge: {\n provider: 'converge',\n method: 'credit_card',\n },\n bluesnapv2: {\n provider: 'bluesnapv2',\n method: 'credit_card',\n },\n 'bluesnapdirect.credit_card': {\n provider: 'bluesnapdirect',\n method: 'credit_card',\n },\n orbital: {\n provider: 'orbital',\n method: 'credit_card',\n },\n paymetric: {\n provider: 'paymetric',\n method: 'credit_card',\n },\n bolt: {\n provider: 'bolt',\n method: 'credit_card',\n },\n 'barclaycard.credit_card': {\n provider: 'barclaycard',\n method: 'credit_card',\n },\n digitalriver: {\n provider: 'digitalriver',\n method: 'credit_card',\n },\n moneris: {\n provider: 'moneris',\n method: 'credit_card',\n },\n cba_mpgs: {\n provider: 'cba_mpgs',\n method: 'credit_card',\n },\n worldpayaccess: {\n provider: 'worldpayaccess',\n method: 'credit_card',\n },\n};\n\nexport default supportedInstruments;\n","import { identity, isEqual, pickBy } from 'lodash';\n\nimport Address from './address';\n\nexport default function isAddressEqual(\n addressA: Partial
,\n addressB: Partial
,\n): boolean {\n return isEqual(normalize(addressA), normalize(addressB));\n}\n\nfunction normalize(address: Partial
): Partial
{\n return pickBy(\n {\n firstName: address.firstName,\n lastName: address.lastName,\n company: address.company,\n address1: address.address1,\n address2: address.address2,\n city: address.city,\n stateOrProvince: address.stateOrProvince,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n phone: address.phone,\n customFields: address.customFields,\n },\n identity,\n );\n}\n","import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nexport default interface StoreCreditState {\n errors: StoreCreditErrorsState;\n statuses: StoreCreditStatusesState;\n}\n\nexport interface StoreCreditErrorsState {\n applyError?: RequestError;\n}\n\nexport interface StoreCreditStatusesState {\n isApplying?: boolean;\n}\n\nexport const DEFAULT_STATE: StoreCreditState = {\n errors: {},\n statuses: {},\n};\n","import { createBillingAddressSelectorFactory } from '../billing';\nimport { createCartSelectorFactory } from '../cart';\nimport { createCheckoutButtonSelectorFactory } from '../checkout-buttons';\nimport { createFreezeProxies } from '../common/utility';\nimport { createConfigSelectorFactory } from '../config';\nimport { createCouponSelectorFactory, createGiftCertificateSelectorFactory } from '../coupon';\nimport { createCustomerSelectorFactory, createCustomerStrategySelectorFactory } from '../customer';\nimport { createExtensionSelectorFactory } from '../extension';\nimport { createFormSelectorFactory } from '../form';\nimport { createCountrySelectorFactory } from '../geography';\nimport { createOrderSelectorFactory } from '../order';\nimport { createOrderBillingAddressSelectorFactory } from '../order-billing-address';\nimport {\n createPaymentMethodSelectorFactory,\n createPaymentSelectorFactory,\n createPaymentStrategySelectorFactory,\n} from '../payment';\nimport { createInstrumentSelectorFactory } from '../payment/instrument';\nimport { createRemoteCheckoutSelectorFactory } from '../remote-checkout';\nimport {\n createConsignmentSelectorFactory,\n createPickupOptionSelectorFactory,\n createShippingAddressSelectorFactory,\n createShippingCountrySelectorFactory,\n createShippingStrategySelectorFactory,\n} from '../shipping';\nimport { createSignInEmailSelectorFactory } from '../signin-email';\nimport { createStoreCreditSelectorFactory } from '../store-credit';\nimport { createSubscriptionsSelectorFactory } from '../subscription';\n\nimport { createCheckoutSelectorFactory } from './checkout-selector';\nimport { CheckoutStoreOptions } from './checkout-store';\nimport CheckoutStoreState from './checkout-store-state';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport type InternalCheckoutSelectorsFactory = (\n state: CheckoutStoreState,\n options?: CheckoutStoreOptions,\n) => InternalCheckoutSelectors;\n\nexport function createInternalCheckoutSelectorsFactory(): InternalCheckoutSelectorsFactory {\n const createBillingAddressSelector = createBillingAddressSelectorFactory();\n const createCartSelector = createCartSelectorFactory();\n const createCheckoutButtonSelector = createCheckoutButtonSelectorFactory();\n const createConfigSelector = createConfigSelectorFactory();\n const createCountrySelector = createCountrySelectorFactory();\n const createCouponSelector = createCouponSelectorFactory();\n const createCustomerSelector = createCustomerSelectorFactory();\n const createCustomerStrategySelector = createCustomerStrategySelectorFactory();\n const createGiftCertificateSelector = createGiftCertificateSelectorFactory();\n const createInstrumentSelector = createInstrumentSelectorFactory();\n const createFormSelector = createFormSelectorFactory();\n const createPaymentMethodSelector = createPaymentMethodSelectorFactory();\n const createPaymentStrategySelector = createPaymentStrategySelectorFactory();\n const createPickupOptionSelector = createPickupOptionSelectorFactory();\n const createRemoteCheckoutSelector = createRemoteCheckoutSelectorFactory();\n const createShippingAddressSelector = createShippingAddressSelectorFactory();\n const createShippingCountrySelector = createShippingCountrySelectorFactory();\n const createShippingStrategySelector = createShippingStrategySelectorFactory();\n const createConsignmentSelector = createConsignmentSelectorFactory();\n const createCheckoutSelector = createCheckoutSelectorFactory();\n const createOrderSelector = createOrderSelectorFactory();\n const createOrderBillingAddressSelector = createOrderBillingAddressSelectorFactory();\n const createPaymentSelector = createPaymentSelectorFactory();\n const createStoreCreditSelector = createStoreCreditSelectorFactory();\n const createSubscriptionsSelector = createSubscriptionsSelectorFactory();\n const createSignInEmailSelector = createSignInEmailSelectorFactory();\n const createExtensionSelector = createExtensionSelectorFactory();\n\n return (state, options = {}) => {\n const billingAddress = createBillingAddressSelector(state.billingAddress);\n const cart = createCartSelector(state.cart);\n const checkoutButton = createCheckoutButtonSelector(state.checkoutButton);\n const countries = createCountrySelector(state.countries);\n const coupons = createCouponSelector(state.coupons);\n const customer = createCustomerSelector(state.customer);\n const customerStrategies = createCustomerStrategySelector(state.customerStrategies);\n const extensions = createExtensionSelector(state.extensions);\n const form = createFormSelector(state.formFields);\n const giftCertificates = createGiftCertificateSelector(state.giftCertificates);\n const instruments = createInstrumentSelector(state.instruments);\n const orderBillingAddress = createOrderBillingAddressSelector(state.orderBillingAddress);\n const paymentMethods = createPaymentMethodSelector(state.paymentMethods);\n const paymentStrategies = createPaymentStrategySelector(state.paymentStrategies);\n const pickupOptions = createPickupOptionSelector(state.pickupOptions);\n const remoteCheckout = createRemoteCheckoutSelector(state.remoteCheckout);\n const shippingAddress = createShippingAddressSelector(state.consignments);\n const shippingCountries = createShippingCountrySelector(state.shippingCountries);\n const shippingStrategies = createShippingStrategySelector(state.shippingStrategies);\n const subscriptions = createSubscriptionsSelector(state.subscriptions);\n const storeCredit = createStoreCreditSelector(state.storeCredit);\n const signInEmail = createSignInEmailSelector(state.signInEmail);\n\n // Compose selectors\n const consignments = createConsignmentSelector(state.consignments, cart);\n const checkout = createCheckoutSelector(\n state.checkout,\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n );\n const order = createOrderSelector(state.order, orderBillingAddress, coupons);\n const payment = createPaymentSelector(checkout, order);\n const config = createConfigSelector(state.config, state.formFields);\n\n const selectors = {\n billingAddress,\n cart,\n checkout,\n checkoutButton,\n config,\n consignments,\n countries,\n coupons,\n customer,\n customerStrategies,\n extensions,\n form,\n giftCertificates,\n instruments,\n order,\n orderBillingAddress,\n payment,\n paymentMethods,\n paymentStrategies,\n pickupOptions,\n remoteCheckout,\n shippingAddress,\n shippingCountries,\n shippingStrategies,\n signInEmail,\n subscriptions,\n storeCredit,\n };\n\n return options.shouldWarnMutation ? createFreezeProxies(selectors) : selectors;\n };\n}\n\nexport default function createInternalCheckoutSelectors(\n state: CheckoutStoreState,\n options?: CheckoutStoreOptions,\n): InternalCheckoutSelectors {\n return createInternalCheckoutSelectorsFactory()(state, options);\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport BillingAddress from './billing-address';\nimport BillingAddressState, { DEFAULT_STATE } from './billing-address-state';\n\nexport default interface BillingAddressSelector {\n getBillingAddress(): BillingAddress | undefined;\n getBillingAddressOrThrow(): BillingAddress;\n getUpdateError(): Error | undefined;\n getContinueAsGuestError(): Error | undefined;\n getLoadError(): Error | undefined;\n isUpdating(): boolean;\n isContinuingAsGuest(): boolean;\n isLoading(): boolean;\n}\n\nexport type BillingAddressSelectorFactory = (state: BillingAddressState) => BillingAddressSelector;\n\nexport function createBillingAddressSelectorFactory(): BillingAddressSelectorFactory {\n const getBillingAddress = createSelector(\n (state: BillingAddressState) => state.data,\n (data) => () => data,\n );\n\n const getBillingAddressOrThrow = createSelector(\n getBillingAddress,\n (getBillingAddress) => () => {\n return guard(\n getBillingAddress(),\n () => new MissingDataError(MissingDataErrorType.MissingBillingAddress),\n );\n },\n );\n\n const getUpdateError = createSelector(\n (state: BillingAddressState) => state.errors.updateError,\n (error) => () => error,\n );\n\n const getContinueAsGuestError = createSelector(\n (state: BillingAddressState) => state.errors.continueAsGuestError,\n (error) => () => error,\n );\n\n const getLoadError = createSelector(\n (state: BillingAddressState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isUpdating = createSelector(\n (state: BillingAddressState) => !!state.statuses.isUpdating,\n (status) => () => status,\n );\n\n const isContinuingAsGuest = createSelector(\n (state: BillingAddressState) => !!state.statuses.isContinuingAsGuest,\n (status) => () => status,\n );\n\n const isLoading = createSelector(\n (state: BillingAddressState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: BillingAddressState = DEFAULT_STATE): BillingAddressSelector => {\n return {\n getBillingAddress: getBillingAddress(state),\n getBillingAddressOrThrow: getBillingAddressOrThrow(state),\n getUpdateError: getUpdateError(state),\n getContinueAsGuestError: getContinueAsGuestError(state),\n getLoadError: getLoadError(state),\n isUpdating: isUpdating(state),\n isContinuingAsGuest: isContinuingAsGuest(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoize, memoizeOne } from '@bigcommerce/memoize';\nimport { find, some, values } from 'lodash';\n\nimport { createSelector } from '../common/selector';\n\nimport CheckoutButtonState, { DEFAULT_STATE } from './checkout-button-state';\nimport { CheckoutButtonMethodType } from './strategies';\n\nexport default interface CheckoutButtonSelector {\n getState(): CheckoutButtonState;\n isInitializing(methodId?: CheckoutButtonMethodType): boolean;\n isInitialized(methodId: CheckoutButtonMethodType, containerId?: string): boolean;\n isDeinitializing(methodId?: CheckoutButtonMethodType): boolean;\n getInitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\n getDeinitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\n}\n\nexport type CheckoutButtonSelectorFactory = (state: CheckoutButtonState) => CheckoutButtonSelector;\n\nexport function createCheckoutButtonSelectorFactory(): CheckoutButtonSelectorFactory {\n const getState = createSelector(\n (state: CheckoutButtonState) => state,\n (state) => () => state,\n );\n\n const isInitializing = createSelector(\n (state: CheckoutButtonState) => state.statuses,\n (statuses) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n if (methodId) {\n const method = statuses[methodId];\n\n return (method && method.isInitializing) === true;\n }\n\n return some(statuses, { isInitializing: true });\n }),\n );\n\n const isInitialized = createSelector(\n (state: CheckoutButtonState) => state.data,\n (data) =>\n memoize((methodId: CheckoutButtonMethodType, containerId?: string) => {\n const method = data[methodId];\n\n if (!method) {\n return false;\n }\n\n if (!containerId) {\n return some(\n method.initializedContainers,\n (isInitialized) => isInitialized === true,\n );\n }\n\n return method.initializedContainers[containerId] === true;\n }),\n );\n\n const isDeinitializing = createSelector(\n (state: CheckoutButtonState) => state.statuses,\n (statuses) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n if (methodId) {\n const method = statuses[methodId];\n\n return (method && method.isDeinitializing) === true;\n }\n\n return some(statuses, { isDeinitializing: true });\n }),\n );\n\n const getInitializeError = createSelector(\n (state: CheckoutButtonState) => state.errors,\n (errors) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n const method = methodId\n ? errors[methodId]\n : find(values(errors), (method) => !!(method && method.initializeError));\n\n return method && method.initializeError;\n }),\n );\n\n const getDeinitializeError = createSelector(\n (state: CheckoutButtonState) => state.errors,\n (errors) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n const method = methodId\n ? errors[methodId]\n : find(values(errors), (method) => !!(method && method.deinitializeError));\n\n return method && method.deinitializeError;\n }),\n );\n\n return memoizeOne((state: CheckoutButtonState = DEFAULT_STATE): CheckoutButtonSelector => {\n return {\n getState: getState(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isDeinitializing: isDeinitializing(state),\n getInitializeError: getInitializeError(state),\n getDeinitializeError: getDeinitializeError(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport Coupon from './coupon';\nimport CouponState, { DEFAULT_STATE } from './coupon-state';\n\nexport default interface CouponSelector {\n getCoupons(): Coupon[] | undefined;\n getRemoveError(): RequestError | undefined;\n getApplyError(): RequestError | undefined;\n isApplying(): boolean;\n isRemoving(): boolean;\n}\n\nexport type CouponSelectorFactory = (state: CouponState) => CouponSelector;\n\nexport function createCouponSelectorFactory(): CouponSelectorFactory {\n const getCoupons = createSelector(\n (state: CouponState) => state.data,\n (data) => () => data,\n );\n\n const getRemoveError = createSelector(\n (state: CouponState) => state.errors.removeCouponError,\n (error) => () => error,\n );\n\n const getApplyError = createSelector(\n (state: CouponState) => state.errors.applyCouponError,\n (error) => () => error,\n );\n\n const isApplying = createSelector(\n (state: CouponState) => !!state.statuses.isApplyingCoupon,\n (status) => () => status,\n );\n\n const isRemoving = createSelector(\n (state: CouponState) => !!state.statuses.isRemovingCoupon,\n (status) => () => status,\n );\n\n return memoizeOne((state: CouponState = DEFAULT_STATE): CouponSelector => {\n return {\n getCoupons: getCoupons(state),\n getRemoveError: getRemoveError(state),\n getApplyError: getApplyError(state),\n isApplying: isApplying(state),\n isRemoving: isRemoving(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Customer from './customer';\nimport CustomerState, { DEFAULT_STATE } from './customer-state';\n\nexport default interface CustomerSelector {\n getCustomer(): Customer | undefined;\n getCustomerOrThrow(): Customer;\n getCreateAccountError(): Error | undefined;\n isCreatingCustomerAccount(): boolean;\n getCreateAddressError(): Error | undefined;\n isCreatingCustomerAddress(): boolean;\n}\n\nexport type CustomerSelectorFactory = (state: CustomerState) => CustomerSelector;\n\nexport function createCustomerSelectorFactory(): CustomerSelectorFactory {\n const getCustomer = createSelector(\n (state: CustomerState) => state.data,\n (customer) => () => customer,\n );\n\n const getCustomerOrThrow = createSelector(getCustomer, (getCustomer) => () => {\n return guard(\n getCustomer(),\n () => new MissingDataError(MissingDataErrorType.MissingCustomer),\n );\n });\n\n const getCreateAccountError = createSelector(\n (state: CustomerState) => state.errors.createError,\n (error) => () => error,\n );\n\n const isCreatingCustomerAccount = createSelector(\n (state: CustomerState) => !!state.statuses.isCreating,\n (status) => () => status,\n );\n\n const getCreateAddressError = createSelector(\n (state: CustomerState) => state.errors.createAddressError,\n (error) => () => error,\n );\n\n const isCreatingCustomerAddress = createSelector(\n (state: CustomerState) => !!state.statuses.isCreatingAddress,\n (status) => () => status,\n );\n\n return memoizeOne((state: CustomerState = DEFAULT_STATE): CustomerSelector => {\n return {\n getCustomer: getCustomer(state),\n getCustomerOrThrow: getCustomerOrThrow(state),\n getCreateAccountError: getCreateAccountError(state),\n isCreatingCustomerAccount: isCreatingCustomerAccount(state),\n getCreateAddressError: getCreateAddressError(state),\n isCreatingCustomerAddress: isCreatingCustomerAddress(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport RemoteCheckoutState, {\n DEFAULT_STATE,\n RemoteCheckoutStateData,\n} from './remote-checkout-state';\n\nexport default interface RemoteCheckoutSelector {\n getCheckout(\n methodId: TMethodId,\n ): RemoteCheckoutStateData[TMethodId] | undefined;\n}\n\nexport type RemoteCheckoutSelectorFactory = (state: RemoteCheckoutState) => RemoteCheckoutSelector;\n\nexport function createRemoteCheckoutSelectorFactory(): RemoteCheckoutSelectorFactory {\n const getCheckout = createSelector(\n (state: RemoteCheckoutState) => state.data,\n (data) =>\n (methodId: TMethodId) => {\n return data[methodId];\n },\n );\n\n return memoizeOne((state: RemoteCheckoutState = DEFAULT_STATE): RemoteCheckoutSelector => {\n return {\n getCheckout: getCheckout(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { Address } from '../address';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport ConsignmentState, { DEFAULT_STATE } from './consignment-state';\n\nexport default interface ShippingAddressSelector {\n getShippingAddress(): Address | undefined;\n getShippingAddressOrThrow(): Address;\n getShippingAddresses(): Address[];\n getShippingAddressesOrThrow(): Address[];\n}\n\nexport type ShippingAddressSelectorFactory = (state: ConsignmentState) => ShippingAddressSelector;\n\nexport function createShippingAddressSelectorFactory(): ShippingAddressSelectorFactory {\n const getShippingAddress = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => {\n const shippingConsignment = consignments?.find(\n (consignment) => !consignment.selectedPickupOption,\n );\n\n return shippingConsignment?.shippingAddress;\n },\n );\n\n const getShippingAddressOrThrow = createSelector(\n getShippingAddress,\n (getShippingAddress) => () => {\n return guard(\n getShippingAddress(),\n () => new MissingDataError(MissingDataErrorType.MissingShippingAddress),\n );\n },\n );\n\n const getShippingAddresses = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => {\n const shippingConsignments = consignments?.filter(\n (consignment) => !consignment.selectedPickupOption,\n );\n\n return shippingConsignments\n ? shippingConsignments.map((consignment) => consignment.shippingAddress)\n : [];\n },\n );\n\n const getShippingAddressesOrThrow = createSelector(\n getShippingAddresses,\n (getShippingAddresses) => () => {\n return guard(\n getShippingAddresses(),\n () => new MissingDataError(MissingDataErrorType.MissingShippingAddress),\n );\n },\n );\n\n return memoizeOne((state: ConsignmentState = DEFAULT_STATE): ShippingAddressSelector => {\n return {\n getShippingAddress: getShippingAddress(state),\n getShippingAddressOrThrow: getShippingAddressOrThrow(state),\n getShippingAddresses: getShippingAddresses(state),\n getShippingAddressesOrThrow: getShippingAddressesOrThrow(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport OrderBillingAddressState, {\n DEFAULT_STATE,\n OrderBillingAddress,\n} from './order-billing-address-state';\n\nexport default interface OrderBillingAddressSelector {\n getOrderBillingAddress(): OrderBillingAddress | undefined;\n}\n\nexport type OrderBillingAddressSelectorFactory = (\n state: OrderBillingAddressState,\n) => OrderBillingAddressSelector;\n\nexport function createOrderBillingAddressSelectorFactory(): OrderBillingAddressSelectorFactory {\n const getOrderBillingAddress = createSelector(\n (state: OrderBillingAddressState) => state.data,\n (data) => () => data,\n );\n\n return memoizeOne(\n (state: OrderBillingAddressState = DEFAULT_STATE): OrderBillingAddressSelector => {\n return {\n getOrderBillingAddress: getOrderBillingAddress(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { CheckoutSelector } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { GatewayOrderPayment, OrderSelector } from '../order';\n\nimport PaymentMethod from './payment-method';\nimport { HOSTED } from './payment-method-types';\nimport { ACKNOWLEDGE, FINALIZE } from './payment-status-types';\n\nexport default interface PaymentSelector {\n getPaymentId(): { providerId: string; gatewayId?: string } | undefined;\n getPaymentIdOrThrow(): { providerId: string; gatewayId?: string };\n getPaymentStatus(): string | undefined;\n getPaymentStatusOrThrow(): string;\n getPaymentToken(): string | undefined;\n getPaymentTokenOrThrow(): string;\n getPaymentRedirectUrl(): string | undefined;\n getPaymentRedirectUrlOrThrow(): string;\n isPaymentDataRequired(useStoreCredit?: boolean): boolean;\n isPaymentDataSubmitted(paymentMethod?: PaymentMethod): boolean;\n}\n\nexport type PaymentSelectorFactory = (\n checkout: CheckoutSelector,\n order: OrderSelector,\n) => PaymentSelector;\n\ninterface PaymentSelectorDependencies {\n checkout: CheckoutSelector;\n order: OrderSelector;\n}\n\nexport function createPaymentSelectorFactory(): PaymentSelectorFactory {\n const getInternalPayment = createSelector(\n ({ order }: PaymentSelectorDependencies) => order.getOrderMeta,\n (getOrderMeta) => () => {\n const meta = getOrderMeta();\n\n return meta && meta.payment;\n },\n );\n\n const getGatewayPayment = createSelector(\n ({ order }: PaymentSelectorDependencies) => order.getOrder,\n (getOrder) => () => {\n const order = getOrder();\n\n return find(\n order && order.payments,\n ({ providerId }) =>\n providerId !== 'giftcertificate' && providerId !== 'storecredit',\n ) as GatewayOrderPayment;\n },\n );\n\n const getHostedPayment = createSelector(\n ({ checkout }: PaymentSelectorDependencies) => checkout.getCheckout,\n (getCheckout) => () => {\n const checkout = getCheckout();\n\n return find(\n checkout && checkout.payments,\n ({ providerType }) => providerType === HOSTED,\n );\n },\n );\n\n const getPaymentId = createSelector(\n getInternalPayment,\n getHostedPayment,\n getGatewayPayment,\n (getInternalPayment, getHostedPayment, getGatewayPayment) => () => {\n const internalPayment = getInternalPayment();\n\n if (internalPayment && internalPayment.id) {\n return {\n providerId: internalPayment.id,\n gatewayId: internalPayment.gateway,\n };\n }\n\n const payment = getHostedPayment() || getGatewayPayment();\n\n if (payment && payment.providerId) {\n return {\n providerId: payment.providerId,\n gatewayId: payment.gatewayId,\n };\n }\n },\n );\n\n const getPaymentIdOrThrow = createSelector(getPaymentId, (getPaymentId) => () => {\n return guard(\n getPaymentId(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentId),\n );\n });\n\n const getPaymentStatus = createSelector(\n getInternalPayment,\n getHostedPayment,\n getGatewayPayment,\n (getInternalPayment, getHostedPayment, getGatewayPayment) => () => {\n const internalPayment = getInternalPayment();\n\n if (internalPayment && internalPayment.status) {\n return internalPayment.status.replace('PAYMENT_STATUS_', '');\n }\n\n const payment = getHostedPayment() || getGatewayPayment();\n\n if (payment) {\n return payment.detail.step;\n }\n },\n );\n\n const getPaymentStatusOrThrow = createSelector(getPaymentStatus, (getPaymentStatus) => () => {\n return guard(\n getPaymentStatus(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentStatus),\n );\n });\n\n const getPaymentToken = createSelector(\n ({ order }: PaymentSelectorDependencies) => order.getOrderMeta,\n (getOrderMeta) => () => {\n const meta = getOrderMeta();\n\n return meta && meta.token;\n },\n );\n\n const getPaymentTokenOrThrow = createSelector(getPaymentToken, (getPaymentToken) => () => {\n return guard(\n getPaymentToken(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentToken),\n );\n });\n\n const getPaymentRedirectUrl = createSelector(getInternalPayment, (getInternalPayment) => () => {\n const payment = getInternalPayment();\n\n return payment && payment.redirectUrl;\n });\n\n const getPaymentRedirectUrlOrThrow = createSelector(\n getPaymentRedirectUrl,\n (getPaymentRedirectUrl) => () => {\n return guard(\n getPaymentRedirectUrl(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentRedirectUrl),\n );\n },\n );\n\n const isPaymentDataRequired = createSelector(\n ({ checkout }: PaymentSelectorDependencies) => checkout.getOutstandingBalance,\n (getOutstandingBalance) =>\n (useStoreCredit = false) => {\n const grandTotal = getOutstandingBalance(useStoreCredit);\n\n return grandTotal ? grandTotal > 0 : false;\n },\n );\n\n const isPaymentDataSubmitted = createSelector(\n getPaymentStatus,\n (getPaymentStatus) => (paymentMethod?: PaymentMethod) => {\n if (paymentMethod && paymentMethod.nonce) {\n return true;\n }\n\n return getPaymentStatus() === ACKNOWLEDGE || getPaymentStatus() === FINALIZE;\n },\n );\n\n return memoizeOne((checkout: CheckoutSelector, order: OrderSelector): PaymentSelector => {\n return {\n getPaymentId: getPaymentId({ checkout, order }),\n getPaymentIdOrThrow: getPaymentIdOrThrow({ checkout, order }),\n getPaymentStatus: getPaymentStatus({ checkout, order }),\n getPaymentStatusOrThrow: getPaymentStatusOrThrow({ checkout, order }),\n getPaymentToken: getPaymentToken({ checkout, order }),\n getPaymentTokenOrThrow: getPaymentTokenOrThrow({ checkout, order }),\n getPaymentRedirectUrl: getPaymentRedirectUrl({ checkout, order }),\n getPaymentRedirectUrlOrThrow: getPaymentRedirectUrlOrThrow({ checkout, order }),\n isPaymentDataRequired: isPaymentDataRequired({ checkout, order }),\n isPaymentDataSubmitted: isPaymentDataSubmitted({ checkout, order }),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport { SignInEmail } from './signin-email';\nimport SignInEmailState, { DEFAULT_STATE } from './signin-email-state';\n\nexport default interface SignInEmailSelector {\n getEmail(): SignInEmail | undefined;\n getSendError(): Error | undefined;\n isSending(): boolean;\n}\n\nexport type SignInEmailSelectorFactory = (state: SignInEmailState) => SignInEmailSelector;\n\nexport function createSignInEmailSelectorFactory(): SignInEmailSelectorFactory {\n const getEmail = createSelector(\n (state: SignInEmailState) => state.data,\n (signInEmail) => () => signInEmail,\n );\n\n const getSendError = createSelector(\n (state: SignInEmailState) => state.errors.sendError,\n (error) => () => error,\n );\n\n const isSending = createSelector(\n (state: SignInEmailState) => !!state.statuses.isSending,\n (status) => () => status,\n );\n\n return memoizeOne((state: SignInEmailState = DEFAULT_STATE): SignInEmailSelector => {\n return {\n getEmail: getEmail(state),\n getSendError: getSendError(state),\n isSending: isSending(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Cart from './cart';\nimport CartState, { DEFAULT_STATE } from './cart-state';\n\nexport default interface CartSelector {\n getCart(): Cart | undefined;\n getCartOrThrow(): Cart;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type CartSelectorFactory = (state: CartState) => CartSelector;\n\nexport function createCartSelectorFactory() {\n const getCart = createSelector(\n (state: CartState) => state.data,\n (cart) => () => cart,\n );\n\n const getCartOrThrow = createSelector(getCart, (getCart) => () => {\n return guard(getCart(), () => new MissingDataError(MissingDataErrorType.MissingCart));\n });\n\n const getLoadError = createSelector(\n (state: CartState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: CartState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: CartState = DEFAULT_STATE): CartSelector => {\n return {\n getCart: getCart(state),\n getCartOrThrow: getCartOrThrow(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { FormFieldsState } from '../form';\n\nimport Config, { ContextConfig, FlashMessage, FlashMessageType, StoreConfig } from './config';\nimport ConfigState, { DEFAULT_STATE } from './config-state';\n\nexport default interface ConfigSelector {\n getConfig(): Config | undefined;\n getFlashMessages(type?: FlashMessageType): FlashMessage[] | undefined;\n getStoreConfig(): StoreConfig | undefined;\n getStoreConfigOrThrow(): StoreConfig;\n getContextConfig(): ContextConfig | undefined;\n getExternalSource(): string | undefined;\n getHost(): string | undefined;\n getLocale(): string | undefined;\n getVariantIdentificationToken(): string | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type ConfigSelectorFactory = (\n state: ConfigState,\n formState: FormFieldsState,\n) => ConfigSelector;\n\ninterface ConfigSelectorDependencies {\n formState: FormFieldsState;\n}\n\nexport function createConfigSelectorFactory(): ConfigSelectorFactory {\n const getConfig = createSelector(\n (state: ConfigState) => state.data,\n (data) => () => data,\n );\n\n const getFlashMessages = createSelector(\n (state: ConfigState) => state.data,\n (data) => (filterType?: FlashMessageType) => {\n if (!data) {\n return;\n }\n\n const { flashMessages } = data.context;\n\n if (!flashMessages) {\n return;\n }\n\n return filterType !== undefined\n ? flashMessages.filter(({ type }) => filterType === type)\n : flashMessages;\n },\n );\n\n const getStoreConfig = createSelector(\n (state: ConfigState) => state.data,\n (_: ConfigState, { formState }: ConfigSelectorDependencies) => formState && formState.data,\n (data, formFields) => () =>\n data && formFields\n ? {\n ...data.storeConfig,\n formFields,\n }\n : undefined,\n );\n\n const getStoreConfigOrThrow = createSelector(getStoreConfig, (getStoreConfig) => () => {\n return guard(\n getStoreConfig(),\n () => new MissingDataError(MissingDataErrorType.MissingCheckoutConfig),\n );\n });\n\n const getContextConfig = createSelector(\n (state: ConfigState) => state.data && state.data.context,\n (data) => () => data,\n );\n\n const getExternalSource = createSelector(\n (state: ConfigState) => state.meta && state.meta.externalSource,\n (data) => () => data,\n );\n\n const getHost = createSelector(\n (state: ConfigState) => state.meta?.host,\n (data) => () => data,\n );\n\n const getLocale = createSelector(\n (state: ConfigState) => state.meta?.locale,\n (data) => () => data,\n );\n\n const getVariantIdentificationToken = createSelector(\n (state: ConfigState) => state.meta && state.meta.variantIdentificationToken,\n (data) => () => data,\n );\n\n const getLoadError = createSelector(\n (state: ConfigState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: ConfigState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne(\n (state: ConfigState = DEFAULT_STATE, formState: FormFieldsState): ConfigSelector => {\n return {\n getConfig: getConfig(state),\n getFlashMessages: getFlashMessages(state),\n getStoreConfig: getStoreConfig(state, { formState }),\n getStoreConfigOrThrow: getStoreConfigOrThrow(state, { formState }),\n getContextConfig: getContextConfig(state),\n getExternalSource: getExternalSource(state),\n getHost: getHost(state),\n getLocale: getLocale(state),\n getVariantIdentificationToken: getVariantIdentificationToken(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport Country from './country';\nimport CountryState, { DEFAULT_STATE } from './country-state';\n\nexport default interface CountrySelector {\n getCountries(): Country[] | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type CountrySelectorFactory = (state: CountryState) => CountrySelector;\n\nexport function createCountrySelectorFactory(): CountrySelectorFactory {\n const getCountries = createSelector(\n (state: CountryState) => state.data,\n (countries) => () => countries,\n );\n\n const getLoadError = createSelector(\n (state: CountryState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: CountryState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: CountryState = DEFAULT_STATE): CountrySelector => {\n return {\n getCountries: getCountries(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport CustomerStrategyState, { DEFAULT_STATE } from './customer-strategy-state';\n\nexport default interface CustomerStrategySelector {\n getSignInError(methodId?: string): Error | undefined;\n getSignOutError(methodId?: string): Error | undefined;\n getExecutePaymentMethodCheckoutError(methodId?: string): Error | undefined;\n getInitializeError(methodId?: string): Error | undefined;\n getWidgetInteractionError(methodId?: string): Error | undefined;\n isSigningIn(methodId?: string): boolean;\n isSigningOut(methodId?: string): boolean;\n isExecutingPaymentMethodCheckout(methodId?: string): boolean;\n isInitializing(methodId?: string): boolean;\n isInitialized(methodId: string): boolean;\n isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type CustomerStrategySelectorFactory = (\n state: CustomerStrategyState,\n) => CustomerStrategySelector;\n\nexport function createCustomerStrategySelectorFactory(): CustomerStrategySelectorFactory {\n const getSignInError = createSelector(\n (state: CustomerStrategyState) => state.errors.signInMethodId,\n (state: CustomerStrategyState) => state.errors.signInError,\n (signInMethodId, signInError) => (methodId?: string) => {\n if (methodId && signInMethodId !== methodId) {\n return;\n }\n\n return signInError;\n },\n );\n\n const getSignOutError = createSelector(\n (state: CustomerStrategyState) => state.errors.signOutMethodId,\n (state: CustomerStrategyState) => state.errors.signOutError,\n (signOutMethodId, signOutError) => (methodId?: string) => {\n if (methodId && signOutMethodId !== methodId) {\n return;\n }\n\n return signOutError;\n },\n );\n\n const getExecutePaymentMethodCheckoutError = createSelector(\n (state: CustomerStrategyState) => state.errors.executePaymentMethodCheckoutMethodId,\n (state: CustomerStrategyState) => state.errors.executePaymentMethodCheckoutError,\n (executePaymentMethodCheckoutMethodId, executePaymentMethodCheckoutError) =>\n (methodId?: string) => {\n if (methodId && executePaymentMethodCheckoutMethodId !== methodId) {\n return;\n }\n\n return executePaymentMethodCheckoutError;\n },\n );\n\n const getInitializeError = createSelector(\n (state: CustomerStrategyState) => state.errors.initializeMethodId,\n (state: CustomerStrategyState) => state.errors.initializeErrors,\n (initializeMethodId, initializeErrors) => (methodId?: string) => {\n if (!initializeMethodId || !initializeErrors) {\n return;\n }\n\n if (methodId) {\n return initializeErrors[methodId];\n }\n\n return initializeErrors[initializeMethodId];\n },\n );\n\n const getWidgetInteractionError = createSelector(\n (state: CustomerStrategyState) => state.errors.widgetInteractionMethodId,\n (state: CustomerStrategyState) => state.errors.widgetInteractionError,\n (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return;\n }\n\n return widgetInteractionError;\n },\n );\n\n const isSigningIn = createSelector(\n (state: CustomerStrategyState) => state.statuses.signInMethodId,\n (state: CustomerStrategyState) => state.statuses.isSigningIn,\n (signInMethodId, isSigningIn) => (methodId?: string) => {\n if (methodId && signInMethodId !== methodId) {\n return false;\n }\n\n return !!isSigningIn;\n },\n );\n\n const isSigningOut = createSelector(\n (state: CustomerStrategyState) => state.statuses.signOutMethodId,\n (state: CustomerStrategyState) => state.statuses.isSigningOut,\n (signOutMethodId, isSigningOut) => (methodId?: string) => {\n if (methodId && signOutMethodId !== methodId) {\n return false;\n }\n\n return !!isSigningOut;\n },\n );\n\n const isExecutingPaymentMethodCheckout = createSelector(\n (state: CustomerStrategyState) => state.statuses.executePaymentMethodCheckoutMethodId,\n (state: CustomerStrategyState) => state.statuses.isExecutingPaymentMethodCheckout,\n (executePaymentMethodCheckoutMethodId, isExecutingPaymentMethodCheckout) =>\n (methodId?: string) => {\n if (methodId && executePaymentMethodCheckoutMethodId !== methodId) {\n return false;\n }\n\n return !!isExecutingPaymentMethodCheckout;\n },\n );\n\n const isInitializing = createSelector(\n (state: CustomerStrategyState) => state.statuses.initializeMethodId,\n (state: CustomerStrategyState) => state.statuses.isInitializing,\n (initializeMethodId, isInitializing) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return false;\n }\n\n return !!isInitializing;\n },\n );\n\n const isInitialized = createSelector(\n (state: CustomerStrategyState) => state.data,\n (data) => (methodId: string) => {\n return !!(data[methodId] && data[methodId].isInitialized);\n },\n );\n\n const isWidgetInteracting = createSelector(\n (state: CustomerStrategyState) => state.statuses.widgetInteractionMethodId,\n (state: CustomerStrategyState) => state.statuses.isWidgetInteracting,\n (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return false;\n }\n\n return !!isWidgetInteracting;\n },\n );\n\n return memoizeOne((state: CustomerStrategyState = DEFAULT_STATE): CustomerStrategySelector => {\n return {\n getSignInError: getSignInError(state),\n getSignOutError: getSignOutError(state),\n getExecutePaymentMethodCheckoutError: getExecutePaymentMethodCheckoutError(state),\n getInitializeError: getInitializeError(state),\n getWidgetInteractionError: getWidgetInteractionError(state),\n isSigningIn: isSigningIn(state),\n isSigningOut: isSigningOut(state),\n isExecutingPaymentMethodCheckout: isExecutingPaymentMethodCheckout(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isWidgetInteracting: isWidgetInteracting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport GiftCertificate from './gift-certificate';\nimport GiftCertificateState, { DEFAULT_STATE } from './gift-certificate-state';\n\nexport default interface GiftCertificateSelector {\n getGiftCertificates(): GiftCertificate[] | undefined;\n getRemoveError(): RequestError | undefined;\n getApplyError(): RequestError | undefined;\n isApplying(): boolean;\n isRemoving(): boolean;\n}\n\nexport type GiftCertificateSelectorFactory = (\n state: GiftCertificateState,\n) => GiftCertificateSelector;\n\nexport function createGiftCertificateSelectorFactory(): GiftCertificateSelectorFactory {\n const getGiftCertificates = createSelector(\n (state: GiftCertificateState) => state.data,\n (data) => () => data,\n );\n\n const getRemoveError = createSelector(\n (state: GiftCertificateState) => state.errors.removeGiftCertificateError,\n (error) => () => error,\n );\n\n const getApplyError = createSelector(\n (state: GiftCertificateState) => state.errors.applyGiftCertificateError,\n (error) => () => error,\n );\n\n const isApplying = createSelector(\n (state: GiftCertificateState) => !!state.statuses.isApplyingGiftCertificate,\n (status) => () => status,\n );\n\n const isRemoving = createSelector(\n (state: GiftCertificateState) => !!state.statuses.isRemovingGiftCertificate,\n (status) => () => status,\n );\n\n return memoizeOne((state: GiftCertificateState = DEFAULT_STATE): GiftCertificateSelector => {\n return {\n getGiftCertificates: getGiftCertificates(state),\n getRemoveError: getRemoveError(state),\n getApplyError: getApplyError(state),\n isApplying: isApplying(state),\n isRemoving: isRemoving(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { filter, flatMap, isMatch, values } from 'lodash';\n\nimport { MissingDataError, MissingDataErrorType } from '../../common/error/errors';\nimport { createSelector } from '../../common/selector';\nimport { guard } from '../../common/utility';\nimport PaymentMethod from '../payment-method';\n\nimport PaymentInstrument, { CardInstrument } from './instrument';\nimport InstrumentState, { DEFAULT_STATE, InstrumentMeta } from './instrument-state';\nimport supportedInstruments from './supported-payment-instruments';\n\nexport default interface InstrumentSelector {\n getCardInstrument(instrumentId: string): CardInstrument | undefined;\n getCardInstrumentOrThrow(instrumentId: string): CardInstrument;\n getInstruments(): PaymentInstrument[] | undefined;\n getInstrumentsByPaymentMethod(paymentMethod: PaymentMethod): PaymentInstrument[] | undefined;\n getInstrumentsMeta(): InstrumentMeta | undefined;\n getLoadError(): Error | undefined;\n getDeleteError(instrumentId?: string): Error | undefined;\n isLoading(): boolean;\n isDeleting(instrumentId?: string): boolean;\n}\n\nexport type InstrumentSelectorFactory = (state: InstrumentState) => InstrumentSelector;\n\nexport function createInstrumentSelectorFactory(): InstrumentSelectorFactory {\n const getInstrumentsByPaymentMethod = createSelector(\n (state: InstrumentState) => state.data,\n (instruments) => (paymentMethod: PaymentMethod) => {\n if (!instruments) {\n return;\n }\n\n const paymentMethodKey = paymentMethod.gateway\n ? `${paymentMethod.gateway}.${paymentMethod.id}`\n : paymentMethod.id;\n\n const currentMethod = supportedInstruments[paymentMethodKey];\n\n if (!currentMethod) {\n return [];\n }\n\n return filter(instruments, currentMethod);\n },\n );\n\n const getCardInstrument = createSelector(\n (state: InstrumentState) => state.data,\n (instruments = []) =>\n (instrumentId: string) => {\n const cards = values(supportedInstruments);\n\n return instruments.find(\n (instrument): instrument is CardInstrument =>\n instrument.bigpayToken === instrumentId &&\n instrument.type === 'card' &&\n cards.some((card) => isMatch(instrument, card)),\n );\n },\n );\n\n const getCardInstrumentOrThrow = createSelector(\n getCardInstrument,\n (getCardInstrument) => (instrumentId: string) => {\n return guard(\n getCardInstrument(instrumentId),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentInstrument),\n );\n },\n );\n\n const getInstruments = createSelector(\n (state: InstrumentState) => state.data,\n (instruments) => () => {\n if (!instruments) {\n return;\n }\n\n const allSupportedInstruments = flatMap(supportedInstruments, (supportedProvider) =>\n filter(\n instruments,\n (instrument: PaymentInstrument): instrument is PaymentInstrument => {\n return isMatch(instrument, supportedProvider);\n },\n ),\n );\n\n return allSupportedInstruments;\n },\n );\n\n const getInstrumentsMeta = createSelector(\n (state: InstrumentState) => state.meta,\n (meta) => () => meta,\n );\n\n const getLoadError = createSelector(\n (state: InstrumentState) => state.errors.loadError,\n (loadError) => () => loadError,\n );\n\n const getDeleteError = createSelector(\n (state: InstrumentState) => state.errors.failedInstrument,\n (state: InstrumentState) => state.errors.deleteError,\n (failedInstrument, deleteError) => (instrumentId?: string) => {\n if (instrumentId && failedInstrument !== instrumentId) {\n return;\n }\n\n return deleteError;\n },\n );\n\n const isLoading = createSelector(\n (state: InstrumentState) => state.statuses.isLoading,\n (isLoading) => () => !!isLoading,\n );\n\n const isDeleting = createSelector(\n (state: InstrumentState) => state.statuses.deletingInstrument,\n (state: InstrumentState) => state.statuses.isDeleting,\n (deletingInstrument, isDeleting) => (instrumentId?: string) => {\n if (instrumentId && deletingInstrument !== instrumentId) {\n return false;\n }\n\n return !!isDeleting;\n },\n );\n\n return memoizeOne((state: InstrumentState = DEFAULT_STATE): InstrumentSelector => {\n return {\n getCardInstrument: getCardInstrument(state),\n getCardInstrumentOrThrow: getCardInstrumentOrThrow(state),\n getInstruments: getInstruments(state),\n getInstrumentsByPaymentMethod: getInstrumentsByPaymentMethod(state),\n getInstrumentsMeta: getInstrumentsMeta(state),\n getLoadError: getLoadError(state),\n getDeleteError: getDeleteError(state),\n isLoading: isLoading(state),\n isDeleting: isDeleting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { createSelector } from '../common/selector';\nimport { Country } from '../geography';\n\nimport FormField from './form-field';\nimport FormFieldsState, { DEFAULT_STATE } from './form-fields-state';\n\nexport default interface FormSelector {\n getShippingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\n getBillingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\n getCustomerAccountFields(): FormField[];\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type FormSelectorFactory = (state: FormFieldsState) => FormSelector;\n\nexport function createFormSelectorFactory(): FormSelectorFactory {\n const getShippingAddressFields = createSelector(\n (state: FormFieldsState) => state.data,\n (formFields) =>\n (countries: Country[] = [], countryCode: string) => {\n const selectedCountry = find(countries, { code: countryCode });\n const fields = formFields ? formFields.shippingAddress : [];\n\n return fields.map((field: any) => processField(field, countries, selectedCountry));\n },\n );\n\n const getBillingAddressFields = createSelector(\n (state: FormFieldsState) => state.data,\n (formFields) =>\n (countries: Country[] = [], countryCode: string) => {\n const selectedCountry = find(countries, { code: countryCode });\n const fields = formFields ? formFields.billingAddress : [];\n\n return fields.map((field: any) => processField(field, countries, selectedCountry));\n },\n );\n\n const getCustomerAccountFields = createSelector(\n (state: FormFieldsState) => state.data,\n (formFields) => () => formFields ? formFields.customerAccount : [],\n );\n\n const getLoadError = createSelector(\n (state: FormFieldsState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: FormFieldsState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n function processField(\n field: FormField,\n countries: Country[],\n selectedCountry?: Country,\n ): FormField {\n if (field.name === 'countryCode') {\n return processCountry(field, countries, selectedCountry);\n }\n\n if (field.name === 'stateOrProvince') {\n return processProvince(field, selectedCountry);\n }\n\n if (field.name === 'postalCode') {\n return processsPostCode(field, selectedCountry);\n }\n\n return field;\n }\n\n function processCountry(\n field: FormField,\n countries: Country[] = [],\n country?: Country,\n ): FormField {\n if (!countries.length) {\n return field;\n }\n\n const { code = '' } = country || {};\n const items = countries.map(({ code, name }: any) => ({\n value: code,\n label: name,\n }));\n\n return {\n ...field,\n options: { items },\n default: code,\n type: 'array',\n fieldType: 'dropdown',\n itemtype: 'string',\n };\n }\n\n function processProvince(field: FormField, country?: Country): FormField {\n const { subdivisions = [], requiresState } = country || {};\n\n if (!subdivisions.length) {\n return {\n ...field,\n required: requiresState == null ? false : requiresState,\n };\n }\n\n const items = subdivisions.map(({ code, name }: any) => ({\n value: code,\n label: name,\n }));\n\n return {\n ...field,\n name: 'stateOrProvinceCode',\n options: { items },\n required: requiresState == null ? true : requiresState,\n type: 'array',\n fieldType: 'dropdown',\n itemtype: 'string',\n };\n }\n\n function processsPostCode(field: FormField, country?: Country): FormField {\n const { hasPostalCodes = [] } = country || {};\n\n if (hasPostalCodes === undefined) {\n return field;\n }\n\n return { ...field, required: Boolean(hasPostalCodes) };\n }\n\n return memoizeOne((state: FormFieldsState = DEFAULT_STATE): FormSelector => {\n return {\n getShippingAddressFields: getShippingAddressFields(state),\n getBillingAddressFields: getBillingAddressFields(state),\n getCustomerAccountFields: getCustomerAccountFields(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\nimport PaymentMethodState, { DEFAULT_STATE } from './payment-method-state';\n\nexport default interface PaymentMethodSelector {\n getPaymentMethods(): PaymentMethod[] | undefined;\n getPaymentMethodsMeta(): PaymentMethodMeta | undefined;\n getPaymentMethod(methodId: string, gatewayId?: string): PaymentMethod | undefined;\n getPaymentMethodOrThrow(methodId: string, gatewayId?: string): PaymentMethod;\n getLoadError(): Error | undefined;\n getLoadMethodError(methodId?: string): Error | undefined;\n isLoading(): boolean;\n isLoadingMethod(methodId?: string): boolean;\n}\n\nexport type PaymentMethodSelectorFactory = (state: PaymentMethodState) => PaymentMethodSelector;\n\nexport function createPaymentMethodSelectorFactory(): PaymentMethodSelectorFactory {\n const getPaymentMethods = createSelector(\n (state: PaymentMethodState) => state.data,\n (paymentMethods) => () => paymentMethods,\n );\n\n const getPaymentMethodsMeta = createSelector(\n (state: PaymentMethodState) => state.meta,\n (meta) => () => meta,\n );\n\n const getPaymentMethod = createSelector(\n (state: PaymentMethodState) => state.data,\n (paymentMethods) => (methodId: string, gatewayId?: string) => {\n return gatewayId\n ? find(paymentMethods, { id: methodId, gateway: gatewayId })\n : find(paymentMethods, { id: methodId });\n },\n );\n\n const getPaymentMethodOrThrow = createSelector(\n getPaymentMethod,\n (getPaymentMethod) => (methodId: string, gatewayId?: string) => {\n return guard(\n getPaymentMethod(methodId, gatewayId),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentMethod),\n );\n },\n );\n\n const getLoadError = createSelector(\n (state: PaymentMethodState) => state.errors.loadError,\n (loadError) => () => loadError,\n );\n\n const getLoadMethodError = createSelector(\n (state: PaymentMethodState) => state.errors.loadMethodId,\n (state: PaymentMethodState) => state.errors.loadMethodError,\n (loadMethodId, loadMethodError) => (methodId?: string) => {\n if (methodId && loadMethodId !== methodId) {\n return;\n }\n\n return loadMethodError;\n },\n );\n\n const isLoading = createSelector(\n (state: PaymentMethodState) => state.statuses.isLoading,\n (isLoading) => () => !!isLoading,\n );\n\n const isLoadingMethod = createSelector(\n (state: PaymentMethodState) => state.statuses.loadMethodId,\n (state: PaymentMethodState) => state.statuses.isLoadingMethod,\n (loadMethodId, isLoadingMethod) => (methodId?: string) => {\n if (methodId && loadMethodId !== methodId) {\n return false;\n }\n\n return !!isLoadingMethod;\n },\n );\n\n return memoizeOne((state: PaymentMethodState = DEFAULT_STATE): PaymentMethodSelector => {\n return {\n getPaymentMethods: getPaymentMethods(state),\n getPaymentMethodsMeta: getPaymentMethodsMeta(state),\n getPaymentMethod: getPaymentMethod(state),\n getPaymentMethodOrThrow: getPaymentMethodOrThrow(state),\n getLoadError: getLoadError(state),\n getLoadMethodError: getLoadMethodError(state),\n isLoading: isLoading(state),\n isLoadingMethod: isLoadingMethod(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport PaymentStrategyState, { DEFAULT_STATE } from './payment-strategy-state';\n\ninterface InitiaizedQuery {\n methodId: string;\n gatewayId?: string;\n}\n\nexport default interface PaymentStrategySelector {\n getInitializeError(methodId?: string): Error | undefined;\n getExecuteError(methodId?: string): Error | undefined;\n getFinalizeError(methodId?: string): Error | undefined;\n getWidgetInteractingError(methodId?: string): Error | undefined;\n isInitializing(methodId?: string): boolean;\n isInitialized(query: InitiaizedQuery): boolean;\n isExecuting(methodId?: string): boolean;\n isFinalizing(methodId?: string): boolean;\n isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type PaymentStrategySelectorFactory = (\n state: PaymentStrategyState,\n) => PaymentStrategySelector;\n\nexport function createPaymentStrategySelectorFactory(): PaymentStrategySelectorFactory {\n const getInitializeError = createSelector(\n (state: PaymentStrategyState) => state.errors.initializeMethodId,\n (state: PaymentStrategyState) => state.errors.initializeError,\n (initializeMethodId, initializeError) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return;\n }\n\n return initializeError;\n },\n );\n\n const getExecuteError = createSelector(\n (state: PaymentStrategyState) => state.errors.executeMethodId,\n (state: PaymentStrategyState) => state.errors.executeError,\n (executeMethodId, executeError) => (methodId?: string) => {\n if (methodId && executeMethodId !== methodId) {\n return;\n }\n\n return executeError;\n },\n );\n\n const getFinalizeError = createSelector(\n (state: PaymentStrategyState) => state.errors.finalizeMethodId,\n (state: PaymentStrategyState) => state.errors.finalizeError,\n (finalizeMethodId, finalizeError) => (methodId?: string) => {\n if (methodId && finalizeMethodId !== methodId) {\n return;\n }\n\n return finalizeError;\n },\n );\n\n const getWidgetInteractingError = createSelector(\n (state: PaymentStrategyState) => state.errors.widgetInteractionMethodId,\n (state: PaymentStrategyState) => state.errors.widgetInteractionError,\n (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return;\n }\n\n return widgetInteractionError;\n },\n );\n\n const isInitializing = createSelector(\n (state: PaymentStrategyState) => state.statuses.initializeMethodId,\n (state: PaymentStrategyState) => state.statuses.isInitializing,\n (initializeMethodId, isInitializing) => (key?: string) => {\n if (key && initializeMethodId !== key) {\n return false;\n }\n\n return !!isInitializing;\n },\n );\n\n const isInitialized = createSelector(\n (state: PaymentStrategyState) => state.data,\n (data) => (query: InitiaizedQuery) => {\n const key = query.gatewayId ? `${query.methodId}.${query.gatewayId}` : query.methodId;\n\n return !!(data[key] && data[key].isInitialized);\n },\n );\n\n const isExecuting = createSelector(\n (state: PaymentStrategyState) => state.statuses.executeMethodId,\n (state: PaymentStrategyState) => state.statuses.isExecuting,\n (executeMethodId, isExecuting) => (methodId?: string) => {\n if (methodId && executeMethodId !== methodId) {\n return false;\n }\n\n return !!isExecuting;\n },\n );\n\n const isFinalizing = createSelector(\n (state: PaymentStrategyState) => state.statuses.finalizeMethodId,\n (state: PaymentStrategyState) => state.statuses.isFinalizing,\n (finalizeMethodId, isFinalizing) => (methodId?: string) => {\n if (methodId && finalizeMethodId !== methodId) {\n return false;\n }\n\n return !!isFinalizing;\n },\n );\n\n const isWidgetInteracting = createSelector(\n (state: PaymentStrategyState) => state.statuses.widgetInteractionMethodId,\n (state: PaymentStrategyState) => state.statuses.isWidgetInteracting,\n (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return false;\n }\n\n return !!isWidgetInteracting;\n },\n );\n\n return memoizeOne((state: PaymentStrategyState = DEFAULT_STATE): PaymentStrategySelector => {\n return {\n getInitializeError: getInitializeError(state),\n getExecuteError: getExecuteError(state),\n getFinalizeError: getFinalizeError(state),\n getWidgetInteractingError: getWidgetInteractingError(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isExecuting: isExecuting(state),\n isFinalizing: isFinalizing(state),\n isWidgetInteracting: isWidgetInteracting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\nimport { objectFlatten, objectWithSortedKeys } from '../common/utility';\n\nimport { PickupOptionResult, SearchArea } from './pickup-option';\nimport PickupOptionState, { DEFAULT_STATE } from './pickup-option-state';\n\nexport default interface PickupOptionSelector {\n getPickupOptions(\n consignmentId: string,\n searchArea: SearchArea,\n ): PickupOptionResult[] | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type PickupOptionSelectorFactory = (state: PickupOptionState) => PickupOptionSelector;\n\nexport function createPickupOptionSelectorFactory(): PickupOptionSelectorFactory {\n const getPickupOptions = createSelector(\n (state: PickupOptionState) => state.data,\n (pickupOptions) => (consignmentId: string, searchArea: SearchArea) => {\n if (!pickupOptions) {\n return;\n }\n\n const flattenedParams = objectFlatten({ consignmentId, searchArea });\n const sortedFlattenedParams = objectWithSortedKeys(flattenedParams);\n const keyString = btoa(`${JSON.stringify(sortedFlattenedParams)}`);\n\n return pickupOptions[keyString];\n },\n );\n\n const getLoadError = createSelector(\n (state: PickupOptionState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: PickupOptionState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: PickupOptionState = DEFAULT_STATE): PickupOptionSelector => {\n return {\n getPickupOptions: getPickupOptions(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\nimport { Country } from '../geography';\n\nimport ShippingCountryState, { DEFAULT_STATE } from './shipping-country-state';\n\nexport default interface ShippingCountrySelector {\n getShippingCountries(): Country[] | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type ShippingCountrySelectorFactory = (\n state: ShippingCountryState,\n) => ShippingCountrySelector;\n\nexport function createShippingCountrySelectorFactory(): ShippingCountrySelectorFactory {\n const getShippingCountries = createSelector(\n (state: ShippingCountryState) => state.data,\n (data) => () => data,\n );\n\n const getLoadError = createSelector(\n (state: ShippingCountryState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: ShippingCountryState) => state.statuses.isLoading,\n (status) => () => !!status,\n );\n\n return memoizeOne((state: ShippingCountryState = DEFAULT_STATE): ShippingCountrySelector => {\n return {\n getShippingCountries: getShippingCountries(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport ShippingStrategyState, { DEFAULT_STATE } from './shipping-strategy-state';\n\nexport default interface ShippingStrategySelector {\n getUpdateAddressError(methodId?: string): Error | undefined;\n getSelectOptionError(methodId?: string): Error | undefined;\n getInitializeError(methodId?: string): Error | undefined;\n getWidgetInteractionError(methodId?: string): Error | undefined;\n isUpdatingAddress(methodId?: string): boolean;\n isSelectingOption(methodId?: string): boolean;\n isInitializing(methodId?: string): boolean;\n isInitialized(methodId: string): boolean;\n isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type ShippingStrategySelectorFactory = (\n state: ShippingStrategyState,\n) => ShippingStrategySelector;\n\nexport function createShippingStrategySelectorFactory(): ShippingStrategySelectorFactory {\n const getUpdateAddressError = createSelector(\n (state: ShippingStrategyState) => state.errors.updateAddressMethodId,\n (state: ShippingStrategyState) => state.errors.updateAddressError,\n (updateAddressMethodId, updateAddressError) => (methodId?: string) => {\n if (methodId && updateAddressMethodId !== methodId) {\n return;\n }\n\n return updateAddressError;\n },\n );\n\n const getSelectOptionError = createSelector(\n (state: ShippingStrategyState) => state.errors.selectOptionMethodId,\n (state: ShippingStrategyState) => state.errors.selectOptionError,\n (selectOptionMethodId, selectOptionError) => (methodId?: string) => {\n if (methodId && selectOptionMethodId !== methodId) {\n return;\n }\n\n return selectOptionError;\n },\n );\n\n const getInitializeError = createSelector(\n (state: ShippingStrategyState) => state.errors.initializeMethodId,\n (state: ShippingStrategyState) => state.errors.initializeError,\n (initializeMethodId, initializeError) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return;\n }\n\n return initializeError;\n },\n );\n\n const getWidgetInteractionError = createSelector(\n (state: ShippingStrategyState) => state.errors.widgetInteractionMethodId,\n (state: ShippingStrategyState) => state.errors.widgetInteractionError,\n (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return;\n }\n\n return widgetInteractionError;\n },\n );\n\n const isUpdatingAddress = createSelector(\n (state: ShippingStrategyState) => state.statuses.updateAddressMethodId,\n (state: ShippingStrategyState) => state.statuses.isUpdatingAddress,\n (updateAddressMethodId, isUpdatingAddress) => (methodId?: string) => {\n if (methodId && updateAddressMethodId !== methodId) {\n return false;\n }\n\n return !!isUpdatingAddress;\n },\n );\n\n const isSelectingOption = createSelector(\n (state: ShippingStrategyState) => state.statuses.selectOptionMethodId,\n (state: ShippingStrategyState) => state.statuses.isSelectingOption,\n (selectOptionMethodId, isSelectingOption) => (methodId?: string) => {\n if (methodId && selectOptionMethodId !== methodId) {\n return false;\n }\n\n return !!isSelectingOption;\n },\n );\n\n const isInitializing = createSelector(\n (state: ShippingStrategyState) => state.statuses.initializeMethodId,\n (state: ShippingStrategyState) => state.statuses.isInitializing,\n (initializeMethodId, isInitializing) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return false;\n }\n\n return !!isInitializing;\n },\n );\n\n const isInitialized = createSelector(\n (state: ShippingStrategyState) => state.data,\n (data) => (methodId: string) => {\n return !!(data[methodId] && data[methodId].isInitialized);\n },\n );\n\n const isWidgetInteracting = createSelector(\n (state: ShippingStrategyState) => state.statuses.widgetInteractionMethodId,\n (state: ShippingStrategyState) => state.statuses.isWidgetInteracting,\n (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return false;\n }\n\n return !!isWidgetInteracting;\n },\n );\n\n return memoizeOne((state: ShippingStrategyState = DEFAULT_STATE): ShippingStrategySelector => {\n return {\n getUpdateAddressError: getUpdateAddressError(state),\n getSelectOptionError: getSelectOptionError(state),\n getInitializeError: getInitializeError(state),\n getWidgetInteractionError: getWidgetInteractionError(state),\n isUpdatingAddress: isUpdatingAddress(state),\n isSelectingOption: isSelectingOption(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isWidgetInteracting: isWidgetInteracting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { AddressRequestBody, isAddressEqual } from '../address';\nimport { CartSelector, PhysicalItem } from '../cart';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Consignment from './consignment';\nimport ConsignmentState, { DEFAULT_STATE } from './consignment-state';\nimport ShippingOption from './shipping-option';\n\nexport default interface ConsignmentSelector {\n getConsignments(): Consignment[] | undefined;\n getConsignmentsOrThrow(): Consignment[];\n getConsignmentById(id: string): Consignment | undefined;\n getConsignmentByAddress(address: AddressRequestBody): Consignment | undefined;\n getShippingOption(): ShippingOption | undefined;\n getLoadError(): Error | undefined;\n getCreateError(): Error | undefined;\n getLoadShippingOptionsError(): Error | undefined;\n getUnassignedItems(): PhysicalItem[];\n getUpdateError(consignmentId?: string): Error | undefined;\n getDeleteError(consignmentId?: string): Error | undefined;\n getItemAssignmentError(address: AddressRequestBody): Error | undefined;\n getUpdateShippingOptionError(consignmentId?: string): Error | undefined;\n isLoading(): boolean;\n isLoadingShippingOptions(): boolean;\n isCreating(): boolean;\n isUpdating(consignmentId?: string): boolean;\n isDeleting(consignmentId?: string): boolean;\n isAssigningItems(address: AddressRequestBody): boolean;\n isUpdatingShippingOption(consignmentId?: string): boolean;\n}\n\nexport type ConsignmentSelectorFactory = (\n state: ConsignmentState,\n cart: CartSelector,\n) => ConsignmentSelector;\n\ninterface ConsignmentSelectorDependencies {\n cart: CartSelector;\n}\n\nexport function createConsignmentSelectorFactory(): ConsignmentSelectorFactory {\n const getConsignments = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => consignments,\n );\n\n const getConsignmentsOrThrow = createSelector(getConsignments, (getConsignments) => () => {\n return guard(\n getConsignments(),\n () => new MissingDataError(MissingDataErrorType.MissingConsignments),\n );\n });\n\n const getConsignmentById = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => (id: string) => {\n if (!consignments || !consignments.length) {\n return;\n }\n\n return find(consignments, { id });\n },\n );\n\n const getConsignmentByAddress = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => (address: AddressRequestBody) => {\n if (!consignments || !consignments.length) {\n return;\n }\n\n return find(consignments, (consignment) =>\n isAddressEqual(consignment.shippingAddress, address),\n );\n },\n );\n\n const getShippingOption = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => {\n if (consignments && consignments.length) {\n return consignments[0].selectedShippingOption;\n }\n },\n );\n\n const getLoadError = createSelector(\n (state: ConsignmentState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const getCreateError = createSelector(\n (state: ConsignmentState) => state.errors.createError,\n (error) => () => error,\n );\n\n const getLoadShippingOptionsError = createSelector(\n (state: ConsignmentState) => state.errors.loadShippingOptionsError,\n (error) => () => error,\n );\n\n const getUnassignedItems = createSelector(\n getConsignments,\n (_: ConsignmentState, { cart }: ConsignmentSelectorDependencies) => cart.getCart,\n (getConsignments, getCart) => () => {\n const cart = getCart();\n\n if (!cart) {\n return [];\n }\n\n const assignedLineItemIds = (getConsignments() || []).reduce(\n (itemIds, consignment) => itemIds.concat(consignment.lineItemIds),\n [] as string[],\n );\n\n return (cart.lineItems.physicalItems || []).filter(\n (item) => assignedLineItemIds.indexOf(item.id as string) < 0,\n );\n },\n );\n\n const getUpdateError = createSelector(\n (state: ConsignmentState) => state.errors.updateError,\n (updateError) => (consignmentId?: string) => {\n if (consignmentId) {\n return updateError[consignmentId];\n }\n\n return find(updateError);\n },\n );\n\n const getDeleteError = createSelector(\n (state: ConsignmentState) => state.errors.deleteError,\n (deleteError) => (consignmentId?: string) => {\n if (consignmentId) {\n return deleteError[consignmentId];\n }\n\n return find(deleteError);\n },\n );\n\n const getItemAssignmentError = createSelector(\n getConsignmentByAddress,\n getUpdateError,\n getCreateError,\n (getConsignmentByAddress, getUpdateError, getCreateError) =>\n (address: AddressRequestBody) => {\n const consignment = getConsignmentByAddress(address);\n\n return consignment ? getUpdateError(consignment.id) : getCreateError();\n },\n );\n\n const getUpdateShippingOptionError = createSelector(\n (state: ConsignmentState) => state.errors.updateShippingOptionError,\n (updateShippingOptionError) => (consignmentId?: string) => {\n if (consignmentId) {\n return updateShippingOptionError[consignmentId];\n }\n\n return find(updateShippingOptionError);\n },\n );\n\n const isLoading = createSelector(\n (state: ConsignmentState) => state.statuses.isLoading,\n (isLoading) => () => isLoading === true,\n );\n\n const isLoadingShippingOptions = createSelector(\n (state: ConsignmentState) => state.statuses.isLoadingShippingOptions,\n (isLoadingShippingOptions) => () => isLoadingShippingOptions === true,\n );\n\n const isCreating = createSelector(\n (state: ConsignmentState) => state.statuses.isCreating,\n (isCreating) => () => isCreating === true,\n );\n\n const isUpdating = createSelector(\n (state: ConsignmentState) => state.statuses.isUpdating,\n (isUpdating) => (consignmentId?: string) => {\n if (consignmentId) {\n return isUpdating[consignmentId] === true;\n }\n\n return find(isUpdating) === true;\n },\n );\n\n const isDeleting = createSelector(\n (state: ConsignmentState) => state.statuses.isDeleting,\n (isDeleting) => (consignmentId?: string) => {\n if (consignmentId) {\n return isDeleting[consignmentId] === true;\n }\n\n return find(isDeleting) === true;\n },\n );\n\n const isAssigningItems = createSelector(\n getConsignmentByAddress,\n isUpdating,\n isCreating,\n (getConsignmentByAddress, isUpdating, isCreating) => (address: AddressRequestBody) => {\n const consignment = getConsignmentByAddress(address);\n\n return consignment ? isUpdating(consignment.id) : isCreating();\n },\n );\n\n const isUpdatingShippingOption = createSelector(\n (state: ConsignmentState) => state.statuses.isUpdatingShippingOption,\n (isUpdatingShippingOption) => (consignmentId?: string) => {\n if (consignmentId) {\n return isUpdatingShippingOption[consignmentId] === true;\n }\n\n return find(isUpdatingShippingOption) === true;\n },\n );\n\n return memoizeOne(\n (state: ConsignmentState = DEFAULT_STATE, cart: CartSelector): ConsignmentSelector => {\n return {\n getConsignments: getConsignments(state),\n getConsignmentsOrThrow: getConsignmentsOrThrow(state),\n getConsignmentById: getConsignmentById(state),\n getConsignmentByAddress: getConsignmentByAddress(state),\n getShippingOption: getShippingOption(state),\n getLoadError: getLoadError(state),\n getCreateError: getCreateError(state),\n getLoadShippingOptionsError: getLoadShippingOptionsError(state),\n getUnassignedItems: getUnassignedItems(state, { cart }),\n getUpdateError: getUpdateError(state),\n getDeleteError: getDeleteError(state),\n getItemAssignmentError: getItemAssignmentError(state),\n getUpdateShippingOptionError: getUpdateShippingOptionError(state),\n isLoading: isLoading(state),\n isLoadingShippingOptions: isLoadingShippingOptions(state),\n isCreating: isCreating(state),\n isUpdating: isUpdating(state),\n isDeleting: isDeleting(state),\n isAssigningItems: isAssigningItems(state),\n isUpdatingShippingOption: isUpdatingShippingOption(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { BillingAddressSelector } from '../billing';\nimport { CartSelector } from '../cart';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { CouponSelector, GiftCertificateSelector } from '../coupon';\nimport { CustomerSelector } from '../customer';\nimport { ConsignmentSelector } from '../shipping';\n\nimport Checkout from './checkout';\nimport CheckoutState, { DEFAULT_STATE } from './checkout-state';\n\nexport default interface CheckoutSelector {\n getCheckout(): Checkout | undefined;\n getCheckoutOrThrow(): Checkout;\n getOutstandingBalance(useStoreCredit?: boolean): number | undefined;\n getLoadError(): Error | undefined;\n getUpdateError(): Error | undefined;\n isExecutingSpamCheck(): boolean;\n isLoading(): boolean;\n isUpdating(): boolean;\n}\n\nexport type CheckoutSelectorFactory = (\n state: CheckoutState,\n billingAddress: BillingAddressSelector,\n cart: CartSelector,\n consignments: ConsignmentSelector,\n coupons: CouponSelector,\n customer: CustomerSelector,\n giftCertificates: GiftCertificateSelector,\n) => CheckoutSelector;\n\ninterface CheckoutSelectorDependencies {\n billingAddress: BillingAddressSelector;\n cart: CartSelector;\n consignments: ConsignmentSelector;\n coupons: CouponSelector;\n customer: CustomerSelector;\n giftCertificates: GiftCertificateSelector;\n}\n\nexport function createCheckoutSelectorFactory(): CheckoutSelectorFactory {\n const getCheckout = createSelector(\n (state: CheckoutState) => state.data,\n (_: CheckoutState, { billingAddress }: CheckoutSelectorDependencies) =>\n billingAddress.getBillingAddress,\n (_: CheckoutState, { cart }: CheckoutSelectorDependencies) => cart.getCart,\n (_: CheckoutState, { customer }: CheckoutSelectorDependencies) => customer.getCustomer,\n (_: CheckoutState, { consignments }: CheckoutSelectorDependencies) =>\n consignments.getConsignments,\n (_: CheckoutState, { coupons }: CheckoutSelectorDependencies) => coupons.getCoupons,\n (_: CheckoutState, { giftCertificates }: CheckoutSelectorDependencies) =>\n giftCertificates.getGiftCertificates,\n (\n data,\n getBillingAddress,\n getCart,\n getCustomer,\n getConsignments,\n getCoupons,\n getGiftCertificates,\n ) =>\n () => {\n const billingAddress = getBillingAddress();\n const cart = getCart();\n const customer = getCustomer();\n const consignments = getConsignments() || [];\n const coupons = getCoupons() || [];\n const giftCertificates = getGiftCertificates() || [];\n\n if (!data || !cart || !customer) {\n return;\n }\n\n return {\n ...data,\n billingAddress,\n cart,\n customer,\n consignments,\n coupons,\n giftCertificates,\n };\n },\n );\n\n const getCheckoutOrThrow = createSelector(getCheckout, (getCheckout) => () => {\n return guard(\n getCheckout(),\n () => new MissingDataError(MissingDataErrorType.MissingCheckout),\n );\n });\n\n const getOutstandingBalance = createSelector(\n getCheckout,\n (getCheckout) => (useStoreCredit?: boolean) => {\n const checkout = getCheckout();\n\n if (!checkout) {\n return;\n }\n\n const grandTotal = checkout.grandTotal || 0;\n const storeCredit = checkout.customer.storeCredit || 0;\n\n return useStoreCredit\n ? Math.max(grandTotal - storeCredit, 0)\n : checkout.outstandingBalance;\n },\n );\n\n const getLoadError = createSelector(\n (state: CheckoutState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const getUpdateError = createSelector(\n (state: CheckoutState) => state.errors.updateError,\n (error) => () => error,\n );\n\n const isExecutingSpamCheck = createSelector(\n (state: CheckoutState) => state.statuses.isExecutingSpamCheck,\n (isExecutingSpamCheck) => () => isExecutingSpamCheck === true,\n );\n\n const isLoading = createSelector(\n (state: CheckoutState) => state.statuses.isLoading,\n (isLoading) => () => isLoading === true,\n );\n\n const isUpdating = createSelector(\n (state: CheckoutState) => state.statuses.isUpdating,\n (isUpdating) => () => isUpdating === true,\n );\n\n return memoizeOne(\n (\n state: CheckoutState = DEFAULT_STATE,\n billingAddress: BillingAddressSelector,\n cart: CartSelector,\n consignments: ConsignmentSelector,\n coupons: CouponSelector,\n customer: CustomerSelector,\n giftCertificates: GiftCertificateSelector,\n ): CheckoutSelector => {\n return {\n getCheckout: getCheckout(state, {\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n }),\n getCheckoutOrThrow: getCheckoutOrThrow(state, {\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n }),\n getOutstandingBalance: getOutstandingBalance(state, {\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n }),\n getLoadError: getLoadError(state),\n getUpdateError: getUpdateError(state),\n isExecutingSpamCheck: isExecutingSpamCheck(state),\n isLoading: isLoading(state),\n isUpdating: isUpdating(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { CouponSelector } from '../coupon';\nimport OrderBillingAddressSelector from '../order-billing-address/order-billing-address-selector';\n\nimport Order from './order';\nimport OrderState, { DEFAULT_STATE, OrderMetaState } from './order-state';\n\nexport default interface OrderSelector {\n getOrder(): Order | undefined;\n getOrderOrThrow(): Order;\n getOrderMeta(): OrderMetaState | undefined;\n getLoadError(): Error | undefined;\n getPaymentId(methodId: string): string | undefined;\n isLoading(): boolean;\n}\n\nexport type OrderSelectorFactory = (\n state: OrderState,\n billingAddress: OrderBillingAddressSelector,\n coupons: CouponSelector,\n) => OrderSelector;\n\ninterface OrderSelectorDependencies {\n billingAddress: OrderBillingAddressSelector;\n coupons: CouponSelector;\n}\n\nexport function createOrderSelectorFactory(): OrderSelectorFactory {\n const getOrder = createSelector(\n (state: OrderState) => state.data,\n (_: OrderState, { billingAddress }: OrderSelectorDependencies) =>\n billingAddress.getOrderBillingAddress(),\n (_: OrderState, { coupons }: OrderSelectorDependencies) => coupons.getCoupons(),\n (data, billingAddress, coupons = []) =>\n () => {\n if (!data || !billingAddress) {\n return;\n }\n\n return {\n ...data,\n billingAddress,\n coupons,\n };\n },\n );\n\n const getOrderOrThrow = createSelector(getOrder, (getOrder) => () => {\n return guard(getOrder(), () => new MissingDataError(MissingDataErrorType.MissingOrder));\n });\n\n const getOrderMeta = createSelector(\n (state: OrderState) => state.meta,\n (meta) => () => meta,\n );\n\n const getLoadError = createSelector(\n (state: OrderState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const getPaymentId = createSelector(\n (state: OrderState) => state.data?.payments,\n (payments = []) =>\n (methodId: string) => {\n const currentPayment = payments.find(({ providerId }) => providerId === methodId);\n\n return currentPayment?.paymentId;\n },\n );\n\n const isLoading = createSelector(\n (state: OrderState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne(\n (\n state: OrderState = DEFAULT_STATE,\n billingAddress: OrderBillingAddressSelector,\n coupons: CouponSelector,\n ): OrderSelector => {\n return {\n getOrder: getOrder(state, { billingAddress, coupons }),\n getOrderOrThrow: getOrderOrThrow(state, { billingAddress, coupons }),\n getOrderMeta: getOrderMeta(state),\n getLoadError: getLoadError(state),\n getPaymentId: getPaymentId(state),\n isLoading: isLoading(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport StoreCreditState, { DEFAULT_STATE } from './store-credit-state';\n\nexport default interface StoreCreditSelector {\n getApplyError(): RequestError | undefined;\n isApplying(): boolean;\n}\n\nexport type StoreCreditSelectorFactory = (state: StoreCreditState) => StoreCreditSelector;\n\nexport function createStoreCreditSelectorFactory(): StoreCreditSelectorFactory {\n const getApplyError = createSelector(\n (state: StoreCreditState) => state.errors.applyError,\n (error) => () => error,\n );\n\n const isApplying = createSelector(\n (state: StoreCreditState) => !!state.statuses.isApplying,\n (status) => () => status,\n );\n\n return memoizeOne((state: StoreCreditState = DEFAULT_STATE): StoreCreditSelector => {\n return {\n getApplyError: getApplyError(state),\n isApplying: isApplying(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport SubscriptionsState, { DEFAULT_STATE } from './subscriptions-state';\n\nexport default interface SubscriptionsSelector {\n getUpdateError(): Error | undefined;\n isUpdating(): boolean;\n}\n\nexport type SubscriptionsSelectorFactory = (state: SubscriptionsState) => SubscriptionsSelector;\n\nexport function createSubscriptionsSelectorFactory(): SubscriptionsSelectorFactory {\n const getUpdateError = createSelector(\n (state: SubscriptionsState) => state.errors.updateError,\n (error) => () => error,\n );\n\n const isUpdating = createSelector(\n (state: SubscriptionsState) => !!state.statuses.isUpdating,\n (status) => () => status,\n );\n\n return memoizeOne((state: SubscriptionsState = DEFAULT_STATE): SubscriptionsSelector => {\n return {\n getUpdateError: getUpdateError(state),\n isUpdating: isUpdating(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport { Extension, ExtensionRegion } from './extension';\nimport { DEFAULT_STATE, ExtensionState } from './extension-state';\n\nexport interface ExtensionSelector {\n getExtensions(): Extension[] | undefined;\n getExtensionByRegion(region: ExtensionRegion): Extension | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type ExtensionSelectorFactory = (state: ExtensionState) => ExtensionSelector;\n\nexport function createExtensionSelectorFactory(): ExtensionSelectorFactory {\n const getExtensions = createSelector(\n (state: ExtensionState) => state.data,\n (data) => () => data,\n );\n\n const getExtensionByRegion = createSelector(\n (state: ExtensionState) => state.data,\n (data) => (region: ExtensionRegion) => data?.find((e) => e.region === region),\n );\n\n const getLoadError = createSelector(\n (state: ExtensionState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: ExtensionState) => state.statuses.isLoading,\n (isLoading) => () => !!isLoading,\n );\n\n return memoizeOne((state: ExtensionState = DEFAULT_STATE): ExtensionSelector => {\n return {\n getExtensions: getExtensions(state),\n getExtensionByRegion: getExtensionByRegion(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { createDataStore } from '@bigcommerce/data-store';\n\nimport { createRequestErrorFactory } from '../common/error';\n\nimport CheckoutStore, { CheckoutStoreOptions } from './checkout-store';\nimport CheckoutStoreState from './checkout-store-state';\nimport createActionTransformer from './create-action-transformer';\nimport createCheckoutStoreReducer from './create-checkout-store-reducer';\nimport { createInternalCheckoutSelectorsFactory } from './create-internal-checkout-selectors';\n\nexport default function createCheckoutStore(\n initialState: Partial = {},\n options?: CheckoutStoreOptions,\n): CheckoutStore {\n const actionTransformer = createActionTransformer(createRequestErrorFactory());\n const createInternalCheckoutSelectors = createInternalCheckoutSelectorsFactory();\n const stateTransformer = (state: CheckoutStoreState) => createInternalCheckoutSelectors(state);\n\n return createDataStore(createCheckoutStoreReducer(), initialState, {\n actionTransformer,\n stateTransformer,\n ...options,\n });\n}\n","import { PaymentMethodInvalidError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnrecoverableError } from './errors';\nimport RequestErrorFactory from './request-error-factory';\n\nexport default function createRequestErrorFactory(): RequestErrorFactory {\n const factory = new RequestErrorFactory();\n\n const unrecoverableErrorTypes = [\n 'catalog_only',\n 'empty_cart',\n 'invalid_order_id',\n 'invalid_order_token',\n 'missing_order_token',\n 'missing_provider_token',\n 'missing_shipping_method',\n 'order_completion_error',\n 'order_could_not_be_finalized_error',\n 'order_create_failed',\n 'provider_fatal_error',\n 'provider_setup_error',\n 'stock_too_low',\n ];\n\n unrecoverableErrorTypes.forEach((type) => {\n factory.register(type, (response, message) => new UnrecoverableError(response, message));\n });\n\n factory.register(\n 'invalid_payment_provider',\n (response) => new PaymentMethodInvalidError(response),\n );\n factory.register(\n 'payment_config_not_found',\n (response) => new PaymentMethodInvalidError(response),\n );\n\n return factory;\n}\n","import { Action } from '@bigcommerce/data-store';\nimport { from, Observable, Subscribable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { RequestErrorFactory } from '../common/error';\n\nexport default function createActionTransformer(\n requestErrorFactory: RequestErrorFactory,\n): (action: Subscribable) => Observable {\n return (action$) =>\n from(action$).pipe(\n catchError((action) => {\n if (action instanceof Error || action.payload instanceof Error) {\n throw action;\n }\n\n if (isResponse(action.payload)) {\n const message = action.payload.body && action.payload.body.detail;\n\n throw {\n ...action,\n payload: requestErrorFactory.createError(action.payload, message),\n };\n }\n\n throw action;\n }),\n );\n}\n\nfunction isResponse(object: any) {\n if (!object || typeof object !== 'object') {\n return false;\n }\n\n return ['body', 'headers', 'status', 'statusText'].every((key) =>\n Object.prototype.hasOwnProperty.call(object, key),\n );\n}\n","import { Action, combineReducers, Reducer } from '@bigcommerce/data-store';\n\nimport { billingAddressReducer } from '../billing';\nimport { cartReducer } from '../cart';\nimport { checkoutButtonReducer } from '../checkout-buttons';\nimport { configReducer } from '../config';\nimport { couponReducer, giftCertificateReducer } from '../coupon';\nimport { customerReducer, customerStrategyReducer } from '../customer';\nimport { extensionReducer } from '../extension';\nimport { formFieldsReducer } from '../form';\nimport { countryReducer } from '../geography';\nimport { orderReducer } from '../order';\nimport { orderBillingAddressReducer } from '../order-billing-address';\nimport { paymentMethodReducer, paymentReducer, paymentStrategyReducer } from '../payment';\nimport { instrumentReducer } from '../payment/instrument';\nimport { remoteCheckoutReducer } from '../remote-checkout';\nimport {\n consignmentReducer,\n pickupOptionReducer,\n shippingCountryReducer,\n shippingStrategyReducer,\n} from '../shipping';\nimport { signInEmailReducer } from '../signin-email';\nimport { storeCreditReducer } from '../store-credit';\nimport { subscriptionsReducer } from '../subscription';\n\nimport checkoutReducer from './checkout-reducer';\nimport CheckoutStoreState from './checkout-store-state';\n\nexport default function createCheckoutStoreReducer(): Reducer {\n return combineReducers({\n billingAddress: billingAddressReducer,\n cart: cartReducer,\n checkout: checkoutReducer,\n checkoutButton: checkoutButtonReducer,\n config: configReducer,\n consignments: consignmentReducer,\n countries: countryReducer,\n coupons: couponReducer,\n customer: customerReducer,\n customerStrategies: customerStrategyReducer,\n extensions: extensionReducer,\n formFields: formFieldsReducer,\n giftCertificates: giftCertificateReducer,\n instruments: instrumentReducer,\n orderBillingAddress: orderBillingAddressReducer,\n order: orderReducer,\n payment: paymentReducer,\n paymentMethods: paymentMethodReducer,\n paymentStrategies: paymentStrategyReducer,\n pickupOptions: pickupOptionReducer,\n remoteCheckout: remoteCheckoutReducer,\n shippingCountries: shippingCountryReducer,\n shippingStrategies: shippingStrategyReducer,\n signInEmail: signInEmailReducer,\n subscriptions: subscriptionsReducer,\n storeCredit: storeCreditReducer,\n });\n}\n","import cacheAction from './cache-action';\nimport isActionOptions from './is-action-options';\n\nexport default function cachableActionDecorator any>(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor {\n const memoizedMethods = new WeakMap();\n\n function decorateMethod(this: object, method: TMethod): TMethod {\n return ((...args: any[]) => {\n const lastArg = args[args.length - 1];\n const { useCache } = isActionOptions(lastArg) ? lastArg : { useCache: false };\n\n if (!useCache) {\n return method.call(this, ...args);\n }\n\n const instanceMethods = memoizedMethods.get(this) || {};\n\n if (!memoizedMethods.get(this)) {\n memoizedMethods.set(this, instanceMethods);\n }\n\n if (!instanceMethods[key]) {\n instanceMethods[key] = cacheAction(method);\n }\n\n return instanceMethods[key].call(this, ...args);\n }) as TMethod;\n }\n\n return {\n get() {\n if (typeof descriptor.value !== 'function') {\n throw new Error('Decorator should be used in functions');\n }\n\n const value = decorateMethod.call(this, descriptor.value);\n\n Object.defineProperty(this, key, { ...descriptor, value });\n\n return value;\n },\n };\n}\n","import ActionOptions from './action-options';\n\nexport default function isActionOptions(param: any): param is ActionOptions {\n return param && typeof param.useCache === 'boolean';\n}\n","import { Action, ThunkAction } from '@bigcommerce/data-store';\nimport { memoize } from '@bigcommerce/memoize';\nimport { from, Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nexport default function cacheAction(fn: TFunction): TFunction {\n function decoratedFn(this: any, ...args: any[]) {\n const action = fn.call(this, ...args);\n\n if (action instanceof Observable) {\n return from(action).pipe(shareReplay());\n }\n\n if (typeof action === 'function') {\n return memoize((store) => from(action(store)).pipe(shareReplay()));\n }\n\n return action;\n }\n\n return memoize(decoratedFn as TFunction);\n}\n\ntype CreateActionFn = (...args: any[]) => Observable | ThunkAction | Action;\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { filter } from 'lodash';\nimport { Observable, Observer } from 'rxjs';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport {\n LoadPaymentMethodAction,\n LoadPaymentMethodsAction,\n PaymentMethodActionType,\n} from './payment-method-actions';\nimport PaymentMethodRequestSender from './payment-method-request-sender';\nimport { isApplePayWindow } from './strategies/apple-pay';\n\nimport { PaymentMethod } from '.';\n\nconst APPLEPAYID = 'applepay';\n\nexport default class PaymentMethodActionCreator {\n constructor(private _requestSender: PaymentMethodRequestSender) {}\n\n loadPaymentMethods(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const cart = state.cart.getCartOrThrow();\n\n observer.next(createAction(PaymentMethodActionType.LoadPaymentMethodsRequested));\n\n this._requestSender\n .loadPaymentMethods({\n ...options,\n params: { ...options?.params, cartId: cart.id },\n })\n .then((response) => {\n const meta = {\n deviceSessionId: response.headers['x-device-session-id'],\n sessionHash: response.headers['x-session-hash'],\n };\n const methods = response.body;\n const filteredMethods = Array.isArray(methods)\n ? this._filterApplePay(methods)\n : methods;\n\n observer.next(\n createAction(\n PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n filteredMethods,\n meta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n PaymentMethodActionType.LoadPaymentMethodsFailed,\n response,\n ),\n );\n });\n });\n }\n\n @cachableAction\n loadPaymentMethod(\n methodId: string,\n options?: RequestOptions & ActionOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const cartId = state.cart.getCart()?.id;\n const params = cartId ? { ...options?.params, cartId } : { ...options?.params };\n\n observer.next(\n createAction(PaymentMethodActionType.LoadPaymentMethodRequested, undefined, {\n methodId,\n }),\n );\n\n this._requestSender\n .loadPaymentMethod(methodId, { ...options, params })\n .then((response) => {\n observer.next(\n createAction(\n PaymentMethodActionType.LoadPaymentMethodSucceeded,\n response.body,\n { methodId },\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n PaymentMethodActionType.LoadPaymentMethodFailed,\n response,\n { methodId },\n ),\n );\n });\n });\n }\n\n private _filterApplePay(methods: PaymentMethod[]): PaymentMethod[] {\n return filter(methods, (method) => {\n if (method.id === APPLEPAYID && !isApplePayWindow(window)) {\n return false;\n }\n\n return true;\n });\n }\n}\n","export interface ApplePayWindow extends Window {\n ApplePaySession: ApplePaySession;\n}\n\nexport default function isApplePayWindow(window: Window): window is ApplePayWindow {\n return 'ApplePaySession' in window;\n}\n\nexport function assertApplePayWindow(window: Window): asserts window is ApplePayWindow {\n if (!isApplePayWindow(window)) {\n throw new Error('Apple pay is not supported');\n }\n}\n","enum ContentType {\n Json = 'application/json',\n JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\n","export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport PaymentMethod from './payment-method';\n\nexport default class PaymentMethodRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadPaymentMethods({ timeout, params }: RequestOptions = {}): Promise<\n Response\n > {\n const url = '/api/storefront/payments';\n\n return this._requestSender.get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n params,\n });\n }\n\n loadPaymentMethod(\n methodId: string,\n { timeout, params }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/payments/${methodId}`;\n\n return this._requestSender.get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n params,\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/script-loader\");","import { Action, createErrorAction } from '@bigcommerce/data-store';\nimport { concat, Observable, of, throwError } from 'rxjs';\n\nexport default function throwErrorAction(\n type: TType,\n error?: TPayload,\n meta?: TMeta,\n): Observable> {\n if (isErrorAction(error)) {\n return concat(of(error), throwError(createErrorAction(type, error.payload, meta)));\n }\n\n return throwError(createErrorAction(type, error, meta));\n}\n\nfunction isErrorAction(action: any): action is Action {\n return action && action.type && action.error;\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class UnableToContinueAsGuestError extends StandardError {\n constructor(message?: string) {\n super(\n message || 'Unable to continue as a guest because the customer is already signed in.',\n );\n\n this.name = 'UnableToContinueAsGuestError';\n this.type = 'unable_to_continue_as_guest';\n }\n}\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Response } from '@bigcommerce/request-sender';\nimport { concat, defer, empty, merge, Observable, Observer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { Checkout, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { GuestCredentials } from '../customer';\nimport { SubscriptionsActionCreator, UpdateSubscriptionsAction } from '../subscription';\n\nimport { BillingAddressUpdateRequestBody } from './billing-address';\nimport {\n BillingAddressActionType,\n ContinueAsGuestAction,\n UpdateBillingAddressAction,\n} from './billing-address-actions';\nimport { UnableToContinueAsGuestError } from './errors';\n\nimport { BillingAddressRequestSender } from '.';\n\nexport default class BillingAddressActionCreator {\n constructor(\n private _requestSender: BillingAddressRequestSender,\n private _subscriptionActionCreator: SubscriptionsActionCreator,\n ) {}\n\n continueAsGuest(\n credentials: GuestCredentials,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const customer = state.customer.getCustomer();\n\n if (customer && !customer.isGuest) {\n throw new UnableToContinueAsGuestError();\n }\n\n const billingAddress = state.billingAddress.getBillingAddress();\n\n let billingAddressRequestBody: Partial;\n\n if (!billingAddress) {\n billingAddressRequestBody = credentials;\n } else {\n const { country, ...existingBillingAddressRequestBody } = billingAddress;\n\n billingAddressRequestBody = {\n ...existingBillingAddressRequestBody,\n ...credentials,\n };\n }\n\n return merge(\n concat(\n of(createAction(BillingAddressActionType.ContinueAsGuestRequested)),\n defer(async () => {\n const { body } = await this._createOrUpdateBillingAddress(\n checkout.id,\n billingAddressRequestBody,\n options,\n );\n\n return createAction(\n BillingAddressActionType.ContinueAsGuestSucceeded,\n body,\n );\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(BillingAddressActionType.ContinueAsGuestFailed, error),\n ),\n ),\n this._updateCustomerConsent(credentials, options),\n );\n };\n }\n\n updateAddress(\n address: Partial,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(BillingAddressActionType.UpdateBillingAddressRequested));\n\n const billingAddress = state.billingAddress.getBillingAddress();\n\n // If email is not present in the address provided by the client, then\n // fall back to the stored email as it could have been set separately\n // using a convenience method. We can't rely on billingAddress having\n // an ID to consider that there's a preexisting email, as billingAddress\n // object from Order doesn't have an ID.\n const billingAddressRequestBody = {\n ...address,\n email:\n typeof address.email === 'undefined' && billingAddress\n ? billingAddress.email\n : address.email,\n };\n\n if (billingAddress && billingAddress.id) {\n billingAddressRequestBody.id = billingAddress.id;\n }\n\n this._createOrUpdateBillingAddress(checkout.id, billingAddressRequestBody, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n BillingAddressActionType.UpdateBillingAddressSucceeded,\n body,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n BillingAddressActionType.UpdateBillingAddressFailed,\n response,\n ),\n );\n });\n });\n }\n\n private _updateCustomerConsent(\n { email, acceptsAbandonedCartEmails, acceptsMarketingNewsletter }: GuestCredentials,\n options?: RequestOptions,\n ): Observable {\n if (\n (acceptsAbandonedCartEmails === undefined || acceptsAbandonedCartEmails === null) &&\n (acceptsMarketingNewsletter === undefined || acceptsMarketingNewsletter === null)\n ) {\n return empty();\n }\n\n return this._subscriptionActionCreator.updateSubscriptions(\n {\n email,\n acceptsMarketingNewsletter: acceptsMarketingNewsletter || false,\n acceptsAbandonedCartEmails: acceptsAbandonedCartEmails || false,\n },\n options,\n );\n }\n\n private _createOrUpdateBillingAddress(\n checkoutId: string,\n address: Partial,\n options?: RequestOptions,\n ): Promise> {\n if (!address.id) {\n return this._requestSender.createAddress(checkoutId, address, options);\n }\n\n return this._requestSender.updateAddress(checkoutId, address, options);\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { AddressRequestBody } from '../address';\nimport { Checkout } from '../checkout';\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { BillingAddressUpdateRequestBody } from './billing-address';\n\nconst DEFAULT_PARAMS = {\n include: [\n 'cart.lineItems.physicalItems.options',\n 'cart.lineItems.digitalItems.options',\n 'customer',\n 'promotions.banners',\n ].join(','),\n};\n\nexport default class BillingAddressRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createAddress(\n checkoutId: string,\n address: Partial,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/billing-address`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, {\n body: address,\n params: DEFAULT_PARAMS,\n headers,\n timeout,\n });\n }\n\n updateAddress(\n checkoutId: string,\n address: Partial,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const { id, ...body } = address;\n const url = `/api/storefront/checkouts/${checkoutId}/billing-address/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.put(url, { params: DEFAULT_PARAMS, body, headers, timeout });\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { BuyNowCartRequestBody, Cart } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class CartRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createBuyNowCart(\n body: BuyNowCartRequestBody,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/api/storefront/carts';\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, { body, headers, timeout });\n }\n}\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, merge, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { ConfigActionCreator } from '../config';\nimport { FormFieldsActionCreator } from '../form';\n\nimport { CheckoutRequestBody } from './checkout';\nimport { CheckoutActionType, LoadCheckoutAction, UpdateCheckoutAction } from './checkout-actions';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport default class CheckoutActionCreator {\n constructor(\n private _checkoutRequestSender: CheckoutRequestSender,\n private _configActionCreator: ConfigActionCreator,\n private _formFieldsActionCreator: FormFieldsActionCreator,\n ) {}\n\n loadCheckout(id: string, options?: RequestOptions): Observable {\n return concat(\n of(createAction(CheckoutActionType.LoadCheckoutRequested)),\n merge(\n this._configActionCreator.loadConfig({\n ...options,\n useCache: true,\n params: { ...options?.params, checkoutId: id },\n }),\n this._formFieldsActionCreator.loadFormFields({ ...options, useCache: true }),\n defer(() =>\n this._checkoutRequestSender\n .loadCheckout(id, options)\n .then(({ body }) =>\n createAction(CheckoutActionType.LoadCheckoutSucceeded, body),\n ),\n ),\n ),\n ).pipe(\n catchError((error) => throwErrorAction(CheckoutActionType.LoadCheckoutFailed, error)),\n );\n }\n\n loadDefaultCheckout(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(CheckoutActionType.LoadCheckoutRequested)),\n merge(\n this._configActionCreator.loadConfig(),\n this._formFieldsActionCreator.loadFormFields({ ...options, useCache: true }),\n ),\n defer(async () => {\n const state = store.getState();\n const context = state.config.getContextConfig();\n\n if (!context || !context.checkoutId) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n }\n\n const { body } = await this._checkoutRequestSender.loadCheckout(\n context.checkoutId,\n options,\n );\n\n return createAction(CheckoutActionType.LoadCheckoutSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CheckoutActionType.LoadCheckoutFailed, error),\n ),\n );\n }\n\n updateCheckout(\n body: CheckoutRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n new Observable((observer) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(CheckoutActionType.UpdateCheckoutRequested));\n\n this._checkoutRequestSender\n .updateCheckout(checkout.id, body, options)\n .then(({ body }) => {\n observer.next(\n createAction(CheckoutActionType.UpdateCheckoutSucceeded, body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(CheckoutActionType.UpdateCheckoutFailed, response),\n );\n });\n });\n }\n\n loadCurrentCheckout(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return this.loadCheckout(checkout.id, options);\n };\n }\n}\n","import { uniq } from 'lodash';\n\nexport default function joinIncludes(includes: T[]): string {\n return uniq(includes).join(',');\n}\n","import joinIncludes from './join-includes';\nimport mergeIncludes from './merge-includes';\n\n/**\n * Joins or merges a base list of includes with a set of additional includes.\n */\nexport default function joinOrMergeIncludes(\n baseIncludes: T[],\n includeDictionaryOrList: { [key in T]?: boolean } | T[] = [],\n): string {\n return Array.isArray(includeDictionaryOrList)\n ? joinIncludes([...baseIncludes, ...includeDictionaryOrList])\n : mergeIncludes(baseIncludes, includeDictionaryOrList);\n}\n","import { difference, filter, keys, pickBy } from 'lodash';\n\nimport joinIncludes from './join-includes';\n\n/**\n * Merges includes given a list of base includes and a dictionary\n * of includes\n */\nexport default function mergeIncludes(\n baseIncludes: T[],\n includesDictionary?: { [key in T]?: boolean },\n): string {\n const deletions = keys(pickBy(includesDictionary, (on) => !on));\n const additions = keys(filter(includesDictionary));\n\n return joinIncludes([...difference(baseIncludes, deletions), ...additions]);\n}\n","const CHECKOUT_DEFAULT_INCLUDES = [\n 'cart.lineItems.physicalItems.options',\n 'cart.lineItems.digitalItems.options',\n 'customer',\n 'customer.customerGroup',\n 'payments',\n 'promotions.banners',\n];\n\nexport default CHECKOUT_DEFAULT_INCLUDES;\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 when we are unable to retrieve a checkout object from the\n * server using the provided ID. It could be because the shopper does not have\n * permission to view the object, or the ID itself is invalid.\n */\nexport default class CheckoutNotAvailableError extends RequestError {\n constructor(response: Response) {\n super(response, { message: response.body.title });\n\n this.name = 'CheckoutNotAvailableError';\n this.type = 'checkout_not_available';\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n joinOrMergeIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport Checkout, { CheckoutRequestBody } from './checkout';\nimport CHECKOUT_DEFAULT_INCLUDES from './checkout-default-includes';\nimport CheckoutParams from './checkout-params';\nimport { CheckoutNotAvailableError } from './errors';\n\nexport default class CheckoutRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadCheckout(\n id: string,\n { params: { include } = {}, timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkout/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender\n .get(url, {\n params: {\n include: joinOrMergeIncludes(CHECKOUT_DEFAULT_INCLUDES, include),\n },\n headers,\n timeout,\n })\n .catch((error) => {\n if (error.status >= 400 && error.status < 500) {\n throw new CheckoutNotAvailableError(error);\n }\n\n throw error;\n });\n }\n\n updateCheckout(\n id: string,\n body: CheckoutRequestBody,\n { params: { include } = {}, timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkout/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.put(url, {\n params: {\n include: joinOrMergeIncludes(CHECKOUT_DEFAULT_INCLUDES, include),\n },\n body,\n headers,\n timeout,\n });\n }\n}\n","import { isEqual } from 'lodash';\n\nimport { PartialDeep } from '../common/types';\n\nimport Cart from './cart';\n\nexport default class CartComparator {\n isEqual(cartA: Cart, cartB: Cart): boolean {\n return isEqual(this._normalize(cartA), this._normalize(cartB));\n }\n\n private _normalize(cart: Cart): PartialDeep {\n return {\n cartAmount: cart.cartAmount,\n currency: cart.currency,\n id: cart.id,\n lineItems: {\n digitalItems: cart.lineItems.digitalItems\n .slice()\n .sort((itemA, itemB) =>\n `${itemA.productId}${itemA.variantId}`.localeCompare(\n `${itemB.productId}${itemB.variantId}`,\n ),\n )\n .map((item) => ({\n extendedSalePrice: item.extendedSalePrice,\n productId: item.productId,\n quantity: item.quantity,\n variantId: item.variantId,\n })),\n giftCertificates: cart.lineItems.giftCertificates\n .slice()\n .sort((itemA, itemB) => `${itemA.id}`.localeCompare(`${itemB.id}`))\n .map((item) => ({\n amount: item.amount,\n recipient: item.recipient,\n })),\n physicalItems: cart.lineItems.physicalItems\n .slice()\n .sort((itemA, itemB) =>\n `${itemA.productId}${itemA.variantId}`.localeCompare(\n `${itemB.productId}${itemB.variantId}`,\n ),\n )\n .map((item) => ({\n extendedSalePrice: item.extendedSalePrice,\n productId: item.productId,\n quantity: item.quantity,\n variantId: item.variantId,\n giftWrapping: item.giftWrapping,\n })),\n },\n };\n }\n}\n","import { ComparableCheckout } from '../../checkout';\nimport { StandardError } from '../../common/error/errors';\n\nexport default class CartChangedError extends StandardError {\n /**\n * @alpha\n * Please note that this option is currently in an early stage of\n * development. Therefore the API is unstable and not ready for public\n * consumption.\n */\n data: { previous: ComparableCheckout; updated: ComparableCheckout };\n\n constructor(previous: ComparableCheckout, updated: ComparableCheckout) {\n super(\n 'An update to your shopping cart has been detected and your available shipping costs have been updated.',\n );\n\n this.name = 'CartChangedError';\n this.type = 'cart_changed';\n this.data = {\n previous,\n updated,\n };\n }\n}\n","import { isEqual, map } from 'lodash';\n\nimport { Cart, CartComparator } from '../cart';\nimport { CartChangedError } from '../cart/errors';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { Coupon, GiftCertificate } from '../coupon';\n\nimport Checkout from './checkout';\nimport CheckoutRequestSender from './checkout-request-sender';\n\nexport type ComparableCheckout = Pick<\n Checkout,\n 'outstandingBalance' | 'coupons' | 'giftCertificates'\n> & {\n cart: Partial;\n};\n\nexport default class CheckoutValidator {\n constructor(private _checkoutRequestSender: CheckoutRequestSender) {}\n\n validate(checkout?: Checkout, options?: RequestOptions): Promise {\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return this._checkoutRequestSender.loadCheckout(checkout.id, options).then((response) => {\n const comparator = new CartComparator();\n\n if (\n checkout.outstandingBalance === response.body.outstandingBalance &&\n this._compareCoupons(checkout.coupons, response.body.coupons) &&\n this._compareGiftCertificates(\n checkout.giftCertificates,\n response.body.giftCertificates,\n ) &&\n comparator.isEqual(checkout.cart, response.body.cart)\n ) {\n return;\n }\n\n throw new CartChangedError(\n this._getComparableCheckout(checkout),\n this._getComparableCheckout(response.body),\n );\n });\n }\n\n private _compareCoupons(couponsA: Coupon[], couponsB: Coupon[]): boolean {\n return isEqual(map(couponsA, 'code'), map(couponsB, 'code'));\n }\n\n private _compareGiftCertificates(\n giftCertificatesA: GiftCertificate[],\n giftCertificatesB: GiftCertificate[],\n ): boolean {\n return isEqual(map(giftCertificatesA, 'code'), map(giftCertificatesB, 'code'));\n }\n\n private _getComparableCheckout(checkout: Checkout): ComparableCheckout {\n const { cart, coupons, giftCertificates, outstandingBalance } = checkout;\n\n return {\n cart: {\n cartAmount: cart.cartAmount,\n currency: cart.currency,\n lineItems: cart.lineItems,\n },\n coupons,\n giftCertificates,\n outstandingBalance,\n };\n }\n}\n","import { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport { ConfigActionType, LoadConfigAction } from './config-actions';\n\nimport { ConfigRequestSender } from '.';\n\nexport default class ConfigActionCreator {\n constructor(private _configRequestSender: ConfigRequestSender) {}\n\n @cachableAction\n loadConfig(options?: RequestOptions & ActionOptions): Observable {\n return Observable.create((observer: Observer) => {\n observer.next(createAction(ConfigActionType.LoadConfigRequested));\n\n this._configRequestSender\n .loadConfig(options)\n .then((response) => {\n observer.next(\n createAction(ConfigActionType.LoadConfigSucceeded, response.body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(createErrorAction(ConfigActionType.LoadConfigFailed, response));\n });\n });\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { CheckoutNotAvailableError } from '../checkout/errors';\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport Config from './config';\n\nexport default class ConfigRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadConfig({ timeout, params }: RequestOptions = {}): Promise> {\n const url = '/api/storefront/checkout-settings';\n\n return this._requestSender\n .get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n params,\n })\n .catch((error) => {\n if (error.status >= 400 && error.status < 500) {\n throw new CheckoutNotAvailableError(error);\n }\n\n throw error;\n });\n }\n}\n","import { ExecuteSucceededAction, SpamProtectionAction } from './spam-protection-actions';\n\nexport default function isSpamProtectionExecuteSucceededAction(\n action: SpamProtectionAction,\n): action is ExecuteSucceededAction {\n const succeededAction = action as ExecuteSucceededAction;\n\n return (\n typeof succeededAction === 'object' &&\n typeof succeededAction.payload === 'object' &&\n typeof succeededAction.payload.token === 'string'\n );\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, Observable, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { CheckoutActionCreator, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport {\n isSpamProtectionExecuteSucceededAction,\n SpamProtectionActionCreator,\n} from '../spam-protection';\n\nimport CustomerAccountRequestBody, { CustomerAddressRequestBody } from './customer-account';\nimport {\n CreateCustomerAction,\n CreateCustomerAddressAction,\n CustomerActionType,\n SignInCustomerAction,\n SignOutCustomerAction,\n} from './customer-actions';\nimport CustomerCredentials from './customer-credentials';\nimport CustomerRequestSender from './customer-request-sender';\n\nexport default class CustomerActionCreator {\n constructor(\n private _customerRequestSender: CustomerRequestSender,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _spamProtectionActionCreator: SpamProtectionActionCreator,\n ) {}\n\n createCustomer(\n customerAccount: CustomerAccountRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const config = state.config.getStoreConfigOrThrow();\n const { isStorefrontSpamProtectionEnabled } = config.checkoutSettings;\n\n const createCustomer = (token?: string) =>\n from(\n this._customerRequestSender.createAccount(\n { ...customerAccount, token },\n options,\n ),\n ).pipe(\n switchMap(() =>\n concat(\n this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n of(createAction(CustomerActionType.CreateCustomerSucceeded)),\n ),\n ),\n );\n\n return concat(\n of(createAction(CustomerActionType.CreateCustomerRequested)),\n isStorefrontSpamProtectionEnabled\n ? from(this._spamProtectionActionCreator.execute()(store)).pipe(\n switchMap((action) =>\n isSpamProtectionExecuteSucceededAction(action)\n ? concat(of(action), createCustomer(action.payload?.token))\n : of(action),\n ),\n )\n : createCustomer(),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.CreateCustomerFailed, error),\n ),\n );\n };\n }\n\n createAddress(\n customerAddress: CustomerAddressRequestBody,\n options?: RequestOptions,\n ): Observable {\n return concat(\n of(createAction(CustomerActionType.CreateCustomerAddressRequested)),\n defer(async () => {\n const { body } = await this._customerRequestSender.createAddress(\n customerAddress,\n options,\n );\n\n return createAction(CustomerActionType.CreateCustomerAddressSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.CreateCustomerAddressFailed, error),\n ),\n );\n }\n\n signInCustomer(\n credentials: CustomerCredentials,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(CustomerActionType.SignInCustomerRequested)),\n from(this._customerRequestSender.signInCustomer(credentials, options)).pipe(\n switchMap(({ body }) =>\n concat(\n this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n of(createAction(CustomerActionType.SignInCustomerSucceeded, body.data)),\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.SignInCustomerFailed, error),\n ),\n );\n }\n\n signOutCustomer(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(CustomerActionType.SignOutCustomerRequested)),\n from(this._customerRequestSender.signOutCustomer(options)).pipe(\n switchMap(({ body }) =>\n concat(\n this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n of(\n createAction(\n CustomerActionType.SignOutCustomerSucceeded,\n body.data,\n ),\n ),\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.SignOutCustomerFailed, error),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport Customer from './customer';\nimport { CustomerAccountInternalRequestBody, CustomerAddressRequestBody } from './customer-account';\nimport CustomerCredentials from './customer-credentials';\nimport { InternalCustomerResponseBody } from './internal-customer-responses';\n\nexport default class CustomerRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createAccount(\n customerAccount: CustomerAccountInternalRequestBody,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/api/storefront/customer';\n\n return this._requestSender.post(url, {\n timeout,\n headers: SDK_VERSION_HEADERS,\n body: customerAccount,\n });\n }\n\n createAddress(\n customerAddress: CustomerAddressRequestBody,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/customer-address`;\n\n return this._requestSender.post(url, {\n timeout,\n headers: SDK_VERSION_HEADERS,\n body: customerAddress,\n });\n }\n\n signInCustomer(\n credentials: CustomerCredentials,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/internalapi/v1/checkout/customer';\n\n return this._requestSender.post(url, {\n timeout,\n headers: SDK_VERSION_HEADERS,\n body: credentials,\n });\n }\n\n signOutCustomer({ timeout }: RequestOptions = {}): Promise<\n Response\n > {\n const url = '/internalapi/v1/checkout/customer';\n\n return this._requestSender.delete(url, { timeout, headers: SDK_VERSION_HEADERS });\n }\n}\n","import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\n\nimport { FormFieldsActionType, LoadFormFieldsAction } from './form-fields-actions';\nimport FormFieldsRequestSender from './form-fields-request-sender';\n\nexport default class FormFieldsActionCreator {\n constructor(private _formFieldsRequestSender: FormFieldsRequestSender) {}\n\n @cachableAction\n loadFormFields(options?: RequestOptions & ActionOptions): Observable {\n return concat(\n of(createAction(FormFieldsActionType.LoadFormFieldsRequested)),\n defer(async () => {\n const { body } = await this._formFieldsRequestSender.loadFields(options);\n\n return createAction(FormFieldsActionType.LoadFormFieldsSucceeded, body);\n }),\n ).pipe(\n catchError((response) =>\n throwErrorAction(FormFieldsActionType.LoadFormFieldsFailed, response),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { FormFields } from './form-field';\n\nexport default class FormFieldsRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadFields({ timeout }: RequestOptions = {}): Promise> {\n const url = '/api/storefront/form-fields';\n\n return this._requestSender.get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n });\n }\n}\n","export default class CancellablePromise {\n promise: Promise;\n cancel!: (reason?: any) => void;\n\n constructor(promise: Promise) {\n const cancellable = new Promise((_, reject) => {\n this.cancel = reject;\n });\n\n this.promise = Promise.race([promise, cancellable]);\n }\n}\n","import { StandardError } from '../../error/errors';\n\nexport default class UnexpectedDetachmentError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the required element is unexpectedly detached from the page.',\n );\n\n this.name = 'UnexpectedDetachmentError';\n this.type = 'unexpected_detachment';\n }\n}\n","import { CancellablePromise } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\nexport default class DetachmentObserver {\n constructor(private _mutationObserver: MutationObserverFactory) {}\n\n async ensurePresence(targets: Node[], promise: Promise): Promise {\n const cancellable = new CancellablePromise(promise);\n\n const observer = this._mutationObserver.create((mutationsList) => {\n mutationsList.forEach((mutation) => {\n const removedTargets = Array.from(mutation.removedNodes).filter((node) =>\n targets.some((target) => node === target || node.contains(target)),\n );\n\n if (removedTargets.length === 0) {\n return;\n }\n\n cancellable.cancel(new UnexpectedDetachmentError());\n });\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n try {\n const output = await cancellable.promise;\n\n observer.disconnect();\n\n return output;\n } catch (error) {\n observer.disconnect();\n\n throw error;\n }\n }\n}\n","export interface MutationObeserverCreator {\n prototype: MutationObserver;\n new (callback: MutationCallback): MutationObserver;\n}\n\nexport interface MutationObserverWindow extends Window {\n MutationObserver: MutationObeserverCreator;\n}\n\nexport class MutationObserverFactory {\n constructor(private _window: MutationObserverWindow = window as MutationObserverWindow) {}\n\n create(callback: MutationCallback): MutationObserver {\n return new this._window.MutationObserver(callback);\n }\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 IframeEvent from './iframe-event';\n\nexport default function isIframeEvent, TType extends string>(\n object: any,\n type: TType,\n): object is TEvent {\n return object.type === type;\n}\n","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 {\n private _targetOrigin: string;\n\n constructor(targetOrigin: string, private _targetWindow?: Window) {\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,\n ): Promise;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options?: IframeEventPostOptions,\n ): Promise | 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(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, this._targetOrigin);\n\n return result;\n }\n\n setTarget(window: Window) {\n this._targetWindow = window;\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(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor;\nfunction bindDecorator>(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>(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(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor {\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 = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\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 private _isListening: boolean;\n private _listeners: EventListeners;\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(\n type: TType,\n listener: (event: TEventMap[TType]) => 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(\n type: TType,\n listener: (event: TEventMap[TType]) => 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(event: TEventMap[TType]): void {\n const listeners = this._listeners[event.type];\n\n if (!listeners) {\n return;\n }\n\n listeners.forEach((listener) => listener(event));\n }\n\n @bind\n private _handleMessage(event: MessageEvent): void {\n if (\n this._sourceOrigins.indexOf(event.origin) === -1 ||\n !isIframeEvent(event.data as TEventMap[keyof TEventMap], event.data.type)\n ) {\n return;\n }\n\n this.trigger(event.data);\n }\n}\n\ntype EventListeners = {\n [key in keyof TEventMap]?: Array<(event: TEventMap[key]) => void>;\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","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam protection\n * challenge (i.e.: they close the reCaptcha window).\n */\nexport default class SpamProtectionChallengeNotCompletedError extends StandardError {\n constructor() {\n super(\"You haven't complete our spam protection challenge. Please try again.\");\n\n this.name = 'SpamProtectionChallengeNotCompletedError';\n this.type = 'spam_protection_challenge_not_completed';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam protection\n * challenge (i.e.: they close the reCaptcha window).\n */\nexport default class CardingProtectionChallengeNotCompletedError extends StandardError {\n constructor() {\n super('Please complete our human verification challenge and try again.');\n\n this.name = 'CardingProtectionChallengeNotCompletedError';\n this.type = 'carding_protection_challenge_not_completed';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we fail to complete the required spam protection\n * verification due to an unknown reason.\n */\nexport default class CardingProtectionFailedError extends StandardError {\n constructor() {\n super('We were not able to verify that you are not a robot. Please try again.');\n\n this.name = 'CardingProtectionFailedError';\n this.type = 'carding_protection_failed';\n }\n}\n","import { switchMap, take } from 'rxjs/operators';\n\nimport { RequestError } from '../common/error/errors';\nimport { PaymentAdditionalAction } from '../payment';\n\nimport {\n CardingProtectionChallengeNotCompletedError,\n CardingProtectionFailedError,\n SpamProtectionChallengeNotCompletedError,\n} from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\n\nexport default class PaymentHumanVerificationHandler {\n constructor(private _googleRecaptcha: GoogleRecaptcha) {}\n\n handle(error: Error): Promise;\n handle(id: string, key: string): Promise;\n async handle(errorOrId: Error | string, key?: string): Promise {\n if (typeof errorOrId === 'string') {\n return this.handleWithRecaptchaSitekey(errorOrId, key);\n }\n\n return this.handleWithPaymentHumanVerificationRequestError(errorOrId);\n }\n\n private async handleWithPaymentHumanVerificationRequestError(\n error: Error,\n ): Promise {\n if (!this._isPaymentHumanVerificationRequest(error)) {\n throw error;\n }\n\n await this._initialize(error.body.additional_action_required.data.key);\n\n return this._performRecaptcha();\n }\n\n private async handleWithRecaptchaSitekey(\n id: string,\n key?: string,\n ): Promise {\n if (id !== 'recaptcha_v2') {\n throw Error('Human verification method is not supported.');\n }\n\n if (!key) {\n throw Error('Recaptcha site key is missing.');\n }\n\n await this._initialize(key);\n\n return this._performRecaptcha();\n }\n\n private _performRecaptcha(): Promise {\n return this._googleRecaptcha\n .execute()\n .pipe(take(1))\n .pipe(\n switchMap(async ({ error, token }) => {\n if (error instanceof SpamProtectionChallengeNotCompletedError) {\n throw new CardingProtectionChallengeNotCompletedError();\n }\n\n if (error || !token) {\n throw new CardingProtectionFailedError();\n }\n\n return {\n type: 'recaptcha_v2_verification',\n data: {\n human_verification_token: token,\n },\n };\n }),\n )\n .toPromise();\n }\n\n private _initialize(recaptchaSitekey: string): Promise {\n const cardingProtectionElementId = 'cardingProtectionContainer';\n\n let cardingProtectionElement = document.getElementById(cardingProtectionElementId);\n\n if (cardingProtectionElement && cardingProtectionElement.parentNode) {\n cardingProtectionElement.parentNode.removeChild(cardingProtectionElement);\n }\n\n cardingProtectionElement = document.createElement('div');\n cardingProtectionElement.setAttribute('id', cardingProtectionElementId);\n document.body.appendChild(cardingProtectionElement);\n\n return this._googleRecaptcha.load(cardingProtectionElementId, recaptchaSitekey);\n }\n\n private _isPaymentHumanVerificationRequest(error: Error): error is RequestError {\n const { additional_action_required, status } = (error as RequestError).body || {};\n\n return (\n status === 'additional_action_required' &&\n additional_action_required &&\n additional_action_required.type === 'recaptcha_v2_verification'\n );\n }\n}\n","import StandardError from './standard-error';\n\nexport enum NotInitializedErrorType {\n CheckoutButtonNotInitialized,\n CustomerNotInitialized,\n PaymentNotInitialized,\n ShippingNotInitialized,\n SpamProtectionNotInitialized,\n}\n\n/**\n * Throw this error if a method requires a certain initialization call to be\n * made first. Some objects can be constructed but they cannot be used until a\n * separate initialization call is made.\n */\nexport default class NotInitializedError extends StandardError {\n constructor(public subtype: NotInitializedErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'NotInitializedError';\n this.type = 'not_initialized';\n }\n}\n\nfunction getErrorMessage(type: NotInitializedErrorType): string {\n switch (type) {\n case NotInitializedErrorType.CustomerNotInitialized:\n return 'Unable to proceed because the customer step of checkout has not been initialized.';\n\n case NotInitializedErrorType.PaymentNotInitialized:\n return 'Unable to proceed because the payment step of checkout has not been initialized.';\n\n case NotInitializedErrorType.ShippingNotInitialized:\n return 'Unable to proceed because the shipping step of checkout has not been initialized.';\n\n case NotInitializedErrorType.SpamProtectionNotInitialized:\n return 'Unable to proceed because the checkout spam protection has not been initialized.';\n\n default:\n return 'Unable to proceed because the required component has not been initialized.';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we fail to complete the required spam protection\n * verification due to an unknown reason.\n */\nexport default class SpamProtectionFailedError extends StandardError {\n constructor() {\n super('We were not able to complete your spam protection verification. Please try again.');\n\n this.name = 'SpamProtectionFailedError';\n this.type = 'spam_protection_failed';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if spam protection is not loaded when trying to\n * complete the required spam protection verification.\n */\nexport default class SpamProtectionNotLoadedError extends StandardError {\n constructor() {\n super('Spam protection is not loaded. Please try again.');\n\n this.name = 'SpamProtectionNotLoadedError';\n this.type = 'spam_protection_failed';\n }\n}\n","import { memoize } from '@bigcommerce/memoize';\nimport { defer, Observable, of, Subject, throwError } from 'rxjs';\nimport { catchError, delay, retryWhen, switchMap } from 'rxjs/operators';\n\nimport { MutationObserverFactory } from '../common/dom';\nimport { NotInitializedError, NotInitializedErrorType } from '../common/error/errors';\n\nimport {\n SpamProtectionChallengeNotCompletedError,\n SpamProtectionFailedError,\n SpamProtectionNotLoadedError,\n} from './errors';\nimport GoogleRecaptchaScriptLoader from './google-recaptcha-script-loader';\n\nconst TIMEOUT = 7000;\nconst RETRY_INTERVAL = 250;\nconst MAX_RETRIES = TIMEOUT / RETRY_INTERVAL;\n\nexport interface RecaptchaResult {\n error?: Error;\n token?: string;\n}\n\nexport default class GoogleRecaptcha {\n private _event$?: Subject;\n private _recaptcha?: ReCaptchaV2.ReCaptcha;\n private _memoized: (\n recaptcha: ReCaptchaV2.ReCaptcha,\n sitekey: string,\n container: HTMLElement | null,\n ) => Subject;\n private _widgetId?: number;\n\n constructor(\n private googleRecaptchaScriptLoader: GoogleRecaptchaScriptLoader,\n private mutationObserverFactory: MutationObserverFactory,\n ) {\n this._memoized = memoize(\n (recaptcha: ReCaptchaV2.ReCaptcha, sitekey: string, container: HTMLElement | null) => {\n const event$ = new Subject();\n\n if (!container) {\n throw new Error();\n }\n\n this._widgetId = recaptcha.render(container.id, {\n sitekey,\n size: 'invisible',\n callback: () => {\n event$.next({\n token: recaptcha.getResponse(this._widgetId),\n });\n recaptcha.reset(this._widgetId);\n },\n 'error-callback': () => {\n event$.next({\n error: new SpamProtectionFailedError(),\n });\n },\n });\n\n return event$;\n },\n { isEqual: (a, b) => a === b },\n );\n }\n\n load(containerId: string, sitekey: string): Promise {\n return this.googleRecaptchaScriptLoader.load().then((recaptcha) => {\n if (recaptcha) {\n this._event$ = this._memoized(\n recaptcha,\n sitekey,\n document.getElementById(containerId),\n );\n this._recaptcha = recaptcha;\n }\n });\n }\n\n execute(): Observable {\n return defer(() => {\n const event$ = this._event$;\n const recaptcha = this._recaptcha;\n\n if (!event$ || !recaptcha) {\n throw new NotInitializedError(NotInitializedErrorType.SpamProtectionNotInitialized);\n }\n\n return defer(() => {\n const element = document.querySelector('iframe[src*=\"bframe\"]');\n\n return element ? of(element) : throwError(new SpamProtectionNotLoadedError());\n }).pipe(\n retryWhen((errors) =>\n errors.pipe(\n delay(RETRY_INTERVAL),\n switchMap((error, index) =>\n index < MAX_RETRIES ? of(error) : throwError(error),\n ),\n ),\n ),\n switchMap((element) => {\n this._watchRecaptchaChallengeWindow(event$, element);\n recaptcha.execute(this._widgetId);\n\n return event$;\n }),\n catchError((error) => of({ error })),\n );\n });\n }\n\n private _watchRecaptchaChallengeWindow(event: Subject, element: Element) {\n const iframeContainer = element.parentElement;\n\n if (!iframeContainer) {\n throw new SpamProtectionNotLoadedError();\n }\n\n const container = iframeContainer.parentElement;\n\n if (!container) {\n throw new SpamProtectionNotLoadedError();\n }\n\n this.mutationObserverFactory\n .create(() => {\n // When customer closes the Google ReCaptcha challenge window, throw SpamProtectionNotCompletedError\n if (container.style.visibility === 'hidden') {\n event.next({\n error: new SpamProtectionChallengeNotCompletedError(),\n });\n }\n })\n .observe(container, { attributes: true, attributeFilter: ['style'] });\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nexport default class GoogleRecaptchaScriptLoader {\n private _loadPromise?: Promise;\n\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: GoogleRecaptchaWindow = window,\n ) {}\n\n load(): Promise {\n if (!this._loadPromise) {\n this._loadPromise = this._loadScript();\n }\n\n return this._loadPromise;\n }\n\n private _loadScript(): Promise {\n const callbackName = 'initRecaptcha';\n const params = [`onload=${callbackName}`, 'render=explicit'].join('&');\n\n return new Promise((resolve, reject) => {\n this._window[callbackName] = () => resolve(this._window.grecaptcha);\n\n this._scriptLoader\n .loadScript(`//www.google.com/recaptcha/api.js?${params}`)\n .catch((error) => {\n this._loadPromise = undefined;\n reject(error);\n });\n });\n }\n}\n\nexport interface GoogleRecaptchaWindow extends Window {\n grecaptcha?: ReCaptchaV2.ReCaptcha;\n initRecaptcha?(): void;\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { MutationObserverFactory } from '../common/dom';\n\nimport GoogleRecaptcha from './google-recaptcha';\nimport GoogleRecaptchaScriptLoader from './google-recaptcha-script-loader';\n\nexport default function createSpamProtection(scriptLoader: ScriptLoader): GoogleRecaptcha {\n return new GoogleRecaptcha(\n new GoogleRecaptchaScriptLoader(scriptLoader),\n new MutationObserverFactory(),\n );\n}\n","import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidHostedFormConfigError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed due to invalid configuration provided for the hosted payment form.',\n );\n\n this.name = 'InvalidHostedFormConfigError';\n this.type = 'invalid_hosted_form_config';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidHostedFormError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unable to proceed due to an unknown error with the hosted payment form.');\n\n this.name = 'InvalidHostedFormError';\n this.type = 'invalid_hosted_form';\n }\n}\n","import { flatMap, map, values } from 'lodash';\n\nimport { StandardError } from '../../common/error/errors';\nimport { HostedInputValidateErrorDataMap } from '../iframe-content';\n\nexport default class InvalidHostedFormValueError extends StandardError {\n constructor(public errors: HostedInputValidateErrorDataMap) {\n super(\n [\n 'Unable to proceed due to invalid user input values',\n ...flatMap(values(errors), (fieldErrors) =>\n map(fieldErrors, ({ message }) => message),\n ),\n ].join('. '),\n );\n\n this.name = 'InvalidHostedFormValueError';\n this.type = 'invalid_hosted_form_value';\n }\n}\n","import { CardInstrument } from '../payment/instrument';\n\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport enum HostedFieldEventType {\n AttachRequested = 'HOSTED_FIELD:ATTACH_REQUESTED',\n SubmitRequested = 'HOSTED_FIELD:SUBMITTED_REQUESTED',\n ValidateRequested = 'HOSTED_FIELD:VALIDATE_REQUESTED',\n}\n\nexport interface HostedFieldEventMap {\n [HostedFieldEventType.AttachRequested]: HostedFieldAttachEvent;\n [HostedFieldEventType.SubmitRequested]: HostedFieldSubmitRequestEvent;\n [HostedFieldEventType.ValidateRequested]: HostedFieldValidateRequestEvent;\n}\n\nexport type HostedFieldEvent =\n | HostedFieldAttachEvent\n | HostedFieldSubmitRequestEvent\n | HostedFieldValidateRequestEvent;\n\nexport interface HostedFieldAttachEvent {\n type: HostedFieldEventType.AttachRequested;\n payload: {\n accessibilityLabel?: string;\n cardInstrument?: CardInstrument;\n fontUrls?: string[];\n placeholder?: string;\n styles?: HostedFieldStylesMap;\n origin?: string;\n type: HostedFieldType;\n };\n}\n\nexport interface HostedFieldSubmitRequestEvent {\n type: HostedFieldEventType.SubmitRequested;\n payload: {\n data: HostedFormOrderData;\n fields: HostedFieldType[];\n };\n}\n\nexport interface HostedFieldValidateRequestEvent {\n type: HostedFieldEventType.ValidateRequested;\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport {\n PaymentErrorData,\n PaymentErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport HostedFieldType from '../hosted-field-type';\nimport { HostedFormErrorsData } from '../hosted-form-options';\n\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\n\n// Event types\nexport enum HostedInputEventType {\n AttachSucceeded = 'HOSTED_INPUT:ATTACH_SUCCEEDED',\n AttachFailed = 'HOSTED_INPUT:ATTACH_FAILED',\n BinChanged = 'HOSTED_INPUT:BIN_CHANGED',\n Blurred = 'HOSTED_INPUT:BLURRED',\n Changed = 'HOSTED_INPUT:CHANGED',\n CardTypeChanged = 'HOSTED_INPUT:CARD_TYPE_CHANGED',\n Entered = 'HOSTED_INPUT:ENTERED',\n Focused = 'HOSTED_INPUT:FOCUSED',\n SubmitSucceeded = 'HOSTED_INPUT:SUBMIT_SUCCEEDED',\n SubmitFailed = 'HOSTED_INPUT:SUBMIT_FAILED',\n Validated = 'HOSTED_INPUT:VALIDATED',\n}\n\n// Event mapping\nexport interface HostedInputEventMap {\n [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\n [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\n [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\n [HostedInputEventType.Blurred]: HostedInputBlurEvent;\n [HostedInputEventType.Changed]: HostedInputChangeEvent;\n [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\n [HostedInputEventType.Entered]: HostedInputEnterEvent;\n [HostedInputEventType.Focused]: HostedInputFocusEvent;\n [HostedInputEventType.SubmitSucceeded]: HostedInputSubmitSuccessEvent;\n [HostedInputEventType.SubmitFailed]: HostedInputSubmitErrorEvent;\n [HostedInputEventType.Validated]: HostedInputValidateEvent;\n}\n\n// Events\nexport type HostedInputEvent =\n | HostedInputAttachSuccessEvent\n | HostedInputAttachErrorEvent\n | HostedInputBinChangeEvent\n | HostedInputBlurEvent\n | HostedInputChangeEvent\n | HostedInputCardTypeChangeEvent\n | HostedInputEnterEvent\n | HostedInputFocusEvent\n | HostedInputSubmitSuccessEvent\n | HostedInputSubmitErrorEvent\n | HostedInputValidateEvent;\n\nexport interface HostedInputAttachSuccessEvent {\n type: HostedInputEventType.AttachSucceeded;\n}\n\nexport interface HostedInputAttachErrorEvent {\n type: HostedInputEventType.AttachFailed;\n payload: {\n error: HostedInputInitializeErrorData;\n };\n}\n\nexport interface HostedInputBinChangeEvent {\n type: HostedInputEventType.BinChanged;\n payload: {\n bin?: string;\n };\n}\n\nexport interface HostedInputBlurEvent {\n type: HostedInputEventType.Blurred;\n payload: {\n fieldType: HostedFieldType;\n errors?: HostedFormErrorsData;\n };\n}\n\nexport interface HostedInputChangeEvent {\n type: HostedInputEventType.Changed;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputCardTypeChangeEvent {\n type: HostedInputEventType.CardTypeChanged;\n payload: {\n cardType?: string;\n };\n}\n\nexport interface HostedInputFocusEvent {\n type: HostedInputEventType.Focused;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputEnterEvent {\n type: HostedInputEventType.Entered;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputSubmitSuccessEvent {\n type: HostedInputEventType.SubmitSucceeded;\n payload: {\n response: Response;\n };\n}\n\nexport interface HostedInputSubmitErrorEvent {\n type: HostedInputEventType.SubmitFailed;\n payload: {\n error: PaymentErrorData;\n response?: Response;\n };\n}\n\nexport interface HostedInputValidateEvent {\n type: HostedInputEventType.Validated;\n payload: HostedInputValidateResults;\n}\n","import { values } from 'lodash';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nimport { DetachmentObserver } from '../common/dom';\nimport { mapFromPaymentErrorResponse } from '../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { parseUrl } from '../common/url';\nimport { CardInstrument } from '../payment/instrument';\n\nimport {\n InvalidHostedFormConfigError,\n InvalidHostedFormError,\n InvalidHostedFormValueError,\n} from './errors';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n HostedInputEventMap,\n HostedInputEventType,\n HostedInputSubmitErrorEvent,\n HostedInputSubmitSuccessEvent,\n HostedInputValidateEvent,\n} from './iframe-content';\n\nexport const RETRY_INTERVAL = 60 * 1000;\nexport const LAST_RETRY_KEY = 'lastRetry';\n\nexport default class HostedField {\n private _iframe: HTMLIFrameElement;\n\n constructor(\n private _type: HostedFieldType,\n private _containerId: string,\n private _placeholder: string,\n private _accessibilityLabel: string,\n private _styles: HostedFieldStylesMap,\n private _eventPoster: IframeEventPoster,\n private _eventListener: IframeEventListener,\n private _detachmentObserver: DetachmentObserver,\n private _cardInstrument?: CardInstrument,\n ) {\n this._iframe = document.createElement('iframe');\n\n this._iframe.src = `/checkout/payment/hosted-field?version=${LIBRARY_VERSION}`;\n this._iframe.style.border = 'none';\n this._iframe.style.height = '100%';\n this._iframe.style.overflow = 'hidden';\n this._iframe.style.width = '100%';\n }\n\n getType(): HostedFieldType {\n return this._type;\n }\n\n async attach(): Promise {\n const container = document.getElementById(this._containerId);\n\n if (!container) {\n throw new InvalidHostedFormConfigError(\n 'Unable to proceed because the provided container ID is not valid.',\n );\n }\n\n container.appendChild(this._iframe);\n this._eventListener.listen();\n\n const promise = fromEvent(this._iframe, 'load')\n .pipe(\n switchMap(async ({ target }) => {\n const contentWindow = target && (target as HTMLIFrameElement).contentWindow;\n\n if (!contentWindow) {\n throw new Error('The content window of the iframe cannot be accessed.');\n }\n\n this._eventPoster.setTarget(contentWindow);\n\n await this._eventPoster.post(\n {\n type: HostedFieldEventType.AttachRequested,\n payload: {\n accessibilityLabel: this._accessibilityLabel,\n cardInstrument: this._cardInstrument,\n fontUrls: this._getFontUrls(),\n placeholder: this._placeholder,\n styles: this._styles,\n origin: document.location.origin,\n type: this._type,\n },\n },\n {\n successType: HostedInputEventType.AttachSucceeded,\n errorType: HostedInputEventType.AttachFailed,\n },\n );\n }),\n take(1),\n )\n .toPromise();\n\n await this._detachmentObserver.ensurePresence([this._iframe], promise);\n }\n\n detach(): void {\n if (!this._iframe.parentElement) {\n return;\n }\n\n this._iframe.parentElement.removeChild(this._iframe);\n this._eventListener.stopListen();\n }\n\n async submitForm(\n fields: HostedFieldType[],\n data: HostedFormOrderData,\n ): Promise {\n try {\n const promise = this._eventPoster.post(\n {\n type: HostedFieldEventType.SubmitRequested,\n payload: { fields, data },\n },\n {\n successType: HostedInputEventType.SubmitSucceeded,\n errorType: HostedInputEventType.SubmitFailed,\n },\n );\n\n return await this._detachmentObserver.ensurePresence([this._iframe], promise);\n } catch (event) {\n if (this._isSubmitErrorEvent(event)) {\n if (event.payload.error.code === 'hosted_form_error') {\n throw new InvalidHostedFormError(event.payload.error.message);\n }\n\n if (event.payload.response) {\n throw mapFromPaymentErrorResponse(event.payload.response);\n }\n\n throw new Error(event.payload.error.message);\n }\n\n throw event;\n }\n }\n\n async validateForm(): Promise {\n const promise = this._eventPoster.post(\n {\n type: HostedFieldEventType.ValidateRequested,\n },\n {\n successType: HostedInputEventType.Validated,\n },\n );\n\n const { payload } = await this._detachmentObserver.ensurePresence([this._iframe], promise);\n\n if (!payload.isValid) {\n throw new InvalidHostedFormValueError(payload.errors);\n }\n }\n\n private _getFontUrls(): string[] {\n const hostname = 'fonts.googleapis.com';\n const links = document.querySelectorAll(`link[href*='${hostname}'][rel='stylesheet']`);\n\n return Array.prototype.slice\n .call(links)\n .filter((link) => parseUrl(link.href).hostname === hostname)\n .filter((link) =>\n values(this._styles)\n .map((style) => style && style.fontFamily)\n .filter((family): family is string => typeof family === 'string')\n .some((family) =>\n family\n .split(/,\\s/)\n .some((name) => link.href.indexOf(name.replace(' ', '+')) !== -1),\n ),\n )\n .map((link) => link.href);\n }\n\n private _isSubmitErrorEvent(event: any): event is HostedInputSubmitErrorEvent {\n return event.type === HostedInputEventType.SubmitFailed;\n }\n}\n","import { noop, without } from 'lodash';\n\nimport { HostedForm as HostedFormInterface } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IframeEventListener } from '../common/iframe';\nimport { OrderPaymentRequestBody } from '../order';\nimport { PaymentAdditionalAction } from '../payment';\nimport { PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport { InvalidHostedFormConfigError } from './errors';\nimport HostedField from './hosted-field';\nimport HostedFormOptions from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\nimport {\n HostedInputEnterEvent,\n HostedInputEventMap,\n HostedInputEventType,\n HostedInputSubmitSuccessEvent,\n} from './iframe-content';\n\ntype HostedFormEventCallbacks = Pick<\n HostedFormOptions,\n 'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'\n>;\n\nexport default class HostedForm implements HostedFormInterface {\n private _bin?: string;\n private _cardType?: string;\n\n constructor(\n private _fields: HostedField[],\n private _eventListener: IframeEventListener,\n private _payloadTransformer: HostedFormOrderDataTransformer,\n private _eventCallbacks: HostedFormEventCallbacks,\n private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n ) {\n const {\n onBlur = noop,\n onCardTypeChange = noop,\n onFocus = noop,\n onValidate = noop,\n } = this._eventCallbacks;\n\n this._eventListener.addListener(HostedInputEventType.Blurred, ({ payload }) =>\n onBlur(payload),\n );\n this._eventListener.addListener(HostedInputEventType.CardTypeChanged, ({ payload }) =>\n onCardTypeChange(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Focused, ({ payload }) =>\n onFocus(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Validated, ({ payload }) =>\n onValidate(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Entered, this._handleEnter);\n\n this._eventListener.addListener(\n HostedInputEventType.CardTypeChanged,\n ({ payload }) => (this._cardType = payload.cardType),\n );\n this._eventListener.addListener(\n HostedInputEventType.BinChanged,\n ({ payload }) => (this._bin = payload.bin),\n );\n }\n\n getBin(): string | undefined {\n return this._bin;\n }\n\n getCardType(): string | undefined {\n return this._cardType;\n }\n\n async attach(): Promise {\n this._eventListener.listen();\n\n const field = this._getFirstField();\n const otherFields = without(this._fields, field);\n\n await field.attach();\n await Promise.all(otherFields.map((otherField) => otherField.attach()));\n }\n\n detach(): void {\n this._eventListener.stopListen();\n\n this._fields.forEach((field) => {\n field.detach();\n });\n }\n\n async submit(\n payload: OrderPaymentRequestBody,\n additionalActionData?: PaymentAdditionalAction,\n ): Promise {\n try {\n return await this._getFirstField().submitForm(\n this._fields.map((field) => field.getType()),\n this._payloadTransformer.transform(payload, additionalActionData),\n );\n } catch (error) {\n const additionalAction = await this._paymentHumanVerificationHandler.handle(error);\n\n return await this._getFirstField().submitForm(\n this._fields.map((field) => field.getType()),\n this._payloadTransformer.transform(payload, additionalAction),\n );\n }\n }\n\n async validate(): Promise {\n return this._getFirstField().validateForm();\n }\n\n private _getFirstField(): HostedField {\n const field = this._fields[0];\n\n if (!field) {\n throw new InvalidHostedFormConfigError(\n 'Unable to proceed because the payment form has no field defined.',\n );\n }\n\n return field;\n }\n\n private _handleEnter: (event: HostedInputEnterEvent) => Promise = async ({ payload }) => {\n try {\n await this.validate();\n } catch (error) {\n // Catch form validation error because we want to trigger `onEnter`\n // irrespective of the validation result.\n if (error.name !== 'InvalidHostedFormValueError') {\n throw error;\n }\n }\n\n const { onEnter = noop } = this._eventCallbacks;\n\n onEnter(payload);\n };\n}\n","import {\n FormattedPayload,\n FormattedVaultedInstrument,\n HostedVaultedInstrument,\n PaymentInstrument,\n VaultedInstrument,\n} from './payment';\n\nexport default function isVaultedInstrument(\n instrument: PaymentInstrument,\n): instrument is VaultedInstrument {\n return Boolean((instrument as VaultedInstrument).instrumentId);\n}\n\nexport function isHostedVaultedInstrument(\n instrument: PaymentInstrument,\n): instrument is HostedVaultedInstrument {\n return (\n Boolean((instrument as HostedVaultedInstrument).instrumentId) &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccNumber') &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccCvv')\n );\n}\n\nexport function isFormattedVaultedInstrument(\n instrument: PaymentInstrument,\n): instrument is FormattedPayload {\n const formattedInstrument = (instrument as FormattedPayload)\n .formattedPayload;\n\n if (!formattedInstrument) {\n return false;\n }\n\n return (\n typeof formattedInstrument.bigpay_token === 'string' ||\n Boolean(formattedInstrument.bigpay_token && formattedInstrument.bigpay_token.token)\n );\n}\n","import { omit } from 'lodash';\n\nimport { ReadableCheckoutStore } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { OrderPaymentRequestBody } from '../order';\nimport {\n HostedCreditCardInstrument,\n isVaultedInstrument,\n PaymentAdditionalAction,\n} from '../payment';\n\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport default class HostedFormOrderDataTransformer {\n constructor(private _store: ReadableCheckoutStore) {}\n\n transform(\n payload: OrderPaymentRequestBody,\n additionalAction?: PaymentAdditionalAction,\n ): HostedFormOrderData {\n const state = this._store.getState();\n const checkout = state.checkout.getCheckout();\n const config = state.config.getConfig();\n const instrumentMeta = state.instruments.getInstrumentsMeta();\n const order = state.order.getOrder();\n const orderMeta = state.order.getOrderMeta();\n const payment = omit(\n payload.paymentData,\n 'ccExpiry',\n 'ccName',\n 'ccNumber',\n 'ccCvv',\n ) as HostedCreditCardInstrument;\n const paymentMethod = state.paymentMethods.getPaymentMethod(\n payload.methodId,\n payload.gatewayId,\n );\n const paymentMethodMeta = state.paymentMethods.getPaymentMethodsMeta();\n const authToken =\n instrumentMeta && payment && isVaultedInstrument(payment)\n ? `${state.payment.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n : state.payment.getPaymentToken();\n\n if (!authToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n\n return {\n additionalAction,\n authToken,\n checkout,\n config,\n order,\n orderMeta,\n payment,\n paymentMethod,\n paymentMethodMeta,\n };\n }\n}\n","import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { pick } from 'lodash';\n\nimport { ReadableCheckoutStore } from '../checkout';\nimport { DetachmentObserver, MutationObserverFactory } from '../common/dom';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { CardInstrument } from '../payment/instrument';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormOptions, {\n HostedCardFieldOptionsMap,\n HostedStoredCardFieldOptionsMap,\n} from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\n\nexport default class HostedFormFactory {\n constructor(private _store: ReadableCheckoutStore) {}\n\n create(host: string, options: HostedFormOptions): HostedForm {\n const fieldTypes = Object.keys(options.fields) as HostedFieldType[];\n const fields = fieldTypes.reduce((result, type) => {\n const fields = options.fields as HostedStoredCardFieldOptionsMap &\n HostedCardFieldOptionsMap;\n const fieldOptions = fields[type];\n\n if (!fieldOptions) {\n return result;\n }\n\n return [\n ...result,\n new HostedField(\n type,\n fieldOptions.containerId,\n fieldOptions.placeholder || '',\n fieldOptions.accessibilityLabel || '',\n options.styles || {},\n new IframeEventPoster(host),\n new IframeEventListener(host),\n new DetachmentObserver(new MutationObserverFactory()),\n 'instrumentId' in fieldOptions\n ? this._getCardInstrument(fieldOptions.instrumentId)\n : undefined,\n ),\n ];\n }, []);\n\n return new HostedForm(\n fields,\n new IframeEventListener(host),\n new HostedFormOrderDataTransformer(this._store),\n pick(options, 'onBlur', 'onEnter', 'onFocus', 'onCardTypeChange', 'onValidate'),\n new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n );\n }\n\n private _getCardInstrument(instrumentId: string): CardInstrument {\n const {\n instruments: { getCardInstrument },\n } = this._store.getState();\n const instrument = getCardInstrument(instrumentId);\n\n if (!instrument) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentInstrument);\n }\n\n return instrument;\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam check.\n */\nexport default class SpamProtectionNotCompletedError extends StandardError {\n constructor() {\n super(\"You haven't complete our spam check. Please try again.\");\n\n this.name = 'SpamProtectionNotCompletedError';\n this.type = 'spam_protection_not_completed';\n }\n}\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, Observable, Observer, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { CheckoutValidator, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { SpamProtectionNotCompletedError } from '../spam-protection/errors';\n\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport {\n FinalizeOrderAction,\n LoadOrderAction,\n LoadOrderPaymentsAction,\n OrderActionType,\n SubmitOrderAction,\n} from './order-actions';\nimport OrderRequestBody from './order-request-body';\nimport OrderRequestSender from './order-request-sender';\n\nexport default class OrderActionCreator {\n constructor(\n private _orderRequestSender: OrderRequestSender,\n private _checkoutValidator: CheckoutValidator,\n ) {}\n\n loadOrder(orderId: number, options?: RequestOptions): Observable {\n return new Observable((observer: Observer) => {\n observer.next(createAction(OrderActionType.LoadOrderRequested));\n\n this._orderRequestSender\n .loadOrder(orderId, options)\n .then((response) => {\n observer.next(createAction(OrderActionType.LoadOrderSucceeded, response.body));\n observer.complete();\n })\n .catch((response) => {\n observer.error(createErrorAction(OrderActionType.LoadOrderFailed, response));\n });\n });\n }\n\n // TODO: Remove when checkout does not contain unrelated order data.\n loadOrderPayments(\n orderId: number,\n options?: RequestOptions,\n ): Observable {\n return new Observable((observer: Observer) => {\n observer.next(createAction(OrderActionType.LoadOrderPaymentsRequested));\n\n this._orderRequestSender\n .loadOrder(orderId, options)\n .then((response) => {\n observer.next(\n createAction(OrderActionType.LoadOrderPaymentsSucceeded, response.body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(OrderActionType.LoadOrderPaymentsFailed, response),\n );\n });\n });\n }\n\n loadCurrentOrder(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n defer(() => {\n const orderId = this._getCurrentOrderId(store.getState());\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.loadOrder(orderId, options);\n });\n }\n\n submitOrder(\n payload?: OrderRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(OrderActionType.SubmitOrderRequested)),\n defer(() => {\n const state = store.getState();\n const externalSource = state.config.getExternalSource();\n const variantIdentificationToken = state.config.getVariantIdentificationToken();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (checkout.shouldExecuteSpamCheck) {\n throw new SpamProtectionNotCompletedError();\n }\n\n return from(\n this._checkoutValidator.validate(checkout, options).then(() =>\n this._orderRequestSender.submitOrder(\n this._mapToOrderRequestBody(\n payload ?? {},\n checkout.id,\n checkout.customerMessage,\n externalSource,\n ),\n {\n ...options,\n headers: {\n checkoutVariant: variantIdentificationToken,\n },\n },\n ),\n ),\n ).pipe(\n switchMap((response) =>\n concat(\n // TODO: Remove once we can submit orders using storefront API\n this.loadOrder(response.body.data.order.orderId, options),\n of(\n createAction(\n OrderActionType.SubmitOrderSucceeded,\n response.body.data,\n { ...response.body.meta, token: response.headers.token },\n ),\n ),\n ),\n ),\n );\n }).pipe(\n catchError((error) =>\n throwErrorAction(OrderActionType.SubmitOrderFailed, error),\n ),\n ),\n );\n }\n\n finalizeOrder(\n orderId: number,\n options?: RequestOptions,\n ): Observable {\n return concat(\n of(createAction(OrderActionType.FinalizeOrderRequested)),\n from(this._orderRequestSender.finalizeOrder(orderId, options)).pipe(\n switchMap((response) =>\n concat(\n this.loadOrder(orderId, options),\n of(\n createAction(\n OrderActionType.FinalizeOrderSucceeded,\n response.body.data,\n ),\n ),\n ),\n ),\n ),\n ).pipe(catchError((error) => throwErrorAction(OrderActionType.FinalizeOrderFailed, error)));\n }\n\n private _getCurrentOrderId(state: InternalCheckoutSelectors): number | undefined {\n const order = state.order.getOrder();\n const checkout = state.checkout.getCheckout();\n\n return (order && order.orderId) || (checkout && checkout.orderId);\n }\n\n private _mapToOrderRequestBody(\n payload: OrderRequestBody,\n cartId: string,\n customerMessage: string,\n externalSource?: string,\n ): InternalOrderRequestBody {\n const { payment, ...order } = payload;\n\n if (!payment) {\n return {\n ...order,\n cartId,\n customerMessage,\n externalSource,\n };\n }\n\n return {\n ...order,\n cartId,\n customerMessage,\n externalSource,\n payment: {\n paymentData: payment.paymentData,\n name: payment.methodId,\n gateway: payment.gatewayId,\n },\n };\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error is thrown when the server detects inconsistency in cart data since it is last requested,\n * for example, product prices or eligible discounts have changed.\n */\nexport default class CartConsistencyError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Your checkout could not be processed because some details have changed. Please review your order and try again.',\n );\n\n this.name = 'CartConsistencyError';\n this.type = 'cart_consistency';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Checkout prevents consumers from placing their orders when a merchant wishes\n * to be able to block transactions if the automated tax provider cannot be reached.\n */\nexport default class OrderTaxProviderUnavailableError extends StandardError {\n constructor(message?: string) {\n super(message || 'The tax provider is unavailable.');\n\n this.name = 'OrderTaxProviderUnavailableError';\n this.type = 'tax_provider_unavailable';\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\nimport { isNil, omitBy } from 'lodash';\n\nimport { CartConsistencyError } from '../cart/errors';\nimport {\n ContentType,\n joinIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { OrderTaxProviderUnavailableError } from './errors';\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport { InternalOrderResponseBody } from './internal-order-responses';\nimport Order from './order';\n\nexport interface SubmitOrderRequestOptions extends RequestOptions {\n headers?: {\n checkoutVariant?: string;\n };\n}\n\nexport default class OrderRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadOrder(orderId: number, { timeout }: RequestOptions = {}): Promise> {\n const url = `/api/storefront/orders/${orderId}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n const include = [\n 'payments',\n 'lineItems.physicalItems.socialMedia',\n 'lineItems.physicalItems.options',\n 'lineItems.physicalItems.categories',\n 'lineItems.digitalItems.socialMedia',\n 'lineItems.digitalItems.options',\n 'lineItems.digitalItems.categories',\n ];\n\n return this._requestSender.get(url, {\n params: {\n include: joinIncludes(include),\n },\n headers,\n timeout,\n });\n }\n\n submitOrder(\n body?: InternalOrderRequestBody,\n { headers, timeout }: SubmitOrderRequestOptions = {},\n ): Promise> {\n const url = '/internalapi/v1/checkout/order';\n\n return this._requestSender\n .post(url, {\n body,\n headers: omitBy(\n {\n 'X-Checkout-Variant': headers && headers.checkoutVariant,\n ...SDK_VERSION_HEADERS,\n },\n isNil,\n ),\n timeout,\n })\n .catch((error) => {\n if (error.body.type === 'tax_provider_unavailable') {\n throw new OrderTaxProviderUnavailableError();\n }\n\n if (error.body.type === 'cart_has_changed') {\n throw new CartConsistencyError();\n }\n\n throw error;\n });\n }\n\n finalizeOrder(\n orderId: number,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/internalapi/v1/checkout/order/${orderId}`;\n\n return this._requestSender.post(url, { timeout, headers: SDK_VERSION_HEADERS });\n }\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { OrderActionCreator } from '../order';\nimport { PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport Payment, {\n FormattedHostedInstrument,\n FormattedPayload,\n FormattedVaultedInstrument,\n} from './payment';\nimport {\n InitializeOffsitePaymentAction,\n PaymentActionType,\n SubmitPaymentAction,\n} from './payment-actions';\nimport PaymentRequestSender from './payment-request-sender';\nimport PaymentRequestTransformer from './payment-request-transformer';\n\ninterface InitializeOffsitePaymentSettings {\n methodId: string;\n gatewayId?: string;\n instrumentId?: string;\n target?: string;\n promise?: Promise;\n shouldSaveInstrument?: boolean;\n shouldSetAsDefaultInstrument?: boolean;\n}\n\ntype InitializeOffsitePayment = (\n settings: InitializeOffsitePaymentSettings,\n) => ThunkAction;\n\nexport default class PaymentActionCreator {\n constructor(\n private _paymentRequestSender: PaymentRequestSender,\n private _orderActionCreator: OrderActionCreator,\n private _paymentRequestTransformer: PaymentRequestTransformer,\n private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n ) {}\n\n submitPayment(payment: Payment): ThunkAction {\n return (store) =>\n concat(\n of(createAction(PaymentActionType.SubmitPaymentRequested)),\n defer(async () => {\n try {\n return await this._paymentRequestSender.submitPayment(\n this._paymentRequestTransformer.transform(payment, store.getState()),\n );\n } catch (error) {\n const additionalAction = await this._paymentHumanVerificationHandler.handle(\n error,\n );\n\n return await this._paymentRequestSender.submitPayment(\n this._paymentRequestTransformer.transform(\n { ...payment, additionalAction },\n store.getState(),\n ),\n );\n }\n }).pipe(\n switchMap(({ body }) =>\n concat(\n this._orderActionCreator.loadCurrentOrder()(store),\n of(createAction(PaymentActionType.SubmitPaymentSucceeded, body)),\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(PaymentActionType.SubmitPaymentFailed, error),\n ),\n );\n }\n\n initializeOffsitePayment: InitializeOffsitePayment = ({\n methodId,\n gatewayId,\n instrumentId,\n target,\n promise,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n }) => {\n return (store) => {\n let paymentData:\n | FormattedPayload\n | undefined;\n\n if (instrumentId) {\n paymentData = { formattedPayload: { bigpay_token: instrumentId } };\n } else if (shouldSaveInstrument) {\n paymentData = {\n formattedPayload: {\n vault_payment_instrument: shouldSaveInstrument,\n set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n },\n };\n }\n\n const payload = this._paymentRequestTransformer.transform(\n { gatewayId, methodId, paymentData },\n store.getState(),\n );\n\n return concat(\n of(createAction(PaymentActionType.InitializeOffsitePaymentRequested)),\n Promise.race(\n [\n this._paymentRequestSender.initializeOffsitePayment(payload, target),\n promise,\n ].filter(Boolean),\n ).then(() => createAction(PaymentActionType.InitializeOffsitePaymentSucceeded)),\n ).pipe(\n catchError((error) =>\n throwErrorAction(PaymentActionType.InitializeOffsitePaymentFailed, error),\n ),\n );\n };\n };\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport PaymentRequestBody from './payment-request-body';\n\n/**\n * @todo Convert this file into TypeScript properly\n */\nexport default class PaymentRequestSender {\n /**\n * @class\n * @param {BigpayClient} client\n */\n constructor(private _client: any) {}\n\n submitPayment(payload: PaymentRequestBody): Promise> {\n return new Promise((resolve, reject) => {\n this._client.submitPayment(payload, (error: any, response: any) => {\n if (error) {\n reject(this._transformResponse(error));\n } else {\n resolve(this._transformResponse(response));\n }\n });\n });\n }\n\n initializeOffsitePayment(payload: PaymentRequestBody, target?: string): Promise {\n return new Promise(() => {\n this._client.initializeOffsitePayment(payload, null, target);\n });\n }\n\n private _transformResponse(response: any): Response {\n return {\n headers: response.headers,\n body: response.data,\n status: response.status,\n statusText: response.statusText,\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/bigpay-client\");","import { BillingAddress, isBillingAddressLike } from '../billing';\nimport { Consignment } from '../shipping';\n\nimport Address from './address';\nimport InternalAddress from './internal-address';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalAddress(\n address: Address | BillingAddress,\n consignments?: Consignment[],\n): InternalAddress {\n let addressId;\n\n if (isBillingAddressLike(address)) {\n addressId = address.id;\n } else if (consignments && consignments.length) {\n addressId = consignments[0].id;\n }\n\n return {\n id: addressId,\n firstName: address.firstName,\n lastName: address.lastName,\n company: address.company,\n addressLine1: address.address1,\n addressLine2: address.address2,\n city: address.city,\n province: address.stateOrProvince,\n provinceCode: address.stateOrProvinceCode,\n postCode: address.postalCode,\n country: address.country,\n countryCode: address.countryCode,\n phone: address.phone,\n customFields: address.customFields,\n };\n}\n","import { Address } from '../address';\n\nimport BillingAddress from './billing-address';\n\nexport default function isBillingAddressLike(address: Address): address is BillingAddress {\n const billingAddress = address as BillingAddress;\n\n return typeof billingAddress.id !== 'undefined';\n}\n","export default class AmountTransformer {\n constructor(private _decimalPlaces: number) {}\n\n toInteger(amount: number): number {\n return Math.round(amount * Math.pow(10, this._decimalPlaces));\n }\n}\n","import Coupon from './coupon';\nimport InternalCoupon from './internal-coupon';\n\nconst couponTypes = [\n 'per_item_discount',\n 'percentage_discount',\n 'per_total_discount',\n 'shipping_discount',\n 'free_shipping',\n];\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCoupon(coupon: Coupon): InternalCoupon {\n return {\n code: coupon.code,\n discount: coupon.displayName,\n discountType: couponTypes.indexOf(coupon.couponType),\n };\n}\n","enum CheckoutButtonMethodType {\n APPLEPAY = \"applepay\",\n AMAZON_PAY_V2 = \"amazonpay\",\n BRAINTREE_PAYPAL = \"braintreepaypal\",\n BRAINTREE_VENMO = \"braintreevenmo\",\n BRAINTREE_PAYPAL_CREDIT = \"braintreepaypalcredit\",\n GOOGLEPAY_ADYENV2 = \"googlepayadyenv2\",\n GOOGLEPAY_ADYENV3 = \"googlepayadyenv3\",\n GOOGLEPAY_AUTHORIZENET = \"googlepayauthorizenet\",\n GOOGLEPAY_BNZ = \"googlepaybnz\",\n GOOGLEPAY_BRAINTREE = \"googlepaybraintree\",\n GOOGLEPAY_CHECKOUTCOM = \"googlepaycheckoutcom\",\n GOOGLEPAY_CYBERSOURCEV2 = \"googlepaycybersourcev2\",\n GOOGLEPAY_ORBITAL = \"googlepayorbital\",\n GOOGLEPAY_STRIPE = \"googlepaystripe\",\n GOOGLEPAY_STRIPEUPE = \"googlepaystripeupe\",\n GOOGLEPAY_WORLDPAYACCESS = \"googlepayworldpayaccess\",\n MASTERPASS = \"masterpass\",\n PAYPALEXPRESS = \"paypalexpress\"\n}\nexport default CheckoutButtonMethodType;\n\n","import GiftCertificate from './gift-certificate';\nimport InternalGiftCertificate from './internal-gift-certificate';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalGiftCertificate(\n giftCertificate: GiftCertificate,\n): InternalGiftCertificate {\n return {\n code: giftCertificate.code,\n discountedAmount: giftCertificate.used,\n remainingBalance: giftCertificate.remaining,\n giftCertificate: {\n balance: giftCertificate.balance,\n code: giftCertificate.code,\n purchaseDate: giftCertificate.purchaseDate,\n },\n };\n}\n","import InternalLineItem from './internal-line-item';\nimport { LineItem } from './line-item';\nimport LineItemMap from './line-item-map';\nimport mapGiftCertificateToInternalLineItem from './map-gift-certificate-to-internal-line-item';\nimport mapToInternalLineItem from './map-to-internal-line-item';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalLineItems(\n itemMap: LineItemMap,\n decimalPlaces: number,\n idKey: keyof LineItem = 'id',\n): InternalLineItem[] {\n return (Object.keys(itemMap) as Array).reduce(\n (result, key) => [\n ...result,\n ...(itemMap[key] as LineItem[]).map((item: any) => {\n if (key === 'giftCertificates') {\n return mapGiftCertificateToInternalLineItem(item, decimalPlaces);\n }\n\n return mapToInternalLineItem(\n item,\n mapToInternalLineItemType(key),\n decimalPlaces,\n idKey,\n );\n }),\n ],\n [] as InternalLineItem[],\n );\n}\n\nfunction mapToInternalLineItemType(type: string): string {\n switch (type) {\n case 'physicalItems':\n return 'ItemPhysicalEntity';\n\n case 'digitalItems':\n return 'ItemDigitalEntity';\n\n case 'giftCertificates':\n return 'ItemGiftCertificateEntity';\n\n default:\n return '';\n }\n}\n","import { AmountTransformer } from '../common/utility';\n\nimport InternalLineItem from './internal-line-item';\nimport { GiftCertificateItem } from './line-item';\n\nexport default function mapGiftCertificateToInternalLineItem(\n item: GiftCertificateItem,\n decimalPlaces: number,\n): InternalLineItem {\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: item.id,\n imageUrl: '',\n name: item.name,\n amount: item.amount,\n amountAfterDiscount: item.amount,\n discount: 0,\n integerAmount: amountTransformer.toInteger(item.amount),\n integerAmountAfterDiscount: amountTransformer.toInteger(item.amount),\n integerUnitPrice: amountTransformer.toInteger(item.amount),\n integerUnitPriceAfterDiscount: amountTransformer.toInteger(item.amount),\n integerDiscount: 0,\n quantity: 1,\n sender: item.sender,\n recipient: item.recipient,\n type: 'ItemGiftCertificateEntity',\n attributes: [],\n variantId: null,\n };\n}\n","import { AmountTransformer } from '../common/utility';\n\nimport InternalLineItem from './internal-line-item';\nimport { DigitalItem, LineItem } from './line-item';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalLineItem(\n item: LineItem,\n type: string,\n decimalPlaces: number,\n idKey: keyof LineItem = 'id',\n): InternalLineItem {\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: item[idKey] as string | number,\n imageUrl: item.imageUrl,\n amount: item.extendedListPrice,\n amountAfterDiscount: item.extendedSalePrice,\n discount: item.discountAmount,\n integerAmount: amountTransformer.toInteger(item.extendedListPrice),\n integerAmountAfterDiscount: amountTransformer.toInteger(item.extendedSalePrice),\n integerDiscount: amountTransformer.toInteger(item.discountAmount),\n integerUnitPrice: amountTransformer.toInteger(item.listPrice),\n integerUnitPriceAfterDiscount: amountTransformer.toInteger(item.salePrice),\n downloadsPageUrl: (item as DigitalItem).downloadPageUrl,\n name: item.name,\n quantity: item.quantity,\n brand: item.brand,\n sku: item.sku,\n categoryNames: item.categoryNames,\n variantId: item.variantId,\n productId: item.productId,\n attributes: (item.options || []).map((option) => ({\n name: option.name,\n value: option.value,\n })),\n addedByPromotion: item.addedByPromotion,\n type,\n };\n}\n","import { keyBy, reduce, some } from 'lodash';\n\nimport { Checkout } from '../checkout';\nimport { AmountTransformer } from '../common/utility';\nimport { mapToInternalCoupon, mapToInternalGiftCertificate } from '../coupon';\nimport { mapToDiscountNotifications } from '../promotion';\n\nimport InternalCart from './internal-cart';\nimport mapToInternalLineItems from './map-to-internal-line-items';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCart(checkout: Checkout): InternalCart {\n const decimalPlaces = checkout.cart.currency.decimalPlaces;\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: checkout.cart.id,\n items: mapToInternalLineItems(checkout.cart.lineItems, decimalPlaces),\n currency: checkout.cart.currency.code,\n coupon: {\n discountedAmount: reduce(\n checkout.cart.coupons,\n (sum, coupon) => {\n return sum + coupon.discountedAmount;\n },\n 0,\n ),\n coupons: checkout.cart.coupons.map(mapToInternalCoupon),\n },\n discount: {\n amount: checkout.cart.discountAmount,\n integerAmount: amountTransformer.toInteger(checkout.cart.discountAmount),\n },\n discountNotifications: mapToDiscountNotifications(checkout.promotions),\n giftCertificate: {\n totalDiscountedAmount: reduce(\n checkout.giftCertificates,\n (sum, certificate) => {\n return sum + certificate.used;\n },\n 0,\n ),\n appliedGiftCertificates: keyBy(\n checkout.giftCertificates.map(mapToInternalGiftCertificate),\n 'code',\n ),\n },\n shipping: {\n amount: checkout.shippingCostTotal,\n integerAmount: amountTransformer.toInteger(checkout.shippingCostTotal),\n amountBeforeDiscount: checkout.shippingCostBeforeDiscount,\n integerAmountBeforeDiscount: amountTransformer.toInteger(\n checkout.shippingCostBeforeDiscount,\n ),\n required: some(\n checkout.cart.lineItems.physicalItems,\n (lineItem) => lineItem.isShippingRequired,\n ),\n },\n subtotal: {\n amount: checkout.subtotal,\n integerAmount: amountTransformer.toInteger(checkout.subtotal),\n },\n storeCredit: {\n amount: checkout.customer ? checkout.customer.storeCredit : 0,\n },\n taxSubtotal: {\n amount: checkout.taxTotal,\n integerAmount: amountTransformer.toInteger(checkout.taxTotal),\n },\n taxes: checkout.taxes,\n taxTotal: {\n amount: checkout.taxTotal,\n integerAmount: amountTransformer.toInteger(checkout.taxTotal),\n },\n handling: {\n amount: checkout.handlingCostTotal,\n integerAmount: amountTransformer.toInteger(checkout.handlingCostTotal),\n },\n grandTotal: {\n amount: checkout.grandTotal,\n integerAmount: amountTransformer.toInteger(checkout.grandTotal),\n },\n };\n}\n","import { DiscountNotification } from '../discount';\n\nimport { Promotion } from '.';\n\nexport default function mapToDiscountNotifications(\n promotions?: Promotion[],\n): DiscountNotification[] {\n const notifications: DiscountNotification[] = [];\n\n (promotions || []).forEach((promotion) => {\n (promotion.banners || []).forEach((banner) => {\n notifications.push({\n placeholders: [],\n discountType: null,\n message: '',\n messageHtml: banner.text,\n });\n });\n });\n\n return notifications;\n}\n","import { mapToInternalAddress } from '../address';\nimport { OrderBillingAddress } from '../order-billing-address/order-billing-address-state';\n\nimport InternalCustomer from './internal-customer';\n\nimport { Customer } from '.';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCustomer(\n customer: Customer,\n billingAddress: OrderBillingAddress,\n): InternalCustomer {\n const firstName = customer.firstName || billingAddress.firstName || '';\n const lastName = customer.lastName || billingAddress.lastName || '';\n\n return {\n addresses: (customer.addresses || []).map((address) => mapToInternalAddress(address)),\n customerId: customer.id,\n isGuest: customer.isGuest,\n storeCredit: customer.storeCredit,\n email: customer.email || billingAddress.email || '',\n firstName,\n lastName,\n name: customer.fullName || [firstName, lastName].join(' '),\n customerGroupName: customer.customerGroup && customer.customerGroup.name,\n };\n}\n","import CardExpiryDate from './card-expiry-date';\n\nconst NUMBER_SEPARATOR = '/';\n\nexport default class CardExpiryFormatter {\n format(value: string): string {\n const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n const trimmedMonth = month.slice(0, 2);\n const trimmedYear =\n year.length === 4 ? year.slice(-2) : year ? year.slice(0, 2) : month.slice(2);\n\n // i.e.: '1'\n if (value.length < 2) {\n return month;\n }\n\n // ie.: '10 /' (without trailing space)\n if (value.length > 3 && !trimmedYear) {\n return trimmedMonth;\n }\n\n return `${trimmedMonth} ${NUMBER_SEPARATOR} ${trimmedYear}`;\n }\n\n toObject(value: string): CardExpiryDate {\n const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n\n if (!/^\\d+$/.test(month) || !/^\\d+$/.test(year)) {\n return { month: '', year: '' };\n }\n\n return {\n month: month.length === 1 ? `0${month}` : month.slice(0, 2),\n year: year.length === 2 ? `20${year}` : year.slice(0, 4),\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"card-validator\");","import { creditCardType, number } from 'card-validator';\nimport { max } from 'lodash';\n\nconst NUMBER_SEPARATOR = ' ';\n\nexport default class CardNumberFormatter {\n format(value: string): string {\n const { card } = number(value);\n\n if (!card) {\n return value;\n }\n\n const maxLength = max(creditCardType(value).map((info) => max(info.lengths)));\n const unformattedValue = this.unformat(value).slice(0, maxLength);\n\n return card.gaps\n .filter((gapIndex) => unformattedValue.length > gapIndex)\n .reduce(\n (output, gapIndex, index) =>\n [output.slice(0, gapIndex + index), output.slice(gapIndex + index)].join(\n NUMBER_SEPARATOR,\n ),\n unformattedValue,\n );\n }\n\n unformat(value: string): string {\n const { card } = number(value);\n\n if (!card) {\n return value;\n }\n\n return value.replace(new RegExp(NUMBER_SEPARATOR, 'g'), '');\n }\n}\n","import { filter, find, keyBy, reduce } from 'lodash';\n\nimport { LineItem, mapToInternalLineItems } from '../cart';\nimport { Checkout } from '../checkout';\nimport { AmountTransformer } from '../common/utility';\nimport { mapToInternalCoupon } from '../coupon';\nimport { HOSTED } from '../payment';\n\nimport InternalOrder, {\n InternalGiftCertificateList,\n InternalIncompleteOrder,\n InternalOrderPayment,\n InternalSocialDataList,\n} from './internal-order';\nimport Order, {\n GatewayOrderPayment,\n GiftCertificateOrderPayment,\n OrderPayment,\n OrderPayments,\n} from './order';\nimport { OrderMetaState } from './order-state';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalOrder(\n order: Order,\n orderMeta: OrderMetaState = {},\n): InternalOrder {\n const decimalPlaces = order.currency.decimalPlaces;\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: order.orderId,\n items: mapToInternalLineItems(order.lineItems, order.currency.decimalPlaces, 'productId'),\n orderId: order.orderId,\n currency: order.currency.code,\n customerCanBeCreated: order.customerCanBeCreated,\n payment: mapToInternalOrderPayment(order.payments, orderMeta.payment),\n subtotal: {\n amount: order.baseAmount,\n integerAmount: amountTransformer.toInteger(order.baseAmount),\n },\n coupon: {\n discountedAmount: reduce(\n order.coupons,\n (sum, coupon) => {\n return sum + coupon.discountedAmount;\n },\n 0,\n ),\n coupons: order.coupons.map(mapToInternalCoupon),\n },\n discount: {\n amount: order.discountAmount,\n integerAmount: amountTransformer.toInteger(order.discountAmount),\n },\n token: orderMeta.orderToken,\n callbackUrl: orderMeta.callbackUrl,\n discountNotifications: [],\n giftCertificate: mapToGiftCertificates(order.payments),\n socialData: mapToInternalSocialDataList(order),\n status: order.status,\n hasDigitalItems: order.hasDigitalItems,\n isDownloadable: order.isDownloadable,\n isComplete: order.isComplete,\n shipping: {\n amount: order.shippingCostTotal,\n integerAmount: amountTransformer.toInteger(order.shippingCostTotal),\n amountBeforeDiscount: order.shippingCostBeforeDiscount,\n integerAmountBeforeDiscount: amountTransformer.toInteger(\n order.shippingCostBeforeDiscount,\n ),\n },\n storeCredit: {\n amount: mapToStoreCredit(order.payments),\n },\n taxes: order.taxes,\n taxTotal: {\n amount: order.taxTotal,\n integerAmount: amountTransformer.toInteger(order.taxTotal),\n },\n handling: {\n amount: order.handlingCostTotal,\n integerAmount: amountTransformer.toInteger(order.handlingCostTotal),\n },\n grandTotal: {\n amount: order.orderAmount,\n integerAmount: order.orderAmountAsInteger,\n },\n };\n}\n\nexport function mapToInternalIncompleteOrder(checkout: Checkout): InternalIncompleteOrder {\n const payment = find(checkout.payments, { providerType: HOSTED });\n\n return {\n orderId: null,\n isComplete: false,\n payment: !payment\n ? {}\n : {\n id: payment.providerId,\n gateway: payment.gatewayId,\n status: mapToInternalPaymentStatus(payment.detail.step),\n },\n };\n}\n\nfunction mapToInternalPaymentStatus(status: string): string {\n return `PAYMENT_STATUS_${status}`;\n}\n\nfunction mapToStoreCredit(payments?: OrderPayments): number {\n const item = find(payments, { providerId: 'storecredit' });\n\n return item ? item.amount : 0;\n}\n\nfunction mapToGiftCertificates(payments?: OrderPayments): InternalGiftCertificateList {\n const items = filter(payments, {\n providerId: 'giftcertificate',\n }) as GiftCertificateOrderPayment[];\n\n return {\n totalDiscountedAmount: reduce(items, (sum, item) => item.amount + sum, 0),\n appliedGiftCertificates: keyBy(\n items.map((item) => ({\n code: item.detail.code,\n discountedAmount: item.amount,\n remainingBalance: item.detail.remaining,\n giftCertificate: {\n balance: item.amount + item.detail.remaining,\n code: item.detail.code,\n purchaseDate: '',\n },\n })),\n 'code',\n ),\n };\n}\n\nfunction mapToInternalOrderPayment(\n payments?: OrderPayments,\n payment: InternalOrderPayment = {},\n): InternalOrderPayment {\n const item = find(payments, isDefaultOrderPayment) as GatewayOrderPayment;\n\n if (!item) {\n return {};\n }\n\n return {\n id: item.providerId,\n status: mapToInternalPaymentStatus(item.detail.step),\n helpText: item.detail.instructions,\n returnUrl: payment.returnUrl,\n };\n}\n\nfunction isDefaultOrderPayment(payment: OrderPayment): payment is GatewayOrderPayment {\n return payment.providerId !== 'giftcertificate' && payment.providerId !== 'storecredit';\n}\n\nfunction mapToInternalSocialDataList(\n order: Order,\n): { [itemId: string]: InternalSocialDataList } | undefined {\n const socialDataObject: { [itemId: string]: InternalSocialDataList } = {};\n const items = [...order.lineItems.physicalItems, ...order.lineItems.digitalItems];\n\n items.forEach((item) => {\n socialDataObject[item.id] = mapToInternalSocialData(item);\n });\n\n return socialDataObject;\n}\n\nfunction mapToInternalSocialData(lineItem: LineItem): InternalSocialDataList {\n const codes = ['fb', 'tw', 'gp'];\n\n return codes.reduce((socialData, code) => {\n const item =\n lineItem.socialMedia && find(lineItem.socialMedia, (item) => item.code === code);\n\n if (!item) {\n return socialData;\n }\n\n socialData[code] = {\n name: lineItem.name,\n description: lineItem.name,\n image: lineItem.imageUrl,\n url: item.link,\n shareText: item.text,\n sharingLink: item.link,\n channelName: item.channel,\n channelCode: item.code,\n };\n\n return socialData;\n }, {} as InternalSocialDataList);\n}\n","import InternalShippingOption from './internal-shipping-option';\nimport ShippingOption from './shipping-option';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalShippingOption(\n option: ShippingOption,\n isSelected: boolean,\n): InternalShippingOption {\n return {\n description: option.description,\n module: option.type,\n price: option.cost,\n id: option.id,\n selected: isSelected,\n isRecommended: option.isRecommended,\n imageUrl: option.imageUrl,\n transitTime: option.transitTime,\n };\n}\n","import { pick } from 'lodash';\n\nimport { Address, mapToInternalAddress } from '../address';\nimport { mapToInternalCart } from '../cart';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { CheckoutButtonMethodType } from '../checkout-buttons/strategies';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { mapToInternalCustomer } from '../customer';\nimport { HostedFormOrderData } from '../hosted-form';\nimport {\n CardExpiryFormatter,\n CardNumberFormatter,\n HostedInputValues,\n} from '../hosted-form/iframe-content';\nimport { mapToInternalOrder } from '../order';\nimport { mapToInternalShippingOption } from '../shipping';\n\nimport isVaultedInstrument, { isFormattedVaultedInstrument } from './is-vaulted-instrument';\nimport Payment, {\n HostedCreditCardInstrument,\n HostedVaultedInstrument,\n PaymentInstrument,\n} from './payment';\nimport PaymentMethod from './payment-method';\nimport PaymentRequestBody from './payment-request-body';\n\nexport default class PaymentRequestTransformer {\n private _cardExpiryFormatter = new CardExpiryFormatter();\n private _cardNumberFormatter = new CardNumberFormatter();\n\n transform(payment: Payment, checkoutState: InternalCheckoutSelectors): PaymentRequestBody {\n const billingAddress = checkoutState.billingAddress.getBillingAddress();\n const checkout = checkoutState.checkout.getCheckout();\n const customer = checkoutState.customer.getCustomer();\n const order = checkoutState.order.getOrder();\n const paymentMethod = checkoutState.paymentMethods.getPaymentMethod(\n payment.methodId,\n payment.gatewayId,\n );\n const shippingAddress = this._mapShippingAddress(checkoutState, paymentMethod);\n const consignments = checkoutState.consignments.getConsignments();\n const shippingOption = checkoutState.consignments.getShippingOption();\n const storeConfig = checkoutState.config.getStoreConfig();\n const contextConfig = checkoutState.config.getContextConfig();\n const instrumentMeta = checkoutState.instruments.getInstrumentsMeta();\n const paymentMeta = checkoutState.paymentMethods.getPaymentMethodsMeta();\n const orderMeta = checkoutState.order.getOrderMeta();\n const internalCustomer =\n customer && billingAddress && mapToInternalCustomer(customer, billingAddress);\n\n const authToken =\n instrumentMeta &&\n payment.paymentData &&\n (isVaultedInstrument(payment.paymentData) ||\n isFormattedVaultedInstrument(payment.paymentData))\n ? `${checkoutState.payment.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n : checkoutState.payment.getPaymentToken();\n\n if (!authToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n\n return {\n additionalAction: payment.additionalAction,\n authToken,\n customer: internalCustomer,\n billingAddress: billingAddress && mapToInternalAddress(billingAddress),\n shippingAddress: shippingAddress && mapToInternalAddress(shippingAddress, consignments),\n shippingOption: shippingOption && mapToInternalShippingOption(shippingOption, true),\n cart: checkout && mapToInternalCart(checkout),\n order: order && mapToInternalOrder(order, orderMeta),\n orderMeta,\n payment: payment.paymentData,\n paymentMethod: paymentMethod && this._transformPaymentMethod(paymentMethod),\n quoteMeta: {\n request: {\n ...paymentMeta,\n geoCountryCode: contextConfig && contextConfig.geoCountryCode,\n },\n },\n source: 'bigcommerce-checkout-js-sdk',\n store: pick(storeConfig && storeConfig.storeProfile, [\n 'storeHash',\n 'storeId',\n 'storeLanguage',\n 'storeName',\n ]),\n };\n }\n\n transformWithHostedFormData(\n values: HostedInputValues,\n data: HostedFormOrderData,\n nonce: string,\n ): PaymentRequestBody {\n const {\n additionalAction,\n authToken,\n checkout,\n config,\n order,\n orderMeta,\n payment = {},\n paymentMethod,\n paymentMethodMeta,\n } = data;\n const consignment = checkout && checkout.consignments[0];\n const shippingAddress = consignment && consignment.shippingAddress;\n const shippingOption = consignment && consignment.selectedShippingOption;\n\n return {\n additionalAction,\n authToken,\n paymentMethod: paymentMethod && this._transformPaymentMethod(paymentMethod),\n customer:\n order &&\n order.billingAddress &&\n checkout &&\n mapToInternalCustomer(checkout.customer, order.billingAddress),\n billingAddress:\n order && order.billingAddress && mapToInternalAddress(order.billingAddress),\n shippingAddress:\n shippingAddress &&\n checkout &&\n mapToInternalAddress(shippingAddress, checkout.consignments),\n shippingOption: shippingOption && mapToInternalShippingOption(shippingOption, true),\n cart: checkout && mapToInternalCart(checkout),\n order: order && mapToInternalOrder(order, orderMeta),\n orderMeta,\n payment: this._transformHostedInputValues(values, payment, nonce),\n quoteMeta: {\n request: {\n ...paymentMethodMeta,\n geoCountryCode: config && config.context.geoCountryCode,\n },\n },\n source: 'bigcommerce-checkout-js-sdk',\n store:\n config &&\n pick(config.storeConfig.storeProfile, [\n 'storeHash',\n 'storeId',\n 'storeLanguage',\n 'storeName',\n ]),\n };\n }\n\n private _transformPaymentMethod(paymentMethod: PaymentMethod): PaymentMethod {\n if (paymentMethod.method === 'multi-option' && !paymentMethod.gateway) {\n return { ...paymentMethod, gateway: paymentMethod.id };\n }\n\n if (paymentMethod.initializationData && paymentMethod.initializationData.gateway) {\n return { ...paymentMethod, id: paymentMethod.initializationData.gateway };\n }\n\n if (paymentMethod.id === CheckoutButtonMethodType.BRAINTREE_VENMO) {\n return { ...paymentMethod, id: CheckoutButtonMethodType.BRAINTREE_PAYPAL };\n }\n\n return paymentMethod;\n }\n\n private _transformHostedInputValues(\n values: HostedInputValues,\n payment: HostedCreditCardInstrument | HostedVaultedInstrument,\n nonce: string,\n ): PaymentInstrument {\n return 'instrumentId' in payment\n ? {\n ...payment,\n ccCvv: values.cardCodeVerification,\n ccNumber:\n values.cardNumberVerification &&\n this._cardNumberFormatter.unformat(values.cardNumberVerification),\n hostedFormNonce: nonce,\n }\n : {\n ...payment,\n ccCvv: values.cardCode,\n ccExpiry: this._cardExpiryFormatter.toObject(values.cardExpiry || ''),\n ccName: values.cardName || '',\n ccNumber: this._cardNumberFormatter.unformat(values.cardNumber || ''),\n hostedFormNonce: nonce,\n };\n }\n\n private _mapShippingAddress(\n checkoutState: InternalCheckoutSelectors,\n paymentMethod?: PaymentMethod,\n ): Address | undefined {\n if (paymentMethod) {\n const isBopisEnabled = paymentMethod.initializationData?.bopis?.enabled;\n const requiredAddress = paymentMethod.initializationData?.bopis?.requiredAddress;\n const consignments = checkoutState.consignments.getConsignments();\n const isPickup = consignments?.every((consignment) => consignment.selectedPickupOption);\n\n if (isBopisEnabled && isPickup && requiredAddress === 'none') {\n return undefined;\n }\n }\n\n return checkoutState.shippingAddress.getShippingAddress();\n }\n}\n","export enum CheckoutIncludes {\n AvailableShippingOptions = 'consignments.availableShippingOptions',\n PhysicalItemsCategoryNames = 'cart.lineItems.physicalItems.categoryNames',\n DigitalItemsCategoryNames = 'cart.lineItems.digitalItems.categoryNames',\n}\n\nexport default interface CheckoutParams {\n include?: CheckoutIncludes[] | CheckoutIncludeParam;\n}\n\nexport type CheckoutIncludeParam = {\n [key in CheckoutIncludes]?: boolean;\n};\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { find } from 'lodash';\nimport { Observable, Observer } from 'rxjs';\n\nimport { AddressRequestBody } from '../address';\nimport { Cart } from '../cart';\nimport {\n CheckoutIncludes,\n CheckoutParams,\n CheckoutRequestSender,\n InternalCheckoutSelectors,\n ReadableCheckoutStore,\n} from '../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n} from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport Consignment, {\n ConsignmentAssignmentBaseRequestBodyWithAddress,\n ConsignmentAssignmentBaseRequestBodyWithShippingAddress,\n ConsignmentAssignmentRequestBody,\n ConsignmentCreateRequestBody,\n ConsignmentLineItem,\n ConsignmentRequestBody,\n ConsignmentShippingOptionRequestBody,\n ConsignmentsRequestBody,\n ConsignmentUpdateRequestBody,\n} from './consignment';\nimport {\n ConsignmentActionType,\n CreateConsignmentsAction,\n DeleteConsignmentAction,\n LoadShippingOptionsAction,\n UpdateConsignmentAction,\n UpdateShippingOptionAction,\n} from './consignment-actions';\nimport ConsignmentRequestSender from './consignment-request-sender';\n\nexport default class ConsignmentActionCreator {\n constructor(\n private _consignmentRequestSender: ConsignmentRequestSender,\n private _checkoutRequestSender: CheckoutRequestSender,\n ) {}\n\n unassignItemsByAddress(\n consignment: ConsignmentAssignmentRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const address = this._consignmentHasAddress(consignment)\n ? consignment.address\n : consignment.shippingAddress;\n\n const existingConsignment = state.consignments.getConsignmentByAddress(address);\n\n if (!existingConsignment) {\n throw new InvalidArgumentError('No consignment found for the specified address');\n }\n\n const lineItems = this._removeLineItems(\n consignment.lineItems,\n existingConsignment,\n state.cart.getCart(),\n );\n\n if (!lineItems.length) {\n return this.deleteConsignment(existingConsignment.id, options)(store);\n }\n\n return this.updateConsignment(\n {\n id: existingConsignment.id,\n address,\n lineItems,\n },\n options,\n )(store);\n };\n }\n\n assignItemsByAddress(\n consignment: ConsignmentAssignmentRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const address = this._consignmentHasAddress(consignment)\n ? consignment.address\n : consignment.shippingAddress;\n const existingConsignment = state.consignments.getConsignmentByAddress(address);\n\n return this._createOrUpdateConsignment(\n {\n id: existingConsignment && existingConsignment.id,\n address,\n lineItems: this._addLineItems(\n consignment.lineItems,\n existingConsignment,\n state.cart.getCart(),\n ),\n },\n options,\n )(store);\n };\n }\n\n selectShippingOption(\n id: string,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n const consignments = state.consignments.getConsignments();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (!consignments || !consignments.length) {\n throw new MissingDataError(MissingDataErrorType.MissingConsignments);\n }\n\n const consignmentUpdateBody = {\n id: consignments[0].id,\n shippingOptionId: id,\n };\n\n const consignmentMeta = {\n id: consignments[0].id,\n };\n\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .updateConsignment(checkout.id, consignmentUpdateBody, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionSucceeded,\n body,\n consignmentMeta,\n ),\n );\n\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.UpdateShippingOptionFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n loadShippingOptions(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(ConsignmentActionType.LoadShippingOptionsRequested));\n\n this._checkoutRequestSender\n .loadCheckout(checkout.id, {\n ...options,\n params: {\n include: [CheckoutIncludes.AvailableShippingOptions],\n },\n })\n .then(({ body }) => {\n observer.next(\n createAction(ConsignmentActionType.LoadShippingOptionsSucceeded, body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.LoadShippingOptionsFailed,\n response,\n ),\n );\n });\n });\n }\n\n updateAddress(\n address: AddressRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const consignment = this._getUpdateAddressRequestBody(address, store);\n const consignments = store.getState().consignments.getConsignments();\n\n if (consignments && consignments.length) {\n (consignment as ConsignmentUpdateRequestBody).id = consignments[0].id;\n }\n\n return this._createOrUpdateConsignment(consignment, options)(store);\n };\n }\n\n createConsignments(\n consignments: ConsignmentsRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n this._consignmentRequestSender\n .createConsignments(checkout.id, consignments, options)\n .then(({ body }) => {\n observer.next(\n createAction(ConsignmentActionType.CreateConsignmentsSucceeded, body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.CreateConsignmentsFailed,\n response,\n ),\n );\n });\n });\n }\n\n updateConsignment(\n consignment: ConsignmentUpdateRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const consignmentMeta = { id: consignment.id };\n\n observer.next(\n createAction(\n ConsignmentActionType.UpdateConsignmentRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .updateConsignment(checkout.id, consignment, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.UpdateConsignmentSucceeded,\n body,\n consignmentMeta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.UpdateConsignmentFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n deleteConsignment(\n consignmentId: string,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n const consignmentMeta = { id: consignmentId };\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(\n createAction(\n ConsignmentActionType.DeleteConsignmentRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .deleteConsignment(checkout.id, consignmentId, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.DeleteConsignmentSucceeded,\n body,\n consignmentMeta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.DeleteConsignmentFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n updateShippingOption(\n consignment: ConsignmentShippingOptionRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const consignmentMeta = { id: consignment.id };\n\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .updateConsignment(checkout.id, consignment, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionSucceeded,\n body,\n consignmentMeta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.UpdateShippingOptionFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n private _createOrUpdateConsignment(\n consignment: ConsignmentCreateRequestBody | ConsignmentUpdateRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (this._isUpdateConsignmentRequest(consignment)) {\n return this.updateConsignment(consignment, options)(store);\n }\n\n return this.createConsignments([consignment], options)(store);\n };\n }\n\n private _getUpdateAddressRequestBody(\n address: AddressRequestBody,\n store: ReadableCheckoutStore,\n ): ConsignmentRequestBody {\n const state = store.getState();\n const cart = state.cart.getCart();\n\n if (!cart) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n const { physicalItems, customItems = [] } = cart.lineItems;\n\n return {\n address,\n lineItems: [...physicalItems, ...customItems].map((item) => ({\n itemId: item.id,\n quantity: item.quantity,\n })),\n };\n }\n\n private _removeLineItems(\n lineItems: ConsignmentLineItem[],\n consignment: Consignment,\n cart?: Cart,\n ): ConsignmentLineItem[] {\n if (!cart) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n return this._hydrateLineItems(consignment.lineItemIds, cart)\n .map((existingItem) => {\n const sharedItem = find(\n lineItems,\n (lineItem) => lineItem.itemId === existingItem.itemId,\n );\n\n return {\n ...existingItem,\n quantity: sharedItem\n ? existingItem.quantity - sharedItem.quantity\n : existingItem.quantity,\n };\n })\n .filter((lineItem) => lineItem.quantity > 0);\n }\n\n private _addLineItems(\n lineItems: ConsignmentLineItem[],\n consignment?: Consignment,\n cart?: Cart,\n ): ConsignmentLineItem[] {\n if (!consignment) {\n return lineItems;\n }\n\n if (!cart) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n return lineItems\n .concat(this._hydrateLineItems(consignment.lineItemIds, cart))\n .filter((lineItem) => lineItem.quantity > 0);\n }\n\n private _hydrateLineItems(lineItemIds: string[], cart: Cart): ConsignmentLineItem[] {\n return lineItemIds.map((itemId) => {\n const item = find(cart.lineItems.physicalItems, (lineItem) => lineItem.id === itemId);\n\n return {\n itemId,\n quantity: item ? item.quantity : 0,\n };\n });\n }\n\n private _isUpdateConsignmentRequest(\n request: ConsignmentRequestBody,\n ): request is ConsignmentUpdateRequestBody {\n const updateRequest = request as ConsignmentUpdateRequestBody;\n\n return !!updateRequest.id;\n }\n\n private _consignmentHasAddress(\n consignment:\n | ConsignmentAssignmentBaseRequestBodyWithAddress\n | ConsignmentAssignmentBaseRequestBodyWithShippingAddress,\n ): consignment is ConsignmentAssignmentBaseRequestBodyWithAddress {\n return typeof consignment === 'object' && 'address' in consignment;\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout, CheckoutParams } from '../checkout';\nimport {\n ContentType,\n joinIncludes,\n joinOrMergeIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { ConsignmentsRequestBody, ConsignmentUpdateRequestBody } from './consignment';\n\nconst DEFAULT_INCLUDES = [\n 'consignments.availableShippingOptions',\n 'cart.lineItems.physicalItems.options',\n 'cart.lineItems.digitalItems.options',\n 'customer',\n 'promotions.banners',\n];\n\nexport default class ConsignmentRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createConsignments(\n checkoutId: string,\n consignments: ConsignmentsRequestBody,\n { timeout, params: { include } = {} }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/consignments`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, {\n body: consignments,\n params: {\n include: joinOrMergeIncludes(DEFAULT_INCLUDES, include),\n },\n headers,\n timeout,\n });\n }\n\n updateConsignment(\n checkoutId: string,\n consignment: ConsignmentUpdateRequestBody,\n { timeout, params: { include } = {} }: RequestOptions = {},\n ): Promise> {\n const { id, ...body } = consignment;\n const url = `/api/storefront/checkouts/${checkoutId}/consignments/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.put(url, {\n body,\n params: {\n include: joinOrMergeIncludes(DEFAULT_INCLUDES, include),\n },\n headers,\n timeout,\n });\n }\n\n deleteConsignment(\n checkoutId: string,\n consignmentId: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/consignments/${consignmentId}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n const include = joinIncludes(DEFAULT_INCLUDES);\n\n return this._requestSender.delete(url, { params: { include }, headers, timeout });\n }\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, of } from 'rxjs';\nimport { catchError, switchMap, take } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport { SpamProtectionChallengeNotCompletedError, SpamProtectionFailedError } from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\nimport isSpamProtectionExecuteSucceededAction from './is-spam-protection-succeeded-action';\nimport { SpamProtectionAction, SpamProtectionActionType } from './spam-protection-actions';\nimport { SpamProtectionOptions } from './spam-protection-options';\nimport SpamProtectionRequestSender from './spam-protection-request-sender';\n\nexport default class SpamProtectionActionCreator {\n constructor(\n private _googleRecaptcha: GoogleRecaptcha,\n private _requestSender: SpamProtectionRequestSender,\n ) {}\n\n initialize(\n options?: SpamProtectionOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(SpamProtectionActionType.InitializeRequested, undefined)),\n defer(async () => {\n const spamProtectionElementId = options\n ? options.containerId\n : 'spamProtectionContainer';\n\n if (!options && !document.getElementById(spamProtectionElementId)) {\n const spamProtectionElement = document.createElement('div');\n\n spamProtectionElement.setAttribute('id', spamProtectionElementId);\n document.body.appendChild(spamProtectionElement);\n }\n\n const state = store.getState();\n const storeConfig = state.config.getStoreConfigOrThrow();\n const recaptchaSitekey = storeConfig.checkoutSettings.googleRecaptchaSitekey;\n\n await this._googleRecaptcha.load(spamProtectionElementId, recaptchaSitekey);\n\n return createAction(SpamProtectionActionType.InitializeSucceeded);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(SpamProtectionActionType.InitializeFailed, error),\n ),\n );\n }\n\n verifyCheckoutSpamProtection(): ThunkAction {\n return (store) =>\n defer(() => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return concat(\n of(createAction(SpamProtectionActionType.VerifyCheckoutRequested)),\n from(this.execute()(store)).pipe(\n switchMap((action) => {\n if (\n !isSpamProtectionExecuteSucceededAction(action) ||\n !action.payload\n ) {\n return of(action);\n }\n\n return from(\n this._requestSender.validate(checkout.id, action.payload.token),\n ).pipe(\n switchMap(({ body }) =>\n concat(\n of(action),\n of(\n createAction(\n SpamProtectionActionType.VerifyCheckoutSucceeded,\n body,\n ),\n ),\n ),\n ),\n );\n }),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(SpamProtectionActionType.VerifyCheckoutFailed, error),\n ),\n );\n });\n }\n\n execute(): ThunkAction {\n return (store) =>\n concat(\n of(createAction(SpamProtectionActionType.ExecuteRequested)),\n this.initialize()(store),\n this._googleRecaptcha\n .execute()\n .pipe(take(1))\n .pipe(\n switchMap(async ({ error, token }) => {\n if (error instanceof SpamProtectionChallengeNotCompletedError) {\n throw error;\n }\n\n if (error || !token) {\n throw new SpamProtectionFailedError();\n }\n\n return createAction(SpamProtectionActionType.ExecuteSucceeded, {\n token,\n });\n }),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(SpamProtectionActionType.ExecuteFailed, error),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout } from '../checkout';\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class SpamProtectionRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n validate(\n checkoutId: string,\n token: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/spam-protection`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, { body: { token }, headers, timeout });\n }\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport { StoreCreditAction, StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditRequestSender from './store-credit-request-sender';\n\nexport default class StoreCreditActionCreator {\n constructor(private _storeCreditRequestSender: StoreCreditRequestSender) {}\n\n applyStoreCredit(\n useStoreCredit: boolean,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(StoreCreditActionType.ApplyStoreCreditRequested)),\n defer(async () => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const { body } = await (useStoreCredit\n ? this._storeCreditRequestSender.applyStoreCredit(checkout.id, options)\n : this._storeCreditRequestSender.removeStoreCredit(checkout.id, options));\n\n return createAction(StoreCreditActionType.ApplyStoreCreditSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(StoreCreditActionType.ApplyStoreCreditFailed, error),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout, CHECKOUT_DEFAULT_INCLUDES } from '../checkout';\nimport {\n ContentType,\n joinIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nexport default class StoreCreditRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n applyStoreCredit(\n checkoutId: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/store-credit`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, {\n headers,\n timeout,\n params: {\n include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n },\n });\n }\n\n removeStoreCredit(\n checkoutId: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/store-credit`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.delete(url, {\n headers,\n timeout,\n params: {\n include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n },\n });\n }\n}\n","import { RequestError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when the subscriptions fails to be updated\n */\nexport default class UpdateSubscriptionsError extends RequestError {\n constructor(response?: Response) {\n super(response);\n\n this.name = 'UpdateSubscriptionsError';\n this.type = 'update_subscriptions';\n }\n}\n","import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport {\n Subscriptions,\n SubscriptionsActionType,\n SubscriptionsRequestSender,\n UpdateSubscriptionsAction,\n} from '../subscription';\n\nimport { UpdateSubscriptionsError } from './errors';\n\nexport default class SubscriptionsActionCreator {\n constructor(private _subscriptionsRequestSender: SubscriptionsRequestSender) {}\n\n updateSubscriptions(\n subscriptions: Subscriptions,\n options?: RequestOptions,\n ): Observable {\n return concat(\n of(createAction(SubscriptionsActionType.UpdateSubscriptionsRequested)),\n defer(async () => {\n const { body } = await this._subscriptionsRequestSender.updateSubscriptions(\n subscriptions,\n options,\n );\n\n return createAction(SubscriptionsActionType.UpdateSubscriptionsSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(\n SubscriptionsActionType.UpdateSubscriptionsFailed,\n new UpdateSubscriptionsError(error),\n ),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { Subscriptions } from './subscriptions';\n\nexport default class SubscriptionsRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n updateSubscriptions(\n subscriptions: Subscriptions,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/api/storefront/subscriptions';\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, { body: subscriptions, headers, timeout });\n }\n}\n","import { memoize } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\n\nconst cloneDeep = memoize((input: T): T => {\n if (Array.isArray(input)) {\n // Fixed in later versions of typescript https://github.com/microsoft/TypeScript/issues/36390\n return (input as any[]).map((value: T[keyof T]) => cloneDeepSafe(value)) as any;\n }\n\n if (isPlainObject(input)) {\n return (Object.keys(input) as Array).reduce(\n (result, key) => ({\n ...result,\n [key]: cloneDeepSafe(input[key]),\n }),\n {},\n ) as T;\n }\n\n return input;\n});\n\n// Use WeakMap as the MapCache, this allows for better garbage collection\n// There's a deprecated `clear` method in the lodash implementation\n// of MapCache, hence the `any`\ncloneDeep.cache = new WeakMap() as any;\n\n/**\n * This is a wrapper function for `cloneDeep`. We need it because `cloneDeep` is\n * a memoized function using an instance of `WeakMap` as its cache. Without this\n * wrapper, the memoized function will throw an error if it is called with a\n * non-object argument.\n */\nconst cloneDeepSafe = (input: T): T => {\n return typeof input === 'object' && input !== null ? cloneDeep(input) : input;\n};\n\n/**\n * Clone the return value of a function. If the result is the same as previous\n * calls, return the previous clone instead of cloning it again.\n */\nexport default function cloneResult(fn: T): T {\n return ((...args: any[]) => cloneDeepSafe(fn(...args))) as T;\n}\n\nexport type Func = (...args: any[]) => any;\n","import { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { cloneResult as clone } from '../common/utility';\n\nexport default function createPaymentIntegrationSelectors({\n billingAddress: { getBillingAddress, getBillingAddressOrThrow },\n cart: { getCart, getCartOrThrow },\n checkout: { getCheckout, getCheckoutOrThrow },\n config: { getHost, getLocale, getStoreConfig, getStoreConfigOrThrow },\n consignments: { getConsignments, getConsignmentsOrThrow },\n customer: { getCustomer, getCustomerOrThrow },\n instruments: { getCardInstrument, getCardInstrumentOrThrow },\n order: { getOrder, getOrderOrThrow },\n payment: {\n getPaymentToken,\n getPaymentTokenOrThrow,\n getPaymentId,\n getPaymentIdOrThrow,\n getPaymentStatus,\n getPaymentStatusOrThrow,\n getPaymentRedirectUrl,\n getPaymentRedirectUrlOrThrow,\n isPaymentDataRequired,\n },\n paymentMethods: { getPaymentMethod, getPaymentMethodOrThrow },\n paymentStrategies: { isInitialized: isPaymentMethodInitialized },\n shippingAddress: {\n getShippingAddress,\n getShippingAddressOrThrow,\n getShippingAddresses,\n getShippingAddressesOrThrow,\n },\n}: InternalCheckoutSelectors): PaymentIntegrationSelectors {\n return {\n getHost: clone(getHost),\n getLocale: clone(getLocale),\n getBillingAddress: clone(getBillingAddress),\n getBillingAddressOrThrow: clone(getBillingAddressOrThrow),\n getCart: clone(getCart),\n getCartOrThrow: clone(getCartOrThrow),\n getCheckout: clone(getCheckout),\n getCheckoutOrThrow: clone(getCheckoutOrThrow),\n getStoreConfig: clone(getStoreConfig),\n getStoreConfigOrThrow: clone(getStoreConfigOrThrow),\n getConsignments: clone(getConsignments),\n getConsignmentsOrThrow: clone(getConsignmentsOrThrow),\n getCustomer: clone(getCustomer),\n getCustomerOrThrow: clone(getCustomerOrThrow),\n getCardInstrument: clone(getCardInstrument),\n getCardInstrumentOrThrow: clone(getCardInstrumentOrThrow),\n getOrder: clone(getOrder),\n getOrderOrThrow: clone(getOrderOrThrow),\n getPaymentToken,\n getPaymentTokenOrThrow,\n getPaymentId,\n getPaymentIdOrThrow,\n getPaymentStatus,\n getPaymentStatusOrThrow,\n getPaymentRedirectUrl,\n getPaymentRedirectUrlOrThrow,\n getPaymentMethod: clone(getPaymentMethod),\n getPaymentMethodOrThrow: clone(getPaymentMethodOrThrow),\n getShippingAddress: clone(getShippingAddress),\n getShippingAddressOrThrow: clone(getShippingAddressOrThrow),\n getShippingAddresses: clone(getShippingAddresses),\n getShippingAddressesOrThrow: clone(getShippingAddressesOrThrow),\n isPaymentDataRequired,\n isPaymentMethodInitialized,\n };\n}\n","import {\n BillingAddressRequestBody,\n BuyNowCartRequestBody,\n Cart,\n HostedForm,\n HostedFormOptions,\n InitializeOffsitePaymentConfig,\n OrderRequestBody,\n Payment,\n PaymentIntegrationSelectors,\n PaymentIntegrationService,\n RequestOptions,\n ShippingAddressRequestBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BillingAddressActionCreator } from '../billing';\nimport { CartRequestSender } from '../cart';\nimport { CheckoutActionCreator, CheckoutStore } from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\nimport { CustomerActionCreator, CustomerCredentials } from '../customer';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator } from '../order';\nimport PaymentActionCreator from '../payment/payment-action-creator';\nimport PaymentMethodActionCreator from '../payment/payment-method-action-creator';\nimport { ConsignmentActionCreator } from '../shipping';\nimport { SpamProtectionActionCreator } from '../spam-protection';\nimport { StoreCreditActionCreator } from '../store-credit';\n\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\nexport default class DefaultPaymentIntegrationService implements PaymentIntegrationService {\n private _storeProjection: DataStoreProjection;\n\n constructor(\n private _store: CheckoutStore,\n private _storeProjectionFactory: PaymentIntegrationStoreProjectionFactory,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _hostedFormFactory: HostedFormFactory,\n private _orderActionCreator: OrderActionCreator,\n private _billingAddressActionCreator: BillingAddressActionCreator,\n private _consignmentActionCreator: ConsignmentActionCreator,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n private _paymentActionCreator: PaymentActionCreator,\n private _customerActionCreator: CustomerActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _storeCreditActionCreator: StoreCreditActionCreator,\n private _spamProtectionActionCreator: SpamProtectionActionCreator,\n ) {\n this._storeProjection = this._storeProjectionFactory.create(this._store);\n }\n\n createHostedForm(host: string, options: HostedFormOptions): HostedForm {\n return this._hostedFormFactory.create(host, options);\n }\n\n subscribe(\n subscriber: (state: PaymentIntegrationSelectors) => void,\n ...filters: Array<(state: PaymentIntegrationSelectors) => unknown>\n ): () => void {\n return this._storeProjection.subscribe(subscriber, ...filters);\n }\n\n getState(): PaymentIntegrationSelectors {\n return this._storeProjection.getState();\n }\n\n async initializeOffsitePayment(\n initializeOffsitePaymentConfig: InitializeOffsitePaymentConfig,\n ): Promise {\n await this._store.dispatch(\n this._paymentActionCreator.initializeOffsitePayment(initializeOffsitePaymentConfig),\n );\n\n return this._storeProjection.getState();\n }\n\n async loadCheckout(id?: string): Promise {\n if (id) {\n await this._store.dispatch(this._checkoutActionCreator.loadCheckout(id));\n } else {\n await this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout());\n }\n\n return this._storeProjection.getState();\n }\n\n async loadDefaultCheckout(): Promise {\n await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n\n return this._storeProjection.getState();\n }\n\n async loadPaymentMethod(\n methodId: string,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._paymentMethodActionCreator.loadPaymentMethod(methodId, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async submitOrder(\n payload?: OrderRequestBody,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(this._orderActionCreator.submitOrder(payload, options));\n\n return this._storeProjection.getState();\n }\n\n async submitPayment(payment: Payment): Promise {\n await this._store.dispatch(this._paymentActionCreator.submitPayment(payment));\n\n return this._storeProjection.getState();\n }\n\n async finalizeOrder(options?: RequestOptions): Promise {\n const {\n order: { getOrderOrThrow },\n } = this._store.getState();\n\n await this._store.dispatch(\n this._orderActionCreator.finalizeOrder(getOrderOrThrow().orderId, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async updateBillingAddress(\n payload: BillingAddressRequestBody,\n ): Promise {\n await this._store.dispatch(this._billingAddressActionCreator.updateAddress(payload));\n\n return this._storeProjection.getState();\n }\n\n async updateShippingAddress(\n payload: ShippingAddressRequestBody,\n ): Promise {\n await this._store.dispatch(this._consignmentActionCreator.updateAddress(payload));\n\n return this._storeProjection.getState();\n }\n\n async selectShippingOption(\n id: string,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._consignmentActionCreator.selectShippingOption(id, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async signInCustomer(\n credentials: CustomerCredentials,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._customerActionCreator.signInCustomer(credentials, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async signOutCustomer(options?: RequestOptions): Promise {\n await this._store.dispatch(this._customerActionCreator.signOutCustomer(options));\n\n return this._storeProjection.getState();\n }\n\n async createBuyNowCart(\n buyNowCartRequestBody: BuyNowCartRequestBody,\n options?: RequestOptions,\n ): Promise {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n buyNowCartRequestBody,\n options,\n );\n\n return buyNowCart;\n }\n\n async applyStoreCredit(\n useStoreCredit: boolean,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._storeCreditActionCreator.applyStoreCredit(useStoreCredit, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async verifyCheckoutSpamProtection(): Promise {\n const { checkout } = this._store.getState();\n const { shouldExecuteSpamCheck } = checkout.getCheckoutOrThrow();\n\n if (shouldExecuteSpamCheck) {\n await this._store.dispatch(\n this._spamProtectionActionCreator.verifyCheckoutSpamProtection(),\n );\n }\n\n return this._storeProjection.getState();\n }\n}\n","import { Action, createAction, createDataStore, ReadableDataStore } from '@bigcommerce/data-store';\n\nenum ProjectionActionType {\n Synchronize = 'SYNCHRONIZE',\n}\n\ninterface SynchronizeAction extends Action {\n type: ProjectionActionType.Synchronize;\n payload: TState;\n}\n\nexport interface DataStoreProjection\n extends ReadableDataStore {\n notifyState(): void;\n}\n\nexport default function createDataStoreProjection(\n store: ReadableDataStore,\n stateTransformer: (state: TState) => TTransformedState,\n): DataStoreProjection {\n const projection = createDataStore<\n TState | undefined,\n SynchronizeAction,\n TTransformedState\n >(\n (state, action) =>\n action.type === ProjectionActionType.Synchronize ? action.payload : state,\n store.getState(),\n { stateTransformer },\n );\n\n store.subscribe(\n (state) => {\n projection.dispatch(\n createAction(ProjectionActionType.Synchronize, state) as SynchronizeAction,\n );\n },\n { initial: false },\n );\n\n return projection;\n}\n","import { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors, ReadableCheckoutStore } from '../checkout';\nimport { createDataStoreProjection, DataStoreProjection } from '../common/data-store';\n\nexport default class PaymentIntegrationStoreProjectionFactory {\n constructor(\n private _transformSelectors: (\n selectors: InternalCheckoutSelectors,\n ) => PaymentIntegrationSelectors,\n ) {}\n\n create(store: ReadableCheckoutStore): DataStoreProjection {\n return createDataStoreProjection(store, this._transformSelectors);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"shallowequal\");","export interface RootCacheKeyMap {\n maps: ChildCacheKeyMap[];\n}\n\nexport interface IntermediateCacheKeyMap {\n maps: ChildCacheKeyMap[];\n parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n usedCount: number;\n value: any;\n}\n\nexport interface TerminalCacheKeyMap extends IntermediateCacheKeyMap {\n cacheKey: string;\n}\n\nexport type ChildCacheKeyMap = IntermediateCacheKeyMap | TerminalCacheKeyMap;\n\nexport function isTerminalCacheKeyMap(map: ChildCacheKeyMap): map is TerminalCacheKeyMap {\n return Object.prototype.hasOwnProperty.call(map, 'cacheKey');\n}\n\nexport function isRootCacheKeyMap(map: RootCacheKeyMap | ChildCacheKeyMap): map is RootCacheKeyMap {\n return Object.prototype.hasOwnProperty.call(map, 'parentMap');\n}\n","import { noop } from 'lodash';\nimport shallowEqual from 'shallowequal';\n\nimport {\n ChildCacheKeyMap,\n IntermediateCacheKeyMap,\n isRootCacheKeyMap,\n isTerminalCacheKeyMap,\n RootCacheKeyMap,\n TerminalCacheKeyMap,\n} from './cache-key-maps';\n\nexport interface CacheKeyResolverOptions {\n maxSize?: number;\n onExpire?(key: string): void;\n isEqual?(valueA: any, valueB: any): boolean;\n}\n\ninterface ResolveResult {\n index: number;\n parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n map?: TerminalCacheKeyMap;\n}\n\nexport default class CacheKeyResolver {\n private _lastId = 0;\n private _map: RootCacheKeyMap = { maps: [] };\n private _usedMaps: TerminalCacheKeyMap[] = [];\n private _options: Required;\n\n constructor(options?: CacheKeyResolverOptions) {\n this._options = {\n maxSize: 0,\n isEqual: shallowEqual,\n onExpire: noop,\n ...options,\n };\n }\n\n getKey(...args: any[]): string {\n const result = this._resolveMap(...args);\n const { index, parentMap } = result;\n let { map } = result;\n\n if (map && map.cacheKey) {\n map.usedCount++;\n } else {\n map = this._generateMap(parentMap, args.slice(index));\n }\n\n // Keep track of the least used map so we can remove it if the size of\n // the stack exceeds the maximum size.\n this._removeLeastUsedMap(map);\n\n return map.cacheKey;\n }\n\n getUsedCount(...args: any[]): number {\n const { map } = this._resolveMap(...args);\n\n return map ? map.usedCount : 0;\n }\n\n private _resolveMap(...args: any[]): ResolveResult {\n let index = 0;\n let parentMap = this._map;\n\n // Traverse the tree to find the linked list of maps that match the\n // arguments of the call. Each intermediate or terminal map contains a\n // value that could be used to match with the arguments. The last map in\n // the list (the terminal) should contain a cache key. If it can does\n // not exist, we will return a falsy value so that the caller could\n // handle and generate a new cache key.\n while (parentMap.maps.length) {\n let isMatched = false;\n\n for (let mapIndex = 0; mapIndex < parentMap.maps.length; mapIndex++) {\n const map = parentMap.maps[mapIndex];\n\n if (!this._options.isEqual(map.value, args[index])) {\n continue;\n }\n\n // Move the most recently used map to the top of the stack for\n // quicker access\n parentMap.maps.unshift(...parentMap.maps.splice(mapIndex, 1));\n\n if (\n (args.length === 0 || index === args.length - 1) &&\n isTerminalCacheKeyMap(map)\n ) {\n return { index, map, parentMap };\n }\n\n isMatched = true;\n parentMap = map;\n index++;\n\n break;\n }\n\n if (!isMatched) {\n break;\n }\n }\n\n return { index, parentMap };\n }\n\n private _generateMap(\n parent: RootCacheKeyMap | IntermediateCacheKeyMap,\n args: any[],\n ): TerminalCacheKeyMap {\n let index = 0;\n let parentMap = parent;\n let map: IntermediateCacheKeyMap;\n\n do {\n map = {\n maps: [],\n parentMap,\n usedCount: 1,\n value: args[index],\n };\n\n // Continue to build the tree of maps so that it could be resolved\n // next time when the function is called with the same set of\n // arguments.\n parentMap.maps.unshift(map);\n\n parentMap = map;\n index++;\n } while (index < args.length);\n\n const terminalMap = map as TerminalCacheKeyMap;\n\n terminalMap.cacheKey = `${++this._lastId}`;\n\n return terminalMap;\n }\n\n private _removeLeastUsedMap(recentlyUsedMap: TerminalCacheKeyMap): void {\n if (!this._options.maxSize) {\n return;\n }\n\n const index = this._usedMaps.indexOf(recentlyUsedMap);\n\n this._usedMaps.splice(index === -1 ? 0 : index, index === -1 ? 0 : 1, recentlyUsedMap);\n\n if (this._usedMaps.length <= this._options.maxSize) {\n return;\n }\n\n const map = this._usedMaps.pop();\n\n if (!map) {\n return;\n }\n\n this._removeMap(map);\n this._options.onExpire(map.cacheKey);\n }\n\n private _removeMap(map: ChildCacheKeyMap): void {\n if (!map.parentMap) {\n return;\n }\n\n map.parentMap.maps.splice(map.parentMap.maps.indexOf(map), 1);\n\n if (isRootCacheKeyMap(map.parentMap)) {\n return;\n }\n\n this._removeMap(map.parentMap);\n }\n}\n","import { memoize } from '@bigcommerce/memoize';\n\nimport { bindDecorator, CacheKeyResolver, isEqual, isPrivate } from '../utility';\n\n/**\n * Decorates a class by patching all of its methods to cache their return values\n * and return them if they are called again with the same set of parameters. The\n * decorator also binds all the methods to the calling instance so it can be\n * destructed.\n */\nexport default function selectorDecorator>(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 selectorMethodDecorator(target.prototype, key, descriptor),\n );\n });\n\n return decoratedTarget;\n}\n\nfunction selectorMethodDecorator(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor {\n if (typeof descriptor.value !== 'function') {\n return descriptor;\n }\n\n let resolver = new CacheKeyResolver();\n let method = descriptor.value;\n let memoizedMethod = memoize(method);\n\n return bindDecorator(target, key, {\n get() {\n const value = ((...args: any[]) => {\n const cachedValue = memoizedMethod.call(this, ...args);\n\n if (resolver.getUsedCount(...args) === 1) {\n return cachedValue;\n }\n\n const newValue = method.call(this, ...args);\n\n if (isEqual(newValue, cachedValue, { keyFilter: (key) => !isPrivate(key) })) {\n return cachedValue;\n }\n\n memoizedMethod.cache.set(resolver.getKey(...args), newValue);\n\n return newValue;\n }) as T;\n\n Object.defineProperty(this, key, { ...descriptor, value });\n\n return value;\n },\n set(value) {\n resolver = new CacheKeyResolver();\n method = value;\n memoizedMethod = memoize(method);\n },\n });\n}\n\nexport type Constructor = new (...args: any[]) => T;\ntype Method = (...args: any[]) => any;\n","export default function isPrivate(key: string): boolean {\n return `${key}`.indexOf('$$') === 0 || `${key}`.indexOf('_') === 0;\n}\n","import { InternalCheckoutSelectors } from '../checkout';\nimport { selector } from '../common/selector';\n\nimport CheckoutButtonSelector from './checkout-button-selector';\nimport { CheckoutButtonMethodType } from './strategies';\n\n@selector\nexport default class CheckoutButtonErrorSelector {\n private _checkoutButton: CheckoutButtonSelector;\n\n /**\n * @internal\n */\n constructor(selectors: InternalCheckoutSelectors) {\n this._checkoutButton = selectors.checkoutButton;\n }\n\n getInitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined {\n return this._checkoutButton.getInitializeError(methodId);\n }\n\n getDeinitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined {\n return this._checkoutButton.getDeinitializeError(methodId);\n }\n}\n","import { InternalCheckoutSelectors } from '../checkout';\nimport { selector } from '../common/selector';\n\nimport CheckoutButtonSelector from './checkout-button-selector';\nimport { CheckoutButtonMethodType } from './strategies';\n\n@selector\nexport default class CheckoutButtonStatusSelector {\n private _checkoutButton: CheckoutButtonSelector;\n\n /**\n * @internal\n */\n constructor(selectors: InternalCheckoutSelectors) {\n this._checkoutButton = selectors.checkoutButton;\n }\n\n isInitializingButton(methodId?: CheckoutButtonMethodType): boolean {\n return this._checkoutButton.isInitializing(methodId);\n }\n\n isDeinitializingButton(methodId?: CheckoutButtonMethodType): boolean {\n return this._checkoutButton.isDeinitializing(methodId);\n }\n}\n","import { InternalCheckoutSelectors } from '../checkout';\n\nimport CheckoutButtonErrorSelector from './checkout-button-error-selector';\nimport CheckoutButtonSelectors from './checkout-button-selectors';\nimport CheckoutButtonStatusSelector from './checkout-button-status-selector';\n\nexport default function createCheckoutButtonSelectors(\n selectors: InternalCheckoutSelectors,\n): CheckoutButtonSelectors {\n const errors = new CheckoutButtonErrorSelector(selectors);\n const statuses = new CheckoutButtonStatusSelector(selectors);\n\n return {\n errors,\n statuses,\n };\n}\n","import { CheckoutStore, InternalCheckoutSelectors } from '../checkout';\nimport { isElementId, setUniqueElementId } from '../common/dom';\nimport { bindDecorator as bind } from '../common/utility';\n\nimport { CheckoutButtonInitializeOptions, CheckoutButtonOptions } from './checkout-button-options';\nimport CheckoutButtonSelectors from './checkout-button-selectors';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonSelectors from './create-checkout-button-selectors';\n\n@bind\nexport default class CheckoutButtonInitializer {\n private _state: CheckoutButtonSelectors;\n\n /**\n * @internal\n */\n constructor(\n private _store: CheckoutStore,\n private _buttonStrategyActionCreator: CheckoutButtonStrategyActionCreator,\n ) {\n this._state = createCheckoutButtonSelectors(this._store.getState());\n\n this._store.subscribe((state) => {\n this._state = createCheckoutButtonSelectors(state);\n });\n }\n\n /**\n * Returns a snapshot of the current state.\n *\n * The method returns a new instance every time there is a change in the\n * state. You can query the state by calling any of its getter methods.\n *\n * ```js\n * const state = service.getState();\n *\n * console.log(state.errors.getInitializeButtonError());\n * console.log(state.statuses.isInitializingButton());\n * ```\n *\n * @returns The current customer's checkout state\n */\n getState(): CheckoutButtonSelectors {\n return this._state;\n }\n\n /**\n * Subscribes to any changes to the current state.\n *\n * The method registers a callback function and executes it every time there\n * is a change in the current state.\n *\n * ```js\n * service.subscribe(state => {\n * console.log(state.statuses.isInitializingButton());\n * });\n * ```\n *\n * The method can be configured to notify subscribers only regarding\n * relevant changes, by providing a filter function.\n *\n * ```js\n * const filter = state => state.errors.getInitializeButtonError();\n *\n * // Only trigger the subscriber when the cart changes.\n * service.subscribe(state => {\n * console.log(state.errors.getInitializeButtonError())\n * }, filter);\n * ```\n *\n * @param subscriber - The function to subscribe to state changes.\n * @param filters - One or more functions to filter out irrelevant state\n * changes. If more than one function is provided, the subscriber will only\n * be triggered if all conditions are met.\n * @returns A function, if called, will unsubscribe the subscriber.\n */\n subscribe(\n subscriber: (state: CheckoutButtonSelectors) => void,\n ...filters: Array<(state: CheckoutButtonSelectors) => any>\n ): () => void {\n return this._store.subscribe(\n () => subscriber(this.getState()),\n (state) => state.checkoutButton.getState(),\n ...filters.map(\n (filter) => (state: InternalCheckoutSelectors) =>\n filter(createCheckoutButtonSelectors(state)),\n ),\n );\n }\n\n /**\n * Initializes the checkout button of a payment method.\n *\n * When the checkout button is initialized, it will be inserted into the DOM,\n * ready to be interacted with by the customer.\n *\n * ```js\n * initializer.initializeButton({\n * methodId: 'braintreepaypal',\n * containerId: 'checkoutButton',\n * braintreepaypal: {\n * },\n * });\n * ```\n *\n * @param options - Options for initializing the checkout button.\n * @returns A promise that resolves to the current state.\n */\n initializeButton(options: CheckoutButtonInitializeOptions): Promise {\n const containerIds = isElementId(options.containerId)\n ? [options.containerId]\n : setUniqueElementId(options.containerId, `${options.methodId}-container`);\n\n return Promise.all(\n containerIds.map((containerId) => {\n const action = this._buttonStrategyActionCreator.initialize({\n ...options,\n containerId,\n });\n const queueId = `checkoutButtonStrategy:${options.methodId}:${containerId}`;\n\n return this._store.dispatch(action, { queueId });\n }),\n ).then(() => this.getState());\n }\n\n /**\n * De-initializes the checkout button by performing any necessary clean-ups.\n *\n * ```js\n * await service.deinitializeButton({\n * methodId: 'braintreepaypal',\n * });\n * ```\n *\n * @param options - Options for deinitializing the checkout button.\n * @returns A promise that resolves to the current state.\n */\n deinitializeButton(options: CheckoutButtonOptions): Promise {\n const action = this._buttonStrategyActionCreator.deinitialize(options);\n const queueId = `checkoutButtonStrategy:${options.methodId}`;\n\n return this._store.dispatch(action, { queueId }).then(() => this.getState());\n }\n}\n","/* eslint-disable no-useless-escape */\nexport default function isElementId(id: string): boolean {\n return /^\\w[\\w\\-\\:\\.]*$/.test(id);\n}\n","import { uniqueId } from 'lodash';\n\nimport { InvalidArgumentError } from '../error/errors';\n\nexport default function setUniqueElementId(selector: string, idPrefix: string): string[] {\n const containers = document.querySelectorAll(selector);\n\n if (!containers.length) {\n throw new InvalidArgumentError(\n `Unable to find any element with the specified selector: ${selector}`,\n );\n }\n\n return Array.prototype.slice.call(containers).map((container: HTMLElement) => {\n if (!container.id) {\n container.id = uniqueId(idPrefix);\n }\n\n return container.id;\n });\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, empty, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { CheckoutButtonStrategy as CheckoutButtonStrategyV2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { Registry } from '../common/registry';\nimport { PaymentMethodActionCreator } from '../payment';\n\nimport {\n CheckoutButtonActionType,\n DeinitializeButtonAction,\n InitializeButtonAction,\n} from './checkout-button-actions';\nimport { CheckoutButtonInitializeOptions, CheckoutButtonOptions } from './checkout-button-options';\nimport CheckoutButtonRegistryV2 from './checkout-button-strategy-registry-v2';\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\n\nexport default class CheckoutButtonStrategyActionCreator {\n constructor(\n private _registry: Registry,\n private _registryV2: CheckoutButtonRegistryV2,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n ) {}\n\n initialize(\n options: CheckoutButtonInitializeOptions,\n ): ThunkAction {\n return (store) => {\n const meta = {\n methodId: options.methodId,\n containerId: options.containerId,\n };\n\n if (\n store.getState().checkoutButton.isInitialized(options.methodId, options.containerId)\n ) {\n return empty();\n }\n\n const paymentMethodRequestParams = options.currencyCode\n ? { params: { currencyCode: options.currencyCode } }\n : {};\n\n const paymentMethodRequestOptions = {\n ...paymentMethodRequestParams,\n timeout: options.timeout,\n useCache: true,\n };\n\n return concat(\n of(\n createAction(\n CheckoutButtonActionType.InitializeButtonRequested,\n undefined,\n meta,\n ),\n ),\n this._paymentMethodActionCreator.loadPaymentMethod(\n options.methodId,\n paymentMethodRequestOptions,\n )(store),\n defer(() =>\n this._getStrategy(options.methodId)\n .initialize(options)\n .then(() =>\n createAction(\n CheckoutButtonActionType.InitializeButtonSucceeded,\n undefined,\n meta,\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CheckoutButtonActionType.InitializeButtonFailed, error, meta),\n ),\n );\n };\n }\n\n deinitialize(\n options: CheckoutButtonOptions,\n ): ThunkAction {\n return (store) => {\n const meta = { methodId: options.methodId };\n\n if (!store.getState().checkoutButton.isInitialized(options.methodId)) {\n return empty();\n }\n\n return concat(\n of(\n createAction(\n CheckoutButtonActionType.DeinitializeButtonRequested,\n undefined,\n meta,\n ),\n ),\n defer(() =>\n this._getStrategy(options.methodId)\n .deinitialize()\n .then(() =>\n createAction(\n CheckoutButtonActionType.DeinitializeButtonSucceeded,\n undefined,\n meta,\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(\n CheckoutButtonActionType.DeinitializeButtonFailed,\n error,\n meta,\n ),\n ),\n );\n };\n }\n\n private _getStrategy(\n methodId: CheckoutButtonMethodType,\n ): CheckoutButtonStrategy | CheckoutButtonStrategyV2 {\n let strategy: CheckoutButtonStrategy | CheckoutButtonStrategyV2;\n\n try {\n strategy = this._registryV2.get({ id: methodId });\n } catch {\n strategy = this._registry.get(methodId);\n }\n\n return strategy;\n }\n}\n","import { InvalidArgumentError } from '../error/errors';\n\nimport Factory from './factory';\n\nexport default class Registry {\n private _factories: { [key: string]: Factory };\n private _instances: { [key: string]: T };\n private _defaultToken: string;\n private _useFallback: string | boolean;\n private _tokenResolver: (token: string, registeredTokens: string[]) => string | undefined;\n\n constructor(options?: RegistryOptions) {\n this._factories = {};\n this._instances = {};\n this._defaultToken = options?.defaultToken ?? 'default';\n this._useFallback = options?.useFallback ?? true;\n this._tokenResolver = options?.tokenResolver ?? ((token) => token);\n }\n\n get(token?: K, cacheToken?: string): T {\n try {\n return this._getInstance(\n token || this._defaultToken,\n cacheToken || token || this._defaultToken,\n );\n } catch (error) {\n if (!this._useFallback) {\n throw error;\n }\n\n return this._getInstance(this._defaultToken, cacheToken || this._defaultToken);\n }\n }\n\n register(token: K, factory: Factory): void {\n if (this._hasFactory(token)) {\n throw new InvalidArgumentError(`'${token}' is already registered.`);\n }\n\n this._factories[token] = factory;\n }\n\n protected _hasFactory(token: string): boolean {\n return !!this._factories[token];\n }\n\n private _hasInstance(token: string): boolean {\n return !!this._instances[token];\n }\n\n private _getInstance(token: string, cacheToken: string): T {\n if (!this._hasInstance(cacheToken)) {\n const resolvedToken = this._tokenResolver(token, Object.keys(this._factories));\n const factory = resolvedToken && this._factories[resolvedToken];\n\n if (!factory) {\n throw new InvalidArgumentError(`'${token}' is not registered.`);\n }\n\n this._instances[cacheToken] = factory();\n }\n\n return this._instances[cacheToken];\n }\n}\n\nexport interface RegistryOptions {\n defaultToken?: string;\n useFallback?: boolean;\n tokenResolver?(token: string, registeredTokens: string[]): string | undefined;\n}\n","import { Cart } from '../cart';\n\nimport getLineItemsCount from './getLineItemsCount';\n\nexport default function getShippableItemsCount(cart: Cart): number {\n return getLineItemsCount(cart.lineItems.physicalItems.filter((item) => !item.addedByPromotion));\n}\n","import { reduce } from 'lodash';\n\nimport { LineItem } from '../cart';\n\nexport default function getLineItemsCount(lineItems: LineItem[]): number {\n return reduce(lineItems, (total, item) => total + item.quantity, 0);\n}\n","import { InternalCheckoutSelectors } from '../../../../../core/src/checkout';\n\nexport type EnvironmentType = 'PRODUCTION' | 'TEST';\n\nexport interface AmazonPayV2Options {\n environment: EnvironmentType;\n}\n\nexport interface AmazonPayV2SDK {\n Pay: AmazonPayV2Client;\n}\n\nexport interface RequestConfig {\n createCheckoutSessionConfig: AmazonPayV2CheckoutSessionConfig;\n estimatedOrderAmount?: AmazonPayV2Price;\n productType?: AmazonPayV2PayOptions;\n}\n\nexport interface AmazonPayV2Button {\n /**\n * Allows you to define custom actions.\n */\n onClick: (callback: () => void) => void;\n\n /**\n * Initiates the Amazon Pay checkout.\n */\n initCheckout(requestConfig: RequestConfig): void;\n}\n\nexport type AmazonPayV2ButtonParameters = AmazonPayV2ButtonParams | AmazonPayV2NewButtonParams;\n\nexport interface AmazonPayV2Client {\n /**\n * Render the Amazon Pay button to a HTML container element.\n *\n * @param containerId - HTML element id.\n * @param params - Button rendering params.\n */\n renderButton(containerId: string, params: AmazonPayV2ButtonParameters): AmazonPayV2Button;\n\n /**\n * Bind click events to HTML elements, so that when the element is clicked, the buyer can select a different shipping address or payment method.\n *\n * @param buttonId - HTML element id.\n * @param options - Element binding options.\n */\n bindChangeAction(buttonId: string, options: AmazonPayV2ChangeActionOptions): void;\n\n /**\n * Allow buyers to sign out from their Amazon account.\n */\n signout(): void;\n}\n\nexport interface AmazonPayV2HostWindow extends Window {\n amazon?: AmazonPayV2SDK;\n}\n\nexport interface AmazonPayV2ButtonConfig {\n /**\n * Amazon Pay merchant account identifier.\n */\n merchantId: string;\n\n /**\n * Placement of the Amazon Pay button on your website.\n */\n placement: AmazonPayV2Placement;\n\n /**\n * Ledger currency provided during registration for the given merchant identifier.\n */\n ledgerCurrency: AmazonPayV2LedgerCurrency;\n\n /**\n * Product type selected for checkout. Default is 'PayAndShip'.\n */\n productType?: AmazonPayV2PayOptions;\n\n /**\n * Color of the Amazon Pay button.\n */\n buttonColor?: AmazonPayV2ButtonColor;\n\n /**\n * Language used to render the button and text on Amazon Pay hosted pages.\n */\n checkoutLanguage?: AmazonPayV2CheckoutLanguage;\n\n /**\n * Sets button to Sandbox environment. You do not have to set this parameter\n * if your `publicKeyId` has an environment prefix. Default is false.\n */\n sandbox?: boolean;\n\n /**\n * Sets Amazon Pay button design.\n */\n design?: AmazonPayV2ButtonDesign;\n}\n\nexport interface AmazonPayV2ButtonParams extends AmazonPayV2ButtonConfig {\n /**\n * Configuration for calling the endpoint to Create Checkout Session.\n */\n createCheckoutSession: AmazonPayV2CheckoutSession;\n}\n\nexport interface AmazonPayV2NewButtonParams extends AmazonPayV2ButtonConfig {\n /**\n * Credential provided by Amazon Pay. You must also set the `sandbox`\n * parameter if your `publicKeyId` does not have an environment prefix.\n */\n publicKeyId?: string;\n\n /**\n * It does not have to match the final order amount if the buyer updates\n * their order after starting checkout. Amazon Pay will use this value to\n * assess transaction risk and prevent buyers from selecting payment methods\n * that can't be used to process the order.\n */\n estimatedOrderAmount?: AmazonPayV2Price;\n\n /**\n * Create Checkout Session configuration.\n */\n createCheckoutSessionConfig?: AmazonPayV2CheckoutSessionConfig;\n}\n\nexport interface AmazonPayV2CheckoutSession {\n /**\n * Endpoint URL to Create Checkout Session.\n */\n url: string;\n\n /**\n * HTTP request method. Default is 'POST'.\n */\n method?: 'GET' | 'POST';\n\n /**\n * Checkout Session ID parameter in the response. Default is 'checkoutSessionId'.\n */\n extractAmazonCheckoutSessionId?: string;\n}\n\nexport interface AmazonPayV2CheckoutSessionConfig {\n /**\n * A payload that Amazon Pay will use to create a Checkout Session object.\n */\n payloadJSON: string;\n\n /**\n * Payload's signature.\n */\n signature: string;\n\n /**\n * Credential provided by Amazon Pay. You do not have to set this parameter\n * if your `publicKeyId` has an environment prefix.\n */\n publicKeyId?: string;\n}\n\nexport interface AmazonPayV2Price {\n /**\n * Transaction amount.\n */\n amount: string;\n\n /**\n * Transaction currency code in ISO 4217 format. Example: USD.\n */\n currencyCode: string;\n}\n\nexport type AmazonPayV2ChangeActionType = 'changeAddress' | 'changePayment';\n\nexport interface AmazonPayV2ChangeActionOptions {\n /**\n * Amazon Pay Checkout Session identifier.\n */\n amazonCheckoutSessionId: string;\n\n /**\n * Update requested by the buyer.\n */\n changeAction: AmazonPayV2ChangeActionType;\n}\n\nexport enum AmazonPayV2Regions {\n de = 'eu',\n jp = 'fe',\n uk = 'eu',\n us = 'na',\n}\n\nexport enum AmazonPayV2CheckoutLanguage {\n en_US = 'en_US',\n en_GB = 'en_GB',\n de_DE = 'de_DE',\n fr_FR = 'fr_FR',\n it_IT = 'it_IT',\n es_ES = 'es_ES',\n ja_JP = 'ja_JP',\n}\n\nexport enum AmazonPayV2Placement {\n /** Initial or main page. */\n Home = 'Home',\n\n /** Product details page. */\n Product = 'Product',\n\n /** Cart review page before buyer starts checkout. */\n Cart = 'Cart',\n\n /** Any page after buyer starts checkout. */\n Checkout = 'Checkout',\n\n /** Any page that doesn't fit the previous descriptions. */\n Other = 'Other',\n}\n\nexport enum AmazonPayV2LedgerCurrency {\n USD = 'USD',\n EUR = 'EUR',\n GBP = 'GBP',\n JPY = 'JPY',\n}\n\nexport enum AmazonPayV2PayOptions {\n /** Select this product type if you need the buyer's shipping details. */\n PayAndShip = 'PayAndShip',\n\n /** Select this product type if you do not need the buyer's shipping details. */\n PayOnly = 'PayOnly',\n}\n\nexport enum AmazonPayV2ButtonColor {\n Gold = 'Gold',\n LightGray = 'LightGray',\n DarkGray = 'DarkGray',\n}\n\nexport enum AmazonPayV2ButtonDesign {\n C0001 = 'C0001',\n}\n\nexport interface AmazonPayV2ButtonRenderingOptions {\n checkoutState: InternalCheckoutSelectors;\n containerId: string;\n decoupleCheckoutInitiation?: boolean;\n methodId: string;\n buttonColor?: AmazonPayV2ButtonColor;\n options?: AmazonPayV2ButtonParameters;\n placement: AmazonPayV2Placement;\n}\n","import { PaymentMethod } from '../..';\nimport { InternalCheckoutSelectors } from '../../../../../core/src/checkout';\nimport { getShippableItemsCount } from '../../../../../core/src/shipping';\nimport { guard } from '../../../../src/common/utility';\nimport { StoreProfile } from '../../../../src/config';\nimport { CheckoutSettings } from '../../../../src/config/config';\nimport BuyNowCartRequestBody from '../../../cart/buy-now-cart-request-body';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '../../../common/error/errors';\n\nimport {\n AmazonPayV2Button,\n AmazonPayV2ButtonColor,\n AmazonPayV2ButtonConfig,\n AmazonPayV2ButtonDesign,\n AmazonPayV2ButtonParameters,\n AmazonPayV2ButtonRenderingOptions,\n AmazonPayV2ChangeActionType,\n AmazonPayV2CheckoutSessionConfig,\n AmazonPayV2NewButtonParams,\n AmazonPayV2PayOptions,\n AmazonPayV2Placement,\n AmazonPayV2Price,\n AmazonPayV2SDK,\n RequestConfig,\n} from './amazon-pay-v2';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\n\nexport default class AmazonPayV2PaymentProcessor {\n private _amazonPayV2SDK?: AmazonPayV2SDK;\n private _buttonParentContainer?: HTMLDivElement;\n private _amazonPayV2Button?: AmazonPayV2Button;\n private _buyNowCartRequestBody?: BuyNowCartRequestBody;\n\n constructor(private _amazonPayV2ScriptLoader: AmazonPayV2ScriptLoader) {}\n\n async initialize(paymentMethod: PaymentMethod): Promise {\n this._amazonPayV2SDK = await this._amazonPayV2ScriptLoader.load(paymentMethod);\n this._buttonParentContainer =\n this._buttonParentContainer || this._createAmazonPayButtonParentContainer();\n }\n\n deinitialize(): Promise {\n this._amazonPayV2Button = undefined;\n this._buttonParentContainer?.remove();\n this._buttonParentContainer = undefined;\n this._amazonPayV2SDK = undefined;\n\n return Promise.resolve();\n }\n\n bindButton(\n buttonId: string,\n sessionId: string,\n changeAction: AmazonPayV2ChangeActionType,\n ): void {\n this._getAmazonPayV2SDK().Pay.bindChangeAction(`#${buttonId}`, {\n amazonCheckoutSessionId: sessionId,\n changeAction,\n });\n }\n\n createButton(containerId: string, options: AmazonPayV2ButtonParameters): void {\n this._amazonPayV2Button = this._getAmazonPayV2SDK().Pay.renderButton(\n `#${containerId}`,\n options,\n );\n }\n\n prepareCheckout(createCheckoutSessionConfig: Required) {\n const requestConfig = this._prepareRequestConfig(createCheckoutSessionConfig);\n\n this._getAmazonPayV2Button().onClick(() => {\n this._getAmazonPayV2Button().initCheckout(requestConfig);\n });\n }\n\n prepareCheckoutWithCreationRequestConfig(\n createCheckoutConfig: () => Promise<{\n createCheckoutSessionConfig: Required;\n estimatedOrderAmount: AmazonPayV2Price;\n productType: AmazonPayV2PayOptions;\n }>,\n ) {\n this._getAmazonPayV2Button().onClick(async () => {\n const config = await createCheckoutConfig();\n const requestConfig = this._prepareRequestConfig(\n config.createCheckoutSessionConfig,\n config.estimatedOrderAmount,\n config.productType,\n );\n\n this._getAmazonPayV2Button().initCheckout(requestConfig);\n });\n }\n\n async signout(): Promise {\n if (this._amazonPayV2SDK) {\n this._amazonPayV2SDK.Pay.signout();\n }\n\n return Promise.resolve();\n }\n\n renderAmazonPayButton({\n buttonColor,\n checkoutState,\n containerId,\n decoupleCheckoutInitiation = false,\n methodId,\n options,\n placement,\n }: AmazonPayV2ButtonRenderingOptions): HTMLDivElement {\n const container = document.querySelector(`#${containerId}`);\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to render the Amazon Pay button to an invalid HTML container element.',\n );\n }\n\n const { id: parentContainerId } = container.appendChild(this._getButtonParentContainer());\n\n if (options) {\n options.design = AmazonPayV2ButtonDesign.C0001;\n }\n\n const amazonPayV2ButtonOptions =\n options ??\n this._getAmazonPayV2ButtonOptions(\n checkoutState,\n methodId,\n placement,\n decoupleCheckoutInitiation,\n buttonColor,\n );\n\n this.createButton(parentContainerId, amazonPayV2ButtonOptions);\n\n return this._getButtonParentContainer();\n }\n\n setCartRequestBody(buyNowCartRequestBody: BuyNowCartRequestBody) {\n this._buyNowCartRequestBody = buyNowCartRequestBody;\n }\n\n /**\n * @internal\n */\n isPh4Enabled(\n features: CheckoutSettings['features'],\n storeCountryCode: StoreProfile['storeCountryCode'],\n ): boolean {\n const isPh4Enabled = !!features['PROJECT-3483.amazon_pay_ph4'];\n const isPh4UsOnly = !!features['INT-6885.amazon_pay_ph4_us_only'];\n\n if (isPh4Enabled && isPh4UsOnly) {\n return storeCountryCode === 'US';\n }\n\n return isPh4Enabled;\n }\n\n private _prepareRequestConfig(\n createCheckoutSessionConfig: Required,\n estimatedOrderAmount?: AmazonPayV2Price,\n productType?: AmazonPayV2PayOptions,\n ): RequestConfig {\n const { publicKeyId, ...signedPayload } = createCheckoutSessionConfig;\n\n return {\n createCheckoutSessionConfig: this._isEnvironmentSpecific(publicKeyId)\n ? signedPayload\n : createCheckoutSessionConfig,\n ...(estimatedOrderAmount && { estimatedOrderAmount }),\n ...(productType && { productType }),\n };\n }\n\n private _createAmazonPayButtonParentContainer(): HTMLDivElement {\n const uid = Math.random().toString(16).substr(-4);\n const parentContainer = document.createElement('div');\n\n parentContainer.id = `amazonpay_button_parent_container_${uid}`;\n\n return parentContainer;\n }\n\n private _getAmazonPayV2ButtonOptions(\n {\n cart: { getCart },\n checkout: { getCheckout },\n config: { getStoreConfigOrThrow },\n paymentMethods: { getPaymentMethodOrThrow },\n }: InternalCheckoutSelectors,\n methodId: string,\n placement: AmazonPayV2Placement,\n decoupleCheckoutInitiation = false,\n buttonColor = AmazonPayV2ButtonColor.Gold,\n ): AmazonPayV2ButtonParameters {\n const {\n config: { merchantId, testMode },\n initializationData: {\n checkoutLanguage,\n checkoutSessionMethod,\n createCheckoutSessionConfig,\n extractAmazonCheckoutSessionId,\n ledgerCurrency,\n publicKeyId,\n },\n } = getPaymentMethodOrThrow(methodId);\n\n if (!merchantId || !ledgerCurrency) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const buttonBaseConfig: AmazonPayV2ButtonConfig = {\n merchantId,\n ledgerCurrency,\n checkoutLanguage,\n placement,\n buttonColor,\n design: AmazonPayV2ButtonDesign.C0001,\n };\n\n if (this._buyNowCartRequestBody) {\n return {\n ...buttonBaseConfig,\n sandbox: !!testMode,\n };\n }\n\n const cart = getCart();\n\n buttonBaseConfig.productType =\n cart && getShippableItemsCount(cart) === 0\n ? AmazonPayV2PayOptions.PayOnly\n : AmazonPayV2PayOptions.PayAndShip;\n\n const {\n checkoutSettings: { features },\n storeProfile: { shopPath, storeCountryCode },\n } = getStoreConfigOrThrow();\n\n if (this.isPh4Enabled(features, storeCountryCode)) {\n const amount = getCheckout()?.outstandingBalance.toString();\n const currencyCode = cart?.currency.code;\n const buttonOptions: AmazonPayV2NewButtonParams = { ...buttonBaseConfig };\n let tmpConfig: AmazonPayV2CheckoutSessionConfig;\n\n if (this._isEnvironmentSpecific(publicKeyId)) {\n buttonOptions.publicKeyId = publicKeyId;\n tmpConfig = createCheckoutSessionConfig;\n } else {\n buttonOptions.sandbox = !!testMode;\n tmpConfig = { ...createCheckoutSessionConfig, publicKeyId };\n }\n\n if (!decoupleCheckoutInitiation) {\n buttonOptions.createCheckoutSessionConfig = tmpConfig;\n }\n\n if (amount && currencyCode) {\n buttonOptions.estimatedOrderAmount = { amount, currencyCode };\n }\n\n return buttonOptions;\n }\n\n const createCheckoutSession = {\n method: checkoutSessionMethod,\n url: features['INT-5826.amazon_relative_url']\n ? `/remote-checkout/${methodId}/payment-session`\n : `${shopPath}/remote-checkout/${methodId}/payment-session`,\n extractAmazonCheckoutSessionId,\n };\n\n return {\n ...buttonBaseConfig,\n createCheckoutSession,\n sandbox: !!testMode,\n };\n }\n\n private _isEnvironmentSpecific(publicKeyId: string): boolean {\n return /^(SANDBOX|LIVE)/.test(publicKeyId);\n }\n\n private _getAmazonPayV2SDK(): AmazonPayV2SDK {\n return this._getOrThrow(this._amazonPayV2SDK);\n }\n\n private _getButtonParentContainer(): HTMLDivElement {\n return this._getOrThrow(this._buttonParentContainer);\n }\n\n private _getAmazonPayV2Button(): AmazonPayV2Button {\n return this._getOrThrow(this._amazonPayV2Button);\n }\n\n private _getOrThrow(value?: T): T {\n return guard(\n value,\n () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n );\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when the client library of a payment method fails\n * to load, or for some reason, it is inaccessible.\n */\nexport default class PaymentMethodClientUnavailableError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n );\n\n this.name = 'PaymentMethodClientUnavailableError';\n this.type = 'payment_method_client_unavailable';\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\nimport PaymentMethod from '../../payment-method';\n\nimport { AmazonPayV2HostWindow, AmazonPayV2Regions, AmazonPayV2SDK } from './amazon-pay-v2';\n\nexport default class AmazonPayV2ScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: AmazonPayV2HostWindow = window,\n ) {}\n\n async load(method: PaymentMethod): Promise {\n const { initializationData: { region = 'us' } = {} } = method;\n\n const amazonPayV2Region = (AmazonPayV2Regions as any)[region];\n\n await this._scriptLoader.loadScript(\n `https://static-${amazonPayV2Region}.payments-amazon.com/checkout.js`,\n );\n\n if (!this._window.amazon) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.amazon;\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * Throw this error if the shopper is using a browser version that is not\n * supported by us or any third party provider we use.\n */\nexport default class UnsupportedBrowserError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unsupported browser error');\n\n this.name = 'UnsupportedBrowserError';\n this.type = 'unsupported_browser';\n }\n}\n","import { Omit } from '../../../common/types';\nimport {\n GooglePayBraintreeDataRequest,\n GooglePayBraintreePaymentDataRequestV1,\n GooglePayCreator,\n GooglePaymentData,\n TokenizePayload,\n} from '../googlepay';\nimport { PaypalAuthorizeData, PaypalButtonOptions, PaypalButtonRender, PaypalSDK } from '../paypal';\n\nimport {\n VisaCheckoutInitOptions,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from './visacheckout';\n\n/**\n *\n * Constants\n *\n */\nexport const PAYPAL_COMPONENTS = ['buttons', 'messages'];\n\n/**\n *\n * Common\n *\n */\nexport interface BraintreeModuleCreator<\n TInstance,\n TOptions = BraintreeModuleCreatorConfig,\n TError = BraintreeError,\n> {\n create(\n config: TOptions,\n callback?: (error: TError, instance: TInstance) => void,\n ): Promise;\n}\n\nexport interface BraintreeModuleCreatorConfig {\n client?: BraintreeClient;\n authorization?: string;\n}\n\nexport interface BraintreeModule {\n teardown(): Promise;\n}\n\nexport interface BraintreeSDK {\n client?: BraintreeClientCreator;\n dataCollector?: BraintreeDataCollectorCreator;\n googlePayment?: GooglePayCreator;\n hostedFields?: BraintreeHostedFieldsCreator;\n paypal?: BraintreePaypalCreator;\n paypalCheckout?: BraintreePaypalCheckoutCreator;\n threeDSecure?: BraintreeThreeDSecureCreator;\n venmo?: BraintreeVenmoCheckoutCreator;\n visaCheckout?: BraintreeVisaCheckoutCreator;\n}\n\nexport interface BraintreePaypalRequest {\n amount: string | number;\n billingAgreementDescription?: string;\n currency?: string;\n displayName?: string;\n enableShippingAddress: true;\n flow: 'checkout' | 'vault';\n intent?: 'authorize' | 'order' | 'sale';\n landingPageType?: 'login' | 'billing';\n locale?: string;\n offerCredit?: boolean;\n shippingAddressEditable?: boolean;\n shippingAddressOverride?: BraintreeShippingAddressOverride;\n useraction?: 'commit';\n}\n\nexport interface BraintreeShippingAddressOverride {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n phone?: string;\n recipientName?: string;\n}\n\nexport interface BraintreeTokenizePayload {\n nonce: string;\n type: 'PaypalAccount' | 'VenmoAccount';\n details: BraintreeDetails;\n creditFinancingOffered?: {\n totalCost: {\n value: string;\n currency: string;\n };\n term: number;\n monthlyPayment: {\n value: string;\n currency: string;\n };\n totalInsterest: {\n value: string;\n currency: string;\n };\n payerAcceptance: boolean;\n cartAmountImmutable: boolean;\n };\n}\n\nexport interface BraintreeDetails {\n username?: string;\n email?: string;\n payerId?: string;\n firstName?: string;\n lastName?: string;\n countryCode?: string;\n phone?: string;\n shippingAddress?: BraintreeShippingAddress;\n billingAddress?: BraintreeAddress;\n}\n\nexport interface BraintreeAddress {\n line1: string;\n line2: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n}\n\nexport interface BraintreeShippingAddress extends BraintreeAddress {\n recipientName: string;\n}\n\nexport interface BraintreeVerifyPayload {\n nonce: string;\n details: {\n cardType: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n}\n\nexport interface BraintreeError extends Error {\n type: 'CUSTOMER' | 'MERCHANT' | 'NETWORK' | 'INTERNAL' | 'UNKNOWN';\n code: string;\n details?: unknown;\n}\n\n/**\n *\n * Braintree Client\n *\n */\nexport type BraintreeClientCreator = BraintreeModuleCreator;\n\nexport interface BraintreeClient {\n request(payload: BraintreeRequestData): Promise;\n getVersion(): string | void;\n}\n\nexport interface BraintreeRequestData {\n data: {\n creditCard: {\n billingAddress?: {\n countryCodeAlpha2: string;\n locality: string;\n countryName: string;\n postalCode: string;\n streetAddress: string;\n };\n cardholderName: string;\n cvv?: string;\n expirationDate: string;\n number: string;\n options: {\n validate: boolean;\n };\n };\n };\n endpoint: string;\n method: string;\n}\n\nexport interface BraintreeTokenizeResponse {\n creditCards: BraintreeHostedFieldsTokenizePayload[];\n}\n\n/**\n *\n * Braintree Data Collector\n *\n */\nexport type BraintreeDataCollectorCreator = BraintreeModuleCreator<\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig\n>;\n\nexport interface BraintreeDataCollectorCreatorConfig extends BraintreeModuleCreatorConfig {\n kount?: boolean;\n paypal?: boolean;\n}\n\nexport interface BraintreeDataCollector extends BraintreeModule {\n deviceData?: string;\n}\n\n/**\n *\n * Braintree Google Pay\n *\n */\nexport interface BraintreeGooglePayThreeDSecure {\n verifyCard(options: BraintreeGooglePayThreeDSecureOptions): Promise;\n}\n\nexport interface BraintreeGooglePayThreeDSecureOptions {\n nonce: string;\n amount: number;\n showLoader?: boolean;\n onLookupComplete(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\nexport interface GooglePayBraintreeSDK extends BraintreeModule {\n createPaymentDataRequest(\n request?: GooglePayBraintreeDataRequest,\n ): GooglePayBraintreePaymentDataRequestV1;\n parseResponse(paymentData: GooglePaymentData): Promise;\n}\n\n/**\n *\n * Braintree Hosted Fields\n *\n */\nexport type BraintreeHostedFieldsCreator = BraintreeModuleCreator<\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig\n>;\n\nexport interface BraintreeHostedFields {\n teardown(): Promise;\n tokenize(\n options?: BraintreeHostedFieldsTokenizeOptions,\n ): Promise;\n on(eventName: string, callback: (event: BraintreeHostedFieldsState) => void): void;\n}\n\nexport interface BraintreeHostedFieldsCreatorConfig extends BraintreeModuleCreatorConfig {\n fields: {\n number?: BraintreeHostedFieldOption;\n expirationDate?: BraintreeHostedFieldOption;\n expirationMonth?: BraintreeHostedFieldOption;\n expirationYear?: BraintreeHostedFieldOption;\n cvv?: BraintreeHostedFieldOption;\n postalCode?: BraintreeHostedFieldOption;\n };\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n}\n\nexport interface BraintreeHostedFieldOption {\n container: string | HTMLElement;\n placeholder?: string;\n type?: string;\n formatInput?: boolean;\n maskInput?: boolean | { character?: string; showLastFour?: string };\n select?: boolean | { options?: string[] };\n maxCardLength?: number;\n maxlength?: number;\n minlength?: number;\n prefill?: string;\n rejectUnsupportedCards?: boolean;\n supportedCardBrands?: { [key: string]: boolean };\n internalLabel?: string;\n}\n\nexport interface BraintreeHostedFieldsState {\n cards: BraintreeHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: BraintreeHostedFieldsFieldData;\n expirationDate?: BraintreeHostedFieldsFieldData;\n expirationMonth?: BraintreeHostedFieldsFieldData;\n expirationYear?: BraintreeHostedFieldsFieldData;\n cvv?: BraintreeHostedFieldsFieldData;\n postalCode?: BraintreeHostedFieldsFieldData;\n };\n}\n\nexport interface BraintreeHostedFieldsCard {\n type: string;\n niceType: string;\n code: { name: string; size: number };\n}\n\nexport interface BraintreeFormFieldState {\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\nexport interface BraintreeHostedFieldsFieldData extends BraintreeFormFieldState {\n container: HTMLElement;\n}\n\nexport type BraintreeFormErrorData = Omit;\n\nexport type BraintreeFormErrorDataKeys =\n | 'number'\n | 'expirationDate'\n | 'expirationMonth'\n | 'expirationYear'\n | 'cvv'\n | 'postalCode';\n\nexport type BraintreeFormErrorsData = Partial<\n Record\n>;\n\nexport interface BraintreeHostedFieldsTokenizeOptions {\n vault?: boolean;\n fieldsToTokenize?: string[];\n cardholderName?: string;\n billingAddress?: BraintreeBillingAddressRequestData;\n}\n\nexport interface BraintreeHostedFieldsTokenizePayload {\n nonce: string;\n details: {\n bin: string;\n cardType: string;\n expirationMonth: string;\n expirationYear: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n type: string;\n binData: {\n commercial: string;\n countryOfIssuance: string;\n debit: string;\n durbinRegulated: string;\n healthcare: string;\n issuingBank: string;\n payroll: string;\n prepaid: string;\n productId: string;\n };\n}\n\nexport interface TokenizationPayload {\n nonce: string;\n bin: string;\n}\n\nexport interface BraintreeBillingAddressRequestData {\n postalCode?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress?: string;\n extendedAddress?: string;\n locality?: string;\n region?: string;\n countryCodeNumeric?: string;\n countryCodeAlpha2?: string;\n countryCodeAlpha3?: string;\n countryName?: string;\n}\n\nexport interface BraintreeHostedFormError extends BraintreeError {\n details?: {\n invalidFieldKeys?: string[];\n };\n}\n\n/**\n *\n * Braintree 3D Secure\n *\n */\nexport type BraintreeThreeDSecureCreator = BraintreeModuleCreator<\n BraintreeThreeDSecure,\n BraintreeThreeDSecureCreatorConfig\n>;\n\nexport interface BraintreeThreeDSecure extends BraintreeModule {\n verifyCard(options: BraintreeThreeDSecureOptions): Promise;\n cancelVerifyCard(): Promise;\n}\n\nexport interface BraintreeThreeDSecureCreatorConfig extends BraintreeModuleCreatorConfig {\n version?: number;\n}\n\nexport interface BraintreeThreeDSecureOptions {\n nonce: string;\n amount: number;\n bin?: string;\n challengeRequested: boolean;\n showLoader?: boolean;\n addFrame(error: Error | undefined, iframe: HTMLIFrameElement): void;\n removeFrame(): void;\n onLookupComplete(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\ninterface BraintreeThreeDSecureVerificationData {\n lookup: {\n threeDSecureVersion: string;\n };\n paymentMethod: BraintreeVerifyPayload;\n requiresUserAuthentication: boolean;\n threeDSecureInfo: {\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n };\n}\n\n/**\n *\n * Braintree PayPal\n *\n */\nexport type BraintreePaypalCreator = BraintreeModuleCreator;\n\nexport interface BraintreePaypal {\n closeWindow(): void;\n focusWindow(): void;\n tokenize(options: BraintreePaypalRequest): Promise;\n Buttons?(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\n/**\n *\n * Braintree PayPal Checkout\n *\n */\nexport type BraintreePaypalCheckoutCreator = BraintreeModuleCreator;\n\nexport interface BraintreePaypalCheckout {\n loadPayPalSDK(\n config: BraintreePaypalSdkCreatorConfig,\n callback: (instance: BraintreePaypalCheckout) => void,\n ): void;\n createPayment(options: BraintreePaypalRequest): Promise;\n teardown(): Promise;\n tokenizePayment(options: PaypalAuthorizeData): Promise;\n}\n\nexport interface BraintreePaypalSdkCreatorConfig {\n components?: string;\n currency?: string;\n intent?: string;\n isCreditEnabled?: boolean;\n}\n\n/**\n *\n * Braintree Venmo\n *\n */\nexport type BraintreeVenmoCheckoutCreator = BraintreeModuleCreator<\n BraintreeVenmoCheckout,\n BraintreeVenmoCreatorConfig\n>;\n\nexport interface BraintreeVenmoCheckout extends BraintreeModule {\n tokenize(callback: (error: BraintreeError, payload: BraintreeTokenizePayload) => void): void;\n isBrowserSupported(): boolean;\n}\n\nexport interface BraintreeVenmoCreatorConfig extends BraintreeModuleCreatorConfig {\n allowDesktop: boolean;\n paymentMethodUsage: string;\n}\n\n/**\n *\n * Braintree Visa Checkout\n *\n */\nexport type BraintreeVisaCheckoutCreator = BraintreeModuleCreator;\n\nexport interface BraintreeVisaCheckout extends BraintreeModule {\n tokenize(payment: VisaCheckoutPaymentSuccessPayload): Promise;\n createInitOptions(options: Partial): VisaCheckoutInitOptions;\n}\n\n/**\n *\n * Other\n *\n */\nexport interface BraintreeHostWindow extends Window {\n braintree?: BraintreeSDK;\n paypal?: PaypalSDK;\n}\n","import {\n NotInitializedError,\n NotInitializedErrorType,\n UnsupportedBrowserError,\n} from '../../../common/error/errors';\nimport { PaypalHostWindow } from '../paypal';\n\nimport {\n BraintreeClient,\n BraintreeDataCollector,\n BraintreeError,\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig,\n BraintreeModule,\n BraintreePaypal,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeThreeDSecure,\n BraintreeVenmoCheckout,\n BraintreeVisaCheckout,\n GooglePayBraintreeSDK,\n PAYPAL_COMPONENTS,\n} from './braintree';\nimport BraintreeScriptLoader from './braintree-script-loader';\n\nexport default class BraintreeSDKCreator {\n private _client?: Promise;\n private _3ds?: Promise;\n private _paypal?: Promise;\n private _paypalCheckout?: Promise;\n private _clientToken?: string;\n private _visaCheckout?: Promise;\n private _venmoCheckout?: Promise;\n private _dataCollectors: {\n default?: Promise;\n paypal?: Promise;\n } = {};\n private _googlePay?: Promise;\n private _window: PaypalHostWindow;\n\n constructor(private _braintreeScriptLoader: BraintreeScriptLoader) {\n this._window = window;\n }\n\n initialize(clientToken: string) {\n this._clientToken = clientToken;\n }\n\n getClient(): Promise {\n if (!this._clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n if (!this._client) {\n this._client = this._braintreeScriptLoader\n .loadClient()\n .then((client) => client.create({ authorization: this._clientToken }));\n }\n\n return this._client;\n }\n\n getPaypal(): Promise {\n if (!this._paypal) {\n this._paypal = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadPaypal(),\n ]).then(([client, paypal]) => paypal.create({ client }));\n }\n\n return this._paypal;\n }\n\n async getPaypalCheckout(\n config: Partial,\n onSuccess: (instance: BraintreePaypalCheckout) => void,\n onError: (error: BraintreeError) => void,\n ): Promise {\n const client = await this.getClient();\n const paypalCheckout = await this._braintreeScriptLoader.loadPaypalCheckout();\n\n const paypalCheckoutConfig = { client };\n const paypalCheckoutCallback = (\n error: BraintreeError,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n if (error) {\n return onError(error);\n }\n\n const paypalSdkLoadCallback = () => onSuccess(braintreePaypalCheckout);\n const paypalSdkLoadConfig = {\n currency: config.currency,\n ...(config.isCreditEnabled && { 'enable-funding': 'paylater' }),\n components: PAYPAL_COMPONENTS.toString(),\n intent: config.intent,\n };\n\n if (!this._window.paypal) {\n braintreePaypalCheckout.loadPayPalSDK(paypalSdkLoadConfig, paypalSdkLoadCallback);\n } else {\n onSuccess(braintreePaypalCheckout);\n }\n };\n\n this._paypalCheckout = paypalCheckout.create(paypalCheckoutConfig, paypalCheckoutCallback);\n\n return this._paypalCheckout;\n }\n\n async getVenmoCheckout(\n onSuccess: (braintreeVenmoCheckout: BraintreeVenmoCheckout) => void,\n onError: (error: BraintreeError | UnsupportedBrowserError) => void,\n ): Promise {\n if (!this._venmoCheckout) {\n const client = await this.getClient();\n\n const venmoCheckout = await this._braintreeScriptLoader.loadVenmoCheckout();\n\n const venmoCheckoutConfig = {\n client,\n allowDesktop: true,\n paymentMethodUsage: 'multi_use',\n };\n\n const venmoCheckoutCallback = (\n error: BraintreeError,\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n ): void => {\n if (error) {\n return onError(error);\n }\n\n if (!braintreeVenmoCheckout.isBrowserSupported()) {\n return onError(new UnsupportedBrowserError());\n }\n\n onSuccess(braintreeVenmoCheckout);\n };\n\n this._venmoCheckout = venmoCheckout.create(venmoCheckoutConfig, venmoCheckoutCallback);\n }\n\n return this._venmoCheckout;\n }\n\n get3DS(): Promise {\n if (!this._3ds) {\n this._3ds = Promise.all([this.getClient(), this._braintreeScriptLoader.load3DS()]).then(\n ([client, threeDSecure]) => threeDSecure.create({ client, version: 2 }),\n );\n }\n\n return this._3ds;\n }\n\n getDataCollector(options?: { paypal: boolean }): Promise {\n const cacheKey = options && options.paypal ? 'paypal' : 'default';\n let cached = this._dataCollectors[cacheKey];\n\n if (!cached) {\n cached = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadDataCollector(),\n ])\n .then(([client, dataCollector]) =>\n dataCollector.create({ client, kount: true, ...options }),\n )\n .catch((error) => {\n if (error && error.code === 'DATA_COLLECTOR_KOUNT_NOT_ENABLED') {\n return { deviceData: undefined, teardown: () => Promise.resolve() };\n }\n\n throw error;\n });\n\n this._dataCollectors[cacheKey] = cached;\n }\n\n return cached;\n }\n\n getVisaCheckout(): Promise {\n if (!this._visaCheckout) {\n this._visaCheckout = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadVisaCheckout(),\n ]).then(([client, visaCheckout]) => visaCheckout.create({ client }));\n }\n\n return this._visaCheckout;\n }\n\n getGooglePaymentComponent(): Promise {\n if (!this._googlePay) {\n this._googlePay = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadGooglePayment(),\n ]).then(([client, googlePay]) => googlePay.create({ client }));\n }\n\n return this._googlePay;\n }\n\n async createHostedFields(\n options: Pick,\n ): Promise {\n const [client, hostedFields] = await Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadHostedFields(),\n ]);\n\n return hostedFields.create({ ...options, client });\n }\n\n teardown(): Promise {\n return Promise.all([\n this._teardown(this._3ds),\n this._teardown(this._dataCollectors.default),\n this._teardown(this._dataCollectors.paypal),\n this._teardown(this._googlePay),\n this._teardown(this._paypalCheckout),\n this._teardown(this._venmoCheckout),\n this._teardown(this._visaCheckout),\n ]).then(() => {\n this._3ds = undefined;\n this._dataCollectors = {};\n this._googlePay = undefined;\n this._paypalCheckout = undefined;\n this._venmoCheckout = undefined;\n this._visaCheckout = undefined;\n });\n }\n\n private _teardown(module?: Promise) {\n return module\n ? module\n .then((mod) => mod.teardown())\n .catch((error) => {\n if (error.code !== 'METHOD_CALLED_AFTER_TEARDOWN') {\n throw error;\n }\n })\n : Promise.resolve();\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\nimport { GooglePayCreator } from '../googlepay';\n\nimport {\n BraintreeClientCreator,\n BraintreeDataCollectorCreator,\n BraintreeHostedFieldsCreator,\n BraintreeHostWindow,\n BraintreePaypalCheckoutCreator,\n BraintreePaypalCreator,\n BraintreeThreeDSecureCreator,\n BraintreeVenmoCheckoutCreator,\n BraintreeVisaCheckoutCreator,\n} from './braintree';\n\nconst version = '3.95.0';\n\nexport default class BraintreeScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: BraintreeHostWindow = window,\n ) {}\n\n loadClient(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/client.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.client) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.client;\n });\n }\n\n load3DS(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/three-d-secure.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.threeDSecure) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.threeDSecure;\n });\n }\n\n loadDataCollector(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/data-collector.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.dataCollector) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.dataCollector;\n });\n }\n\n loadPaypal(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/paypal.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.paypal;\n });\n }\n\n loadPaypalCheckout(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/paypal-checkout.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.paypalCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.paypalCheckout;\n });\n }\n\n loadVisaCheckout(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/visa-checkout.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.visaCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.visaCheckout;\n });\n }\n\n loadVenmoCheckout(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/venmo.min.js`)\n .then(() => {\n if (!this._window.braintree?.venmo) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.venmo;\n });\n }\n\n loadGooglePayment(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/google-payment.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.googlePayment) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.googlePayment;\n });\n }\n\n async loadHostedFields(): Promise {\n await this._scriptLoader.loadScript(\n `//js.braintreegateway.com/web/${version}/js/hosted-fields.min.js`,\n );\n\n if (!this._window.braintree || !this._window.braintree.hostedFields) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.hostedFields;\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we are unable to synchronize the checkout details of a\n * shopper with a hosted / remote checkout provider (i.e.: Amazon).\n */\nexport default class RemoteCheckoutSynchronizationError extends StandardError {\n constructor(public error?: Error) {\n super(\n 'Unable to synchronize your checkout details with a third party provider. Please try again later.',\n );\n\n this.name = 'RemoteCheckoutSynchronizationError';\n this.type = 'remote_checkout_synchronization';\n }\n}\n","import { PaymentInitializeOptions } from '../..';\nimport { Checkout, InternalCheckoutSelectors } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\nimport {\n BraintreeModuleCreator,\n BraintreeVerifyPayload,\n GooglePayBraintreeSDK,\n} from '../braintree';\n\nexport enum CallbackTriggerType {\n INITIALIZE = 'INITIALIZE',\n SHIPPING_OPTION = 'SHIPPING_OPTION',\n SHIPPING_ADDRESS = 'SHIPPING_ADDRESS',\n OFFER = 'OFFER',\n}\n\nexport enum TotalPriceStatusType {\n ESTIMATED = 'ESTIMATED',\n FINAL = 'FINAL',\n NOT_CURRENTLY_KNOWN = 'NOT_CURRENTLY_KNOWN',\n}\n\nexport enum CallbackIntentsType {\n OFFER = 'OFFER',\n PAYMENT_AUTHORIZATION = 'PAYMENT_AUTHORIZATION',\n SHIPPING_ADDRESS = 'SHIPPING_ADDRESS',\n SHIPPING_OPTION = 'SHIPPING_OPTION',\n}\n\nexport type EnvironmentType = 'PRODUCTION' | 'TEST';\nexport type TokenizeType = 'AndroidPayCard' | 'CreditCard' | 'CARD';\n\nexport interface GooglePayInitializer {\n initialize(\n checkout: Checkout | void,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n publishableKey?: string,\n ): Promise;\n teardown(): Promise;\n parseResponse(paymentData: GooglePaymentData): Promise;\n}\n\nexport interface GooglePayProviderProcessor {\n initialize(options: PaymentInitializeOptions): Promise;\n processAdditionalAction(error: unknown): Promise;\n}\n\nexport type GooglePayCreator = BraintreeModuleCreator;\n\nexport interface GooglePayPaymentOptions {\n environment: EnvironmentType;\n paymentDataCallbacks?: {\n onPaymentDataChanged(\n intermediatePaymentData: IntermediatePaymentData,\n ): Promise;\n };\n}\n\nexport type GooglePayVerifyPayload = BraintreeVerifyPayload | undefined;\n\nexport interface GooglePayIsReadyToPayResponse {\n result: boolean;\n paymentMethodPresend?: boolean;\n}\n\nexport interface GooglePaySDK {\n payments: {\n api: {\n PaymentsClient: new (options: GooglePayPaymentOptions) => GooglePayClient;\n };\n };\n}\n\nexport interface GooglePayClient {\n isReadyToPay(options: object): Promise;\n loadPaymentData(paymentDataRequest: GooglePayPaymentDataRequestV2): Promise;\n createButton(options: { [key: string]: string | object }): HTMLElement;\n}\n\nexport interface GooglePayHostWindow extends Window {\n google?: GooglePaySDK;\n}\n\nexport interface TokenizePayload {\n nonce: string;\n tokenFormat?: string;\n details: {\n cardType: string;\n lastFour: string;\n lastTwo?: string;\n };\n description?: string;\n type: TokenizeType;\n binData?: {\n commercial: string;\n countryOfIssuance: string;\n debit: string;\n durbinRegulated: string;\n healthcare: string;\n issuingBank: string;\n payroll: string;\n prepaid: string;\n productId: string;\n };\n}\n\nexport interface GooglePaymentData {\n apiVersion: number;\n apiVersionMinor: number;\n paymentMethodData: {\n description: string;\n info: {\n cardDetails: string;\n cardNetwork: string;\n billingAddress: GooglePayAddress;\n };\n tokenizationData: {\n token: string;\n type: string;\n };\n type: TokenizeType;\n };\n shippingAddress: GooglePayAddress;\n email: string;\n}\n\nexport interface GooglePayAddress {\n address1: string;\n address2: string;\n address3: string;\n administrativeArea: string;\n companyName: string;\n countryCode: string;\n locality: string;\n name: string;\n postalCode: string;\n sortingCode: string;\n phoneNumber: string;\n}\n\nexport interface GooglePaymentsError {\n statusCode: string;\n statusMessage?: string;\n}\n\nexport interface PaymentMethodData {\n methodId: string;\n paymentData: {\n method: string;\n nonce: string;\n cardInformation: {\n type: string;\n number: string;\n };\n };\n}\n\nexport enum ButtonType {\n Long = 'long',\n Short = 'short',\n}\nexport enum ButtonColor {\n Default = 'default',\n Black = 'black',\n White = 'white',\n}\n\nexport interface TokenizationSpecification {\n type: string;\n parameters: {\n gateway: string;\n gatewayMerchantId?: string;\n 'braintree:apiVersion'?: string;\n 'braintree:clientKey'?: string;\n 'braintree:merchantId'?: string;\n 'braintree:sdkVersion'?: string;\n 'braintree:authorizationFingerprint'?: string;\n 'stripe:version'?: string;\n 'stripe:publishableKey'?: string;\n };\n}\n\nexport enum BillingAddressFormat {\n /*\n * Name, country code, and postal code (default).\n */\n Min = 'MIN',\n /*\n * Name, street address, locality, region, country code, and postal code.\n */\n Full = 'FULL',\n}\n\nexport interface GooglePayPaymentDataRequestV2 {\n apiVersion: number;\n apiVersionMinor: number;\n merchantInfo: {\n authJwt?: string;\n merchantId?: string;\n merchantName?: string;\n };\n allowedPaymentMethods: [\n {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n allowPrepaidCards?: boolean;\n billingAddressRequired?: boolean;\n billingAddressParameters?: {\n format?: BillingAddressFormat;\n phoneNumberRequired?: boolean;\n };\n };\n tokenizationSpecification?: TokenizationSpecification;\n },\n ];\n transactionInfo: {\n currencyCode: string;\n countryCode?: string;\n totalPriceStatus?: TotalPriceStatusType;\n totalPrice?: string;\n checkoutOption?: string;\n };\n callbackIntents?: CallbackIntentsType[];\n emailRequired?: boolean;\n shippingAddressRequired?: boolean;\n shippingAddressParameters?: {\n allowedCountryCodes?: string[];\n phoneNumberRequired?: boolean;\n };\n}\n\nexport interface UpdatePaymentDataRequestPayload {\n apiVersion?: number;\n apiVersionMinor?: number;\n merchantInfo?: {\n authJwt?: string;\n merchantId?: string;\n merchantName?: string;\n };\n allowedPaymentMethods?: [\n {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n allowPrepaidCards?: boolean;\n billingAddressRequired?: boolean;\n billingAddressParameters?: {\n format?: BillingAddressFormat;\n phoneNumberRequired?: boolean;\n };\n };\n tokenizationSpecification?: TokenizationSpecification;\n },\n ];\n transactionInfo?: {\n currencyCode: string;\n countryCode?: string;\n totalPriceStatus?: TotalPriceStatusType;\n totalPrice?: string;\n checkoutOption?: string;\n };\n callbackIntents?: CallbackIntentsType[];\n emailRequired?: boolean;\n shippingAddressRequired?: boolean;\n shippingAddressParameters?: {\n allowedCountryCodes?: string[];\n phoneNumberRequired?: boolean;\n };\n}\n\nexport interface NewTransactionInfo {\n newTransactionInfo: {\n currencyCode: string;\n totalPrice: string;\n totalPriceStatus: TotalPriceStatusType;\n };\n}\n\nexport interface IntermediatePaymentData {\n callbackTrigger: CallbackTriggerType;\n}\n\nexport type GooglePayTransactionInfo = Pick;\n","export function getFirstAndLastName(fullName: string): [string, string] {\n const nameParts = fullName.split(' ');\n\n if (nameParts.length === 1) {\n return [fullName, ''];\n }\n\n const firstName = nameParts.slice(0, -1).join(' ');\n const lastName = nameParts[nameParts.length - 1];\n\n return [firstName, lastName];\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { PaymentMethodInvalidError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AddressRequestBody } from '../../../address';\nimport { BillingAddressActionCreator, BillingAddressUpdateRequestBody } from '../../../billing';\nimport { Checkout, CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '../../../common/error/errors';\nimport { SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { RemoteCheckoutSynchronizationError } from '../../../remote-checkout/errors';\nimport { ConsignmentActionCreator } from '../../../shipping';\nimport PaymentMethodActionCreator from '../../payment-method-action-creator';\n\nimport {\n ButtonColor,\n ButtonType,\n EnvironmentType,\n GooglePayAddress,\n GooglePayClient,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n GooglePayPaymentOptions,\n GooglePaySDK,\n TokenizePayload,\n UpdatePaymentDataRequestPayload,\n} from './googlepay';\nimport { getFirstAndLastName } from './googlepay-get-first-and-last-name';\nimport GooglePayScriptLoader from './googlepay-script-loader';\n\nexport default class GooglePayPaymentProcessor {\n private _googlePayClient?: GooglePayClient;\n private _methodId?: string;\n private _paymentDataRequest?: GooglePayPaymentDataRequestV2;\n private _isBuyNowFlow = false;\n\n constructor(\n private _store: CheckoutStore,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n private _googlePayScriptLoader: GooglePayScriptLoader,\n private _googlePayInitializer: GooglePayInitializer,\n private _billingAddressActionCreator: BillingAddressActionCreator,\n private _consignmentActionCreator: ConsignmentActionCreator,\n private _requestSender: RequestSender,\n ) {}\n\n initialize(methodId: string, googlePayClientOptions?: GooglePayPaymentOptions): Promise {\n this._methodId = methodId;\n\n return this._configureWallet(googlePayClientOptions);\n }\n\n deinitialize(): Promise {\n return this._googlePayInitializer.teardown();\n }\n\n createButton(\n onClick: (event: Event) => Promise,\n buttonType: ButtonType = ButtonType.Short,\n buttonColor: ButtonColor = ButtonColor.Default,\n ): HTMLElement {\n if (!this._googlePayClient) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._googlePayClient.createButton({\n buttonColor,\n buttonType,\n onClick,\n });\n }\n\n updatePaymentDataRequest(paymentDataRequest: UpdatePaymentDataRequestPayload) {\n const existingPaymentDataRequest = this._getPaymentDataRequest();\n\n this._paymentDataRequest = {\n ...existingPaymentDataRequest,\n ...paymentDataRequest,\n merchantInfo: {\n ...(existingPaymentDataRequest.merchantInfo ?? {}),\n ...(paymentDataRequest.merchantInfo ?? {}),\n },\n transactionInfo: {\n ...(existingPaymentDataRequest.transactionInfo ?? {}),\n ...(paymentDataRequest.transactionInfo ?? {}),\n },\n shippingAddressParameters: {\n ...(existingPaymentDataRequest.shippingAddressParameters ?? {}),\n ...(paymentDataRequest.shippingAddressParameters ?? {}),\n },\n };\n }\n\n displayWallet(): Promise {\n if (!this._googlePayClient) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._googlePayClient.loadPaymentData(this._getPaymentDataRequest());\n }\n\n handleSuccess(paymentData: GooglePaymentData): Promise {\n return this._googlePayInitializer\n .parseResponse(paymentData)\n .then((tokenizePayload) => this._postForm(tokenizePayload))\n .then(() => this._updateBillingAddress(paymentData));\n }\n\n updateShippingAddress(shippingAddress: GooglePayAddress): Promise {\n return this._store.dispatch(\n this._consignmentActionCreator.updateAddress(\n this._mapGooglePayAddressToShippingAddress(shippingAddress),\n ),\n );\n }\n\n updateBuyNowFlowFlag(isBuyNowFlow: boolean): void {\n this._isBuyNowFlow = isBuyNowFlow;\n }\n\n private _configureWallet(\n googlePayClientOptions?: Partial,\n ): Promise {\n const features = this._store.getState().config.getStoreConfig()?.checkoutSettings.features;\n const options =\n features && features['INT-5826.google_hostname_alias']\n ? { params: { origin: window.location.hostname } }\n : undefined;\n const methodId = this._getMethodId();\n\n return this._store\n .dispatch(this._paymentMethodActionCreator.loadPaymentMethod(methodId, options))\n .then((state) => {\n const checkout = this._getCheckout(state);\n const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n const hasShippingAddress = !!state.shippingAddress.getShippingAddress();\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { testMode } = paymentMethod.config;\n\n return Promise.all([\n this._googlePayScriptLoader.load(),\n this._googlePayInitializer.initialize(\n checkout,\n paymentMethod,\n hasShippingAddress,\n ),\n ]).then(([googlePay, paymentDataRequest]) => {\n this._googlePayClient = this._getGooglePayClient(\n googlePay,\n testMode,\n googlePayClientOptions,\n );\n this._paymentDataRequest = paymentDataRequest;\n\n return this._googlePayClient\n .isReadyToPay({\n allowedPaymentMethods: [\n {\n type: paymentDataRequest.allowedPaymentMethods[0].type,\n parameters: {\n allowedAuthMethods:\n paymentDataRequest.allowedPaymentMethods[0].parameters\n .allowedAuthMethods,\n allowedCardNetworks:\n paymentDataRequest.allowedPaymentMethods[0].parameters\n .allowedCardNetworks,\n },\n },\n ],\n apiVersion: paymentDataRequest.apiVersion,\n apiVersionMinor: paymentDataRequest.apiVersionMinor,\n })\n .then((response) => {\n if (response.result) {\n return;\n }\n\n throw new PaymentMethodInvalidError();\n });\n });\n });\n }\n\n private _getCardInformation(cardInformation: { cardType: string; lastFour: string }) {\n return {\n type: cardInformation.cardType,\n number: cardInformation.lastFour,\n };\n }\n\n private _getCheckout(state: InternalCheckoutSelectors): Checkout | void {\n if (this._isBuyNowFlow) {\n return;\n }\n\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return checkout;\n }\n\n private _getPaymentDataRequest(): GooglePayPaymentDataRequestV2 {\n if (!this._paymentDataRequest) {\n throw new RemoteCheckoutSynchronizationError();\n }\n\n return this._paymentDataRequest;\n }\n\n private _getGooglePayClient(\n google: GooglePaySDK,\n testMode?: boolean,\n googlePayClientOptions?: Partial,\n ): GooglePayClient {\n if (testMode === undefined) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const environment: EnvironmentType = testMode ? 'TEST' : 'PRODUCTION';\n\n return new google.payments.api.PaymentsClient({\n environment,\n ...(googlePayClientOptions ?? {}),\n });\n }\n\n private _getMethodId(): string {\n if (!this._methodId) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._methodId;\n }\n\n private _mapGooglePayAddressToBillingAddress(\n paymentData: GooglePaymentData,\n id: string,\n customerEmail?: string,\n ): BillingAddressUpdateRequestBody {\n const fullName = paymentData.paymentMethodData.info.billingAddress.name;\n const [firstName, lastName] = getFirstAndLastName(fullName);\n const address1 = paymentData.paymentMethodData.info.billingAddress.address1;\n const city = paymentData.paymentMethodData.info.billingAddress.locality;\n const postalCode = paymentData.paymentMethodData.info.billingAddress.postalCode;\n const countryCode = paymentData.paymentMethodData.info.billingAddress.countryCode;\n\n if (!firstName || !address1 || !city || !postalCode || !countryCode) {\n throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n }\n\n return {\n id,\n firstName,\n lastName,\n company: paymentData.paymentMethodData.info.billingAddress.companyName,\n address1,\n address2:\n paymentData.paymentMethodData.info.billingAddress.address2 +\n paymentData.paymentMethodData.info.billingAddress.address3,\n city,\n stateOrProvince: paymentData.paymentMethodData.info.billingAddress.administrativeArea,\n stateOrProvinceCode:\n paymentData.paymentMethodData.info.billingAddress.administrativeArea,\n postalCode,\n countryCode,\n phone: paymentData.paymentMethodData.info.billingAddress.phoneNumber,\n customFields: [],\n email: customerEmail || paymentData.email,\n };\n }\n\n private _mapGooglePayAddressToShippingAddress(address: GooglePayAddress): AddressRequestBody {\n const [firstName, lastName] = getFirstAndLastName(address.name);\n\n return {\n firstName,\n lastName,\n company: address.companyName,\n address1: address.address1,\n address2: address.address2 + address.address3,\n city: address.locality,\n stateOrProvince: address.administrativeArea,\n stateOrProvinceCode: address.administrativeArea,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phoneNumber,\n customFields: [],\n };\n }\n\n private _postForm(postPaymentData: TokenizePayload): Promise> {\n const cardInformation = postPaymentData.details;\n const buyNowCartId = this._isBuyNowFlow\n ? this._store.getState().cart.getCartOrThrow().id\n : undefined;\n\n return this._requestSender.post('/checkout.php', {\n headers: {\n Accept: 'text/html',\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...SDK_VERSION_HEADERS,\n },\n body: {\n payment_type: postPaymentData.type,\n nonce: postPaymentData.nonce,\n tokenFormat: postPaymentData.tokenFormat,\n provider: this._getMethodId(),\n action: 'set_external_checkout',\n card_information: this._getCardInformation(cardInformation),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n },\n });\n }\n\n private _updateBillingAddress(\n paymentData: GooglePaymentData,\n ): Promise {\n const remoteBillingAddress = this._store.getState().billingAddress.getBillingAddress();\n\n if (!remoteBillingAddress) {\n throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n }\n\n const googlePayAddressMapped = this._mapGooglePayAddressToBillingAddress(\n paymentData,\n remoteBillingAddress.id,\n remoteBillingAddress.email,\n );\n\n return this._store.dispatch(\n this._billingAddressActionCreator.updateAddress(googlePayAddressMapped),\n );\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { GooglePayHostWindow, GooglePaySDK } from './googlepay';\n\nexport default class GooglePayScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: GooglePayHostWindow = window,\n ) {}\n\n load(): Promise {\n return this._scriptLoader.loadScript('https://pay.google.com/gp/p/js/pay.js').then(() => {\n if (!this._window.google) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.google;\n });\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../../../billing';\nimport { CheckoutRequestSender, CheckoutStore } from '../../../checkout';\nimport { ConsignmentActionCreator, ConsignmentRequestSender } from '../../../shipping';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../../../subscription';\nimport PaymentMethodActionCreator from '../../payment-method-action-creator';\nimport PaymentMethodRequestSender from '../../payment-method-request-sender';\n\nimport { GooglePayInitializer } from './googlepay';\nimport GooglePayPaymentProcessor from './googlepay-payment-processor';\nimport GooglePayScriptLoader from './googlepay-script-loader';\n\nexport default function createGooglePayPaymentProcessor(\n store: CheckoutStore,\n initializer: GooglePayInitializer,\n): GooglePayPaymentProcessor {\n const requestSender = createRequestSender();\n const scriptLoader = getScriptLoader();\n\n return new GooglePayPaymentProcessor(\n store,\n new PaymentMethodActionCreator(new PaymentMethodRequestSender(requestSender)),\n new GooglePayScriptLoader(scriptLoader),\n initializer,\n new BillingAddressActionCreator(\n new BillingAddressRequestSender(requestSender),\n new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n ),\n new ConsignmentActionCreator(\n new ConsignmentRequestSender(requestSender),\n new CheckoutRequestSender(requestSender),\n ),\n requestSender,\n );\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayAdyenV2Initializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n type,\n nonce: token,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'adyen',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n countryCode,\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayAdyenV3Initializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n type,\n nonce: token,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'adyen',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n countryCode,\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { PaymentMethod } from '../..';\nimport { Checkout } from '../../../checkout';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizationSpecification,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nconst baseRequest = {\n apiVersion: 2,\n apiVersionMinor: 0,\n};\n\nexport default class GooglePayAuthorizeNetInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n type,\n nonce: btoa(token),\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n paymentGatewayId: gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n const paymentGatewaySpecification = this._getPaymentGatewaySpecification(gatewayMerchantId);\n const cardPaymentMethod = this._getCardPaymentMethod(\n paymentGatewaySpecification,\n supportedCards,\n );\n\n return {\n ...baseRequest,\n allowedPaymentMethods: [cardPaymentMethod],\n transactionInfo: {\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n currencyCode,\n countryCode,\n },\n merchantInfo: {\n merchantName,\n merchantId,\n authJwt,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n\n private _getPaymentGatewaySpecification(gatewayMerchantId: string) {\n return {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'authorizenet',\n gatewayMerchantId,\n },\n };\n }\n\n private _getCardPaymentMethod(\n tokenizationSpecification: TokenizationSpecification,\n supportedCards: string[],\n ) {\n return {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification,\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayBNZInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'cybersource',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../../../common/error/errors';\nimport PaymentMethod from '../../payment-method';\nimport { BraintreeSDKCreator, GooglePayBraintreeSDK } from '../braintree';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\nimport {\n GooglePayBraintreeDataRequest,\n GooglePayBraintreePaymentDataRequestV1,\n} from './googlepay-braintree';\n\nexport default class GooglePayBraintreeInitializer implements GooglePayInitializer {\n private _googlePaymentInstance!: GooglePayBraintreeSDK;\n\n constructor(private _braintreeSDKCreator: BraintreeSDKCreator) {}\n\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n\n return this._braintreeSDKCreator\n .getGooglePaymentComponent()\n .then((googleBraintreePaymentInstance) => {\n this._googlePaymentInstance = googleBraintreePaymentInstance;\n\n return this._createGooglePayPayload(\n checkout,\n paymentMethod.initializationData,\n hasShippingAddress,\n );\n });\n }\n\n teardown(): Promise {\n return this._braintreeSDKCreator.teardown();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const payload = JSON.parse(paymentData.paymentMethodData.tokenizationData.token)\n .androidPayCards[0];\n\n return Promise.resolve({\n nonce: payload.nonce,\n type: payload.type,\n description: payload.description,\n details: {\n cardType: payload.details.cardType,\n lastFour: payload.details.lastFour,\n lastTwo: payload.details.lastTwo,\n },\n binData: payload.binData,\n });\n }\n\n private _createGooglePayPayload(\n checkout: Checkout | undefined,\n initializationData: any,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n if (!initializationData.platformToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const googlePayBraintreePaymentDataRequest: GooglePayBraintreeDataRequest = {\n merchantInfo: {\n authJwt: initializationData.platformToken,\n merchantName: initializationData.googleMerchantName,\n merchantId: initializationData.googleMerchantId,\n },\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n cardRequirements: {\n billingAddressRequired: true,\n billingAddressFormat: 'FULL',\n },\n shippingAddressRequired: !hasShippingAddress,\n emailRequired: true,\n phoneNumberRequired: true,\n };\n\n return this._mapGooglePayBraintreeDataRequestToGooglePayDataRequestV2(\n this._googlePaymentInstance.createPaymentDataRequest(\n googlePayBraintreePaymentDataRequest,\n ),\n );\n }\n\n private _mapGooglePayBraintreeDataRequestToGooglePayDataRequestV2(\n googlePayBraintreeDataRequestV1: GooglePayBraintreePaymentDataRequestV1,\n ): GooglePayPaymentDataRequestV2 {\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt: googlePayBraintreeDataRequestV1.merchantInfo.authJwt,\n merchantId: googlePayBraintreeDataRequestV1.merchantInfo.merchantId,\n merchantName: googlePayBraintreeDataRequestV1.merchantInfo.merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks:\n googlePayBraintreeDataRequestV1.cardRequirements.allowedCardNetworks,\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'braintree',\n 'braintree:apiVersion': 'v1',\n 'braintree:authorizationFingerprint':\n googlePayBraintreeDataRequestV1.paymentMethodTokenizationParameters\n .parameters['braintree:authorizationFingerprint'],\n 'braintree:merchantId':\n googlePayBraintreeDataRequestV1.paymentMethodTokenizationParameters\n .parameters['braintree:merchantId'],\n 'braintree:sdkVersion':\n googlePayBraintreeDataRequestV1.paymentMethodTokenizationParameters\n .parameters['braintree:sdkVersion'],\n },\n },\n },\n ],\n transactionInfo: googlePayBraintreeDataRequestV1.transactionInfo,\n emailRequired: true,\n shippingAddressRequired: googlePayBraintreeDataRequestV1.shippingAddressRequired,\n shippingAddressParameters: {\n phoneNumberRequired: googlePayBraintreeDataRequestV1.phoneNumberRequired,\n },\n };\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a payment method experiences some kind of\n * failure (i.e.: its client library returns a rejected promise). And there is\n * no other error type that is more specific than this one.\n */\nexport default class PaymentMethodFailedError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method has thrown an unexpected error.',\n );\n\n this.name = 'PaymentMethodFailedError';\n this.type = 'payment_method_client_invalid';\n }\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\nimport { round } from 'lodash';\n\nimport { PaymentMethodFailedError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport { ContentType } from '../../../common/http-request';\nimport PaymentMethod from '../../payment-method';\nimport { CheckoutcomGooglePayToken, CheckoutcomToken } from '../checkoutcom';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayCheckoutcomInitializer implements GooglePayInitializer {\n private _publishableKey = '';\n private _testMode = true;\n private _errorMessage = 'Unable to parse response from GooglePay.';\n\n constructor(private _requestSender: RequestSender) {}\n\n async initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n this._publishableKey = paymentMethod.initializationData.checkoutcomkey;\n this._testMode = !!paymentMethod.config.testMode;\n\n return this._mapGooglePayCheckoutcomDataRequestToGooglePayDataRequestV2(\n checkout,\n paymentMethod.initializationData,\n hasShippingAddress,\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n async parseResponse(paymentData: GooglePaymentData): Promise {\n let token;\n\n try {\n token = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\n } catch (err) {\n throw new InvalidArgumentError(this._errorMessage);\n }\n\n if (!token.signature || !token.protocolVersion || !token.signedMessage) {\n throw new PaymentMethodFailedError(this._errorMessage);\n }\n\n const finalToken = await this._convertToken(this._testMode, this._publishableKey, token);\n\n const payload: TokenizePayload = {\n nonce: finalToken.token,\n type: 'CreditCard',\n description: paymentData.paymentMethodData.description,\n details: {\n cardType: paymentData.paymentMethodData.info.cardNetwork,\n lastFour: paymentData.paymentMethodData.info.cardDetails,\n },\n };\n\n if (finalToken.token_format) {\n payload.tokenFormat = finalToken.token_format;\n }\n\n return payload;\n }\n\n private async _convertToken(\n testMode: boolean,\n checkoutcomkey: string,\n token: CheckoutcomGooglePayToken,\n ): Promise {\n const checkoutcomToken: CheckoutcomToken = await this._requestCheckoutcomTokenize(\n testMode,\n checkoutcomkey,\n {\n type: 'googlepay',\n token_data: token,\n },\n );\n\n if (!checkoutcomToken || !checkoutcomToken.token) {\n throw new PaymentMethodFailedError('Unable to parse response from Checkout.com');\n }\n\n return checkoutcomToken;\n }\n\n private async _requestCheckoutcomTokenize(\n testMode: boolean,\n checkoutcomKey: string,\n data = {},\n ): Promise {\n const TEST_URL = 'https://api.sandbox.checkout.com/tokens';\n const LIVE_URL = 'https://api.checkout.com/tokens';\n\n const url = testMode ? TEST_URL : LIVE_URL;\n\n const response = await this._requestSender.post(url, {\n credentials: false,\n body: data,\n headers: {\n 'Content-Type': ContentType.Json,\n Authorization: checkoutcomKey,\n 'X-XSRF-TOKEN': null,\n },\n });\n\n return response.body as CheckoutcomToken;\n }\n\n private _mapGooglePayCheckoutcomDataRequestToGooglePayDataRequestV2(\n checkout: Checkout | undefined,\n initializationData: any,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt: initializationData.platformToken,\n merchantId: initializationData.googleMerchantId,\n merchantName: initializationData.googleMerchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA'],\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'checkoutltd',\n gatewayMerchantId: initializationData.checkoutcomkey,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayCybersourceV2Initializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'cybersource',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayOrbitalInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'chase',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayStripeInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n try {\n const payload = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\n\n return Promise.resolve({\n nonce: payload.id,\n type: payload.type,\n details: {\n cardType: payload.card.brand,\n lastFour: payload.card.last4,\n },\n });\n } catch (err) {\n throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n }\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n const consignments = checkout?.consignments || [];\n\n const {\n initializationData: {\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n stripeVersion,\n stripePublishableKey,\n stripeConnectedAccount,\n bopis,\n },\n supportedCards,\n } = paymentMethod;\n\n const isPickup = consignments.every((consignment) => consignment.selectedPickupOption);\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'stripe',\n 'stripe:version': stripeVersion,\n 'stripe:publishableKey': `${stripePublishableKey}/${stripeConnectedAccount}`,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired:\n bopis?.enabled && isPickup && bopis?.requiredAddress === 'none'\n ? false\n : !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { PaymentMethodFailedError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayStripeUPEInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n let payload;\n\n try {\n payload = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\n } catch (err) {\n throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n }\n\n if (\n !payload.id ||\n !payload.type ||\n !payload.card ||\n !payload.card.brand ||\n !payload.card.last4\n ) {\n throw new PaymentMethodFailedError('Unable to parse response from Google Pay.');\n }\n\n return Promise.resolve({\n nonce: payload.id,\n type: payload.type,\n details: {\n cardType: payload.card.brand,\n lastFour: payload.card.last4,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const decimalPlaces = checkout?.cart.currency.decimalPlaces || 2;\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, decimalPlaces).toFixed(decimalPlaces)\n : '';\n\n const {\n initializationData: {\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n stripeVersion,\n stripePublishableKey,\n stripeConnectedAccount,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'stripe',\n 'stripe:version': stripeVersion,\n 'stripe:publishableKey': `${stripePublishableKey}/${stripeConnectedAccount}`,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayWorldpayAccessInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'worldpay',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n countryCode,\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { Masterpass, MasterpassHostWindow } from './masterpass';\n\ninterface MasterpassScriptLoaderParams {\n useMasterpassSrc: boolean;\n language: string;\n testMode?: boolean;\n checkoutId?: string;\n}\n\nexport default class MasterpassScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n public _window: MasterpassHostWindow = window,\n ) {}\n\n async load({\n useMasterpassSrc,\n language,\n testMode,\n checkoutId,\n }: MasterpassScriptLoaderParams): Promise {\n if (useMasterpassSrc) {\n const subdomain = testMode ? 'sandbox.' : '';\n const params = [`locale=${language}`, `checkoutid=${checkoutId}`];\n\n const sourceUrl = [\n `https://${subdomain}src.mastercard.com/srci/integration/merchant.js`,\n params.join('&'),\n ].join('?');\n\n await this._scriptLoader.loadScript(sourceUrl);\n\n if (!this._window.masterpass) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.masterpass;\n }\n\n await this._scriptLoader.loadScript(\n `//${testMode ? 'sandbox.' : ''}masterpass.com/integration/merchant.js`,\n );\n\n if (!this._window.masterpass) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.masterpass;\n }\n}\n","import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { PaypalHostWindow, PaypalSDK } from './paypal-sdk';\n\nexport default class PaypalScriptLoader {\n private _window: PaypalHostWindow;\n\n constructor(private _scriptLoader: ScriptLoader) {\n this._window = window;\n }\n\n async loadPaypal(merchantId = ''): Promise {\n const scriptSrc = '//www.paypalobjects.com/api/checkout.min.js';\n const options: LoadScriptOptions = {\n async: true,\n attributes: { 'data-merchant-id': merchantId },\n };\n\n merchantId\n ? await this._scriptLoader.loadScript(scriptSrc, options)\n : await this._scriptLoader.loadScript(scriptSrc);\n\n if (!this._window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.paypal;\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class BuyNowCartCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during buy now cart creation process. Please try again later.',\n );\n\n this.name = 'BuyNowCartCreationError';\n this.type = 'buy_now_cart_creation_error';\n }\n}\n","import { BuyNowCartRequestBody } from '../../../cart';\nimport {\n AmazonPayV2ButtonConfig,\n AmazonPayV2ButtonParameters,\n} from '../../../payment/strategies/amazon-pay-v2';\n\nexport function isWithBuyNowFeatures(options: unknown): options is WithBuyNowFeature {\n if (!(options instanceof Object)) {\n return false;\n }\n\n return 'buyNowInitializeOptions' in options;\n}\n\nexport interface WithBuyNowFeature extends AmazonPayV2ButtonConfig {\n /**\n * The options that are required to initialize Buy Now functionality.\n */\n buyNowInitializeOptions?: {\n getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n };\n}\n\n/**\n * The required config to render the AmazonPayV2 button.\n */\nexport type AmazonPayV2ButtonInitializeOptions = AmazonPayV2ButtonParameters | WithBuyNowFeature;\n","import { StandardError } from '../../../../common/error/errors';\n\nexport default class AmazonPayV2ConfigCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during config creation process. Please try again later.',\n );\n\n this.name = 'AmazonPayV2ConfigCreationError';\n this.type = 'amazon_pay_v2_config_creation_error';\n }\n}\n","import { CartRequestSender } from '../../../cart';\nimport BuyNowCartRequestBody from '../../../cart/buy-now-cart-request-body';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n} from '../../../common/error/errors';\nimport {\n AmazonPayV2CheckoutSessionConfig,\n AmazonPayV2PaymentProcessor,\n AmazonPayV2PayOptions,\n AmazonPayV2Placement,\n} from '../../../payment/strategies/amazon-pay-v2';\nimport { getShippableItemsCount } from '../../../shipping';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { isWithBuyNowFeatures } from './amazon-pay-v2-button-options';\nimport AmazonPayV2RequestSender from './amazon-pay-v2-request-sender';\nimport AmazonPayV2ConfigCreationError from './errors/amazon-pay-v2-config-creation-error';\n\nexport default class AmazonPayV2ButtonStrategy implements CheckoutButtonStrategy {\n private _buyNowCartRequestBody?: BuyNowCartRequestBody | void;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor,\n private _cartRequestSender: CartRequestSender,\n private _amazonPayV2ConfigRequestSender: AmazonPayV2RequestSender,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { methodId, containerId, amazonpay } = options;\n const { buttonColor } = amazonpay || {};\n\n if (!methodId || !containerId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.',\n );\n }\n\n const {\n paymentMethods: { getPaymentMethodOrThrow },\n } = this._store.getState();\n\n await this._amazonPayV2PaymentProcessor.initialize(getPaymentMethodOrThrow(methodId));\n\n if (!amazonpay) {\n await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n }\n\n const initializeAmazonButtonOptions = isWithBuyNowFeatures(amazonpay)\n ? undefined\n : amazonpay;\n\n if (\n isWithBuyNowFeatures(amazonpay) &&\n typeof amazonpay?.buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n ) {\n this._buyNowCartRequestBody =\n amazonpay.buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (this._buyNowCartRequestBody) {\n this._amazonPayV2PaymentProcessor.setCartRequestBody(this._buyNowCartRequestBody);\n }\n }\n\n this._amazonPayV2PaymentProcessor.renderAmazonPayButton({\n checkoutState: this._store.getState(),\n containerId,\n methodId,\n options: initializeAmazonButtonOptions,\n placement: AmazonPayV2Placement.Cart,\n buttonColor,\n });\n\n if (this._buyNowCartRequestBody) {\n this._amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(\n this._getCheckoutCreationRequestConfig.bind(this),\n );\n }\n }\n\n deinitialize(): Promise {\n return this._amazonPayV2PaymentProcessor.deinitialize();\n }\n\n private async _createBuyNowCart() {\n if (!this._buyNowCartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n this._buyNowCartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private async _createCheckoutConfig(\n id: string,\n ): Promise> {\n try {\n const {\n body: { payload, public_key, ...rest },\n } = await this._amazonPayV2ConfigRequestSender.createCheckoutConfig(id);\n\n return {\n payloadJSON: payload,\n publicKeyId: public_key,\n ...rest,\n };\n } catch (error) {\n throw new AmazonPayV2ConfigCreationError();\n }\n }\n\n private async _getCheckoutCreationRequestConfig() {\n const buyNowCart = await this._createBuyNowCart();\n\n const estimatedOrderAmount = {\n amount: String(buyNowCart.baseAmount),\n currencyCode: buyNowCart.currency.code,\n };\n\n const createCheckoutSessionConfig = await this._createCheckoutConfig(buyNowCart.id);\n\n return {\n createCheckoutSessionConfig,\n estimatedOrderAmount,\n productType:\n getShippableItemsCount(buyNowCart) === 0\n ? AmazonPayV2PayOptions.PayOnly\n : AmazonPayV2PayOptions.PayAndShip,\n };\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../../../common/http-request';\n\nexport interface CheckoutConfig {\n payload: string;\n signature: string;\n public_key: string;\n}\n\nexport default class AmazonPayV2RequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createCheckoutConfig(cartId: string | number): Promise> {\n const body = { cartId };\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post('/api/storefront/payment/amazonpay', { headers, body });\n }\n}\n","import { Address } from '../../../address';\n\nimport { BraintreeShippingAddressOverride } from './braintree';\n\nexport default function mapToBraintreeShippingAddressOverride(\n address: Address,\n): BraintreeShippingAddressOverride {\n return {\n recipientName: `${address.firstName} ${address.lastName}`,\n line1: address.address1,\n line2: address.address2,\n city: address.city,\n state: address.stateOrProvinceCode,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phone,\n };\n}\n","import { isNil, omitBy } from 'lodash';\n\nimport { PaypalStyleOptions } from '../../../payment/strategies/paypal';\n\nexport default function getValidButtonStyle(style: PaypalStyleOptions): PaypalStyleOptions {\n const { color, fundingicons, height, layout, shape, size, tagline } = style;\n\n const validStyles = {\n color,\n fundingicons,\n height: getValidHeight(height),\n layout,\n shape: shape || 'rect',\n size,\n tagline,\n };\n\n return omitBy(validStyles, isNil);\n}\n\nfunction getValidHeight(height?: number): number {\n const minHeight = 25;\n const maxHeight = 55;\n\n if (typeof height !== 'number' || height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n}\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeDetails } from '../../../payment/strategies/braintree';\n\nexport default function mapToLegacyBillingAddress(\n details: BraintreeDetails,\n): Partial {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n email,\n first_name: firstName,\n last_name: lastName,\n phone_number: phone,\n address_line_1: address?.line1,\n address_line_2: address?.line2,\n city: address?.city,\n state: address?.state,\n country_code: address?.countryCode,\n postal_code: address?.postalCode,\n };\n}\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeDetails } from '../../../payment/strategies/braintree';\n\nexport default function mapToLegacyShippingAddress(\n details: BraintreeDetails,\n): Partial {\n const { email, phone, shippingAddress } = details;\n\n const recipientName = shippingAddress?.recipientName || '';\n const [firstName, lastName] = recipientName.split(' ');\n\n return {\n email,\n first_name: firstName || '',\n last_name: lastName || '',\n phone_number: phone,\n address_line_1: shippingAddress?.line1,\n address_line_2: shippingAddress?.line2,\n city: shippingAddress?.city,\n state: shippingAddress?.state,\n country_code: shippingAddress?.countryCode,\n postal_code: shippingAddress?.postalCode,\n };\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport { Cart, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n StandardError,\n} from '../../../common/error/errors';\nimport PaymentMethod from '../../../payment/payment-method';\nimport {\n BraintreeError,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeSDKCreator,\n BraintreeTokenizePayload,\n mapToBraintreeShippingAddressOverride,\n} from '../../../payment/strategies/braintree';\nimport { PaypalAuthorizeData, PaypalHostWindow } from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { BraintreePaypalButtonInitializeOptions } from './braintree-paypal-button-options';\nimport getValidButtonStyle from './get-valid-button-style';\nimport mapToLegacyBillingAddress from './map-to-legacy-billing-address';\nimport mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\ntype BuyNowInitializeOptions = Pick<\n BraintreePaypalButtonInitializeOptions,\n 'buyNowInitializeOptions'\n>;\n\nexport default class BraintreePaypalButtonStrategy implements CheckoutButtonStrategy {\n private _buyNowCart?: Cart;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _braintreeSDKCreator: BraintreeSDKCreator,\n private _formPoster: FormPoster,\n private _window: PaypalHostWindow,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { braintreepaypal, containerId, methodId } = options;\n const { messagingContainerId, onError } = braintreepaypal || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n let state: InternalCheckoutSelectors;\n let paymentMethod: PaymentMethod;\n let currencyCode: string;\n\n if (braintreepaypal.buyNowInitializeOptions) {\n state = this._store.getState();\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n if (!braintreepaypal.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypal.currencyCode;\n } else {\n state = await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n currencyCode = state.cart.getCartOrThrow().currency.code;\n }\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial = {\n currency: currencyCode,\n intent: paymentMethod.initializationData?.intent,\n isCreditEnabled: paymentMethod.initializationData?.isCreditEnabled,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this._renderPayPalComponents(\n braintreePaypalCheckout,\n braintreepaypal,\n containerId,\n methodId,\n Boolean(paymentMethod.config.testMode),\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this._handleError(error, containerId, messagingContainerId, onError);\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n await this._braintreeSDKCreator.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n deinitialize(): Promise {\n this._braintreeSDKCreator.teardown();\n\n return Promise.resolve();\n }\n\n private _renderPayPalComponents(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { messagingContainerId } = braintreepaypal;\n\n this._renderPayPalMessages(messagingContainerId);\n this._renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypal,\n containerId,\n methodId,\n testMode,\n );\n }\n\n private _renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError } = braintreepaypal;\n\n const { paypal } = this._window;\n const fundingSource = paypal?.FUNDING.PAYPAL;\n\n if (paypal && fundingSource) {\n const validButtonStyle = style ? getValidButtonStyle(style) : {};\n\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n commit: false,\n fundingSource,\n style: validButtonStyle,\n createOrder: () =>\n this._setupPayment(braintreePaypalCheckout, braintreepaypal, methodId),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this._tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n }\n } else {\n this._removeElement(containerId);\n }\n }\n\n private _renderPayPalMessages(messagingContainerId?: string): void {\n const isMessageContainerAvailable =\n messagingContainerId && Boolean(document.getElementById(messagingContainerId));\n const { paypal } = this._window;\n\n if (paypal && isMessageContainerAvailable) {\n const state = this._store.getState();\n const cart = state.cart.getCartOrThrow();\n\n const paypalMessagesRender = paypal.Messages({\n amount: cart.cartAmount,\n placement: 'cart',\n });\n\n paypalMessagesRender.render(`#${messagingContainerId}`);\n } else {\n this._removeElement(messagingContainerId);\n }\n }\n\n private async _setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n methodId: string,\n ): Promise {\n const { buyNowInitializeOptions, shippingAddress, onPaymentError } = braintreepaypal;\n let state: InternalCheckoutSelectors;\n\n try {\n this._buyNowCart = await this._createBuyNowCart({ buyNowInitializeOptions });\n\n if (this._buyNowCart) {\n state = this._store.getState();\n } else {\n state = await this._store.dispatch(\n this._checkoutActionCreator.loadDefaultCheckout(),\n );\n }\n\n const customer = state.customer.getCustomer();\n const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n const amount = this._buyNowCart\n ? this._buyNowCart.cartAmount\n : state.checkout.getCheckoutOrThrow().outstandingBalance;\n const currencyCode =\n braintreepaypal.currencyCode ?? state.config.getStoreConfigOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: false,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n if (onPaymentError) {\n onPaymentError(error);\n }\n\n throw error;\n }\n }\n\n private async _createBuyNowCart({ buyNowInitializeOptions }: BuyNowInitializeOptions) {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: cart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return cart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n private async _tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise {\n try {\n const { deviceData } = await this._braintreeSDKCreator.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const buyNowCartId = this._buyNowCart?.id;\n\n this._formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private _handleError(\n error: BraintreeError,\n buttonContainerId: string,\n messagingContainerId?: string,\n onErrorCallback?: (error: BraintreeError) => void,\n ): void {\n this._removeElement(buttonContainerId);\n this._removeElement(messagingContainerId);\n\n if (onErrorCallback) {\n onErrorCallback(error);\n }\n }\n\n private _removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n}\n","export interface PaypalSDK {\n Button: PaypalButton;\n checkout: PaypalExpressCheckout;\n FUNDING: PaypalFundingTypeList;\n Messages(options: MessagingOptions): MessagingRender;\n Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\nexport interface PaypalFundingTypeList {\n CARD?: string;\n CREDIT?: string;\n PAYPAL?: string;\n PAYLATER?: string;\n}\n\nexport interface PaypalButton {\n render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalButtonRender {\n render(container: string): void;\n isEligible(): boolean;\n}\n\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface MessagingOptions {\n amount: number;\n placement: string;\n}\n\nexport interface PaypalButtonOptions {\n env?: string;\n commit?: boolean;\n style?: PaypalStyleOptions;\n funding?: PaypalFundingType;\n fundingSource?: string;\n client?: PaypalClientToken;\n payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n}\n\nexport interface PaypalClientToken {\n production?: string;\n sandbox?: string;\n}\n\nexport interface PaypalFundingType {\n allowed?: string[];\n disallowed?: string[];\n}\n\nexport enum PaypalButtonStyleLayoutOption {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical',\n}\n\nexport enum PaypalButtonStyleSizeOption {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n RESPONSIVE = 'responsive',\n}\n\nexport enum PaypalButtonStyleColorOption {\n GOLD = 'gold',\n BLUE = 'blue',\n SIlVER = 'silver',\n BLACK = 'black',\n}\n\nexport enum PaypalButtonStyleLabelOption {\n CHECKOUT = 'checkout',\n PAY = 'pay',\n BUYNOW = 'buynow',\n PAYPAL = 'paypal',\n CREDIT = 'credit',\n}\n\nexport enum PaypalButtonStyleShapeOption {\n PILL = 'pill',\n RECT = 'rect',\n}\n\nexport interface PaypalStyleOptions {\n layout?: PaypalButtonStyleLayoutOption;\n size?: PaypalButtonStyleSizeOption;\n color?: PaypalButtonStyleColorOption;\n label?: PaypalButtonStyleLabelOption;\n shape?: PaypalButtonStyleShapeOption;\n tagline?: boolean;\n fundingicons?: boolean;\n height?: number;\n}\n\nexport interface PaypalActions {\n payment: PaypalPaymentActions;\n request: PaypalRequestActions;\n}\n\nexport interface PaypalPaymentActions {\n get(id: string): Promise;\n}\n\nexport interface PaypalRequestActions {\n post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface PaypalTransaction {\n amount?: PaypalAmount;\n payee?: PaypalPayee;\n description?: string;\n note_to_payee?: string;\n item_list?: PaypalItemList;\n}\n\nexport interface PaypalItemList {\n items?: PaypalItem[];\n shipping_address?: PaypalAddress;\n}\n\nexport interface PaypalItem {\n sku?: string;\n name?: string;\n description?: string;\n quantity: string;\n price: string;\n currency: string;\n tax?: string;\n}\n\nexport interface PaypalAmount {\n currency: string;\n total: string;\n}\n\nexport interface PaypalPayer {\n payer_info: object;\n}\n\nexport interface PaypalPayee {\n email?: string;\n merchant_id?: string;\n}\n\nexport interface PaypalAddress {\n line1: string;\n line2?: string;\n city?: string;\n country_code: string;\n postal_code?: string;\n state?: string;\n phone?: string;\n type?: string;\n}\n\nexport interface PaypalPaymentPayload {\n payment: PaypalPaymentPayload;\n payer: PaypalPayer;\n transactions?: PaypalTransaction[];\n}\n\nexport interface PaypalAuthorizeData {\n payerId: string;\n paymentId?: string;\n billingToken?: string;\n // the PayPal side of things uses uppercase ID instead of camel case Id\n payerID?: string;\n paymentID?: string;\n}\n\nexport interface PaypalExpressCheckout {\n initXO(): void;\n startFlow(url: string): void;\n closeFlow(): void;\n setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\n}\n\nexport interface PaypalExpressCheckoutOptions {\n button: string;\n environment: string;\n}\n\nexport interface PaypalHostWindow extends Window {\n paypal?: PaypalSDK;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport { Cart, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n StandardError,\n} from '../../../common/error/errors';\nimport PaymentMethod from '../../../payment/payment-method';\nimport {\n BraintreeError,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeSDKCreator,\n BraintreeTokenizePayload,\n mapToBraintreeShippingAddressOverride,\n} from '../../../payment/strategies/braintree';\nimport {\n PaypalAuthorizeData,\n PaypalButtonStyleLabelOption,\n PaypalHostWindow,\n} from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { BraintreePaypalCreditButtonInitializeOptions } from './braintree-paypal-credit-button-options';\nimport getValidButtonStyle from './get-valid-button-style';\nimport mapToLegacyBillingAddress from './map-to-legacy-billing-address';\nimport mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\ntype BuyNowInitializeOptions = Pick<\n BraintreePaypalCreditButtonInitializeOptions,\n 'buyNowInitializeOptions'\n>;\n\nexport default class BraintreePaypalCreditButtonStrategy implements CheckoutButtonStrategy {\n private _buyNowCart?: Cart;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _braintreeSDKCreator: BraintreeSDKCreator,\n private _formPoster: FormPoster,\n private _window: PaypalHostWindow,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { braintreepaypalcredit, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n let state: InternalCheckoutSelectors;\n let paymentMethod: PaymentMethod;\n let currencyCode: string;\n\n if (braintreepaypalcredit.buyNowInitializeOptions) {\n state = this._store.getState();\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n if (!braintreepaypalcredit.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypalcredit.currencyCode;\n } else {\n state = await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n currencyCode = state.cart.getCartOrThrow().currency.code;\n }\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial = {\n currency: currencyCode,\n intent: paymentMethod.initializationData?.intent,\n isCreditEnabled: paymentMethod.initializationData?.isCreditEnabled,\n };\n\n const paypalCheckoutCallback = (braintreePaypalCheckout: BraintreePaypalCheckout) =>\n this._renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n containerId,\n methodId,\n Boolean(paymentMethod.config.testMode),\n );\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this._handleError(error, containerId, braintreepaypalcredit.onError);\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n await this._braintreeSDKCreator.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n deinitialize(): Promise {\n this._braintreeSDKCreator.teardown();\n\n return Promise.resolve();\n }\n\n private _renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError } = braintreepaypalcredit;\n const { paypal } = this._window;\n\n let hasRenderedSmartButton = false;\n\n if (paypal) {\n const fundingSources = [paypal.FUNDING.PAYLATER, paypal.FUNDING.CREDIT];\n const commonButtonStyle = style ? getValidButtonStyle(style) : {};\n\n fundingSources.forEach((fundingSource) => {\n const buttonStyle =\n fundingSource === paypal.FUNDING.CREDIT\n ? { label: PaypalButtonStyleLabelOption.CREDIT, ...commonButtonStyle }\n : commonButtonStyle;\n\n if (!hasRenderedSmartButton) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n commit: false,\n fundingSource,\n style: buttonStyle,\n createOrder: () =>\n this._setupPayment(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n ),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this._tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n }\n\n if (!paypal || !hasRenderedSmartButton) {\n this._removeElement(containerId);\n }\n }\n\n private async _setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n methodId: string,\n ): Promise {\n const { onPaymentError, shippingAddress, buyNowInitializeOptions } = braintreepaypalcredit;\n let state: InternalCheckoutSelectors;\n\n try {\n this._buyNowCart = await this._createBuyNowCart({ buyNowInitializeOptions });\n\n if (this._buyNowCart) {\n state = this._store.getState();\n } else {\n state = await this._store.dispatch(\n this._checkoutActionCreator.loadDefaultCheckout(),\n );\n }\n\n const customer = state.customer.getCustomer();\n const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n const amount = this._buyNowCart\n ? this._buyNowCart.cartAmount\n : state.checkout.getCheckoutOrThrow().outstandingBalance;\n const currencyCode =\n braintreepaypalcredit.currencyCode ??\n state.config.getStoreConfigOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: true,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n if (onPaymentError) {\n onPaymentError(error);\n }\n\n throw error;\n }\n }\n\n private async _createBuyNowCart({ buyNowInitializeOptions }: BuyNowInitializeOptions) {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n private async _tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise {\n try {\n const { deviceData } = await this._braintreeSDKCreator.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const buyNowCartId = this._buyNowCart?.id;\n\n this._formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private _handleError(\n error: BraintreeError,\n containerId: string,\n onErrorCallback?: (error: BraintreeError) => void,\n ): void {\n this._removeElement(containerId);\n\n if (onErrorCallback) {\n onErrorCallback(error);\n }\n }\n\n private _removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport { BuyNowCartRequestBody, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n UnsupportedBrowserError,\n} from '../../../common/error/errors';\nimport { PaymentMethodActionCreator } from '../../../payment';\nimport {\n BraintreeError,\n BraintreeSDKCreator,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n} from '../../../payment/strategies/braintree';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\nimport { CheckoutButtonMethodType } from '../index';\n\nimport mapToLegacyBillingAddress from './map-to-legacy-billing-address';\nimport mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\nconst venmoButtonStyle = {\n backgroundColor: '#3D95CE',\n backgroundPosition: '50% 50%',\n backgroundSize: '80px auto',\n backgroundImage: 'url(\"/app/assets/img/payment-providers/venmo-logo-white.svg\")',\n backgroundRepeat: 'no-repeat',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: '0.2s ease',\n minHeight: '40px',\n minWidth: '150px',\n height: '100%',\n width: '100%',\n};\n\nconst venmoButtonStyleHover = {\n backgroundColor: '#0a7fc2',\n};\n\ninterface BuyNowInitializeOptions {\n getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n}\n\nexport default class BraintreeVenmoButtonStrategy implements CheckoutButtonStrategy {\n private _onError = noop;\n\n constructor(\n private _store: CheckoutStore,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _braintreeSDKCreator: BraintreeSDKCreator,\n private _formPoster: FormPoster,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { braintreevenmo, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n const state = await this._store.dispatch(\n this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n );\n const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n this._onError = braintreevenmo?.onError || this._handleError;\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n await this._braintreeSDKCreator.getVenmoCheckout(\n (braintreeVenmoCheckout) =>\n this._handleInitializationVenmoSuccess(\n braintreeVenmoCheckout,\n containerId,\n braintreevenmo?.buyNowInitializeOptions,\n ),\n (error) => this._handleInitializationVenmoError(error, containerId),\n );\n }\n\n deinitialize(): Promise {\n this._braintreeSDKCreator.teardown();\n\n return Promise.resolve();\n }\n\n private _handleError(error: BraintreeError) {\n throw new Error(error.message);\n }\n\n private _handleInitializationVenmoSuccess(\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n parentContainerId: string,\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n ): void {\n return this._renderVenmoButton(\n braintreeVenmoCheckout,\n parentContainerId,\n buyNowInitializeOptions,\n );\n }\n\n private _handleInitializationVenmoError(\n error: BraintreeError | UnsupportedBrowserError,\n containerId: string,\n ): void {\n this._removeVenmoContainer(containerId);\n\n return this._onError(error);\n }\n\n private _removeVenmoContainer(containerId: string): void {\n const buttonContainer = document.getElementById(containerId);\n\n if (buttonContainer) {\n buttonContainer.remove();\n }\n }\n\n private _renderVenmoButton(\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n containerId: string,\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n ): void {\n const venmoButton = document.getElementById(containerId);\n\n if (!venmoButton) {\n throw new InvalidArgumentError(\n 'Unable to create wallet button without valid container ID.',\n );\n }\n\n venmoButton.setAttribute('aria-label', 'Venmo');\n Object.assign(venmoButton.style, venmoButtonStyle);\n\n venmoButton.addEventListener('click', async () => {\n venmoButton.setAttribute('disabled', 'true');\n\n const buyBowCart = await this._createBuyNowCart(buyNowInitializeOptions);\n\n if (braintreeVenmoCheckout.tokenize) {\n braintreeVenmoCheckout.tokenize(\n async (error: BraintreeError, payload: BraintreeTokenizePayload) => {\n venmoButton.removeAttribute('disabled');\n\n if (error) {\n return this._onError(error);\n }\n\n await this._handlePostForm(payload, buyBowCart?.id);\n },\n );\n }\n });\n\n venmoButton.addEventListener('mouseenter', () => {\n venmoButton.style.backgroundColor = venmoButtonStyleHover.backgroundColor;\n });\n\n venmoButton.addEventListener('mouseleave', () => {\n venmoButton.style.backgroundColor = venmoButtonStyle.backgroundColor;\n });\n }\n\n private async _createBuyNowCart(buyNowInitializeOptions?: BuyNowInitializeOptions) {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n private async _handlePostForm(\n payload: BraintreeTokenizePayload,\n buyNowCartId?: string,\n ): Promise {\n const { deviceData } = await this._braintreeSDKCreator.getDataCollector();\n const { nonce, details } = payload;\n\n this._formPoster.postForm('/checkout.php', {\n nonce,\n provider: CheckoutButtonMethodType.BRAINTREE_VENMO,\n payment_type: 'paypal',\n device_data: deviceData,\n action: 'set_external_checkout',\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n }\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 StandardError from './standard-error';\n\nexport enum NotInitializedErrorType {\n CheckoutButtonNotInitialized,\n CustomerNotInitialized,\n PaymentNotInitialized,\n ShippingNotInitialized,\n SpamProtectionNotInitialized,\n}\n\n/**\n * Throw this error if a method requires a certain initialization call to be\n * made first. Some objects can be constructed but they cannot be used until a\n * separate initialization call is made.\n */\nexport default class NotInitializedError extends StandardError {\n constructor(public subtype: NotInitializedErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'NotInitializedError';\n this.type = 'not_initialized';\n }\n}\n\nfunction getErrorMessage(type: NotInitializedErrorType): string {\n switch (type) {\n case NotInitializedErrorType.CustomerNotInitialized:\n return 'Unable to proceed because the customer step of checkout has not been initialized.';\n\n case NotInitializedErrorType.PaymentNotInitialized:\n return 'Unable to proceed because the payment step of checkout has not been initialized.';\n\n case NotInitializedErrorType.ShippingNotInitialized:\n return 'Unable to proceed because the shipping step of checkout has not been initialized.';\n\n case NotInitializedErrorType.SpamProtectionNotInitialized:\n return 'Unable to proceed because the checkout spam protection has not been initialized.';\n\n default:\n return 'Unable to proceed because the required component has not been initialized.';\n }\n}\n","import StandardError from './standard-error';\n\nexport enum MissingDataErrorType {\n MissingBillingAddress,\n MissingCart,\n MissingCheckout,\n MissingConsignments,\n MissingCustomer,\n MissingCheckoutConfig,\n MissingOrder,\n MissingOrderConfig,\n MissingOrderId,\n MissingPayment,\n MissingPaymentId,\n MissingPaymentInstrument,\n MissingPaymentMethod,\n MissingPaymentRedirectUrl,\n MissingPaymentStatus,\n MissingPaymentToken,\n MissingShippingAddress,\n}\n\n/**\n * Throw this error when data that is expected to exist is missing. Usually it\n * is due to the fact that certain data has not been retrieved from or saved to\n * the server yet. And such data is required to perform certain actions.\n */\nexport default class MissingDataError extends StandardError {\n constructor(public subtype: MissingDataErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'MissingDataError';\n this.type = 'missing_data';\n }\n}\n\nfunction getErrorMessage(type: MissingDataErrorType): string {\n switch (type) {\n case MissingDataErrorType.MissingBillingAddress:\n return 'Unable to proceed because billing address data is unavailable.';\n\n case MissingDataErrorType.MissingCart:\n return 'Unable to proceed because cart data is unavailable.';\n\n case MissingDataErrorType.MissingConsignments:\n return 'Unable to proceed because consignments data is unavailable.';\n\n case MissingDataErrorType.MissingCheckout:\n return 'Unable to proceed because checkout data is unavailable.';\n\n case MissingDataErrorType.MissingCustomer:\n return 'Unable to proceed because customer data is unavailable.';\n\n case MissingDataErrorType.MissingCheckoutConfig:\n case MissingDataErrorType.MissingOrderConfig:\n return 'Unable to proceed because configuration data is unavailable.';\n\n case MissingDataErrorType.MissingOrder:\n return 'Unable to proceed because order data is unavailable.';\n\n case MissingDataErrorType.MissingOrderId:\n return 'Unable to proceed because order ID is unavailable or not generated yet.';\n\n case MissingDataErrorType.MissingPayment:\n return 'Unable to proceed because payment data is unavailable.';\n\n case MissingDataErrorType.MissingPaymentToken:\n return 'Unable to proceed because the token required to submit a payment is missing.';\n\n case MissingDataErrorType.MissingPaymentMethod:\n return 'Unable to proceed because payment method data is unavailable or not properly configured.';\n\n case MissingDataErrorType.MissingShippingAddress:\n return 'Unable to proceed because shipping address data is unavailable.';\n\n default:\n return 'Unable to proceed because the required data is unavailable.';\n }\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutButtonMethodType } from '../';\nimport { Cart, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport { SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { bindDecorator as bind } from '../../../common/utility';\nimport {\n CallbackIntentsType,\n CallbackTriggerType,\n EnvironmentType,\n GooglePayPaymentOptions,\n GooglePayPaymentProcessor,\n IntermediatePaymentData,\n NewTransactionInfo,\n TotalPriceStatusType,\n} from '../../../payment/strategies/googlepay';\nimport { GooglePayBuyNowInitializeOptions } from './googlepay-button-types';\nimport { getShippableItemsCount } from '../../../shipping';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { GooglePayButtonInitializeOptions } from './googlepay-button-options';\n\nexport default class GooglePayButtonStrategy implements CheckoutButtonStrategy {\n private _methodId?: string;\n private _walletButton?: HTMLElement;\n private _buyNowCart?: Cart;\n private _isBuyNowFlow?: boolean;\n\n constructor(\n private _store: CheckoutStore,\n private _formPoster: FormPoster,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n private _cartRequestSender: CartRequestSender,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { containerId, methodId, currencyCode } = options;\n\n const googlePayOptions = this._getGooglePayOptions(options);\n const { buyNowInitializeOptions } = googlePayOptions;\n\n if (!containerId || !methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"containerId\" argument is not provided.',\n );\n }\n\n const state = this._store.getState();\n const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n const { testMode } = paymentMethod?.config || {};\n\n this._methodId = methodId;\n\n this._isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (this._isBuyNowFlow) {\n if (!currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.currencyCode\" argument is not provided.`,\n );\n }\n\n const { buyNowInitializeOptions } = googlePayOptions;\n this._googlePayPaymentProcessor.updateBuyNowFlowFlag(this._isBuyNowFlow);\n\n await this._googlePayPaymentProcessor.initialize(\n this._getMethodId(),\n this._getGooglePayClientOptions(currencyCode, testMode, buyNowInitializeOptions),\n );\n } else {\n await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n await this._googlePayPaymentProcessor.initialize(this._getMethodId());\n }\n\n this._walletButton = this._createSignInButton(containerId, googlePayOptions, currencyCode);\n }\n\n deinitialize(): Promise {\n if (this._walletButton && this._walletButton.parentNode) {\n this._walletButton.parentNode.removeChild(this._walletButton);\n this._walletButton = undefined;\n }\n\n return this._googlePayPaymentProcessor.deinitialize();\n }\n\n private _getGooglePayClientOptions(\n currencyCode: string,\n testMode?: boolean,\n buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions,\n ): GooglePayPaymentOptions {\n const environment: EnvironmentType = testMode ? 'TEST' : 'PRODUCTION';\n\n return {\n environment,\n paymentDataCallbacks: {\n onPaymentDataChanged: async ({\n callbackTrigger,\n }: IntermediatePaymentData): Promise => {\n if (callbackTrigger !== CallbackTriggerType.INITIALIZE) {\n return;\n }\n\n try {\n this._buyNowCart = await this._createBuyNowCart(buyNowInitializeOptions);\n\n if (this._buyNowCart) {\n const { id, cartAmount } = this._buyNowCart;\n\n await this._store.dispatch(\n this._checkoutActionCreator.loadCheckout(id),\n );\n\n return {\n newTransactionInfo: {\n currencyCode,\n totalPrice: String(cartAmount),\n totalPriceStatus: TotalPriceStatusType.FINAL,\n },\n };\n }\n } catch (error) {\n throw new BuyNowCartCreationError(error);\n }\n },\n },\n };\n }\n\n private _createSignInButton(\n containerId: string,\n buttonOptions: GooglePayButtonInitializeOptions,\n currencyCode?: string,\n ): HTMLElement {\n const container = document.getElementById(containerId);\n const { buttonType, buttonColor } = buttonOptions;\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to create sign-in button without valid container ID.',\n );\n }\n\n const onClick = (event: Event) => this._handleWalletButtonClick(event, currencyCode);\n\n const googlePayButton = this._googlePayPaymentProcessor.createButton(\n onClick,\n buttonType,\n buttonColor,\n );\n\n container.appendChild(googlePayButton);\n\n return googlePayButton;\n }\n\n private _getMethodId(): string {\n if (!this._methodId) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._methodId;\n }\n\n private _getGooglePayOptions(\n options: CheckoutButtonInitializeOptions,\n ): GooglePayButtonInitializeOptions {\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_ADYENV2 &&\n options.googlepayadyenv2\n ) {\n return options.googlepayadyenv2;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_ADYENV3 &&\n options.googlepayadyenv3\n ) {\n return options.googlepayadyenv3;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_AUTHORIZENET &&\n options.googlepayauthorizenet\n ) {\n return options.googlepayauthorizenet;\n }\n\n if (options.methodId === CheckoutButtonMethodType.GOOGLEPAY_BNZ && options.googlepaybnz) {\n return options.googlepaybnz;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_BRAINTREE &&\n options.googlepaybraintree\n ) {\n return options.googlepaybraintree;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_CHECKOUTCOM &&\n options.googlepaycheckoutcom\n ) {\n return options.googlepaycheckoutcom;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_CYBERSOURCEV2 &&\n options.googlepaycybersourcev2\n ) {\n return options.googlepaycybersourcev2;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_ORBITAL &&\n options.googlepayorbital\n ) {\n return options.googlepayorbital;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_STRIPE &&\n options.googlepaystripe\n ) {\n return options.googlepaystripe;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_STRIPEUPE &&\n options.googlepaystripeupe\n ) {\n return options.googlepaystripeupe;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_WORLDPAYACCESS &&\n options.googlepayworldpayaccess\n ) {\n return options.googlepayworldpayaccess;\n }\n\n throw new InvalidArgumentError();\n }\n\n private async _createBuyNowCart(\n buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions,\n ): Promise {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: cart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return cart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n @bind\n private async _handleWalletButtonClick(event: Event, currencyCode?: string): Promise {\n event.preventDefault();\n\n try {\n if (this._isBuyNowFlow && currencyCode) {\n this._googlePayPaymentProcessor.updatePaymentDataRequest({\n transactionInfo: {\n currencyCode,\n totalPrice: '0',\n totalPriceStatus: TotalPriceStatusType.ESTIMATED,\n },\n callbackIntents: [CallbackIntentsType.OFFER],\n });\n }\n const paymentData = await this._googlePayPaymentProcessor.displayWallet();\n\n await this._googlePayPaymentProcessor.handleSuccess(paymentData);\n\n const cart = this._store.getState().cart.getCartOrThrow();\n const hasPhysicalItems = getShippableItemsCount(cart) > 0;\n\n if (hasPhysicalItems && paymentData.shippingAddress) {\n await this._googlePayPaymentProcessor.updateShippingAddress(\n paymentData.shippingAddress,\n );\n }\n\n await this._onPaymentSelectComplete();\n } catch (error) {\n if (error && error.message !== 'CANCELED') {\n throw error;\n }\n }\n }\n\n private _onPaymentSelectComplete(): void {\n const buyNowCartId = this._buyNowCart?.id;\n\n this._formPoster.postForm('/checkout.php', {\n headers: {\n Accept: 'text/html',\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...SDK_VERSION_HEADERS,\n },\n ...(buyNowCartId && {\n action: 'set_external_checkout',\n provider: this._methodId,\n cart_id: buyNowCartId,\n }),\n });\n }\n}\n","export const supportedLocales: { [language: string]: string[] } = {\n es: ['es_es', 'es_mx', 'es_pe', 'es_co', 'es_ar', 'es_cl'],\n en: [\n 'en_us',\n 'en_gb',\n 'en_ca',\n 'en_es',\n 'en_fr',\n 'en_ie',\n 'en_sg',\n 'en_au',\n 'en_nz',\n 'en_my',\n 'en_hk',\n 'en_th',\n 'en_ae',\n 'en_sa',\n 'en_qa',\n 'en_kw',\n 'en_za',\n ],\n pt: ['pt_br'],\n zu: ['zu_za'],\n ar: ['ar_sa', 'ar_ae', 'ar_qa', 'ar_kw'],\n zh: ['zh_sg', 'zh_hk'],\n ms: ['ms_my'],\n uk: ['uk_ua'],\n sv: ['sv_se'],\n hr: ['hr_hr'],\n pl: ['pl_pl'],\n nl: ['nl_be'],\n it: ['it_it'],\n de: ['de_de'],\n fr: ['fr_fr', 'fr_ca'],\n};\n","import { supportedLocales } from './masterpass-supported-locales';\n\nexport default function formatLocale(localeLanguage: string): string {\n const [language, country] = localeLanguage.replace('-', '_').toLowerCase().split('_');\n const formattedLocale = `${language}_${country}`;\n const countryLocales = supportedLocales[language];\n\n if (!countryLocales) {\n return 'en_us';\n }\n\n return countryLocales.indexOf(formattedLocale) > -1 ? formattedLocale : countryLocales[0];\n}\n","import { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '../../../common/error/errors';\nimport { bindDecorator as bind } from '../../../common/utility';\nimport {\n formatLocale,\n getCallbackUrl,\n Masterpass,\n MasterpassCheckoutOptions,\n MasterpassScriptLoader,\n} from '../../../payment/strategies/masterpass';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nexport default class MasterpassButtonStrategy implements CheckoutButtonStrategy {\n private _masterpassClient?: Masterpass;\n private _methodId?: string;\n private _signInButton?: HTMLElement;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _masterpassScriptLoader: MasterpassScriptLoader,\n private _locale: string,\n ) {}\n\n initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { containerId, methodId } = options;\n\n if (!containerId || !methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"containerId\" argument is not provided.',\n );\n }\n\n this._methodId = methodId;\n\n return this._store\n .dispatch(this._checkoutActionCreator.loadDefaultCheckout())\n .then((state) => {\n const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n\n if (!paymentMethod || !paymentMethod.initializationData.checkoutId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const masterpassScriptLoaderParams = {\n useMasterpassSrc: paymentMethod.initializationData.isMasterpassSrcEnabled,\n language: formatLocale(this._locale),\n testMode: paymentMethod.config.testMode,\n checkoutId: paymentMethod.initializationData.checkoutId,\n };\n\n return this._masterpassScriptLoader.load(masterpassScriptLoaderParams);\n })\n .then((masterpass) => {\n this._masterpassClient = masterpass;\n this._signInButton = this._createSignInButton(containerId);\n });\n }\n\n deinitialize(): Promise {\n if (this._signInButton && this._signInButton.parentNode) {\n this._signInButton.removeEventListener('click', this._handleWalletButtonClick);\n this._signInButton.parentNode.removeChild(this._signInButton);\n this._signInButton = undefined;\n }\n\n return Promise.resolve();\n }\n\n private _createSignInButton(containerId: string): HTMLElement {\n const buttonContainer = document.getElementById(containerId);\n const state = this._store.getState();\n const paymentMethod = this._methodId\n ? state.paymentMethods.getPaymentMethod(this._methodId)\n : null;\n const storeConfig = state.config.getStoreConfig();\n\n if (!buttonContainer) {\n throw new Error('Need a container to place the button');\n }\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n if (!storeConfig) {\n throw new InvalidArgumentError('Unable to retrieve store configuration');\n }\n\n const button = document.createElement('input');\n\n button.type = 'image';\n\n if (paymentMethod.initializationData.isMasterpassSrcEnabled) {\n const subdomain = paymentMethod.config.testMode ? 'sandbox.' : '';\n const { checkoutId } = paymentMethod.initializationData;\n\n const params = [\n `locale=${formatLocale(this._locale)}`,\n `paymentmethod=master,visa,amex,discover`,\n `checkoutid=${checkoutId}`,\n ];\n\n button.src = [\n `https://${subdomain}src.mastercard.com/assets/img/btn/src_chk_btn_126x030px.svg`,\n params.join('&'),\n ].join('?');\n } else {\n button.src =\n 'https://static.masterpass.com/dyn/img/btn/global/mp_chk_btn_160x037px.svg';\n }\n\n buttonContainer.appendChild(button);\n\n button.addEventListener('click', this._handleWalletButtonClick);\n\n return button;\n }\n\n private _createMasterpassPayload(): MasterpassCheckoutOptions {\n const state = this._store.getState();\n const checkout = state.checkout.getCheckout();\n const paymentMethod = this._methodId\n ? state.paymentMethods.getPaymentMethod(this._methodId)\n : null;\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n return {\n checkoutId: paymentMethod.initializationData.checkoutId,\n allowedCardTypes: paymentMethod.initializationData.allowedCardTypes,\n amount: checkout.cart.cartAmount.toString(),\n currency: checkout.cart.currency.code,\n cartId: checkout.cart.id,\n callbackUrl: getCallbackUrl('cart'),\n };\n }\n\n @bind\n private _handleWalletButtonClick(): void {\n if (!this._masterpassClient) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n this._masterpassClient.checkout(this._createMasterpassPayload());\n }\n}\n","export default function getCallbackUrl(origin: string): string {\n return `${window.location.origin}/checkout.php?action=set_external_checkout&provider=masterpass&gateway=stripe&origin=${origin}`;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { pick } from 'lodash';\n\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n StandardError,\n} from '../../../common/error/errors';\nimport { INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { PaymentMethod } from '../../../payment';\nimport {\n PaypalActions,\n PaypalAuthorizeData,\n PaypalButtonStyleShapeOption,\n PaypalButtonStyleSizeOption,\n PaypalClientToken,\n PaypalScriptLoader,\n} from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nexport default class PaypalButtonStrategy implements CheckoutButtonStrategy {\n private _paymentMethod?: PaymentMethod;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _paypalScriptLoader: PaypalScriptLoader,\n private _formPoster: FormPoster,\n private _host: string = '',\n ) {}\n\n initialize(options: CheckoutButtonInitializeOptions): Promise {\n const paypalOptions = options.paypal;\n const state = this._store.getState();\n const paymentMethod = (this._paymentMethod = state.paymentMethods.getPaymentMethod(\n options.methodId,\n ));\n\n if (!paypalOptions) {\n throw new InvalidArgumentError();\n }\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n return this._paypalScriptLoader\n .loadPaypal(paymentMethod.config.merchantId)\n .then((paypal) => {\n if (!paymentMethod || !paymentMethod.config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const merchantId = paymentMethod.config.merchantId;\n const env = paymentMethod.config.testMode ? 'sandbox' : 'production';\n const clientToken: PaypalClientToken = { [env]: paypalOptions.clientId };\n\n const fundingCreditOption = paypal.FUNDING.CREDIT || 'credit';\n const allowedSources = paypalOptions.allowCredit ? [fundingCreditOption] : [];\n const disallowedSources = !paypalOptions.allowCredit ? [fundingCreditOption] : [];\n\n return paypal.Button.render(\n {\n env,\n client: clientToken,\n commit: paypalOptions.shouldProcessPayment,\n funding: {\n allowed: allowedSources,\n disallowed: disallowedSources,\n },\n style: {\n shape: PaypalButtonStyleShapeOption.RECT,\n ...pick(\n paypalOptions.style,\n 'layout',\n 'color',\n 'label',\n 'shape',\n 'tagline',\n 'fundingicons',\n ),\n size:\n paymentMethod.id === 'paypalexpress' &&\n paypalOptions.style?.size === 'small'\n ? PaypalButtonStyleSizeOption.RESPONSIVE\n : paypalOptions.style?.size,\n },\n payment: (_, actions) =>\n this._setupPayment(merchantId, actions, paypalOptions.onPaymentError),\n onAuthorize: (data, actions) =>\n this._tokenizePayment(\n data,\n actions,\n paypalOptions.shouldProcessPayment,\n paypalOptions.onAuthorizeError,\n ),\n },\n options.containerId,\n );\n });\n }\n\n deinitialize(): Promise {\n this._paymentMethod = undefined;\n\n return Promise.resolve();\n }\n\n private _setupPayment(\n merchantId: string,\n actions?: PaypalActions,\n onError?: (error: StandardError) => void,\n ): Promise {\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n return this._store\n .dispatch(this._checkoutActionCreator.loadDefaultCheckout())\n .then((state) => {\n const cart = state.cart.getCart();\n const cartId = cart ? cart.id : '';\n\n return actions.request.post(\n `${this._host}/api/storefront/payment/paypalexpress`,\n { merchantId, cartId },\n {\n headers: {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n },\n );\n })\n .then((res) => res.id)\n .catch((error) => {\n if (onError) {\n onError(error);\n }\n\n throw error;\n });\n }\n\n private _tokenizePayment(\n data: PaypalAuthorizeData,\n actions?: PaypalActions,\n shouldProcessPayment?: boolean,\n _onError?: (error: StandardError) => void, // FIXME: This parameter seems to be unused\n ): Promise {\n if (!this._paymentMethod) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n if (!data.paymentID || !data.payerID) {\n throw new MissingDataError(MissingDataErrorType.MissingPayment);\n }\n\n const methodId = this._paymentMethod.id;\n\n return actions.payment.get(data.paymentID).then((payload) => {\n this._formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n paymentId: data.paymentID,\n payerId: data.payerID,\n payerInfo: JSON.stringify(payload.payer.payer_info),\n });\n });\n }\n}\n","export default function getEnvironment(): string {\n try {\n return process.env.NODE_ENV || 'development';\n } catch (e) {\n return 'development';\n }\n}\n","import Logger from './logger';\n\nexport default class ConsoleLogger implements Logger {\n constructor(private _console?: Console) {}\n\n log(...messages: any[]): void {\n this._logToConsole('log', ...messages);\n }\n\n info(...messages: any[]): void {\n this._logToConsole('info', ...messages);\n }\n\n warn(...messages: any[]): void {\n this._logToConsole('warn', ...messages);\n }\n\n error(...messages: any[]): void {\n this._logToConsole('error', ...messages);\n }\n\n debug(...messages: any[]): void {\n this._logToConsole('debug', ...messages);\n }\n\n private _logToConsole(type: keyof Console, ...messages: any[]): void {\n if (!this._console || !this._console[type]) {\n return;\n }\n\n this._console[type].call(this._console, ...messages);\n }\n}\n","import Logger from './logger';\n\nexport default class NoopLogger implements Logger {\n log(): void {}\n\n info(): void {}\n\n warn(): void {}\n\n error(): void {}\n\n debug(): void {}\n}\n","import { getEnvironment } from '../utility';\n\nimport createLogger from './create-logger';\nimport Logger from './logger';\n\nconst logger = createLogger(getEnvironment() !== 'test');\n\nexport default function getDefaultLogger(): Logger {\n return logger;\n}\n","import ConsoleLogger from './console-logger';\nimport Logger from './logger';\nimport NoopLogger from './noop-logger';\n\nexport default function createLogger(isEnabled = true): Logger {\n if (!isEnabled) {\n return new NoopLogger();\n }\n\n return new ConsoleLogger(console);\n}\n","import { getDefaultLogger } from '../log';\nimport { getEnvironment } from '../utility';\n\nimport Factory from './factory';\nimport Registry from './registry';\n\nexport default class ResolveIdRegistry {\n private _registry: Registry;\n\n constructor(private _useFallback = false) {\n this._registry = new Registry({\n tokenResolver: this._resolveToken.bind(this),\n useFallback: this._useFallback,\n });\n }\n\n get(resolveId: TToken): TType {\n return this._registry.get(this._encodeToken(resolveId));\n }\n\n register(resolveId: TToken, factory: Factory): void {\n this._registry.register(this._encodeToken(resolveId), factory);\n }\n\n private _encodeToken(resolveId: TToken): string {\n return btoa(JSON.stringify(resolveId));\n }\n\n private _decodeToken(token: string): TToken {\n return JSON.parse(atob(token));\n }\n\n private _resolveToken(token: string, registeredTokens: string[]): string | undefined {\n const query = this._decodeToken(token);\n\n const results: Array<{ token: string; matches: number; default: boolean }> = [];\n\n registeredTokens.forEach((registeredToken) => {\n const resolverId = this._decodeToken(registeredToken);\n\n const result = { token: registeredToken, matches: 0, default: false };\n\n for (const [key, value] of Object.entries(resolverId)) {\n if (key in query && query[key] !== value) {\n result.matches = 0;\n break;\n }\n\n if (key in query && query[key] === value) {\n result.matches++;\n }\n\n if (key === 'default' && value === true) {\n result.default = true;\n }\n }\n\n results.push(result);\n });\n\n const matchedResults = results\n .sort((a, b) => b.matches - a.matches)\n .filter((result) => result.matches > 0);\n\n if (matchedResults.length > 1 && matchedResults[0].matches === matchedResults[1].matches) {\n if (getEnvironment() === 'development') {\n getDefaultLogger().warn(\n 'The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.',\n );\n }\n }\n\n const matched = matchedResults[0];\n\n if (matched && matched.token) {\n return matched.token;\n }\n\n if (this._useFallback) {\n const defaultToken = results.find((result) => result.default)?.token;\n\n if (defaultToken) {\n return defaultToken;\n }\n }\n\n throw new Error('Unable to resolve to a registered token with the provided token.');\n }\n}\n","import ResolvableModule from './resolvable-module';\n\nexport default function toResolvableModule(\n module: TModule,\n resolveIds: TIdentifier[],\n): ResolvableModule {\n return Object.assign(module, { resolveIds });\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the payment flow is cancelled. It could be\n * due to a deliberate user interaction, i.e.: the user clicks on a cancel\n * button which dismisses the payment modal.\n */\nexport default class PaymentMethodCancelledError extends StandardError {\n constructor(message?: string) {\n super(message || 'Payment process was cancelled.');\n\n this.name = 'PaymentMethodCancelledError';\n this.type = 'payment_cancelled';\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class BuyNowCartCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during buy now cart creation process. Please try again later.',\n );\n\n this.name = 'BuyNowCartCreationError';\n this.type = 'buy_now_cart_creation_error';\n }\n}\n","interface ApplePayWindow extends Window {\n ApplePaySession: ApplePaySession;\n}\n\nfunction isApplePayWindow(window: Window): window is ApplePayWindow {\n return 'ApplePaySession' in window;\n}\n\nexport function assertApplePayWindow(window: Window): asserts window is ApplePayWindow {\n if (!isApplePayWindow(window)) {\n throw new Error('Apple pay is not supported');\n }\n}\n\nexport default class ApplePaySessionFactory {\n create(request: ApplePayJS.ApplePayPaymentRequest): ApplePaySession {\n assertApplePayWindow(window);\n\n return new ApplePaySession(1, request);\n }\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport {\n AddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n Checkout,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n Payment,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodCancelledError,\n ShippingOption,\n StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ApplePayButtonInitializeOptions, {\n WithApplePayButtonInitializeOptions,\n} from './apple-pay-button-initialize-options';\nimport ApplePaySessionFactory, { assertApplePayWindow } from './apple-pay-session-factory';\n\nconst validationEndpoint = (bigPayEndpoint: string) =>\n `${bigPayEndpoint}/api/public/v1/payments/applepay/validate_merchant`;\n\nenum DefaultLabels {\n Subtotal = 'Subtotal',\n Shipping = 'Shipping',\n}\n\nfunction isShippingOptions(options: ShippingOption[] | undefined): options is ShippingOption[] {\n return options instanceof Array;\n}\n\nexport default class ApplePayButtonStrategy implements CheckoutButtonStrategy {\n private _paymentMethod?: PaymentMethod;\n private _applePayButton?: HTMLElement;\n private _requiresShipping?: boolean;\n private _buyNowInitializeOptions?: ApplePayButtonInitializeOptions['buyNowInitializeOptions'];\n private _onAuthorizeCallback = noop;\n private _subTotalLabel: string = DefaultLabels.Subtotal;\n private _shippingLabel: string = DefaultLabels.Shipping;\n\n constructor(\n private _requestSender: RequestSender,\n private _paymentIntegrationService: PaymentIntegrationService,\n private _sessionFactory: ApplePaySessionFactory,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithApplePayButtonInitializeOptions,\n ): Promise {\n const { methodId, containerId, applepay } = options;\n\n assertApplePayWindow(window);\n\n if (!methodId || !applepay) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { buttonClassName, onPaymentAuthorize, buyNowInitializeOptions, requiresShipping } =\n applepay;\n\n this._requiresShipping = requiresShipping;\n\n this._buyNowInitializeOptions = buyNowInitializeOptions;\n\n this._onAuthorizeCallback = onPaymentAuthorize;\n\n if (!buyNowInitializeOptions) {\n await this._paymentIntegrationService.loadDefaultCheckout();\n }\n\n await this._paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this._paymentIntegrationService.getState();\n\n this._paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n await this._paymentIntegrationService.verifyCheckoutSpamProtection();\n\n this._applePayButton = this._createButton(containerId, buttonClassName);\n this._applePayButton.addEventListener('click', this._handleWalletButtonClick.bind(this));\n\n return Promise.resolve();\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private _createButton(\n containerId: string,\n buttonClassName = 'apple-pay-checkout-button',\n ): HTMLElement {\n const container = document.getElementById(containerId);\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to create wallet button without valid container ID.',\n );\n }\n\n document.body.classList.add('apple-pay-supported');\n\n const button = document.createElement('div');\n\n button.setAttribute('class', buttonClassName);\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', 'Apple Pay button');\n container.appendChild(button);\n\n return button;\n }\n\n private async _handleWalletButtonClick(event: Event) {\n event.preventDefault();\n\n if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n if (\n this._buyNowInitializeOptions &&\n typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody === 'function'\n ) {\n const {\n countryCode,\n currencyCode,\n merchantCapabilities,\n supportedNetworks,\n storeName,\n } = this._paymentMethod.initializationData;\n\n const request = this._getRequestWithEmptyTotal(\n countryCode,\n currencyCode,\n supportedNetworks,\n merchantCapabilities,\n );\n\n if (this._requiresShipping) {\n request.requiredShippingContactFields?.push('postalAddress');\n }\n\n const applePaySession = this._sessionFactory.create(request);\n\n this._handleApplePayEvents(applePaySession, this._paymentMethod, storeName);\n\n applePaySession.begin();\n } else {\n const state = this._paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const config = state.getStoreConfigOrThrow();\n const checkout = state.getCheckoutOrThrow();\n const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n const applePaySession = this._sessionFactory.create(request);\n\n this._handleApplePayEvents(\n applePaySession,\n this._paymentMethod,\n config.storeProfile.storeName,\n );\n\n applePaySession.begin();\n }\n }\n\n private _getRequestWithEmptyTotal(\n countryCode: string,\n currencyCode: string,\n supportedNetworks: string[],\n merchantCapabilities: ApplePayJS.ApplePayMerchantCapability[],\n ): ApplePayJS.ApplePayPaymentRequest {\n return {\n countryCode,\n currencyCode,\n supportedNetworks,\n merchantCapabilities,\n total: { label: '', amount: '0', type: 'pending' },\n requiredBillingContactFields: ['postalAddress'],\n requiredShippingContactFields: ['email', 'phone'],\n };\n }\n\n private _getBaseRequest(\n cart: Cart,\n checkout: Checkout,\n config: StoreConfig,\n paymentMethod: PaymentMethod,\n ): ApplePayJS.ApplePayPaymentRequest {\n const {\n storeProfile: { storeCountryCode, storeName },\n } = config;\n const {\n currency: { code, decimalPlaces },\n } = cart;\n\n const {\n initializationData: { merchantCapabilities, supportedNetworks },\n } = paymentMethod;\n\n const requiresShipping = cart.lineItems.physicalItems.length > 0;\n const total: ApplePayJS.ApplePayLineItem = requiresShipping\n ? {\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n type: 'pending',\n }\n : {\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n type: 'final',\n };\n\n const request: ApplePayJS.ApplePayPaymentRequest = {\n requiredBillingContactFields: ['postalAddress'],\n requiredShippingContactFields: ['email', 'phone'],\n countryCode: storeCountryCode,\n currencyCode: code,\n merchantCapabilities,\n supportedNetworks,\n lineItems: [],\n total,\n };\n\n if (requiresShipping) {\n request.requiredShippingContactFields?.push('postalAddress');\n } else {\n const lineItems: ApplePayJS.ApplePayLineItem[] = [\n {\n label: this._subTotalLabel,\n amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n },\n ];\n\n checkout.taxes.forEach((tax) =>\n lineItems.push({\n label: tax.name,\n amount: `${tax.amount.toFixed(decimalPlaces)}`,\n }),\n );\n\n request.lineItems = lineItems;\n }\n\n return request;\n }\n\n private _handleApplePayEvents(\n applePaySession: ApplePaySession,\n paymentMethod: PaymentMethod,\n storeName: string,\n ) {\n applePaySession.onvalidatemerchant = async (event) => {\n try {\n const { body: merchantSession } = await this._onValidateMerchant(\n paymentMethod,\n event,\n );\n\n applePaySession.completeMerchantValidation(merchantSession);\n } catch (error) {\n throw new Error('Merchant validation failed');\n }\n };\n\n if (this._buyNowInitializeOptions && !this._requiresShipping) {\n applePaySession.onpaymentmethodselected = async () => {\n await this._createBuyNowCart();\n this._handlePaymentMethodSelected(applePaySession);\n };\n }\n\n applePaySession.onshippingcontactselected = async (event) => {\n if (this._buyNowInitializeOptions && this._requiresShipping) {\n await this._createBuyNowCart();\n }\n\n await this._handleShippingContactSelected(applePaySession, storeName, event);\n };\n\n applePaySession.onshippingmethodselected = async (event) => {\n await this._handleShippingMethodSelected(applePaySession, storeName, event);\n };\n\n applePaySession.oncancel = async () => {\n try {\n const url = `/remote-checkout/${paymentMethod.id}/signout`;\n\n await this._requestSender.get(url);\n\n return await this._paymentIntegrationService.loadCheckout();\n } catch (error) {\n throw new PaymentMethodCancelledError();\n }\n };\n\n applePaySession.onpaymentauthorized = async (event) =>\n this._onPaymentAuthorized(event, applePaySession, paymentMethod);\n }\n\n private async _createBuyNowCart() {\n try {\n const cartRequestBody = this._buyNowInitializeOptions?.getBuyNowCartRequestBody?.();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n const buyNowCart = await this._paymentIntegrationService.createBuyNowCart(\n cartRequestBody,\n );\n\n await this._paymentIntegrationService.loadCheckout(buyNowCart.id);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private _handlePaymentMethodSelected(applePaySession: ApplePaySession) {\n const state = this._paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const config = state.getStoreConfigOrThrow();\n const checkout = state.getCheckoutOrThrow();\n\n if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n\n delete request.total.type;\n\n applePaySession.completePaymentMethodSelection({\n newTotal: request.total,\n newLineItems: request.lineItems,\n });\n }\n\n private async _handleShippingContactSelected(\n applePaySession: ApplePaySession,\n storeName: string,\n event: ApplePayJS.ApplePayShippingContactSelectedEvent,\n ) {\n const shippingAddress = this._transformContactToAddress(event.shippingContact);\n\n try {\n await this._paymentIntegrationService.updateShippingAddress(shippingAddress);\n } catch (error) {\n applePaySession.abort();\n\n throw new Error('Shipping address update failed');\n }\n\n let state = this._paymentIntegrationService.getState();\n const {\n currency: { decimalPlaces },\n } = state.getCartOrThrow();\n let checkout = state.getCheckoutOrThrow();\n const selectionShippingOptionId = checkout.consignments[0].selectedShippingOption?.id;\n const availableOptions = checkout.consignments[0].availableShippingOptions;\n const selectedOption = availableOptions?.find(({ id }) => id === selectionShippingOptionId);\n const unselectedOptions = availableOptions?.filter(\n (option) => option.id !== selectionShippingOptionId,\n );\n const shippingOptions: ApplePayJS.ApplePayShippingMethod[] = selectedOption\n ? [\n {\n label: selectedOption.description,\n amount: `${selectedOption.cost.toFixed(decimalPlaces)}`,\n detail: selectedOption.additionalDescription,\n identifier: selectedOption.id,\n },\n ]\n : [];\n\n if (unselectedOptions) {\n [\n ...unselectedOptions.filter((option) => option.isRecommended),\n ...unselectedOptions.filter((option) => !option.isRecommended),\n ].forEach((option) =>\n shippingOptions.push({\n label: option.description,\n amount: `${option.cost.toFixed(decimalPlaces)}`,\n detail: option.additionalDescription,\n identifier: option.id,\n }),\n );\n }\n\n if (!isShippingOptions(availableOptions)) {\n throw new Error('Shipping options not available.');\n }\n\n if (availableOptions.length === 0) {\n applePaySession.completeShippingContactSelection(\n ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,\n [],\n {\n type: 'pending',\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n },\n [],\n );\n\n return;\n }\n\n const recommendedOption = availableOptions.find((option) => option.isRecommended);\n\n const optionId = recommendedOption ? recommendedOption.id : availableOptions[0].id;\n const selectedOptionId = selectedOption ? selectedOption.id : optionId;\n\n try {\n await this._updateShippingOption(selectedOptionId);\n } catch (error) {\n throw new Error('Shipping options update failed');\n }\n\n state = this._paymentIntegrationService.getState();\n checkout = state.getCheckoutOrThrow();\n\n applePaySession.completeShippingContactSelection({\n newShippingMethods: shippingOptions,\n newTotal: {\n type: 'final',\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n },\n newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n });\n }\n\n private async _handleShippingMethodSelected(\n applePaySession: ApplePaySession,\n storeName: string,\n event: ApplePayJS.ApplePayShippingMethodSelectedEvent,\n ) {\n const {\n shippingMethod: { identifier: optionId },\n } = event;\n\n try {\n await this._updateShippingOption(optionId);\n } catch (error) {\n applePaySession.abort();\n\n throw new Error('Shipping option selection update failed.');\n }\n\n const state = this._paymentIntegrationService.getState();\n const {\n currency: { decimalPlaces },\n } = state.getCartOrThrow();\n const checkout = state.getCheckoutOrThrow();\n\n applePaySession.completeShippingMethodSelection({\n newTotal: {\n type: 'final',\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n },\n newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n });\n }\n\n private _getUpdatedLineItems(\n checkout: Checkout,\n decimalPlaces: number,\n ): ApplePayJS.ApplePayLineItem[] {\n const lineItems: ApplePayJS.ApplePayLineItem[] = [\n {\n label: this._subTotalLabel,\n amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n },\n ];\n\n checkout.taxes.forEach((tax) =>\n lineItems.push({\n label: tax.name,\n amount: `${tax.amount.toFixed(decimalPlaces)}`,\n }),\n );\n lineItems.push({\n label: this._shippingLabel,\n amount: `${checkout.shippingCostTotal.toFixed(decimalPlaces)}`,\n });\n\n return lineItems;\n }\n\n private async _updateShippingOption(optionId: string) {\n return this._paymentIntegrationService.selectShippingOption(optionId);\n }\n\n private async _onValidateMerchant(\n paymentData: PaymentMethod,\n event: ApplePayJS.ApplePayValidateMerchantEvent,\n ) {\n const body = [\n `validationUrl=${event.validationURL}`,\n `merchantIdentifier=${paymentData.initializationData.merchantId}`,\n `displayName=${paymentData.initializationData.storeName}`,\n `domainName=${window.location.hostname}`,\n ].join('&');\n\n return this._requestSender.post(\n validationEndpoint(paymentData.initializationData.paymentsUrl),\n {\n credentials: false,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-XSRF-TOKEN': null,\n },\n body,\n },\n );\n }\n\n private async _onPaymentAuthorized(\n event: ApplePayJS.ApplePayPaymentAuthorizedEvent,\n applePaySession: ApplePaySession,\n paymentMethod: PaymentMethod,\n ) {\n const { token, billingContact, shippingContact } = event.payment;\n const state = this._paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const requiresShipping = cart.lineItems.physicalItems.length > 0;\n\n const payment: Payment = {\n methodId: paymentMethod.id,\n paymentData: {\n formattedPayload: {\n apple_pay_token: {\n payment_data: token.paymentData,\n payment_method: token.paymentMethod,\n transaction_id: token.transactionIdentifier,\n },\n },\n },\n };\n\n const transformedBillingAddress = this._transformContactToAddress(billingContact);\n const transformedShippingAddress = this._transformContactToAddress(shippingContact);\n const emailAddress = shippingContact?.emailAddress;\n const phone = shippingContact?.phoneNumber || '';\n\n try {\n await this._paymentIntegrationService.updateBillingAddress({\n ...transformedBillingAddress,\n email: emailAddress,\n phone,\n });\n\n if (requiresShipping) {\n await this._paymentIntegrationService.updateShippingAddress(\n transformedShippingAddress,\n );\n }\n\n await this._paymentIntegrationService.submitOrder({\n useStoreCredit: false,\n });\n\n await this._paymentIntegrationService.submitPayment(payment);\n applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n return this._onAuthorizeCallback();\n } catch (error) {\n applePaySession.completePayment(ApplePaySession.STATUS_FAILURE);\n\n throw new Error('Payment cannot complete');\n }\n }\n\n private _transformContactToAddress(\n contact?: ApplePayJS.ApplePayPaymentContact,\n ): AddressRequestBody {\n return {\n firstName: contact?.givenName || '',\n lastName: contact?.familyName || '',\n city: contact?.locality || '',\n company: '',\n address1: (contact?.addressLines && contact.addressLines[0]) || '',\n address2: (contact?.addressLines && contact.addressLines[1]) || '',\n postalCode: contact?.postalCode || '',\n countryCode: contact?.countryCode || '',\n phone: contact?.phoneNumber || '',\n stateOrProvince: contact?.administrativeArea || '',\n stateOrProvinceCode: contact?.administrativeArea || '',\n customFields: [],\n };\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ApplePayButtonStrategy from './apple-pay-button-strategy';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst createApplePayButtonStrategy: CheckoutButtonStrategyFactory = (\n paymentIntegrationService,\n) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new ApplePayButtonStrategy(\n createRequestSender({ host: getHost() }),\n paymentIntegrationService,\n new ApplePaySessionFactory(),\n );\n};\n\nexport default toResolvableModule(createApplePayButtonStrategy, [{ id: 'applepay' }]);\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"query-string\");","import StandardError from './standard-error';\n\n/**\n * Throw this error if we try to call a method that is only a stub and has not\n * been fully implemented.\n */\nexport default class NotImplementedError extends StandardError {\n constructor(message?: string) {\n super(message || 'Not implemented.');\n\n this.name = 'NotImplementedError';\n this.type = 'not_implemented';\n }\n}\n","import {\n BuyNowCartRequestBody,\n NonceInstrument,\n PaymentMethod,\n WithAccountCreation,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface BoltHostWindow extends Window {\n BoltCheckout?: BoltCheckout;\n BoltConnect?: BoltConnect;\n Bolt?(publicKey: string): BoltEmbedded;\n}\n\nexport interface BoltCheckout {\n configure(cart: BoltCart, hints: Record, callbacks?: BoltCallbacks): BoltClient;\n hasBoltAccount(email: string): Promise;\n getTransactionReference(): Promise;\n openCheckout(email: string, callbacks?: BoltOpenCheckoutCallbacks): Promise;\n setClientCustomCallbacks(callbacks: BoltCallbacks): void;\n setOrderId(orderId: number): Promise;\n}\n\nexport interface BoltConnect {\n setupProductPageCheckout?(): void;\n}\n\nexport interface BoltOpenCheckoutCallbacks {\n close?(): void;\n}\n\nexport interface BoltEmbeddedOptions {\n styles: { backgroundColor: string };\n renderSeparateFields?: boolean;\n}\n\nexport interface BoltEmbedded {\n create(name: string, options?: BoltEmbeddedOptions): BoltEmbededField;\n}\n\nexport interface BoltEmbededField {\n mount(element: string): void;\n unmount(): void;\n tokenize(): Promise;\n}\n\nexport interface BoltDeveloperModeParams {\n developerMode: BoltDeveloperMode;\n developerDomain: string;\n}\n\nexport enum BoltDeveloperMode {\n SandboxMode = 'bolt_sandbox',\n StagingMode = 'bolt_staging',\n DevelopmentMode = 'bolt_development',\n}\n\nexport interface BoltClient {\n open(): void;\n}\n\nexport interface BoltCart {\n orderToken: string;\n}\n\nexport interface BoltCallbacks {\n check?(): boolean;\n onCheckoutStart?(): void;\n onPaymentSubmit?(): void;\n success(transaction: BoltTransaction, callback: () => void): void;\n close?(): void;\n}\n\nexport interface BoltTransaction {\n id: string;\n type: string;\n processor: string;\n date: number;\n reference: string;\n status: string;\n authorization: BoltAuthorization;\n}\n\nexport interface BoltAuthorization {\n status: string;\n reason: string;\n}\n\nexport interface BoltEmbeddedTokenize {\n bin: string;\n expiration: string;\n last4: string;\n postal_code?: string;\n token: string;\n token_type: string;\n}\n\nexport interface BoltPaymentMethod extends PaymentMethod {\n initializationData?: BoltInitializationData;\n}\n\nexport interface BoltInitializationData {\n publishableKey: string;\n developerConfig: BoltDeveloperModeParams;\n embeddedOneClickEnabled: boolean;\n}\n\nexport type BoltPaymentData = WithAccountCreation & NonceInstrument;\n\nexport interface BoltBuyNowInitializeOptions {\n storefrontApiToken?: string;\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\nexport enum StyleButtonSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\nexport enum StyleButtonShape {\n Pill = 'pill',\n Rect = 'rect',\n}\n\nexport interface BoltButtonStyleOptions {\n shape?: StyleButtonShape;\n size?: StyleButtonSize;\n}\n","import { stringifyUrl } from 'query-string';\n\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n NotImplementedError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n BoltButtonStyleOptions,\n BoltHostWindow,\n BoltPaymentMethod,\n StyleButtonShape,\n StyleButtonSize,\n} from './bolt';\nimport { WithBoltButtonInitializeOptions } from './bolt-button-initialize-options';\nimport BoltScriptLoader from './bolt-script-loader';\n\nexport default class BoltButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private boltScriptLoader: BoltScriptLoader,\n public boltHostWindow: BoltHostWindow = window,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBoltButtonInitializeOptions,\n ): Promise {\n const { bolt, containerId, methodId } = options;\n const { buyNowInitializeOptions, style } = bolt || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!bolt) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.bolt\" argument is not provided.`,\n );\n }\n\n const isBuyNowFlow = Boolean(buyNowInitializeOptions);\n\n if (!isBuyNowFlow) {\n throw new NotImplementedError('Only buy now flow is implemented for Bolt button');\n }\n\n if (\n !buyNowInitializeOptions?.storefrontApiToken ||\n typeof buyNowInitializeOptions.storefrontApiToken !== 'string'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.`,\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod: BoltPaymentMethod = state.getPaymentMethodOrThrow(methodId);\n const { initializationData, config } = paymentMethod;\n const { publishableKey, developerConfig } = initializationData || {};\n\n await this.boltScriptLoader.loadBoltClient(\n publishableKey,\n config.testMode,\n developerConfig,\n 'BigCommerce',\n buyNowInitializeOptions.storefrontApiToken,\n );\n\n this.renderButton(containerId, paymentMethod, style);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n paymentMethod: BoltPaymentMethod,\n style?: BoltButtonStyleOptions,\n ): void {\n if (typeof this.boltHostWindow.BoltConnect?.setupProductPageCheckout !== 'function') {\n return;\n }\n\n this.addButtonContainer(containerId, paymentMethod, style);\n this.boltHostWindow.BoltConnect.setupProductPageCheckout();\n }\n\n private addButtonContainer(\n containerId: string,\n paymentMethod: BoltPaymentMethod,\n style?: BoltButtonStyleOptions,\n ): void {\n const container = document.getElementById(containerId);\n\n if (!container) {\n return;\n }\n\n const boltButtonContainer = document.createElement('div');\n const boltButtonObject = document.createElement('object');\n\n boltButtonContainer.setAttribute('id', 'product-page-checkout-wrapper');\n boltButtonContainer.setAttribute('class', 'bolt-button-wrapper');\n boltButtonContainer.setAttribute('style', 'display:none');\n boltButtonContainer.setAttribute('data-tid', 'product-page-checkout-wrapper');\n\n boltButtonObject.setAttribute('data', this.getBoltObjectData(paymentMethod, style));\n boltButtonObject.setAttribute('class', 'bolt-product-checkout-button');\n\n boltButtonContainer.append(boltButtonObject);\n container.innerHTML = '';\n container.append(boltButtonContainer);\n }\n\n private getBoltObjectData(\n paymentMethod: BoltPaymentMethod,\n style?: BoltButtonStyleOptions,\n ): string {\n const { initializationData, config } = paymentMethod;\n const { publishableKey, developerConfig } = initializationData || {};\n\n const domainUrl = this.boltScriptLoader.getDomainURL(!!config.testMode, developerConfig);\n const buttonHeight = this.getButtonHeight(style?.size);\n const buttonBorderRadius = this.getButtonBorderRadius(style?.shape, buttonHeight);\n\n return stringifyUrl({\n url: `https://${domainUrl}/v1/checkout_button`,\n query: {\n publishable_key: publishableKey,\n variant: 'ppc',\n height: buttonHeight,\n border_radius: buttonBorderRadius,\n },\n });\n }\n\n private getButtonHeight(buttonSize?: StyleButtonSize): number | undefined {\n if (!buttonSize) {\n return;\n }\n\n switch (buttonSize) {\n case StyleButtonSize.Small:\n return 25;\n\n case StyleButtonSize.Large:\n return 45;\n\n case StyleButtonSize.Medium:\n default:\n return 40;\n }\n }\n\n private getButtonBorderRadius(\n buttonShape?: StyleButtonShape,\n buttonHeight?: number,\n ): number | undefined {\n if (!buttonShape) {\n return;\n }\n\n switch (buttonShape) {\n case StyleButtonShape.Pill:\n return buttonHeight ? Math.round(buttonHeight / 2) : undefined;\n\n case StyleButtonShape.Rect:\n default:\n return 4;\n }\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the client library of a payment method fails\n * to load, or for some reason, it is inaccessible.\n */\nexport default class PaymentMethodClientUnavailableError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n );\n\n this.name = 'PaymentMethodClientUnavailableError';\n this.type = 'payment_method_client_unavailable';\n }\n}\n","import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n InvalidArgumentError,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n BoltCheckout,\n BoltDeveloperMode,\n BoltDeveloperModeParams,\n BoltEmbedded,\n BoltHostWindow,\n} from './bolt';\n\nexport default class BoltScriptLoader {\n constructor(\n private scriptLoader: ScriptLoader,\n public boltHostWindow: BoltHostWindow = window,\n ) {}\n\n async loadBoltClient(\n publishableKey?: string,\n testMode?: boolean,\n developerModeParams?: BoltDeveloperModeParams,\n cartId?: string,\n storefrontApiToken?: string,\n ): Promise {\n if (this.boltHostWindow.BoltCheckout) {\n return this.boltHostWindow.BoltCheckout;\n }\n\n if (!publishableKey) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"publishableKey\" argument is not provided.',\n );\n }\n\n await this.scriptLoader.loadScript(\n `//${this.getDomainURL(!!testMode, developerModeParams)}/connect-bigcommerce.js`,\n this.getScriptOptions('bolt-connect', publishableKey, cartId, storefrontApiToken),\n );\n await this.scriptLoader.loadScript(\n `//${this.getDomainURL(!!testMode, developerModeParams)}/track.js`,\n this.getScriptOptions('bolt-track', publishableKey),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!this.boltHostWindow.BoltCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.boltHostWindow.BoltCheckout;\n }\n\n async loadBoltEmbedded(\n publishableKey: string,\n testMode?: boolean,\n developerModeParams?: BoltDeveloperModeParams,\n ): Promise {\n const options: LoadScriptOptions = {\n async: true,\n attributes: {\n id: 'bolt-embedded',\n },\n };\n\n await this.scriptLoader.loadScript(\n `//${this.getDomainURL(!!testMode, developerModeParams)}/embed.js`,\n options,\n );\n\n if (!this.boltHostWindow.Bolt) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.boltHostWindow.Bolt(publishableKey);\n }\n\n getDomainURL(testMode: boolean, developerModeParams?: BoltDeveloperModeParams): string {\n if (!testMode) {\n return 'connect.bolt.com';\n }\n\n if (developerModeParams) {\n switch (developerModeParams.developerMode) {\n case BoltDeveloperMode.StagingMode:\n return 'connect-staging.bolt.com';\n\n case BoltDeveloperMode.DevelopmentMode:\n return `connect.${developerModeParams.developerDomain}`;\n }\n }\n\n return 'connect-sandbox.bolt.com';\n }\n\n private getScriptOptions(\n id: string,\n publishableKey: string,\n cartId?: string,\n storefrontApiToken?: string,\n ): LoadScriptOptions {\n return {\n async: true,\n attributes: {\n id,\n 'data-publishable-key': publishableKey,\n ...(cartId && { 'data-shopping-cart-id': cartId }),\n ...(storefrontApiToken && { 'data-storefront-api-token': storefrontApiToken }),\n },\n };\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BoltButtonStrategy from './bolt-button-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\n\nconst createBoltButtonStrategy: CheckoutButtonStrategyFactory = (\n paymentIntegrationService,\n) => {\n return new BoltButtonStrategy(\n paymentIntegrationService,\n new BoltScriptLoader(getScriptLoader()),\n );\n};\n\nexport default toResolvableModule(createBoltButtonStrategy, [{ id: 'bolt' }]);\n","export enum CartSource {\n BuyNow = 'BUY_NOW',\n}\n","import {\n BuyNowCartRequestBody,\n HostedInstrument,\n ShippingOption,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Commerce Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n CARD: string;\n PAYPAL: string;\n CREDIT: string;\n PAYLATER: string;\n OXXO: string;\n SEPA: string;\n VENMO: string;\n}\n\n/**\n *\n * PayPal Commerce SDK\n *\n */\nexport interface PayPalSDK {\n FUNDING: PayPalCommerceSDKFunding;\n HostedFields: {\n isEligible(): boolean;\n render(data: PayPalCommerceHostedFieldsRenderOptions): Promise;\n };\n Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\n PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\n Messages(options: PayPalCommerceMessagesOptions): PayPalCommerceMessages;\n}\n\nexport interface PayPalCommerceScriptParams {\n 'client-id'?: string;\n 'merchant-id'?: string;\n 'buyer-country'?: string;\n 'disable-funding'?: FundingType;\n 'enable-funding'?: EnableFundingType;\n 'data-client-token'?: string;\n 'data-partner-attribution-id'?: string;\n currency?: string;\n commit?: boolean;\n intent?: PayPalCommerceIntent;\n components?: ComponentsScriptType;\n}\n\nexport enum PayPalCommerceIntent {\n AUTHORIZE = 'authorize',\n CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n 'buttons' | 'funding-eligibility' | 'hosted-fields' | 'messages' | 'payment-fields'\n>;\n\nexport interface PayPalCommerceHostWindow extends Window {\n paypal?: PayPalSDK;\n paypalLoadScript?(options: PayPalCommerceScriptParams): Promise<{ paypal: PayPalSDK }>;\n}\n\n/**\n *\n * PayPal Commerce Initialization Data\n *\n */\nexport interface PayPalCommerceInitializationData {\n attributionId?: string;\n availableAlternativePaymentMethods: FundingType;\n buttonStyle?: PayPalButtonStyleOptions;\n buyerCountry?: string;\n clientId: string;\n clientToken?: string;\n enabledAlternativePaymentMethods: FundingType;\n isDeveloperModeApplicable?: boolean;\n intent?: PayPalCommerceIntent;\n isHostedCheckoutEnabled?: boolean;\n isPayPalCreditAvailable?: boolean;\n isVenmoEnabled?: boolean;\n merchantId?: string;\n orderId?: string;\n shouldRenderFields?: boolean;\n}\n\n/**\n *\n * PayPal Commerce BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Commerce Hosted Fields\n *\n */\nexport interface PayPalCommerceHostedFieldsRenderOptions {\n fields?: {\n number?: PayPalCommerceHostedFieldOption;\n cvv?: PayPalCommerceHostedFieldOption;\n expirationDate?: PayPalCommerceHostedFieldOption;\n };\n paymentsSDK?: boolean;\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n createOrder(): Promise;\n}\n\nexport interface PayPalCommerceHostedFieldOption {\n selector: string;\n placeholder?: string;\n}\n\nexport interface PayPalCommerceHostedFields {\n submit(\n options?: PayPalCommerceHostedFieldsSubmitOptions,\n ): Promise;\n getState(): PayPalCommerceHostedFieldsState;\n on(eventName: string, callback: (event: PayPalCommerceHostedFieldsState) => void): void;\n}\n\nexport interface PayPalCommerceHostedFieldsSubmitOptions {\n contingencies?: Array<'3D_SECURE'>;\n cardholderName?: string;\n}\n\nexport interface PayPalCommerceHostedFieldsApprove {\n orderId: string;\n liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalCommerceHostedFieldsState {\n cards: PayPalCommerceHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: PayPalCommerceHostedFieldsFieldData;\n expirationDate?: PayPalCommerceHostedFieldsFieldData;\n expirationMonth?: PayPalCommerceHostedFieldsFieldData;\n expirationYear?: PayPalCommerceHostedFieldsFieldData;\n cvv?: PayPalCommerceHostedFieldsFieldData;\n postalCode?: PayPalCommerceHostedFieldsFieldData;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsCard {\n type: string;\n niceType: string;\n code: {\n name: string;\n size: number;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\n/**\n *\n * PayPal Commerce Buttons\n *\n */\nexport interface PayPalCommerceButtons {\n render(id: string): void;\n close(): void;\n isEligible(): boolean;\n}\n\nexport interface PayPalCommerceButtonsOptions {\n experience?: string;\n style?: PayPalButtonStyleOptions;\n fundingSource: string;\n createOrder(): Promise;\n onApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ): Promise | void;\n onComplete?(data: CompleteCallbackDataPayload): Promise;\n onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise;\n onError?(error: Error): void;\n onCancel?(): void;\n onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise;\n onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n reject(): void;\n resolve(): void;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n orderId: string;\n shippingAddress: PayPalAddress;\n}\n\nexport interface PayPalAddress {\n city: string;\n country_code: string;\n postal_code: string;\n state: string;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n orderId: string;\n selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface PayPalSelectedShippingOption {\n amount: {\n currency_code: string;\n value: string;\n };\n id: string;\n label: string;\n selected: boolean;\n type: string;\n}\n\nexport interface ApproveCallbackPayload {\n orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n order: {\n get: () => Promise;\n };\n}\n\nexport interface PayPalOrderDetails {\n payer: {\n name: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n address: PayPalOrderAddress;\n };\n purchase_units: Array<{\n shipping: {\n address: PayPalOrderAddress;\n };\n }>;\n}\n\nexport interface PayPalOrderAddress {\n address_line_1: string;\n admin_area_2: string;\n admin_area_1?: string;\n postal_code: string;\n country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n intent: string;\n orderID: string;\n}\n\nexport enum StyleButtonLabel {\n paypal = 'paypal',\n checkout = 'checkout',\n buynow = 'buynow',\n pay = 'pay',\n installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n gold = 'gold',\n blue = 'blue',\n silver = 'silver',\n black = 'black',\n white = 'white',\n}\n\nexport enum StyleButtonShape {\n pill = 'pill',\n rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n color?: StyleButtonColor;\n shape?: StyleButtonShape;\n height?: number;\n label?: StyleButtonLabel;\n}\n\n/**\n *\n * PayPal Commerce Payment fields\n *\n */\nexport interface PayPalCommercePaymentFields {\n render(id: string): void;\n}\n\nexport interface PayPalCommercePaymentFieldsOptions {\n style?: PayPalCommerceFieldsStyleOptions;\n fundingSource: string;\n fields: {\n name?: {\n value?: string;\n };\n email?: {\n value?: string;\n };\n };\n}\n\nexport interface PayPalCommerceFieldsStyleOptions {\n variables?: {\n fontFamily?: string;\n fontSizeBase?: string;\n fontSizeSm?: string;\n fontSizeM?: string;\n fontSizeLg?: string;\n textColor?: string;\n colorTextPlaceholder?: string;\n colorBackground?: string;\n colorInfo?: string;\n colorDanger?: string;\n borderRadius?: string;\n borderColor?: string;\n borderWidth?: string;\n borderFocusColor?: string;\n spacingUnit?: string;\n };\n rules?: {\n [key: string]: any;\n };\n}\n\n/**\n *\n * PayPalCommerce Messages\n *\n */\nexport interface PayPalCommerceMessages {\n render(id: string): void;\n}\n\nexport interface PayPalCommerceMessagesOptions {\n amount: number;\n placement: string;\n style?: PayPalCommerceMessagesStyleOptions;\n fundingSource?: string;\n}\n\nexport interface PayPalCommerceMessagesStyleOptions {\n layout?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n OXXO = 'oxxo',\n}\n\nexport interface PayPalOrderData {\n orderId: string;\n approveUrl: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n availableShippingOptions?: ShippingOption[];\n cartId: string;\n selectedShippingOption?: ShippingOption;\n}\n\nexport interface PayPalUpdateOrderResponse {\n statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n cartId: string;\n}\n\nexport enum PayPalOrderStatus {\n Approved = 'APPROVED',\n Created = 'CREATED',\n PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n}\n\nexport interface PayPalOrderStatusData {\n status: PayPalOrderStatus;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n BillingAddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n CartSource,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n RequestError,\n ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceInitializationData,\n PayPalCreateOrderRequestBody,\n PayPalOrderDetails,\n PayPalOrderStatus,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceIntegrationService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private formPoster: FormPoster,\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n methodId: string,\n providedCurrencyCode?: string,\n initializesOnCheckoutPage?: boolean,\n ): Promise {\n const state = this.paymentIntegrationService.getState();\n const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n const paymentMethod =\n state.getPaymentMethodOrThrow(methodId);\n\n this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n paymentMethod,\n currencyCode,\n initializesOnCheckoutPage,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Buy Now cart creation methods\n *\n */\n async createBuyNowCartOrThrow(\n buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n ): Promise {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n /**\n *\n * Order methods\n *\n */\n async createOrder(\n providerId: string,\n requestBody?: Partial,\n ): Promise {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId } = await this.paypalCommerceRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return orderId;\n }\n\n async updateOrder(): Promise {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n try {\n await this.paypalCommerceRequestSender.updateOrder({\n availableShippingOptions: consignment.availableShippingOptions,\n cartId: cart.id,\n selectedShippingOption: consignment.selectedShippingOption,\n });\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n async getOrderStatus(): Promise {\n try {\n const { status } = await this.paypalCommerceRequestSender.getOrderStatus();\n\n return status;\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n tokenizePayment(methodId: string, orderId?: string): void {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n action: 'set_external_checkout',\n provider: methodId,\n order_id: orderId,\n ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n });\n }\n\n async submitPayment(methodId: string, orderId: string): Promise {\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: methodId,\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitPayment({ methodId, paymentData });\n }\n\n /**\n *\n * Shipping options methods\n *\n */\n getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n const state = this.paymentIntegrationService.getState();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n const availableShippingOptions = consignment.availableShippingOptions || [];\n\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n const selectedShippingOption = selectedShippingOptionId\n ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n : availableShippingOptions.find(\n (option) => option.id === consignment.selectedShippingOption?.id,\n );\n\n const shippingOptionToSelect =\n selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n if (!shippingOptionToSelect) {\n throw new Error(\"Your order can't be shipped to this address\");\n }\n\n return shippingOptionToSelect;\n }\n\n /**\n *\n * Address transforming methods\n *\n */\n getAddress(address?: Partial): BillingAddressRequestBody {\n return {\n firstName: address?.firstName || '',\n lastName: address?.lastName || '',\n email: address?.email || '',\n phone: '',\n company: '',\n address1: address?.address1 || '',\n address2: '',\n city: address?.city || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n stateOrProvince: '',\n stateOrProvinceCode: address?.stateOrProvinceCode || '',\n customFields: [],\n };\n }\n\n getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: payer.address.address_line_1,\n city: payer.address.admin_area_2,\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n stateOrProvinceCode: payer.address.admin_area_1,\n });\n }\n\n getShippingAddressFromOrderDetails(\n orderDetails: PayPalOrderDetails,\n ): BillingAddressRequestBody {\n const { payer, purchase_units } = orderDetails;\n const shippingAddress = purchase_units[0]?.shipping?.address || {};\n\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: shippingAddress.address_line_1,\n city: shippingAddress.admin_area_2,\n countryCode: shippingAddress.country_code,\n postalCode: shippingAddress.postal_code,\n stateOrProvinceCode: shippingAddress.admin_area_1,\n });\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style || {};\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n}\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\n","enum ContentType {\n Json = 'application/json',\n JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n","export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCreateOrderRequestBody,\n PayPalOrderData,\n PayPalOrderStatusData,\n PayPalUpdateOrderRequestBody,\n PayPalUpdateOrderResponse,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async createOrder(\n providerId: string,\n requestBody: Partial,\n ): Promise {\n const url = `/api/storefront/payment/${providerId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.post(url, { headers, body });\n\n return res.body;\n }\n\n async updateOrder(\n requestBody: PayPalUpdateOrderRequestBody,\n ): Promise {\n const url = `/api/storefront/initialization/paypalcommerce`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.put(url, { headers, body });\n\n return res.body;\n }\n\n async getOrderStatus(): Promise {\n const url = '/api/storefront/initialization/paypalcommerce';\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.get(url, { headers });\n\n return res.body;\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n FundingType,\n PayPalCommerceHostWindow,\n PayPalCommerceInitializationData,\n PayPalCommerceScriptParams,\n PayPalSDK,\n} from './paypal-commerce-types';\n\nconst PAYPAL_SDK_VERSION = '5.0.5';\n\nexport default class PayPalCommerceScriptLoader {\n private window: PayPalCommerceHostWindow;\n private paypalSdk?: PayPalSDK;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async getPayPalSDK(\n paymentMethod: PaymentMethod,\n currencyCode: string,\n initializesOnCheckoutPage?: boolean,\n ): Promise {\n if (!this.paypalSdk) {\n this.paypalSdk = await this.loadPayPalSDK(\n this.getPayPalSdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n initializesOnCheckoutPage,\n ),\n );\n }\n\n return this.paypalSdk;\n }\n\n private async loadPayPalSDK(\n paypalSdkScriptConfig: PayPalCommerceScriptParams,\n ): Promise {\n if (!this.window.paypalLoadScript) {\n const scriptSrc = `https://unpkg.com/@paypal/paypal-js@${PAYPAL_SDK_VERSION}/dist/iife/paypal-js.min.js`;\n\n await this.scriptLoader.loadScript(scriptSrc, { async: true, attributes: {} });\n\n if (!this.window.paypalLoadScript) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n await this.window.paypalLoadScript(paypalSdkScriptConfig);\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypal;\n }\n\n private getPayPalSdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod,\n currencyCode: string,\n initializesOnCheckoutPage = true,\n ): PayPalCommerceScriptParams {\n const { id, clientToken, initializationData } = paymentMethod;\n\n if (!initializationData?.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isVenmoEnabled,\n isHostedCheckoutEnabled,\n isPayPalCreditAvailable,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const shouldEnableCard = id === 'paypalcommercecreditcards';\n const enableCardFunding = shouldEnableCard ? ['card'] : [];\n const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n const shouldEnableAPMs = initializesOnCheckoutPage || !commit;\n const enableVenmoFunding = shouldEnableAPMs && isVenmoEnabled ? ['venmo'] : [];\n const disableVenmoFunding = !shouldEnableAPMs || !isVenmoEnabled ? ['venmo'] : [];\n const enableAPMsFunding = shouldEnableAPMs ? enabledAlternativePaymentMethods : [];\n const disableAPMsFunding = shouldEnableAPMs\n ? availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n )\n : availableAlternativePaymentMethods;\n\n const disableFunding: FundingType = [\n ...disableCardFunding,\n ...disableCreditFunding,\n ...disableVenmoFunding,\n ...disableAPMsFunding,\n ];\n const enableFunding: FundingType = [\n ...enableCardFunding,\n ...enableCreditFunding,\n ...enableVenmoFunding,\n ...enableAPMsFunding,\n ];\n\n return {\n 'client-id': clientId,\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n 'merchant-id': merchantId,\n 'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n 'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n commit,\n components: ['buttons', 'hosted-fields', 'messages', 'payment-fields'],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n };\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCommerceIntegrationService,\n PayPalCommerceRequestSender,\n PayPalCommerceScriptLoader,\n} from './index';\n\nconst createPayPalCommerceIntegrationService = (\n paymentIntegrationService: PaymentIntegrationService,\n) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PayPalCommerceIntegrationService(\n createFormPoster(),\n paymentIntegrationService,\n new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n new PayPalCommerceScriptLoader(getScriptLoader()),\n );\n};\n\nexport default createPayPalCommerceIntegrationService;\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceButtonInitializeOptions, {\n WithPayPalCommerceButtonInitializeOptions,\n} from './paypal-commerce-button-initialize-options';\n\nexport default class PayPalCommerceButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions,\n ): Promise {\n const { paypalcommerce, containerId, methodId } = options;\n\n const isBuyNowFlow = Boolean(paypalcommerce?.buyNowInitializeOptions);\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !paypalcommerce.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof paypalcommerce.buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? paypalcommerce.currencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommerce);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommerce: PayPalCommerceButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete } = paypalcommerce;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow(methodId);\n const { isHostedCheckoutEnabled } = paymentMethod.initializationData || {};\n\n const defaultCallbacks = {\n createOrder: () => this.paypalCommerceIntegrationService.createOrder('paypalcommerce'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const hostedCheckoutCallbacks = {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(data, actions, methodId, onComplete),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n ): Promise {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const orderDetails = await actions.order.get();\n\n try {\n const billingAddress =\n this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (cart.lineItems.physicalItems.length > 0) {\n const shippingAddress =\n this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n await this.paypalCommerceIntegrationService.updateOrder();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n\n return true; // FIXME: Do we really need to return true here?\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise {\n const address = this.paypalCommerceIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.country_code,\n postalCode: data.shippingAddress.postal_code,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise {\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\nconst createPayPalCommerceButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceButtonStrategy, [{ id: 'paypalcommerce' }]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditButtonInitializeOptions, {\n WithPayPalCommerceCreditButtonInitializeOptions,\n} from './paypal-commerce-credit-button-initialize-options';\n\nexport default class PayPalCommerceCreditButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions,\n ): Promise {\n const { paypalcommercecredit, containerId, methodId } = options;\n const {\n buyNowInitializeOptions,\n currencyCode: providedCurrencyCode,\n messagingContainerId,\n } = paypalcommercecredit || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercecredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercecredit);\n this.renderMessages(messagingContainerId);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercecredit: PayPalCommerceCreditButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete } = paypalcommercecredit;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow(methodId);\n const { isHostedCheckoutEnabled } = paymentMethod.initializationData || {};\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercecredit'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const hostedCheckoutCallbacks = {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(data, actions, methodId, onComplete),\n };\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n ): Promise {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const orderDetails = await actions.order.get();\n\n try {\n const billingAddress =\n this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (cart.lineItems.physicalItems.length > 0) {\n const shippingAddress =\n this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n await this.paypalCommerceIntegrationService.updateOrder();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n\n return true; // FIXME: Do we really need to return true here?\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise {\n const address = this.paypalCommerceIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.country_code,\n postalCode: data.shippingAddress.postal_code,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise {\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private renderMessages(messagingContainerId?: string): void {\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n\n if (messagingContainerId && document.getElementById(messagingContainerId)) {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n const paypalMessagesOptions = {\n amount: cart.cartAmount,\n placement: 'cart',\n style: {\n layout: 'text',\n },\n };\n\n const paypalMessages = paypalSdk.Messages(paypalMessagesOptions);\n\n paypalMessages.render(`#${messagingContainerId}`);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\nconst createPayPalCommerceCreditButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceCreditButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditButtonStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoButtonInitializeOptions, {\n WithPayPalCommerceVenmoButtonInitializeOptions,\n} from './paypal-commerce-venmo-button-initialize-options';\n\nexport default class PayPalCommerceVenmoButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions,\n ): Promise {\n const { paypalcommercevenmo, containerId, methodId } = options;\n const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n paypalcommercevenmo || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercevenmo);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style } = paypalcommercevenmo;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const fundingSource = paypalSdk.FUNDING.VENMO;\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.getValidVenmoButtonStyles(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n const validButtonStyle = this.paypalCommerceIntegrationService.getValidButtonStyle(style);\n\n if (validButtonStyle.color === StyleButtonColor.gold) {\n return {\n ...validButtonStyle,\n color: undefined,\n };\n }\n\n return validButtonStyle;\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\nconst createPayPalCommerceVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceVenmoButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoButtonStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceAlternativeMethodsButtonOptions, {\n WithPayPalCommerceAlternativeMethodsButtonInitializeOptions,\n} from './paypal-commerce-alternative-methods-button-initialize-options';\n\nexport default class PayPalCommerceAlternativeMethodsButtonStrategy\n implements CheckoutButtonStrategy\n{\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions &\n WithPayPalCommerceAlternativeMethodsButtonInitializeOptions,\n ): Promise {\n const { paypalcommercealternativemethods, containerId, methodId } = options;\n const {\n apm,\n buyNowInitializeOptions,\n currencyCode: providedCurrencyCode,\n } = paypalcommercealternativemethods || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercealternativemethods) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.`,\n );\n }\n\n if (!apm) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods.apm\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercealternativemethods);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercealternativemethods: PayPalCommerceAlternativeMethodsButtonOptions,\n ): void {\n const { apm, buyNowInitializeOptions, style } = paypalcommercealternativemethods;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const isAvailableFundingSource = Object.values(paypalSdk.FUNDING).includes(apm);\n\n if (!isAvailableFundingSource) {\n throw new InvalidArgumentError(\n `Unable to initialize PayPal button because \"options.paypalcommercealternativemethods.apm\" argument is not valid funding source.`,\n );\n }\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder(\n 'paypalcommercealternativemethod',\n ),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: apm,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceAlternativeMethodsButtonStrategy from './paypal-commerce-alternative-methods-button-strategy';\n\nconst createPayPalCommerceAlternativeMethodsButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceAlternativeMethodsButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceAlternativeMethodsButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceAlternativeMethodsButtonStrategy, [\n { id: 'paypalcommercealternativemethods' },\n]);\n","export interface PaypalFundingTypeList {\n CARD?: string;\n CREDIT?: string;\n PAYPAL?: string;\n PAYLATER?: string;\n}\n\nexport interface PaypalButton {\n render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalButtonRender {\n render(container: string): void;\n isEligible(): boolean;\n}\n\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface MessagingOptions {\n amount: number;\n placement: string;\n}\n\nexport interface PaypalButtonOptions {\n env?: string;\n commit?: boolean;\n style?: PaypalStyleOptions;\n funding?: PaypalFundingType;\n fundingSource?: string;\n client?: PaypalClientToken;\n payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n}\n\nexport interface PaypalClientToken {\n production?: string;\n sandbox?: string;\n}\n\nexport interface PaypalFundingType {\n allowed?: string[];\n disallowed?: string[];\n}\n\nexport enum PaypalButtonStyleLayoutOption {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical',\n}\n\nexport enum PaypalButtonStyleSizeOption {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n RESPONSIVE = 'responsive',\n}\n\nexport enum PaypalButtonStyleColorOption {\n GOLD = 'gold',\n BLUE = 'blue',\n SIlVER = 'silver',\n BLACK = 'black',\n}\n\nexport enum PaypalButtonStyleLabelOption {\n CHECKOUT = 'checkout',\n PAY = 'pay',\n BUYNOW = 'buynow',\n PAYPAL = 'paypal',\n CREDIT = 'credit',\n}\n\nexport enum PaypalButtonStyleShapeOption {\n PILL = 'pill',\n RECT = 'rect',\n}\n\nexport interface PaypalStyleOptions {\n layout?: PaypalButtonStyleLayoutOption;\n size?: PaypalButtonStyleSizeOption;\n color?: PaypalButtonStyleColorOption;\n label?: PaypalButtonStyleLabelOption;\n shape?: PaypalButtonStyleShapeOption;\n tagline?: boolean;\n fundingicons?: boolean;\n height?: number;\n}\n\nexport interface PaypalActions {\n payment: PaypalPaymentActions;\n request: PaypalRequestActions;\n}\n\nexport interface PaypalPaymentActions {\n get(id: string): Promise;\n}\n\nexport interface PaypalRequestActions {\n post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface PaypalTransaction {\n amount?: PaypalAmount;\n payee?: PaypalPayee;\n description?: string;\n note_to_payee?: string;\n item_list?: PaypalItemList;\n}\n\nexport interface PaypalItemList {\n items?: PaypalItem[];\n shipping_address?: PaypalAddress;\n}\n\nexport interface PaypalItem {\n sku?: string;\n name?: string;\n description?: string;\n quantity: string;\n price: string;\n currency: string;\n tax?: string;\n}\n\nexport interface PaypalAmount {\n currency: string;\n total: string;\n}\n\nexport interface PaypalPayer {\n payer_info: object;\n}\n\nexport interface PaypalPayee {\n email?: string;\n merchant_id?: string;\n}\n\nexport interface PaypalAddress {\n line1: string;\n line2?: string;\n city?: string;\n country_code: string;\n postal_code?: string;\n state?: string;\n phone?: string;\n type?: string;\n}\n\nexport interface PaypalPaymentPayload {\n payment: PaypalPaymentPayload;\n payer: PaypalPayer;\n transactions?: PaypalTransaction[];\n}\n\nexport interface PaypalAuthorizeData {\n payerId: string;\n paymentId?: string;\n billingToken?: string;\n // the PayPal side of things uses uppercase ID instead of camel case Id\n payerID?: string;\n paymentID?: string;\n}\n\nexport interface PaypalExpressCheckout {\n initXO(): void;\n startFlow(url: string): void;\n closeFlow(): void;\n setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\n}\n\nexport interface PaypalExpressCheckoutOptions {\n button: string;\n environment: string;\n}\n\nexport interface PaypalHostWindow extends Window {\n paypal?: PaypalSDK;\n}\n\nexport interface PaypalSDK {\n Button: PaypalButton;\n checkout: PaypalExpressCheckout;\n FUNDING: PaypalFundingTypeList;\n Messages(options: MessagingOptions): MessagingRender;\n Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n INTERNAL_USE_ONLY,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n PaymentIntegrationService,\n SDK_VERSION_HEADERS,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithPaypalExpressButtonInitializeOptions } from './paypal-express-button-initialize-options';\nimport PaypalScriptLoader from './paypal-express-script-loader';\nimport {\n PaypalActions,\n PaypalAuthorizeData,\n PaypalButtonStyleShapeOption,\n PaypalButtonStyleSizeOption,\n PaypalClientToken,\n PaypalSDK,\n PaypalStyleOptions,\n} from './paypal-express-types';\n\nexport default class PaypalButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalExpressScriptLoader: PaypalScriptLoader,\n private formPoster: FormPoster,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions,\n ): Promise {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n if (!options.paypal) {\n throw new InvalidArgumentError();\n }\n\n if (!paymentMethod.config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalSDK = await this.paypalExpressScriptLoader.loadPaypalSDK(\n paymentMethod.config.merchantId,\n );\n\n this.renderButton(options, paypalSDK);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions,\n paypalSDK: PaypalSDK,\n ) {\n const { containerId, methodId, paypal } = options;\n const { allowCredit, clientId, onPaymentError, shouldProcessPayment, style } = paypal;\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n if (!paymentMethod.config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const merchantId = paymentMethod.config.merchantId;\n const env = paymentMethod.config.testMode ? 'sandbox' : 'production';\n const clientToken: PaypalClientToken = { [env]: clientId };\n const fundingCreditOption = paypalSDK.FUNDING.CREDIT || 'credit';\n const allowedSources = allowCredit ? [fundingCreditOption] : [];\n const disallowedSources = !allowCredit ? [fundingCreditOption] : [];\n\n return paypalSDK.Button.render(\n {\n env,\n client: clientToken,\n commit: shouldProcessPayment,\n funding: {\n allowed: allowedSources,\n disallowed: disallowedSources,\n },\n style: this.getStyle(style),\n payment: (_, actions) => this.setupPayment(merchantId, actions, onPaymentError),\n onAuthorize: (data, actions) =>\n this.tokenizePayment(data, methodId, actions, shouldProcessPayment),\n },\n containerId,\n );\n }\n\n private getStyle(style?: Omit): PaypalStyleOptions {\n const { color, fundingicons, label, layout, shape, size, tagline } = style || {};\n\n return {\n color,\n fundingicons,\n label,\n layout,\n shape: shape || PaypalButtonStyleShapeOption.RECT,\n size: size === 'small' ? PaypalButtonStyleSizeOption.RESPONSIVE : size,\n tagline,\n };\n }\n\n private async setupPayment(\n merchantId: string,\n actions?: PaypalActions,\n onError?: (error: StandardError) => void,\n ): Promise {\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n try {\n const state = await this.paymentIntegrationService.loadDefaultCheckout();\n const { id: cartId } = state.getCartOrThrow();\n const host = state.getHost() || '';\n\n const paymentRequest = await actions.request.post(\n `${host}/api/storefront/payment/paypalexpress`,\n { merchantId, cartId },\n {\n headers: {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n },\n );\n\n return paymentRequest.id;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n data: PaypalAuthorizeData,\n methodId: string,\n actions?: PaypalActions,\n shouldProcessPayment?: boolean,\n ): Promise {\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n if (!data.paymentID || !data.payerID) {\n throw new MissingDataError(MissingDataErrorType.MissingPayment);\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n const getPaymentData = await actions.payment.get(data.paymentID);\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: paymentMethod.id,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n paymentId: data.paymentID,\n payerId: data.payerID,\n payerInfo: JSON.stringify(getPaymentData.payer.payer_info),\n });\n }\n}\n","import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalHostWindow, PaypalSDK } from './paypal-express-types';\n\nexport default class PaypalScriptLoader {\n private window: PaypalHostWindow;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async loadPaypalSDK(merchantId = ''): Promise {\n const scriptSrc = '//www.paypalobjects.com/api/checkout.min.js';\n const options: LoadScriptOptions = {\n async: true,\n attributes: { 'data-merchant-id': merchantId },\n ...(merchantId && {\n attributes: { 'data-merchant-id': merchantId },\n }),\n };\n\n await this.scriptLoader.loadScript(scriptSrc, options);\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypal;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalExpressButtonStrategy, PaypalExpressScriptLoader } from './index';\n\nconst createPaypalExpressButtonStrategy: CheckoutButtonStrategyFactory<\n PaypalExpressButtonStrategy\n> = (paymentIntegrationService) => {\n return new PaypalExpressButtonStrategy(\n paymentIntegrationService,\n new PaypalExpressScriptLoader(getScriptLoader()),\n createFormPoster(),\n );\n};\n\nexport default toResolvableModule(createPaypalExpressButtonStrategy, [{ id: 'paypalexpress' }]);\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\nimport { PaymentMethodActionCreator, PaymentMethodRequestSender } from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\n\nimport CheckoutButtonInitializer from './checkout-button-initializer';\nimport CheckoutButtonInitializerOptions from './checkout-button-initializer-options';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonRegistry from './create-checkout-button-registry';\nimport createCheckoutButtonRegistryV2 from './create-checkout-button-registry-v2';\n\n/**\n * Creates an instance of `CheckoutButtonInitializer`.\n *\n * @remarks\n * ```js\n * const initializer = createCheckoutButtonInitializer();\n *\n * initializer.initializeButton({\n * methodId: 'braintreepaypal',\n * braintreepaypal: {\n * container: '#checkoutButton',\n * },\n * });\n * ```\n *\n * @alpha\n * Please note that `CheckoutButtonInitializer` is currently in an early stage\n * of development. Therefore the API is unstable and not ready for public\n * consumption.\n *\n * @param options - A set of construction options.\n * @returns an instance of `CheckoutButtonInitializer`.\n */\nexport default function createCheckoutButtonInitializer(\n options?: CheckoutButtonInitializerOptions,\n): CheckoutButtonInitializer {\n const { host, locale = 'en' } = options ?? {};\n const store = createCheckoutStore();\n const requestSender = createRequestSender({ host });\n const formPoster = createFormPoster({ host });\n const paymentIntegrationService = createPaymentIntegrationService(store);\n const registryV2 = createCheckoutButtonRegistryV2(paymentIntegrationService);\n\n return new CheckoutButtonInitializer(\n store,\n new CheckoutButtonStrategyActionCreator(\n createCheckoutButtonRegistry(store, requestSender, formPoster, locale, host),\n registryV2,\n new PaymentMethodActionCreator(new PaymentMethodRequestSender(requestSender)),\n ),\n );\n}\n","import {\n CheckoutButtonStrategy,\n CheckoutButtonStrategyFactory,\n CheckoutButtonStrategyResolveId,\n isResolvableModule,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\nimport * as defaultCheckoutButtonStrategyFactories from '../generated/checkout-button-strategies';\n\nexport interface CheckoutButtonStrategyFactories {\n [key: string]: CheckoutButtonStrategyFactory;\n}\n\nexport default function createCheckoutButtonStrategyRegistry(\n paymentIntegrationService: PaymentIntegrationService,\n checkoutButtonStrategyFactories: CheckoutButtonStrategyFactories = defaultCheckoutButtonStrategyFactories,\n): ResolveIdRegistry {\n const registry = new ResolveIdRegistry<\n CheckoutButtonStrategy,\n CheckoutButtonStrategyResolveId\n >();\n\n for (const [, createCheckoutButtonStrategy] of Object.entries(\n checkoutButtonStrategyFactories,\n )) {\n if (\n !isResolvableModule<\n CheckoutButtonStrategyFactory,\n CheckoutButtonStrategyResolveId\n >(createCheckoutButtonStrategy)\n ) {\n continue;\n }\n\n for (const resolverId of createCheckoutButtonStrategy.resolveIds) {\n registry.register(resolverId, () =>\n createCheckoutButtonStrategy(paymentIntegrationService),\n );\n }\n }\n\n return registry;\n}\n","import ResolvableModule from './resolvable-module';\n\nexport default function isResolvableModule(\n module: TModule,\n): module is ResolvableModule {\n return 'resolveIds' in module;\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../billing';\nimport { CartRequestSender } from '../cart';\nimport {\n CheckoutActionCreator,\n CheckoutRequestSender,\n CheckoutStore,\n CheckoutValidator,\n} from '../checkout';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { CustomerActionCreator, CustomerRequestSender } from '../customer';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator, OrderRequestSender } from '../order';\nimport {\n createPaymentClient,\n PaymentActionCreator,\n PaymentMethodActionCreator,\n PaymentMethodRequestSender,\n PaymentRequestSender,\n PaymentRequestTransformer,\n} from '../payment';\nimport { ConsignmentActionCreator, ConsignmentRequestSender } from '../shipping';\nimport {\n createSpamProtection,\n PaymentHumanVerificationHandler,\n SpamProtectionActionCreator,\n SpamProtectionRequestSender,\n} from '../spam-protection';\nimport { StoreCreditActionCreator, StoreCreditRequestSender } from '../store-credit';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../subscription';\n\nimport createPaymentIntegrationSelectors from './create-payment-integration-selectors';\nimport DefaultPaymentIntegrationService from './default-payment-integration-service';\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\nexport default function createPaymentIntegrationService(\n store: CheckoutStore,\n): PaymentIntegrationService {\n const {\n config: { getHost },\n } = store.getState();\n\n const requestSender = createRequestSender({ host: getHost() });\n\n const storeProjectionFactory = new PaymentIntegrationStoreProjectionFactory(\n createPaymentIntegrationSelectors,\n );\n\n const checkoutActionCreator = new CheckoutActionCreator(\n new CheckoutRequestSender(requestSender),\n new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n );\n\n const hostedFormFactory = new HostedFormFactory(store);\n\n const orderActionCreator = new OrderActionCreator(\n new OrderRequestSender(requestSender),\n new CheckoutValidator(new CheckoutRequestSender(requestSender)),\n );\n\n const billingAddressActionCreator = new BillingAddressActionCreator(\n new BillingAddressRequestSender(requestSender),\n new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n );\n\n const consignmentActionCreator = new ConsignmentActionCreator(\n new ConsignmentRequestSender(requestSender),\n new CheckoutRequestSender(requestSender),\n );\n\n const paymentMethodActionCreator = new PaymentMethodActionCreator(\n new PaymentMethodRequestSender(requestSender),\n );\n\n const paymentActionCreator = new PaymentActionCreator(\n new PaymentRequestSender(createPaymentClient(store)),\n orderActionCreator,\n new PaymentRequestTransformer(),\n new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n );\n\n const customerActionCreator = new CustomerActionCreator(\n new CustomerRequestSender(requestSender),\n checkoutActionCreator,\n new SpamProtectionActionCreator(\n createSpamProtection(createScriptLoader()),\n new SpamProtectionRequestSender(requestSender),\n ),\n );\n\n const storeCreditActionCreator = new StoreCreditActionCreator(\n new StoreCreditRequestSender(requestSender),\n );\n\n const spamProtection = createSpamProtection(createScriptLoader());\n const spamProtectionRequestSender = new SpamProtectionRequestSender(requestSender);\n const spamProtectionActionCreator = new SpamProtectionActionCreator(\n spamProtection,\n spamProtectionRequestSender,\n );\n\n const cartRequestSender = new CartRequestSender(requestSender);\n\n return new DefaultPaymentIntegrationService(\n store,\n storeProjectionFactory,\n checkoutActionCreator,\n hostedFormFactory,\n orderActionCreator,\n billingAddressActionCreator,\n consignmentActionCreator,\n paymentMethodActionCreator,\n paymentActionCreator,\n customerActionCreator,\n cartRequestSender,\n storeCreditActionCreator,\n spamProtectionActionCreator,\n );\n}\n","// / \nimport { createClient as createBigpayClient } from '@bigcommerce/bigpay-client';\n\nimport { CheckoutStore } from '../checkout';\n\nexport default function createPaymentClient(store: CheckoutStore) {\n const paymentClient = createBigpayClient();\n\n store.subscribe(\n (state) => {\n const config = state.config.getStoreConfig();\n\n if (config) {\n paymentClient.setHost(config.paymentSettings.bigpayBaseUrl);\n }\n },\n (state) => state.config.getStoreConfig(),\n );\n\n return paymentClient;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CartRequestSender } from '../cart';\nimport { CheckoutActionCreator, CheckoutRequestSender, CheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { PaymentMethodActionCreator, PaymentMethodRequestSender } from '../payment';\nimport { createAmazonPayV2PaymentProcessor } from '../payment/strategies/amazon-pay-v2';\nimport { BraintreeScriptLoader, BraintreeSDKCreator } from '../payment/strategies/braintree';\nimport {\n createGooglePayPaymentProcessor,\n GooglePayAdyenV2Initializer,\n GooglePayAdyenV3Initializer,\n GooglePayAuthorizeNetInitializer,\n GooglePayBNZInitializer,\n GooglePayBraintreeInitializer,\n GooglePayCheckoutcomInitializer,\n GooglePayCybersourceV2Initializer,\n GooglePayOrbitalInitializer,\n GooglePayStripeInitializer,\n GooglePayStripeUPEInitializer,\n GooglePayWorldpayAccessInitializer,\n} from '../payment/strategies/googlepay';\nimport { MasterpassScriptLoader } from '../payment/strategies/masterpass';\nimport { PaypalScriptLoader } from '../payment/strategies/paypal';\n\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\nimport { AmazonPayV2ButtonStrategy } from './strategies/amazon-pay-v2';\nimport AmazonPayV2RequestSender from './strategies/amazon-pay-v2/amazon-pay-v2-request-sender';\nimport {\n BraintreePaypalButtonStrategy,\n BraintreePaypalCreditButtonStrategy,\n BraintreeVenmoButtonStrategy,\n} from './strategies/braintree';\nimport { GooglePayButtonStrategy } from './strategies/googlepay';\nimport { MasterpassButtonStrategy } from './strategies/masterpass';\nimport { PaypalButtonStrategy } from './strategies/paypal';\n\nexport default function createCheckoutButtonRegistry(\n store: CheckoutStore,\n requestSender: RequestSender,\n formPoster: FormPoster,\n locale: string,\n host?: string,\n): Registry {\n const registry = new Registry();\n const scriptLoader = getScriptLoader();\n const checkoutRequestSender = new CheckoutRequestSender(requestSender);\n const checkoutActionCreator = new CheckoutActionCreator(\n checkoutRequestSender,\n new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n );\n const paymentMethodActionCreator = new PaymentMethodActionCreator(\n new PaymentMethodRequestSender(requestSender),\n );\n\n const braintreeSdkCreator = new BraintreeSDKCreator(new BraintreeScriptLoader(scriptLoader));\n const cartRequestSender = new CartRequestSender(requestSender);\n const amazonPayV2RequestSender = new AmazonPayV2RequestSender(requestSender);\n\n registry.register(\n CheckoutButtonMethodType.AMAZON_PAY_V2,\n () =>\n new AmazonPayV2ButtonStrategy(\n store,\n checkoutActionCreator,\n createAmazonPayV2PaymentProcessor(),\n cartRequestSender,\n amazonPayV2RequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.BRAINTREE_PAYPAL,\n () =>\n new BraintreePaypalButtonStrategy(\n store,\n checkoutActionCreator,\n cartRequestSender,\n braintreeSdkCreator,\n formPoster,\n window,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.BRAINTREE_PAYPAL_CREDIT,\n () =>\n new BraintreePaypalCreditButtonStrategy(\n store,\n checkoutActionCreator,\n cartRequestSender,\n braintreeSdkCreator,\n formPoster,\n window,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.BRAINTREE_VENMO,\n () =>\n new BraintreeVenmoButtonStrategy(\n store,\n paymentMethodActionCreator,\n cartRequestSender,\n braintreeSdkCreator,\n formPoster,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_ADYENV2,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayAdyenV2Initializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_ADYENV3,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayAdyenV3Initializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_AUTHORIZENET,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayAuthorizeNetInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_BNZ,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayBNZInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_BRAINTREE,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(\n store,\n new GooglePayBraintreeInitializer(braintreeSdkCreator),\n ),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_CHECKOUTCOM,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(\n store,\n new GooglePayCheckoutcomInitializer(requestSender),\n ),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_CYBERSOURCEV2,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayCybersourceV2Initializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_ORBITAL,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayOrbitalInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_STRIPE,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayStripeInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_STRIPEUPE,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayStripeUPEInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.MASTERPASS,\n () =>\n new MasterpassButtonStrategy(\n store,\n checkoutActionCreator,\n new MasterpassScriptLoader(scriptLoader),\n locale,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.PAYPALEXPRESS,\n () =>\n new PaypalButtonStrategy(\n store,\n checkoutActionCreator,\n new PaypalScriptLoader(scriptLoader),\n formPoster,\n host,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_WORLDPAYACCESS,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayWorldpayAccessInitializer()),\n cartRequestSender,\n ),\n );\n\n return registry;\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport AmazonPayV2PaymentProcessor from './amazon-pay-v2-payment-processor';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\n\nexport default function createAmazonPayV2PaymentProcessor(): AmazonPayV2PaymentProcessor {\n return new AmazonPayV2PaymentProcessor(new AmazonPayV2ScriptLoader(getScriptLoader()));\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","require","message","object","name","type","setPrototypeOf","__proto__","Error","captureStackTrace","stack","DEFAULT_RESPONSE","body","headers","status","response","errors","joinErrors","reduce","result","error","join","mapFromPaymentErrorResponse","Array","isArray","_factoryMethods","this","register","detail","title","length","map","code","mapFromInternalErrorResponse","mapFromStorefrontErrorResponse","factoryMethod","createError","_getType","default","_isStorefrontErrorResponseBody","_isInternalErrorResponseBody","internalType","last","split","errorResponse","storefrontErrorResponse","internalErrorResponse","CheckoutActionType","ErrorActionType","SubscriptionsActionType","BillingAddressActionType","omitDeep","predicate","isPlainObject","transform","omitBy","clearErrorReducer","state","action","ClearError","isClearErrorAction","payload","isEqual","objectA","objectB","options","index","isArrayEqual","Date","getTime","isDateEqual","RegExp","toString","isRegExpEqual","filter","keyFilter","keysA","keys","keysB","isObjectEqual","replace","currentValue","newValue","undefined","objectSet","DEFAULT_STATE","statuses","billingAddressReducer","combineReducers","data","dataReducer","composeReducers","errorsReducer","statusesReducer","reducer","UpdateBillingAddressSucceeded","ContinueAsGuestSucceeded","LoadCheckoutSucceeded","billingAddress","LoadCheckoutRequested","LoadCheckoutFailed","UpdateBillingAddressRequested","UpdateBillingAddressFailed","UpdateSubscriptionsRequested","UpdateSubscriptionsSucceeded","ContinueAsGuestRequested","UpdateSubscriptionsFailed","ContinueAsGuestFailed","arrayReplace","currentArray","newArray","matchObject","b","id","sameAsCurrentCount","sameAsNewCount","countSameAsReplaced","replacedValue","newItem","currentItem","objectMerge","currentObject","newObject","CouponActionType","GiftCertificateActionType","ConsignmentActionType","CheckoutButtonActionType","cartReducer","CreateConsignmentsSucceeded","DeleteConsignmentSucceeded","UpdateConsignmentSucceeded","UpdateShippingOptionSucceeded","LoadShippingOptionsSucceeded","ApplyCouponSucceeded","RemoveCouponSucceeded","ApplyGiftCertificateSucceeded","RemoveGiftCertificateSucceeded","cart","ConfigActionType","DEFAULT_DATA_STATE","initializedContainers","DEFAULT_ERROR_STATE","DEFAULT_STATUS_STATE","checkoutButtonReducer","meta","methodId","InitializeButtonSucceeded","containerId","DeinitializeButtonSucceeded","InitializeButtonRequested","InitializeButtonFailed","DeinitializeButtonRequested","DeinitializeButtonFailed","OrderActionType","configReducer","LoadConfigSucceeded","LoadConfigFailed","LoadConfigRequested","couponReducer","LoadOrderSucceeded","coupons","ApplyCouponRequested","ApplyCouponFailed","RemoveCouponRequested","RemoveCouponFailed","CustomerActionType","giftCertificateReducer","giftCertificates","ApplyGiftCertificateRequested","ApplyGiftCertificateFailed","RemoveGiftCertificateRequested","RemoveGiftCertificateFailed","CustomerStrategyActionType","customerReducer","customer","CreateCustomerAddressSucceeded","StripeLinkAuthenticated","CreateCustomerRequested","CreateCustomerSucceeded","CreateCustomerFailed","CreateCustomerAddressRequested","CreateCustomerAddressFailed","ExtensionActionType","customerStrategyReducer","InitializeSucceeded","isInitialized","DeinitializeSucceeded","InitializeRequested","initializeErrors","initializeMethodId","InitializeFailed","DeinitializeRequested","deinitializeError","deinitializeMethodId","DeinitializeFailed","SignInRequested","SignInSucceeded","signInError","signInMethodId","SignInFailed","SignOutRequested","SignOutSucceeded","signOutError","signOutMethodId","SignOutFailed","ExecutePaymentMethodCheckoutRequested","ExecutePaymentMethodCheckoutSucceeded","executePaymentMethodCheckoutError","executePaymentMethodCheckoutMethodId","ExecutePaymentMethodCheckoutFailed","WidgetInteractionStarted","WidgetInteractionFinished","widgetInteractionError","widgetInteractionMethodId","WidgetInteractionFailed","isInitializing","isDeinitializing","isSigningIn","isSigningOut","isExecutingPaymentMethodCheckout","isWidgetInteracting","FormFieldsActionType","extensionReducer","LoadExtensionsSucceeded","LoadExtensionsRequested","LoadExtensionsFailed","CountryActionType","formFieldsReducer","LoadFormFieldsSucceeded","LoadFormFieldsFailed","LoadFormFieldsRequested","countryReducer","LoadCountriesSucceeded","LoadCountriesRequested","LoadCountriesFailed","orderReducer","metaReducer","LoadOrderPaymentsSucceeded","omit","FinalizeOrderSucceeded","SubmitOrderSucceeded","callbackUrl","order","orderToken","token","payment","LoadOrderRequested","LoadOrderPaymentsRequested","LoadOrderFailed","LoadOrderPaymentsFailed","PaymentActionType","PaymentMethodActionType","orderBillingAddressReducer","paymentReducer","SubmitPaymentSucceeded","PaymentStrategyActionType","paymentMethodReducer","LoadPaymentMethodSucceeded","array","item","defaultPredicate","pick","findIndex","pickBy","push","existingItem","mergeOrPush","gateway","LoadPaymentMethodsSucceeded","methodA","methodB","LoadPaymentMethodsRequested","LoadPaymentMethodsFailed","LoadPaymentMethodRequested","loadMethodId","loadMethodError","LoadPaymentMethodFailed","isLoadingMethod","InstrumentActionType","paymentStrategyReducer","gatewayId","initializeError","ExecuteRequested","ExecuteSucceeded","executeError","executeMethodId","ExecuteFailed","FinalizeRequested","FinalizeSucceeded","finalizeError","finalizeMethodId","FinalizeFailed","isExecuting","isFinalizing","RemoteCheckoutActionType","instrumentReducer","LoadInstrumentsSucceeded","vaultedInstruments","DeleteInstrumentSucceeded","LoadInstrumentsRequested","DeleteInstrumentRequested","deleteError","failedInstrument","LoadInstrumentsFailed","DeleteInstrumentFailed","instrumentId","isDeleting","deletingInstrument","remoteCheckoutReducer","InitializeRemoteBillingSucceeded","billing","InitializeRemoteShippingSucceeded","shipping","LoadRemoteSettingsSucceeded","UpdateRemoteCheckout","PickupOptionActionType","updateShippingOptionError","updateError","isUpdating","isUpdatingShippingOption","consignmentReducer","consignments","SignOutCustomerSucceeded","LoadShippingOptionsRequested","LoadShippingOptionsFailed","CreateConsignmentsRequested","CreateConsignmentsFailed","UpdateConsignmentRequested","UpdateConsignmentFailed","DeleteConsignmentRequested","DeleteConsignmentFailed","UpdateShippingOptionRequested","UpdateShippingOptionFailed","objectFlatten","parent","flattened","forEach","keyString","assign","objectWithSortedKeys","sort","previous","current","ShippingCountryActionType","pickupOptionReducer","LoadPickupOptionsSucceeded","sortedflattenedMeta","consignmentId","searchArea","btoa","JSON","stringify","LoadPickupOptionsRequested","LoadPickupOptionsFailed","ShippingStrategyActionType","shippingCountryReducer","LoadShippingCountriesSucceeded","LoadShippingCountriesRequested","LoadShippingCountriesFailed","SignInEmailActionType","shippingStrategyReducer","UpdateAddressRequested","UpdateAddressSucceeded","updateAddressError","updateAddressMethodId","UpdateAddressFailed","SelectOptionRequested","SelectOptionSucceeded","selectOptionError","selectOptionMethodId","SelectOptionFailed","isUpdatingAddress","isSelectingOption","StoreCreditActionType","signInEmailReducer","SendSignInEmailSucceeded","SendSignInEmailRequested","SendSignInEmailFailed","storeCreditReducer","ApplyStoreCreditRequested","ApplyStoreCreditSucceeded","ApplyStoreCreditFailed","SpamProtectionActionType","subscriptionsReducer","checkoutReducer","UpdateCheckoutSucceeded","VerifyCheckoutSucceeded","orderId","UpdateCheckoutRequested","UpdateCheckoutFailed","MissingDataErrorType","subtype","MissingBillingAddress","MissingCart","MissingConsignments","MissingCheckout","MissingCustomer","MissingCheckoutConfig","MissingOrderConfig","MissingOrder","MissingOrderId","MissingPayment","MissingPaymentToken","MissingPaymentMethod","MissingShippingAddress","getErrorMessage","creator","combiner","args","pop","combinerArgs","memoize","guard","errorFactory","createFreezeProxy","target","trap","proxy","create","iteratee","getPrototypeOf","traversePrototypeOf","getOwnPropertyNames","charAt","deepFreeze","createProxy","ACKNOWLEDGE","FINALIZE","provider","method","barclays","braintree","braintreepaypal","braintreeach","authorizenet","elavon","checkoutcom","sagepay","stripe","cybersource","cybersourcev2","bnz","converge","bluesnapv2","orbital","paymetric","bolt","digitalriver","moneris","cba_mpgs","worldpayaccess","normalize","address","firstName","lastName","company","address1","address2","city","stateOrProvince","countryCode","postalCode","phone","customFields","identity","createInternalCheckoutSelectorsFactory","getBillingAddress","getBillingAddressOrThrow","getUpdateError","getContinueAsGuestError","getLoadError","isContinuingAsGuest","isLoading","getState","getInitializeError","getDeinitializeError","getCoupons","getRemoveError","getApplyError","isApplying","isRemoving","getCustomer","getCustomerOrThrow","getCreateAccountError","isCreatingCustomerAccount","getCreateAddressError","isCreatingCustomerAddress","getCheckout","getShippingAddress","getShippingAddressOrThrow","getShippingAddresses","getShippingAddressesOrThrow","getOrderBillingAddress","getInternalPayment","getGatewayPayment","getHostedPayment","getPaymentId","getPaymentIdOrThrow","getPaymentStatus","getPaymentStatusOrThrow","getPaymentToken","getPaymentTokenOrThrow","getPaymentRedirectUrl","getPaymentRedirectUrlOrThrow","isPaymentDataRequired","isPaymentDataSubmitted","getEmail","getSendError","isSending","createBillingAddressSelector","continueAsGuestError","loadError","memoizeOne","createCartSelector","getCart","getCartOrThrow","createCartSelectorFactory","createCheckoutButtonSelector","some","find","values","createConfigSelector","getConfig","getFlashMessages","filterType","flashMessages","context","getStoreConfig","_","formState","formFields","storeConfig","getStoreConfigOrThrow","getContextConfig","getExternalSource","externalSource","getHost","host","getLocale","locale","getVariantIdentificationToken","variantIdentificationToken","createConfigSelectorFactory","createCountrySelector","getCountries","countries","createCountrySelectorFactory","createCouponSelector","removeCouponError","applyCouponError","isApplyingCoupon","isRemovingCoupon","createCustomerSelector","isCreating","createAddressError","isCreatingAddress","createCustomerStrategySelector","getSignInError","getSignOutError","getExecutePaymentMethodCheckoutError","getWidgetInteractionError","createCustomerStrategySelectorFactory","createGiftCertificateSelector","getGiftCertificates","removeGiftCertificateError","applyGiftCertificateError","isApplyingGiftCertificate","isRemovingGiftCertificate","createGiftCertificateSelectorFactory","createInstrumentSelector","getInstrumentsByPaymentMethod","instruments","paymentMethod","paymentMethodKey","currentMethod","getCardInstrument","cards","instrument","bigpayToken","card","isMatch","getCardInstrumentOrThrow","MissingPaymentInstrument","getInstruments","flatMap","supportedProvider","getInstrumentsMeta","getDeleteError","createInstrumentSelectorFactory","createFormSelector","getShippingAddressFields","selectedCountry","shippingAddress","field","processField","getBillingAddressFields","getCustomerAccountFields","customerAccount","country","items","label","fieldType","itemtype","processCountry","subdivisions","requiresState","required","processProvince","hasPostalCodes","Boolean","processsPostCode","createFormSelectorFactory","createPaymentMethodSelector","getPaymentMethods","paymentMethods","getPaymentMethodsMeta","getPaymentMethod","getPaymentMethodOrThrow","getLoadMethodError","createPaymentMethodSelectorFactory","createPaymentStrategySelector","getExecuteError","getFinalizeError","getWidgetInteractingError","query","createPaymentStrategySelectorFactory","createPickupOptionSelector","getPickupOptions","pickupOptions","sortedFlattenedParams","createPickupOptionSelectorFactory","createRemoteCheckoutSelector","createShippingAddressSelector","shippingConsignment","consignment","selectedPickupOption","shippingConsignments","createShippingCountrySelector","getShippingCountries","createShippingCountrySelectorFactory","createShippingStrategySelector","getUpdateAddressError","getSelectOptionError","createShippingStrategySelectorFactory","createConsignmentSelector","getConsignments","getConsignmentsOrThrow","getConsignmentById","getConsignmentByAddress","addressA","addressB","getShippingOption","selectedShippingOption","getCreateError","getLoadShippingOptionsError","loadShippingOptionsError","getUnassignedItems","assignedLineItemIds","itemIds","concat","lineItemIds","lineItems","physicalItems","indexOf","getItemAssignmentError","getUpdateShippingOptionError","isLoadingShippingOptions","isAssigningItems","createConsignmentSelectorFactory","createCheckoutSelector","getCheckoutOrThrow","getOutstandingBalance","useStoreCredit","checkout","grandTotal","storeCredit","Math","max","outstandingBalance","isExecutingSpamCheck","createCheckoutSelectorFactory","createOrderSelector","getOrder","getOrderOrThrow","getOrderMeta","payments","currentPayment","paymentId","createOrderSelectorFactory","createOrderBillingAddressSelector","createPaymentSelector","providerId","internalPayment","MissingPaymentId","step","MissingPaymentStatus","redirectUrl","MissingPaymentRedirectUrl","nonce","createStoreCreditSelector","applyError","createStoreCreditSelectorFactory","createSubscriptionsSelector","createSubscriptionsSelectorFactory","createSignInEmailSelector","signInEmail","sendError","createExtensionSelector","getExtensions","getExtensionByRegion","region","e","createExtensionSelectorFactory","checkoutButton","customerStrategies","extensions","form","orderBillingAddress","paymentStrategies","remoteCheckout","shippingCountries","shippingStrategies","subscriptions","selectors","config","shouldWarnMutation","createCheckoutStore","initialState","factory","requestErrorFactory","actionTransformer","action$","from","pipe","catchError","every","createInternalCheckoutSelectors","createDataStore","stateTransformer","cachableActionDecorator","descriptor","memoizedMethods","WeakMap","decorateMethod","param","lastArg","useCache","fn","instanceMethods","set","Observable","shareReplay","store","_requestSender","loadPaymentMethods","observer","next","createAction","params","cartId","then","deviceSessionId","sessionHash","methods","filteredMethods","_filterApplePay","complete","catch","createErrorAction","loadPaymentMethod","window","isApplePayWindow","ContentType","INTERNAL_USE_ONLY","SDK_VERSION_HEADERS","timeout","Accept","url","throwErrorAction","of","throwError","_subscriptionActionCreator","continueAsGuest","credentials","isGuest","billingAddressRequestBody","existingBillingAddressRequestBody","merge","defer","_createOrUpdateBillingAddress","_updateCustomerConsent","updateAddress","email","acceptsAbandonedCartEmails","acceptsMarketingNewsletter","empty","updateSubscriptions","checkoutId","createAddress","DEFAULT_PARAMS","include","post","put","createBuyNowCart","_checkoutRequestSender","_configActionCreator","_formFieldsActionCreator","loadCheckout","loadConfig","loadFormFields","loadDefaultCheckout","updateCheckout","loadCurrentCheckout","joinIncludes","includes","uniq","joinOrMergeIncludes","baseIncludes","includeDictionaryOrList","includesDictionary","deletions","on","additions","difference","mergeIncludes","cartA","cartB","_normalize","cartAmount","currency","digitalItems","slice","itemA","itemB","productId","variantId","localeCompare","extendedSalePrice","quantity","amount","recipient","giftWrapping","updated","validate","comparator","_compareCoupons","_compareGiftCertificates","_getComparableCheckout","couponsA","couponsB","giftCertificatesA","giftCertificatesB","_configRequestSender","isSpamProtectionExecuteSucceededAction","succeededAction","_customerRequestSender","_checkoutActionCreator","_spamProtectionActionCreator","createCustomer","isStorefrontSpamProtectionEnabled","checkoutSettings","createAccount","switchMap","execute","customerAddress","signInCustomer","SignInCustomerRequested","SignInCustomerSucceeded","SignInCustomerFailed","signOutCustomer","SignOutCustomerRequested","SignOutCustomerFailed","delete","_formFieldsRequestSender","loadFields","promise","cancellable","Promise","reject","cancel","race","_mutationObserver","ensurePresence","targets","mutationsList","mutation","removedNodes","node","contains","observe","document","childList","subtree","output","disconnect","_window","callback","MutationObserver","parseUrl","test","anchor","createElement","href","port","hostname","hash","origin","protocol","pathname","search","isIframeEvent","targetOrigin","_targetWindow","_targetOrigin","event","targetWindow","fromEvent","successType","errorType","take","toPromise","postMessage","setTarget","bindMethodDecorator","decoratedTarget","getOwnPropertyDescriptor","bindClassDecorator","boundMethod","bind","sourceOrigin","_sourceOrigins","_isListening","_listeners","listen","addEventListener","_handleMessage","stopListen","removeEventListener","addListener","listener","listeners","removeListener","splice","trigger","_googleRecaptcha","handle","errorOrId","handleWithRecaptchaSitekey","handleWithPaymentHumanVerificationRequestError","_isPaymentHumanVerificationRequest","_initialize","additional_action_required","_performRecaptcha","human_verification_token","recaptchaSitekey","cardingProtectionElementId","cardingProtectionElement","getElementById","parentNode","removeChild","setAttribute","appendChild","load","NotInitializedErrorType","CustomerNotInitialized","PaymentNotInitialized","ShippingNotInitialized","SpamProtectionNotInitialized","googleRecaptchaScriptLoader","mutationObserverFactory","_memoized","recaptcha","sitekey","container","event$","Subject","_widgetId","render","size","getResponse","reset","_event$","_recaptcha","element","querySelector","retryWhen","delay","TIMEOUT","_watchRecaptchaChallengeWindow","iframeContainer","parentElement","style","visibility","attributes","attributeFilter","_scriptLoader","_loadPromise","_loadScript","callbackName","resolve","grecaptcha","loadScript","createSpamProtection","scriptLoader","MutationObserverFactory","fieldErrors","HostedFieldEventType","HostedInputEventType","_type","_containerId","_placeholder","_accessibilityLabel","_styles","_eventPoster","_eventListener","_detachmentObserver","_cardInstrument","_iframe","src","border","height","overflow","width","getType","attach","contentWindow","AttachRequested","accessibilityLabel","cardInstrument","fontUrls","_getFontUrls","placeholder","styles","location","AttachSucceeded","AttachFailed","detach","submitForm","fields","SubmitRequested","SubmitSucceeded","SubmitFailed","_isSubmitErrorEvent","validateForm","ValidateRequested","Validated","isValid","links","querySelectorAll","link","fontFamily","family","_fields","_payloadTransformer","_eventCallbacks","_paymentHumanVerificationHandler","_handleEnter","noop","onBlur","onCardTypeChange","onFocus","onValidate","Blurred","CardTypeChanged","Focused","Entered","_cardType","cardType","BinChanged","_bin","bin","getBin","getCardType","_getFirstField","otherFields","without","all","otherField","submit","additionalActionData","additionalAction","isVaultedInstrument","_store","instrumentMeta","orderMeta","paymentData","paymentMethodMeta","authToken","vaultAccessToken","fieldOptions","_getCardInstrument","createScriptLoader","_orderRequestSender","_checkoutValidator","loadOrder","loadOrderPayments","loadCurrentOrder","_getCurrentOrderId","submitOrder","SubmitOrderRequested","shouldExecuteSpamCheck","_mapToOrderRequestBody","customerMessage","checkoutVariant","SubmitOrderFailed","finalizeOrder","FinalizeOrderRequested","FinalizeOrderFailed","isNil","_paymentRequestSender","_orderActionCreator","_paymentRequestTransformer","initializeOffsitePayment","shouldSaveInstrument","shouldSetAsDefaultInstrument","formattedPayload","bigpay_token","vault_payment_instrument","set_as_default_stored_instrument","InitializeOffsitePaymentRequested","InitializeOffsitePaymentSucceeded","InitializeOffsitePaymentFailed","submitPayment","SubmitPaymentRequested","SubmitPaymentFailed","_client","_transformResponse","statusText","mapToInternalAddress","addressId","isBillingAddressLike","addressLine1","addressLine2","province","provinceCode","stateOrProvinceCode","postCode","_decimalPlaces","toInteger","round","pow","CheckoutButtonMethodType","couponTypes","mapToInternalCoupon","coupon","discount","displayName","discountType","couponType","mapToInternalGiftCertificate","giftCertificate","discountedAmount","used","remainingBalance","remaining","balance","purchaseDate","mapToInternalLineItems","itemMap","decimalPlaces","idKey","amountTransformer","imageUrl","amountAfterDiscount","integerAmount","integerAmountAfterDiscount","integerUnitPrice","integerUnitPriceAfterDiscount","integerDiscount","sender","mapGiftCertificateToInternalLineItem","extendedListPrice","discountAmount","listPrice","salePrice","downloadsPageUrl","downloadPageUrl","brand","sku","categoryNames","option","addedByPromotion","mapToInternalLineItem","mapToInternalLineItemType","mapToInternalCart","promotions","notifications","sum","discountNotifications","promotion","banners","banner","placeholders","messageHtml","text","totalDiscountedAmount","certificate","appliedGiftCertificates","keyBy","shippingCostTotal","amountBeforeDiscount","shippingCostBeforeDiscount","integerAmountBeforeDiscount","lineItem","isShippingRequired","subtotal","taxSubtotal","taxTotal","taxes","handling","handlingCostTotal","mapToInternalCustomer","addresses","customerId","fullName","customerGroupName","customerGroup","format","month","year","trimmedMonth","trimmedYear","toObject","number","maxLength","creditCardType","info","lengths","unformattedValue","unformat","gaps","gapIndex","mapToInternalOrder","customerCanBeCreated","mapToInternalOrderPayment","baseAmount","socialData","mapToInternalSocialDataList","hasDigitalItems","isDownloadable","isComplete","mapToStoreCredit","orderAmount","orderAmountAsInteger","isDefaultOrderPayment","helpText","instructions","returnUrl","socialDataObject","socialMedia","description","image","shareText","sharingLink","channelName","channel","channelCode","mapToInternalShippingOption","isSelected","price","cost","selected","isRecommended","transitTime","_cardExpiryFormatter","_cardNumberFormatter","checkoutState","formattedInstrument","_mapShippingAddress","shippingOption","contextConfig","paymentMeta","internalCustomer","_transformPaymentMethod","quoteMeta","request","geoCountryCode","source","storeProfile","transformWithHostedFormData","_transformHostedInputValues","initializationData","ccCvv","cardCodeVerification","ccNumber","cardNumberVerification","hostedFormNonce","cardCode","ccExpiry","cardExpiry","ccName","cardName","cardNumber","isBopisEnabled","bopis","enabled","requiredAddress","isPickup","CheckoutIncludes","_consignmentRequestSender","unassignItemsByAddress","_consignmentHasAddress","existingConsignment","_removeLineItems","updateConsignment","deleteConsignment","assignItemsByAddress","_createOrUpdateConsignment","_addLineItems","selectShippingOption","consignmentUpdateBody","shippingOptionId","consignmentMeta","loadShippingOptions","AvailableShippingOptions","_getUpdateAddressRequestBody","createConsignments","updateShippingOption","_isUpdateConsignmentRequest","customItems","itemId","_hydrateLineItems","sharedItem","DEFAULT_INCLUDES","initialize","spamProtectionElementId","spamProtectionElement","googleRecaptchaSitekey","verifyCheckoutSpamProtection","VerifyCheckoutRequested","VerifyCheckoutFailed","_storeCreditRequestSender","applyStoreCredit","removeStoreCredit","_subscriptionsRequestSender","cloneDeep","input","cloneDeepSafe","cache","cloneResult","createPaymentIntegrationSelectors","isPaymentMethodInitialized","_storeProjectionFactory","_hostedFormFactory","_billingAddressActionCreator","_consignmentActionCreator","_paymentMethodActionCreator","_paymentActionCreator","_customerActionCreator","_cartRequestSender","_storeCreditActionCreator","_storeProjection","createHostedForm","subscribe","subscriber","filters","initializeOffsitePaymentConfig","dispatch","updateBillingAddress","updateShippingAddress","buyNowCartRequestBody","ProjectionActionType","_transformSelectors","projection","Synchronize","initial","createDataStoreProjection","isTerminalCacheKeyMap","_lastId","_map","maps","_usedMaps","_options","maxSize","onExpire","getKey","_resolveMap","parentMap","cacheKey","usedCount","_generateMap","_removeLeastUsedMap","getUsedCount","isMatched","mapIndex","unshift","terminalMap","recentlyUsedMap","_removeMap","isRootCacheKeyMap","selectorDecorator","resolver","memoizedMethod","cachedValue","isPrivate","selectorMethodDecorator","_checkoutButton","getInitializeButtonError","getDeinitializeButtonError","CheckoutButtonErrorSelector","isInitializingButton","isDeinitializingButton","CheckoutButtonStatusSelector","createCheckoutButtonSelectors","_buttonStrategyActionCreator","_state","initializeButton","containerIds","selector","idPrefix","containers","uniqueId","setUniqueElementId","queueId","deinitializeButton","deinitialize","CheckoutButtonInitializer","_registry","_registryV2","paymentMethodRequestParams","currencyCode","paymentMethodRequestOptions","_getStrategy","strategy","_factories","_instances","_defaultToken","defaultToken","_useFallback","useFallback","_tokenResolver","tokenResolver","cacheToken","_getInstance","_hasFactory","_hasInstance","resolvedToken","getShippableItemsCount","total","AmazonPayV2Regions","AmazonPayV2CheckoutLanguage","AmazonPayV2Placement","AmazonPayV2LedgerCurrency","AmazonPayV2PayOptions","AmazonPayV2ButtonColor","AmazonPayV2ButtonDesign","_amazonPayV2ScriptLoader","_amazonPayV2SDK","_buttonParentContainer","_createAmazonPayButtonParentContainer","_amazonPayV2Button","remove","bindButton","buttonId","sessionId","changeAction","_getAmazonPayV2SDK","Pay","bindChangeAction","amazonCheckoutSessionId","createButton","renderButton","prepareCheckout","createCheckoutSessionConfig","requestConfig","_prepareRequestConfig","_getAmazonPayV2Button","onClick","initCheckout","prepareCheckoutWithCreationRequestConfig","createCheckoutConfig","estimatedOrderAmount","productType","signout","renderAmazonPayButton","buttonColor","decoupleCheckoutInitiation","placement","parentContainerId","_getButtonParentContainer","design","C0001","amazonPayV2ButtonOptions","_getAmazonPayV2ButtonOptions","setCartRequestBody","_buyNowCartRequestBody","isPh4Enabled","features","storeCountryCode","isPh4UsOnly","publicKeyId","signedPayload","_isEnvironmentSpecific","uid","random","substr","parentContainer","Gold","merchantId","testMode","checkoutLanguage","checkoutSessionMethod","extractAmazonCheckoutSessionId","ledgerCurrency","buttonBaseConfig","sandbox","PayOnly","PayAndShip","shopPath","buttonOptions","tmpConfig","createCheckoutSession","_getOrThrow","amazonPayV2Region","amazon","PAYPAL_COMPONENTS","_braintreeScriptLoader","_dataCollectors","clientToken","_clientToken","getClient","loadClient","client","authorization","getPaypal","_paypal","loadPaypal","getPaypalCheckout","onSuccess","onError","loadPaypalCheckout","paypalCheckout","paypalCheckoutConfig","paypalCheckoutCallback","braintreePaypalCheckout","paypalSdkLoadConfig","isCreditEnabled","components","intent","paypal","loadPayPalSDK","_paypalCheckout","getVenmoCheckout","_venmoCheckout","loadVenmoCheckout","venmoCheckout","venmoCheckoutConfig","allowDesktop","paymentMethodUsage","venmoCheckoutCallback","braintreeVenmoCheckout","isBrowserSupported","get3DS","_3ds","load3DS","version","getDataCollector","cached","loadDataCollector","kount","deviceData","teardown","getVisaCheckout","_visaCheckout","loadVisaCheckout","getGooglePaymentComponent","_googlePay","loadGooglePayment","createHostedFields","loadHostedFields","_teardown","mod","threeDSecure","dataCollector","visaCheckout","venmo","googlePayment","hostedFields","CallbackTriggerType","TotalPriceStatusType","CallbackIntentsType","ButtonType","ButtonColor","BillingAddressFormat","getFirstAndLastName","nameParts","_googlePayScriptLoader","_googlePayInitializer","_isBuyNowFlow","googlePayClientOptions","_methodId","_configureWallet","buttonType","Short","Default","_googlePayClient","updatePaymentDataRequest","paymentDataRequest","existingPaymentDataRequest","_getPaymentDataRequest","_paymentDataRequest","merchantInfo","transactionInfo","shippingAddressParameters","displayWallet","loadPaymentData","handleSuccess","parseResponse","tokenizePayload","_postForm","_updateBillingAddress","_mapGooglePayAddressToShippingAddress","updateBuyNowFlowFlag","isBuyNowFlow","_getMethodId","_getCheckout","hasShippingAddress","googlePay","_getGooglePayClient","isReadyToPay","allowedPaymentMethods","parameters","allowedAuthMethods","allowedCardNetworks","apiVersion","apiVersionMinor","_getCardInformation","cardInformation","lastFour","google","environment","api","PaymentsClient","_mapGooglePayAddressToBillingAddress","customerEmail","paymentMethodData","locality","companyName","address3","administrativeArea","phoneNumber","postPaymentData","details","buyNowCartId","payment_type","tokenFormat","card_information","cart_id","remoteBillingAddress","googlePayAddressMapped","createGooglePayPaymentProcessor","initializer","requestSender","createRequestSender","getScriptLoader","_getGooglePayPaymentDataRequest","totalPrice","toFixed","gatewayMerchantId","merchantName","authJwt","billingAddressRequired","billingAddressParameters","Full","phoneNumberRequired","tokenizationSpecification","totalPriceStatus","FINAL","emailRequired","shippingAddressRequired","baseRequest","_getGooglePaymentDataRequest","supportedCards","paymentGatewaySpecification","_getPaymentGatewaySpecification","cardPaymentMethod","_getCardPaymentMethod","_braintreeSDKCreator","googleBraintreePaymentInstance","_googlePaymentInstance","_createGooglePayPayload","parse","tokenizationData","androidPayCards","lastTwo","binData","platformToken","googlePayBraintreePaymentDataRequest","googleMerchantName","googleMerchantId","cardRequirements","billingAddressFormat","_mapGooglePayBraintreeDataRequestToGooglePayDataRequestV2","createPaymentDataRequest","googlePayBraintreeDataRequestV1","paymentMethodTokenizationParameters","_publishableKey","_testMode","_errorMessage","checkoutcomkey","_mapGooglePayCheckoutcomDataRequestToGooglePayDataRequestV2","err","signature","protocolVersion","signedMessage","_convertToken","finalToken","cardNetwork","cardDetails","token_format","_requestCheckoutcomTokenize","token_data","checkoutcomToken","checkoutcomKey","Authorization","last4","stripeVersion","stripePublishableKey","stripeConnectedAccount","useMasterpassSrc","language","sourceUrl","masterpass","scriptSrc","async","isWithBuyNowFeatures","_amazonPayV2PaymentProcessor","_amazonPayV2ConfigRequestSender","amazonpay","initializeAmazonButtonOptions","buyNowInitializeOptions","getBuyNowCartRequestBody","Cart","_getCheckoutCreationRequestConfig","_createBuyNowCart","_createCheckoutConfig","public_key","rest","payloadJSON","buyNowCart","String","mapToBraintreeShippingAddressOverride","recipientName","line1","line2","getValidButtonStyle","color","fundingicons","layout","shape","tagline","validStyles","getValidHeight","mapToLegacyBillingAddress","first_name","last_name","phone_number","address_line_1","address_line_2","country_code","postal_code","mapToLegacyShippingAddress","_formPoster","messagingContainerId","paypalCheckoutOptions","paypalCheckoutSuccessCallback","_renderPayPalComponents","paypalCheckoutErrorCallback","_handleError","_renderPayPalMessages","_renderPayPalButton","shouldProcessPayment","onAuthorizeError","fundingSource","FUNDING","PAYPAL","validButtonStyle","paypalButtonRender","Buttons","env","commit","createOrder","_setupPayment","onApprove","authorizeData","_tokenizePayment","isEligible","_removeElement","isMessageContainerAvailable","Messages","onPaymentError","_buyNowCart","shippingAddressOverride","createPayment","flow","enableShippingAddress","shippingAddressEditable","offerCredit","cartRequestBody","tokenizePayment","postForm","device_data","billing_address","shipping_address","buttonContainerId","onErrorCallback","elementId","PaypalButtonStyleLayoutOption","PaypalButtonStyleSizeOption","PaypalButtonStyleColorOption","PaypalButtonStyleLabelOption","PaypalButtonStyleShapeOption","braintreepaypalcredit","hasRenderedSmartButton","fundingSources","PAYLATER","CREDIT","buttonStyle","venmoButtonStyle","backgroundColor","backgroundPosition","backgroundSize","backgroundImage","backgroundRepeat","borderRadius","cursor","transition","minHeight","minWidth","_onError","braintreevenmo","_handleInitializationVenmoSuccess","_handleInitializationVenmoError","_renderVenmoButton","_removeVenmoContainer","buttonContainer","venmoButton","buyBowCart","tokenize","removeAttribute","_handlePostForm","_googlePayPaymentProcessor","googlePayOptions","_getGooglePayOptions","_getGooglePayClientOptions","_walletButton","_createSignInButton","paymentDataCallbacks","onPaymentDataChanged","callbackTrigger","INITIALIZE","newTransactionInfo","googlePayButton","_handleWalletButtonClick","googlepayadyenv2","googlepayadyenv3","googlepayauthorizenet","googlepaybnz","googlepaybraintree","googlepaycheckoutcom","googlepaycybersourcev2","googlepayorbital","googlepaystripe","googlepaystripeupe","googlepayworldpayaccess","preventDefault","ESTIMATED","callbackIntents","OFFER","_onPaymentSelectComplete","supportedLocales","es","en","pt","zu","ar","zh","ms","uk","sv","hr","pl","nl","it","de","fr","formatLocale","localeLanguage","toLowerCase","formattedLocale","countryLocales","_masterpassScriptLoader","_locale","masterpassScriptLoaderParams","isMasterpassSrcEnabled","_masterpassClient","_signInButton","button","subdomain","_createMasterpassPayload","allowedCardTypes","CheckoutButtonNotInitialized","_paypalScriptLoader","_host","paypalOptions","_paymentMethod","clientId","fundingCreditOption","allowedSources","allowCredit","disallowedSources","Button","funding","allowed","disallowed","RECT","RESPONSIVE","actions","onAuthorize","res","paymentID","payerID","payerId","payerInfo","payer","payer_info","getEnvironment","process","NODE_ENV","_console","log","_logToConsole","messages","warn","debug","isEnabled","logger","console","_resolveToken","resolveId","_encodeToken","_decodeToken","atob","registeredTokens","results","registeredToken","resolverId","matches","entries","matchedResults","matched","toResolvableModule","resolveIds","ApplePaySession","DefaultLabels","_paymentIntegrationService","_sessionFactory","_onAuthorizeCallback","_subTotalLabel","Subtotal","_shippingLabel","Shipping","applepay","buttonClassName","onPaymentAuthorize","requiresShipping","_requiresShipping","_buyNowInitializeOptions","_applePayButton","_createButton","classList","add","merchantCapabilities","supportedNetworks","storeName","_getRequestWithEmptyTotal","requiredShippingContactFields","applePaySession","_handleApplePayEvents","begin","_getBaseRequest","requiredBillingContactFields","tax","onvalidatemerchant","_onValidateMerchant","merchantSession","completeMerchantValidation","onpaymentmethodselected","_handlePaymentMethodSelected","onshippingcontactselected","_handleShippingContactSelected","onshippingmethodselected","_handleShippingMethodSelected","oncancel","onpaymentauthorized","_onPaymentAuthorized","completePaymentMethodSelection","newTotal","newLineItems","_transformContactToAddress","shippingContact","abort","selectionShippingOptionId","availableOptions","availableShippingOptions","selectedOption","unselectedOptions","shippingOptions","additionalDescription","identifier","completeShippingContactSelection","STATUS_INVALID_SHIPPING_POSTAL_ADDRESS","recommendedOption","optionId","selectedOptionId","_updateShippingOption","newShippingMethods","_getUpdatedLineItems","completeShippingMethodSelection","validationURL","bigPayEndpoint","paymentsUrl","billingContact","apple_pay_token","payment_data","payment_method","transaction_id","transactionIdentifier","transformedBillingAddress","transformedShippingAddress","emailAddress","completePayment","STATUS_SUCCESS","STATUS_FAILURE","contact","givenName","familyName","addressLines","paymentIntegrationService","BoltDeveloperMode","StyleButtonSize","StyleButtonShape","boltScriptLoader","boltHostWindow","storefrontApiToken","publishableKey","developerConfig","loadBoltClient","BoltConnect","setupProductPageCheckout","addButtonContainer","boltButtonContainer","boltButtonObject","getBoltObjectData","append","innerHTML","domainUrl","getDomainURL","buttonHeight","getButtonHeight","buttonBorderRadius","getButtonBorderRadius","stringifyUrl","publishable_key","variant","border_radius","buttonSize","Small","Large","Medium","buttonShape","Pill","Rect","developerModeParams","BoltCheckout","getScriptOptions","loadBoltEmbedded","Bolt","developerMode","StagingMode","DevelopmentMode","developerDomain","CartSource","PayPalCommerceIntent","StyleButtonLabel","StyleButtonColor","NonInstantAlternativePaymentMethods","PayPalOrderStatus","formPoster","paypalCommerceRequestSender","paypalCommerceScriptLoader","loadPayPalSdk","providedCurrencyCode","initializesOnCheckoutPage","getPayPalSDK","paypalSdk","getPayPalSdkOrThrow","createBuyNowCartOrThrow","requestBody","updateOrder","getOrderStatus","order_id","BuyNow","device_info","method_id","paypal_account","getShippingOptionOrThrow","selectedShippingOptionId","recommendedShippingOption","shippingOptionToSelect","getAddress","getBillingAddressFromOrderDetails","given_name","surname","email_address","admin_area_2","admin_area_1","getShippingAddressFromOrderDetails","orderDetails","removeElement","getPayPalSdkScriptConfigOrThrow","paypalSdkScriptConfig","paypalLoadScript","buyerCountry","attributionId","isVenmoEnabled","isHostedCheckoutEnabled","isPayPalCreditAvailable","isDeveloperModeApplicable","availableAlternativePaymentMethods","enabledAlternativePaymentMethods","shouldEnableCard","enableCardFunding","disableCardFunding","enableCreditFunding","disableCreditFunding","shouldEnableAPMs","enableVenmoFunding","disableVenmoFunding","enableAPMsFunding","disableAPMsFunding","apm","disableFunding","enableFunding","createFormPoster","paypalCommerceIntegrationService","paypalcommerce","onComplete","defaultCallbacks","orderID","buyNowFlowCallbacks","handleClick","onCancel","hostedCheckoutCallbacks","onShippingAddressChange","onShippingOptionsChange","onHostedCheckoutApprove","buttonRenderOptions","paypalButton","paypalcommercecredit","renderMessages","paypalMessagesOptions","paypalcommercevenmo","VENMO","getValidVenmoButtonStyles","gold","paypalcommercealternativemethods","paypalExpressScriptLoader","loadPaypalSDK","paypalSDK","getStyle","setupPayment","getPaymentData","createCheckoutButtonInitializer","registryV2","checkoutButtonStrategyFactories","registry","createCheckoutButtonStrategy","isResolvableModule","storeProjectionFactory","checkoutActionCreator","hostedFormFactory","orderActionCreator","billingAddressActionCreator","consignmentActionCreator","paymentMethodActionCreator","paymentActionCreator","paymentClient","setHost","paymentSettings","bigpayBaseUrl","createPaymentClient","customerActionCreator","storeCreditActionCreator","spamProtection","spamProtectionRequestSender","spamProtectionActionCreator","cartRequestSender","createPaymentIntegrationService","checkoutRequestSender","braintreeSdkCreator","amazonPayV2RequestSender","createCheckoutButtonRegistry"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"checkout-button.js","mappings":"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","sources":["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 \"@bigcommerce/form-poster\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"tslib\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"@bigcommerce/data-store\"","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/standard-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/set-prototype-of.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-invalid-error.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/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/unrecoverable-error.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"lodash\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/map-from-internal-error-response.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/map-from-payment-error-response.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/timeout-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/request-error-factory.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/map-from-storefront-error-response.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs/operators\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/error-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/subscriptions-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/billing-address-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/omit-deep.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/clear-error-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/is-equal.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/replace.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/object-set.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/billing-address-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/billing-address-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/is-plain-object.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/array-replace.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/object-merge.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/coupon-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/gift-certificate-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/consignment-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/cart-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/cart-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/config/config-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/config/config-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/order-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/config/config-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/coupon-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/coupon-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/gift-certificate-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/gift-certificate-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-strategy-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-strategy-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/extension/extension-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-strategy-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/extension/extension-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/form/form-fields-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/extension/extension-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/form/form-fields-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/geography/country-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/form/form-fields-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/geography/country-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/geography/country-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/order-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/order-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order-billing-address/order-billing-address-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order-billing-address/order-billing-address-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-strategy-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/merge-or-push.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-strategy-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/instrument/instrument-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-strategy-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/instrument/instrument-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/remote-checkout/remote-checkout-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/instrument/instrument-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/remote-checkout/remote-checkout-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/remote-checkout/remote-checkout-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/consignment-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/pickup-option-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/consignment-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/object-flatten.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/object-with-sorted-keys.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/pickup-option-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-country-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/pickup-option-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-country-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-strategy-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-country-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-strategy-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/signin-email/signin-email-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-strategy-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/signin-email/signin-email-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/store-credit/store-credit-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/signin-email/signin-email-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/store-credit/store-credit-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/subscriptions-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/spam-protection-actions.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/subscriptions-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-reducer.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"@bigcommerce/memoize\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/missing-data-error.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"reselect\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/selector/create-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/selector/with-memoized-combiner.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/guard.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/create-freeze-proxy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-status-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/instrument/supported-payment-instruments.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/address/is-address-equal.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/store-credit/store-credit-state.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/create-internal-checkout-selectors.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/billing-address-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/coupon-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/remote-checkout/remote-checkout-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-address-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order-billing-address/order-billing-address-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/signin-email/signin-email-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/cart-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/config/config-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/geography/country-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-strategy-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/gift-certificate-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/instrument/instrument-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/form/form-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-strategy-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/pickup-option-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-country-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/shipping-strategy-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/consignment-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/order-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/store-credit/store-credit-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/subscriptions-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/extension/extension-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/create-checkout-store.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/create-request-error-factory.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/create-action-transformer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/create-checkout-store-reducer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/data-store/cachable-action-decorator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/data-store/is-action-options.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/data-store/cache-action.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/apple-pay/is-apple-pay-window.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/http-request/content-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/http-request/internal-api-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/http-request/sdk-version-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-method-request-sender.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"@bigcommerce/script-loader\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/throw-error-action.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/errors/unable-to-continue-as-guest-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/billing-address-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/billing-address-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/cart-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/http-request/join-includes.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/http-request/join-or-merge-includes.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/http-request/merge-includes.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-default-includes.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/errors/checkout-not-available-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/cart-comparator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/errors/cart-changed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-validator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/config/config-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/config/config-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/is-spam-protection-succeeded-action.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/customer-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/form/form-fields-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/form/form-fields-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/cancellable-promise/cancellable-promise.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/dom/errors/unexpected-detachment-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/dom/detachment-observer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/dom/mutation-observer.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/iframe/is-iframe-event.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-event-poster.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/bind-decorator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-event-listener.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/url/append-www.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/errors/spam-protection-challenge-not-completed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/errors/carding-protection-challenge-not-completed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/errors/carding-protection-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/payment-human-verification-handler.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/not-initialized-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/errors/spam-protection-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/errors/spam-protection-not-loaded-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/google-recaptcha.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/google-recaptcha-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/create-spam-protection.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/errors/invalid-hosted-form-config-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/errors/invalid-hosted-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/errors/invalid-hosted-form-value-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/hosted-field-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/iframe-content/hosted-input-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/hosted-field.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/hosted-form.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/is-vaulted-instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/hosted-form-order-data-transformer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/hosted-form-factory.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/errors/spam-protection-not-completed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/order-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/errors/cart-consistency-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/errors/order-tax-provider-unavailable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/order-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-request-sender.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"@bigcommerce/bigpay-client\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/address/map-to-internal-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/billing/is-billing-address-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/amount-transformer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/map-to-internal-coupon.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/generated/checkout-button-method-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/coupon/map-to-internal-gift-certificate.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/map-to-internal-line-items.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/map-gift-certificate-to-internal-line-item.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/map-to-internal-line-item.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/map-to-internal-cart.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/promotion/map-to-discount-notifications.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/customer/map-to-internal-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/iframe-content/card-expiry-formatter.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"card-validator\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/hosted-form/iframe-content/card-number-formatter.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/order/map-to-internal-order.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/map-to-internal-shipping-option.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/payment-request-transformer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout/checkout-params.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/consignment-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/consignment-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/spam-protection-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/spam-protection/spam-protection-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/store-credit/store-credit-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/store-credit/store-credit-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/errors/update-subscriptions-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/subscriptions-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/subscription/subscriptions-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/clone-result.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment-integration/create-payment-integration-selectors.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment-integration/default-payment-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/data-store/create-data-store-projection.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment-integration/payment-integration-store-projection-factory.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"shallowequal\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/cache-key-maps.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/cache-key-resolver.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/selector/selector-decorator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/is-private.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-error-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-status-selector.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/create-checkout-button-selectors.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/dom/is-element-id.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/dom/set-unique-element-id.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/checkout-button-strategy-action-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/registry/registry.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/getShippableItemsCount.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/shipping/getLineItemsCount.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/amazon-pay-v2/amazon-pay-v2.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/amazon-pay-v2/amazon-pay-v2-payment-processor.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/errors/payment-method-client-unavailable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/amazon-pay-v2/amazon-pay-v2-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/unsupported-browser-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/braintree/braintree.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/braintree/braintree-sdk-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/braintree/braintree-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/remote-checkout/errors/remote-checkout-synchronization-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-get-first-and-last-name.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-payment-processor.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/create-googlepay-payment-processor.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-adyenv2-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-adyenv3-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-authorizenet-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-bnz-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-braintree-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-checkoutcom-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-cybersourcev2-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-orbital-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-stripe-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-stripe-upe-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/googlepay/googlepay-worldpay-access-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/masterpass/masterpass-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/paypal/paypal-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/cart/errors/buy-now-cart-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/amazon-pay-v2/amazon-pay-v2-button-options.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/amazon-pay-v2/errors/amazon-pay-v2-config-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/amazon-pay-v2/amazon-pay-v2-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/amazon-pay-v2/amazon-pay-v2-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/braintree/map-to-braintree-shipping-address-override.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/braintree/get-valid-button-style.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/braintree/map-to-legacy-billing-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/braintree/map-to-legacy-shipping-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/braintree/braintree-paypal-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/paypal/paypal-sdk.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/braintree/braintree-paypal-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/braintree/braintree-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/invalid-argument-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-initialized-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/missing-data-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/googlepay/googlepay-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/masterpass/masterpass-supported-locales.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/masterpass/format-locale.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/masterpass/masterpass-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/masterpass/get-callback-url.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/strategies/paypal/paypal-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/get-environment.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/log/console-logger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/log/noop-logger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/log/get-default-logger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/log/create-logger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/registry/resolve-id-registry.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/to-resolvable-module.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-cancelled-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/buy-now-cart-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/apple-pay-integration/src/apple-pay-session-factory.ts","webpack://@bigcommerce/checkout-sdk/./packages/apple-pay-integration/src/apple-pay-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/apple-pay-integration/src/create-apple-pay-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"query-string\"","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-implemented-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/bolt-integration/src/bolt.ts","webpack://@bigcommerce/checkout-sdk/./packages/bolt-integration/src/bolt-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-client-unavailable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/bolt-integration/src/bolt-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/bolt-integration/src/create-bolt-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/cart/cart-source.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/internal-api-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/content-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/sdk-version-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/create-paypal-commerce-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/create-paypal-commerce-alternative-methods-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-express-integration/src/paypal-express-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-express-integration/src/paypal-express-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-express-integration/src/paypal-express-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-express-integration/src/create-paypal-express-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/create-checkout-button-initializer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/create-checkout-button-registry-v2.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/is-resolvable-module.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment-integration/create-payment-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/create-payment-client.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/checkout-buttons/create-checkout-button-registry.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/payment/strategies/amazon-pay-v2/create-amazon-pay-v2-payment-processor.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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(\"@bigcommerce/form-poster\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"tslib\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/data-store\");","import CustomError from './custom-error';\nimport setPrototypeOf from './set-prototype-of';\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 { 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 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,\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 RequestError from './request-error';\n\n/**\n * Throw this error if we are unable to successfully submit a server request\n * using a payment method because the method has invalid configuration or is in\n * an invalid state.\n */\nexport default class PaymentMethodInvalidError extends RequestError {\n constructor(response?: Response) {\n super(response, {\n message: 'There is a problem processing your payment. Please try again later.',\n });\n\n this.name = 'PaymentMethodInvalidError';\n this.type = 'payment_method_invalid';\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 { 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 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,\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 RequestError from './request-error';\n\n/**\n * Throw this error if there is an unexpected error and it is not possible to\n * recover from unless the shopper creates a new checkout session.\n */\nexport default class UnrecoverableError extends RequestError {\n constructor(response: Response, message?: string) {\n super(response, {\n message:\n message ||\n 'An unexpected error has occurred. The checkout process cannot continue as a result.',\n });\n\n this.name = 'UnrecoverableError';\n this.type = 'unrecoverable';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromInternalErrorResponse(\n response: Response,\n message?: string,\n): RequestError {\n const { body } = response;\n const { errors = [] } = body;\n\n return new RequestError(response, {\n message: joinErrors(errors) || body.detail || body.title || message,\n errors: errors.length\n ? errors.map((message) => ({ code: body.type, message }))\n : [{ code: body.type, message: body.detail || body.title }],\n });\n}\n\nfunction joinErrors(errors: string[]): string | undefined {\n return errors\n .reduce((result: string[], error) => {\n if (error) {\n return [...result, error];\n }\n\n return result;\n }, [])\n .join(' ');\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromPaymentErrorResponse(\n response: Response,\n message?: string,\n): RequestError {\n const { body } = response;\n const { errors = [] } = body;\n\n return new RequestError(response, {\n message: joinErrors(errors) || message,\n errors,\n });\n}\n\nfunction joinErrors(errors: Array<{ code: string; message?: string }>): string | undefined {\n if (!Array.isArray(errors)) {\n return;\n }\n\n return errors\n .reduce((result: string[], error) => {\n if (error && error.message) {\n return [...result, error.message];\n }\n\n return result;\n }, [])\n .join(' ');\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if a request fails to complete within its required timeframe\n * because of a network issue.\n */\nexport default class TimeoutError extends RequestError {\n constructor(response?: Response) {\n super(response, {\n message: 'The request has timed out or aborted.',\n });\n\n this.name = 'TimeoutError';\n this.type = 'timeout';\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\nimport { last } from 'lodash';\n\nimport {\n ErrorResponseBody,\n InternalErrorResponseBody,\n StorefrontErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n mapFromInternalErrorResponse,\n mapFromPaymentErrorResponse,\n mapFromStorefrontErrorResponse,\n RequestError,\n TimeoutError,\n} from './errors';\n\nexport default class RequestErrorFactory {\n private _factoryMethods: { [key: string]: ErrorFactoryMethod } = {};\n\n constructor() {\n this.register('default', (response, message) => new RequestError(response, { message }));\n this.register('internal', (response, message) =>\n mapFromInternalErrorResponse(response, message),\n );\n this.register('storefront', (response, message) =>\n mapFromStorefrontErrorResponse(response, message),\n );\n this.register('payment', (response, message) =>\n mapFromPaymentErrorResponse(response, message),\n );\n this.register('timeout', (response) => new TimeoutError(response));\n }\n\n register(type: string, factoryMethod: ErrorFactoryMethod): void {\n this._factoryMethods[type] = factoryMethod;\n }\n\n createError(response: Response, message?: string): RequestError {\n const factoryMethod =\n this._factoryMethods[this._getType(response)] || this._factoryMethods.default;\n\n return factoryMethod(response, message);\n }\n\n private _getType(response: Response): string {\n if (response.status === 0) {\n return 'timeout';\n }\n\n if (this._isStorefrontErrorResponseBody(response.body)) {\n return 'storefront';\n }\n\n if (this._isInternalErrorResponseBody(response.body)) {\n const internalType = last(response.body.type.split('/'));\n\n return internalType && this._factoryMethods[internalType] ? internalType : 'internal';\n }\n\n const error = last(response.body && response.body.errors);\n\n if (error && error.code && this._factoryMethods[error.code]) {\n return error.code;\n }\n\n return 'payment';\n }\n\n private _isStorefrontErrorResponseBody(\n errorResponse: ErrorResponseBody,\n ): errorResponse is StorefrontErrorResponseBody {\n const storefrontErrorResponse = errorResponse as StorefrontErrorResponseBody;\n\n return (\n !this._isInternalErrorResponseBody(errorResponse) &&\n typeof storefrontErrorResponse.title === 'string' &&\n typeof storefrontErrorResponse.type === 'string' &&\n typeof storefrontErrorResponse.status === 'number' &&\n typeof storefrontErrorResponse.detail === 'string'\n );\n }\n\n private _isInternalErrorResponseBody(\n errorResponse: ErrorResponseBody,\n ): errorResponse is InternalErrorResponseBody {\n const internalErrorResponse = errorResponse as InternalErrorResponseBody;\n\n return (\n typeof internalErrorResponse.errors === 'object' &&\n typeof internalErrorResponse.title === 'string' &&\n typeof internalErrorResponse.type === 'string' &&\n typeof internalErrorResponse.status === 'number'\n );\n }\n}\n\nexport type ErrorFactoryMethod = (response: Response, message?: string) => RequestError;\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromStorefrontErrorResponse(\n response: Response,\n message?: string,\n): RequestError {\n const { body } = response;\n\n return new RequestError(response, {\n message: message || body.detail || body.title,\n errors: [\n {\n code: body.code || body.type,\n message: body.detail || body.title,\n },\n ],\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs/operators\");","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadConfigAction } from '../config';\nimport { LoadFormFieldsAction } from '../form';\n\nimport Checkout from './checkout';\n\nexport enum CheckoutActionType {\n LoadCheckoutRequested = 'LOAD_CHECKOUT_REQUESTED',\n LoadCheckoutSucceeded = 'LOAD_CHECKOUT_SUCCEEDED',\n LoadCheckoutFailed = 'LOAD_CHECKOUT_FAILED',\n\n UpdateCheckoutRequested = 'UPDATE_CHECKOUT_REQUESTED',\n UpdateCheckoutSucceeded = 'UPDATE_CHECKOUT_SUCCEEDED',\n UpdateCheckoutFailed = 'UPDATE_CHECKOUT_FAILED',\n}\n\nexport type CheckoutAction = LoadCheckoutAction | UpdateCheckoutAction;\n\nexport type LoadCheckoutAction =\n | LoadCheckoutRequestedAction\n | LoadCheckoutSucceededAction\n | LoadCheckoutFailedAction\n | LoadFormFieldsAction\n | LoadConfigAction;\n\nexport type UpdateCheckoutAction =\n | UpdateCheckoutRequestedAction\n | UpdateCheckoutSucceededAction\n | UpdateCheckoutFailedAction;\n\nexport interface LoadCheckoutRequestedAction extends Action {\n type: CheckoutActionType.LoadCheckoutRequested;\n}\n\nexport interface LoadCheckoutSucceededAction extends Action {\n type: CheckoutActionType.LoadCheckoutSucceeded;\n}\n\nexport interface LoadCheckoutFailedAction extends Action {\n type: CheckoutActionType.LoadCheckoutFailed;\n}\n\nexport interface UpdateCheckoutRequestedAction extends Action {\n type: CheckoutActionType.UpdateCheckoutRequested;\n}\n\nexport interface UpdateCheckoutSucceededAction extends Action {\n type: CheckoutActionType.UpdateCheckoutSucceeded;\n}\n\nexport interface UpdateCheckoutFailedAction extends Action {\n type: CheckoutActionType.UpdateCheckoutFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nexport enum ErrorActionType {\n ClearError = 'CLEAR_ERROR',\n}\n\nexport type ErrorAction = ClearErrorAction;\n\nexport interface ClearErrorAction extends Action {\n type: ErrorActionType.ClearError;\n payload: Error;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Subscriptions } from './subscriptions';\n\nexport enum SubscriptionsActionType {\n UpdateSubscriptionsRequested = 'UPDATE_SUBSCRIPTIONS_REQUESTED',\n UpdateSubscriptionsSucceeded = 'UPDATE_SUBSCRIPTIONS_SUCCEEDED',\n UpdateSubscriptionsFailed = 'UPDATE_SUBSCRIPTIONS_FAILED',\n}\nexport type UpdateSubscriptionsAction =\n | UpdateSubscriptionsRequestedAction\n | UpdateSubscriptionsSucceededAction\n | UpdateSubscriptionsFailedAction;\n\nexport interface UpdateSubscriptionsRequestedAction extends Action {\n type: SubscriptionsActionType.UpdateSubscriptionsRequested;\n}\n\nexport interface UpdateSubscriptionsSucceededAction extends Action {\n type: SubscriptionsActionType.UpdateSubscriptionsSucceeded;\n}\n\nexport interface UpdateSubscriptionsFailedAction extends Action {\n type: SubscriptionsActionType.UpdateSubscriptionsFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nexport enum BillingAddressActionType {\n UpdateBillingAddressRequested = 'UPDATE_BILLING_ADDRESS_REQUESTED',\n UpdateBillingAddressSucceeded = 'UPDATE_BILLING_ADDRESS_SUCCEEDED',\n UpdateBillingAddressFailed = 'UPDATE_BILLING_ADDRESS_FAILED',\n\n ContinueAsGuestRequested = 'CONTINUE_AS_GUEST_REQUESTED',\n ContinueAsGuestSucceeded = 'CONTINUE_AS_GUEST_SUCCEEDED',\n ContinueAsGuestFailed = 'CONTINUE_AS_GUEST_FAILED',\n}\n\nexport type BillingAddressAction = ContinueAsGuestAction | UpdateBillingAddressAction;\n\nexport type UpdateBillingAddressAction =\n | UpdateBillingAddressRequested\n | UpdateBillingAddressSucceeded\n | UpdateBillingAddressFailed;\n\nexport type ContinueAsGuestAction =\n | ContinueAsGuestRequested\n | ContinueAsGuestSucceeded\n | ContinueAsGuestFailed;\n\nexport interface UpdateBillingAddressRequested extends Action {\n type: BillingAddressActionType.UpdateBillingAddressRequested;\n}\n\nexport interface UpdateBillingAddressSucceeded extends Action {\n type: BillingAddressActionType.UpdateBillingAddressSucceeded;\n}\n\nexport interface UpdateBillingAddressFailed extends Action {\n type: BillingAddressActionType.UpdateBillingAddressFailed;\n}\n\nexport interface ContinueAsGuestRequested extends Action {\n type: BillingAddressActionType.ContinueAsGuestRequested;\n}\n\nexport interface ContinueAsGuestSucceeded extends Action {\n type: BillingAddressActionType.ContinueAsGuestSucceeded;\n}\n\nexport interface ContinueAsGuestFailed extends Action {\n type: BillingAddressActionType.ContinueAsGuestFailed;\n}\n","import { isPlainObject, omitBy, transform } from 'lodash';\n\nexport default function omitDeep(\n object: any,\n predicate: (value: any, key: string) => boolean,\n): any {\n if (Array.isArray(object)) {\n return object.map((value) => omitDeep(value, predicate));\n }\n\n if (isPlainObject(object)) {\n return transform(\n omitBy(object, predicate),\n (result, value, key) => {\n result[key] = omitDeep(value, predicate);\n },\n {} as { [key: string]: any },\n );\n }\n\n return object;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { omitDeep } from '../utility';\n\nimport { ClearErrorAction, ErrorActionType } from './error-actions';\n\nexport default function clearErrorReducer<\n TState extends { [key: string]: any },\n TAction extends Action,\n>(state: TState, action: TAction): TState | undefined {\n if (isClearErrorAction(action)) {\n return omitDeep(state, (value) => value === action.payload);\n }\n\n return state;\n}\n\nfunction isClearErrorAction(action: Action): action is ClearErrorAction {\n return action.type === ErrorActionType.ClearError;\n}\n","export interface CompareOptions {\n keyFilter?(key: string): boolean;\n}\n\nexport default function isEqual(objectA: any, objectB: any, options?: CompareOptions): boolean {\n if (objectA === objectB) {\n return true;\n }\n\n if (objectA && objectB && typeof objectA === 'object' && typeof objectB === 'object') {\n if (Array.isArray(objectA) && Array.isArray(objectB)) {\n return isArrayEqual(objectA, objectB, options);\n }\n\n if (Array.isArray(objectA) || Array.isArray(objectB)) {\n return false;\n }\n\n if (objectA instanceof Date && objectB instanceof Date) {\n return isDateEqual(objectA, objectB);\n }\n\n if (objectA instanceof Date || objectB instanceof Date) {\n return false;\n }\n\n if (objectA instanceof RegExp && objectB instanceof RegExp) {\n return isRegExpEqual(objectA, objectB);\n }\n\n if (objectA instanceof RegExp || objectB instanceof RegExp) {\n return false;\n }\n\n return isObjectEqual(objectA, objectB, options);\n }\n\n return objectA === objectB;\n}\n\nfunction isRegExpEqual(objectA: RegExp, objectB: RegExp): boolean {\n return objectA.toString() === objectB.toString();\n}\n\nfunction isDateEqual(objectA: Date, objectB: Date): boolean {\n return objectA.getTime() === objectB.getTime();\n}\n\nfunction isArrayEqual(objectA: any[], objectB: any[], options?: CompareOptions): boolean {\n if (objectA.length !== objectB.length) {\n return false;\n }\n\n for (let index = 0, length = objectA.length; index < length; index++) {\n if (!isEqual(objectA[index], objectB[index], options)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isObjectEqual(\n objectA: { [key: string]: any },\n objectB: { [key: string]: any },\n options?: CompareOptions,\n): boolean {\n const filter = options && options.keyFilter;\n const keysA = filter ? Object.keys(objectA).filter(filter) : Object.keys(objectA);\n const keysB = filter ? Object.keys(objectB).filter(filter) : Object.keys(objectB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (let index = 0, length = keysA.length; index < length; index++) {\n const key = keysA[index];\n\n if (!Object.prototype.hasOwnProperty.call(objectB, key)) {\n return false;\n }\n\n if (!isEqual(objectA[key], objectB[key], options)) {\n return false;\n }\n }\n\n return true;\n}\n","import isEqual from './is-equal';\n\n/**\n * Replace the current value with a new value if the former is different to the\n * latter.\n */\nexport default function replace(currentValue: T, newValue?: T): T {\n if (newValue === undefined || isEqual(currentValue, newValue)) {\n return currentValue;\n }\n\n return newValue;\n}\n","import isEqual from './is-equal';\n\n/**\n * Set a new value to an object under a key if the new value is different to the\n * current value of the key.\n */\nexport default function objectSet(\n object: T | undefined,\n key: K,\n value: T[K],\n): T {\n if (\n object &&\n Object.prototype.hasOwnProperty.call(object, key) &&\n isEqual(object[key], value)\n ) {\n return object;\n }\n\n return {\n ...(object as any),\n [key]: value,\n };\n}\n","import BillingAddress from './billing-address';\n\nexport default interface BillingAddressState {\n data?: BillingAddress;\n errors: BillingAddressErrorsState;\n statuses: BillingAddressStatusesState;\n}\n\nexport interface BillingAddressErrorsState {\n loadError?: Error;\n updateError?: Error;\n continueAsGuestError?: Error;\n}\n\nexport interface BillingAddressStatusesState {\n isLoading?: boolean;\n isUpdating?: boolean;\n isContinuingAsGuest?: boolean;\n}\n\nexport const DEFAULT_STATE: BillingAddressState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet, replace } from '../common/utility';\nimport { OrderAction } from '../order';\nimport { SubscriptionsActionType, UpdateSubscriptionsAction } from '../subscription';\n\nimport BillingAddress from './billing-address';\nimport { BillingAddressAction, BillingAddressActionType } from './billing-address-actions';\nimport BillingAddressState, {\n BillingAddressErrorsState,\n BillingAddressStatusesState,\n DEFAULT_STATE,\n} from './billing-address-state';\n\nexport default function billingAddressReducer(\n state: BillingAddressState = DEFAULT_STATE,\n action: Action,\n): BillingAddressState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: BillingAddress | undefined,\n action: CheckoutAction | BillingAddressAction | OrderAction,\n): BillingAddress | undefined {\n switch (action.type) {\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return replace(data, action.payload && action.payload.billingAddress);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: BillingAddressErrorsState = DEFAULT_STATE.errors,\n action: CheckoutAction | BillingAddressAction | OrderAction | UpdateSubscriptionsAction,\n): BillingAddressErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case BillingAddressActionType.UpdateBillingAddressRequested:\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n return objectSet(errors, 'updateError', undefined);\n\n case BillingAddressActionType.UpdateBillingAddressFailed:\n return objectSet(errors, 'updateError', action.payload);\n\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n case BillingAddressActionType.ContinueAsGuestRequested:\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n return objectSet(errors, 'continueAsGuestError', undefined);\n\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n case BillingAddressActionType.ContinueAsGuestFailed:\n return objectSet(errors, 'continueAsGuestError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: BillingAddressStatusesState = DEFAULT_STATE.statuses,\n action: CheckoutAction | BillingAddressAction | OrderAction | UpdateSubscriptionsAction,\n): BillingAddressStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case BillingAddressActionType.UpdateBillingAddressRequested:\n return objectSet(statuses, 'isUpdating', true);\n\n case BillingAddressActionType.UpdateBillingAddressFailed:\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n return objectSet(statuses, 'isUpdating', false);\n\n case BillingAddressActionType.ContinueAsGuestRequested:\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n return objectSet(statuses, 'isContinuingAsGuest', true);\n\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n case BillingAddressActionType.ContinueAsGuestFailed:\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n return objectSet(statuses, 'isContinuingAsGuest', false);\n\n default:\n return statuses;\n }\n}\n","import { isPlainObject as lodashIsPlainObject } from 'lodash';\n\n// We need this wrapper because Lodash's version doesn't act as a type guard\nexport default function isPlainObject(value: any): value is object {\n return lodashIsPlainObject(value);\n}\n","import { isArray } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\nimport objectMerge from './object-merge';\nimport replace from './replace';\n\nexport interface ArrayReplaceOptions {\n matchObject(objectA: any, objectB: any): boolean;\n}\n\nfunction arrayReplace(\n currentArray: T[] | undefined,\n newArray: T[],\n options?: ArrayReplaceOptions,\n): T[];\nfunction arrayReplace(\n currentArray: T[],\n newArray?: T[],\n options?: ArrayReplaceOptions,\n): undefined;\nfunction arrayReplace(\n currentArray?: T[],\n newArray?: T[],\n options?: ArrayReplaceOptions,\n): T[] | undefined;\n\nfunction arrayReplace(\n currentArray?: T[],\n newArray?: T[],\n options?: ArrayReplaceOptions,\n): T[] | undefined {\n const { matchObject = (a: any, b: any) => a.id !== undefined && a.id === b.id } = options || {};\n\n // Return the new array if the current array does not exist\n if (!currentArray) {\n return newArray;\n }\n\n // If the new array does not exist, or the current array is strictly equal\n // to the new array, exit early and return the current array so that the\n // object reference doesn't change\n if (!newArray || currentArray === newArray) {\n return currentArray;\n }\n\n // Otherwise, try to replace the items of the current array with the new\n // array. If the item from the two arrays are the same, keep the current\n // one. Do it recursively until all arrays are replaced.\n let sameAsCurrentCount = 0;\n let sameAsNewCount = 0;\n\n const countSameAsReplaced = (replacedValue: T, currentValue: T, newValue: T): T => {\n sameAsCurrentCount += replacedValue === currentValue ? 1 : 0;\n sameAsNewCount += replacedValue === newValue ? 1 : 0;\n\n return replacedValue;\n };\n\n const result = newArray.map((newItem, index) => {\n const currentItem = currentArray && currentArray[index];\n\n if (isPlainObject(currentItem) && isPlainObject(newItem)) {\n if (matchObject(currentItem, newItem)) {\n return countSameAsReplaced(objectMerge(currentItem, newItem), currentItem, newItem);\n }\n\n return countSameAsReplaced(replace(currentItem, newItem), currentItem, newItem);\n }\n\n if (isArray(currentItem) && isArray(newItem)) {\n return countSameAsReplaced(arrayReplace(currentItem, newItem), currentItem, newItem);\n }\n\n return countSameAsReplaced(replace(currentItem, newItem), currentItem, newItem);\n }) as T[];\n\n // If all items in the result are identical to the current array, and the\n // current array and the new array have the same size, simply return the\n // current array instead of the result.\n if (\n sameAsCurrentCount === newArray.length &&\n currentArray &&\n currentArray.length === newArray.length\n ) {\n return currentArray;\n }\n\n // If all items in the result are identical to the new array, simply return\n // the new array.\n if (sameAsNewCount === newArray.length) {\n return newArray;\n }\n\n return result;\n}\n\nexport default arrayReplace;\n","import { isArray } from 'lodash';\n\nimport arrayReplace from './array-replace';\nimport isPlainObject from './is-plain-object';\nimport objectSet from './object-set';\n\nfunction objectMerge(currentObject: T, newObject?: Partial): T;\nfunction objectMerge(\n currentObject: T | undefined,\n newObject: Partial,\n): Partial;\nfunction objectMerge(currentObject?: T, newObject?: Partial): T | undefined;\n\nfunction objectMerge(\n currentObject?: T,\n newObject?: Partial,\n): T | Partial | undefined {\n if (!currentObject) {\n return newObject;\n }\n\n // If the new object does not exist but the current object does, or the new\n // object is strictly equal to the current object, return the current object\n if (!newObject || currentObject === newObject) {\n return currentObject;\n }\n\n // If both objects exist, but some values might be different, perform a merge.\n // Retain values that are equal and only replace them with the new values if\n // they are different.\n return (Object.keys(newObject) as Array).reduce((result, key) => {\n const currentValue = result[key];\n const newValue = newObject[key];\n\n if (isPlainObject(currentValue) && isPlainObject(newValue)) {\n return objectSet(result, key, objectMerge(currentValue, newValue));\n }\n\n if (isArray(currentValue) && isArray(newValue)) {\n return objectSet(result, key, arrayReplace(currentValue, newValue) as any);\n }\n\n return objectSet(result, key, newValue as any);\n }, currentObject);\n}\n\nexport default objectMerge;\n","import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum CouponActionType {\n ApplyCouponRequested = 'APPLY_COUPON_REQUESTED',\n ApplyCouponSucceeded = 'APPLY_COUPON_SUCCEEDED',\n ApplyCouponFailed = 'APPLY_COUPON_FAILED',\n\n RemoveCouponRequested = 'REMOVE_COUPON_REQUESTED',\n RemoveCouponSucceeded = 'REMOVE_COUPON_SUCCEEDED',\n RemoveCouponFailed = 'REMOVE_COUPON_FAILED',\n}\n\nexport type CouponAction = ApplyCouponAction | RemoveCouponAction;\n\nexport type ApplyCouponAction =\n | ApplyCouponRequestedAction\n | ApplyCouponSucceededAction\n | ApplyCouponFailedAction;\n\nexport type RemoveCouponAction =\n | RemoveCouponRequestedAction\n | RemoveCouponSucceededAction\n | RemoveCouponFailedAction;\n\nexport interface ApplyCouponRequestedAction extends Action {\n type: CouponActionType.ApplyCouponRequested;\n}\n\nexport interface ApplyCouponSucceededAction extends Action {\n type: CouponActionType.ApplyCouponSucceeded;\n}\n\nexport interface ApplyCouponFailedAction extends Action> {\n type: CouponActionType.ApplyCouponFailed;\n}\n\nexport interface RemoveCouponRequestedAction extends Action {\n type: CouponActionType.RemoveCouponRequested;\n}\n\nexport interface RemoveCouponSucceededAction extends Action {\n type: CouponActionType.RemoveCouponSucceeded;\n}\n\nexport interface RemoveCouponFailedAction extends Action {\n type: CouponActionType.RemoveCouponFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum GiftCertificateActionType {\n ApplyGiftCertificateRequested = 'APPLY_GIFT_CERTIFICATE_REQUESTED',\n ApplyGiftCertificateSucceeded = 'APPLY_GIFT_CERTIFICATE_SUCCEEDED',\n ApplyGiftCertificateFailed = 'APPLY_GIFT_CERTIFICATE_FAILED',\n\n RemoveGiftCertificateRequested = 'REMOVE_GIFT_CERTIFICATE_REQUESTED',\n RemoveGiftCertificateSucceeded = 'REMOVE_GIFT_CERTIFICATE_SUCCEEDED',\n RemoveGiftCertificateFailed = 'REMOVE_GIFT_CERTIFICATE_FAILED',\n}\n\nexport type GiftCertificateAction = ApplyGiftCertificateAction | RemoveGiftCertificateAction;\n\nexport type ApplyGiftCertificateAction =\n | ApplyGiftCertificateRequestedAction\n | ApplyGiftCertificateSucceededAction\n | ApplyGiftCertificateFailedAction;\n\nexport type RemoveGiftCertificateAction =\n | RemoveGiftCertificateRequestedAction\n | RemoveGiftCertificateSucceededAction\n | RemoveGiftCertificateFailedAction;\n\nexport interface ApplyGiftCertificateRequestedAction extends Action {\n type: GiftCertificateActionType.ApplyGiftCertificateRequested;\n}\n\nexport interface ApplyGiftCertificateSucceededAction extends Action {\n type: GiftCertificateActionType.ApplyGiftCertificateSucceeded;\n}\n\nexport interface ApplyGiftCertificateFailedAction\n extends Action> {\n type: GiftCertificateActionType.ApplyGiftCertificateFailed;\n}\n\nexport interface RemoveGiftCertificateRequestedAction extends Action {\n type: GiftCertificateActionType.RemoveGiftCertificateRequested;\n}\n\nexport interface RemoveGiftCertificateSucceededAction extends Action {\n type: GiftCertificateActionType.RemoveGiftCertificateSucceeded;\n}\n\nexport interface RemoveGiftCertificateFailedAction\n extends Action> {\n type: GiftCertificateActionType.RemoveGiftCertificateFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nimport { ConsignmentMeta } from './consignment';\n\nexport enum ConsignmentActionType {\n CreateConsignmentsRequested = 'CREATE_CONSIGNMENTS_REQUESTED',\n CreateConsignmentsSucceeded = 'CREATE_CONSIGNMENTS_SUCCEEDED',\n CreateConsignmentsFailed = 'CREATE_CONSIGNMENTS_FAILED',\n\n UpdateConsignmentRequested = 'UPDATE_CONSIGNMENT_REQUESTED',\n UpdateConsignmentSucceeded = 'UPDATE_CONSIGNMENT_SUCCEEDED',\n UpdateConsignmentFailed = 'UPDATE_CONSIGNMENT_FAILED',\n\n DeleteConsignmentRequested = 'DELETE_CONSIGNMENT_REQUESTED',\n DeleteConsignmentSucceeded = 'DELETE_CONSIGNMENT_SUCCEEDED',\n DeleteConsignmentFailed = 'DELETE_CONSIGNMENT_FAILED',\n\n UpdateShippingOptionRequested = 'UPDATE_SHIPPING_OPTION_REQUESTED',\n UpdateShippingOptionSucceeded = 'UPDATE_SHIPPING_OPTION_SUCCEEDED',\n UpdateShippingOptionFailed = 'UPDATE_SHIPPING_OPTION_FAILED',\n\n LoadShippingOptionsRequested = 'LOAD_SHIPPING_OPTIONS_REQUESTED',\n LoadShippingOptionsSucceeded = 'LOAD_SHIPPING_OPTIONS_SUCCEEDED',\n LoadShippingOptionsFailed = 'LOAD_SHIPPING_OPTIONS_FAILED',\n}\n\nexport type ConsignmentAction =\n | CreateConsignmentsAction\n | UpdateConsignmentAction\n | DeleteConsignmentAction\n | UpdateShippingOptionAction\n | LoadShippingOptionsAction;\n\nexport type CreateConsignmentsAction =\n | CreateConsignmentsRequestedAction\n | CreateConsignmentsSucceededAction\n | CreateConsignmentsFailedAction;\n\nexport type UpdateConsignmentAction =\n | UpdateConsignmentRequestedAction\n | UpdateConsignmentSucceededAction\n | UpdateConsignmentFailedAction;\n\nexport type DeleteConsignmentAction =\n | DeleteConsignmentRequestedAction\n | DeleteConsignmentSucceededAction\n | DeleteConsignmentFailedAction;\n\nexport type UpdateShippingOptionAction =\n | UpdateShippingOptionRequestedAction\n | UpdateShippingOptionSucceededAction\n | UpdateShippingOptionFailedAction;\n\nexport type LoadShippingOptionsAction =\n | LoadShippingOptionsRequestedAction\n | LoadShippingOptionsSucceededAction\n | LoadShippingOptionsFailedAction;\n\nexport interface CreateConsignmentsRequestedAction extends Action {\n type: ConsignmentActionType.CreateConsignmentsRequested;\n}\n\nexport interface CreateConsignmentsSucceededAction extends Action {\n type: ConsignmentActionType.CreateConsignmentsSucceeded;\n}\n\nexport interface CreateConsignmentsFailedAction extends Action {\n type: ConsignmentActionType.CreateConsignmentsFailed;\n}\n\nexport interface UpdateConsignmentRequestedAction extends Action {\n type: ConsignmentActionType.UpdateConsignmentRequested;\n}\n\nexport interface UpdateConsignmentSucceededAction extends Action {\n type: ConsignmentActionType.UpdateConsignmentSucceeded;\n}\n\nexport interface UpdateConsignmentFailedAction extends Action {\n type: ConsignmentActionType.UpdateConsignmentFailed;\n}\n\nexport interface DeleteConsignmentRequestedAction extends Action {\n type: ConsignmentActionType.DeleteConsignmentRequested;\n}\n\nexport interface DeleteConsignmentSucceededAction extends Action {\n type: ConsignmentActionType.DeleteConsignmentSucceeded;\n}\n\nexport interface DeleteConsignmentFailedAction extends Action {\n type: ConsignmentActionType.DeleteConsignmentFailed;\n}\n\nexport interface UpdateShippingOptionRequestedAction extends Action {\n type: ConsignmentActionType.UpdateShippingOptionRequested;\n}\n\nexport interface UpdateShippingOptionSucceededAction extends Action {\n type: ConsignmentActionType.UpdateShippingOptionSucceeded;\n}\n\nexport interface UpdateShippingOptionFailedAction extends Action {\n type: ConsignmentActionType.UpdateShippingOptionFailed;\n}\n\nexport interface LoadShippingOptionsRequestedAction extends Action {\n type: ConsignmentActionType.LoadShippingOptionsRequested;\n}\n\nexport interface LoadShippingOptionsSucceededAction extends Action {\n type: ConsignmentActionType.LoadShippingOptionsSucceeded;\n}\n\nexport interface LoadShippingOptionsFailedAction extends Action {\n type: ConsignmentActionType.LoadShippingOptionsFailed;\n}\n","import Cart from './cart';\n\nexport default interface CartState {\n data?: Cart;\n errors: CartErrorsState;\n statuses: CartStatusesState;\n}\n\nexport interface CartErrorsState {\n loadError?: Error;\n}\n\nexport interface CartStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: CartState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadPaymentMethodAction } from '../payment';\n\nimport { CheckoutButtonMethodType } from './strategies';\n\nexport enum CheckoutButtonActionType {\n InitializeButtonFailed = 'INITIALIZE_BUTTON_FAILED',\n InitializeButtonRequested = 'INITIALIZE_BUTTON_REQUESTED',\n InitializeButtonSucceeded = 'INITIALIZE_BUTTON_SUCCEEDED',\n\n DeinitializeButtonFailed = 'DEINITIALIZE_BUTTON_FAILED',\n DeinitializeButtonRequested = 'DEINITIALIZE_BUTTON_REQUESTED',\n DeinitializeButtonSucceeded = 'DEINITIALIZE_BUTTON_SUCCEEDED',\n}\n\nexport type CheckoutButtonAction = InitializeButtonAction | DeinitializeButtonAction;\n\nexport type InitializeButtonAction =\n | InitializeButtonRequestedAction\n | InitializeButtonSucceededAction\n | InitializeButtonFailedAction\n | LoadPaymentMethodAction;\n\nexport type DeinitializeButtonAction =\n | DeinitializeButtonRequestedAction\n | DeinitializeButtonSucceededAction\n | DeinitializeButtonFailedAction;\n\nexport interface CheckoutButtonActionMeta {\n methodId: CheckoutButtonMethodType;\n}\n\nexport interface InitializeButtonActionMeta extends CheckoutButtonActionMeta {\n containerId: string;\n}\n\nexport interface InitializeButtonRequestedAction\n extends Action {\n type: CheckoutButtonActionType.InitializeButtonRequested;\n}\n\nexport interface InitializeButtonSucceededAction\n extends Action {\n type: CheckoutButtonActionType.InitializeButtonSucceeded;\n}\n\nexport interface InitializeButtonFailedAction extends Action {\n type: CheckoutButtonActionType.InitializeButtonFailed;\n}\n\nexport interface DeinitializeButtonRequestedAction\n extends Action {\n type: CheckoutButtonActionType.DeinitializeButtonRequested;\n}\n\nexport interface DeinitializeButtonSucceededAction\n extends Action {\n type: CheckoutButtonActionType.DeinitializeButtonSucceeded;\n}\n\nexport interface DeinitializeButtonFailedAction extends Action {\n type: CheckoutButtonActionType.DeinitializeButtonFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { BillingAddressAction, BillingAddressActionType } from '../billing';\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\nimport {\n CouponAction,\n CouponActionType,\n GiftCertificateAction,\n GiftCertificateActionType,\n} from '../coupon';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport Cart from './cart';\nimport CartState, { CartErrorsState, CartStatusesState, DEFAULT_STATE } from './cart-state';\n\nexport default function cartReducer(state: CartState = DEFAULT_STATE, action: Action): CartState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Cart | undefined,\n action:\n | BillingAddressAction\n | CheckoutAction\n | ConsignmentAction\n | CouponAction\n | GiftCertificateAction,\n): Cart | undefined {\n switch (action.type) {\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n return objectMerge(data, action.payload && action.payload.cart);\n\n default:\n return data;\n }\n}\n\nfunction statusesReducer(\n statuses: CartStatusesState = DEFAULT_STATE.statuses,\n action: CheckoutAction,\n): CartStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CheckoutActionType.LoadCheckoutFailed:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n\nfunction errorsReducer(\n errors: CartErrorsState = DEFAULT_STATE.errors,\n action: CheckoutAction,\n): CartErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n","import { CheckoutButtonMethodType } from './strategies';\n\nexport default interface CheckoutButtonState {\n data: {\n [key in CheckoutButtonMethodType]?: CheckoutButtonDataState | undefined;\n };\n errors: {\n [key in CheckoutButtonMethodType]?: CheckoutButtonErrorsState | undefined;\n };\n statuses: {\n [key in CheckoutButtonMethodType]?: CheckoutButtonStatusesState | undefined;\n };\n}\n\nexport interface CheckoutButtonDataState {\n initializedContainers: {\n [key: string]: boolean;\n };\n}\n\nexport interface CheckoutButtonErrorsState {\n initializeError?: Error;\n deinitializeError?: Error;\n}\n\nexport interface CheckoutButtonStatusesState {\n isInitializing?: boolean;\n isDeinitializing?: boolean;\n}\n\nexport const DEFAULT_STATE: CheckoutButtonState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport Config from './config';\n\nexport enum ConfigActionType {\n LoadConfigRequested = 'LOAD_CONFIG_REQUESTED',\n LoadConfigSucceeded = 'LOAD_CONFIG_SUCCEEDED',\n LoadConfigFailed = 'LOAD_CONFIG_FAILED',\n}\n\nexport type LoadConfigAction =\n | LoadConfigRequestedAction\n | LoadConfigSucceededAction\n | LoadConfigFailedAction;\n\nexport interface LoadConfigRequestedAction extends Action {\n type: ConfigActionType.LoadConfigRequested;\n}\n\nexport interface LoadConfigSucceededAction extends Action {\n type: ConfigActionType.LoadConfigSucceeded;\n}\n\nexport interface LoadConfigFailedAction extends Action {\n type: ConfigActionType.LoadConfigFailed;\n}\n","import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { CheckoutButtonAction, CheckoutButtonActionType } from './checkout-button-actions';\nimport CheckoutButtonState, {\n CheckoutButtonDataState,\n CheckoutButtonErrorsState,\n CheckoutButtonStatusesState,\n DEFAULT_STATE,\n} from './checkout-button-state';\n\nconst DEFAULT_DATA_STATE: CheckoutButtonDataState = { initializedContainers: {} };\nconst DEFAULT_ERROR_STATE: CheckoutButtonErrorsState = {};\nconst DEFAULT_STATUS_STATE: CheckoutButtonStatusesState = {};\n\nexport default function checkoutButtonReducer(\n state: CheckoutButtonState = DEFAULT_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonState {\n if (!action.meta || !action.meta.methodId) {\n return state;\n }\n\n const reducer = combineReducers({\n data: combineReducers({\n [action.meta.methodId]: dataReducer,\n }),\n errors: combineReducers({\n [action.meta.methodId]: errorsReducer,\n }),\n statuses: combineReducers({\n [action.meta.methodId]: statusesReducer,\n }),\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: CheckoutButtonDataState = DEFAULT_DATA_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonDataState {\n switch (action.type) {\n case CheckoutButtonActionType.InitializeButtonSucceeded:\n if (!action.meta || !action.meta.containerId) {\n return data;\n }\n\n return objectMerge(data, {\n initializedContainers: {\n [action.meta.containerId]: true,\n },\n });\n\n case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n return objectSet(data, 'initializedContainers', {});\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: CheckoutButtonErrorsState = DEFAULT_ERROR_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonErrorsState {\n switch (action.type) {\n case CheckoutButtonActionType.InitializeButtonRequested:\n case CheckoutButtonActionType.InitializeButtonSucceeded:\n return objectSet(errors, 'initializeError', undefined);\n\n case CheckoutButtonActionType.InitializeButtonFailed:\n return objectSet(errors, 'initializeError', action.payload);\n\n case CheckoutButtonActionType.DeinitializeButtonRequested:\n case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n return objectSet(errors, 'deinitializeError', undefined);\n\n case CheckoutButtonActionType.DeinitializeButtonFailed:\n return objectSet(errors, 'deinitializeError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CheckoutButtonStatusesState = DEFAULT_STATUS_STATE,\n action: CheckoutButtonAction,\n): CheckoutButtonStatusesState {\n switch (action.type) {\n case CheckoutButtonActionType.InitializeButtonRequested:\n return objectSet(statuses, 'isInitializing', true);\n\n case CheckoutButtonActionType.InitializeButtonFailed:\n case CheckoutButtonActionType.InitializeButtonSucceeded:\n return objectSet(statuses, 'isInitializing', false);\n\n case CheckoutButtonActionType.DeinitializeButtonRequested:\n return objectSet(statuses, 'isDeinitializing', true);\n\n case CheckoutButtonActionType.DeinitializeButtonFailed:\n case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n return objectSet(statuses, 'isDeinitializing', false);\n\n default:\n return statuses;\n }\n}\n","import Config from './config';\n\nexport default interface ConfigState {\n data?: Config;\n meta?: ConfigMetaState;\n errors: ConfigErrorsState;\n statuses: ConfigStatusesState;\n}\n\nexport interface ConfigMetaState {\n externalSource?: string;\n variantIdentificationToken?: string;\n host?: string;\n locale?: string;\n}\n\nexport interface ConfigErrorsState {\n loadError?: Error;\n}\n\nexport interface ConfigStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ConfigState = {\n meta: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { InternalOrderResponseData } from './internal-order-responses';\nimport Order from './order';\n\nexport enum OrderActionType {\n LoadOrderRequested = 'LOAD_ORDER_REQUESTED',\n LoadOrderSucceeded = 'LOAD_ORDER_SUCCEEDED',\n LoadOrderFailed = 'LOAD_ORDER_FAILED',\n\n LoadOrderPaymentsRequested = 'LOAD_ORDER_PAYMENTS_REQUESTED',\n LoadOrderPaymentsSucceeded = 'LOAD_ORDER_PAYMENTS_SUCCEEDED',\n LoadOrderPaymentsFailed = 'LOAD_ORDER_PAYMENTS_FAILED',\n\n SubmitOrderRequested = 'SUBMIT_ORDER_REQUESTED',\n SubmitOrderSucceeded = 'SUBMIT_ORDER_SUCCEEDED',\n SubmitOrderFailed = 'SUBMIT_ORDER_FAILED',\n\n FinalizeOrderRequested = 'FINALIZE_ORDER_REQUESTED',\n FinalizeOrderSucceeded = 'FINALIZE_ORDER_SUCCEEDED',\n FinalizeOrderFailed = 'FINALIZE_ORDER_FAILED',\n}\n\nexport type OrderAction =\n | LoadOrderAction\n | LoadOrderPaymentsAction\n | SubmitOrderAction\n | FinalizeOrderAction;\n\nexport type LoadOrderPaymentsAction =\n | LoadOrderPaymentsRequestedAction\n | LoadOrderPaymentsSucceededAction\n | LoadOrderPaymentsFailedAction;\n\nexport type LoadOrderAction =\n | LoadOrderRequestedAction\n | LoadOrderSucceededAction\n | LoadOrderFailedAction;\n\nexport type SubmitOrderAction =\n | SubmitOrderRequestedAction\n | SubmitOrderSucceededAction\n | SubmitOrderFailedAction\n | LoadOrderAction;\n\nexport type FinalizeOrderAction =\n | FinalizeOrderRequestedAction\n | FinalizeOrderSucceededAction\n | FinalizeOrderFailedAction\n | LoadOrderAction;\n\nexport interface LoadOrderRequestedAction extends Action {\n type: OrderActionType.LoadOrderRequested;\n}\n\nexport interface LoadOrderSucceededAction extends Action {\n type: OrderActionType.LoadOrderSucceeded;\n}\n\nexport interface LoadOrderFailedAction extends Action {\n type: OrderActionType.LoadOrderFailed;\n}\n\nexport interface LoadOrderPaymentsRequestedAction extends Action {\n type: OrderActionType.LoadOrderPaymentsRequested;\n}\n\nexport interface LoadOrderPaymentsSucceededAction extends Action {\n type: OrderActionType.LoadOrderPaymentsSucceeded;\n}\n\nexport interface LoadOrderPaymentsFailedAction extends Action {\n type: OrderActionType.LoadOrderPaymentsFailed;\n}\n\nexport interface SubmitOrderRequestedAction extends Action {\n type: OrderActionType.SubmitOrderRequested;\n}\n\nexport interface SubmitOrderSucceededAction extends Action {\n type: OrderActionType.SubmitOrderSucceeded;\n}\n\nexport interface SubmitOrderFailedAction extends Action {\n type: OrderActionType.SubmitOrderFailed;\n}\n\nexport interface FinalizeOrderRequestedAction extends Action {\n type: OrderActionType.FinalizeOrderRequested;\n}\n\nexport interface FinalizeOrderSucceededAction extends Action {\n type: OrderActionType.FinalizeOrderSucceeded;\n}\n\nexport interface FinalizeOrderFailedAction extends Action {\n type: OrderActionType.FinalizeOrderFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport Config from './config';\nimport { ConfigActionType, LoadConfigAction } from './config-actions';\nimport ConfigState, { ConfigErrorsState, ConfigStatusesState, DEFAULT_STATE } from './config-state';\n\nexport default function configReducer(\n state: ConfigState = DEFAULT_STATE,\n action: Action,\n): ConfigState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(data: Config | undefined, action: LoadConfigAction): Config | undefined {\n switch (action.type) {\n case ConfigActionType.LoadConfigSucceeded:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: ConfigErrorsState = DEFAULT_STATE.errors,\n action: LoadConfigAction,\n): ConfigErrorsState {\n switch (action.type) {\n case ConfigActionType.LoadConfigSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case ConfigActionType.LoadConfigFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ConfigStatusesState = DEFAULT_STATE.statuses,\n action: LoadConfigAction,\n): ConfigStatusesState {\n switch (action.type) {\n case ConfigActionType.LoadConfigRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ConfigActionType.LoadConfigSucceeded:\n case ConfigActionType.LoadConfigFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nimport Coupon from './coupon';\n\nexport default interface CouponState {\n data?: Coupon[];\n errors: CouponErrorsState;\n statuses: CouponStatusesState;\n}\n\nexport interface CouponErrorsState {\n applyCouponError?: RequestError;\n removeCouponError?: RequestError;\n}\n\nexport interface CouponStatusesState {\n isApplyingCoupon?: boolean;\n isRemovingCoupon?: boolean;\n}\n\nexport const DEFAULT_STATE: CouponState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { OrderAction, OrderActionType } from '../order';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport Coupon from './coupon';\nimport { CouponAction, CouponActionType } from './coupon-actions';\nimport CouponState, { CouponErrorsState, CouponStatusesState, DEFAULT_STATE } from './coupon-state';\n\nexport default function couponReducer(\n state: CouponState = DEFAULT_STATE,\n action: Action,\n): CouponState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Coupon[] | undefined,\n action: CouponAction | CheckoutAction | OrderAction | ConsignmentAction,\n): Coupon[] | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case OrderActionType.LoadOrderSucceeded:\n return arrayReplace(data, action.payload && action.payload.coupons);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(errors: CouponErrorsState = {}, action: CouponAction): CouponErrorsState {\n switch (action.type) {\n case CouponActionType.ApplyCouponRequested:\n case CouponActionType.ApplyCouponSucceeded:\n return objectSet(errors, 'applyCouponError', undefined);\n\n case CouponActionType.ApplyCouponFailed:\n return objectSet(errors, 'applyCouponError', action.payload);\n\n case CouponActionType.RemoveCouponRequested:\n case CouponActionType.RemoveCouponSucceeded:\n return objectSet(errors, 'removeCouponError', undefined);\n\n case CouponActionType.RemoveCouponFailed:\n return objectSet(errors, 'removeCouponError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CouponStatusesState = {},\n action: CouponAction,\n): CouponStatusesState {\n switch (action.type) {\n case CouponActionType.ApplyCouponRequested:\n return objectSet(statuses, 'isApplyingCoupon', true);\n\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.ApplyCouponFailed:\n return objectSet(statuses, 'isApplyingCoupon', false);\n\n case CouponActionType.RemoveCouponRequested:\n return objectSet(statuses, 'isRemovingCoupon', true);\n\n case CouponActionType.RemoveCouponSucceeded:\n case CouponActionType.RemoveCouponFailed:\n return objectSet(statuses, 'isRemovingCoupon', false);\n\n default:\n return statuses;\n }\n}\n","import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nimport GiftCertificate from './gift-certificate';\n\nexport default interface GiftCertificateState {\n data?: GiftCertificate[];\n errors: GiftCertificateErrorsState;\n statuses: GiftCertificateStatusesState;\n}\n\nexport interface GiftCertificateErrorsState {\n applyGiftCertificateError?: RequestError;\n removeGiftCertificateError?: RequestError;\n}\n\nexport interface GiftCertificateStatusesState {\n isApplyingGiftCertificate?: boolean;\n isRemovingGiftCertificate?: boolean;\n}\n\nexport const DEFAULT_STATE: GiftCertificateState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadCheckoutAction } from '../checkout';\nimport { SpamProtectionAction } from '../spam-protection';\n\nimport Customer from './customer';\nimport { InternalCustomerResponseData } from './internal-customer-responses';\n\nexport enum CustomerActionType {\n SignInCustomerRequested = 'SIGN_IN_CUSTOMER_REQUESTED',\n SignInCustomerSucceeded = 'SIGN_IN_CUSTOMER_SUCCEEDED',\n SignInCustomerFailed = 'SIGN_IN_CUSTOMER_FAILED',\n\n SignOutCustomerRequested = 'SIGN_OUT_CUSTOMER_REQUESTED',\n SignOutCustomerSucceeded = 'SIGN_OUT_CUSTOMER_SUCCEEDED',\n SignOutCustomerFailed = 'SIGN_OUT_CUSTOMER_FAILED',\n\n CreateCustomerRequested = 'CREATE_CUSTOMER_REQUESTED',\n CreateCustomerSucceeded = 'CREATE_CUSTOMER_SUCCEEDED',\n CreateCustomerFailed = 'CREATE_CUSTOMER_FAILED',\n\n CreateCustomerAddressRequested = 'CREATE_CUSTOMER_ADDRESS_REQUESTED',\n CreateCustomerAddressSucceeded = 'CREATE_CUSTOMER_ADDRESS_SUCCEEDED',\n CreateCustomerAddressFailed = 'CREATE_CUSTOMER_ADDRESS_FAILED',\n\n StripeLinkAuthenticated = 'STRIPE_LINK_AUTHENTICATED',\n}\n\nexport type CustomerAction =\n | SignInCustomerAction\n | SignOutCustomerAction\n | CreateCustomerAddressAction\n | CreateCustomerAction;\n\nexport type CreateCustomerAction =\n | CreateCustomerRequestedAction\n | CreateCustomerSucceededAction\n | CreateCustomerFailedAction\n | SpamProtectionAction\n | LoadCheckoutAction;\n\nexport type CreateCustomerAddressAction =\n | CreateCustomerAddressRequestedAction\n | CreateCustomerAddressSucceededAction\n | CreateCustomerAddressFailedAction\n | LoadCheckoutAction;\n\nexport type SignInCustomerAction =\n | SignInCustomerRequestedAction\n | SignInCustomerSucceededAction\n | SignInCustomerFailedAction\n | LoadCheckoutAction;\n\nexport type SignOutCustomerAction =\n | SignOutCustomerRequestedAction\n | SignOutCustomerSucceededAction\n | SignOutCustomerFailedAction\n | LoadCheckoutAction;\n\nexport interface SignInCustomerRequestedAction extends Action {\n type: CustomerActionType.SignInCustomerRequested;\n}\n\nexport interface StripeLinkAuthenticatedAction extends Action {\n type: CustomerActionType.StripeLinkAuthenticated;\n}\n\nexport interface SignInCustomerSucceededAction extends Action {\n type: CustomerActionType.SignInCustomerSucceeded;\n}\n\nexport interface SignInCustomerFailedAction extends Action {\n type: CustomerActionType.SignInCustomerFailed;\n}\n\nexport interface SignOutCustomerRequestedAction extends Action {\n type: CustomerActionType.SignOutCustomerRequested;\n}\n\nexport interface SignOutCustomerSucceededAction extends Action {\n type: CustomerActionType.SignOutCustomerSucceeded;\n}\n\nexport interface SignOutCustomerFailedAction extends Action {\n type: CustomerActionType.SignOutCustomerFailed;\n}\n\nexport interface CreateCustomerRequestedAction extends Action {\n type: CustomerActionType.CreateCustomerRequested;\n}\n\nexport interface CreateCustomerSucceededAction extends Action {\n type: CustomerActionType.CreateCustomerSucceeded;\n}\n\nexport interface CreateCustomerFailedAction extends Action {\n type: CustomerActionType.CreateCustomerFailed;\n}\n\nexport interface CreateCustomerAddressRequestedAction extends Action {\n type: CustomerActionType.CreateCustomerAddressRequested;\n}\n\nexport interface CreateCustomerAddressSucceededAction extends Action {\n type: CustomerActionType.CreateCustomerAddressSucceeded;\n}\n\nexport interface CreateCustomerAddressFailedAction extends Action {\n type: CustomerActionType.CreateCustomerAddressFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport { CouponAction, CouponActionType } from './coupon-actions';\nimport GiftCertificate from './gift-certificate';\nimport { GiftCertificateAction, GiftCertificateActionType } from './gift-certificate-actions';\nimport GiftCertificateState, {\n DEFAULT_STATE,\n GiftCertificateErrorsState,\n GiftCertificateStatusesState,\n} from './gift-certificate-state';\n\nexport default function giftCertificateReducer(\n state: GiftCertificateState = DEFAULT_STATE,\n action: Action,\n): GiftCertificateState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: GiftCertificate[] | undefined,\n action: CheckoutAction | GiftCertificateAction | ConsignmentAction | CouponAction,\n): GiftCertificate[] | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n return arrayReplace(data, action.payload && action.payload.giftCertificates);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: GiftCertificateErrorsState = DEFAULT_STATE.errors,\n action: GiftCertificateAction,\n): GiftCertificateErrorsState {\n switch (action.type) {\n case GiftCertificateActionType.ApplyGiftCertificateRequested:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n return objectSet(errors, 'applyGiftCertificateError', undefined);\n\n case GiftCertificateActionType.ApplyGiftCertificateFailed:\n return objectSet(errors, 'applyGiftCertificateError', action.payload);\n\n case GiftCertificateActionType.RemoveGiftCertificateRequested:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n return objectSet(errors, 'removeGiftCertificateError', undefined);\n\n case GiftCertificateActionType.RemoveGiftCertificateFailed:\n return objectSet(errors, 'removeGiftCertificateError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: GiftCertificateStatusesState = DEFAULT_STATE.statuses,\n action: GiftCertificateAction,\n): GiftCertificateStatusesState {\n switch (action.type) {\n case GiftCertificateActionType.ApplyGiftCertificateRequested:\n return objectSet(statuses, 'isApplyingGiftCertificate', true);\n\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateFailed:\n return objectSet(statuses, 'isApplyingGiftCertificate', false);\n\n case GiftCertificateActionType.RemoveGiftCertificateRequested:\n return objectSet(statuses, 'isRemovingGiftCertificate', true);\n\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateFailed:\n return objectSet(statuses, 'isRemovingGiftCertificate', false);\n\n default:\n return statuses;\n }\n}\n","import Customer from './customer';\n\nexport default interface CustomerState {\n data?: Customer;\n statuses: CustomerStatusesState;\n errors: CustomerErrorsState;\n}\n\nexport interface CustomerErrorsState {\n createError?: Error;\n createAddressError?: Error;\n}\n\nexport interface CustomerStatusesState {\n isCreating?: boolean;\n isCreatingAddress?: boolean;\n}\n\nexport const DEFAULT_STATE: CustomerState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nexport enum CustomerStrategyActionType {\n SignInFailed = 'CUSTOMER_STRATEGY_SIGN_IN_FAILED',\n SignInRequested = 'CUSTOMER_STRATEGY_SIGN_IN_REQUESTED',\n SignInSucceeded = 'CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED',\n SignOutFailed = 'CUSTOMER_STRATEGY_SIGN_OUT_FAILED',\n SignOutRequested = 'CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED',\n SignOutSucceeded = 'CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED',\n ExecutePaymentMethodCheckoutFailed = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED',\n ExecutePaymentMethodCheckoutRequested = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED',\n ExecutePaymentMethodCheckoutSucceeded = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED',\n InitializeFailed = 'CUSTOMER_STRATEGY_INITIALIZE_FAILED',\n InitializeRequested = 'CUSTOMER_STRATEGY_INITIALIZE_REQUESTED',\n InitializeSucceeded = 'CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED',\n DeinitializeFailed = 'CUSTOMER_STRATEGY_DEINITIALIZE_FAILED',\n DeinitializeRequested = 'CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED',\n DeinitializeSucceeded = 'CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED',\n WidgetInteractionStarted = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED',\n WidgetInteractionFinished = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED',\n WidgetInteractionFailed = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type CustomerStrategyAction =\n | CustomerStrategySignInAction\n | CustomerStrategySignOutAction\n | CustomerStrategyExecutePaymentMethodCheckoutAction\n | CustomerStrategyInitializeAction\n | CustomerStrategyDeinitializeAction\n | CustomerStrategyWidgetAction;\n\nexport type CustomerStrategySignInAction =\n | SignInRequestedAction\n | SignInSucceededAction\n | SignInFailedAction;\n\nexport type CustomerStrategySignOutAction =\n | SignOutRequestedAction\n | SignOutSucceededAction\n | SignOutFailedAction;\n\nexport type CustomerStrategyExecutePaymentMethodCheckoutAction =\n | ExecutePaymentMethodCheckoutRequestedAction\n | ExecutePaymentMethodCheckoutSucceededAction\n | ExecutePaymentMethodCheckoutFailedAction;\n\nexport type CustomerStrategyInitializeAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction;\n\nexport type CustomerStrategyDeinitializeAction =\n | DeinitializeRequestedAction\n | DeinitializeSucceededAction\n | DeinitializeFailedAction;\n\nexport type CustomerStrategyWidgetAction =\n | WidgetInteractionStartedAction\n | WidgetInteractionFinishedAction\n | WidgetInteractionFailedAction;\n\nexport interface SignInRequestedAction extends Action {\n type: CustomerStrategyActionType.SignInRequested;\n}\n\nexport interface SignInSucceededAction extends Action {\n type: CustomerStrategyActionType.SignInSucceeded;\n}\n\nexport interface SignInFailedAction extends Action {\n type: CustomerStrategyActionType.SignInFailed;\n}\n\nexport interface SignOutRequestedAction extends Action {\n type: CustomerStrategyActionType.SignOutRequested;\n}\n\nexport interface SignOutSucceededAction extends Action {\n type: CustomerStrategyActionType.SignOutSucceeded;\n}\n\nexport interface SignOutFailedAction extends Action {\n type: CustomerStrategyActionType.SignOutFailed;\n}\n\nexport interface ExecutePaymentMethodCheckoutRequestedAction extends Action {\n type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested;\n}\n\nexport interface ExecutePaymentMethodCheckoutSucceededAction extends Action {\n type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded;\n}\n\nexport interface ExecutePaymentMethodCheckoutFailedAction extends Action {\n type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n type: CustomerStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: CustomerStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: CustomerStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n type: CustomerStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n type: CustomerStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action {\n type: CustomerStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n type: CustomerStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n type: CustomerStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action {\n type: CustomerStrategyActionType.WidgetInteractionFailed;\n}\n","import { combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { BillingAddressActionType, ContinueAsGuestAction } from '../billing';\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport Customer from './customer';\nimport {\n CustomerAction,\n CustomerActionType,\n StripeLinkAuthenticatedAction,\n} from './customer-actions';\nimport CustomerState, {\n CustomerErrorsState,\n CustomerStatusesState,\n DEFAULT_STATE,\n} from './customer-state';\n\ntype ReducerActionType =\n | CheckoutAction\n | ContinueAsGuestAction\n | CustomerAction\n | StripeLinkAuthenticatedAction;\n\nexport default function customerReducer(\n state: CustomerState = DEFAULT_STATE,\n action: ReducerActionType,\n): CustomerState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(data: Customer | undefined, action: ReducerActionType): Customer | undefined {\n switch (action.type) {\n case BillingAddressActionType.ContinueAsGuestSucceeded:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectMerge(data, action.payload && action.payload.customer);\n\n case CustomerActionType.CreateCustomerAddressSucceeded:\n return objectMerge(data, action.payload);\n\n case CustomerActionType.StripeLinkAuthenticated:\n return objectSet(data, 'isStripeLinkAuthenticated', action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: CustomerErrorsState = DEFAULT_STATE.errors,\n action: ReducerActionType,\n): CustomerErrorsState {\n switch (action.type) {\n case CustomerActionType.CreateCustomerRequested:\n case CustomerActionType.CreateCustomerSucceeded:\n return objectSet(errors, 'createError', undefined);\n\n case CustomerActionType.CreateCustomerFailed:\n return objectSet(errors, 'createError', action.payload);\n\n case CustomerActionType.CreateCustomerAddressRequested:\n case CustomerActionType.CreateCustomerAddressSucceeded:\n return objectSet(errors, 'createAddressError', undefined);\n\n case CustomerActionType.CreateCustomerAddressFailed:\n return objectSet(errors, 'createAddressError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CustomerStatusesState = DEFAULT_STATE.statuses,\n action: ReducerActionType,\n): CustomerStatusesState {\n switch (action.type) {\n case CustomerActionType.CreateCustomerRequested:\n return objectSet(statuses, 'isCreating', true);\n\n case CustomerActionType.CreateCustomerFailed:\n case CustomerActionType.CreateCustomerSucceeded:\n return objectSet(statuses, 'isCreating', false);\n\n case CustomerActionType.CreateCustomerAddressRequested:\n return objectSet(statuses, 'isCreatingAddress', true);\n\n case CustomerActionType.CreateCustomerAddressFailed:\n case CustomerActionType.CreateCustomerAddressSucceeded:\n return objectSet(statuses, 'isCreatingAddress', false);\n\n default:\n return statuses;\n }\n}\n","export default interface CustomerStrategyState {\n data: CustomerStrategyDataState;\n errors: CustomerStrategyErrorsState;\n statuses: CustomerStrategyStatusesState;\n}\n\nexport interface CustomerStrategyDataState {\n [key: string]: {\n isInitialized: boolean;\n };\n}\n\nexport interface CustomerStrategyErrorsState {\n deinitializeError?: Error;\n deinitializeMethodId?: string;\n initializeErrors?: { [key: string]: Error };\n initializeMethodId?: string;\n signInError?: Error;\n signInMethodId?: string;\n signOutError?: Error;\n signOutMethodId?: string;\n executePaymentMethodCheckoutError?: Error;\n executePaymentMethodCheckoutMethodId?: string;\n widgetInteractionError?: Error;\n widgetInteractionMethodId?: string;\n}\n\nexport interface CustomerStrategyStatusesState {\n deinitializeMethodId?: string;\n initializeMethodId?: string;\n isDeinitializing?: boolean;\n isInitializing?: boolean;\n isSigningIn?: boolean;\n isSigningOut?: boolean;\n signInMethodId?: string;\n signOutMethodId?: string;\n isExecutingPaymentMethodCheckout?: boolean;\n executePaymentMethodCheckoutMethodId?: string;\n isWidgetInteracting?: boolean;\n widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: CustomerStrategyState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Extension } from './extension';\n\nexport enum ExtensionActionType {\n LoadExtensionsRequested = 'LOAD_EXTENSIONS_REQUESTED',\n LoadExtensionsSucceeded = 'LOAD_EXTENSIONS_SUCCEEDED',\n LoadExtensionsFailed = 'LOAD_EXTENSIONS_FAILED',\n RenderExtensionRequested = 'RENDER_EXTENSION_REQUESTED',\n RenderExtensionSucceeded = 'RENDER_EXTENSION_SUCCEEDED',\n RenderExtensionFailed = 'RENDER_EXTENSION_FAILED',\n}\n\nexport type ExtensionAction =\n | LoadExtensionsRequestedAction\n | LoadExtensionsSucceededAction\n | LoadExtensionsFailedAction\n | RenderExtensionRequestedAction\n | RenderExtensionSucceededAction\n | RenderExtensionFailedAction;\n\nexport interface LoadExtensionsRequestedAction extends Action {\n type: ExtensionActionType.LoadExtensionsRequested;\n}\n\nexport interface LoadExtensionsSucceededAction extends Action {\n type: ExtensionActionType.LoadExtensionsSucceeded;\n}\n\nexport interface LoadExtensionsFailedAction extends Action {\n type: ExtensionActionType.LoadExtensionsFailed;\n}\n\nexport interface RenderExtensionRequestedAction extends Action {\n type: ExtensionActionType.RenderExtensionRequested;\n}\n\nexport interface RenderExtensionSucceededAction extends Action {\n type: ExtensionActionType.RenderExtensionSucceeded;\n}\n\nexport interface RenderExtensionFailedAction extends Action {\n type: ExtensionActionType.RenderExtensionFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { CustomerStrategyAction, CustomerStrategyActionType } from './customer-strategy-actions';\nimport CustomerStrategyState, {\n CustomerStrategyDataState,\n CustomerStrategyErrorsState,\n CustomerStrategyStatusesState,\n DEFAULT_STATE,\n} from './customer-strategy-state';\n\nexport default function customerStrategyReducer(\n state: CustomerStrategyState = DEFAULT_STATE,\n action: Action,\n): CustomerStrategyState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: CustomerStrategyDataState = DEFAULT_STATE.data,\n action: CustomerStrategyAction,\n): CustomerStrategyDataState {\n switch (action.type) {\n case CustomerStrategyActionType.InitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: true,\n },\n });\n\n case CustomerStrategyActionType.DeinitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: false,\n },\n });\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: CustomerStrategyErrorsState = DEFAULT_STATE.errors,\n action: CustomerStrategyAction,\n): CustomerStrategyErrorsState {\n switch (action.type) {\n case CustomerStrategyActionType.InitializeRequested:\n case CustomerStrategyActionType.InitializeSucceeded:\n return objectMerge(errors, {\n initializeErrors: { ...errors.initializeErrors },\n initializeMethodId: errors.initializeMethodId\n ? errors.initializeMethodId\n : undefined,\n });\n\n case CustomerStrategyActionType.InitializeFailed:\n return objectMerge(errors, {\n initializeErrors: {\n ...errors.initializeErrors,\n [action.meta && action.meta.methodId]: action.payload,\n },\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.DeinitializeRequested:\n case CustomerStrategyActionType.DeinitializeSucceeded:\n return objectMerge(errors, {\n deinitializeError: undefined,\n deinitializeMethodId: undefined,\n });\n\n case CustomerStrategyActionType.DeinitializeFailed:\n return objectMerge(errors, {\n deinitializeError: action.payload,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignInRequested:\n case CustomerStrategyActionType.SignInSucceeded:\n return objectMerge(errors, {\n signInError: undefined,\n signInMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignInFailed:\n return objectMerge(errors, {\n signInError: action.payload,\n signInMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignOutRequested:\n case CustomerStrategyActionType.SignOutSucceeded:\n return objectMerge(errors, {\n signOutError: undefined,\n signOutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignOutFailed:\n return objectMerge(errors, {\n signOutError: action.payload,\n signOutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested:\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded:\n return objectMerge(errors, {\n executePaymentMethodCheckoutError: undefined,\n executePaymentMethodCheckoutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed:\n return objectMerge(errors, {\n executePaymentMethodCheckoutError: action.payload,\n executePaymentMethodCheckoutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.WidgetInteractionStarted:\n case CustomerStrategyActionType.WidgetInteractionFinished:\n return objectMerge(errors, {\n widgetInteractionError: undefined,\n widgetInteractionMethodId: undefined,\n });\n\n case CustomerStrategyActionType.WidgetInteractionFailed:\n return objectMerge(errors, {\n widgetInteractionError: action.payload,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CustomerStrategyStatusesState = DEFAULT_STATE.statuses,\n action: CustomerStrategyAction,\n): CustomerStrategyStatusesState {\n switch (action.type) {\n case CustomerStrategyActionType.InitializeRequested:\n return objectMerge(statuses, {\n isInitializing: true,\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.InitializeFailed:\n case CustomerStrategyActionType.InitializeSucceeded:\n return objectMerge(statuses, {\n isInitializing: false,\n initializeMethodId: undefined,\n });\n\n case CustomerStrategyActionType.DeinitializeRequested:\n return objectMerge(statuses, {\n isDeinitializing: true,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.DeinitializeFailed:\n case CustomerStrategyActionType.DeinitializeSucceeded:\n return objectMerge(statuses, {\n isDeinitializing: false,\n deinitializeMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignInRequested:\n return objectMerge(statuses, {\n isSigningIn: true,\n signInMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignInFailed:\n case CustomerStrategyActionType.SignInSucceeded:\n return objectMerge(statuses, {\n isSigningIn: false,\n signInMethodId: undefined,\n });\n\n case CustomerStrategyActionType.SignOutRequested:\n return objectMerge(statuses, {\n isSigningOut: true,\n signOutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.SignOutFailed:\n case CustomerStrategyActionType.SignOutSucceeded:\n return objectMerge(statuses, {\n isSigningOut: false,\n signOutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested:\n return objectMerge(statuses, {\n isExecutingPaymentMethodCheckout: true,\n executePaymentMethodCheckoutMethodId: action.meta && action.meta.methodId,\n });\n\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed:\n case CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded:\n return objectMerge(statuses, {\n isExecutingPaymentMethodCheckout: false,\n executePaymentMethodCheckoutMethodId: undefined,\n });\n\n case CustomerStrategyActionType.WidgetInteractionStarted:\n return objectMerge(statuses, {\n isWidgetInteracting: true,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n case CustomerStrategyActionType.WidgetInteractionFinished:\n case CustomerStrategyActionType.WidgetInteractionFailed:\n return objectMerge(statuses, {\n isWidgetInteracting: false,\n widgetInteractionMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { Extension } from './extension';\n\nexport interface ExtensionState {\n data?: Extension[];\n errors: ExtensionErrorsState;\n statuses: ExtensionStatusesState;\n}\n\nexport interface ExtensionErrorsState {\n loadError?: Error;\n renderError?: Error;\n}\n\nexport interface ExtensionStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ExtensionState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { FormFields } from './form-field';\n\nexport enum FormFieldsActionType {\n LoadFormFieldsRequested = 'LOAD_FORM_FIELDS_REQUESTED',\n LoadFormFieldsSucceeded = 'LOAD_FORM_FIELDS_SUCCEEDED',\n LoadFormFieldsFailed = 'LOAD_FORM_FIELDS_FAILED',\n}\n\nexport type LoadFormFieldsAction =\n | LoadFormFieldsRequestedAction\n | LoadFormFieldsSucceededAction\n | LoadFormFieldsFailedAction;\n\nexport interface LoadFormFieldsRequestedAction extends Action {\n type: FormFieldsActionType.LoadFormFieldsRequested;\n}\n\nexport interface LoadFormFieldsSucceededAction extends Action {\n type: FormFieldsActionType.LoadFormFieldsSucceeded;\n}\n\nexport interface LoadFormFieldsFailedAction extends Action {\n type: FormFieldsActionType.LoadFormFieldsFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\n\nimport { Extension } from './extension';\nimport { ExtensionAction, ExtensionActionType } from './extension-actions';\nimport {\n DEFAULT_STATE,\n ExtensionErrorsState,\n ExtensionState,\n ExtensionStatusesState,\n} from './extension-state';\n\nexport function extensionReducer(\n state: ExtensionState = DEFAULT_STATE,\n action: Action,\n): ExtensionState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Extension[] | undefined,\n action: ExtensionAction,\n): Extension[] | undefined {\n if (action.type === ExtensionActionType.LoadExtensionsSucceeded) {\n return arrayReplace(data, action.payload);\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: ExtensionErrorsState = DEFAULT_STATE.errors,\n action: ExtensionAction,\n): ExtensionErrorsState {\n switch (action.type) {\n case ExtensionActionType.LoadExtensionsRequested:\n case ExtensionActionType.LoadExtensionsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case ExtensionActionType.RenderExtensionRequested:\n case ExtensionActionType.RenderExtensionSucceeded:\n return objectSet(errors, 'renderError', undefined);\n\n case ExtensionActionType.LoadExtensionsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case ExtensionActionType.RenderExtensionFailed:\n return objectSet(errors, 'renderError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ExtensionStatusesState = DEFAULT_STATE.statuses,\n action: ExtensionAction,\n): ExtensionStatusesState {\n switch (action.type) {\n case ExtensionActionType.LoadExtensionsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ExtensionActionType.LoadExtensionsSucceeded:\n case ExtensionActionType.LoadExtensionsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { FormFields } from './form-field';\n\nexport default interface FormFieldsState {\n data?: FormFields;\n errors: FormFieldsErrorState;\n statuses: FormFieldsStatusesState;\n}\n\nexport interface FormFieldsErrorState {\n loadError?: Error;\n}\n\nexport interface FormFieldsStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: FormFieldsState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport Country from './country';\n\nexport enum CountryActionType {\n LoadCountriesRequested = 'LOAD_COUNTRIES_REQUESTED',\n LoadCountriesSucceeded = 'LOAD_COUNTRIES_SUCCEEDED',\n LoadCountriesFailed = 'LOAD_COUNTRIES_FAILED',\n}\n\nexport type LoadCountriesAction =\n | LoadCountriesRequestedAction\n | LoadCountriesSucceededAction\n | LoadCountriesFailedAction;\n\nexport interface LoadCountriesRequestedAction extends Action {\n type: CountryActionType.LoadCountriesRequested;\n}\n\nexport interface LoadCountriesSucceededAction extends Action {\n type: CountryActionType.LoadCountriesSucceeded;\n}\n\nexport interface LoadCountriesFailedAction extends Action {\n type: CountryActionType.LoadCountriesFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { FormFields } from './form-field';\nimport { FormFieldsActionType, LoadFormFieldsAction } from './form-fields-actions';\nimport FormFieldsState, {\n DEFAULT_STATE,\n FormFieldsErrorState,\n FormFieldsStatusesState,\n} from './form-fields-state';\n\nexport default function formFieldsReducer(\n state: FormFieldsState = DEFAULT_STATE,\n action: Action,\n): FormFieldsState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: FormFields | undefined,\n action: LoadFormFieldsAction,\n): FormFields | undefined {\n switch (action.type) {\n case FormFieldsActionType.LoadFormFieldsSucceeded:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: FormFieldsErrorState = DEFAULT_STATE.errors,\n action: LoadFormFieldsAction,\n): FormFieldsErrorState {\n switch (action.type) {\n case FormFieldsActionType.LoadFormFieldsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case FormFieldsActionType.LoadFormFieldsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: FormFieldsStatusesState = DEFAULT_STATE.statuses,\n action: LoadFormFieldsAction,\n): FormFieldsStatusesState {\n switch (action.type) {\n case FormFieldsActionType.LoadFormFieldsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case FormFieldsActionType.LoadFormFieldsSucceeded:\n case FormFieldsActionType.LoadFormFieldsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import Country from './country';\n\nexport default interface CountryState {\n data?: Country[];\n errors: CountryErrorsState;\n statuses: CountryStatusesState;\n}\n\nexport interface CountryErrorsState {\n loadError?: Error;\n}\n\nexport interface CountryStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: CountryState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\n\nimport Country from './country';\nimport { CountryActionType, LoadCountriesAction } from './country-actions';\nimport CountryState, {\n CountryErrorsState,\n CountryStatusesState,\n DEFAULT_STATE,\n} from './country-state';\n\nexport default function countryReducer(\n state: CountryState = DEFAULT_STATE,\n action: Action,\n): CountryState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Country[] | undefined,\n action: LoadCountriesAction,\n): Country[] | undefined {\n switch (action.type) {\n case CountryActionType.LoadCountriesSucceeded:\n return arrayReplace(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: CountryErrorsState = DEFAULT_STATE.errors,\n action: LoadCountriesAction,\n): CountryErrorsState {\n switch (action.type) {\n case CountryActionType.LoadCountriesRequested:\n case CountryActionType.LoadCountriesSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CountryActionType.LoadCountriesFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CountryStatusesState = DEFAULT_STATE.statuses,\n action: LoadCountriesAction,\n): CountryStatusesState {\n switch (action.type) {\n case CountryActionType.LoadCountriesRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CountryActionType.LoadCountriesSucceeded:\n case CountryActionType.LoadCountriesFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { Omit } from '../common/types';\n\nimport { InternalOrderMeta, InternalOrderPayment } from './internal-order';\nimport Order from './order';\n\nexport default interface OrderState {\n data?: OrderDataState;\n meta?: OrderMetaState;\n errors: OrderErrorsState;\n statuses: OrderStatusesState;\n}\n\nexport type OrderDataState = Omit;\n\nexport interface OrderMetaState extends InternalOrderMeta {\n token?: string;\n orderToken?: string;\n callbackUrl?: string;\n payment?: InternalOrderPayment;\n}\n\nexport interface OrderErrorsState {\n loadError?: Error;\n submitError?: Error;\n finalizeError?: Error;\n}\n\nexport interface OrderStatusesState {\n isLoading?: boolean;\n isSubmitting?: boolean;\n isFinalizing?: boolean;\n}\n\nexport const DEFAULT_STATE: OrderState = {\n errors: {},\n meta: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { OrderAction, OrderActionType } from './order-actions';\nimport OrderState, {\n DEFAULT_STATE,\n OrderDataState,\n OrderErrorsState,\n OrderMetaState,\n OrderStatusesState,\n} from './order-state';\n\nexport default function orderReducer(\n state: OrderState = DEFAULT_STATE,\n action: Action,\n): OrderState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n meta: metaReducer,\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: OrderDataState | undefined,\n action: OrderAction,\n): OrderDataState | undefined {\n switch (action.type) {\n case OrderActionType.LoadOrderSucceeded:\n case OrderActionType.LoadOrderPaymentsSucceeded:\n return objectMerge(\n data,\n omit(action.payload, ['billingAddress', 'coupons']),\n ) as OrderDataState;\n\n default:\n return data;\n }\n}\n\nfunction metaReducer(\n meta: OrderMetaState | undefined,\n action: OrderAction,\n): OrderMetaState | undefined {\n switch (action.type) {\n case OrderActionType.FinalizeOrderSucceeded:\n case OrderActionType.SubmitOrderSucceeded:\n return objectMerge(meta, {\n ...action.meta,\n callbackUrl: action.payload && action.payload.order.callbackUrl,\n orderToken: action.payload && action.payload.order.token,\n payment: action.payload && action.payload.order && action.payload.order.payment,\n });\n\n default:\n return meta;\n }\n}\n\nfunction errorsReducer(\n errors: OrderErrorsState = DEFAULT_STATE.errors,\n action: OrderAction,\n): OrderErrorsState {\n switch (action.type) {\n case OrderActionType.LoadOrderRequested:\n case OrderActionType.LoadOrderSucceeded:\n case OrderActionType.LoadOrderPaymentsSucceeded:\n case OrderActionType.LoadOrderPaymentsRequested:\n return objectSet(errors, 'loadError', undefined);\n\n case OrderActionType.LoadOrderFailed:\n case OrderActionType.LoadOrderPaymentsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: OrderStatusesState = DEFAULT_STATE.statuses,\n action: OrderAction,\n): OrderStatusesState {\n switch (action.type) {\n case OrderActionType.LoadOrderRequested:\n case OrderActionType.LoadOrderPaymentsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case OrderActionType.LoadOrderSucceeded:\n case OrderActionType.LoadOrderFailed:\n case OrderActionType.LoadOrderPaymentsSucceeded:\n case OrderActionType.LoadOrderPaymentsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { Address } from '../address';\n\nexport interface OrderBillingAddress extends Address {\n email?: string;\n}\n\nexport default interface OrderBillingAddressState {\n data?: OrderBillingAddress;\n}\n\nexport const DEFAULT_STATE: OrderBillingAddressState = {};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderAction } from '../order';\n\nimport PaymentResponseBody from './payment-response-body';\n\nexport enum PaymentActionType {\n SubmitPaymentRequested = 'SUBMIT_PAYMENT_REQUESTED',\n SubmitPaymentSucceeded = 'SUBMIT_PAYMENT_SUCCEEDED',\n SubmitPaymentFailed = 'SUBMIT_PAYMENT_FAILED',\n\n InitializeOffsitePaymentRequested = 'INITIALIZE_OFFSITE_PAYMENT_REQUESTED',\n InitializeOffsitePaymentSucceeded = 'INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED',\n InitializeOffsitePaymentFailed = 'INITIALIZE_OFFSITE_PAYMENT_FAILED',\n}\n\nexport type PaymentAction = SubmitPaymentAction | InitializeOffsitePaymentAction;\n\nexport type SubmitPaymentAction =\n | SubmitPaymentRequestedAction\n | SubmitPaymentSucceededAction\n | SubmitPaymentFailedAction\n | LoadOrderAction;\n\nexport type InitializeOffsitePaymentAction =\n | InitializeOffsitePaymentRequestedAction\n | InitializeOffsitePaymentSucceededAction\n | InitializeOffsitePaymentFailedAction;\n\nexport interface SubmitPaymentRequestedAction extends Action {\n type: PaymentActionType.SubmitPaymentRequested;\n}\n\nexport interface SubmitPaymentSucceededAction extends Action {\n type: PaymentActionType.SubmitPaymentSucceeded;\n}\n\nexport interface SubmitPaymentFailedAction extends Action {\n type: PaymentActionType.SubmitPaymentFailed;\n}\n\nexport interface InitializeOffsitePaymentRequestedAction extends Action {\n type: PaymentActionType.InitializeOffsitePaymentRequested;\n}\n\nexport interface InitializeOffsitePaymentSucceededAction extends Action {\n type: PaymentActionType.InitializeOffsitePaymentSucceeded;\n}\n\nexport interface InitializeOffsitePaymentFailedAction extends Action {\n type: PaymentActionType.InitializeOffsitePaymentFailed;\n}\n","import { Action } from '@bigcommerce/data-store';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport enum PaymentMethodActionType {\n LoadPaymentMethodRequested = 'LOAD_PAYMENT_METHOD_REQUESTED',\n LoadPaymentMethodSucceeded = 'LOAD_PAYMENT_METHOD_SUCCEEDED',\n LoadPaymentMethodFailed = 'LOAD_PAYMENT_METHOD_FAILED',\n\n LoadPaymentMethodsRequested = 'LOAD_PAYMENT_METHODS_REQUESTED',\n LoadPaymentMethodsSucceeded = 'LOAD_PAYMENT_METHODS_SUCCEEDED',\n LoadPaymentMethodsFailed = 'LOAD_PAYMENT_METHODS_FAILED',\n}\n\nexport type PaymentMethodAction = LoadPaymentMethodAction | LoadPaymentMethodsAction;\n\nexport type LoadPaymentMethodAction =\n | LoadPaymentMethodRequestedAction\n | LoadPaymentMethodSucceededAction\n | LoadPaymentMethodFailedAction;\n\nexport type LoadPaymentMethodsAction =\n | LoadPaymentMethodsRequestedAction\n | LoadPaymentMethodsSucceededAction\n | LoadPaymentMethodsFailedAction;\n\nexport interface LoadPaymentMethodRequestedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodRequested;\n}\n\nexport interface LoadPaymentMethodSucceededAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodSucceeded;\n}\n\nexport interface LoadPaymentMethodFailedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodFailed;\n}\n\nexport interface LoadPaymentMethodsRequestedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodsRequested;\n}\n\nexport interface LoadPaymentMethodsSucceededAction\n extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodsSucceeded;\n}\n\nexport interface LoadPaymentMethodsFailedAction extends Action {\n type: PaymentMethodActionType.LoadPaymentMethodsFailed;\n}\n","import { Action, combineReducers } from '@bigcommerce/data-store';\n\nimport { replace } from '../common/utility';\nimport { OrderAction, OrderActionType } from '../order';\n\nimport OrderBillingAddressState, {\n DEFAULT_STATE,\n OrderBillingAddress,\n} from './order-billing-address-state';\n\nexport default function orderBillingAddressReducer(\n state: OrderBillingAddressState = DEFAULT_STATE,\n action: Action,\n): OrderBillingAddressState {\n const reducer = combineReducers({\n data: dataReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: OrderBillingAddress | undefined,\n action: OrderAction,\n): OrderBillingAddress | undefined {\n switch (action.type) {\n case OrderActionType.LoadOrderPaymentsSucceeded:\n case OrderActionType.LoadOrderSucceeded:\n return replace(data, action.payload && action.payload.billingAddress);\n\n default:\n return data;\n }\n}\n","import { combineReducers } from '@bigcommerce/data-store';\n\nimport { PaymentAction, PaymentActionType } from './payment-actions';\nimport PaymentResponseBody from './payment-response-body';\nimport PaymentState from './payment-state';\n\nexport default function paymentReducer(\n state: PaymentState = {},\n action: PaymentAction,\n): PaymentState {\n const reducer = combineReducers({\n data: dataReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentResponseBody | undefined,\n action: PaymentAction,\n): PaymentResponseBody | undefined {\n switch (action.type) {\n case PaymentActionType.SubmitPaymentSucceeded:\n return action.payload;\n\n default:\n return data;\n }\n}\n","import PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport default interface PaymentMethodState {\n data?: PaymentMethod[];\n meta?: PaymentMethodMeta;\n errors: PaymentMethodErrorsState;\n statuses: PaymentMethodStatusesState;\n}\n\nexport interface PaymentMethodErrorsState {\n loadMethodId?: string;\n loadError?: Error;\n loadMethodError?: Error;\n}\n\nexport interface PaymentMethodStatusesState {\n loadMethodId?: string;\n isLoading?: boolean;\n isLoadingMethod?: boolean;\n}\n\nexport const DEFAULT_STATE: PaymentMethodState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderPaymentsAction } from '../order';\n\nexport enum PaymentStrategyActionType {\n ExecuteFailed = 'PAYMENT_STRATEGY_EXECUTE_FAILED',\n ExecuteRequested = 'PAYMENT_STRATEGY_EXECUTE_REQUESTED',\n ExecuteSucceeded = 'PAYMENT_STRATEGY_EXECUTE_SUCCEEDED',\n FinalizeFailed = 'PAYMENT_STRATEGY_FINALIZE_FAILED',\n FinalizeRequested = 'PAYMENT_STRATEGY_FINALIZE_REQUESTED',\n FinalizeSucceeded = 'PAYMENT_STRATEGY_FINALIZE_SUCCEEDED',\n InitializeFailed = 'PAYMENT_STRATEGY_INITIALIZE_FAILED',\n InitializeRequested = 'PAYMENT_STRATEGY_INITIALIZE_REQUESTED',\n InitializeSucceeded = 'PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED',\n DeinitializeFailed = 'PAYMENT_STRATEGY_DEINITIALIZE_FAILED',\n DeinitializeRequested = 'PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED',\n DeinitializeSucceeded = 'PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED',\n WidgetInteractionStarted = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED',\n WidgetInteractionFinished = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED',\n WidgetInteractionFailed = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type PaymentStrategyAction =\n | PaymentStrategyExecuteAction\n | PaymentStrategyFinalizeAction\n | PaymentStrategyInitializeAction\n | PaymentStrategyDeinitializeAction\n | PaymentStrategyWidgetAction;\n\nexport type PaymentStrategyExecuteAction =\n | ExecuteRequestedAction\n | ExecuteSucceededAction\n | ExecuteFailedAction\n | LoadOrderPaymentsAction;\n\nexport type PaymentStrategyFinalizeAction =\n | FinalizeRequestedAction\n | FinalizeSucceededAction\n | FinalizeFailedAction\n | LoadOrderPaymentsAction;\n\nexport type PaymentStrategyInitializeAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction;\n\nexport type PaymentStrategyDeinitializeAction =\n | DeinitializeRequestedAction\n | DeinitializeSucceededAction\n | DeinitializeFailedAction;\n\nexport type PaymentStrategyWidgetAction =\n | WidgetInteractionStartedAction\n | WidgetInteractionFinishedAction\n | WidgetInteractionFailedAction;\n\nexport interface ExecuteRequestedAction extends Action {\n type: PaymentStrategyActionType.ExecuteRequested;\n}\n\nexport interface ExecuteSucceededAction extends Action {\n type: PaymentStrategyActionType.ExecuteSucceeded;\n}\n\nexport interface ExecuteFailedAction extends Action {\n type: PaymentStrategyActionType.ExecuteFailed;\n}\n\nexport interface FinalizeRequestedAction extends Action {\n type: PaymentStrategyActionType.FinalizeRequested;\n}\n\nexport interface FinalizeSucceededAction extends Action {\n type: PaymentStrategyActionType.FinalizeSucceeded;\n}\n\nexport interface FinalizeFailedAction extends Action {\n type: PaymentStrategyActionType.FinalizeFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n type: PaymentStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: PaymentStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: PaymentStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n type: PaymentStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n type: PaymentStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action {\n type: PaymentStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n type: PaymentStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n type: PaymentStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action {\n type: PaymentStrategyActionType.WidgetInteractionFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, mergeOrPush, objectMerge, objectSet } from '../common/utility';\n\nimport PaymentMethod from './payment-method';\nimport { PaymentMethodAction, PaymentMethodActionType } from './payment-method-actions';\nimport PaymentMethodMeta from './payment-method-meta';\nimport PaymentMethodState, {\n DEFAULT_STATE,\n PaymentMethodErrorsState,\n PaymentMethodStatusesState,\n} from './payment-method-state';\n\nexport default function paymentMethodReducer(\n state: PaymentMethodState = DEFAULT_STATE,\n action: Action,\n): PaymentMethodState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n meta: metaReducer,\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentMethod[] | undefined,\n action: PaymentMethodAction,\n): PaymentMethod[] | undefined {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n return mergeOrPush(\n data || [],\n action.payload,\n action.payload && {\n id: action.payload.id,\n gateway: action.payload.gateway,\n },\n );\n\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n return arrayReplace(data, action.payload, {\n matchObject: (methodA, methodB) =>\n methodA.id === methodB.id && methodA.gateway === methodB.gateway,\n });\n\n default:\n return data;\n }\n}\n\nfunction metaReducer(\n meta: PaymentMethodMeta | undefined,\n action: PaymentMethodAction,\n): PaymentMethodMeta | undefined {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n return objectMerge(meta, action.meta);\n\n default:\n return meta;\n }\n}\n\nfunction errorsReducer(\n errors: PaymentMethodErrorsState = DEFAULT_STATE.errors,\n action: PaymentMethodAction,\n): PaymentMethodErrorsState {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodsRequested:\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case PaymentMethodActionType.LoadPaymentMethodsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case PaymentMethodActionType.LoadPaymentMethodRequested:\n case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n return objectMerge(errors, {\n loadMethodId: undefined,\n loadMethodError: undefined,\n });\n\n case PaymentMethodActionType.LoadPaymentMethodFailed:\n return objectMerge(errors, {\n loadMethodId: action.meta.methodId,\n loadMethodError: action.payload,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: PaymentMethodStatusesState = DEFAULT_STATE.statuses,\n action: PaymentMethodAction,\n): PaymentMethodStatusesState {\n switch (action.type) {\n case PaymentMethodActionType.LoadPaymentMethodsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n case PaymentMethodActionType.LoadPaymentMethodsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case PaymentMethodActionType.LoadPaymentMethodRequested:\n return objectMerge(statuses, {\n isLoadingMethod: true,\n loadMethodId: action.meta.methodId,\n });\n\n case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n case PaymentMethodActionType.LoadPaymentMethodFailed:\n return objectMerge(statuses, {\n isLoadingMethod: false,\n loadMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { findIndex, pick, pickBy, ValueKeyIteratee } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\nimport objectMerge from './object-merge';\n\n/**\n * Push an item to an array if it doesn't exist in the array. Otherwise, merge\n * with the existing item in the array. This function always returns a new array.\n */\nexport default function mergeOrPush(array: T[], item?: T, predicate?: ValueKeyIteratee): T[] {\n if (!item) {\n return array;\n }\n\n const defaultPredicate = pick(item, 'id');\n const index = findIndex(\n array,\n typeof predicate === 'object' ? pickBy(predicate) : predicate || defaultPredicate,\n );\n const newArray = [...array];\n\n if (index === -1) {\n newArray.push(item);\n } else {\n const existingItem = array[index];\n\n newArray[index] =\n isPlainObject(existingItem) && isPlainObject(item)\n ? objectMerge(existingItem, item)\n : item;\n }\n\n return newArray;\n}\n","export default interface PaymentStrategyState {\n data: PaymentStrategyDataState;\n errors: PaymentStrategyErrorsState;\n statuses: PaymentStrategyStatusesState;\n}\n\nexport interface PaymentStrategyDataState {\n [key: string]: {\n isInitialized: boolean;\n };\n}\n\nexport interface PaymentStrategyErrorsState {\n deinitializeError?: Error;\n deinitializeMethodId?: string;\n executeError?: Error;\n executeMethodId?: string;\n finalizeError?: Error;\n finalizeMethodId?: string;\n initializeError?: Error;\n initializeMethodId?: string;\n widgetInteractionError?: Error;\n widgetInteractionMethodId?: string;\n}\n\nexport interface PaymentStrategyStatusesState {\n deinitializeMethodId?: string;\n executeMethodId?: string;\n finalizeMethodId?: string;\n initializeMethodId?: string;\n isDeinitializing?: boolean;\n isExecuting?: boolean;\n isFinalizing?: boolean;\n isInitializing?: boolean;\n isWidgetInteracting?: boolean;\n widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: PaymentStrategyState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { VaultAccessToken } from './instrument';\nimport { InstrumentsResponseBody } from './instrument-response-body';\n\nexport enum InstrumentActionType {\n LoadInstrumentsRequested = 'LOAD_INSTRUMENTS_REQUESTED',\n LoadInstrumentsSucceeded = 'LOAD_INSTRUMENTS_SUCCEEDED',\n LoadInstrumentsFailed = 'LOAD_INSTRUMENTS_FAILED',\n\n DeleteInstrumentRequested = 'DELETE_INSTRUMENT_REQUESTED',\n DeleteInstrumentSucceeded = 'DELETE_INSTRUMENT_SUCCEEDED',\n DeleteInstrumentFailed = 'DELETE_INSTRUMENT_FAILED',\n}\n\nexport type InstrumentAction = LoadInstrumentsAction | DeleteInstrumentAction;\n\nexport type LoadInstrumentsAction =\n | LoadInstrumentsRequestedAction\n | LoadInstrumentsSucceededAction\n | LoadInstrumentsFailedAction;\n\nexport type DeleteInstrumentAction =\n | DeleteInstrumentRequestedAction\n | DeleteInstrumentSucceededAction\n | DeleteInstrumentFailedAction;\n\nexport interface LoadInstrumentsRequestedAction extends Action {\n type: InstrumentActionType.LoadInstrumentsRequested;\n}\n\nexport interface LoadInstrumentsSucceededAction\n extends Action {\n type: InstrumentActionType.LoadInstrumentsSucceeded;\n}\n\nexport interface LoadInstrumentsFailedAction extends Action {\n type: InstrumentActionType.LoadInstrumentsFailed;\n}\n\nexport interface DeleteInstrumentRequestedAction extends Action {\n type: InstrumentActionType.DeleteInstrumentRequested;\n}\n\nexport interface DeleteInstrumentSucceededAction\n extends Action {\n type: InstrumentActionType.DeleteInstrumentSucceeded;\n}\n\nexport interface DeleteInstrumentFailedAction extends Action {\n type: InstrumentActionType.DeleteInstrumentFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { PaymentStrategyAction, PaymentStrategyActionType } from './payment-strategy-actions';\nimport PaymentStrategyState, {\n DEFAULT_STATE,\n PaymentStrategyDataState,\n PaymentStrategyErrorsState,\n PaymentStrategyStatusesState,\n} from './payment-strategy-state';\n\nexport default function paymentStrategyReducer(\n state: PaymentStrategyState = DEFAULT_STATE,\n action: Action,\n): PaymentStrategyState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentStrategyDataState = DEFAULT_STATE.data,\n action: PaymentStrategyAction,\n): PaymentStrategyDataState {\n switch (action.type) {\n case PaymentStrategyActionType.InitializeSucceeded: {\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n const initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n\n return objectMerge(data, {\n [initializeMethodId]: {\n isInitialized: true,\n },\n });\n }\n\n break;\n }\n\n case PaymentStrategyActionType.DeinitializeSucceeded: {\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n const initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n\n return objectMerge(data, {\n [initializeMethodId]: {\n isInitialized: false,\n },\n });\n }\n }\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: PaymentStrategyErrorsState = DEFAULT_STATE.errors,\n action: PaymentStrategyAction,\n): PaymentStrategyErrorsState {\n switch (action.type) {\n case PaymentStrategyActionType.InitializeRequested:\n case PaymentStrategyActionType.InitializeSucceeded:\n return objectMerge(errors, {\n initializeError: undefined,\n initializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.InitializeFailed: {\n let initializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(errors, {\n initializeError: action.payload,\n initializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.DeinitializeRequested:\n case PaymentStrategyActionType.DeinitializeSucceeded:\n return objectMerge(errors, {\n deinitializeError: undefined,\n deinitializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.DeinitializeFailed: {\n let deinitializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n deinitializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(errors, {\n deinitializeError: action.payload,\n deinitializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.ExecuteRequested:\n case PaymentStrategyActionType.ExecuteSucceeded:\n return objectMerge(errors, {\n executeError: undefined,\n executeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.ExecuteFailed:\n return objectMerge(errors, {\n executeError: action.payload,\n executeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.FinalizeRequested:\n case PaymentStrategyActionType.FinalizeSucceeded:\n return objectMerge(errors, {\n finalizeError: undefined,\n finalizeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.FinalizeFailed:\n return objectMerge(errors, {\n finalizeError: action.payload,\n finalizeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.WidgetInteractionStarted:\n case PaymentStrategyActionType.WidgetInteractionFinished:\n return objectMerge(errors, {\n widgetInteractionError: undefined,\n widgetInteractionMethodId: undefined,\n });\n\n case PaymentStrategyActionType.WidgetInteractionFailed:\n return objectMerge(errors, {\n widgetInteractionError: action.payload,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: PaymentStrategyStatusesState = DEFAULT_STATE.statuses,\n action: PaymentStrategyAction,\n): PaymentStrategyStatusesState {\n switch (action.type) {\n case PaymentStrategyActionType.InitializeRequested: {\n let initializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(statuses, {\n isInitializing: true,\n initializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.InitializeFailed:\n case PaymentStrategyActionType.InitializeSucceeded:\n return objectMerge(statuses, {\n isInitializing: false,\n initializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.DeinitializeRequested: {\n let deinitializeMethodId = action.meta && action.meta.methodId;\n\n if (action.meta) {\n const { methodId, gatewayId } = action.meta;\n\n deinitializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n }\n\n return objectMerge(statuses, {\n isDeinitializing: true,\n deinitializeMethodId,\n });\n }\n\n case PaymentStrategyActionType.DeinitializeFailed:\n case PaymentStrategyActionType.DeinitializeSucceeded:\n return objectMerge(statuses, {\n isDeinitializing: false,\n deinitializeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.ExecuteRequested:\n return objectMerge(statuses, {\n isExecuting: true,\n executeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.ExecuteFailed:\n case PaymentStrategyActionType.ExecuteSucceeded:\n return objectMerge(statuses, {\n isExecuting: false,\n executeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.FinalizeRequested:\n return objectMerge(statuses, {\n isFinalizing: true,\n finalizeMethodId: action.meta && action.meta.methodId,\n });\n\n case PaymentStrategyActionType.FinalizeFailed:\n case PaymentStrategyActionType.FinalizeSucceeded:\n return objectMerge(statuses, {\n isFinalizing: false,\n finalizeMethodId: undefined,\n });\n\n case PaymentStrategyActionType.WidgetInteractionStarted:\n return objectMerge(statuses, {\n isWidgetInteracting: true,\n widgetInteractionMethodId: action.meta.methodId,\n });\n\n case PaymentStrategyActionType.WidgetInteractionFinished:\n case PaymentStrategyActionType.WidgetInteractionFailed:\n return objectMerge(statuses, {\n isWidgetInteracting: false,\n widgetInteractionMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import PaymentInstrument, { VaultAccessToken } from './instrument';\n\nexport default interface InstrumentState {\n data?: PaymentInstrument[];\n meta?: InstrumentMeta;\n errors: InstrumentErrorState;\n statuses: InstrumentStatusState;\n}\n\nexport interface InstrumentErrorState {\n deleteError?: Error;\n failedInstrument?: string;\n loadError?: Error;\n vaultError?: Error;\n}\n\nexport interface InstrumentStatusState {\n isDeleting?: boolean;\n isLoading?: boolean;\n isVaulting?: boolean;\n deletingInstrument?: string;\n}\n\nexport type InstrumentMeta = VaultAccessToken;\n\nexport const DEFAULT_STATE = {\n data: [],\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { AmazonPayRemoteCheckout } from './methods';\n\nexport enum RemoteCheckoutActionType {\n ForgetCheckoutRemoteCustomerRequested = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED',\n ForgetCheckoutRemoteCustomerSucceeded = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED',\n ForgetCheckoutRemoteCustomerFailed = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED',\n\n InitializeRemoteBillingRequested = 'INITIALIZE_REMOTE_BILLING_REQUESTED',\n InitializeRemoteBillingSucceeded = 'INITIALIZE_REMOTE_BILLING_SUCCEEDED',\n InitializeRemoteBillingFailed = 'INITIALIZE_REMOTE_BILLING_FAILED',\n\n InitializeRemoteShippingRequested = 'INITIALIZE_REMOTE_SHIPPING_REQUESTED',\n InitializeRemoteShippingSucceeded = 'INITIALIZE_REMOTE_SHIPPING_SUCCEEDED',\n InitializeRemoteShippingFailed = 'INITIALIZE_REMOTE_SHIPPING_FAILED',\n\n InitializeRemotePaymentRequested = 'INITIALIZE_REMOTE_PAYMENT_REQUESTED',\n InitializeRemotePaymentSucceeded = 'INITIALIZE_REMOTE_PAYMENT_SUCCEEDED',\n InitializeRemotePaymentFailed = 'INITIALIZE_REMOTE_PAYMENT_FAILED',\n\n LoadRemoteSettingsRequested = 'LOAD_REMOTE_SETTINGS_REQUESTED',\n LoadRemoteSettingsSucceeded = 'LOAD_REMOTE_SETTINGS_SUCCEEDED',\n LoadRemoteSettingsFailed = 'LOAD_REMOTE_SETTINGS_FAILED',\n\n SignOutRemoteCustomerRequested = 'SIGN_OUT_REMOTE_CUSTOMER_REQUESTED',\n SignOutRemoteCustomerSucceeded = 'SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED',\n SignOutRemoteCustomerFailed = 'SIGN_OUT_REMOTE_CUSTOMER_FAILED',\n\n UpdateRemoteCheckout = 'UPDATE_REMOTE_CHECKOUT',\n}\n\nexport type RemoteCheckoutAction =\n | ForgetCheckoutRemoteCustomerAction\n | InitializeRemoteBillingAction\n | InitializeRemoteShippingAction\n | InitializeRemotePaymentAction\n | SignOutRemoteCustomerAction\n | LoadRemoteSettingsAction\n | UpdateRemoteCheckoutAction;\n\nexport type ForgetCheckoutRemoteCustomerAction =\n | ForgetCheckoutRemoteCustomerRequestedAction\n | ForgetCheckoutRemoteCustomerSucceededAction\n | ForgetCheckoutRemoteCustomerFailedAction;\n\nexport interface ForgetCheckoutRemoteCustomerRequestedAction extends Action {\n type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerRequested;\n}\n\nexport interface ForgetCheckoutRemoteCustomerSucceededAction extends Action {\n type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerSucceeded;\n}\n\nexport interface ForgetCheckoutRemoteCustomerFailedAction extends Action {\n type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerFailed;\n}\n\nexport type InitializeRemoteBillingAction =\n | InitializeRemoteBillingSucceededAction\n | InitializeRemoteBillingFailedAction\n | InitializeRemoteBillingRequestedAction;\n\nexport interface InitializeRemoteBillingSucceededAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteBillingSucceeded;\n}\n\nexport interface InitializeRemoteBillingFailedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteBillingFailed;\n}\n\nexport interface InitializeRemoteBillingRequestedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteBillingRequested;\n}\n\nexport type InitializeRemoteShippingAction =\n | InitializeRemoteShippingSucceededAction\n | InitializeRemoteShippingFailedAction\n | InitializeRemoteShippingRequestedAction;\n\nexport interface InitializeRemoteShippingSucceededAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteShippingSucceeded;\n}\n\nexport interface InitializeRemoteShippingFailedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteShippingFailed;\n}\n\nexport interface InitializeRemoteShippingRequestedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemoteShippingRequested;\n}\n\nexport type InitializeRemotePaymentAction =\n | InitializeRemotePaymentSucceededAction\n | InitializeRemotePaymentFailedAction\n | InitializeRemotePaymentRequestedAction;\n\nexport interface InitializeRemotePaymentSucceededAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemotePaymentSucceeded;\n}\n\nexport interface InitializeRemotePaymentFailedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemotePaymentFailed;\n}\n\nexport interface InitializeRemotePaymentRequestedAction extends Action {\n type: RemoteCheckoutActionType.InitializeRemotePaymentRequested;\n}\n\nexport type SignOutRemoteCustomerAction =\n | SignOutRemoteCustomerSucceededAction\n | SignOutRemoteCustomerFailedAction\n | SignOutRemoteCustomerRequestedAction;\n\nexport interface SignOutRemoteCustomerSucceededAction extends Action {\n type: RemoteCheckoutActionType.SignOutRemoteCustomerSucceeded;\n}\n\nexport interface SignOutRemoteCustomerFailedAction extends Action {\n type: RemoteCheckoutActionType.SignOutRemoteCustomerFailed;\n}\n\nexport interface SignOutRemoteCustomerRequestedAction extends Action {\n type: RemoteCheckoutActionType.SignOutRemoteCustomerRequested;\n}\n\nexport type LoadRemoteSettingsAction =\n | LoadRemoteSettingsSucceededAction\n | LoadRemoteSettingsRequestedAction\n | LoadRemoteSettingsFailedAction;\n\nexport interface LoadRemoteSettingsSucceededAction extends Action {\n type: RemoteCheckoutActionType.LoadRemoteSettingsSucceeded;\n}\n\nexport interface LoadRemoteSettingsRequestedAction extends Action {\n type: RemoteCheckoutActionType.LoadRemoteSettingsRequested;\n}\n\nexport interface LoadRemoteSettingsFailedAction extends Action {\n type: RemoteCheckoutActionType.LoadRemoteSettingsFailed;\n}\n\nexport interface UpdateRemoteCheckoutAction extends Action {\n type: RemoteCheckoutActionType.UpdateRemoteCheckout;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../../common/error';\nimport { arrayReplace, objectMerge, objectSet } from '../../common/utility';\n\nimport PaymentInstrument from './instrument';\nimport { InstrumentAction, InstrumentActionType } from './instrument-actions';\nimport InstrumentState, {\n DEFAULT_STATE,\n InstrumentErrorState,\n InstrumentMeta,\n InstrumentStatusState,\n} from './instrument-state';\n\nexport default function instrumentReducer(\n state: InstrumentState = DEFAULT_STATE,\n action: Action,\n): InstrumentState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n meta: metaReducer,\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PaymentInstrument[] = DEFAULT_STATE.data,\n action: InstrumentAction,\n): PaymentInstrument[] {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsSucceeded:\n return arrayReplace(data, (action.payload && action.payload.vaultedInstruments) || []);\n\n default:\n return data;\n }\n}\n\nfunction metaReducer(\n meta: InstrumentMeta | undefined,\n action: InstrumentAction,\n): InstrumentMeta | undefined {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsSucceeded:\n case InstrumentActionType.DeleteInstrumentSucceeded:\n return objectMerge(meta, action.meta);\n\n default:\n return meta;\n }\n}\n\nfunction errorsReducer(\n errors: InstrumentErrorState = DEFAULT_STATE.errors,\n action: InstrumentAction,\n): InstrumentErrorState {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsRequested:\n case InstrumentActionType.LoadInstrumentsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case InstrumentActionType.DeleteInstrumentRequested:\n case InstrumentActionType.DeleteInstrumentSucceeded:\n return objectMerge(errors, {\n deleteError: undefined,\n failedInstrument: undefined,\n });\n\n case InstrumentActionType.LoadInstrumentsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case InstrumentActionType.DeleteInstrumentFailed:\n return objectMerge(errors, {\n deleteError: action.payload,\n failedInstrument: action.meta.instrumentId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: InstrumentStatusState = DEFAULT_STATE.statuses,\n action: InstrumentAction,\n): InstrumentStatusState {\n switch (action.type) {\n case InstrumentActionType.LoadInstrumentsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case InstrumentActionType.DeleteInstrumentRequested:\n return objectMerge(statuses, {\n isDeleting: true,\n deletingInstrument: action.meta.instrumentId,\n });\n\n case InstrumentActionType.LoadInstrumentsSucceeded:\n case InstrumentActionType.LoadInstrumentsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case InstrumentActionType.DeleteInstrumentSucceeded:\n case InstrumentActionType.DeleteInstrumentFailed:\n return objectMerge(statuses, {\n isDeleting: false,\n deletingInstrument: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { AmazonPayRemoteCheckout } from './methods';\n\nexport default interface RemoteCheckoutState {\n data: RemoteCheckoutStateData;\n}\n\nexport interface RemoteCheckoutStateData {\n amazon?: AmazonPayRemoteCheckout;\n}\n\nexport const DEFAULT_STATE: RemoteCheckoutState = {\n data: {},\n};\n","import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport RemoteCheckout from './remote-checkout';\nimport { RemoteCheckoutAction, RemoteCheckoutActionType } from './remote-checkout-actions';\nimport RemoteCheckoutState, {\n DEFAULT_STATE,\n RemoteCheckoutStateData,\n} from './remote-checkout-state';\n\nexport default function remoteCheckoutReducer(\n state: RemoteCheckoutState = DEFAULT_STATE,\n action: RemoteCheckoutAction,\n): RemoteCheckoutState {\n if (!action.meta || !action.meta.methodId) {\n return state;\n }\n\n const reducer = combineReducers({\n data: combineReducers({\n [action.meta.methodId]: dataReducer,\n }),\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(data: RemoteCheckout, action: RemoteCheckoutAction): RemoteCheckout {\n switch (action.type) {\n case RemoteCheckoutActionType.InitializeRemoteBillingSucceeded:\n return objectSet(data, 'billing' as any, action.payload && action.payload.billing);\n\n case RemoteCheckoutActionType.InitializeRemoteShippingSucceeded:\n return objectSet(data, 'shipping' as any, action.payload && action.payload.shipping);\n\n case RemoteCheckoutActionType.LoadRemoteSettingsSucceeded:\n return objectSet(data, 'settings', action.payload);\n\n case RemoteCheckoutActionType.UpdateRemoteCheckout:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n","import Consignment from './consignment';\n\nexport default interface ConsignmentState {\n data?: Consignment[];\n errors: ConsignmentErrorsState;\n statuses: ConsignmentStatusesState;\n}\n\nexport interface ConsignmentErrorsState {\n loadError?: Error;\n loadShippingOptionsError?: Error;\n createError?: Error;\n updateError: { [key: string]: Error | undefined };\n deleteError: { [key: string]: Error | undefined };\n updateShippingOptionError: { [key: string]: Error | undefined };\n}\n\nexport interface ConsignmentStatusesState {\n isLoading?: boolean;\n isLoadingShippingOptions?: boolean;\n isCreating?: boolean;\n isUpdating: { [key: string]: boolean };\n isDeleting: { [key: string]: boolean };\n isUpdatingShippingOption: { [key: string]: boolean };\n}\n\nexport const DEFAULT_STATE: ConsignmentState = {\n errors: {\n updateShippingOptionError: {},\n updateError: {},\n deleteError: {},\n },\n statuses: {\n isUpdating: {},\n isUpdatingShippingOption: {},\n isDeleting: {},\n },\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { PickupOptionMeta, PickupOptionResult } from './pickup-option';\n\nexport enum PickupOptionActionType {\n LoadPickupOptionsRequested = 'LOAD_PICKUP_OPTIONS_REQUESTED',\n LoadPickupOptionsSucceeded = 'LOAD_PICKUP_OPTIONS_SUCCEEDED',\n LoadPickupOptionsFailed = 'LOAD_PICKUP_OPTIONS_FAILED',\n}\n\nexport type LoadPickupOptionsAction =\n | PickupOptionRequestedAction\n | LoadPickupOptionsSucceededAction\n | LoadPickupOptionsFailedAction;\n\nexport interface PickupOptionRequestedAction extends Action {\n type: PickupOptionActionType.LoadPickupOptionsRequested;\n}\n\nexport interface LoadPickupOptionsSucceededAction\n extends Action {\n type: PickupOptionActionType.LoadPickupOptionsSucceeded;\n}\n\nexport interface LoadPickupOptionsFailedAction extends Action {\n type: PickupOptionActionType.LoadPickupOptionsFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutAction, CheckoutActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectMerge, objectSet } from '../common/utility';\nimport { CouponAction, CouponActionType } from '../coupon';\nimport { CustomerAction, CustomerActionType } from '../customer';\n\nimport Consignment from './consignment';\nimport { ConsignmentAction, ConsignmentActionType } from './consignment-actions';\nimport ConsignmentState, {\n ConsignmentErrorsState,\n ConsignmentStatusesState,\n DEFAULT_STATE,\n} from './consignment-state';\n\nexport default function consignmentReducer(\n state: ConsignmentState = DEFAULT_STATE,\n action: Action,\n): ConsignmentState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Consignment[] | undefined,\n action: ConsignmentAction | CheckoutAction | CouponAction | CustomerAction,\n): Consignment[] | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n return arrayReplace(data, action.payload && action.payload.consignments);\n\n case CustomerActionType.SignOutCustomerSucceeded:\n return arrayReplace(data, []);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: ConsignmentErrorsState = DEFAULT_STATE.errors,\n action: ConsignmentAction | CheckoutAction,\n): ConsignmentErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case ConsignmentActionType.LoadShippingOptionsRequested:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n case ConsignmentActionType.LoadShippingOptionsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case ConsignmentActionType.CreateConsignmentsRequested:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n return objectSet(errors, 'createError', undefined);\n\n case ConsignmentActionType.CreateConsignmentsFailed:\n return objectSet(errors, 'createError', action.payload);\n\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.UpdateConsignmentRequested:\n if (action.meta) {\n return objectMerge(errors, {\n updateError: {\n [action.meta.id]: undefined,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.UpdateConsignmentFailed:\n if (action.meta) {\n return objectMerge(errors, {\n updateError: {\n [action.meta.id]: action.payload,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentRequested:\n if (action.meta) {\n return objectMerge(errors, {\n deleteError: {\n [action.meta.id]: undefined,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.DeleteConsignmentFailed:\n if (action.meta) {\n return objectMerge(errors, {\n deleteError: {\n [action.meta.id]: action.payload,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.UpdateShippingOptionRequested:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n if (action.meta) {\n return objectMerge(errors, {\n updateShippingOptionError: {\n [action.meta.id]: undefined,\n },\n });\n }\n\n return errors;\n\n case ConsignmentActionType.UpdateShippingOptionFailed:\n if (action.meta) {\n return objectMerge(errors, {\n updateShippingOptionError: {\n [action.meta.id]: action.payload,\n },\n });\n }\n\n return errors;\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ConsignmentStatusesState = DEFAULT_STATE.statuses,\n action: ConsignmentAction | CheckoutAction,\n): ConsignmentStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ConsignmentActionType.LoadShippingOptionsRequested:\n return objectSet(statuses, 'isLoadingShippingOptions', true);\n\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(statuses, 'isLoading', false);\n\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case ConsignmentActionType.LoadShippingOptionsFailed:\n return objectSet(statuses, 'isLoadingShippingOptions', false);\n\n case ConsignmentActionType.CreateConsignmentsRequested:\n return objectSet(statuses, 'isCreating', true);\n\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.CreateConsignmentsFailed:\n return objectSet(statuses, 'isCreating', false);\n\n case ConsignmentActionType.UpdateConsignmentRequested:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdating: {\n [action.meta.id]: true,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.UpdateConsignmentFailed:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdating: {\n [action.meta.id]: false,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.DeleteConsignmentRequested:\n if (action.meta) {\n return objectMerge(statuses, {\n isDeleting: {\n [action.meta.id]: true,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentFailed:\n if (action.meta) {\n return objectMerge(statuses, {\n isDeleting: {\n [action.meta.id]: false,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.UpdateShippingOptionRequested:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdatingShippingOption: {\n [action.meta.id]: true,\n },\n });\n }\n\n return statuses;\n\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case ConsignmentActionType.UpdateShippingOptionFailed:\n if (action.meta) {\n return objectMerge(statuses, {\n isUpdatingShippingOption: {\n [action.meta.id]: false,\n },\n });\n }\n\n return statuses;\n\n default:\n return statuses;\n }\n}\n","/**\n * Takes a nested object and flattens it.\n */\nexport default function objectFlatten(\n object: { [key: string]: any },\n parent?: string,\n): { [key: string]: any } {\n const flattened: { [key: string]: any } = {};\n\n Object.keys(object).forEach((key: string) => {\n const value = object[key];\n const keyString = parent ? `${parent}.${key}` : key;\n\n if (typeof value === 'object') {\n Object.assign(flattened, objectFlatten(value, keyString));\n } else {\n flattened[keyString] = value;\n }\n });\n\n return flattened;\n}\n","export default function objectWithSortedKeys(object: { [key: string]: any }) {\n const keys = Object.keys(object);\n const sortedKeys = keys.sort();\n\n const sortedArray = sortedKeys.reduce(\n (previous, current) => ({\n ...previous,\n [current]: object[current],\n }),\n {},\n );\n\n return sortedArray;\n}\n","import { PickupOptionQueryMap } from './pickup-option';\n\nexport default interface PickupOptionState {\n data?: PickupOptionQueryMap;\n errors: PickupOptionErrorsState;\n statuses: PickupOptionStatusesState;\n}\n\nexport interface PickupOptionErrorsState {\n loadError?: Error;\n}\n\nexport interface PickupOptionStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: PickupOptionState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Country } from '../geography';\n\nexport enum ShippingCountryActionType {\n LoadShippingCountriesRequested = 'LOAD_SHIPPING_COUNTRIES_REQUESTED',\n LoadShippingCountriesSucceeded = 'LOAD_SHIPPING_COUNTRIES_SUCCEEDED',\n LoadShippingCountriesFailed = 'LOAD_SHIPPING_COUNTRIES_FAILED',\n}\n\nexport type LoadShippingCountriesAction =\n | LoadShippingCountriesRequestedAction\n | LoadShippingCountriesSucceededAction\n | LoadShippingCountriesFailedAction;\n\nexport interface LoadShippingCountriesRequestedAction extends Action {\n type: ShippingCountryActionType.LoadShippingCountriesRequested;\n}\n\nexport interface LoadShippingCountriesSucceededAction extends Action {\n type: ShippingCountryActionType.LoadShippingCountriesSucceeded;\n}\n\nexport interface LoadShippingCountriesFailedAction extends Action {\n type: ShippingCountryActionType.LoadShippingCountriesFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectFlatten, objectSet, objectWithSortedKeys } from '../common/utility';\n\nimport { PickupOptionQueryMap } from './pickup-option';\nimport { LoadPickupOptionsAction, PickupOptionActionType } from './pickup-option-actions';\nimport PickupOptionState, {\n DEFAULT_STATE,\n PickupOptionErrorsState,\n PickupOptionStatusesState,\n} from './pickup-option-state';\n\nexport default function pickupOptionReducer(\n state: PickupOptionState = DEFAULT_STATE,\n action: Action,\n): PickupOptionState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: PickupOptionQueryMap | undefined,\n action: LoadPickupOptionsAction,\n): PickupOptionQueryMap | undefined {\n switch (action.type) {\n case PickupOptionActionType.LoadPickupOptionsSucceeded:\n if (action.meta) {\n const optionQuery = {\n consignmentId: action.meta.consignmentId,\n searchArea: action.meta.searchArea,\n };\n const flattenedMeta = objectFlatten(optionQuery);\n const sortedflattenedMeta = objectWithSortedKeys(flattenedMeta);\n const keyString = btoa(`${JSON.stringify(sortedflattenedMeta)}`);\n\n return objectSet(data, keyString, action.payload);\n }\n\n break;\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(errors: PickupOptionErrorsState = DEFAULT_STATE.errors, action: Action) {\n switch (action.type) {\n case PickupOptionActionType.LoadPickupOptionsRequested:\n case PickupOptionActionType.LoadPickupOptionsSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case PickupOptionActionType.LoadPickupOptionsFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: PickupOptionStatusesState = DEFAULT_STATE.statuses,\n action: Action,\n) {\n switch (action.type) {\n case PickupOptionActionType.LoadPickupOptionsRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case PickupOptionActionType.LoadPickupOptionsSucceeded:\n case PickupOptionActionType.LoadPickupOptionsFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","import { Country } from '../geography';\n\nexport default interface ShippingCountryState {\n data?: Country[];\n errors: ShippingCountryErrorsState;\n statuses: ShippingCountryStatusesState;\n}\n\nexport interface ShippingCountryErrorsState {\n loadError?: Error;\n}\n\nexport interface ShippingCountryStatusesState {\n isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ShippingCountryState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nexport enum ShippingStrategyActionType {\n UpdateAddressFailed = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED',\n UpdateAddressRequested = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED',\n UpdateAddressSucceeded = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED',\n SelectOptionFailed = 'SHIPPING_STRATEGY_SELECT_OPTION_FAILED',\n SelectOptionRequested = 'SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED',\n SelectOptionSucceeded = 'SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED',\n InitializeFailed = 'SHIPPING_STRATEGY_INITIALIZE_FAILED',\n InitializeRequested = 'SHIPPING_STRATEGY_INITIALIZE_REQUESTED',\n InitializeSucceeded = 'SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED',\n DeinitializeFailed = 'SHIPPING_STRATEGY_DEINITIALIZE_FAILED',\n DeinitializeRequested = 'SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED',\n DeinitializeSucceeded = 'SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED',\n WidgetInteractionStarted = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED',\n WidgetInteractionFinished = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED',\n WidgetInteractionFailed = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type ShippingStrategyAction =\n | ShippingStrategyUpdateAddressAction\n | ShippingStrategySelectOptionAction\n | ShippingStrategyInitializeAction\n | ShippingStrategyDeinitializeAction\n | ShippingStrategyWidgetAction;\n\nexport type ShippingStrategyUpdateAddressAction =\n | UpdateAddressRequestedAction\n | UpdateAddressSucceededAction\n | UpdateAddressFailedAction;\n\nexport type ShippingStrategySelectOptionAction =\n | SelectOptionRequestedAction\n | SelectOptionSucceededAction\n | SelectOptionFailedAction;\n\nexport type ShippingStrategyInitializeAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction;\n\nexport type ShippingStrategyDeinitializeAction =\n | DeinitializeRequestedAction\n | DeinitializeSucceededAction\n | DeinitializeFailedAction;\n\nexport type ShippingStrategyWidgetAction =\n | WidgetInteractionStartedAction\n | WidgetInteractionFinishedAction\n | WidgetInteractionFailedAction;\n\nexport interface UpdateAddressRequestedAction extends Action {\n type: ShippingStrategyActionType.UpdateAddressRequested;\n}\n\nexport interface UpdateAddressSucceededAction extends Action {\n type: ShippingStrategyActionType.UpdateAddressSucceeded;\n}\n\nexport interface UpdateAddressFailedAction extends Action {\n type: ShippingStrategyActionType.UpdateAddressFailed;\n}\n\nexport interface SelectOptionRequestedAction extends Action {\n type: ShippingStrategyActionType.SelectOptionRequested;\n}\n\nexport interface SelectOptionSucceededAction extends Action {\n type: ShippingStrategyActionType.SelectOptionSucceeded;\n}\n\nexport interface SelectOptionFailedAction extends Action {\n type: ShippingStrategyActionType.SelectOptionFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n type: ShippingStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: ShippingStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: ShippingStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n type: ShippingStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n type: ShippingStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action {\n type: ShippingStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n type: ShippingStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n type: ShippingStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action {\n type: ShippingStrategyActionType.WidgetInteractionFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { Country } from '../geography';\n\nimport { LoadShippingCountriesAction, ShippingCountryActionType } from './shipping-country-actions';\nimport ShippingCountryState, {\n DEFAULT_STATE,\n ShippingCountryErrorsState,\n ShippingCountryStatusesState,\n} from './shipping-country-state';\n\nexport default function shippingCountryReducer(\n state: ShippingCountryState = DEFAULT_STATE,\n action: Action,\n): ShippingCountryState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: Country[] | undefined,\n action: LoadShippingCountriesAction,\n): Country[] | undefined {\n switch (action.type) {\n case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n return arrayReplace(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: ShippingCountryErrorsState = DEFAULT_STATE.errors,\n action: LoadShippingCountriesAction,\n): ShippingCountryErrorsState {\n switch (action.type) {\n case ShippingCountryActionType.LoadShippingCountriesRequested:\n case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case ShippingCountryActionType.LoadShippingCountriesFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ShippingCountryStatusesState = DEFAULT_STATE.statuses,\n action: LoadShippingCountriesAction,\n): ShippingCountryStatusesState {\n switch (action.type) {\n case ShippingCountryActionType.LoadShippingCountriesRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n case ShippingCountryActionType.LoadShippingCountriesFailed:\n return objectSet(statuses, 'isLoading', false);\n\n default:\n return statuses;\n }\n}\n","export default interface ShippingStrategyState {\n data: ShippingStrategyDataState;\n errors: ShippingStrategyErrorsState;\n statuses: ShippingStrategyStatusesState;\n}\n\nexport interface ShippingStrategyDataState {\n [key: string]: {\n isInitialized: boolean;\n };\n}\n\nexport interface ShippingStrategyErrorsState {\n deinitializeError?: Error;\n deinitializeMethodId?: string;\n initializeError?: Error;\n initializeMethodId?: string;\n updateAddressError?: Error;\n updateAddressMethodId?: string;\n selectOptionError?: Error;\n selectOptionMethodId?: string;\n widgetInteractionError?: Error;\n widgetInteractionMethodId?: string;\n}\n\nexport interface ShippingStrategyStatusesState {\n deinitializeMethodId?: string;\n initializeMethodId?: string;\n isDeinitializing?: boolean;\n isInitializing?: boolean;\n isUpdatingAddress?: boolean;\n isSelectingOption?: boolean;\n updateAddressMethodId?: string;\n selectOptionMethodId?: string;\n isWidgetInteracting?: boolean;\n widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: ShippingStrategyState = {\n data: {},\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { SignInEmail } from './signin-email';\n\nexport enum SignInEmailActionType {\n SendSignInEmailRequested = 'SEND_SIGNIN_EMAIL_REQUESTED',\n SendSignInEmailSucceeded = 'SEND_SIGNIN_EMAIL_SUCCEEDED',\n SendSignInEmailFailed = 'SEND_SIGNIN_EMAIL_FAILED',\n}\nexport type SendSignInEmailAction =\n | SendSignInEmailRequestedAction\n | SendSignInEmailSucceededAction\n | SendSignInEmailFailedAction;\n\nexport interface SendSignInEmailRequestedAction extends Action {\n type: SignInEmailActionType.SendSignInEmailRequested;\n}\n\nexport interface SendSignInEmailSucceededAction extends Action {\n type: SignInEmailActionType.SendSignInEmailSucceeded;\n}\n\nexport interface SendSignInEmailFailedAction extends Action {\n type: SignInEmailActionType.SendSignInEmailFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { ShippingStrategyAction, ShippingStrategyActionType } from './shipping-strategy-actions';\nimport ShippingStrategyState, {\n DEFAULT_STATE,\n ShippingStrategyDataState,\n ShippingStrategyErrorsState,\n ShippingStrategyStatusesState,\n} from './shipping-strategy-state';\n\nexport default function shippingStrategyReducer(\n state: ShippingStrategyState = DEFAULT_STATE,\n action: Action,\n): ShippingStrategyState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: ShippingStrategyDataState = DEFAULT_STATE.data,\n action: ShippingStrategyAction,\n): ShippingStrategyDataState {\n switch (action.type) {\n case ShippingStrategyActionType.InitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: true,\n },\n });\n\n case ShippingStrategyActionType.DeinitializeSucceeded:\n return objectMerge(data, {\n [action.meta && action.meta.methodId]: {\n isInitialized: false,\n },\n });\n }\n\n return data;\n}\n\nfunction errorsReducer(\n errors: ShippingStrategyErrorsState = DEFAULT_STATE.errors,\n action: ShippingStrategyAction,\n): ShippingStrategyErrorsState {\n switch (action.type) {\n case ShippingStrategyActionType.InitializeRequested:\n case ShippingStrategyActionType.InitializeSucceeded:\n return objectMerge(errors, {\n initializeError: undefined,\n initializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.InitializeFailed:\n return objectMerge(errors, {\n initializeError: action.payload,\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.DeinitializeRequested:\n case ShippingStrategyActionType.DeinitializeSucceeded:\n return objectMerge(errors, {\n deinitializeError: undefined,\n deinitializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.DeinitializeFailed:\n return objectMerge(errors, {\n deinitializeError: action.payload,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.UpdateAddressRequested:\n case ShippingStrategyActionType.UpdateAddressSucceeded:\n return objectMerge(errors, {\n updateAddressError: undefined,\n updateAddressMethodId: undefined,\n });\n\n case ShippingStrategyActionType.UpdateAddressFailed:\n return objectMerge(errors, {\n updateAddressError: action.payload,\n updateAddressMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.SelectOptionRequested:\n case ShippingStrategyActionType.SelectOptionSucceeded:\n return objectMerge(errors, {\n selectOptionError: undefined,\n selectOptionMethodId: undefined,\n });\n\n case ShippingStrategyActionType.SelectOptionFailed:\n return objectMerge(errors, {\n selectOptionError: action.payload,\n selectOptionMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.WidgetInteractionStarted:\n case ShippingStrategyActionType.WidgetInteractionFinished:\n return objectMerge(errors, {\n widgetInteractionError: undefined,\n widgetInteractionMethodId: undefined,\n });\n\n case ShippingStrategyActionType.WidgetInteractionFailed:\n return objectMerge(errors, {\n widgetInteractionError: action.payload,\n widgetInteractionMethodId: action.meta && action.meta.methodId,\n });\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: ShippingStrategyStatusesState = DEFAULT_STATE.statuses,\n action: ShippingStrategyAction,\n): ShippingStrategyStatusesState {\n switch (action.type) {\n case ShippingStrategyActionType.InitializeRequested:\n return objectMerge(statuses, {\n isInitializing: true,\n initializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.InitializeFailed:\n case ShippingStrategyActionType.InitializeSucceeded:\n return objectMerge(statuses, {\n isInitializing: false,\n initializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.DeinitializeRequested:\n return objectMerge(statuses, {\n isDeinitializing: true,\n deinitializeMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.DeinitializeFailed:\n case ShippingStrategyActionType.DeinitializeSucceeded:\n return objectMerge(statuses, {\n isDeinitializing: false,\n deinitializeMethodId: undefined,\n });\n\n case ShippingStrategyActionType.UpdateAddressRequested:\n return objectMerge(statuses, {\n isUpdatingAddress: true,\n updateAddressMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.UpdateAddressFailed:\n case ShippingStrategyActionType.UpdateAddressSucceeded:\n return objectMerge(statuses, {\n isUpdatingAddress: false,\n updateAddressMethodId: undefined,\n });\n\n case ShippingStrategyActionType.SelectOptionRequested:\n return objectMerge(statuses, {\n isSelectingOption: true,\n selectOptionMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.SelectOptionFailed:\n case ShippingStrategyActionType.SelectOptionSucceeded:\n return objectMerge(statuses, {\n isSelectingOption: false,\n selectOptionMethodId: undefined,\n });\n\n case ShippingStrategyActionType.WidgetInteractionStarted:\n return objectMerge(statuses, {\n isWidgetInteracting: true,\n widgetInteractionMethodId: action.meta && action.meta.methodId,\n });\n\n case ShippingStrategyActionType.WidgetInteractionFinished:\n case ShippingStrategyActionType.WidgetInteractionFailed:\n return objectMerge(statuses, {\n isWidgetInteracting: false,\n widgetInteractionMethodId: undefined,\n });\n\n default:\n return statuses;\n }\n}\n","import { SignInEmail } from './signin-email';\n\nexport default interface SignInEmailState {\n data?: SignInEmail;\n errors: SignInEmailErrorsState;\n statuses: SignInEmailStatusesState;\n}\n\nexport interface SignInEmailErrorsState {\n sendError?: Error;\n}\n\nexport interface SignInEmailStatusesState {\n isSending?: boolean;\n}\n\nexport const DEFAULT_STATE: SignInEmailState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum StoreCreditActionType {\n ApplyStoreCreditRequested = 'APPLY_STORE_CREDIT_REQUESTED',\n ApplyStoreCreditSucceeded = 'APPLY_STORE_CREDIT_SUCCEEDED',\n ApplyStoreCreditFailed = 'APPLY_STORE_CREDIT_FAILED',\n}\n\nexport type StoreCreditAction = ApplyStoreCreditAction;\n\nexport type ApplyStoreCreditAction =\n | ApplyStoreCreditRequestedAction\n | ApplyStoreCreditSucceededAction\n | ApplyStoreCreditFailedAction;\n\nexport interface ApplyStoreCreditRequestedAction extends Action {\n type: StoreCreditActionType.ApplyStoreCreditRequested;\n}\n\nexport interface ApplyStoreCreditSucceededAction extends Action {\n type: StoreCreditActionType.ApplyStoreCreditSucceeded;\n}\n\nexport interface ApplyStoreCreditFailedAction\n extends Action> {\n type: StoreCreditActionType.ApplyStoreCreditFailed;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { SignInEmail } from './signin-email';\nimport { SendSignInEmailAction, SignInEmailActionType } from './signin-email-actions';\nimport SignInEmailState, {\n DEFAULT_STATE,\n SignInEmailErrorsState,\n SignInEmailStatusesState,\n} from './signin-email-state';\n\nexport default function signInEmailReducer(\n state: SignInEmailState = DEFAULT_STATE,\n action: Action,\n): SignInEmailState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: SignInEmail | undefined,\n action: SendSignInEmailAction,\n): SignInEmail | undefined {\n switch (action.type) {\n case SignInEmailActionType.SendSignInEmailSucceeded:\n return objectMerge(data, action.payload);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: SignInEmailErrorsState = DEFAULT_STATE.errors,\n action: SendSignInEmailAction,\n): SignInEmailErrorsState {\n switch (action.type) {\n case SignInEmailActionType.SendSignInEmailRequested:\n case SignInEmailActionType.SendSignInEmailSucceeded:\n return objectSet(errors, 'sendError', undefined);\n\n case SignInEmailActionType.SendSignInEmailFailed:\n return objectSet(errors, 'sendError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: SignInEmailStatusesState = DEFAULT_STATE.statuses,\n action: SendSignInEmailAction,\n): SignInEmailStatusesState {\n switch (action.type) {\n case SignInEmailActionType.SendSignInEmailRequested:\n return objectSet(statuses, 'isSending', true);\n\n case SignInEmailActionType.SendSignInEmailFailed:\n case SignInEmailActionType.SendSignInEmailSucceeded:\n return objectSet(statuses, 'isSending', false);\n\n default:\n return statuses;\n }\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\n\nimport { StoreCreditAction, StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditState, {\n StoreCreditErrorsState,\n StoreCreditStatusesState,\n} from './store-credit-state';\n\nconst DEFAULT_STATE: StoreCreditState = {\n errors: {},\n statuses: {},\n};\n\nexport default function storeCreditReducer(\n state: StoreCreditState = DEFAULT_STATE,\n action: Action,\n): StoreCreditState {\n const reducer = combineReducers({\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction errorsReducer(\n errors: StoreCreditErrorsState = DEFAULT_STATE.errors,\n action: StoreCreditAction,\n): StoreCreditErrorsState {\n switch (action.type) {\n case StoreCreditActionType.ApplyStoreCreditRequested:\n case StoreCreditActionType.ApplyStoreCreditSucceeded:\n return objectSet(errors, 'applyError', undefined);\n\n case StoreCreditActionType.ApplyStoreCreditFailed:\n return objectSet(errors, 'applyError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: StoreCreditStatusesState = DEFAULT_STATE.statuses,\n action: StoreCreditAction,\n): StoreCreditStatusesState {\n switch (action.type) {\n case StoreCreditActionType.ApplyStoreCreditRequested:\n return objectSet(statuses, 'isApplying', true);\n\n case StoreCreditActionType.ApplyStoreCreditSucceeded:\n case StoreCreditActionType.ApplyStoreCreditFailed:\n return objectSet(statuses, 'isApplying', false);\n\n default:\n return statuses;\n }\n}\n","export default interface SubscriptionsState {\n errors: SubscriptionsErrorsState;\n statuses: SubscriptionsStatusesState;\n}\n\nexport interface SubscriptionsErrorsState {\n updateError?: Error;\n}\n\nexport interface SubscriptionsStatusesState {\n isUpdating?: boolean;\n}\n\nexport const DEFAULT_STATE: SubscriptionsState = {\n errors: {},\n statuses: {},\n};\n","import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nexport enum SpamProtectionActionType {\n InitializeFailed = 'SPAM_PROTECTION_INITIALIZE_FAILED',\n InitializeSucceeded = 'SPAM_PROTECTION_INITIALIZE_SUCCEEDED',\n InitializeRequested = 'SPAM_PROTECTION_INITIALIZE_REQUESTED',\n VerifyCheckoutRequested = 'SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED',\n VerifyCheckoutSucceeded = 'SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED',\n VerifyCheckoutFailed = 'SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED',\n ExecuteRequested = 'SPAM_PROTECTION_EXECUTE_REQUESTED',\n ExecuteSucceeded = 'SPAM_PROTECTION_EXECUTE_SUCCEEDED',\n ExecuteFailed = 'SPAM_PROTECTION_EXECUTE_FAILED',\n}\n\nexport type SpamProtectionAction =\n | InitializeRequestedAction\n | InitializeSucceededAction\n | InitializeFailedAction\n | ExecuteRequestedAction\n | ExecuteSucceededAction\n | ExecuteFailedAction\n | CheckoutVerifyRequestedAction\n | CheckoutVerifyFailedAction\n | CheckoutVerifySucceededAction;\n\nexport interface InitializeRequestedAction extends Action {\n type: SpamProtectionActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n type: SpamProtectionActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action {\n type: SpamProtectionActionType.InitializeFailed;\n}\n\nexport interface ExecuteRequestedAction extends Action {\n type: SpamProtectionActionType.ExecuteRequested;\n}\n\nexport interface ExecuteSucceededAction extends Action<{ token: string }> {\n type: SpamProtectionActionType.ExecuteSucceeded;\n}\n\nexport interface ExecuteFailedAction extends Action {\n type: SpamProtectionActionType.ExecuteFailed;\n}\n\nexport interface CheckoutVerifyRequestedAction extends Action {\n type: SpamProtectionActionType.VerifyCheckoutRequested;\n}\n\nexport interface CheckoutVerifyFailedAction extends Action {\n type: SpamProtectionActionType.VerifyCheckoutFailed;\n}\n\nexport interface CheckoutVerifySucceededAction extends Action {\n type: SpamProtectionActionType.VerifyCheckoutSucceeded;\n}\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\nimport { SubscriptionsActionType, UpdateSubscriptionsAction } from '../subscription';\n\nimport SubscriptionsState, {\n DEFAULT_STATE,\n SubscriptionsErrorsState,\n SubscriptionsStatusesState,\n} from './subscriptions-state';\n\nexport default function subscriptionsReducer(\n state: SubscriptionsState = DEFAULT_STATE,\n action: Action,\n): SubscriptionsState {\n const reducer = combineReducers({\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction errorsReducer(\n errors: SubscriptionsErrorsState = DEFAULT_STATE.errors,\n action: UpdateSubscriptionsAction,\n): SubscriptionsErrorsState {\n switch (action.type) {\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n return objectSet(errors, 'updateError', undefined);\n\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n return objectSet(errors, 'updateError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: SubscriptionsStatusesState = DEFAULT_STATE.statuses,\n action: UpdateSubscriptionsAction,\n): SubscriptionsStatusesState {\n switch (action.type) {\n case SubscriptionsActionType.UpdateSubscriptionsRequested:\n return objectSet(statuses, 'isUpdating', true);\n\n case SubscriptionsActionType.UpdateSubscriptionsFailed:\n case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n return objectSet(statuses, 'isUpdating', false);\n\n default:\n return statuses;\n }\n}\n","import { Omit } from '../common/types';\n\nimport Checkout from './checkout';\n\nexport default interface CheckoutState {\n data?: CheckoutDataState;\n errors: CheckoutErrorsState;\n statuses: CheckoutStatusesState;\n}\n\nexport type CheckoutDataState = Omit<\n Checkout,\n 'billingAddress' | 'cart' | 'consignments' | 'coupons' | 'giftCertificates'\n>;\n\nexport interface CheckoutErrorsState {\n loadError?: Error;\n updateError?: Error;\n}\n\nexport interface CheckoutStatusesState {\n isExecutingSpamCheck?: boolean;\n isLoading?: boolean;\n isUpdating?: boolean;\n}\n\nexport const DEFAULT_STATE: CheckoutState = {\n errors: {},\n statuses: {},\n};\n","import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { BillingAddressAction, BillingAddressActionType } from '../billing';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\nimport {\n CouponAction,\n CouponActionType,\n GiftCertificateAction,\n GiftCertificateActionType,\n} from '../coupon';\nimport { OrderAction, OrderActionType } from '../order';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\nimport { SpamProtectionAction, SpamProtectionActionType } from '../spam-protection';\nimport { StoreCreditAction, StoreCreditActionType } from '../store-credit';\n\nimport { CheckoutAction, CheckoutActionType } from './checkout-actions';\nimport CheckoutState, {\n CheckoutDataState,\n CheckoutErrorsState,\n CheckoutStatusesState,\n DEFAULT_STATE,\n} from './checkout-state';\n\nexport default function checkoutReducer(\n state: CheckoutState = DEFAULT_STATE,\n action: Action,\n): CheckoutState {\n const reducer = combineReducers({\n data: dataReducer,\n errors: composeReducers(errorsReducer, clearErrorReducer),\n statuses: statusesReducer,\n });\n\n return reducer(state, action);\n}\n\nfunction dataReducer(\n data: CheckoutDataState | undefined,\n action:\n | CheckoutAction\n | BillingAddressAction\n | ConsignmentAction\n | CouponAction\n | GiftCertificateAction\n | OrderAction\n | SpamProtectionAction\n | StoreCreditAction,\n): CheckoutDataState | undefined {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutSucceeded:\n case CheckoutActionType.UpdateCheckoutSucceeded:\n case StoreCreditActionType.ApplyStoreCreditSucceeded:\n case BillingAddressActionType.UpdateBillingAddressSucceeded:\n case CouponActionType.ApplyCouponSucceeded:\n case CouponActionType.RemoveCouponSucceeded:\n case ConsignmentActionType.CreateConsignmentsSucceeded:\n case ConsignmentActionType.UpdateConsignmentSucceeded:\n case ConsignmentActionType.DeleteConsignmentSucceeded:\n case ConsignmentActionType.UpdateShippingOptionSucceeded:\n case ConsignmentActionType.LoadShippingOptionsSucceeded:\n case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n case SpamProtectionActionType.VerifyCheckoutSucceeded:\n return objectMerge(\n data,\n omit(action.payload, [\n 'billingAddress',\n 'cart',\n 'consignments',\n 'customer',\n 'coupons',\n 'giftCertificates',\n ]),\n ) as CheckoutDataState;\n\n case OrderActionType.SubmitOrderSucceeded:\n return objectSet(data, 'orderId', action.payload && action.payload.order.orderId);\n\n default:\n return data;\n }\n}\n\nfunction errorsReducer(\n errors: CheckoutErrorsState = DEFAULT_STATE.errors,\n action: CheckoutAction | OrderAction,\n): CheckoutErrorsState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(errors, 'loadError', undefined);\n\n case CheckoutActionType.LoadCheckoutFailed:\n return objectSet(errors, 'loadError', action.payload);\n\n case CheckoutActionType.UpdateCheckoutRequested:\n case CheckoutActionType.UpdateCheckoutSucceeded:\n return objectSet(errors, 'updateError', undefined);\n\n case CheckoutActionType.UpdateCheckoutFailed:\n return objectSet(errors, 'updateError', action.payload);\n\n default:\n return errors;\n }\n}\n\nfunction statusesReducer(\n statuses: CheckoutStatusesState = DEFAULT_STATE.statuses,\n action: CheckoutAction | OrderAction | SpamProtectionAction,\n): CheckoutStatusesState {\n switch (action.type) {\n case CheckoutActionType.LoadCheckoutRequested:\n return objectSet(statuses, 'isLoading', true);\n\n case CheckoutActionType.LoadCheckoutFailed:\n case CheckoutActionType.LoadCheckoutSucceeded:\n return objectSet(statuses, 'isLoading', false);\n\n case CheckoutActionType.UpdateCheckoutRequested:\n return objectSet(statuses, 'isUpdating', true);\n\n case CheckoutActionType.UpdateCheckoutFailed:\n case CheckoutActionType.UpdateCheckoutSucceeded:\n return objectSet(statuses, 'isUpdating', false);\n\n case SpamProtectionActionType.ExecuteRequested:\n return objectSet(statuses, 'isExecutingSpamCheck', true);\n\n case SpamProtectionActionType.ExecuteFailed:\n case SpamProtectionActionType.ExecuteSucceeded:\n return objectSet(statuses, 'isExecutingSpamCheck', false);\n\n default:\n return statuses;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/memoize\");","import StandardError from './standard-error';\n\nexport enum MissingDataErrorType {\n MissingBillingAddress,\n MissingCart,\n MissingCheckout,\n MissingConsignments,\n MissingCustomer,\n MissingCheckoutConfig,\n MissingOrder,\n MissingOrderConfig,\n MissingOrderId,\n MissingPayment,\n MissingPaymentId,\n MissingPaymentInstrument,\n MissingPaymentMethod,\n MissingPaymentRedirectUrl,\n MissingPaymentStatus,\n MissingPaymentToken,\n MissingShippingAddress,\n}\n\n/**\n * Throw this error when data that is expected to exist is missing. Usually it\n * is due to the fact that certain data has not been retrieved from or saved to\n * the server yet. And such data is required to perform certain actions.\n */\nexport default class MissingDataError extends StandardError {\n constructor(public subtype: MissingDataErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'MissingDataError';\n this.type = 'missing_data';\n }\n}\n\nfunction getErrorMessage(type: MissingDataErrorType): string {\n switch (type) {\n case MissingDataErrorType.MissingBillingAddress:\n return 'Unable to proceed because billing address data is unavailable.';\n\n case MissingDataErrorType.MissingCart:\n return 'Unable to proceed because cart data is unavailable.';\n\n case MissingDataErrorType.MissingConsignments:\n return 'Unable to proceed because consignments data is unavailable.';\n\n case MissingDataErrorType.MissingCheckout:\n return 'Unable to proceed because checkout data is unavailable.';\n\n case MissingDataErrorType.MissingCustomer:\n return 'Unable to proceed because customer data is unavailable.';\n\n case MissingDataErrorType.MissingCheckoutConfig:\n case MissingDataErrorType.MissingOrderConfig:\n return 'Unable to proceed because configuration data is unavailable.';\n\n case MissingDataErrorType.MissingOrder:\n return 'Unable to proceed because order data is unavailable.';\n\n case MissingDataErrorType.MissingOrderId:\n return 'Unable to proceed because order ID is unavailable or not generated yet.';\n\n case MissingDataErrorType.MissingPayment:\n return 'Unable to proceed because payment data is unavailable.';\n\n case MissingDataErrorType.MissingPaymentToken:\n return 'Unable to proceed because the token required to submit a payment is missing.';\n\n case MissingDataErrorType.MissingPaymentMethod:\n return 'Unable to proceed because payment method data is unavailable or not properly configured.';\n\n case MissingDataErrorType.MissingShippingAddress:\n return 'Unable to proceed because shipping address data is unavailable.';\n\n default:\n return 'Unable to proceed because the required data is unavailable.';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"reselect\");","import { createSelector as defaultSelectorCreator } from 'reselect';\n\nimport withMemoizedCombiner from './with-memoized-combiner';\n\n/**\n * This is a decorated version of Reselect's default `createSelector` function.\n * If the return value of the combiner function is a function, it will create a\n * memorized version of that function and return it instead.\n */\nexport default withMemoizedCombiner(defaultSelectorCreator);\n","import { memoize } from '@bigcommerce/memoize';\nimport { createSelector as defaultSelectorCreator } from 'reselect';\n\n/**\n * Decorate selector creators with the ability to memoize the return value of\n * their combiner if it is a function (which effectively works as a partially\n * applied combiner).\n */\nexport default function withMemoizedCombiner(\n creator: T,\n): T {\n return ((...args: any[]) => {\n const combiner = args.pop();\n\n // Reselect's default `createSelector` has many overloads. To avoid having\n // to redefine all of them, we're using `any` to bypass the typechecker.\n return (creator as any)(...args, (...combinerArgs: any[]) => {\n // Although there are many overloads, all of them have the last argument\n // as the combiner.\n const result = combiner(...combinerArgs);\n\n if (typeof result === 'function') {\n return memoize(result);\n }\n\n return result;\n });\n }) as T;\n}\n","export default function guard(value: T, errorFactory?: () => Error): NonNullable {\n if (value === undefined || value === null) {\n throw errorFactory ? errorFactory() : new Error('An unexpected error has occurred.');\n }\n\n return value as NonNullable;\n}\n","import { deepFreeze } from '@bigcommerce/data-store';\n\n// tslint:disable-next-line:ban-types\ntype FunctionProperties = { [K in keyof T]: T[K] extends Function ? T[K] : never };\n\nexport default function createFreezeProxy(target: T): T {\n return createProxy(\n target,\n (target, name) =>\n (...args: any[]) =>\n deepFreeze(target[name].call(target, ...args)),\n );\n}\n\nexport function createFreezeProxies(\n map: TMap,\n): TMap {\n return Object.keys(map).reduce((result, key) => {\n result[key] = createFreezeProxy(map[key]);\n\n return result;\n }, {} as { [key: string]: T }) as TMap;\n}\n\nfunction createProxy(\n target: T,\n trap: (target: FunctionProperties, name: keyof FunctionProperties, proxy: T) => any,\n): T {\n const proxy = Object.create(target);\n\n traversePrototypeOf(target, (prototype) => {\n Object.getOwnPropertyNames(prototype).forEach((name) => {\n if (\n name === 'constructor' ||\n typeof proxy[name] !== 'function' ||\n name.charAt(0) === '_'\n ) {\n return;\n }\n\n proxy[name] = trap(target as FunctionProperties, name as keyof T, proxy);\n });\n });\n\n return proxy;\n}\n\nfunction traversePrototypeOf(target: object, iteratee: (prototype: object) => void): void {\n let prototype = Object.getPrototypeOf(target);\n\n while (prototype) {\n iteratee(prototype);\n\n prototype = Object.getPrototypeOf(prototype);\n }\n}\n","export const HOSTED = 'PAYMENT_TYPE_HOSTED';\nexport const OFFLINE = 'PAYMENT_TYPE_OFFLINE';\n","export const ACKNOWLEDGE = 'ACKNOWLEDGE';\nexport const FINALIZE = 'FINALIZE';\nexport const INITIALIZE = 'INITIALIZE';\n","import PaymentInstrument from './instrument';\n\ninterface SupportedInstruments {\n [key: string]: Pick;\n}\n\nconst supportedInstruments: SupportedInstruments = {\n 'mollie.credit_card': {\n provider: 'mollie',\n method: 'credit_card',\n },\n 'adyenv2.scheme': {\n provider: 'adyenv2',\n method: 'scheme',\n },\n 'adyenv3.scheme': {\n provider: 'adyenv3',\n method: 'scheme',\n },\n 'adyenv2.bcmc': {\n provider: 'adyenv2',\n method: 'bcmc',\n },\n 'adyenv2.ideal': {\n provider: 'adyenv2',\n method: 'ideal',\n },\n 'adyenv2.sepadirectdebit': {\n provider: 'adyenv2',\n method: 'sepadirectdebit',\n },\n 'adyenv2.directEbanking': {\n provider: 'adyenv2',\n method: 'directEbanking',\n },\n 'adyenv2.giropay': {\n provider: 'adyenv2',\n method: 'giropay',\n },\n barclays: {\n provider: 'barclays',\n method: 'credit_card',\n },\n braintree: {\n provider: 'braintree',\n method: 'credit_card',\n },\n braintreepaypal: {\n provider: 'braintree',\n method: 'paypal',\n },\n braintreeach: {\n provider: 'braintree',\n method: 'ach',\n },\n authorizenet: {\n provider: 'authorizenet',\n method: 'credit_card',\n },\n elavon: {\n provider: 'elavon',\n method: 'credit_card',\n },\n checkoutcom: {\n provider: 'checkoutcom',\n method: 'credit_card',\n },\n 'checkoutcom.credit_card': {\n provider: 'checkoutcom',\n method: 'credit_card',\n },\n 'checkoutcom.card': {\n provider: 'checkoutcom',\n method: 'card',\n },\n sagepay: {\n provider: 'sagepay',\n method: 'credit_card',\n },\n stripe: {\n provider: 'stripe',\n method: 'credit_card',\n },\n 'stripev3.card': {\n provider: 'stripev3',\n method: 'card',\n },\n 'stripeupe.card': {\n provider: 'stripeupe',\n method: 'card',\n },\n cybersource: {\n provider: 'cybersource',\n method: 'credit_card',\n },\n cybersourcev2: {\n provider: 'cybersourcev2',\n method: 'credit_card',\n },\n bnz: {\n provider: 'bnz',\n method: 'credit_card',\n },\n converge: {\n provider: 'converge',\n method: 'credit_card',\n },\n bluesnapv2: {\n provider: 'bluesnapv2',\n method: 'credit_card',\n },\n 'bluesnapdirect.credit_card': {\n provider: 'bluesnapdirect',\n method: 'credit_card',\n },\n orbital: {\n provider: 'orbital',\n method: 'credit_card',\n },\n paymetric: {\n provider: 'paymetric',\n method: 'credit_card',\n },\n bolt: {\n provider: 'bolt',\n method: 'credit_card',\n },\n 'barclaycard.credit_card': {\n provider: 'barclaycard',\n method: 'credit_card',\n },\n digitalriver: {\n provider: 'digitalriver',\n method: 'credit_card',\n },\n moneris: {\n provider: 'moneris',\n method: 'credit_card',\n },\n cba_mpgs: {\n provider: 'cba_mpgs',\n method: 'credit_card',\n },\n worldpayaccess: {\n provider: 'worldpayaccess',\n method: 'credit_card',\n },\n};\n\nexport default supportedInstruments;\n","import { identity, isEqual, pickBy } from 'lodash';\n\nimport Address from './address';\n\nexport default function isAddressEqual(\n addressA: Partial
,\n addressB: Partial
,\n): boolean {\n return isEqual(normalize(addressA), normalize(addressB));\n}\n\nfunction normalize(address: Partial
): Partial
{\n return pickBy(\n {\n firstName: address.firstName,\n lastName: address.lastName,\n company: address.company,\n address1: address.address1,\n address2: address.address2,\n city: address.city,\n stateOrProvince: address.stateOrProvince,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n phone: address.phone,\n customFields: address.customFields,\n },\n identity,\n );\n}\n","import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nexport default interface StoreCreditState {\n errors: StoreCreditErrorsState;\n statuses: StoreCreditStatusesState;\n}\n\nexport interface StoreCreditErrorsState {\n applyError?: RequestError;\n}\n\nexport interface StoreCreditStatusesState {\n isApplying?: boolean;\n}\n\nexport const DEFAULT_STATE: StoreCreditState = {\n errors: {},\n statuses: {},\n};\n","import { createBillingAddressSelectorFactory } from '../billing';\nimport { createCartSelectorFactory } from '../cart';\nimport { createCheckoutButtonSelectorFactory } from '../checkout-buttons';\nimport { createFreezeProxies } from '../common/utility';\nimport { createConfigSelectorFactory } from '../config';\nimport { createCouponSelectorFactory, createGiftCertificateSelectorFactory } from '../coupon';\nimport { createCustomerSelectorFactory, createCustomerStrategySelectorFactory } from '../customer';\nimport { createExtensionSelectorFactory } from '../extension';\nimport { createFormSelectorFactory } from '../form';\nimport { createCountrySelectorFactory } from '../geography';\nimport { createOrderSelectorFactory } from '../order';\nimport { createOrderBillingAddressSelectorFactory } from '../order-billing-address';\nimport {\n createPaymentMethodSelectorFactory,\n createPaymentSelectorFactory,\n createPaymentStrategySelectorFactory,\n} from '../payment';\nimport { createInstrumentSelectorFactory } from '../payment/instrument';\nimport { createRemoteCheckoutSelectorFactory } from '../remote-checkout';\nimport {\n createConsignmentSelectorFactory,\n createPickupOptionSelectorFactory,\n createShippingAddressSelectorFactory,\n createShippingCountrySelectorFactory,\n createShippingStrategySelectorFactory,\n} from '../shipping';\nimport { createSignInEmailSelectorFactory } from '../signin-email';\nimport { createStoreCreditSelectorFactory } from '../store-credit';\nimport { createSubscriptionsSelectorFactory } from '../subscription';\n\nimport { createCheckoutSelectorFactory } from './checkout-selector';\nimport { CheckoutStoreOptions } from './checkout-store';\nimport CheckoutStoreState from './checkout-store-state';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport type InternalCheckoutSelectorsFactory = (\n state: CheckoutStoreState,\n options?: CheckoutStoreOptions,\n) => InternalCheckoutSelectors;\n\nexport function createInternalCheckoutSelectorsFactory(): InternalCheckoutSelectorsFactory {\n const createBillingAddressSelector = createBillingAddressSelectorFactory();\n const createCartSelector = createCartSelectorFactory();\n const createCheckoutButtonSelector = createCheckoutButtonSelectorFactory();\n const createConfigSelector = createConfigSelectorFactory();\n const createCountrySelector = createCountrySelectorFactory();\n const createCouponSelector = createCouponSelectorFactory();\n const createCustomerSelector = createCustomerSelectorFactory();\n const createCustomerStrategySelector = createCustomerStrategySelectorFactory();\n const createGiftCertificateSelector = createGiftCertificateSelectorFactory();\n const createInstrumentSelector = createInstrumentSelectorFactory();\n const createFormSelector = createFormSelectorFactory();\n const createPaymentMethodSelector = createPaymentMethodSelectorFactory();\n const createPaymentStrategySelector = createPaymentStrategySelectorFactory();\n const createPickupOptionSelector = createPickupOptionSelectorFactory();\n const createRemoteCheckoutSelector = createRemoteCheckoutSelectorFactory();\n const createShippingAddressSelector = createShippingAddressSelectorFactory();\n const createShippingCountrySelector = createShippingCountrySelectorFactory();\n const createShippingStrategySelector = createShippingStrategySelectorFactory();\n const createConsignmentSelector = createConsignmentSelectorFactory();\n const createCheckoutSelector = createCheckoutSelectorFactory();\n const createOrderSelector = createOrderSelectorFactory();\n const createOrderBillingAddressSelector = createOrderBillingAddressSelectorFactory();\n const createPaymentSelector = createPaymentSelectorFactory();\n const createStoreCreditSelector = createStoreCreditSelectorFactory();\n const createSubscriptionsSelector = createSubscriptionsSelectorFactory();\n const createSignInEmailSelector = createSignInEmailSelectorFactory();\n const createExtensionSelector = createExtensionSelectorFactory();\n\n return (state, options = {}) => {\n const billingAddress = createBillingAddressSelector(state.billingAddress);\n const cart = createCartSelector(state.cart);\n const checkoutButton = createCheckoutButtonSelector(state.checkoutButton);\n const countries = createCountrySelector(state.countries);\n const coupons = createCouponSelector(state.coupons);\n const customer = createCustomerSelector(state.customer);\n const customerStrategies = createCustomerStrategySelector(state.customerStrategies);\n const extensions = createExtensionSelector(state.extensions);\n const form = createFormSelector(state.formFields);\n const giftCertificates = createGiftCertificateSelector(state.giftCertificates);\n const instruments = createInstrumentSelector(state.instruments);\n const orderBillingAddress = createOrderBillingAddressSelector(state.orderBillingAddress);\n const paymentMethods = createPaymentMethodSelector(state.paymentMethods);\n const paymentStrategies = createPaymentStrategySelector(state.paymentStrategies);\n const pickupOptions = createPickupOptionSelector(state.pickupOptions);\n const remoteCheckout = createRemoteCheckoutSelector(state.remoteCheckout);\n const shippingAddress = createShippingAddressSelector(state.consignments);\n const shippingCountries = createShippingCountrySelector(state.shippingCountries);\n const shippingStrategies = createShippingStrategySelector(state.shippingStrategies);\n const subscriptions = createSubscriptionsSelector(state.subscriptions);\n const storeCredit = createStoreCreditSelector(state.storeCredit);\n const signInEmail = createSignInEmailSelector(state.signInEmail);\n\n // Compose selectors\n const consignments = createConsignmentSelector(state.consignments, cart);\n const checkout = createCheckoutSelector(\n state.checkout,\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n );\n const order = createOrderSelector(state.order, orderBillingAddress, coupons);\n const payment = createPaymentSelector(checkout, order);\n const config = createConfigSelector(state.config, state.formFields);\n\n const selectors = {\n billingAddress,\n cart,\n checkout,\n checkoutButton,\n config,\n consignments,\n countries,\n coupons,\n customer,\n customerStrategies,\n extensions,\n form,\n giftCertificates,\n instruments,\n order,\n orderBillingAddress,\n payment,\n paymentMethods,\n paymentStrategies,\n pickupOptions,\n remoteCheckout,\n shippingAddress,\n shippingCountries,\n shippingStrategies,\n signInEmail,\n subscriptions,\n storeCredit,\n };\n\n return options.shouldWarnMutation ? createFreezeProxies(selectors) : selectors;\n };\n}\n\nexport default function createInternalCheckoutSelectors(\n state: CheckoutStoreState,\n options?: CheckoutStoreOptions,\n): InternalCheckoutSelectors {\n return createInternalCheckoutSelectorsFactory()(state, options);\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport BillingAddress from './billing-address';\nimport BillingAddressState, { DEFAULT_STATE } from './billing-address-state';\n\nexport default interface BillingAddressSelector {\n getBillingAddress(): BillingAddress | undefined;\n getBillingAddressOrThrow(): BillingAddress;\n getUpdateError(): Error | undefined;\n getContinueAsGuestError(): Error | undefined;\n getLoadError(): Error | undefined;\n isUpdating(): boolean;\n isContinuingAsGuest(): boolean;\n isLoading(): boolean;\n}\n\nexport type BillingAddressSelectorFactory = (state: BillingAddressState) => BillingAddressSelector;\n\nexport function createBillingAddressSelectorFactory(): BillingAddressSelectorFactory {\n const getBillingAddress = createSelector(\n (state: BillingAddressState) => state.data,\n (data) => () => data,\n );\n\n const getBillingAddressOrThrow = createSelector(\n getBillingAddress,\n (getBillingAddress) => () => {\n return guard(\n getBillingAddress(),\n () => new MissingDataError(MissingDataErrorType.MissingBillingAddress),\n );\n },\n );\n\n const getUpdateError = createSelector(\n (state: BillingAddressState) => state.errors.updateError,\n (error) => () => error,\n );\n\n const getContinueAsGuestError = createSelector(\n (state: BillingAddressState) => state.errors.continueAsGuestError,\n (error) => () => error,\n );\n\n const getLoadError = createSelector(\n (state: BillingAddressState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isUpdating = createSelector(\n (state: BillingAddressState) => !!state.statuses.isUpdating,\n (status) => () => status,\n );\n\n const isContinuingAsGuest = createSelector(\n (state: BillingAddressState) => !!state.statuses.isContinuingAsGuest,\n (status) => () => status,\n );\n\n const isLoading = createSelector(\n (state: BillingAddressState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: BillingAddressState = DEFAULT_STATE): BillingAddressSelector => {\n return {\n getBillingAddress: getBillingAddress(state),\n getBillingAddressOrThrow: getBillingAddressOrThrow(state),\n getUpdateError: getUpdateError(state),\n getContinueAsGuestError: getContinueAsGuestError(state),\n getLoadError: getLoadError(state),\n isUpdating: isUpdating(state),\n isContinuingAsGuest: isContinuingAsGuest(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoize, memoizeOne } from '@bigcommerce/memoize';\nimport { find, some, values } from 'lodash';\n\nimport { createSelector } from '../common/selector';\n\nimport CheckoutButtonState, { DEFAULT_STATE } from './checkout-button-state';\nimport { CheckoutButtonMethodType } from './strategies';\n\nexport default interface CheckoutButtonSelector {\n getState(): CheckoutButtonState;\n isInitializing(methodId?: CheckoutButtonMethodType): boolean;\n isInitialized(methodId: CheckoutButtonMethodType, containerId?: string): boolean;\n isDeinitializing(methodId?: CheckoutButtonMethodType): boolean;\n getInitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\n getDeinitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\n}\n\nexport type CheckoutButtonSelectorFactory = (state: CheckoutButtonState) => CheckoutButtonSelector;\n\nexport function createCheckoutButtonSelectorFactory(): CheckoutButtonSelectorFactory {\n const getState = createSelector(\n (state: CheckoutButtonState) => state,\n (state) => () => state,\n );\n\n const isInitializing = createSelector(\n (state: CheckoutButtonState) => state.statuses,\n (statuses) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n if (methodId) {\n const method = statuses[methodId];\n\n return (method && method.isInitializing) === true;\n }\n\n return some(statuses, { isInitializing: true });\n }),\n );\n\n const isInitialized = createSelector(\n (state: CheckoutButtonState) => state.data,\n (data) =>\n memoize((methodId: CheckoutButtonMethodType, containerId?: string) => {\n const method = data[methodId];\n\n if (!method) {\n return false;\n }\n\n if (!containerId) {\n return some(\n method.initializedContainers,\n (isInitialized) => isInitialized === true,\n );\n }\n\n return method.initializedContainers[containerId] === true;\n }),\n );\n\n const isDeinitializing = createSelector(\n (state: CheckoutButtonState) => state.statuses,\n (statuses) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n if (methodId) {\n const method = statuses[methodId];\n\n return (method && method.isDeinitializing) === true;\n }\n\n return some(statuses, { isDeinitializing: true });\n }),\n );\n\n const getInitializeError = createSelector(\n (state: CheckoutButtonState) => state.errors,\n (errors) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n const method = methodId\n ? errors[methodId]\n : find(values(errors), (method) => !!(method && method.initializeError));\n\n return method && method.initializeError;\n }),\n );\n\n const getDeinitializeError = createSelector(\n (state: CheckoutButtonState) => state.errors,\n (errors) =>\n memoize((methodId?: CheckoutButtonMethodType) => {\n const method = methodId\n ? errors[methodId]\n : find(values(errors), (method) => !!(method && method.deinitializeError));\n\n return method && method.deinitializeError;\n }),\n );\n\n return memoizeOne((state: CheckoutButtonState = DEFAULT_STATE): CheckoutButtonSelector => {\n return {\n getState: getState(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isDeinitializing: isDeinitializing(state),\n getInitializeError: getInitializeError(state),\n getDeinitializeError: getDeinitializeError(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport Coupon from './coupon';\nimport CouponState, { DEFAULT_STATE } from './coupon-state';\n\nexport default interface CouponSelector {\n getCoupons(): Coupon[] | undefined;\n getRemoveError(): RequestError | undefined;\n getApplyError(): RequestError | undefined;\n isApplying(): boolean;\n isRemoving(): boolean;\n}\n\nexport type CouponSelectorFactory = (state: CouponState) => CouponSelector;\n\nexport function createCouponSelectorFactory(): CouponSelectorFactory {\n const getCoupons = createSelector(\n (state: CouponState) => state.data,\n (data) => () => data,\n );\n\n const getRemoveError = createSelector(\n (state: CouponState) => state.errors.removeCouponError,\n (error) => () => error,\n );\n\n const getApplyError = createSelector(\n (state: CouponState) => state.errors.applyCouponError,\n (error) => () => error,\n );\n\n const isApplying = createSelector(\n (state: CouponState) => !!state.statuses.isApplyingCoupon,\n (status) => () => status,\n );\n\n const isRemoving = createSelector(\n (state: CouponState) => !!state.statuses.isRemovingCoupon,\n (status) => () => status,\n );\n\n return memoizeOne((state: CouponState = DEFAULT_STATE): CouponSelector => {\n return {\n getCoupons: getCoupons(state),\n getRemoveError: getRemoveError(state),\n getApplyError: getApplyError(state),\n isApplying: isApplying(state),\n isRemoving: isRemoving(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Customer from './customer';\nimport CustomerState, { DEFAULT_STATE } from './customer-state';\n\nexport default interface CustomerSelector {\n getCustomer(): Customer | undefined;\n getCustomerOrThrow(): Customer;\n getCreateAccountError(): Error | undefined;\n isCreatingCustomerAccount(): boolean;\n getCreateAddressError(): Error | undefined;\n isCreatingCustomerAddress(): boolean;\n}\n\nexport type CustomerSelectorFactory = (state: CustomerState) => CustomerSelector;\n\nexport function createCustomerSelectorFactory(): CustomerSelectorFactory {\n const getCustomer = createSelector(\n (state: CustomerState) => state.data,\n (customer) => () => customer,\n );\n\n const getCustomerOrThrow = createSelector(getCustomer, (getCustomer) => () => {\n return guard(\n getCustomer(),\n () => new MissingDataError(MissingDataErrorType.MissingCustomer),\n );\n });\n\n const getCreateAccountError = createSelector(\n (state: CustomerState) => state.errors.createError,\n (error) => () => error,\n );\n\n const isCreatingCustomerAccount = createSelector(\n (state: CustomerState) => !!state.statuses.isCreating,\n (status) => () => status,\n );\n\n const getCreateAddressError = createSelector(\n (state: CustomerState) => state.errors.createAddressError,\n (error) => () => error,\n );\n\n const isCreatingCustomerAddress = createSelector(\n (state: CustomerState) => !!state.statuses.isCreatingAddress,\n (status) => () => status,\n );\n\n return memoizeOne((state: CustomerState = DEFAULT_STATE): CustomerSelector => {\n return {\n getCustomer: getCustomer(state),\n getCustomerOrThrow: getCustomerOrThrow(state),\n getCreateAccountError: getCreateAccountError(state),\n isCreatingCustomerAccount: isCreatingCustomerAccount(state),\n getCreateAddressError: getCreateAddressError(state),\n isCreatingCustomerAddress: isCreatingCustomerAddress(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport RemoteCheckoutState, {\n DEFAULT_STATE,\n RemoteCheckoutStateData,\n} from './remote-checkout-state';\n\nexport default interface RemoteCheckoutSelector {\n getCheckout(\n methodId: TMethodId,\n ): RemoteCheckoutStateData[TMethodId] | undefined;\n}\n\nexport type RemoteCheckoutSelectorFactory = (state: RemoteCheckoutState) => RemoteCheckoutSelector;\n\nexport function createRemoteCheckoutSelectorFactory(): RemoteCheckoutSelectorFactory {\n const getCheckout = createSelector(\n (state: RemoteCheckoutState) => state.data,\n (data) =>\n (methodId: TMethodId) => {\n return data[methodId];\n },\n );\n\n return memoizeOne((state: RemoteCheckoutState = DEFAULT_STATE): RemoteCheckoutSelector => {\n return {\n getCheckout: getCheckout(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { Address } from '../address';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport ConsignmentState, { DEFAULT_STATE } from './consignment-state';\n\nexport default interface ShippingAddressSelector {\n getShippingAddress(): Address | undefined;\n getShippingAddressOrThrow(): Address;\n getShippingAddresses(): Address[];\n getShippingAddressesOrThrow(): Address[];\n}\n\nexport type ShippingAddressSelectorFactory = (state: ConsignmentState) => ShippingAddressSelector;\n\nexport function createShippingAddressSelectorFactory(): ShippingAddressSelectorFactory {\n const getShippingAddress = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => {\n const shippingConsignment = consignments?.find(\n (consignment) => !consignment.selectedPickupOption,\n );\n\n return shippingConsignment?.shippingAddress;\n },\n );\n\n const getShippingAddressOrThrow = createSelector(\n getShippingAddress,\n (getShippingAddress) => () => {\n return guard(\n getShippingAddress(),\n () => new MissingDataError(MissingDataErrorType.MissingShippingAddress),\n );\n },\n );\n\n const getShippingAddresses = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => {\n const shippingConsignments = consignments?.filter(\n (consignment) => !consignment.selectedPickupOption,\n );\n\n return shippingConsignments\n ? shippingConsignments.map((consignment) => consignment.shippingAddress)\n : [];\n },\n );\n\n const getShippingAddressesOrThrow = createSelector(\n getShippingAddresses,\n (getShippingAddresses) => () => {\n return guard(\n getShippingAddresses(),\n () => new MissingDataError(MissingDataErrorType.MissingShippingAddress),\n );\n },\n );\n\n return memoizeOne((state: ConsignmentState = DEFAULT_STATE): ShippingAddressSelector => {\n return {\n getShippingAddress: getShippingAddress(state),\n getShippingAddressOrThrow: getShippingAddressOrThrow(state),\n getShippingAddresses: getShippingAddresses(state),\n getShippingAddressesOrThrow: getShippingAddressesOrThrow(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport OrderBillingAddressState, {\n DEFAULT_STATE,\n OrderBillingAddress,\n} from './order-billing-address-state';\n\nexport default interface OrderBillingAddressSelector {\n getOrderBillingAddress(): OrderBillingAddress | undefined;\n}\n\nexport type OrderBillingAddressSelectorFactory = (\n state: OrderBillingAddressState,\n) => OrderBillingAddressSelector;\n\nexport function createOrderBillingAddressSelectorFactory(): OrderBillingAddressSelectorFactory {\n const getOrderBillingAddress = createSelector(\n (state: OrderBillingAddressState) => state.data,\n (data) => () => data,\n );\n\n return memoizeOne(\n (state: OrderBillingAddressState = DEFAULT_STATE): OrderBillingAddressSelector => {\n return {\n getOrderBillingAddress: getOrderBillingAddress(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { CheckoutSelector } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { GatewayOrderPayment, OrderSelector } from '../order';\n\nimport PaymentMethod from './payment-method';\nimport { HOSTED } from './payment-method-types';\nimport { ACKNOWLEDGE, FINALIZE } from './payment-status-types';\n\nexport default interface PaymentSelector {\n getPaymentId(): { providerId: string; gatewayId?: string } | undefined;\n getPaymentIdOrThrow(): { providerId: string; gatewayId?: string };\n getPaymentStatus(): string | undefined;\n getPaymentStatusOrThrow(): string;\n getPaymentToken(): string | undefined;\n getPaymentTokenOrThrow(): string;\n getPaymentRedirectUrl(): string | undefined;\n getPaymentRedirectUrlOrThrow(): string;\n isPaymentDataRequired(useStoreCredit?: boolean): boolean;\n isPaymentDataSubmitted(paymentMethod?: PaymentMethod): boolean;\n}\n\nexport type PaymentSelectorFactory = (\n checkout: CheckoutSelector,\n order: OrderSelector,\n) => PaymentSelector;\n\ninterface PaymentSelectorDependencies {\n checkout: CheckoutSelector;\n order: OrderSelector;\n}\n\nexport function createPaymentSelectorFactory(): PaymentSelectorFactory {\n const getInternalPayment = createSelector(\n ({ order }: PaymentSelectorDependencies) => order.getOrderMeta,\n (getOrderMeta) => () => {\n const meta = getOrderMeta();\n\n return meta && meta.payment;\n },\n );\n\n const getGatewayPayment = createSelector(\n ({ order }: PaymentSelectorDependencies) => order.getOrder,\n (getOrder) => () => {\n const order = getOrder();\n\n return find(\n order && order.payments,\n ({ providerId }) =>\n providerId !== 'giftcertificate' && providerId !== 'storecredit',\n ) as GatewayOrderPayment;\n },\n );\n\n const getHostedPayment = createSelector(\n ({ checkout }: PaymentSelectorDependencies) => checkout.getCheckout,\n (getCheckout) => () => {\n const checkout = getCheckout();\n\n return find(\n checkout && checkout.payments,\n ({ providerType }) => providerType === HOSTED,\n );\n },\n );\n\n const getPaymentId = createSelector(\n getInternalPayment,\n getHostedPayment,\n getGatewayPayment,\n (getInternalPayment, getHostedPayment, getGatewayPayment) => () => {\n const internalPayment = getInternalPayment();\n\n if (internalPayment && internalPayment.id) {\n return {\n providerId: internalPayment.id,\n gatewayId: internalPayment.gateway,\n };\n }\n\n const payment = getHostedPayment() || getGatewayPayment();\n\n if (payment && payment.providerId) {\n return {\n providerId: payment.providerId,\n gatewayId: payment.gatewayId,\n };\n }\n },\n );\n\n const getPaymentIdOrThrow = createSelector(getPaymentId, (getPaymentId) => () => {\n return guard(\n getPaymentId(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentId),\n );\n });\n\n const getPaymentStatus = createSelector(\n getInternalPayment,\n getHostedPayment,\n getGatewayPayment,\n (getInternalPayment, getHostedPayment, getGatewayPayment) => () => {\n const internalPayment = getInternalPayment();\n\n if (internalPayment && internalPayment.status) {\n return internalPayment.status.replace('PAYMENT_STATUS_', '');\n }\n\n const payment = getHostedPayment() || getGatewayPayment();\n\n if (payment) {\n return payment.detail.step;\n }\n },\n );\n\n const getPaymentStatusOrThrow = createSelector(getPaymentStatus, (getPaymentStatus) => () => {\n return guard(\n getPaymentStatus(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentStatus),\n );\n });\n\n const getPaymentToken = createSelector(\n ({ order }: PaymentSelectorDependencies) => order.getOrderMeta,\n (getOrderMeta) => () => {\n const meta = getOrderMeta();\n\n return meta && meta.token;\n },\n );\n\n const getPaymentTokenOrThrow = createSelector(getPaymentToken, (getPaymentToken) => () => {\n return guard(\n getPaymentToken(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentToken),\n );\n });\n\n const getPaymentRedirectUrl = createSelector(getInternalPayment, (getInternalPayment) => () => {\n const payment = getInternalPayment();\n\n return payment && payment.redirectUrl;\n });\n\n const getPaymentRedirectUrlOrThrow = createSelector(\n getPaymentRedirectUrl,\n (getPaymentRedirectUrl) => () => {\n return guard(\n getPaymentRedirectUrl(),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentRedirectUrl),\n );\n },\n );\n\n const isPaymentDataRequired = createSelector(\n ({ checkout }: PaymentSelectorDependencies) => checkout.getOutstandingBalance,\n (getOutstandingBalance) =>\n (useStoreCredit = false) => {\n const grandTotal = getOutstandingBalance(useStoreCredit);\n\n return grandTotal ? grandTotal > 0 : false;\n },\n );\n\n const isPaymentDataSubmitted = createSelector(\n getPaymentStatus,\n (getPaymentStatus) => (paymentMethod?: PaymentMethod) => {\n if (paymentMethod && paymentMethod.nonce) {\n return true;\n }\n\n return getPaymentStatus() === ACKNOWLEDGE || getPaymentStatus() === FINALIZE;\n },\n );\n\n return memoizeOne((checkout: CheckoutSelector, order: OrderSelector): PaymentSelector => {\n return {\n getPaymentId: getPaymentId({ checkout, order }),\n getPaymentIdOrThrow: getPaymentIdOrThrow({ checkout, order }),\n getPaymentStatus: getPaymentStatus({ checkout, order }),\n getPaymentStatusOrThrow: getPaymentStatusOrThrow({ checkout, order }),\n getPaymentToken: getPaymentToken({ checkout, order }),\n getPaymentTokenOrThrow: getPaymentTokenOrThrow({ checkout, order }),\n getPaymentRedirectUrl: getPaymentRedirectUrl({ checkout, order }),\n getPaymentRedirectUrlOrThrow: getPaymentRedirectUrlOrThrow({ checkout, order }),\n isPaymentDataRequired: isPaymentDataRequired({ checkout, order }),\n isPaymentDataSubmitted: isPaymentDataSubmitted({ checkout, order }),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport { SignInEmail } from './signin-email';\nimport SignInEmailState, { DEFAULT_STATE } from './signin-email-state';\n\nexport default interface SignInEmailSelector {\n getEmail(): SignInEmail | undefined;\n getSendError(): Error | undefined;\n isSending(): boolean;\n}\n\nexport type SignInEmailSelectorFactory = (state: SignInEmailState) => SignInEmailSelector;\n\nexport function createSignInEmailSelectorFactory(): SignInEmailSelectorFactory {\n const getEmail = createSelector(\n (state: SignInEmailState) => state.data,\n (signInEmail) => () => signInEmail,\n );\n\n const getSendError = createSelector(\n (state: SignInEmailState) => state.errors.sendError,\n (error) => () => error,\n );\n\n const isSending = createSelector(\n (state: SignInEmailState) => !!state.statuses.isSending,\n (status) => () => status,\n );\n\n return memoizeOne((state: SignInEmailState = DEFAULT_STATE): SignInEmailSelector => {\n return {\n getEmail: getEmail(state),\n getSendError: getSendError(state),\n isSending: isSending(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Cart from './cart';\nimport CartState, { DEFAULT_STATE } from './cart-state';\n\nexport default interface CartSelector {\n getCart(): Cart | undefined;\n getCartOrThrow(): Cart;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type CartSelectorFactory = (state: CartState) => CartSelector;\n\nexport function createCartSelectorFactory() {\n const getCart = createSelector(\n (state: CartState) => state.data,\n (cart) => () => cart,\n );\n\n const getCartOrThrow = createSelector(getCart, (getCart) => () => {\n return guard(getCart(), () => new MissingDataError(MissingDataErrorType.MissingCart));\n });\n\n const getLoadError = createSelector(\n (state: CartState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: CartState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: CartState = DEFAULT_STATE): CartSelector => {\n return {\n getCart: getCart(state),\n getCartOrThrow: getCartOrThrow(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { FormFieldsState } from '../form';\n\nimport Config, { ContextConfig, FlashMessage, FlashMessageType, StoreConfig } from './config';\nimport ConfigState, { DEFAULT_STATE } from './config-state';\n\nexport default interface ConfigSelector {\n getConfig(): Config | undefined;\n getFlashMessages(type?: FlashMessageType): FlashMessage[] | undefined;\n getStoreConfig(): StoreConfig | undefined;\n getStoreConfigOrThrow(): StoreConfig;\n getContextConfig(): ContextConfig | undefined;\n getExternalSource(): string | undefined;\n getHost(): string | undefined;\n getLocale(): string | undefined;\n getVariantIdentificationToken(): string | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type ConfigSelectorFactory = (\n state: ConfigState,\n formState: FormFieldsState,\n) => ConfigSelector;\n\ninterface ConfigSelectorDependencies {\n formState: FormFieldsState;\n}\n\nexport function createConfigSelectorFactory(): ConfigSelectorFactory {\n const getConfig = createSelector(\n (state: ConfigState) => state.data,\n (data) => () => data,\n );\n\n const getFlashMessages = createSelector(\n (state: ConfigState) => state.data,\n (data) => (filterType?: FlashMessageType) => {\n if (!data) {\n return;\n }\n\n const { flashMessages } = data.context;\n\n if (!flashMessages) {\n return;\n }\n\n return filterType !== undefined\n ? flashMessages.filter(({ type }) => filterType === type)\n : flashMessages;\n },\n );\n\n const getStoreConfig = createSelector(\n (state: ConfigState) => state.data,\n (_: ConfigState, { formState }: ConfigSelectorDependencies) => formState && formState.data,\n (data, formFields) => () =>\n data && formFields\n ? {\n ...data.storeConfig,\n formFields,\n }\n : undefined,\n );\n\n const getStoreConfigOrThrow = createSelector(getStoreConfig, (getStoreConfig) => () => {\n return guard(\n getStoreConfig(),\n () => new MissingDataError(MissingDataErrorType.MissingCheckoutConfig),\n );\n });\n\n const getContextConfig = createSelector(\n (state: ConfigState) => state.data && state.data.context,\n (data) => () => data,\n );\n\n const getExternalSource = createSelector(\n (state: ConfigState) => state.meta && state.meta.externalSource,\n (data) => () => data,\n );\n\n const getHost = createSelector(\n (state: ConfigState) => state.meta?.host,\n (data) => () => data,\n );\n\n const getLocale = createSelector(\n (state: ConfigState) => state.meta?.locale,\n (data) => () => data,\n );\n\n const getVariantIdentificationToken = createSelector(\n (state: ConfigState) => state.meta && state.meta.variantIdentificationToken,\n (data) => () => data,\n );\n\n const getLoadError = createSelector(\n (state: ConfigState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: ConfigState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne(\n (state: ConfigState = DEFAULT_STATE, formState: FormFieldsState): ConfigSelector => {\n return {\n getConfig: getConfig(state),\n getFlashMessages: getFlashMessages(state),\n getStoreConfig: getStoreConfig(state, { formState }),\n getStoreConfigOrThrow: getStoreConfigOrThrow(state, { formState }),\n getContextConfig: getContextConfig(state),\n getExternalSource: getExternalSource(state),\n getHost: getHost(state),\n getLocale: getLocale(state),\n getVariantIdentificationToken: getVariantIdentificationToken(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport Country from './country';\nimport CountryState, { DEFAULT_STATE } from './country-state';\n\nexport default interface CountrySelector {\n getCountries(): Country[] | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type CountrySelectorFactory = (state: CountryState) => CountrySelector;\n\nexport function createCountrySelectorFactory(): CountrySelectorFactory {\n const getCountries = createSelector(\n (state: CountryState) => state.data,\n (countries) => () => countries,\n );\n\n const getLoadError = createSelector(\n (state: CountryState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: CountryState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: CountryState = DEFAULT_STATE): CountrySelector => {\n return {\n getCountries: getCountries(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport CustomerStrategyState, { DEFAULT_STATE } from './customer-strategy-state';\n\nexport default interface CustomerStrategySelector {\n getSignInError(methodId?: string): Error | undefined;\n getSignOutError(methodId?: string): Error | undefined;\n getExecutePaymentMethodCheckoutError(methodId?: string): Error | undefined;\n getInitializeError(methodId?: string): Error | undefined;\n getWidgetInteractionError(methodId?: string): Error | undefined;\n isSigningIn(methodId?: string): boolean;\n isSigningOut(methodId?: string): boolean;\n isExecutingPaymentMethodCheckout(methodId?: string): boolean;\n isInitializing(methodId?: string): boolean;\n isInitialized(methodId: string): boolean;\n isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type CustomerStrategySelectorFactory = (\n state: CustomerStrategyState,\n) => CustomerStrategySelector;\n\nexport function createCustomerStrategySelectorFactory(): CustomerStrategySelectorFactory {\n const getSignInError = createSelector(\n (state: CustomerStrategyState) => state.errors.signInMethodId,\n (state: CustomerStrategyState) => state.errors.signInError,\n (signInMethodId, signInError) => (methodId?: string) => {\n if (methodId && signInMethodId !== methodId) {\n return;\n }\n\n return signInError;\n },\n );\n\n const getSignOutError = createSelector(\n (state: CustomerStrategyState) => state.errors.signOutMethodId,\n (state: CustomerStrategyState) => state.errors.signOutError,\n (signOutMethodId, signOutError) => (methodId?: string) => {\n if (methodId && signOutMethodId !== methodId) {\n return;\n }\n\n return signOutError;\n },\n );\n\n const getExecutePaymentMethodCheckoutError = createSelector(\n (state: CustomerStrategyState) => state.errors.executePaymentMethodCheckoutMethodId,\n (state: CustomerStrategyState) => state.errors.executePaymentMethodCheckoutError,\n (executePaymentMethodCheckoutMethodId, executePaymentMethodCheckoutError) =>\n (methodId?: string) => {\n if (methodId && executePaymentMethodCheckoutMethodId !== methodId) {\n return;\n }\n\n return executePaymentMethodCheckoutError;\n },\n );\n\n const getInitializeError = createSelector(\n (state: CustomerStrategyState) => state.errors.initializeMethodId,\n (state: CustomerStrategyState) => state.errors.initializeErrors,\n (initializeMethodId, initializeErrors) => (methodId?: string) => {\n if (!initializeMethodId || !initializeErrors) {\n return;\n }\n\n if (methodId) {\n return initializeErrors[methodId];\n }\n\n return initializeErrors[initializeMethodId];\n },\n );\n\n const getWidgetInteractionError = createSelector(\n (state: CustomerStrategyState) => state.errors.widgetInteractionMethodId,\n (state: CustomerStrategyState) => state.errors.widgetInteractionError,\n (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return;\n }\n\n return widgetInteractionError;\n },\n );\n\n const isSigningIn = createSelector(\n (state: CustomerStrategyState) => state.statuses.signInMethodId,\n (state: CustomerStrategyState) => state.statuses.isSigningIn,\n (signInMethodId, isSigningIn) => (methodId?: string) => {\n if (methodId && signInMethodId !== methodId) {\n return false;\n }\n\n return !!isSigningIn;\n },\n );\n\n const isSigningOut = createSelector(\n (state: CustomerStrategyState) => state.statuses.signOutMethodId,\n (state: CustomerStrategyState) => state.statuses.isSigningOut,\n (signOutMethodId, isSigningOut) => (methodId?: string) => {\n if (methodId && signOutMethodId !== methodId) {\n return false;\n }\n\n return !!isSigningOut;\n },\n );\n\n const isExecutingPaymentMethodCheckout = createSelector(\n (state: CustomerStrategyState) => state.statuses.executePaymentMethodCheckoutMethodId,\n (state: CustomerStrategyState) => state.statuses.isExecutingPaymentMethodCheckout,\n (executePaymentMethodCheckoutMethodId, isExecutingPaymentMethodCheckout) =>\n (methodId?: string) => {\n if (methodId && executePaymentMethodCheckoutMethodId !== methodId) {\n return false;\n }\n\n return !!isExecutingPaymentMethodCheckout;\n },\n );\n\n const isInitializing = createSelector(\n (state: CustomerStrategyState) => state.statuses.initializeMethodId,\n (state: CustomerStrategyState) => state.statuses.isInitializing,\n (initializeMethodId, isInitializing) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return false;\n }\n\n return !!isInitializing;\n },\n );\n\n const isInitialized = createSelector(\n (state: CustomerStrategyState) => state.data,\n (data) => (methodId: string) => {\n return !!(data[methodId] && data[methodId].isInitialized);\n },\n );\n\n const isWidgetInteracting = createSelector(\n (state: CustomerStrategyState) => state.statuses.widgetInteractionMethodId,\n (state: CustomerStrategyState) => state.statuses.isWidgetInteracting,\n (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return false;\n }\n\n return !!isWidgetInteracting;\n },\n );\n\n return memoizeOne((state: CustomerStrategyState = DEFAULT_STATE): CustomerStrategySelector => {\n return {\n getSignInError: getSignInError(state),\n getSignOutError: getSignOutError(state),\n getExecutePaymentMethodCheckoutError: getExecutePaymentMethodCheckoutError(state),\n getInitializeError: getInitializeError(state),\n getWidgetInteractionError: getWidgetInteractionError(state),\n isSigningIn: isSigningIn(state),\n isSigningOut: isSigningOut(state),\n isExecutingPaymentMethodCheckout: isExecutingPaymentMethodCheckout(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isWidgetInteracting: isWidgetInteracting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport GiftCertificate from './gift-certificate';\nimport GiftCertificateState, { DEFAULT_STATE } from './gift-certificate-state';\n\nexport default interface GiftCertificateSelector {\n getGiftCertificates(): GiftCertificate[] | undefined;\n getRemoveError(): RequestError | undefined;\n getApplyError(): RequestError | undefined;\n isApplying(): boolean;\n isRemoving(): boolean;\n}\n\nexport type GiftCertificateSelectorFactory = (\n state: GiftCertificateState,\n) => GiftCertificateSelector;\n\nexport function createGiftCertificateSelectorFactory(): GiftCertificateSelectorFactory {\n const getGiftCertificates = createSelector(\n (state: GiftCertificateState) => state.data,\n (data) => () => data,\n );\n\n const getRemoveError = createSelector(\n (state: GiftCertificateState) => state.errors.removeGiftCertificateError,\n (error) => () => error,\n );\n\n const getApplyError = createSelector(\n (state: GiftCertificateState) => state.errors.applyGiftCertificateError,\n (error) => () => error,\n );\n\n const isApplying = createSelector(\n (state: GiftCertificateState) => !!state.statuses.isApplyingGiftCertificate,\n (status) => () => status,\n );\n\n const isRemoving = createSelector(\n (state: GiftCertificateState) => !!state.statuses.isRemovingGiftCertificate,\n (status) => () => status,\n );\n\n return memoizeOne((state: GiftCertificateState = DEFAULT_STATE): GiftCertificateSelector => {\n return {\n getGiftCertificates: getGiftCertificates(state),\n getRemoveError: getRemoveError(state),\n getApplyError: getApplyError(state),\n isApplying: isApplying(state),\n isRemoving: isRemoving(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { filter, flatMap, isMatch, values } from 'lodash';\n\nimport { MissingDataError, MissingDataErrorType } from '../../common/error/errors';\nimport { createSelector } from '../../common/selector';\nimport { guard } from '../../common/utility';\nimport PaymentMethod from '../payment-method';\n\nimport PaymentInstrument, { CardInstrument } from './instrument';\nimport InstrumentState, { DEFAULT_STATE, InstrumentMeta } from './instrument-state';\nimport supportedInstruments from './supported-payment-instruments';\n\nexport default interface InstrumentSelector {\n getCardInstrument(instrumentId: string): CardInstrument | undefined;\n getCardInstrumentOrThrow(instrumentId: string): CardInstrument;\n getInstruments(): PaymentInstrument[] | undefined;\n getInstrumentsByPaymentMethod(paymentMethod: PaymentMethod): PaymentInstrument[] | undefined;\n getInstrumentsMeta(): InstrumentMeta | undefined;\n getLoadError(): Error | undefined;\n getDeleteError(instrumentId?: string): Error | undefined;\n isLoading(): boolean;\n isDeleting(instrumentId?: string): boolean;\n}\n\nexport type InstrumentSelectorFactory = (state: InstrumentState) => InstrumentSelector;\n\nexport function createInstrumentSelectorFactory(): InstrumentSelectorFactory {\n const getInstrumentsByPaymentMethod = createSelector(\n (state: InstrumentState) => state.data,\n (instruments) => (paymentMethod: PaymentMethod) => {\n if (!instruments) {\n return;\n }\n\n const paymentMethodKey = paymentMethod.gateway\n ? `${paymentMethod.gateway}.${paymentMethod.id}`\n : paymentMethod.id;\n\n const currentMethod = supportedInstruments[paymentMethodKey];\n\n if (!currentMethod) {\n return [];\n }\n\n return filter(instruments, currentMethod);\n },\n );\n\n const getCardInstrument = createSelector(\n (state: InstrumentState) => state.data,\n (instruments = []) =>\n (instrumentId: string) => {\n const cards = values(supportedInstruments);\n\n return instruments.find(\n (instrument): instrument is CardInstrument =>\n instrument.bigpayToken === instrumentId &&\n instrument.type === 'card' &&\n cards.some((card) => isMatch(instrument, card)),\n );\n },\n );\n\n const getCardInstrumentOrThrow = createSelector(\n getCardInstrument,\n (getCardInstrument) => (instrumentId: string) => {\n return guard(\n getCardInstrument(instrumentId),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentInstrument),\n );\n },\n );\n\n const getInstruments = createSelector(\n (state: InstrumentState) => state.data,\n (instruments) => () => {\n if (!instruments) {\n return;\n }\n\n const allSupportedInstruments = flatMap(supportedInstruments, (supportedProvider) =>\n filter(\n instruments,\n (instrument: PaymentInstrument): instrument is PaymentInstrument => {\n return isMatch(instrument, supportedProvider);\n },\n ),\n );\n\n return allSupportedInstruments;\n },\n );\n\n const getInstrumentsMeta = createSelector(\n (state: InstrumentState) => state.meta,\n (meta) => () => meta,\n );\n\n const getLoadError = createSelector(\n (state: InstrumentState) => state.errors.loadError,\n (loadError) => () => loadError,\n );\n\n const getDeleteError = createSelector(\n (state: InstrumentState) => state.errors.failedInstrument,\n (state: InstrumentState) => state.errors.deleteError,\n (failedInstrument, deleteError) => (instrumentId?: string) => {\n if (instrumentId && failedInstrument !== instrumentId) {\n return;\n }\n\n return deleteError;\n },\n );\n\n const isLoading = createSelector(\n (state: InstrumentState) => state.statuses.isLoading,\n (isLoading) => () => !!isLoading,\n );\n\n const isDeleting = createSelector(\n (state: InstrumentState) => state.statuses.deletingInstrument,\n (state: InstrumentState) => state.statuses.isDeleting,\n (deletingInstrument, isDeleting) => (instrumentId?: string) => {\n if (instrumentId && deletingInstrument !== instrumentId) {\n return false;\n }\n\n return !!isDeleting;\n },\n );\n\n return memoizeOne((state: InstrumentState = DEFAULT_STATE): InstrumentSelector => {\n return {\n getCardInstrument: getCardInstrument(state),\n getCardInstrumentOrThrow: getCardInstrumentOrThrow(state),\n getInstruments: getInstruments(state),\n getInstrumentsByPaymentMethod: getInstrumentsByPaymentMethod(state),\n getInstrumentsMeta: getInstrumentsMeta(state),\n getLoadError: getLoadError(state),\n getDeleteError: getDeleteError(state),\n isLoading: isLoading(state),\n isDeleting: isDeleting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { createSelector } from '../common/selector';\nimport { Country } from '../geography';\n\nimport FormField from './form-field';\nimport FormFieldsState, { DEFAULT_STATE } from './form-fields-state';\n\nexport default interface FormSelector {\n getShippingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\n getBillingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\n getCustomerAccountFields(): FormField[];\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type FormSelectorFactory = (state: FormFieldsState) => FormSelector;\n\nexport function createFormSelectorFactory(): FormSelectorFactory {\n const getShippingAddressFields = createSelector(\n (state: FormFieldsState) => state.data,\n (formFields) =>\n (countries: Country[] = [], countryCode: string) => {\n const selectedCountry = find(countries, { code: countryCode });\n const fields = formFields ? formFields.shippingAddress : [];\n\n return fields.map((field: any) => processField(field, countries, selectedCountry));\n },\n );\n\n const getBillingAddressFields = createSelector(\n (state: FormFieldsState) => state.data,\n (formFields) =>\n (countries: Country[] = [], countryCode: string) => {\n const selectedCountry = find(countries, { code: countryCode });\n const fields = formFields ? formFields.billingAddress : [];\n\n return fields.map((field: any) => processField(field, countries, selectedCountry));\n },\n );\n\n const getCustomerAccountFields = createSelector(\n (state: FormFieldsState) => state.data,\n (formFields) => () => formFields ? formFields.customerAccount : [],\n );\n\n const getLoadError = createSelector(\n (state: FormFieldsState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: FormFieldsState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n function processField(\n field: FormField,\n countries: Country[],\n selectedCountry?: Country,\n ): FormField {\n if (field.name === 'countryCode') {\n return processCountry(field, countries, selectedCountry);\n }\n\n if (field.name === 'stateOrProvince') {\n return processProvince(field, selectedCountry);\n }\n\n if (field.name === 'postalCode') {\n return processsPostCode(field, selectedCountry);\n }\n\n return field;\n }\n\n function processCountry(\n field: FormField,\n countries: Country[] = [],\n country?: Country,\n ): FormField {\n if (!countries.length) {\n return field;\n }\n\n const { code = '' } = country || {};\n const items = countries.map(({ code, name }: any) => ({\n value: code,\n label: name,\n }));\n\n return {\n ...field,\n options: { items },\n default: code,\n type: 'array',\n fieldType: 'dropdown',\n itemtype: 'string',\n };\n }\n\n function processProvince(field: FormField, country?: Country): FormField {\n const { subdivisions = [], requiresState } = country || {};\n\n if (!subdivisions.length) {\n return {\n ...field,\n required: requiresState == null ? false : requiresState,\n };\n }\n\n const items = subdivisions.map(({ code, name }: any) => ({\n value: code,\n label: name,\n }));\n\n return {\n ...field,\n name: 'stateOrProvinceCode',\n options: { items },\n required: requiresState == null ? true : requiresState,\n type: 'array',\n fieldType: 'dropdown',\n itemtype: 'string',\n };\n }\n\n function processsPostCode(field: FormField, country?: Country): FormField {\n const { hasPostalCodes = [] } = country || {};\n\n if (hasPostalCodes === undefined) {\n return field;\n }\n\n return { ...field, required: Boolean(hasPostalCodes) };\n }\n\n return memoizeOne((state: FormFieldsState = DEFAULT_STATE): FormSelector => {\n return {\n getShippingAddressFields: getShippingAddressFields(state),\n getBillingAddressFields: getBillingAddressFields(state),\n getCustomerAccountFields: getCustomerAccountFields(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\nimport PaymentMethodState, { DEFAULT_STATE } from './payment-method-state';\n\nexport default interface PaymentMethodSelector {\n getPaymentMethods(): PaymentMethod[] | undefined;\n getPaymentMethodsMeta(): PaymentMethodMeta | undefined;\n getPaymentMethod(methodId: string, gatewayId?: string): PaymentMethod | undefined;\n getPaymentMethodOrThrow(methodId: string, gatewayId?: string): PaymentMethod;\n getLoadError(): Error | undefined;\n getLoadMethodError(methodId?: string): Error | undefined;\n isLoading(): boolean;\n isLoadingMethod(methodId?: string): boolean;\n}\n\nexport type PaymentMethodSelectorFactory = (state: PaymentMethodState) => PaymentMethodSelector;\n\nexport function createPaymentMethodSelectorFactory(): PaymentMethodSelectorFactory {\n const getPaymentMethods = createSelector(\n (state: PaymentMethodState) => state.data,\n (paymentMethods) => () => paymentMethods,\n );\n\n const getPaymentMethodsMeta = createSelector(\n (state: PaymentMethodState) => state.meta,\n (meta) => () => meta,\n );\n\n const getPaymentMethod = createSelector(\n (state: PaymentMethodState) => state.data,\n (paymentMethods) => (methodId: string, gatewayId?: string) => {\n return gatewayId\n ? find(paymentMethods, { id: methodId, gateway: gatewayId })\n : find(paymentMethods, { id: methodId });\n },\n );\n\n const getPaymentMethodOrThrow = createSelector(\n getPaymentMethod,\n (getPaymentMethod) => (methodId: string, gatewayId?: string) => {\n return guard(\n getPaymentMethod(methodId, gatewayId),\n () => new MissingDataError(MissingDataErrorType.MissingPaymentMethod),\n );\n },\n );\n\n const getLoadError = createSelector(\n (state: PaymentMethodState) => state.errors.loadError,\n (loadError) => () => loadError,\n );\n\n const getLoadMethodError = createSelector(\n (state: PaymentMethodState) => state.errors.loadMethodId,\n (state: PaymentMethodState) => state.errors.loadMethodError,\n (loadMethodId, loadMethodError) => (methodId?: string) => {\n if (methodId && loadMethodId !== methodId) {\n return;\n }\n\n return loadMethodError;\n },\n );\n\n const isLoading = createSelector(\n (state: PaymentMethodState) => state.statuses.isLoading,\n (isLoading) => () => !!isLoading,\n );\n\n const isLoadingMethod = createSelector(\n (state: PaymentMethodState) => state.statuses.loadMethodId,\n (state: PaymentMethodState) => state.statuses.isLoadingMethod,\n (loadMethodId, isLoadingMethod) => (methodId?: string) => {\n if (methodId && loadMethodId !== methodId) {\n return false;\n }\n\n return !!isLoadingMethod;\n },\n );\n\n return memoizeOne((state: PaymentMethodState = DEFAULT_STATE): PaymentMethodSelector => {\n return {\n getPaymentMethods: getPaymentMethods(state),\n getPaymentMethodsMeta: getPaymentMethodsMeta(state),\n getPaymentMethod: getPaymentMethod(state),\n getPaymentMethodOrThrow: getPaymentMethodOrThrow(state),\n getLoadError: getLoadError(state),\n getLoadMethodError: getLoadMethodError(state),\n isLoading: isLoading(state),\n isLoadingMethod: isLoadingMethod(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport PaymentStrategyState, { DEFAULT_STATE } from './payment-strategy-state';\n\ninterface InitiaizedQuery {\n methodId: string;\n gatewayId?: string;\n}\n\nexport default interface PaymentStrategySelector {\n getInitializeError(methodId?: string): Error | undefined;\n getExecuteError(methodId?: string): Error | undefined;\n getFinalizeError(methodId?: string): Error | undefined;\n getWidgetInteractingError(methodId?: string): Error | undefined;\n isInitializing(methodId?: string): boolean;\n isInitialized(query: InitiaizedQuery): boolean;\n isExecuting(methodId?: string): boolean;\n isFinalizing(methodId?: string): boolean;\n isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type PaymentStrategySelectorFactory = (\n state: PaymentStrategyState,\n) => PaymentStrategySelector;\n\nexport function createPaymentStrategySelectorFactory(): PaymentStrategySelectorFactory {\n const getInitializeError = createSelector(\n (state: PaymentStrategyState) => state.errors.initializeMethodId,\n (state: PaymentStrategyState) => state.errors.initializeError,\n (initializeMethodId, initializeError) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return;\n }\n\n return initializeError;\n },\n );\n\n const getExecuteError = createSelector(\n (state: PaymentStrategyState) => state.errors.executeMethodId,\n (state: PaymentStrategyState) => state.errors.executeError,\n (executeMethodId, executeError) => (methodId?: string) => {\n if (methodId && executeMethodId !== methodId) {\n return;\n }\n\n return executeError;\n },\n );\n\n const getFinalizeError = createSelector(\n (state: PaymentStrategyState) => state.errors.finalizeMethodId,\n (state: PaymentStrategyState) => state.errors.finalizeError,\n (finalizeMethodId, finalizeError) => (methodId?: string) => {\n if (methodId && finalizeMethodId !== methodId) {\n return;\n }\n\n return finalizeError;\n },\n );\n\n const getWidgetInteractingError = createSelector(\n (state: PaymentStrategyState) => state.errors.widgetInteractionMethodId,\n (state: PaymentStrategyState) => state.errors.widgetInteractionError,\n (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return;\n }\n\n return widgetInteractionError;\n },\n );\n\n const isInitializing = createSelector(\n (state: PaymentStrategyState) => state.statuses.initializeMethodId,\n (state: PaymentStrategyState) => state.statuses.isInitializing,\n (initializeMethodId, isInitializing) => (key?: string) => {\n if (key && initializeMethodId !== key) {\n return false;\n }\n\n return !!isInitializing;\n },\n );\n\n const isInitialized = createSelector(\n (state: PaymentStrategyState) => state.data,\n (data) => (query: InitiaizedQuery) => {\n const key = query.gatewayId ? `${query.methodId}.${query.gatewayId}` : query.methodId;\n\n return !!(data[key] && data[key].isInitialized);\n },\n );\n\n const isExecuting = createSelector(\n (state: PaymentStrategyState) => state.statuses.executeMethodId,\n (state: PaymentStrategyState) => state.statuses.isExecuting,\n (executeMethodId, isExecuting) => (methodId?: string) => {\n if (methodId && executeMethodId !== methodId) {\n return false;\n }\n\n return !!isExecuting;\n },\n );\n\n const isFinalizing = createSelector(\n (state: PaymentStrategyState) => state.statuses.finalizeMethodId,\n (state: PaymentStrategyState) => state.statuses.isFinalizing,\n (finalizeMethodId, isFinalizing) => (methodId?: string) => {\n if (methodId && finalizeMethodId !== methodId) {\n return false;\n }\n\n return !!isFinalizing;\n },\n );\n\n const isWidgetInteracting = createSelector(\n (state: PaymentStrategyState) => state.statuses.widgetInteractionMethodId,\n (state: PaymentStrategyState) => state.statuses.isWidgetInteracting,\n (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return false;\n }\n\n return !!isWidgetInteracting;\n },\n );\n\n return memoizeOne((state: PaymentStrategyState = DEFAULT_STATE): PaymentStrategySelector => {\n return {\n getInitializeError: getInitializeError(state),\n getExecuteError: getExecuteError(state),\n getFinalizeError: getFinalizeError(state),\n getWidgetInteractingError: getWidgetInteractingError(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isExecuting: isExecuting(state),\n isFinalizing: isFinalizing(state),\n isWidgetInteracting: isWidgetInteracting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\nimport { objectFlatten, objectWithSortedKeys } from '../common/utility';\n\nimport { PickupOptionResult, SearchArea } from './pickup-option';\nimport PickupOptionState, { DEFAULT_STATE } from './pickup-option-state';\n\nexport default interface PickupOptionSelector {\n getPickupOptions(\n consignmentId: string,\n searchArea: SearchArea,\n ): PickupOptionResult[] | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type PickupOptionSelectorFactory = (state: PickupOptionState) => PickupOptionSelector;\n\nexport function createPickupOptionSelectorFactory(): PickupOptionSelectorFactory {\n const getPickupOptions = createSelector(\n (state: PickupOptionState) => state.data,\n (pickupOptions) => (consignmentId: string, searchArea: SearchArea) => {\n if (!pickupOptions) {\n return;\n }\n\n const flattenedParams = objectFlatten({ consignmentId, searchArea });\n const sortedFlattenedParams = objectWithSortedKeys(flattenedParams);\n const keyString = btoa(`${JSON.stringify(sortedFlattenedParams)}`);\n\n return pickupOptions[keyString];\n },\n );\n\n const getLoadError = createSelector(\n (state: PickupOptionState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: PickupOptionState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne((state: PickupOptionState = DEFAULT_STATE): PickupOptionSelector => {\n return {\n getPickupOptions: getPickupOptions(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\nimport { Country } from '../geography';\n\nimport ShippingCountryState, { DEFAULT_STATE } from './shipping-country-state';\n\nexport default interface ShippingCountrySelector {\n getShippingCountries(): Country[] | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type ShippingCountrySelectorFactory = (\n state: ShippingCountryState,\n) => ShippingCountrySelector;\n\nexport function createShippingCountrySelectorFactory(): ShippingCountrySelectorFactory {\n const getShippingCountries = createSelector(\n (state: ShippingCountryState) => state.data,\n (data) => () => data,\n );\n\n const getLoadError = createSelector(\n (state: ShippingCountryState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: ShippingCountryState) => state.statuses.isLoading,\n (status) => () => !!status,\n );\n\n return memoizeOne((state: ShippingCountryState = DEFAULT_STATE): ShippingCountrySelector => {\n return {\n getShippingCountries: getShippingCountries(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport ShippingStrategyState, { DEFAULT_STATE } from './shipping-strategy-state';\n\nexport default interface ShippingStrategySelector {\n getUpdateAddressError(methodId?: string): Error | undefined;\n getSelectOptionError(methodId?: string): Error | undefined;\n getInitializeError(methodId?: string): Error | undefined;\n getWidgetInteractionError(methodId?: string): Error | undefined;\n isUpdatingAddress(methodId?: string): boolean;\n isSelectingOption(methodId?: string): boolean;\n isInitializing(methodId?: string): boolean;\n isInitialized(methodId: string): boolean;\n isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type ShippingStrategySelectorFactory = (\n state: ShippingStrategyState,\n) => ShippingStrategySelector;\n\nexport function createShippingStrategySelectorFactory(): ShippingStrategySelectorFactory {\n const getUpdateAddressError = createSelector(\n (state: ShippingStrategyState) => state.errors.updateAddressMethodId,\n (state: ShippingStrategyState) => state.errors.updateAddressError,\n (updateAddressMethodId, updateAddressError) => (methodId?: string) => {\n if (methodId && updateAddressMethodId !== methodId) {\n return;\n }\n\n return updateAddressError;\n },\n );\n\n const getSelectOptionError = createSelector(\n (state: ShippingStrategyState) => state.errors.selectOptionMethodId,\n (state: ShippingStrategyState) => state.errors.selectOptionError,\n (selectOptionMethodId, selectOptionError) => (methodId?: string) => {\n if (methodId && selectOptionMethodId !== methodId) {\n return;\n }\n\n return selectOptionError;\n },\n );\n\n const getInitializeError = createSelector(\n (state: ShippingStrategyState) => state.errors.initializeMethodId,\n (state: ShippingStrategyState) => state.errors.initializeError,\n (initializeMethodId, initializeError) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return;\n }\n\n return initializeError;\n },\n );\n\n const getWidgetInteractionError = createSelector(\n (state: ShippingStrategyState) => state.errors.widgetInteractionMethodId,\n (state: ShippingStrategyState) => state.errors.widgetInteractionError,\n (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return;\n }\n\n return widgetInteractionError;\n },\n );\n\n const isUpdatingAddress = createSelector(\n (state: ShippingStrategyState) => state.statuses.updateAddressMethodId,\n (state: ShippingStrategyState) => state.statuses.isUpdatingAddress,\n (updateAddressMethodId, isUpdatingAddress) => (methodId?: string) => {\n if (methodId && updateAddressMethodId !== methodId) {\n return false;\n }\n\n return !!isUpdatingAddress;\n },\n );\n\n const isSelectingOption = createSelector(\n (state: ShippingStrategyState) => state.statuses.selectOptionMethodId,\n (state: ShippingStrategyState) => state.statuses.isSelectingOption,\n (selectOptionMethodId, isSelectingOption) => (methodId?: string) => {\n if (methodId && selectOptionMethodId !== methodId) {\n return false;\n }\n\n return !!isSelectingOption;\n },\n );\n\n const isInitializing = createSelector(\n (state: ShippingStrategyState) => state.statuses.initializeMethodId,\n (state: ShippingStrategyState) => state.statuses.isInitializing,\n (initializeMethodId, isInitializing) => (methodId?: string) => {\n if (methodId && initializeMethodId !== methodId) {\n return false;\n }\n\n return !!isInitializing;\n },\n );\n\n const isInitialized = createSelector(\n (state: ShippingStrategyState) => state.data,\n (data) => (methodId: string) => {\n return !!(data[methodId] && data[methodId].isInitialized);\n },\n );\n\n const isWidgetInteracting = createSelector(\n (state: ShippingStrategyState) => state.statuses.widgetInteractionMethodId,\n (state: ShippingStrategyState) => state.statuses.isWidgetInteracting,\n (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n if (methodId && widgetInteractionMethodId !== methodId) {\n return false;\n }\n\n return !!isWidgetInteracting;\n },\n );\n\n return memoizeOne((state: ShippingStrategyState = DEFAULT_STATE): ShippingStrategySelector => {\n return {\n getUpdateAddressError: getUpdateAddressError(state),\n getSelectOptionError: getSelectOptionError(state),\n getInitializeError: getInitializeError(state),\n getWidgetInteractionError: getWidgetInteractionError(state),\n isUpdatingAddress: isUpdatingAddress(state),\n isSelectingOption: isSelectingOption(state),\n isInitializing: isInitializing(state),\n isInitialized: isInitialized(state),\n isWidgetInteracting: isWidgetInteracting(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { AddressRequestBody, isAddressEqual } from '../address';\nimport { CartSelector, PhysicalItem } from '../cart';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Consignment from './consignment';\nimport ConsignmentState, { DEFAULT_STATE } from './consignment-state';\nimport ShippingOption from './shipping-option';\n\nexport default interface ConsignmentSelector {\n getConsignments(): Consignment[] | undefined;\n getConsignmentsOrThrow(): Consignment[];\n getConsignmentById(id: string): Consignment | undefined;\n getConsignmentByAddress(address: AddressRequestBody): Consignment | undefined;\n getShippingOption(): ShippingOption | undefined;\n getLoadError(): Error | undefined;\n getCreateError(): Error | undefined;\n getLoadShippingOptionsError(): Error | undefined;\n getUnassignedItems(): PhysicalItem[];\n getUpdateError(consignmentId?: string): Error | undefined;\n getDeleteError(consignmentId?: string): Error | undefined;\n getItemAssignmentError(address: AddressRequestBody): Error | undefined;\n getUpdateShippingOptionError(consignmentId?: string): Error | undefined;\n isLoading(): boolean;\n isLoadingShippingOptions(): boolean;\n isCreating(): boolean;\n isUpdating(consignmentId?: string): boolean;\n isDeleting(consignmentId?: string): boolean;\n isAssigningItems(address: AddressRequestBody): boolean;\n isUpdatingShippingOption(consignmentId?: string): boolean;\n}\n\nexport type ConsignmentSelectorFactory = (\n state: ConsignmentState,\n cart: CartSelector,\n) => ConsignmentSelector;\n\ninterface ConsignmentSelectorDependencies {\n cart: CartSelector;\n}\n\nexport function createConsignmentSelectorFactory(): ConsignmentSelectorFactory {\n const getConsignments = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => consignments,\n );\n\n const getConsignmentsOrThrow = createSelector(getConsignments, (getConsignments) => () => {\n return guard(\n getConsignments(),\n () => new MissingDataError(MissingDataErrorType.MissingConsignments),\n );\n });\n\n const getConsignmentById = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => (id: string) => {\n if (!consignments || !consignments.length) {\n return;\n }\n\n return find(consignments, { id });\n },\n );\n\n const getConsignmentByAddress = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => (address: AddressRequestBody) => {\n if (!consignments || !consignments.length) {\n return;\n }\n\n return find(consignments, (consignment) =>\n isAddressEqual(consignment.shippingAddress, address),\n );\n },\n );\n\n const getShippingOption = createSelector(\n (state: ConsignmentState) => state.data,\n (consignments) => () => {\n if (consignments && consignments.length) {\n return consignments[0].selectedShippingOption;\n }\n },\n );\n\n const getLoadError = createSelector(\n (state: ConsignmentState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const getCreateError = createSelector(\n (state: ConsignmentState) => state.errors.createError,\n (error) => () => error,\n );\n\n const getLoadShippingOptionsError = createSelector(\n (state: ConsignmentState) => state.errors.loadShippingOptionsError,\n (error) => () => error,\n );\n\n const getUnassignedItems = createSelector(\n getConsignments,\n (_: ConsignmentState, { cart }: ConsignmentSelectorDependencies) => cart.getCart,\n (getConsignments, getCart) => () => {\n const cart = getCart();\n\n if (!cart) {\n return [];\n }\n\n const assignedLineItemIds = (getConsignments() || []).reduce(\n (itemIds, consignment) => itemIds.concat(consignment.lineItemIds),\n [] as string[],\n );\n\n return (cart.lineItems.physicalItems || []).filter(\n (item) => assignedLineItemIds.indexOf(item.id as string) < 0,\n );\n },\n );\n\n const getUpdateError = createSelector(\n (state: ConsignmentState) => state.errors.updateError,\n (updateError) => (consignmentId?: string) => {\n if (consignmentId) {\n return updateError[consignmentId];\n }\n\n return find(updateError);\n },\n );\n\n const getDeleteError = createSelector(\n (state: ConsignmentState) => state.errors.deleteError,\n (deleteError) => (consignmentId?: string) => {\n if (consignmentId) {\n return deleteError[consignmentId];\n }\n\n return find(deleteError);\n },\n );\n\n const getItemAssignmentError = createSelector(\n getConsignmentByAddress,\n getUpdateError,\n getCreateError,\n (getConsignmentByAddress, getUpdateError, getCreateError) =>\n (address: AddressRequestBody) => {\n const consignment = getConsignmentByAddress(address);\n\n return consignment ? getUpdateError(consignment.id) : getCreateError();\n },\n );\n\n const getUpdateShippingOptionError = createSelector(\n (state: ConsignmentState) => state.errors.updateShippingOptionError,\n (updateShippingOptionError) => (consignmentId?: string) => {\n if (consignmentId) {\n return updateShippingOptionError[consignmentId];\n }\n\n return find(updateShippingOptionError);\n },\n );\n\n const isLoading = createSelector(\n (state: ConsignmentState) => state.statuses.isLoading,\n (isLoading) => () => isLoading === true,\n );\n\n const isLoadingShippingOptions = createSelector(\n (state: ConsignmentState) => state.statuses.isLoadingShippingOptions,\n (isLoadingShippingOptions) => () => isLoadingShippingOptions === true,\n );\n\n const isCreating = createSelector(\n (state: ConsignmentState) => state.statuses.isCreating,\n (isCreating) => () => isCreating === true,\n );\n\n const isUpdating = createSelector(\n (state: ConsignmentState) => state.statuses.isUpdating,\n (isUpdating) => (consignmentId?: string) => {\n if (consignmentId) {\n return isUpdating[consignmentId] === true;\n }\n\n return find(isUpdating) === true;\n },\n );\n\n const isDeleting = createSelector(\n (state: ConsignmentState) => state.statuses.isDeleting,\n (isDeleting) => (consignmentId?: string) => {\n if (consignmentId) {\n return isDeleting[consignmentId] === true;\n }\n\n return find(isDeleting) === true;\n },\n );\n\n const isAssigningItems = createSelector(\n getConsignmentByAddress,\n isUpdating,\n isCreating,\n (getConsignmentByAddress, isUpdating, isCreating) => (address: AddressRequestBody) => {\n const consignment = getConsignmentByAddress(address);\n\n return consignment ? isUpdating(consignment.id) : isCreating();\n },\n );\n\n const isUpdatingShippingOption = createSelector(\n (state: ConsignmentState) => state.statuses.isUpdatingShippingOption,\n (isUpdatingShippingOption) => (consignmentId?: string) => {\n if (consignmentId) {\n return isUpdatingShippingOption[consignmentId] === true;\n }\n\n return find(isUpdatingShippingOption) === true;\n },\n );\n\n return memoizeOne(\n (state: ConsignmentState = DEFAULT_STATE, cart: CartSelector): ConsignmentSelector => {\n return {\n getConsignments: getConsignments(state),\n getConsignmentsOrThrow: getConsignmentsOrThrow(state),\n getConsignmentById: getConsignmentById(state),\n getConsignmentByAddress: getConsignmentByAddress(state),\n getShippingOption: getShippingOption(state),\n getLoadError: getLoadError(state),\n getCreateError: getCreateError(state),\n getLoadShippingOptionsError: getLoadShippingOptionsError(state),\n getUnassignedItems: getUnassignedItems(state, { cart }),\n getUpdateError: getUpdateError(state),\n getDeleteError: getDeleteError(state),\n getItemAssignmentError: getItemAssignmentError(state),\n getUpdateShippingOptionError: getUpdateShippingOptionError(state),\n isLoading: isLoading(state),\n isLoadingShippingOptions: isLoadingShippingOptions(state),\n isCreating: isCreating(state),\n isUpdating: isUpdating(state),\n isDeleting: isDeleting(state),\n isAssigningItems: isAssigningItems(state),\n isUpdatingShippingOption: isUpdatingShippingOption(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { BillingAddressSelector } from '../billing';\nimport { CartSelector } from '../cart';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { CouponSelector, GiftCertificateSelector } from '../coupon';\nimport { CustomerSelector } from '../customer';\nimport { ConsignmentSelector } from '../shipping';\n\nimport Checkout from './checkout';\nimport CheckoutState, { DEFAULT_STATE } from './checkout-state';\n\nexport default interface CheckoutSelector {\n getCheckout(): Checkout | undefined;\n getCheckoutOrThrow(): Checkout;\n getOutstandingBalance(useStoreCredit?: boolean): number | undefined;\n getLoadError(): Error | undefined;\n getUpdateError(): Error | undefined;\n isExecutingSpamCheck(): boolean;\n isLoading(): boolean;\n isUpdating(): boolean;\n}\n\nexport type CheckoutSelectorFactory = (\n state: CheckoutState,\n billingAddress: BillingAddressSelector,\n cart: CartSelector,\n consignments: ConsignmentSelector,\n coupons: CouponSelector,\n customer: CustomerSelector,\n giftCertificates: GiftCertificateSelector,\n) => CheckoutSelector;\n\ninterface CheckoutSelectorDependencies {\n billingAddress: BillingAddressSelector;\n cart: CartSelector;\n consignments: ConsignmentSelector;\n coupons: CouponSelector;\n customer: CustomerSelector;\n giftCertificates: GiftCertificateSelector;\n}\n\nexport function createCheckoutSelectorFactory(): CheckoutSelectorFactory {\n const getCheckout = createSelector(\n (state: CheckoutState) => state.data,\n (_: CheckoutState, { billingAddress }: CheckoutSelectorDependencies) =>\n billingAddress.getBillingAddress,\n (_: CheckoutState, { cart }: CheckoutSelectorDependencies) => cart.getCart,\n (_: CheckoutState, { customer }: CheckoutSelectorDependencies) => customer.getCustomer,\n (_: CheckoutState, { consignments }: CheckoutSelectorDependencies) =>\n consignments.getConsignments,\n (_: CheckoutState, { coupons }: CheckoutSelectorDependencies) => coupons.getCoupons,\n (_: CheckoutState, { giftCertificates }: CheckoutSelectorDependencies) =>\n giftCertificates.getGiftCertificates,\n (\n data,\n getBillingAddress,\n getCart,\n getCustomer,\n getConsignments,\n getCoupons,\n getGiftCertificates,\n ) =>\n () => {\n const billingAddress = getBillingAddress();\n const cart = getCart();\n const customer = getCustomer();\n const consignments = getConsignments() || [];\n const coupons = getCoupons() || [];\n const giftCertificates = getGiftCertificates() || [];\n\n if (!data || !cart || !customer) {\n return;\n }\n\n return {\n ...data,\n billingAddress,\n cart,\n customer,\n consignments,\n coupons,\n giftCertificates,\n };\n },\n );\n\n const getCheckoutOrThrow = createSelector(getCheckout, (getCheckout) => () => {\n return guard(\n getCheckout(),\n () => new MissingDataError(MissingDataErrorType.MissingCheckout),\n );\n });\n\n const getOutstandingBalance = createSelector(\n getCheckout,\n (getCheckout) => (useStoreCredit?: boolean) => {\n const checkout = getCheckout();\n\n if (!checkout) {\n return;\n }\n\n const grandTotal = checkout.grandTotal || 0;\n const storeCredit = checkout.customer.storeCredit || 0;\n\n return useStoreCredit\n ? Math.max(grandTotal - storeCredit, 0)\n : checkout.outstandingBalance;\n },\n );\n\n const getLoadError = createSelector(\n (state: CheckoutState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const getUpdateError = createSelector(\n (state: CheckoutState) => state.errors.updateError,\n (error) => () => error,\n );\n\n const isExecutingSpamCheck = createSelector(\n (state: CheckoutState) => state.statuses.isExecutingSpamCheck,\n (isExecutingSpamCheck) => () => isExecutingSpamCheck === true,\n );\n\n const isLoading = createSelector(\n (state: CheckoutState) => state.statuses.isLoading,\n (isLoading) => () => isLoading === true,\n );\n\n const isUpdating = createSelector(\n (state: CheckoutState) => state.statuses.isUpdating,\n (isUpdating) => () => isUpdating === true,\n );\n\n return memoizeOne(\n (\n state: CheckoutState = DEFAULT_STATE,\n billingAddress: BillingAddressSelector,\n cart: CartSelector,\n consignments: ConsignmentSelector,\n coupons: CouponSelector,\n customer: CustomerSelector,\n giftCertificates: GiftCertificateSelector,\n ): CheckoutSelector => {\n return {\n getCheckout: getCheckout(state, {\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n }),\n getCheckoutOrThrow: getCheckoutOrThrow(state, {\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n }),\n getOutstandingBalance: getOutstandingBalance(state, {\n billingAddress,\n cart,\n consignments,\n coupons,\n customer,\n giftCertificates,\n }),\n getLoadError: getLoadError(state),\n getUpdateError: getUpdateError(state),\n isExecutingSpamCheck: isExecutingSpamCheck(state),\n isLoading: isLoading(state),\n isUpdating: isUpdating(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { CouponSelector } from '../coupon';\nimport OrderBillingAddressSelector from '../order-billing-address/order-billing-address-selector';\n\nimport Order from './order';\nimport OrderState, { DEFAULT_STATE, OrderMetaState } from './order-state';\n\nexport default interface OrderSelector {\n getOrder(): Order | undefined;\n getOrderOrThrow(): Order;\n getOrderMeta(): OrderMetaState | undefined;\n getLoadError(): Error | undefined;\n getPaymentId(methodId: string): string | undefined;\n isLoading(): boolean;\n}\n\nexport type OrderSelectorFactory = (\n state: OrderState,\n billingAddress: OrderBillingAddressSelector,\n coupons: CouponSelector,\n) => OrderSelector;\n\ninterface OrderSelectorDependencies {\n billingAddress: OrderBillingAddressSelector;\n coupons: CouponSelector;\n}\n\nexport function createOrderSelectorFactory(): OrderSelectorFactory {\n const getOrder = createSelector(\n (state: OrderState) => state.data,\n (_: OrderState, { billingAddress }: OrderSelectorDependencies) =>\n billingAddress.getOrderBillingAddress(),\n (_: OrderState, { coupons }: OrderSelectorDependencies) => coupons.getCoupons(),\n (data, billingAddress, coupons = []) =>\n () => {\n if (!data || !billingAddress) {\n return;\n }\n\n return {\n ...data,\n billingAddress,\n coupons,\n };\n },\n );\n\n const getOrderOrThrow = createSelector(getOrder, (getOrder) => () => {\n return guard(getOrder(), () => new MissingDataError(MissingDataErrorType.MissingOrder));\n });\n\n const getOrderMeta = createSelector(\n (state: OrderState) => state.meta,\n (meta) => () => meta,\n );\n\n const getLoadError = createSelector(\n (state: OrderState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const getPaymentId = createSelector(\n (state: OrderState) => state.data?.payments,\n (payments = []) =>\n (methodId: string) => {\n const currentPayment = payments.find(({ providerId }) => providerId === methodId);\n\n return currentPayment?.paymentId;\n },\n );\n\n const isLoading = createSelector(\n (state: OrderState) => !!state.statuses.isLoading,\n (status) => () => status,\n );\n\n return memoizeOne(\n (\n state: OrderState = DEFAULT_STATE,\n billingAddress: OrderBillingAddressSelector,\n coupons: CouponSelector,\n ): OrderSelector => {\n return {\n getOrder: getOrder(state, { billingAddress, coupons }),\n getOrderOrThrow: getOrderOrThrow(state, { billingAddress, coupons }),\n getOrderMeta: getOrderMeta(state),\n getLoadError: getLoadError(state),\n getPaymentId: getPaymentId(state),\n isLoading: isLoading(state),\n };\n },\n );\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport StoreCreditState, { DEFAULT_STATE } from './store-credit-state';\n\nexport default interface StoreCreditSelector {\n getApplyError(): RequestError | undefined;\n isApplying(): boolean;\n}\n\nexport type StoreCreditSelectorFactory = (state: StoreCreditState) => StoreCreditSelector;\n\nexport function createStoreCreditSelectorFactory(): StoreCreditSelectorFactory {\n const getApplyError = createSelector(\n (state: StoreCreditState) => state.errors.applyError,\n (error) => () => error,\n );\n\n const isApplying = createSelector(\n (state: StoreCreditState) => !!state.statuses.isApplying,\n (status) => () => status,\n );\n\n return memoizeOne((state: StoreCreditState = DEFAULT_STATE): StoreCreditSelector => {\n return {\n getApplyError: getApplyError(state),\n isApplying: isApplying(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport SubscriptionsState, { DEFAULT_STATE } from './subscriptions-state';\n\nexport default interface SubscriptionsSelector {\n getUpdateError(): Error | undefined;\n isUpdating(): boolean;\n}\n\nexport type SubscriptionsSelectorFactory = (state: SubscriptionsState) => SubscriptionsSelector;\n\nexport function createSubscriptionsSelectorFactory(): SubscriptionsSelectorFactory {\n const getUpdateError = createSelector(\n (state: SubscriptionsState) => state.errors.updateError,\n (error) => () => error,\n );\n\n const isUpdating = createSelector(\n (state: SubscriptionsState) => !!state.statuses.isUpdating,\n (status) => () => status,\n );\n\n return memoizeOne((state: SubscriptionsState = DEFAULT_STATE): SubscriptionsSelector => {\n return {\n getUpdateError: getUpdateError(state),\n isUpdating: isUpdating(state),\n };\n });\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport { Extension, ExtensionRegion } from './extension';\nimport { DEFAULT_STATE, ExtensionState } from './extension-state';\n\nexport interface ExtensionSelector {\n getExtensions(): Extension[] | undefined;\n getExtensionByRegion(region: ExtensionRegion): Extension | undefined;\n getLoadError(): Error | undefined;\n isLoading(): boolean;\n}\n\nexport type ExtensionSelectorFactory = (state: ExtensionState) => ExtensionSelector;\n\nexport function createExtensionSelectorFactory(): ExtensionSelectorFactory {\n const getExtensions = createSelector(\n (state: ExtensionState) => state.data,\n (data) => () => data,\n );\n\n const getExtensionByRegion = createSelector(\n (state: ExtensionState) => state.data,\n (data) => (region: ExtensionRegion) => data?.find((e) => e.region === region),\n );\n\n const getLoadError = createSelector(\n (state: ExtensionState) => state.errors.loadError,\n (error) => () => error,\n );\n\n const isLoading = createSelector(\n (state: ExtensionState) => state.statuses.isLoading,\n (isLoading) => () => !!isLoading,\n );\n\n return memoizeOne((state: ExtensionState = DEFAULT_STATE): ExtensionSelector => {\n return {\n getExtensions: getExtensions(state),\n getExtensionByRegion: getExtensionByRegion(state),\n getLoadError: getLoadError(state),\n isLoading: isLoading(state),\n };\n });\n}\n","import { createDataStore } from '@bigcommerce/data-store';\n\nimport { createRequestErrorFactory } from '../common/error';\n\nimport CheckoutStore, { CheckoutStoreOptions } from './checkout-store';\nimport CheckoutStoreState from './checkout-store-state';\nimport createActionTransformer from './create-action-transformer';\nimport createCheckoutStoreReducer from './create-checkout-store-reducer';\nimport { createInternalCheckoutSelectorsFactory } from './create-internal-checkout-selectors';\n\nexport default function createCheckoutStore(\n initialState: Partial = {},\n options?: CheckoutStoreOptions,\n): CheckoutStore {\n const actionTransformer = createActionTransformer(createRequestErrorFactory());\n const createInternalCheckoutSelectors = createInternalCheckoutSelectorsFactory();\n const stateTransformer = (state: CheckoutStoreState) => createInternalCheckoutSelectors(state);\n\n return createDataStore(createCheckoutStoreReducer(), initialState, {\n actionTransformer,\n stateTransformer,\n ...options,\n });\n}\n","import { PaymentMethodInvalidError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnrecoverableError } from './errors';\nimport RequestErrorFactory from './request-error-factory';\n\nexport default function createRequestErrorFactory(): RequestErrorFactory {\n const factory = new RequestErrorFactory();\n\n const unrecoverableErrorTypes = [\n 'catalog_only',\n 'empty_cart',\n 'invalid_order_id',\n 'invalid_order_token',\n 'missing_order_token',\n 'missing_provider_token',\n 'missing_shipping_method',\n 'order_completion_error',\n 'order_could_not_be_finalized_error',\n 'order_create_failed',\n 'provider_fatal_error',\n 'provider_setup_error',\n 'stock_too_low',\n ];\n\n unrecoverableErrorTypes.forEach((type) => {\n factory.register(type, (response, message) => new UnrecoverableError(response, message));\n });\n\n factory.register(\n 'invalid_payment_provider',\n (response) => new PaymentMethodInvalidError(response),\n );\n factory.register(\n 'payment_config_not_found',\n (response) => new PaymentMethodInvalidError(response),\n );\n\n return factory;\n}\n","import { Action } from '@bigcommerce/data-store';\nimport { from, Observable, Subscribable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { RequestErrorFactory } from '../common/error';\n\nexport default function createActionTransformer(\n requestErrorFactory: RequestErrorFactory,\n): (action: Subscribable) => Observable {\n return (action$) =>\n from(action$).pipe(\n catchError((action) => {\n if (action instanceof Error || action.payload instanceof Error) {\n throw action;\n }\n\n if (isResponse(action.payload)) {\n const message = action.payload.body && action.payload.body.detail;\n\n throw {\n ...action,\n payload: requestErrorFactory.createError(action.payload, message),\n };\n }\n\n throw action;\n }),\n );\n}\n\nfunction isResponse(object: any) {\n if (!object || typeof object !== 'object') {\n return false;\n }\n\n return ['body', 'headers', 'status', 'statusText'].every((key) =>\n Object.prototype.hasOwnProperty.call(object, key),\n );\n}\n","import { Action, combineReducers, Reducer } from '@bigcommerce/data-store';\n\nimport { billingAddressReducer } from '../billing';\nimport { cartReducer } from '../cart';\nimport { checkoutButtonReducer } from '../checkout-buttons';\nimport { configReducer } from '../config';\nimport { couponReducer, giftCertificateReducer } from '../coupon';\nimport { customerReducer, customerStrategyReducer } from '../customer';\nimport { extensionReducer } from '../extension';\nimport { formFieldsReducer } from '../form';\nimport { countryReducer } from '../geography';\nimport { orderReducer } from '../order';\nimport { orderBillingAddressReducer } from '../order-billing-address';\nimport { paymentMethodReducer, paymentReducer, paymentStrategyReducer } from '../payment';\nimport { instrumentReducer } from '../payment/instrument';\nimport { remoteCheckoutReducer } from '../remote-checkout';\nimport {\n consignmentReducer,\n pickupOptionReducer,\n shippingCountryReducer,\n shippingStrategyReducer,\n} from '../shipping';\nimport { signInEmailReducer } from '../signin-email';\nimport { storeCreditReducer } from '../store-credit';\nimport { subscriptionsReducer } from '../subscription';\n\nimport checkoutReducer from './checkout-reducer';\nimport CheckoutStoreState from './checkout-store-state';\n\nexport default function createCheckoutStoreReducer(): Reducer {\n return combineReducers({\n billingAddress: billingAddressReducer,\n cart: cartReducer,\n checkout: checkoutReducer,\n checkoutButton: checkoutButtonReducer,\n config: configReducer,\n consignments: consignmentReducer,\n countries: countryReducer,\n coupons: couponReducer,\n customer: customerReducer,\n customerStrategies: customerStrategyReducer,\n extensions: extensionReducer,\n formFields: formFieldsReducer,\n giftCertificates: giftCertificateReducer,\n instruments: instrumentReducer,\n orderBillingAddress: orderBillingAddressReducer,\n order: orderReducer,\n payment: paymentReducer,\n paymentMethods: paymentMethodReducer,\n paymentStrategies: paymentStrategyReducer,\n pickupOptions: pickupOptionReducer,\n remoteCheckout: remoteCheckoutReducer,\n shippingCountries: shippingCountryReducer,\n shippingStrategies: shippingStrategyReducer,\n signInEmail: signInEmailReducer,\n subscriptions: subscriptionsReducer,\n storeCredit: storeCreditReducer,\n });\n}\n","import cacheAction from './cache-action';\nimport isActionOptions from './is-action-options';\n\nexport default function cachableActionDecorator any>(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor {\n const memoizedMethods = new WeakMap();\n\n function decorateMethod(this: object, method: TMethod): TMethod {\n return ((...args: any[]) => {\n const lastArg = args[args.length - 1];\n const { useCache } = isActionOptions(lastArg) ? lastArg : { useCache: false };\n\n if (!useCache) {\n return method.call(this, ...args);\n }\n\n const instanceMethods = memoizedMethods.get(this) || {};\n\n if (!memoizedMethods.get(this)) {\n memoizedMethods.set(this, instanceMethods);\n }\n\n if (!instanceMethods[key]) {\n instanceMethods[key] = cacheAction(method);\n }\n\n return instanceMethods[key].call(this, ...args);\n }) as TMethod;\n }\n\n return {\n get() {\n if (typeof descriptor.value !== 'function') {\n throw new Error('Decorator should be used in functions');\n }\n\n const value = decorateMethod.call(this, descriptor.value);\n\n Object.defineProperty(this, key, { ...descriptor, value });\n\n return value;\n },\n };\n}\n","import ActionOptions from './action-options';\n\nexport default function isActionOptions(param: any): param is ActionOptions {\n return param && typeof param.useCache === 'boolean';\n}\n","import { Action, ThunkAction } from '@bigcommerce/data-store';\nimport { memoize } from '@bigcommerce/memoize';\nimport { from, Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nexport default function cacheAction(fn: TFunction): TFunction {\n function decoratedFn(this: any, ...args: any[]) {\n const action = fn.call(this, ...args);\n\n if (action instanceof Observable) {\n return from(action).pipe(shareReplay());\n }\n\n if (typeof action === 'function') {\n return memoize((store) => from(action(store)).pipe(shareReplay()));\n }\n\n return action;\n }\n\n return memoize(decoratedFn as TFunction);\n}\n\ntype CreateActionFn = (...args: any[]) => Observable | ThunkAction | Action;\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { filter } from 'lodash';\nimport { Observable, Observer } from 'rxjs';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport {\n LoadPaymentMethodAction,\n LoadPaymentMethodsAction,\n PaymentMethodActionType,\n} from './payment-method-actions';\nimport PaymentMethodRequestSender from './payment-method-request-sender';\nimport { isApplePayWindow } from './strategies/apple-pay';\n\nimport { PaymentMethod } from '.';\n\nconst APPLEPAYID = 'applepay';\n\nexport default class PaymentMethodActionCreator {\n constructor(private _requestSender: PaymentMethodRequestSender) {}\n\n loadPaymentMethods(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const cart = state.cart.getCartOrThrow();\n\n observer.next(createAction(PaymentMethodActionType.LoadPaymentMethodsRequested));\n\n this._requestSender\n .loadPaymentMethods({\n ...options,\n params: { ...options?.params, cartId: cart.id },\n })\n .then((response) => {\n const meta = {\n deviceSessionId: response.headers['x-device-session-id'],\n sessionHash: response.headers['x-session-hash'],\n };\n const methods = response.body;\n const filteredMethods = Array.isArray(methods)\n ? this._filterApplePay(methods)\n : methods;\n\n observer.next(\n createAction(\n PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n filteredMethods,\n meta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n PaymentMethodActionType.LoadPaymentMethodsFailed,\n response,\n ),\n );\n });\n });\n }\n\n @cachableAction\n loadPaymentMethod(\n methodId: string,\n options?: RequestOptions & ActionOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const cartId = state.cart.getCart()?.id;\n const params = cartId ? { ...options?.params, cartId } : { ...options?.params };\n\n observer.next(\n createAction(PaymentMethodActionType.LoadPaymentMethodRequested, undefined, {\n methodId,\n }),\n );\n\n this._requestSender\n .loadPaymentMethod(methodId, { ...options, params })\n .then((response) => {\n observer.next(\n createAction(\n PaymentMethodActionType.LoadPaymentMethodSucceeded,\n response.body,\n { methodId },\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n PaymentMethodActionType.LoadPaymentMethodFailed,\n response,\n { methodId },\n ),\n );\n });\n });\n }\n\n private _filterApplePay(methods: PaymentMethod[]): PaymentMethod[] {\n return filter(methods, (method) => {\n if (method.id === APPLEPAYID && !isApplePayWindow(window)) {\n return false;\n }\n\n return true;\n });\n }\n}\n","export interface ApplePayWindow extends Window {\n ApplePaySession: ApplePaySession;\n}\n\nexport default function isApplePayWindow(window: Window): window is ApplePayWindow {\n return 'ApplePaySession' in window;\n}\n\nexport function assertApplePayWindow(window: Window): asserts window is ApplePayWindow {\n if (!isApplePayWindow(window)) {\n throw new Error('Apple pay is not supported');\n }\n}\n","enum ContentType {\n Json = 'application/json',\n JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\n","export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport PaymentMethod from './payment-method';\n\nexport default class PaymentMethodRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadPaymentMethods({ timeout, params }: RequestOptions = {}): Promise<\n Response\n > {\n const url = '/api/storefront/payments';\n\n return this._requestSender.get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n params,\n });\n }\n\n loadPaymentMethod(\n methodId: string,\n { timeout, params }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/payments/${methodId}`;\n\n return this._requestSender.get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n params,\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/script-loader\");","import { Action, createErrorAction } from '@bigcommerce/data-store';\nimport { concat, Observable, of, throwError } from 'rxjs';\n\nexport default function throwErrorAction(\n type: TType,\n error?: TPayload,\n meta?: TMeta,\n): Observable> {\n if (isErrorAction(error)) {\n return concat(of(error), throwError(createErrorAction(type, error.payload, meta)));\n }\n\n return throwError(createErrorAction(type, error, meta));\n}\n\nfunction isErrorAction(action: any): action is Action {\n return action && action.type && action.error;\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class UnableToContinueAsGuestError extends StandardError {\n constructor(message?: string) {\n super(\n message || 'Unable to continue as a guest because the customer is already signed in.',\n );\n\n this.name = 'UnableToContinueAsGuestError';\n this.type = 'unable_to_continue_as_guest';\n }\n}\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Response } from '@bigcommerce/request-sender';\nimport { concat, defer, empty, merge, Observable, Observer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { Checkout, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { GuestCredentials } from '../customer';\nimport { SubscriptionsActionCreator, UpdateSubscriptionsAction } from '../subscription';\n\nimport { BillingAddressUpdateRequestBody } from './billing-address';\nimport {\n BillingAddressActionType,\n ContinueAsGuestAction,\n UpdateBillingAddressAction,\n} from './billing-address-actions';\nimport { UnableToContinueAsGuestError } from './errors';\n\nimport { BillingAddressRequestSender } from '.';\n\nexport default class BillingAddressActionCreator {\n constructor(\n private _requestSender: BillingAddressRequestSender,\n private _subscriptionActionCreator: SubscriptionsActionCreator,\n ) {}\n\n continueAsGuest(\n credentials: GuestCredentials,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const customer = state.customer.getCustomer();\n\n if (customer && !customer.isGuest) {\n throw new UnableToContinueAsGuestError();\n }\n\n const billingAddress = state.billingAddress.getBillingAddress();\n\n let billingAddressRequestBody: Partial;\n\n if (!billingAddress) {\n billingAddressRequestBody = credentials;\n } else {\n const { country, ...existingBillingAddressRequestBody } = billingAddress;\n\n billingAddressRequestBody = {\n ...existingBillingAddressRequestBody,\n ...credentials,\n };\n }\n\n return merge(\n concat(\n of(createAction(BillingAddressActionType.ContinueAsGuestRequested)),\n defer(async () => {\n const { body } = await this._createOrUpdateBillingAddress(\n checkout.id,\n billingAddressRequestBody,\n options,\n );\n\n return createAction(\n BillingAddressActionType.ContinueAsGuestSucceeded,\n body,\n );\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(BillingAddressActionType.ContinueAsGuestFailed, error),\n ),\n ),\n this._updateCustomerConsent(credentials, options),\n );\n };\n }\n\n updateAddress(\n address: Partial,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(BillingAddressActionType.UpdateBillingAddressRequested));\n\n const billingAddress = state.billingAddress.getBillingAddress();\n\n // If email is not present in the address provided by the client, then\n // fall back to the stored email as it could have been set separately\n // using a convenience method. We can't rely on billingAddress having\n // an ID to consider that there's a preexisting email, as billingAddress\n // object from Order doesn't have an ID.\n const billingAddressRequestBody = {\n ...address,\n email:\n typeof address.email === 'undefined' && billingAddress\n ? billingAddress.email\n : address.email,\n };\n\n if (billingAddress && billingAddress.id) {\n billingAddressRequestBody.id = billingAddress.id;\n }\n\n this._createOrUpdateBillingAddress(checkout.id, billingAddressRequestBody, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n BillingAddressActionType.UpdateBillingAddressSucceeded,\n body,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n BillingAddressActionType.UpdateBillingAddressFailed,\n response,\n ),\n );\n });\n });\n }\n\n private _updateCustomerConsent(\n { email, acceptsAbandonedCartEmails, acceptsMarketingNewsletter }: GuestCredentials,\n options?: RequestOptions,\n ): Observable {\n if (\n (acceptsAbandonedCartEmails === undefined || acceptsAbandonedCartEmails === null) &&\n (acceptsMarketingNewsletter === undefined || acceptsMarketingNewsletter === null)\n ) {\n return empty();\n }\n\n return this._subscriptionActionCreator.updateSubscriptions(\n {\n email,\n acceptsMarketingNewsletter: acceptsMarketingNewsletter || false,\n acceptsAbandonedCartEmails: acceptsAbandonedCartEmails || false,\n },\n options,\n );\n }\n\n private _createOrUpdateBillingAddress(\n checkoutId: string,\n address: Partial,\n options?: RequestOptions,\n ): Promise> {\n if (!address.id) {\n return this._requestSender.createAddress(checkoutId, address, options);\n }\n\n return this._requestSender.updateAddress(checkoutId, address, options);\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { AddressRequestBody } from '../address';\nimport { Checkout } from '../checkout';\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { BillingAddressUpdateRequestBody } from './billing-address';\n\nconst DEFAULT_PARAMS = {\n include: [\n 'cart.lineItems.physicalItems.options',\n 'cart.lineItems.digitalItems.options',\n 'customer',\n 'promotions.banners',\n ].join(','),\n};\n\nexport default class BillingAddressRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createAddress(\n checkoutId: string,\n address: Partial,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/billing-address`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, {\n body: address,\n params: DEFAULT_PARAMS,\n headers,\n timeout,\n });\n }\n\n updateAddress(\n checkoutId: string,\n address: Partial,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const { id, ...body } = address;\n const url = `/api/storefront/checkouts/${checkoutId}/billing-address/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.put(url, { params: DEFAULT_PARAMS, body, headers, timeout });\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { BuyNowCartRequestBody, Cart } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class CartRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createBuyNowCart(\n body: BuyNowCartRequestBody,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/api/storefront/carts';\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, { body, headers, timeout });\n }\n}\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, merge, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { ConfigActionCreator } from '../config';\nimport { FormFieldsActionCreator } from '../form';\n\nimport { CheckoutRequestBody } from './checkout';\nimport { CheckoutActionType, LoadCheckoutAction, UpdateCheckoutAction } from './checkout-actions';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport default class CheckoutActionCreator {\n constructor(\n private _checkoutRequestSender: CheckoutRequestSender,\n private _configActionCreator: ConfigActionCreator,\n private _formFieldsActionCreator: FormFieldsActionCreator,\n ) {}\n\n loadCheckout(id: string, options?: RequestOptions): Observable {\n return concat(\n of(createAction(CheckoutActionType.LoadCheckoutRequested)),\n merge(\n this._configActionCreator.loadConfig({\n ...options,\n useCache: true,\n params: { ...options?.params, checkoutId: id },\n }),\n this._formFieldsActionCreator.loadFormFields({ ...options, useCache: true }),\n defer(() =>\n this._checkoutRequestSender\n .loadCheckout(id, options)\n .then(({ body }) =>\n createAction(CheckoutActionType.LoadCheckoutSucceeded, body),\n ),\n ),\n ),\n ).pipe(\n catchError((error) => throwErrorAction(CheckoutActionType.LoadCheckoutFailed, error)),\n );\n }\n\n loadDefaultCheckout(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(CheckoutActionType.LoadCheckoutRequested)),\n merge(\n this._configActionCreator.loadConfig(),\n this._formFieldsActionCreator.loadFormFields({ ...options, useCache: true }),\n ),\n defer(async () => {\n const state = store.getState();\n const context = state.config.getContextConfig();\n\n if (!context || !context.checkoutId) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n }\n\n const { body } = await this._checkoutRequestSender.loadCheckout(\n context.checkoutId,\n options,\n );\n\n return createAction(CheckoutActionType.LoadCheckoutSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CheckoutActionType.LoadCheckoutFailed, error),\n ),\n );\n }\n\n updateCheckout(\n body: CheckoutRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n new Observable((observer) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(CheckoutActionType.UpdateCheckoutRequested));\n\n this._checkoutRequestSender\n .updateCheckout(checkout.id, body, options)\n .then(({ body }) => {\n observer.next(\n createAction(CheckoutActionType.UpdateCheckoutSucceeded, body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(CheckoutActionType.UpdateCheckoutFailed, response),\n );\n });\n });\n }\n\n loadCurrentCheckout(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return this.loadCheckout(checkout.id, options);\n };\n }\n}\n","import { uniq } from 'lodash';\n\nexport default function joinIncludes(includes: T[]): string {\n return uniq(includes).join(',');\n}\n","import joinIncludes from './join-includes';\nimport mergeIncludes from './merge-includes';\n\n/**\n * Joins or merges a base list of includes with a set of additional includes.\n */\nexport default function joinOrMergeIncludes(\n baseIncludes: T[],\n includeDictionaryOrList: { [key in T]?: boolean } | T[] = [],\n): string {\n return Array.isArray(includeDictionaryOrList)\n ? joinIncludes([...baseIncludes, ...includeDictionaryOrList])\n : mergeIncludes(baseIncludes, includeDictionaryOrList);\n}\n","import { difference, filter, keys, pickBy } from 'lodash';\n\nimport joinIncludes from './join-includes';\n\n/**\n * Merges includes given a list of base includes and a dictionary\n * of includes\n */\nexport default function mergeIncludes(\n baseIncludes: T[],\n includesDictionary?: { [key in T]?: boolean },\n): string {\n const deletions = keys(pickBy(includesDictionary, (on) => !on));\n const additions = keys(filter(includesDictionary));\n\n return joinIncludes([...difference(baseIncludes, deletions), ...additions]);\n}\n","const CHECKOUT_DEFAULT_INCLUDES = [\n 'cart.lineItems.physicalItems.options',\n 'cart.lineItems.digitalItems.options',\n 'customer',\n 'customer.customerGroup',\n 'payments',\n 'promotions.banners',\n];\n\nexport default CHECKOUT_DEFAULT_INCLUDES;\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 when we are unable to retrieve a checkout object from the\n * server using the provided ID. It could be because the shopper does not have\n * permission to view the object, or the ID itself is invalid.\n */\nexport default class CheckoutNotAvailableError extends RequestError {\n constructor(response: Response) {\n super(response, { message: response.body.title });\n\n this.name = 'CheckoutNotAvailableError';\n this.type = 'checkout_not_available';\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n joinOrMergeIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport Checkout, { CheckoutRequestBody } from './checkout';\nimport CHECKOUT_DEFAULT_INCLUDES from './checkout-default-includes';\nimport CheckoutParams from './checkout-params';\nimport { CheckoutNotAvailableError } from './errors';\n\nexport default class CheckoutRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadCheckout(\n id: string,\n { params: { include } = {}, timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkout/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender\n .get(url, {\n params: {\n include: joinOrMergeIncludes(CHECKOUT_DEFAULT_INCLUDES, include),\n },\n headers,\n timeout,\n })\n .catch((error) => {\n if (error.status >= 400 && error.status < 500) {\n throw new CheckoutNotAvailableError(error);\n }\n\n throw error;\n });\n }\n\n updateCheckout(\n id: string,\n body: CheckoutRequestBody,\n { params: { include } = {}, timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkout/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.put(url, {\n params: {\n include: joinOrMergeIncludes(CHECKOUT_DEFAULT_INCLUDES, include),\n },\n body,\n headers,\n timeout,\n });\n }\n}\n","import { isEqual } from 'lodash';\n\nimport { PartialDeep } from '../common/types';\n\nimport Cart from './cart';\n\nexport default class CartComparator {\n isEqual(cartA: Cart, cartB: Cart): boolean {\n return isEqual(this._normalize(cartA), this._normalize(cartB));\n }\n\n private _normalize(cart: Cart): PartialDeep {\n return {\n cartAmount: cart.cartAmount,\n currency: cart.currency,\n id: cart.id,\n lineItems: {\n digitalItems: cart.lineItems.digitalItems\n .slice()\n .sort((itemA, itemB) =>\n `${itemA.productId}${itemA.variantId}`.localeCompare(\n `${itemB.productId}${itemB.variantId}`,\n ),\n )\n .map((item) => ({\n extendedSalePrice: item.extendedSalePrice,\n productId: item.productId,\n quantity: item.quantity,\n variantId: item.variantId,\n })),\n giftCertificates: cart.lineItems.giftCertificates\n .slice()\n .sort((itemA, itemB) => `${itemA.id}`.localeCompare(`${itemB.id}`))\n .map((item) => ({\n amount: item.amount,\n recipient: item.recipient,\n })),\n physicalItems: cart.lineItems.physicalItems\n .slice()\n .sort((itemA, itemB) =>\n `${itemA.productId}${itemA.variantId}`.localeCompare(\n `${itemB.productId}${itemB.variantId}`,\n ),\n )\n .map((item) => ({\n extendedSalePrice: item.extendedSalePrice,\n productId: item.productId,\n quantity: item.quantity,\n variantId: item.variantId,\n giftWrapping: item.giftWrapping,\n })),\n },\n };\n }\n}\n","import { ComparableCheckout } from '../../checkout';\nimport { StandardError } from '../../common/error/errors';\n\nexport default class CartChangedError extends StandardError {\n /**\n * @alpha\n * Please note that this option is currently in an early stage of\n * development. Therefore the API is unstable and not ready for public\n * consumption.\n */\n data: { previous: ComparableCheckout; updated: ComparableCheckout };\n\n constructor(previous: ComparableCheckout, updated: ComparableCheckout) {\n super(\n 'An update to your shopping cart has been detected and your available shipping costs have been updated.',\n );\n\n this.name = 'CartChangedError';\n this.type = 'cart_changed';\n this.data = {\n previous,\n updated,\n };\n }\n}\n","import { isEqual, map } from 'lodash';\n\nimport { Cart, CartComparator } from '../cart';\nimport { CartChangedError } from '../cart/errors';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { Coupon, GiftCertificate } from '../coupon';\n\nimport Checkout from './checkout';\nimport CheckoutRequestSender from './checkout-request-sender';\n\nexport type ComparableCheckout = Pick<\n Checkout,\n 'outstandingBalance' | 'coupons' | 'giftCertificates'\n> & {\n cart: Partial;\n};\n\nexport default class CheckoutValidator {\n constructor(private _checkoutRequestSender: CheckoutRequestSender) {}\n\n validate(checkout?: Checkout, options?: RequestOptions): Promise {\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return this._checkoutRequestSender.loadCheckout(checkout.id, options).then((response) => {\n const comparator = new CartComparator();\n\n if (\n checkout.outstandingBalance === response.body.outstandingBalance &&\n this._compareCoupons(checkout.coupons, response.body.coupons) &&\n this._compareGiftCertificates(\n checkout.giftCertificates,\n response.body.giftCertificates,\n ) &&\n comparator.isEqual(checkout.cart, response.body.cart)\n ) {\n return;\n }\n\n throw new CartChangedError(\n this._getComparableCheckout(checkout),\n this._getComparableCheckout(response.body),\n );\n });\n }\n\n private _compareCoupons(couponsA: Coupon[], couponsB: Coupon[]): boolean {\n return isEqual(map(couponsA, 'code'), map(couponsB, 'code'));\n }\n\n private _compareGiftCertificates(\n giftCertificatesA: GiftCertificate[],\n giftCertificatesB: GiftCertificate[],\n ): boolean {\n return isEqual(map(giftCertificatesA, 'code'), map(giftCertificatesB, 'code'));\n }\n\n private _getComparableCheckout(checkout: Checkout): ComparableCheckout {\n const { cart, coupons, giftCertificates, outstandingBalance } = checkout;\n\n return {\n cart: {\n cartAmount: cart.cartAmount,\n currency: cart.currency,\n lineItems: cart.lineItems,\n },\n coupons,\n giftCertificates,\n outstandingBalance,\n };\n }\n}\n","import { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport { ConfigActionType, LoadConfigAction } from './config-actions';\n\nimport { ConfigRequestSender } from '.';\n\nexport default class ConfigActionCreator {\n constructor(private _configRequestSender: ConfigRequestSender) {}\n\n @cachableAction\n loadConfig(options?: RequestOptions & ActionOptions): Observable {\n return Observable.create((observer: Observer) => {\n observer.next(createAction(ConfigActionType.LoadConfigRequested));\n\n this._configRequestSender\n .loadConfig(options)\n .then((response) => {\n observer.next(\n createAction(ConfigActionType.LoadConfigSucceeded, response.body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(createErrorAction(ConfigActionType.LoadConfigFailed, response));\n });\n });\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { CheckoutNotAvailableError } from '../checkout/errors';\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport Config from './config';\n\nexport default class ConfigRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadConfig({ timeout, params }: RequestOptions = {}): Promise> {\n const url = '/api/storefront/checkout-settings';\n\n return this._requestSender\n .get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n params,\n })\n .catch((error) => {\n if (error.status >= 400 && error.status < 500) {\n throw new CheckoutNotAvailableError(error);\n }\n\n throw error;\n });\n }\n}\n","import { ExecuteSucceededAction, SpamProtectionAction } from './spam-protection-actions';\n\nexport default function isSpamProtectionExecuteSucceededAction(\n action: SpamProtectionAction,\n): action is ExecuteSucceededAction {\n const succeededAction = action as ExecuteSucceededAction;\n\n return (\n typeof succeededAction === 'object' &&\n typeof succeededAction.payload === 'object' &&\n typeof succeededAction.payload.token === 'string'\n );\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, Observable, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { CheckoutActionCreator, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport {\n isSpamProtectionExecuteSucceededAction,\n SpamProtectionActionCreator,\n} from '../spam-protection';\n\nimport CustomerAccountRequestBody, { CustomerAddressRequestBody } from './customer-account';\nimport {\n CreateCustomerAction,\n CreateCustomerAddressAction,\n CustomerActionType,\n SignInCustomerAction,\n SignOutCustomerAction,\n} from './customer-actions';\nimport CustomerCredentials from './customer-credentials';\nimport CustomerRequestSender from './customer-request-sender';\n\nexport default class CustomerActionCreator {\n constructor(\n private _customerRequestSender: CustomerRequestSender,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _spamProtectionActionCreator: SpamProtectionActionCreator,\n ) {}\n\n createCustomer(\n customerAccount: CustomerAccountRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const config = state.config.getStoreConfigOrThrow();\n const { isStorefrontSpamProtectionEnabled } = config.checkoutSettings;\n\n const createCustomer = (token?: string) =>\n from(\n this._customerRequestSender.createAccount(\n { ...customerAccount, token },\n options,\n ),\n ).pipe(\n switchMap(() =>\n concat(\n this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n of(createAction(CustomerActionType.CreateCustomerSucceeded)),\n ),\n ),\n );\n\n return concat(\n of(createAction(CustomerActionType.CreateCustomerRequested)),\n isStorefrontSpamProtectionEnabled\n ? from(this._spamProtectionActionCreator.execute()(store)).pipe(\n switchMap((action) =>\n isSpamProtectionExecuteSucceededAction(action)\n ? concat(of(action), createCustomer(action.payload?.token))\n : of(action),\n ),\n )\n : createCustomer(),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.CreateCustomerFailed, error),\n ),\n );\n };\n }\n\n createAddress(\n customerAddress: CustomerAddressRequestBody,\n options?: RequestOptions,\n ): Observable {\n return concat(\n of(createAction(CustomerActionType.CreateCustomerAddressRequested)),\n defer(async () => {\n const { body } = await this._customerRequestSender.createAddress(\n customerAddress,\n options,\n );\n\n return createAction(CustomerActionType.CreateCustomerAddressSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.CreateCustomerAddressFailed, error),\n ),\n );\n }\n\n signInCustomer(\n credentials: CustomerCredentials,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(CustomerActionType.SignInCustomerRequested)),\n from(this._customerRequestSender.signInCustomer(credentials, options)).pipe(\n switchMap(({ body }) =>\n concat(\n this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n of(createAction(CustomerActionType.SignInCustomerSucceeded, body.data)),\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.SignInCustomerFailed, error),\n ),\n );\n }\n\n signOutCustomer(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(CustomerActionType.SignOutCustomerRequested)),\n from(this._customerRequestSender.signOutCustomer(options)).pipe(\n switchMap(({ body }) =>\n concat(\n this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n of(\n createAction(\n CustomerActionType.SignOutCustomerSucceeded,\n body.data,\n ),\n ),\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CustomerActionType.SignOutCustomerFailed, error),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport Customer from './customer';\nimport { CustomerAccountInternalRequestBody, CustomerAddressRequestBody } from './customer-account';\nimport CustomerCredentials from './customer-credentials';\nimport { InternalCustomerResponseBody } from './internal-customer-responses';\n\nexport default class CustomerRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createAccount(\n customerAccount: CustomerAccountInternalRequestBody,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/api/storefront/customer';\n\n return this._requestSender.post(url, {\n timeout,\n headers: SDK_VERSION_HEADERS,\n body: customerAccount,\n });\n }\n\n createAddress(\n customerAddress: CustomerAddressRequestBody,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/customer-address`;\n\n return this._requestSender.post(url, {\n timeout,\n headers: SDK_VERSION_HEADERS,\n body: customerAddress,\n });\n }\n\n signInCustomer(\n credentials: CustomerCredentials,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/internalapi/v1/checkout/customer';\n\n return this._requestSender.post(url, {\n timeout,\n headers: SDK_VERSION_HEADERS,\n body: credentials,\n });\n }\n\n signOutCustomer({ timeout }: RequestOptions = {}): Promise<\n Response\n > {\n const url = '/internalapi/v1/checkout/customer';\n\n return this._requestSender.delete(url, { timeout, headers: SDK_VERSION_HEADERS });\n }\n}\n","import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\n\nimport { FormFieldsActionType, LoadFormFieldsAction } from './form-fields-actions';\nimport FormFieldsRequestSender from './form-fields-request-sender';\n\nexport default class FormFieldsActionCreator {\n constructor(private _formFieldsRequestSender: FormFieldsRequestSender) {}\n\n @cachableAction\n loadFormFields(options?: RequestOptions & ActionOptions): Observable {\n return concat(\n of(createAction(FormFieldsActionType.LoadFormFieldsRequested)),\n defer(async () => {\n const { body } = await this._formFieldsRequestSender.loadFields(options);\n\n return createAction(FormFieldsActionType.LoadFormFieldsSucceeded, body);\n }),\n ).pipe(\n catchError((response) =>\n throwErrorAction(FormFieldsActionType.LoadFormFieldsFailed, response),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { FormFields } from './form-field';\n\nexport default class FormFieldsRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadFields({ timeout }: RequestOptions = {}): Promise> {\n const url = '/api/storefront/form-fields';\n\n return this._requestSender.get(url, {\n timeout,\n headers: {\n Accept: ContentType.JsonV1,\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n });\n }\n}\n","export default class CancellablePromise {\n promise: Promise;\n cancel!: (reason?: any) => void;\n\n constructor(promise: Promise) {\n const cancellable = new Promise((_, reject) => {\n this.cancel = reject;\n });\n\n this.promise = Promise.race([promise, cancellable]);\n }\n}\n","import { StandardError } from '../../error/errors';\n\nexport default class UnexpectedDetachmentError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the required element is unexpectedly detached from the page.',\n );\n\n this.name = 'UnexpectedDetachmentError';\n this.type = 'unexpected_detachment';\n }\n}\n","import { CancellablePromise } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\nexport default class DetachmentObserver {\n constructor(private _mutationObserver: MutationObserverFactory) {}\n\n async ensurePresence(targets: Node[], promise: Promise): Promise {\n const cancellable = new CancellablePromise(promise);\n\n const observer = this._mutationObserver.create((mutationsList) => {\n mutationsList.forEach((mutation) => {\n const removedTargets = Array.from(mutation.removedNodes).filter((node) =>\n targets.some((target) => node === target || node.contains(target)),\n );\n\n if (removedTargets.length === 0) {\n return;\n }\n\n cancellable.cancel(new UnexpectedDetachmentError());\n });\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n try {\n const output = await cancellable.promise;\n\n observer.disconnect();\n\n return output;\n } catch (error) {\n observer.disconnect();\n\n throw error;\n }\n }\n}\n","export interface MutationObeserverCreator {\n prototype: MutationObserver;\n new (callback: MutationCallback): MutationObserver;\n}\n\nexport interface MutationObserverWindow extends Window {\n MutationObserver: MutationObeserverCreator;\n}\n\nexport class MutationObserverFactory {\n constructor(private _window: MutationObserverWindow = window as MutationObserverWindow) {}\n\n create(callback: MutationCallback): MutationObserver {\n return new this._window.MutationObserver(callback);\n }\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 IframeEvent from './iframe-event';\n\nexport default function isIframeEvent, TType extends string>(\n object: any,\n type: TType,\n): object is TEvent {\n return object.type === type;\n}\n","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 {\n private _targetOrigin: string;\n\n constructor(targetOrigin: string, private _targetWindow?: Window) {\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,\n ): Promise;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options?: IframeEventPostOptions,\n ): Promise | 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(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, this._targetOrigin);\n\n return result;\n }\n\n setTarget(window: Window) {\n this._targetWindow = window;\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(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor;\nfunction bindDecorator>(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>(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(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor {\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 = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\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 private _isListening: boolean;\n private _listeners: EventListeners;\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(\n type: TType,\n listener: (event: TEventMap[TType]) => 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(\n type: TType,\n listener: (event: TEventMap[TType]) => 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(event: TEventMap[TType]): void {\n const listeners = this._listeners[event.type];\n\n if (!listeners) {\n return;\n }\n\n listeners.forEach((listener) => listener(event));\n }\n\n @bind\n private _handleMessage(event: MessageEvent): void {\n if (\n this._sourceOrigins.indexOf(event.origin) === -1 ||\n !isIframeEvent(event.data as TEventMap[keyof TEventMap], event.data.type)\n ) {\n return;\n }\n\n this.trigger(event.data);\n }\n}\n\ntype EventListeners = {\n [key in keyof TEventMap]?: Array<(event: TEventMap[key]) => void>;\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","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam protection\n * challenge (i.e.: they close the reCaptcha window).\n */\nexport default class SpamProtectionChallengeNotCompletedError extends StandardError {\n constructor() {\n super(\"You haven't complete our spam protection challenge. Please try again.\");\n\n this.name = 'SpamProtectionChallengeNotCompletedError';\n this.type = 'spam_protection_challenge_not_completed';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam protection\n * challenge (i.e.: they close the reCaptcha window).\n */\nexport default class CardingProtectionChallengeNotCompletedError extends StandardError {\n constructor() {\n super('Please complete our human verification challenge and try again.');\n\n this.name = 'CardingProtectionChallengeNotCompletedError';\n this.type = 'carding_protection_challenge_not_completed';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we fail to complete the required spam protection\n * verification due to an unknown reason.\n */\nexport default class CardingProtectionFailedError extends StandardError {\n constructor() {\n super('We were not able to verify that you are not a robot. Please try again.');\n\n this.name = 'CardingProtectionFailedError';\n this.type = 'carding_protection_failed';\n }\n}\n","import { switchMap, take } from 'rxjs/operators';\n\nimport { RequestError } from '../common/error/errors';\nimport { PaymentAdditionalAction } from '../payment';\n\nimport {\n CardingProtectionChallengeNotCompletedError,\n CardingProtectionFailedError,\n SpamProtectionChallengeNotCompletedError,\n} from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\n\nexport default class PaymentHumanVerificationHandler {\n constructor(private _googleRecaptcha: GoogleRecaptcha) {}\n\n handle(error: Error): Promise;\n handle(id: string, key: string): Promise;\n async handle(errorOrId: Error | string, key?: string): Promise {\n if (typeof errorOrId === 'string') {\n return this.handleWithRecaptchaSitekey(errorOrId, key);\n }\n\n return this.handleWithPaymentHumanVerificationRequestError(errorOrId);\n }\n\n private async handleWithPaymentHumanVerificationRequestError(\n error: Error,\n ): Promise {\n if (!this._isPaymentHumanVerificationRequest(error)) {\n throw error;\n }\n\n await this._initialize(error.body.additional_action_required.data.key);\n\n return this._performRecaptcha();\n }\n\n private async handleWithRecaptchaSitekey(\n id: string,\n key?: string,\n ): Promise {\n if (id !== 'recaptcha_v2') {\n throw Error('Human verification method is not supported.');\n }\n\n if (!key) {\n throw Error('Recaptcha site key is missing.');\n }\n\n await this._initialize(key);\n\n return this._performRecaptcha();\n }\n\n private _performRecaptcha(): Promise {\n return this._googleRecaptcha\n .execute()\n .pipe(take(1))\n .pipe(\n switchMap(async ({ error, token }) => {\n if (error instanceof SpamProtectionChallengeNotCompletedError) {\n throw new CardingProtectionChallengeNotCompletedError();\n }\n\n if (error || !token) {\n throw new CardingProtectionFailedError();\n }\n\n return {\n type: 'recaptcha_v2_verification',\n data: {\n human_verification_token: token,\n },\n };\n }),\n )\n .toPromise();\n }\n\n private _initialize(recaptchaSitekey: string): Promise {\n const cardingProtectionElementId = 'cardingProtectionContainer';\n\n let cardingProtectionElement = document.getElementById(cardingProtectionElementId);\n\n if (cardingProtectionElement && cardingProtectionElement.parentNode) {\n cardingProtectionElement.parentNode.removeChild(cardingProtectionElement);\n }\n\n cardingProtectionElement = document.createElement('div');\n cardingProtectionElement.setAttribute('id', cardingProtectionElementId);\n document.body.appendChild(cardingProtectionElement);\n\n return this._googleRecaptcha.load(cardingProtectionElementId, recaptchaSitekey);\n }\n\n private _isPaymentHumanVerificationRequest(error: Error): error is RequestError {\n const { additional_action_required, status } = (error as RequestError).body || {};\n\n return (\n status === 'additional_action_required' &&\n additional_action_required &&\n additional_action_required.type === 'recaptcha_v2_verification'\n );\n }\n}\n","import StandardError from './standard-error';\n\nexport enum NotInitializedErrorType {\n CheckoutButtonNotInitialized,\n CustomerNotInitialized,\n PaymentNotInitialized,\n ShippingNotInitialized,\n SpamProtectionNotInitialized,\n}\n\n/**\n * Throw this error if a method requires a certain initialization call to be\n * made first. Some objects can be constructed but they cannot be used until a\n * separate initialization call is made.\n */\nexport default class NotInitializedError extends StandardError {\n constructor(public subtype: NotInitializedErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'NotInitializedError';\n this.type = 'not_initialized';\n }\n}\n\nfunction getErrorMessage(type: NotInitializedErrorType): string {\n switch (type) {\n case NotInitializedErrorType.CustomerNotInitialized:\n return 'Unable to proceed because the customer step of checkout has not been initialized.';\n\n case NotInitializedErrorType.PaymentNotInitialized:\n return 'Unable to proceed because the payment step of checkout has not been initialized.';\n\n case NotInitializedErrorType.ShippingNotInitialized:\n return 'Unable to proceed because the shipping step of checkout has not been initialized.';\n\n case NotInitializedErrorType.SpamProtectionNotInitialized:\n return 'Unable to proceed because the checkout spam protection has not been initialized.';\n\n default:\n return 'Unable to proceed because the required component has not been initialized.';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we fail to complete the required spam protection\n * verification due to an unknown reason.\n */\nexport default class SpamProtectionFailedError extends StandardError {\n constructor() {\n super('We were not able to complete your spam protection verification. Please try again.');\n\n this.name = 'SpamProtectionFailedError';\n this.type = 'spam_protection_failed';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if spam protection is not loaded when trying to\n * complete the required spam protection verification.\n */\nexport default class SpamProtectionNotLoadedError extends StandardError {\n constructor() {\n super('Spam protection is not loaded. Please try again.');\n\n this.name = 'SpamProtectionNotLoadedError';\n this.type = 'spam_protection_failed';\n }\n}\n","import { memoize } from '@bigcommerce/memoize';\nimport { defer, Observable, of, Subject, throwError } from 'rxjs';\nimport { catchError, delay, retryWhen, switchMap } from 'rxjs/operators';\n\nimport { MutationObserverFactory } from '../common/dom';\nimport { NotInitializedError, NotInitializedErrorType } from '../common/error/errors';\n\nimport {\n SpamProtectionChallengeNotCompletedError,\n SpamProtectionFailedError,\n SpamProtectionNotLoadedError,\n} from './errors';\nimport GoogleRecaptchaScriptLoader from './google-recaptcha-script-loader';\n\nconst TIMEOUT = 7000;\nconst RETRY_INTERVAL = 250;\nconst MAX_RETRIES = TIMEOUT / RETRY_INTERVAL;\n\nexport interface RecaptchaResult {\n error?: Error;\n token?: string;\n}\n\nexport default class GoogleRecaptcha {\n private _event$?: Subject;\n private _recaptcha?: ReCaptchaV2.ReCaptcha;\n private _memoized: (\n recaptcha: ReCaptchaV2.ReCaptcha,\n sitekey: string,\n container: HTMLElement | null,\n ) => Subject;\n private _widgetId?: number;\n\n constructor(\n private googleRecaptchaScriptLoader: GoogleRecaptchaScriptLoader,\n private mutationObserverFactory: MutationObserverFactory,\n ) {\n this._memoized = memoize(\n (recaptcha: ReCaptchaV2.ReCaptcha, sitekey: string, container: HTMLElement | null) => {\n const event$ = new Subject();\n\n if (!container) {\n throw new Error();\n }\n\n this._widgetId = recaptcha.render(container.id, {\n sitekey,\n size: 'invisible',\n callback: () => {\n event$.next({\n token: recaptcha.getResponse(this._widgetId),\n });\n recaptcha.reset(this._widgetId);\n },\n 'error-callback': () => {\n event$.next({\n error: new SpamProtectionFailedError(),\n });\n },\n });\n\n return event$;\n },\n { isEqual: (a, b) => a === b },\n );\n }\n\n load(containerId: string, sitekey: string): Promise {\n return this.googleRecaptchaScriptLoader.load().then((recaptcha) => {\n if (recaptcha) {\n this._event$ = this._memoized(\n recaptcha,\n sitekey,\n document.getElementById(containerId),\n );\n this._recaptcha = recaptcha;\n }\n });\n }\n\n execute(): Observable {\n return defer(() => {\n const event$ = this._event$;\n const recaptcha = this._recaptcha;\n\n if (!event$ || !recaptcha) {\n throw new NotInitializedError(NotInitializedErrorType.SpamProtectionNotInitialized);\n }\n\n return defer(() => {\n const element = document.querySelector('iframe[src*=\"bframe\"]');\n\n return element ? of(element) : throwError(new SpamProtectionNotLoadedError());\n }).pipe(\n retryWhen((errors) =>\n errors.pipe(\n delay(RETRY_INTERVAL),\n switchMap((error, index) =>\n index < MAX_RETRIES ? of(error) : throwError(error),\n ),\n ),\n ),\n switchMap((element) => {\n this._watchRecaptchaChallengeWindow(event$, element);\n recaptcha.execute(this._widgetId);\n\n return event$;\n }),\n catchError((error) => of({ error })),\n );\n });\n }\n\n private _watchRecaptchaChallengeWindow(event: Subject, element: Element) {\n const iframeContainer = element.parentElement;\n\n if (!iframeContainer) {\n throw new SpamProtectionNotLoadedError();\n }\n\n const container = iframeContainer.parentElement;\n\n if (!container) {\n throw new SpamProtectionNotLoadedError();\n }\n\n this.mutationObserverFactory\n .create(() => {\n // When customer closes the Google ReCaptcha challenge window, throw SpamProtectionNotCompletedError\n if (container.style.visibility === 'hidden') {\n event.next({\n error: new SpamProtectionChallengeNotCompletedError(),\n });\n }\n })\n .observe(container, { attributes: true, attributeFilter: ['style'] });\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nexport default class GoogleRecaptchaScriptLoader {\n private _loadPromise?: Promise;\n\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: GoogleRecaptchaWindow = window,\n ) {}\n\n load(): Promise {\n if (!this._loadPromise) {\n this._loadPromise = this._loadScript();\n }\n\n return this._loadPromise;\n }\n\n private _loadScript(): Promise {\n const callbackName = 'initRecaptcha';\n const params = [`onload=${callbackName}`, 'render=explicit'].join('&');\n\n return new Promise((resolve, reject) => {\n this._window[callbackName] = () => resolve(this._window.grecaptcha);\n\n this._scriptLoader\n .loadScript(`//www.google.com/recaptcha/api.js?${params}`)\n .catch((error) => {\n this._loadPromise = undefined;\n reject(error);\n });\n });\n }\n}\n\nexport interface GoogleRecaptchaWindow extends Window {\n grecaptcha?: ReCaptchaV2.ReCaptcha;\n initRecaptcha?(): void;\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { MutationObserverFactory } from '../common/dom';\n\nimport GoogleRecaptcha from './google-recaptcha';\nimport GoogleRecaptchaScriptLoader from './google-recaptcha-script-loader';\n\nexport default function createSpamProtection(scriptLoader: ScriptLoader): GoogleRecaptcha {\n return new GoogleRecaptcha(\n new GoogleRecaptchaScriptLoader(scriptLoader),\n new MutationObserverFactory(),\n );\n}\n","import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidHostedFormConfigError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed due to invalid configuration provided for the hosted payment form.',\n );\n\n this.name = 'InvalidHostedFormConfigError';\n this.type = 'invalid_hosted_form_config';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidHostedFormError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unable to proceed due to an unknown error with the hosted payment form.');\n\n this.name = 'InvalidHostedFormError';\n this.type = 'invalid_hosted_form';\n }\n}\n","import { flatMap, map, values } from 'lodash';\n\nimport { StandardError } from '../../common/error/errors';\nimport { HostedInputValidateErrorDataMap } from '../iframe-content';\n\nexport default class InvalidHostedFormValueError extends StandardError {\n constructor(public errors: HostedInputValidateErrorDataMap) {\n super(\n [\n 'Unable to proceed due to invalid user input values',\n ...flatMap(values(errors), (fieldErrors) =>\n map(fieldErrors, ({ message }) => message),\n ),\n ].join('. '),\n );\n\n this.name = 'InvalidHostedFormValueError';\n this.type = 'invalid_hosted_form_value';\n }\n}\n","import { CardInstrument } from '../payment/instrument';\n\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport enum HostedFieldEventType {\n AttachRequested = 'HOSTED_FIELD:ATTACH_REQUESTED',\n SubmitRequested = 'HOSTED_FIELD:SUBMITTED_REQUESTED',\n ValidateRequested = 'HOSTED_FIELD:VALIDATE_REQUESTED',\n}\n\nexport interface HostedFieldEventMap {\n [HostedFieldEventType.AttachRequested]: HostedFieldAttachEvent;\n [HostedFieldEventType.SubmitRequested]: HostedFieldSubmitRequestEvent;\n [HostedFieldEventType.ValidateRequested]: HostedFieldValidateRequestEvent;\n}\n\nexport type HostedFieldEvent =\n | HostedFieldAttachEvent\n | HostedFieldSubmitRequestEvent\n | HostedFieldValidateRequestEvent;\n\nexport interface HostedFieldAttachEvent {\n type: HostedFieldEventType.AttachRequested;\n payload: {\n accessibilityLabel?: string;\n cardInstrument?: CardInstrument;\n fontUrls?: string[];\n placeholder?: string;\n styles?: HostedFieldStylesMap;\n origin?: string;\n type: HostedFieldType;\n };\n}\n\nexport interface HostedFieldSubmitRequestEvent {\n type: HostedFieldEventType.SubmitRequested;\n payload: {\n data: HostedFormOrderData;\n fields: HostedFieldType[];\n };\n}\n\nexport interface HostedFieldValidateRequestEvent {\n type: HostedFieldEventType.ValidateRequested;\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport {\n PaymentErrorData,\n PaymentErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport HostedFieldType from '../hosted-field-type';\nimport { HostedFormErrorsData } from '../hosted-form-options';\n\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\n\n// Event types\nexport enum HostedInputEventType {\n AttachSucceeded = 'HOSTED_INPUT:ATTACH_SUCCEEDED',\n AttachFailed = 'HOSTED_INPUT:ATTACH_FAILED',\n BinChanged = 'HOSTED_INPUT:BIN_CHANGED',\n Blurred = 'HOSTED_INPUT:BLURRED',\n Changed = 'HOSTED_INPUT:CHANGED',\n CardTypeChanged = 'HOSTED_INPUT:CARD_TYPE_CHANGED',\n Entered = 'HOSTED_INPUT:ENTERED',\n Focused = 'HOSTED_INPUT:FOCUSED',\n SubmitSucceeded = 'HOSTED_INPUT:SUBMIT_SUCCEEDED',\n SubmitFailed = 'HOSTED_INPUT:SUBMIT_FAILED',\n Validated = 'HOSTED_INPUT:VALIDATED',\n}\n\n// Event mapping\nexport interface HostedInputEventMap {\n [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\n [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\n [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\n [HostedInputEventType.Blurred]: HostedInputBlurEvent;\n [HostedInputEventType.Changed]: HostedInputChangeEvent;\n [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\n [HostedInputEventType.Entered]: HostedInputEnterEvent;\n [HostedInputEventType.Focused]: HostedInputFocusEvent;\n [HostedInputEventType.SubmitSucceeded]: HostedInputSubmitSuccessEvent;\n [HostedInputEventType.SubmitFailed]: HostedInputSubmitErrorEvent;\n [HostedInputEventType.Validated]: HostedInputValidateEvent;\n}\n\n// Events\nexport type HostedInputEvent =\n | HostedInputAttachSuccessEvent\n | HostedInputAttachErrorEvent\n | HostedInputBinChangeEvent\n | HostedInputBlurEvent\n | HostedInputChangeEvent\n | HostedInputCardTypeChangeEvent\n | HostedInputEnterEvent\n | HostedInputFocusEvent\n | HostedInputSubmitSuccessEvent\n | HostedInputSubmitErrorEvent\n | HostedInputValidateEvent;\n\nexport interface HostedInputAttachSuccessEvent {\n type: HostedInputEventType.AttachSucceeded;\n}\n\nexport interface HostedInputAttachErrorEvent {\n type: HostedInputEventType.AttachFailed;\n payload: {\n error: HostedInputInitializeErrorData;\n };\n}\n\nexport interface HostedInputBinChangeEvent {\n type: HostedInputEventType.BinChanged;\n payload: {\n bin?: string;\n };\n}\n\nexport interface HostedInputBlurEvent {\n type: HostedInputEventType.Blurred;\n payload: {\n fieldType: HostedFieldType;\n errors?: HostedFormErrorsData;\n };\n}\n\nexport interface HostedInputChangeEvent {\n type: HostedInputEventType.Changed;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputCardTypeChangeEvent {\n type: HostedInputEventType.CardTypeChanged;\n payload: {\n cardType?: string;\n };\n}\n\nexport interface HostedInputFocusEvent {\n type: HostedInputEventType.Focused;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputEnterEvent {\n type: HostedInputEventType.Entered;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputSubmitSuccessEvent {\n type: HostedInputEventType.SubmitSucceeded;\n payload: {\n response: Response;\n };\n}\n\nexport interface HostedInputSubmitErrorEvent {\n type: HostedInputEventType.SubmitFailed;\n payload: {\n error: PaymentErrorData;\n response?: Response;\n };\n}\n\nexport interface HostedInputValidateEvent {\n type: HostedInputEventType.Validated;\n payload: HostedInputValidateResults;\n}\n","import { values } from 'lodash';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nimport { DetachmentObserver } from '../common/dom';\nimport { mapFromPaymentErrorResponse } from '../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { parseUrl } from '../common/url';\nimport { CardInstrument } from '../payment/instrument';\n\nimport {\n InvalidHostedFormConfigError,\n InvalidHostedFormError,\n InvalidHostedFormValueError,\n} from './errors';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n HostedInputEventMap,\n HostedInputEventType,\n HostedInputSubmitErrorEvent,\n HostedInputSubmitSuccessEvent,\n HostedInputValidateEvent,\n} from './iframe-content';\n\nexport const RETRY_INTERVAL = 60 * 1000;\nexport const LAST_RETRY_KEY = 'lastRetry';\n\nexport default class HostedField {\n private _iframe: HTMLIFrameElement;\n\n constructor(\n private _type: HostedFieldType,\n private _containerId: string,\n private _placeholder: string,\n private _accessibilityLabel: string,\n private _styles: HostedFieldStylesMap,\n private _eventPoster: IframeEventPoster,\n private _eventListener: IframeEventListener,\n private _detachmentObserver: DetachmentObserver,\n private _cardInstrument?: CardInstrument,\n ) {\n this._iframe = document.createElement('iframe');\n\n this._iframe.src = `/checkout/payment/hosted-field?version=${LIBRARY_VERSION}`;\n this._iframe.style.border = 'none';\n this._iframe.style.height = '100%';\n this._iframe.style.overflow = 'hidden';\n this._iframe.style.width = '100%';\n }\n\n getType(): HostedFieldType {\n return this._type;\n }\n\n async attach(): Promise {\n const container = document.getElementById(this._containerId);\n\n if (!container) {\n throw new InvalidHostedFormConfigError(\n 'Unable to proceed because the provided container ID is not valid.',\n );\n }\n\n container.appendChild(this._iframe);\n this._eventListener.listen();\n\n const promise = fromEvent(this._iframe, 'load')\n .pipe(\n switchMap(async ({ target }) => {\n const contentWindow = target && (target as HTMLIFrameElement).contentWindow;\n\n if (!contentWindow) {\n throw new Error('The content window of the iframe cannot be accessed.');\n }\n\n this._eventPoster.setTarget(contentWindow);\n\n await this._eventPoster.post(\n {\n type: HostedFieldEventType.AttachRequested,\n payload: {\n accessibilityLabel: this._accessibilityLabel,\n cardInstrument: this._cardInstrument,\n fontUrls: this._getFontUrls(),\n placeholder: this._placeholder,\n styles: this._styles,\n origin: document.location.origin,\n type: this._type,\n },\n },\n {\n successType: HostedInputEventType.AttachSucceeded,\n errorType: HostedInputEventType.AttachFailed,\n },\n );\n }),\n take(1),\n )\n .toPromise();\n\n await this._detachmentObserver.ensurePresence([this._iframe], promise);\n }\n\n detach(): void {\n if (!this._iframe.parentElement) {\n return;\n }\n\n this._iframe.parentElement.removeChild(this._iframe);\n this._eventListener.stopListen();\n }\n\n async submitForm(\n fields: HostedFieldType[],\n data: HostedFormOrderData,\n ): Promise {\n try {\n const promise = this._eventPoster.post(\n {\n type: HostedFieldEventType.SubmitRequested,\n payload: { fields, data },\n },\n {\n successType: HostedInputEventType.SubmitSucceeded,\n errorType: HostedInputEventType.SubmitFailed,\n },\n );\n\n return await this._detachmentObserver.ensurePresence([this._iframe], promise);\n } catch (event) {\n if (this._isSubmitErrorEvent(event)) {\n if (event.payload.error.code === 'hosted_form_error') {\n throw new InvalidHostedFormError(event.payload.error.message);\n }\n\n if (event.payload.response) {\n throw mapFromPaymentErrorResponse(event.payload.response);\n }\n\n throw new Error(event.payload.error.message);\n }\n\n throw event;\n }\n }\n\n async validateForm(): Promise {\n const promise = this._eventPoster.post(\n {\n type: HostedFieldEventType.ValidateRequested,\n },\n {\n successType: HostedInputEventType.Validated,\n },\n );\n\n const { payload } = await this._detachmentObserver.ensurePresence([this._iframe], promise);\n\n if (!payload.isValid) {\n throw new InvalidHostedFormValueError(payload.errors);\n }\n }\n\n private _getFontUrls(): string[] {\n const hostname = 'fonts.googleapis.com';\n const links = document.querySelectorAll(`link[href*='${hostname}'][rel='stylesheet']`);\n\n return Array.prototype.slice\n .call(links)\n .filter((link) => parseUrl(link.href).hostname === hostname)\n .filter((link) =>\n values(this._styles)\n .map((style) => style && style.fontFamily)\n .filter((family): family is string => typeof family === 'string')\n .some((family) =>\n family\n .split(/,\\s/)\n .some((name) => link.href.indexOf(name.replace(' ', '+')) !== -1),\n ),\n )\n .map((link) => link.href);\n }\n\n private _isSubmitErrorEvent(event: any): event is HostedInputSubmitErrorEvent {\n return event.type === HostedInputEventType.SubmitFailed;\n }\n}\n","import { noop, without } from 'lodash';\n\nimport { HostedForm as HostedFormInterface } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IframeEventListener } from '../common/iframe';\nimport { OrderPaymentRequestBody } from '../order';\nimport { PaymentAdditionalAction } from '../payment';\nimport { PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport { InvalidHostedFormConfigError } from './errors';\nimport HostedField from './hosted-field';\nimport HostedFormOptions from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\nimport {\n HostedInputEnterEvent,\n HostedInputEventMap,\n HostedInputEventType,\n HostedInputSubmitSuccessEvent,\n} from './iframe-content';\n\ntype HostedFormEventCallbacks = Pick<\n HostedFormOptions,\n 'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'\n>;\n\nexport default class HostedForm implements HostedFormInterface {\n private _bin?: string;\n private _cardType?: string;\n\n constructor(\n private _fields: HostedField[],\n private _eventListener: IframeEventListener,\n private _payloadTransformer: HostedFormOrderDataTransformer,\n private _eventCallbacks: HostedFormEventCallbacks,\n private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n ) {\n const {\n onBlur = noop,\n onCardTypeChange = noop,\n onFocus = noop,\n onValidate = noop,\n } = this._eventCallbacks;\n\n this._eventListener.addListener(HostedInputEventType.Blurred, ({ payload }) =>\n onBlur(payload),\n );\n this._eventListener.addListener(HostedInputEventType.CardTypeChanged, ({ payload }) =>\n onCardTypeChange(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Focused, ({ payload }) =>\n onFocus(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Validated, ({ payload }) =>\n onValidate(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Entered, this._handleEnter);\n\n this._eventListener.addListener(\n HostedInputEventType.CardTypeChanged,\n ({ payload }) => (this._cardType = payload.cardType),\n );\n this._eventListener.addListener(\n HostedInputEventType.BinChanged,\n ({ payload }) => (this._bin = payload.bin),\n );\n }\n\n getBin(): string | undefined {\n return this._bin;\n }\n\n getCardType(): string | undefined {\n return this._cardType;\n }\n\n async attach(): Promise {\n this._eventListener.listen();\n\n const field = this._getFirstField();\n const otherFields = without(this._fields, field);\n\n await field.attach();\n await Promise.all(otherFields.map((otherField) => otherField.attach()));\n }\n\n detach(): void {\n this._eventListener.stopListen();\n\n this._fields.forEach((field) => {\n field.detach();\n });\n }\n\n async submit(\n payload: OrderPaymentRequestBody,\n additionalActionData?: PaymentAdditionalAction,\n ): Promise {\n try {\n return await this._getFirstField().submitForm(\n this._fields.map((field) => field.getType()),\n this._payloadTransformer.transform(payload, additionalActionData),\n );\n } catch (error) {\n const additionalAction = await this._paymentHumanVerificationHandler.handle(error);\n\n return await this._getFirstField().submitForm(\n this._fields.map((field) => field.getType()),\n this._payloadTransformer.transform(payload, additionalAction),\n );\n }\n }\n\n async validate(): Promise {\n return this._getFirstField().validateForm();\n }\n\n private _getFirstField(): HostedField {\n const field = this._fields[0];\n\n if (!field) {\n throw new InvalidHostedFormConfigError(\n 'Unable to proceed because the payment form has no field defined.',\n );\n }\n\n return field;\n }\n\n private _handleEnter: (event: HostedInputEnterEvent) => Promise = async ({ payload }) => {\n try {\n await this.validate();\n } catch (error) {\n // Catch form validation error because we want to trigger `onEnter`\n // irrespective of the validation result.\n if (error.name !== 'InvalidHostedFormValueError') {\n throw error;\n }\n }\n\n const { onEnter = noop } = this._eventCallbacks;\n\n onEnter(payload);\n };\n}\n","import {\n FormattedPayload,\n FormattedVaultedInstrument,\n HostedVaultedInstrument,\n PaymentInstrument,\n VaultedInstrument,\n} from './payment';\n\nexport default function isVaultedInstrument(\n instrument: PaymentInstrument,\n): instrument is VaultedInstrument {\n return Boolean((instrument as VaultedInstrument).instrumentId);\n}\n\nexport function isHostedVaultedInstrument(\n instrument: PaymentInstrument,\n): instrument is HostedVaultedInstrument {\n return (\n Boolean((instrument as HostedVaultedInstrument).instrumentId) &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccNumber') &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccCvv')\n );\n}\n\nexport function isFormattedVaultedInstrument(\n instrument: PaymentInstrument,\n): instrument is FormattedPayload {\n const formattedInstrument = (instrument as FormattedPayload)\n .formattedPayload;\n\n if (!formattedInstrument) {\n return false;\n }\n\n return (\n typeof formattedInstrument.bigpay_token === 'string' ||\n Boolean(formattedInstrument.bigpay_token && formattedInstrument.bigpay_token.token)\n );\n}\n","import { omit } from 'lodash';\n\nimport { ReadableCheckoutStore } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { OrderPaymentRequestBody } from '../order';\nimport {\n HostedCreditCardInstrument,\n isVaultedInstrument,\n PaymentAdditionalAction,\n} from '../payment';\n\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport default class HostedFormOrderDataTransformer {\n constructor(private _store: ReadableCheckoutStore) {}\n\n transform(\n payload: OrderPaymentRequestBody,\n additionalAction?: PaymentAdditionalAction,\n ): HostedFormOrderData {\n const state = this._store.getState();\n const checkout = state.checkout.getCheckout();\n const config = state.config.getConfig();\n const instrumentMeta = state.instruments.getInstrumentsMeta();\n const order = state.order.getOrder();\n const orderMeta = state.order.getOrderMeta();\n const payment = omit(\n payload.paymentData,\n 'ccExpiry',\n 'ccName',\n 'ccNumber',\n 'ccCvv',\n ) as HostedCreditCardInstrument;\n const paymentMethod = state.paymentMethods.getPaymentMethod(\n payload.methodId,\n payload.gatewayId,\n );\n const paymentMethodMeta = state.paymentMethods.getPaymentMethodsMeta();\n const authToken =\n instrumentMeta && payment && isVaultedInstrument(payment)\n ? `${state.payment.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n : state.payment.getPaymentToken();\n\n if (!authToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n\n return {\n additionalAction,\n authToken,\n checkout,\n config,\n order,\n orderMeta,\n payment,\n paymentMethod,\n paymentMethodMeta,\n };\n }\n}\n","import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { pick } from 'lodash';\n\nimport { ReadableCheckoutStore } from '../checkout';\nimport { DetachmentObserver, MutationObserverFactory } from '../common/dom';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { CardInstrument } from '../payment/instrument';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormOptions, {\n HostedCardFieldOptionsMap,\n HostedStoredCardFieldOptionsMap,\n} from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\n\nexport default class HostedFormFactory {\n constructor(private _store: ReadableCheckoutStore) {}\n\n create(host: string, options: HostedFormOptions): HostedForm {\n const fieldTypes = Object.keys(options.fields) as HostedFieldType[];\n const fields = fieldTypes.reduce((result, type) => {\n const fields = options.fields as HostedStoredCardFieldOptionsMap &\n HostedCardFieldOptionsMap;\n const fieldOptions = fields[type];\n\n if (!fieldOptions) {\n return result;\n }\n\n return [\n ...result,\n new HostedField(\n type,\n fieldOptions.containerId,\n fieldOptions.placeholder || '',\n fieldOptions.accessibilityLabel || '',\n options.styles || {},\n new IframeEventPoster(host),\n new IframeEventListener(host),\n new DetachmentObserver(new MutationObserverFactory()),\n 'instrumentId' in fieldOptions\n ? this._getCardInstrument(fieldOptions.instrumentId)\n : undefined,\n ),\n ];\n }, []);\n\n return new HostedForm(\n fields,\n new IframeEventListener(host),\n new HostedFormOrderDataTransformer(this._store),\n pick(options, 'onBlur', 'onEnter', 'onFocus', 'onCardTypeChange', 'onValidate'),\n new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n );\n }\n\n private _getCardInstrument(instrumentId: string): CardInstrument {\n const {\n instruments: { getCardInstrument },\n } = this._store.getState();\n const instrument = getCardInstrument(instrumentId);\n\n if (!instrument) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentInstrument);\n }\n\n return instrument;\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam check.\n */\nexport default class SpamProtectionNotCompletedError extends StandardError {\n constructor() {\n super(\"You haven't complete our spam check. Please try again.\");\n\n this.name = 'SpamProtectionNotCompletedError';\n this.type = 'spam_protection_not_completed';\n }\n}\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, Observable, Observer, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { CheckoutValidator, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { SpamProtectionNotCompletedError } from '../spam-protection/errors';\n\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport {\n FinalizeOrderAction,\n LoadOrderAction,\n LoadOrderPaymentsAction,\n OrderActionType,\n SubmitOrderAction,\n} from './order-actions';\nimport OrderRequestBody from './order-request-body';\nimport OrderRequestSender from './order-request-sender';\n\nexport default class OrderActionCreator {\n constructor(\n private _orderRequestSender: OrderRequestSender,\n private _checkoutValidator: CheckoutValidator,\n ) {}\n\n loadOrder(orderId: number, options?: RequestOptions): Observable {\n return new Observable((observer: Observer) => {\n observer.next(createAction(OrderActionType.LoadOrderRequested));\n\n this._orderRequestSender\n .loadOrder(orderId, options)\n .then((response) => {\n observer.next(createAction(OrderActionType.LoadOrderSucceeded, response.body));\n observer.complete();\n })\n .catch((response) => {\n observer.error(createErrorAction(OrderActionType.LoadOrderFailed, response));\n });\n });\n }\n\n // TODO: Remove when checkout does not contain unrelated order data.\n loadOrderPayments(\n orderId: number,\n options?: RequestOptions,\n ): Observable {\n return new Observable((observer: Observer) => {\n observer.next(createAction(OrderActionType.LoadOrderPaymentsRequested));\n\n this._orderRequestSender\n .loadOrder(orderId, options)\n .then((response) => {\n observer.next(\n createAction(OrderActionType.LoadOrderPaymentsSucceeded, response.body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(OrderActionType.LoadOrderPaymentsFailed, response),\n );\n });\n });\n }\n\n loadCurrentOrder(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n defer(() => {\n const orderId = this._getCurrentOrderId(store.getState());\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.loadOrder(orderId, options);\n });\n }\n\n submitOrder(\n payload?: OrderRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(OrderActionType.SubmitOrderRequested)),\n defer(() => {\n const state = store.getState();\n const externalSource = state.config.getExternalSource();\n const variantIdentificationToken = state.config.getVariantIdentificationToken();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (checkout.shouldExecuteSpamCheck) {\n throw new SpamProtectionNotCompletedError();\n }\n\n return from(\n this._checkoutValidator.validate(checkout, options).then(() =>\n this._orderRequestSender.submitOrder(\n this._mapToOrderRequestBody(\n payload ?? {},\n checkout.id,\n checkout.customerMessage,\n externalSource,\n ),\n {\n ...options,\n headers: {\n checkoutVariant: variantIdentificationToken,\n },\n },\n ),\n ),\n ).pipe(\n switchMap((response) =>\n concat(\n // TODO: Remove once we can submit orders using storefront API\n this.loadOrder(response.body.data.order.orderId, options),\n of(\n createAction(\n OrderActionType.SubmitOrderSucceeded,\n response.body.data,\n { ...response.body.meta, token: response.headers.token },\n ),\n ),\n ),\n ),\n );\n }).pipe(\n catchError((error) =>\n throwErrorAction(OrderActionType.SubmitOrderFailed, error),\n ),\n ),\n );\n }\n\n finalizeOrder(\n orderId: number,\n options?: RequestOptions,\n ): Observable {\n return concat(\n of(createAction(OrderActionType.FinalizeOrderRequested)),\n from(this._orderRequestSender.finalizeOrder(orderId, options)).pipe(\n switchMap((response) =>\n concat(\n this.loadOrder(orderId, options),\n of(\n createAction(\n OrderActionType.FinalizeOrderSucceeded,\n response.body.data,\n ),\n ),\n ),\n ),\n ),\n ).pipe(catchError((error) => throwErrorAction(OrderActionType.FinalizeOrderFailed, error)));\n }\n\n private _getCurrentOrderId(state: InternalCheckoutSelectors): number | undefined {\n const order = state.order.getOrder();\n const checkout = state.checkout.getCheckout();\n\n return (order && order.orderId) || (checkout && checkout.orderId);\n }\n\n private _mapToOrderRequestBody(\n payload: OrderRequestBody,\n cartId: string,\n customerMessage: string,\n externalSource?: string,\n ): InternalOrderRequestBody {\n const { payment, ...order } = payload;\n\n if (!payment) {\n return {\n ...order,\n cartId,\n customerMessage,\n externalSource,\n };\n }\n\n return {\n ...order,\n cartId,\n customerMessage,\n externalSource,\n payment: {\n paymentData: payment.paymentData,\n name: payment.methodId,\n gateway: payment.gatewayId,\n },\n };\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error is thrown when the server detects inconsistency in cart data since it is last requested,\n * for example, product prices or eligible discounts have changed.\n */\nexport default class CartConsistencyError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Your checkout could not be processed because some details have changed. Please review your order and try again.',\n );\n\n this.name = 'CartConsistencyError';\n this.type = 'cart_consistency';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Checkout prevents consumers from placing their orders when a merchant wishes\n * to be able to block transactions if the automated tax provider cannot be reached.\n */\nexport default class OrderTaxProviderUnavailableError extends StandardError {\n constructor(message?: string) {\n super(message || 'The tax provider is unavailable.');\n\n this.name = 'OrderTaxProviderUnavailableError';\n this.type = 'tax_provider_unavailable';\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\nimport { isNil, omitBy } from 'lodash';\n\nimport { CartConsistencyError } from '../cart/errors';\nimport {\n ContentType,\n joinIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { OrderTaxProviderUnavailableError } from './errors';\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport { InternalOrderResponseBody } from './internal-order-responses';\nimport Order from './order';\n\nexport interface SubmitOrderRequestOptions extends RequestOptions {\n headers?: {\n checkoutVariant?: string;\n };\n}\n\nexport default class OrderRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n loadOrder(orderId: number, { timeout }: RequestOptions = {}): Promise> {\n const url = `/api/storefront/orders/${orderId}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n const include = [\n 'payments',\n 'lineItems.physicalItems.socialMedia',\n 'lineItems.physicalItems.options',\n 'lineItems.physicalItems.categories',\n 'lineItems.digitalItems.socialMedia',\n 'lineItems.digitalItems.options',\n 'lineItems.digitalItems.categories',\n ];\n\n return this._requestSender.get(url, {\n params: {\n include: joinIncludes(include),\n },\n headers,\n timeout,\n });\n }\n\n submitOrder(\n body?: InternalOrderRequestBody,\n { headers, timeout }: SubmitOrderRequestOptions = {},\n ): Promise> {\n const url = '/internalapi/v1/checkout/order';\n\n return this._requestSender\n .post(url, {\n body,\n headers: omitBy(\n {\n 'X-Checkout-Variant': headers && headers.checkoutVariant,\n ...SDK_VERSION_HEADERS,\n },\n isNil,\n ),\n timeout,\n })\n .catch((error) => {\n if (error.body.type === 'tax_provider_unavailable') {\n throw new OrderTaxProviderUnavailableError();\n }\n\n if (error.body.type === 'cart_has_changed') {\n throw new CartConsistencyError();\n }\n\n throw error;\n });\n }\n\n finalizeOrder(\n orderId: number,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/internalapi/v1/checkout/order/${orderId}`;\n\n return this._requestSender.post(url, { timeout, headers: SDK_VERSION_HEADERS });\n }\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { OrderActionCreator } from '../order';\nimport { PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport Payment, {\n FormattedHostedInstrument,\n FormattedPayload,\n FormattedVaultedInstrument,\n} from './payment';\nimport {\n InitializeOffsitePaymentAction,\n PaymentActionType,\n SubmitPaymentAction,\n} from './payment-actions';\nimport PaymentRequestSender from './payment-request-sender';\nimport PaymentRequestTransformer from './payment-request-transformer';\n\ninterface InitializeOffsitePaymentSettings {\n methodId: string;\n gatewayId?: string;\n instrumentId?: string;\n target?: string;\n promise?: Promise;\n shouldSaveInstrument?: boolean;\n shouldSetAsDefaultInstrument?: boolean;\n}\n\ntype InitializeOffsitePayment = (\n settings: InitializeOffsitePaymentSettings,\n) => ThunkAction;\n\nexport default class PaymentActionCreator {\n constructor(\n private _paymentRequestSender: PaymentRequestSender,\n private _orderActionCreator: OrderActionCreator,\n private _paymentRequestTransformer: PaymentRequestTransformer,\n private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n ) {}\n\n submitPayment(payment: Payment): ThunkAction {\n return (store) =>\n concat(\n of(createAction(PaymentActionType.SubmitPaymentRequested)),\n defer(async () => {\n try {\n return await this._paymentRequestSender.submitPayment(\n this._paymentRequestTransformer.transform(payment, store.getState()),\n );\n } catch (error) {\n const additionalAction = await this._paymentHumanVerificationHandler.handle(\n error,\n );\n\n return await this._paymentRequestSender.submitPayment(\n this._paymentRequestTransformer.transform(\n { ...payment, additionalAction },\n store.getState(),\n ),\n );\n }\n }).pipe(\n switchMap(({ body }) =>\n concat(\n this._orderActionCreator.loadCurrentOrder()(store),\n of(createAction(PaymentActionType.SubmitPaymentSucceeded, body)),\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(PaymentActionType.SubmitPaymentFailed, error),\n ),\n );\n }\n\n initializeOffsitePayment: InitializeOffsitePayment = ({\n methodId,\n gatewayId,\n instrumentId,\n target,\n promise,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n }) => {\n return (store) => {\n let paymentData:\n | FormattedPayload\n | undefined;\n\n if (instrumentId) {\n paymentData = { formattedPayload: { bigpay_token: instrumentId } };\n } else if (shouldSaveInstrument) {\n paymentData = {\n formattedPayload: {\n vault_payment_instrument: shouldSaveInstrument,\n set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n },\n };\n }\n\n const payload = this._paymentRequestTransformer.transform(\n { gatewayId, methodId, paymentData },\n store.getState(),\n );\n\n return concat(\n of(createAction(PaymentActionType.InitializeOffsitePaymentRequested)),\n Promise.race(\n [\n this._paymentRequestSender.initializeOffsitePayment(payload, target),\n promise,\n ].filter(Boolean),\n ).then(() => createAction(PaymentActionType.InitializeOffsitePaymentSucceeded)),\n ).pipe(\n catchError((error) =>\n throwErrorAction(PaymentActionType.InitializeOffsitePaymentFailed, error),\n ),\n );\n };\n };\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport PaymentRequestBody from './payment-request-body';\n\n/**\n * @todo Convert this file into TypeScript properly\n */\nexport default class PaymentRequestSender {\n /**\n * @class\n * @param {BigpayClient} client\n */\n constructor(private _client: any) {}\n\n submitPayment(payload: PaymentRequestBody): Promise> {\n return new Promise((resolve, reject) => {\n this._client.submitPayment(payload, (error: any, response: any) => {\n if (error) {\n reject(this._transformResponse(error));\n } else {\n resolve(this._transformResponse(response));\n }\n });\n });\n }\n\n initializeOffsitePayment(payload: PaymentRequestBody, target?: string): Promise {\n return new Promise(() => {\n this._client.initializeOffsitePayment(payload, null, target);\n });\n }\n\n private _transformResponse(response: any): Response {\n return {\n headers: response.headers,\n body: response.data,\n status: response.status,\n statusText: response.statusText,\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/bigpay-client\");","import { BillingAddress, isBillingAddressLike } from '../billing';\nimport { Consignment } from '../shipping';\n\nimport Address from './address';\nimport InternalAddress from './internal-address';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalAddress(\n address: Address | BillingAddress,\n consignments?: Consignment[],\n): InternalAddress {\n let addressId;\n\n if (isBillingAddressLike(address)) {\n addressId = address.id;\n } else if (consignments && consignments.length) {\n addressId = consignments[0].id;\n }\n\n return {\n id: addressId,\n firstName: address.firstName,\n lastName: address.lastName,\n company: address.company,\n addressLine1: address.address1,\n addressLine2: address.address2,\n city: address.city,\n province: address.stateOrProvince,\n provinceCode: address.stateOrProvinceCode,\n postCode: address.postalCode,\n country: address.country,\n countryCode: address.countryCode,\n phone: address.phone,\n customFields: address.customFields,\n };\n}\n","import { Address } from '../address';\n\nimport BillingAddress from './billing-address';\n\nexport default function isBillingAddressLike(address: Address): address is BillingAddress {\n const billingAddress = address as BillingAddress;\n\n return typeof billingAddress.id !== 'undefined';\n}\n","export default class AmountTransformer {\n constructor(private _decimalPlaces: number) {}\n\n toInteger(amount: number): number {\n return Math.round(amount * Math.pow(10, this._decimalPlaces));\n }\n}\n","import Coupon from './coupon';\nimport InternalCoupon from './internal-coupon';\n\nconst couponTypes = [\n 'per_item_discount',\n 'percentage_discount',\n 'per_total_discount',\n 'shipping_discount',\n 'free_shipping',\n];\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCoupon(coupon: Coupon): InternalCoupon {\n return {\n code: coupon.code,\n discount: coupon.displayName,\n discountType: couponTypes.indexOf(coupon.couponType),\n };\n}\n","enum CheckoutButtonMethodType {\n APPLEPAY = \"applepay\",\n AMAZON_PAY_V2 = \"amazonpay\",\n BRAINTREE_PAYPAL = \"braintreepaypal\",\n BRAINTREE_VENMO = \"braintreevenmo\",\n BRAINTREE_PAYPAL_CREDIT = \"braintreepaypalcredit\",\n GOOGLEPAY_ADYENV2 = \"googlepayadyenv2\",\n GOOGLEPAY_ADYENV3 = \"googlepayadyenv3\",\n GOOGLEPAY_AUTHORIZENET = \"googlepayauthorizenet\",\n GOOGLEPAY_BNZ = \"googlepaybnz\",\n GOOGLEPAY_BRAINTREE = \"googlepaybraintree\",\n GOOGLEPAY_CHECKOUTCOM = \"googlepaycheckoutcom\",\n GOOGLEPAY_CYBERSOURCEV2 = \"googlepaycybersourcev2\",\n GOOGLEPAY_ORBITAL = \"googlepayorbital\",\n GOOGLEPAY_STRIPE = \"googlepaystripe\",\n GOOGLEPAY_STRIPEUPE = \"googlepaystripeupe\",\n GOOGLEPAY_WORLDPAYACCESS = \"googlepayworldpayaccess\",\n MASTERPASS = \"masterpass\",\n PAYPALEXPRESS = \"paypalexpress\"\n}\nexport default CheckoutButtonMethodType;\n\n","import GiftCertificate from './gift-certificate';\nimport InternalGiftCertificate from './internal-gift-certificate';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalGiftCertificate(\n giftCertificate: GiftCertificate,\n): InternalGiftCertificate {\n return {\n code: giftCertificate.code,\n discountedAmount: giftCertificate.used,\n remainingBalance: giftCertificate.remaining,\n giftCertificate: {\n balance: giftCertificate.balance,\n code: giftCertificate.code,\n purchaseDate: giftCertificate.purchaseDate,\n },\n };\n}\n","import InternalLineItem from './internal-line-item';\nimport { LineItem } from './line-item';\nimport LineItemMap from './line-item-map';\nimport mapGiftCertificateToInternalLineItem from './map-gift-certificate-to-internal-line-item';\nimport mapToInternalLineItem from './map-to-internal-line-item';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalLineItems(\n itemMap: LineItemMap,\n decimalPlaces: number,\n idKey: keyof LineItem = 'id',\n): InternalLineItem[] {\n return (Object.keys(itemMap) as Array).reduce(\n (result, key) => [\n ...result,\n ...(itemMap[key] as LineItem[]).map((item: any) => {\n if (key === 'giftCertificates') {\n return mapGiftCertificateToInternalLineItem(item, decimalPlaces);\n }\n\n return mapToInternalLineItem(\n item,\n mapToInternalLineItemType(key),\n decimalPlaces,\n idKey,\n );\n }),\n ],\n [] as InternalLineItem[],\n );\n}\n\nfunction mapToInternalLineItemType(type: string): string {\n switch (type) {\n case 'physicalItems':\n return 'ItemPhysicalEntity';\n\n case 'digitalItems':\n return 'ItemDigitalEntity';\n\n case 'giftCertificates':\n return 'ItemGiftCertificateEntity';\n\n default:\n return '';\n }\n}\n","import { AmountTransformer } from '../common/utility';\n\nimport InternalLineItem from './internal-line-item';\nimport { GiftCertificateItem } from './line-item';\n\nexport default function mapGiftCertificateToInternalLineItem(\n item: GiftCertificateItem,\n decimalPlaces: number,\n): InternalLineItem {\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: item.id,\n imageUrl: '',\n name: item.name,\n amount: item.amount,\n amountAfterDiscount: item.amount,\n discount: 0,\n integerAmount: amountTransformer.toInteger(item.amount),\n integerAmountAfterDiscount: amountTransformer.toInteger(item.amount),\n integerUnitPrice: amountTransformer.toInteger(item.amount),\n integerUnitPriceAfterDiscount: amountTransformer.toInteger(item.amount),\n integerDiscount: 0,\n quantity: 1,\n sender: item.sender,\n recipient: item.recipient,\n type: 'ItemGiftCertificateEntity',\n attributes: [],\n variantId: null,\n };\n}\n","import { AmountTransformer } from '../common/utility';\n\nimport InternalLineItem from './internal-line-item';\nimport { DigitalItem, LineItem } from './line-item';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalLineItem(\n item: LineItem,\n type: string,\n decimalPlaces: number,\n idKey: keyof LineItem = 'id',\n): InternalLineItem {\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: item[idKey] as string | number,\n imageUrl: item.imageUrl,\n amount: item.extendedListPrice,\n amountAfterDiscount: item.extendedSalePrice,\n discount: item.discountAmount,\n integerAmount: amountTransformer.toInteger(item.extendedListPrice),\n integerAmountAfterDiscount: amountTransformer.toInteger(item.extendedSalePrice),\n integerDiscount: amountTransformer.toInteger(item.discountAmount),\n integerUnitPrice: amountTransformer.toInteger(item.listPrice),\n integerUnitPriceAfterDiscount: amountTransformer.toInteger(item.salePrice),\n downloadsPageUrl: (item as DigitalItem).downloadPageUrl,\n name: item.name,\n quantity: item.quantity,\n brand: item.brand,\n sku: item.sku,\n categoryNames: item.categoryNames,\n variantId: item.variantId,\n productId: item.productId,\n attributes: (item.options || []).map((option) => ({\n name: option.name,\n value: option.value,\n })),\n addedByPromotion: item.addedByPromotion,\n type,\n };\n}\n","import { keyBy, reduce, some } from 'lodash';\n\nimport { Checkout } from '../checkout';\nimport { AmountTransformer } from '../common/utility';\nimport { mapToInternalCoupon, mapToInternalGiftCertificate } from '../coupon';\nimport { mapToDiscountNotifications } from '../promotion';\n\nimport InternalCart from './internal-cart';\nimport mapToInternalLineItems from './map-to-internal-line-items';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCart(checkout: Checkout): InternalCart {\n const decimalPlaces = checkout.cart.currency.decimalPlaces;\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: checkout.cart.id,\n items: mapToInternalLineItems(checkout.cart.lineItems, decimalPlaces),\n currency: checkout.cart.currency.code,\n coupon: {\n discountedAmount: reduce(\n checkout.cart.coupons,\n (sum, coupon) => {\n return sum + coupon.discountedAmount;\n },\n 0,\n ),\n coupons: checkout.cart.coupons.map(mapToInternalCoupon),\n },\n discount: {\n amount: checkout.cart.discountAmount,\n integerAmount: amountTransformer.toInteger(checkout.cart.discountAmount),\n },\n discountNotifications: mapToDiscountNotifications(checkout.promotions),\n giftCertificate: {\n totalDiscountedAmount: reduce(\n checkout.giftCertificates,\n (sum, certificate) => {\n return sum + certificate.used;\n },\n 0,\n ),\n appliedGiftCertificates: keyBy(\n checkout.giftCertificates.map(mapToInternalGiftCertificate),\n 'code',\n ),\n },\n shipping: {\n amount: checkout.shippingCostTotal,\n integerAmount: amountTransformer.toInteger(checkout.shippingCostTotal),\n amountBeforeDiscount: checkout.shippingCostBeforeDiscount,\n integerAmountBeforeDiscount: amountTransformer.toInteger(\n checkout.shippingCostBeforeDiscount,\n ),\n required: some(\n checkout.cart.lineItems.physicalItems,\n (lineItem) => lineItem.isShippingRequired,\n ),\n },\n subtotal: {\n amount: checkout.subtotal,\n integerAmount: amountTransformer.toInteger(checkout.subtotal),\n },\n storeCredit: {\n amount: checkout.customer ? checkout.customer.storeCredit : 0,\n },\n taxSubtotal: {\n amount: checkout.taxTotal,\n integerAmount: amountTransformer.toInteger(checkout.taxTotal),\n },\n taxes: checkout.taxes,\n taxTotal: {\n amount: checkout.taxTotal,\n integerAmount: amountTransformer.toInteger(checkout.taxTotal),\n },\n handling: {\n amount: checkout.handlingCostTotal,\n integerAmount: amountTransformer.toInteger(checkout.handlingCostTotal),\n },\n grandTotal: {\n amount: checkout.grandTotal,\n integerAmount: amountTransformer.toInteger(checkout.grandTotal),\n },\n };\n}\n","import { DiscountNotification } from '../discount';\n\nimport { Promotion } from '.';\n\nexport default function mapToDiscountNotifications(\n promotions?: Promotion[],\n): DiscountNotification[] {\n const notifications: DiscountNotification[] = [];\n\n (promotions || []).forEach((promotion) => {\n (promotion.banners || []).forEach((banner) => {\n notifications.push({\n placeholders: [],\n discountType: null,\n message: '',\n messageHtml: banner.text,\n });\n });\n });\n\n return notifications;\n}\n","import { mapToInternalAddress } from '../address';\nimport { OrderBillingAddress } from '../order-billing-address/order-billing-address-state';\n\nimport InternalCustomer from './internal-customer';\n\nimport { Customer } from '.';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCustomer(\n customer: Customer,\n billingAddress: OrderBillingAddress,\n): InternalCustomer {\n const firstName = customer.firstName || billingAddress.firstName || '';\n const lastName = customer.lastName || billingAddress.lastName || '';\n\n return {\n addresses: (customer.addresses || []).map((address) => mapToInternalAddress(address)),\n customerId: customer.id,\n isGuest: customer.isGuest,\n storeCredit: customer.storeCredit,\n email: customer.email || billingAddress.email || '',\n firstName,\n lastName,\n name: customer.fullName || [firstName, lastName].join(' '),\n customerGroupName: customer.customerGroup && customer.customerGroup.name,\n };\n}\n","import CardExpiryDate from './card-expiry-date';\n\nconst NUMBER_SEPARATOR = '/';\n\nexport default class CardExpiryFormatter {\n format(value: string): string {\n const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n const trimmedMonth = month.slice(0, 2);\n const trimmedYear =\n year.length === 4 ? year.slice(-2) : year ? year.slice(0, 2) : month.slice(2);\n\n // i.e.: '1'\n if (value.length < 2) {\n return month;\n }\n\n // ie.: '10 /' (without trailing space)\n if (value.length > 3 && !trimmedYear) {\n return trimmedMonth;\n }\n\n return `${trimmedMonth} ${NUMBER_SEPARATOR} ${trimmedYear}`;\n }\n\n toObject(value: string): CardExpiryDate {\n const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n\n if (!/^\\d+$/.test(month) || !/^\\d+$/.test(year)) {\n return { month: '', year: '' };\n }\n\n return {\n month: month.length === 1 ? `0${month}` : month.slice(0, 2),\n year: year.length === 2 ? `20${year}` : year.slice(0, 4),\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"card-validator\");","import { creditCardType, number } from 'card-validator';\nimport { max } from 'lodash';\n\nconst NUMBER_SEPARATOR = ' ';\n\nexport default class CardNumberFormatter {\n format(value: string): string {\n const { card } = number(value);\n\n if (!card) {\n return value;\n }\n\n const maxLength = max(creditCardType(value).map((info) => max(info.lengths)));\n const unformattedValue = this.unformat(value).slice(0, maxLength);\n\n return card.gaps\n .filter((gapIndex) => unformattedValue.length > gapIndex)\n .reduce(\n (output, gapIndex, index) =>\n [output.slice(0, gapIndex + index), output.slice(gapIndex + index)].join(\n NUMBER_SEPARATOR,\n ),\n unformattedValue,\n );\n }\n\n unformat(value: string): string {\n const { card } = number(value);\n\n if (!card) {\n return value;\n }\n\n return value.replace(new RegExp(NUMBER_SEPARATOR, 'g'), '');\n }\n}\n","import { filter, find, keyBy, reduce } from 'lodash';\n\nimport { LineItem, mapToInternalLineItems } from '../cart';\nimport { Checkout } from '../checkout';\nimport { AmountTransformer } from '../common/utility';\nimport { mapToInternalCoupon } from '../coupon';\nimport { HOSTED } from '../payment';\n\nimport InternalOrder, {\n InternalGiftCertificateList,\n InternalIncompleteOrder,\n InternalOrderPayment,\n InternalSocialDataList,\n} from './internal-order';\nimport Order, {\n GatewayOrderPayment,\n GiftCertificateOrderPayment,\n OrderPayment,\n OrderPayments,\n} from './order';\nimport { OrderMetaState } from './order-state';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalOrder(\n order: Order,\n orderMeta: OrderMetaState = {},\n): InternalOrder {\n const decimalPlaces = order.currency.decimalPlaces;\n const amountTransformer = new AmountTransformer(decimalPlaces);\n\n return {\n id: order.orderId,\n items: mapToInternalLineItems(order.lineItems, order.currency.decimalPlaces, 'productId'),\n orderId: order.orderId,\n currency: order.currency.code,\n customerCanBeCreated: order.customerCanBeCreated,\n payment: mapToInternalOrderPayment(order.payments, orderMeta.payment),\n subtotal: {\n amount: order.baseAmount,\n integerAmount: amountTransformer.toInteger(order.baseAmount),\n },\n coupon: {\n discountedAmount: reduce(\n order.coupons,\n (sum, coupon) => {\n return sum + coupon.discountedAmount;\n },\n 0,\n ),\n coupons: order.coupons.map(mapToInternalCoupon),\n },\n discount: {\n amount: order.discountAmount,\n integerAmount: amountTransformer.toInteger(order.discountAmount),\n },\n token: orderMeta.orderToken,\n callbackUrl: orderMeta.callbackUrl,\n discountNotifications: [],\n giftCertificate: mapToGiftCertificates(order.payments),\n socialData: mapToInternalSocialDataList(order),\n status: order.status,\n hasDigitalItems: order.hasDigitalItems,\n isDownloadable: order.isDownloadable,\n isComplete: order.isComplete,\n shipping: {\n amount: order.shippingCostTotal,\n integerAmount: amountTransformer.toInteger(order.shippingCostTotal),\n amountBeforeDiscount: order.shippingCostBeforeDiscount,\n integerAmountBeforeDiscount: amountTransformer.toInteger(\n order.shippingCostBeforeDiscount,\n ),\n },\n storeCredit: {\n amount: mapToStoreCredit(order.payments),\n },\n taxes: order.taxes,\n taxTotal: {\n amount: order.taxTotal,\n integerAmount: amountTransformer.toInteger(order.taxTotal),\n },\n handling: {\n amount: order.handlingCostTotal,\n integerAmount: amountTransformer.toInteger(order.handlingCostTotal),\n },\n grandTotal: {\n amount: order.orderAmount,\n integerAmount: order.orderAmountAsInteger,\n },\n };\n}\n\nexport function mapToInternalIncompleteOrder(checkout: Checkout): InternalIncompleteOrder {\n const payment = find(checkout.payments, { providerType: HOSTED });\n\n return {\n orderId: null,\n isComplete: false,\n payment: !payment\n ? {}\n : {\n id: payment.providerId,\n gateway: payment.gatewayId,\n status: mapToInternalPaymentStatus(payment.detail.step),\n },\n };\n}\n\nfunction mapToInternalPaymentStatus(status: string): string {\n return `PAYMENT_STATUS_${status}`;\n}\n\nfunction mapToStoreCredit(payments?: OrderPayments): number {\n const item = find(payments, { providerId: 'storecredit' });\n\n return item ? item.amount : 0;\n}\n\nfunction mapToGiftCertificates(payments?: OrderPayments): InternalGiftCertificateList {\n const items = filter(payments, {\n providerId: 'giftcertificate',\n }) as GiftCertificateOrderPayment[];\n\n return {\n totalDiscountedAmount: reduce(items, (sum, item) => item.amount + sum, 0),\n appliedGiftCertificates: keyBy(\n items.map((item) => ({\n code: item.detail.code,\n discountedAmount: item.amount,\n remainingBalance: item.detail.remaining,\n giftCertificate: {\n balance: item.amount + item.detail.remaining,\n code: item.detail.code,\n purchaseDate: '',\n },\n })),\n 'code',\n ),\n };\n}\n\nfunction mapToInternalOrderPayment(\n payments?: OrderPayments,\n payment: InternalOrderPayment = {},\n): InternalOrderPayment {\n const item = find(payments, isDefaultOrderPayment) as GatewayOrderPayment;\n\n if (!item) {\n return {};\n }\n\n return {\n id: item.providerId,\n status: mapToInternalPaymentStatus(item.detail.step),\n helpText: item.detail.instructions,\n returnUrl: payment.returnUrl,\n };\n}\n\nfunction isDefaultOrderPayment(payment: OrderPayment): payment is GatewayOrderPayment {\n return payment.providerId !== 'giftcertificate' && payment.providerId !== 'storecredit';\n}\n\nfunction mapToInternalSocialDataList(\n order: Order,\n): { [itemId: string]: InternalSocialDataList } | undefined {\n const socialDataObject: { [itemId: string]: InternalSocialDataList } = {};\n const items = [...order.lineItems.physicalItems, ...order.lineItems.digitalItems];\n\n items.forEach((item) => {\n socialDataObject[item.id] = mapToInternalSocialData(item);\n });\n\n return socialDataObject;\n}\n\nfunction mapToInternalSocialData(lineItem: LineItem): InternalSocialDataList {\n const codes = ['fb', 'tw', 'gp'];\n\n return codes.reduce((socialData, code) => {\n const item =\n lineItem.socialMedia && find(lineItem.socialMedia, (item) => item.code === code);\n\n if (!item) {\n return socialData;\n }\n\n socialData[code] = {\n name: lineItem.name,\n description: lineItem.name,\n image: lineItem.imageUrl,\n url: item.link,\n shareText: item.text,\n sharingLink: item.link,\n channelName: item.channel,\n channelCode: item.code,\n };\n\n return socialData;\n }, {} as InternalSocialDataList);\n}\n","import InternalShippingOption from './internal-shipping-option';\nimport ShippingOption from './shipping-option';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalShippingOption(\n option: ShippingOption,\n isSelected: boolean,\n): InternalShippingOption {\n return {\n description: option.description,\n module: option.type,\n price: option.cost,\n id: option.id,\n selected: isSelected,\n isRecommended: option.isRecommended,\n imageUrl: option.imageUrl,\n transitTime: option.transitTime,\n };\n}\n","import { pick } from 'lodash';\n\nimport { Address, mapToInternalAddress } from '../address';\nimport { mapToInternalCart } from '../cart';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { CheckoutButtonMethodType } from '../checkout-buttons/strategies';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { mapToInternalCustomer } from '../customer';\nimport { HostedFormOrderData } from '../hosted-form';\nimport {\n CardExpiryFormatter,\n CardNumberFormatter,\n HostedInputValues,\n} from '../hosted-form/iframe-content';\nimport { mapToInternalOrder } from '../order';\nimport { mapToInternalShippingOption } from '../shipping';\n\nimport isVaultedInstrument, { isFormattedVaultedInstrument } from './is-vaulted-instrument';\nimport Payment, {\n HostedCreditCardInstrument,\n HostedVaultedInstrument,\n PaymentInstrument,\n} from './payment';\nimport PaymentMethod from './payment-method';\nimport PaymentRequestBody from './payment-request-body';\n\nexport default class PaymentRequestTransformer {\n private _cardExpiryFormatter = new CardExpiryFormatter();\n private _cardNumberFormatter = new CardNumberFormatter();\n\n transform(payment: Payment, checkoutState: InternalCheckoutSelectors): PaymentRequestBody {\n const billingAddress = checkoutState.billingAddress.getBillingAddress();\n const checkout = checkoutState.checkout.getCheckout();\n const customer = checkoutState.customer.getCustomer();\n const order = checkoutState.order.getOrder();\n const paymentMethod = checkoutState.paymentMethods.getPaymentMethod(\n payment.methodId,\n payment.gatewayId,\n );\n const shippingAddress = this._mapShippingAddress(checkoutState, paymentMethod);\n const consignments = checkoutState.consignments.getConsignments();\n const shippingOption = checkoutState.consignments.getShippingOption();\n const storeConfig = checkoutState.config.getStoreConfig();\n const contextConfig = checkoutState.config.getContextConfig();\n const instrumentMeta = checkoutState.instruments.getInstrumentsMeta();\n const paymentMeta = checkoutState.paymentMethods.getPaymentMethodsMeta();\n const orderMeta = checkoutState.order.getOrderMeta();\n const internalCustomer =\n customer && billingAddress && mapToInternalCustomer(customer, billingAddress);\n\n const authToken =\n instrumentMeta &&\n payment.paymentData &&\n (isVaultedInstrument(payment.paymentData) ||\n isFormattedVaultedInstrument(payment.paymentData))\n ? `${checkoutState.payment.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n : checkoutState.payment.getPaymentToken();\n\n if (!authToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n\n return {\n additionalAction: payment.additionalAction,\n authToken,\n customer: internalCustomer,\n billingAddress: billingAddress && mapToInternalAddress(billingAddress),\n shippingAddress: shippingAddress && mapToInternalAddress(shippingAddress, consignments),\n shippingOption: shippingOption && mapToInternalShippingOption(shippingOption, true),\n cart: checkout && mapToInternalCart(checkout),\n order: order && mapToInternalOrder(order, orderMeta),\n orderMeta,\n payment: payment.paymentData,\n paymentMethod: paymentMethod && this._transformPaymentMethod(paymentMethod),\n quoteMeta: {\n request: {\n ...paymentMeta,\n geoCountryCode: contextConfig && contextConfig.geoCountryCode,\n },\n },\n source: 'bigcommerce-checkout-js-sdk',\n store: pick(storeConfig && storeConfig.storeProfile, [\n 'storeHash',\n 'storeId',\n 'storeLanguage',\n 'storeName',\n ]),\n };\n }\n\n transformWithHostedFormData(\n values: HostedInputValues,\n data: HostedFormOrderData,\n nonce: string,\n ): PaymentRequestBody {\n const {\n additionalAction,\n authToken,\n checkout,\n config,\n order,\n orderMeta,\n payment = {},\n paymentMethod,\n paymentMethodMeta,\n } = data;\n const consignment = checkout && checkout.consignments[0];\n const shippingAddress = consignment && consignment.shippingAddress;\n const shippingOption = consignment && consignment.selectedShippingOption;\n\n return {\n additionalAction,\n authToken,\n paymentMethod: paymentMethod && this._transformPaymentMethod(paymentMethod),\n customer:\n order &&\n order.billingAddress &&\n checkout &&\n mapToInternalCustomer(checkout.customer, order.billingAddress),\n billingAddress:\n order && order.billingAddress && mapToInternalAddress(order.billingAddress),\n shippingAddress:\n shippingAddress &&\n checkout &&\n mapToInternalAddress(shippingAddress, checkout.consignments),\n shippingOption: shippingOption && mapToInternalShippingOption(shippingOption, true),\n cart: checkout && mapToInternalCart(checkout),\n order: order && mapToInternalOrder(order, orderMeta),\n orderMeta,\n payment: this._transformHostedInputValues(values, payment, nonce),\n quoteMeta: {\n request: {\n ...paymentMethodMeta,\n geoCountryCode: config && config.context.geoCountryCode,\n },\n },\n source: 'bigcommerce-checkout-js-sdk',\n store:\n config &&\n pick(config.storeConfig.storeProfile, [\n 'storeHash',\n 'storeId',\n 'storeLanguage',\n 'storeName',\n ]),\n };\n }\n\n private _transformPaymentMethod(paymentMethod: PaymentMethod): PaymentMethod {\n if (paymentMethod.method === 'multi-option' && !paymentMethod.gateway) {\n return { ...paymentMethod, gateway: paymentMethod.id };\n }\n\n if (paymentMethod.initializationData && paymentMethod.initializationData.gateway) {\n return { ...paymentMethod, id: paymentMethod.initializationData.gateway };\n }\n\n if (paymentMethod.id === CheckoutButtonMethodType.BRAINTREE_VENMO) {\n return { ...paymentMethod, id: CheckoutButtonMethodType.BRAINTREE_PAYPAL };\n }\n\n return paymentMethod;\n }\n\n private _transformHostedInputValues(\n values: HostedInputValues,\n payment: HostedCreditCardInstrument | HostedVaultedInstrument,\n nonce: string,\n ): PaymentInstrument {\n return 'instrumentId' in payment\n ? {\n ...payment,\n ccCvv: values.cardCodeVerification,\n ccNumber:\n values.cardNumberVerification &&\n this._cardNumberFormatter.unformat(values.cardNumberVerification),\n hostedFormNonce: nonce,\n }\n : {\n ...payment,\n ccCvv: values.cardCode,\n ccExpiry: this._cardExpiryFormatter.toObject(values.cardExpiry || ''),\n ccName: values.cardName || '',\n ccNumber: this._cardNumberFormatter.unformat(values.cardNumber || ''),\n hostedFormNonce: nonce,\n };\n }\n\n private _mapShippingAddress(\n checkoutState: InternalCheckoutSelectors,\n paymentMethod?: PaymentMethod,\n ): Address | undefined {\n if (paymentMethod) {\n const isBopisEnabled = paymentMethod.initializationData?.bopis?.enabled;\n const requiredAddress = paymentMethod.initializationData?.bopis?.requiredAddress;\n const consignments = checkoutState.consignments.getConsignments();\n const isPickup = consignments?.every((consignment) => consignment.selectedPickupOption);\n\n if (isBopisEnabled && isPickup && requiredAddress === 'none') {\n return undefined;\n }\n }\n\n return checkoutState.shippingAddress.getShippingAddress();\n }\n}\n","export enum CheckoutIncludes {\n AvailableShippingOptions = 'consignments.availableShippingOptions',\n PhysicalItemsCategoryNames = 'cart.lineItems.physicalItems.categoryNames',\n DigitalItemsCategoryNames = 'cart.lineItems.digitalItems.categoryNames',\n}\n\nexport default interface CheckoutParams {\n include?: CheckoutIncludes[] | CheckoutIncludeParam;\n}\n\nexport type CheckoutIncludeParam = {\n [key in CheckoutIncludes]?: boolean;\n};\n","import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { find } from 'lodash';\nimport { Observable, Observer } from 'rxjs';\n\nimport { AddressRequestBody } from '../address';\nimport { Cart } from '../cart';\nimport {\n CheckoutIncludes,\n CheckoutParams,\n CheckoutRequestSender,\n InternalCheckoutSelectors,\n ReadableCheckoutStore,\n} from '../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n} from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport Consignment, {\n ConsignmentAssignmentBaseRequestBodyWithAddress,\n ConsignmentAssignmentBaseRequestBodyWithShippingAddress,\n ConsignmentAssignmentRequestBody,\n ConsignmentCreateRequestBody,\n ConsignmentLineItem,\n ConsignmentRequestBody,\n ConsignmentShippingOptionRequestBody,\n ConsignmentsRequestBody,\n ConsignmentUpdateRequestBody,\n} from './consignment';\nimport {\n ConsignmentActionType,\n CreateConsignmentsAction,\n DeleteConsignmentAction,\n LoadShippingOptionsAction,\n UpdateConsignmentAction,\n UpdateShippingOptionAction,\n} from './consignment-actions';\nimport ConsignmentRequestSender from './consignment-request-sender';\n\nexport default class ConsignmentActionCreator {\n constructor(\n private _consignmentRequestSender: ConsignmentRequestSender,\n private _checkoutRequestSender: CheckoutRequestSender,\n ) {}\n\n unassignItemsByAddress(\n consignment: ConsignmentAssignmentRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const address = this._consignmentHasAddress(consignment)\n ? consignment.address\n : consignment.shippingAddress;\n\n const existingConsignment = state.consignments.getConsignmentByAddress(address);\n\n if (!existingConsignment) {\n throw new InvalidArgumentError('No consignment found for the specified address');\n }\n\n const lineItems = this._removeLineItems(\n consignment.lineItems,\n existingConsignment,\n state.cart.getCart(),\n );\n\n if (!lineItems.length) {\n return this.deleteConsignment(existingConsignment.id, options)(store);\n }\n\n return this.updateConsignment(\n {\n id: existingConsignment.id,\n address,\n lineItems,\n },\n options,\n )(store);\n };\n }\n\n assignItemsByAddress(\n consignment: ConsignmentAssignmentRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const state = store.getState();\n const address = this._consignmentHasAddress(consignment)\n ? consignment.address\n : consignment.shippingAddress;\n const existingConsignment = state.consignments.getConsignmentByAddress(address);\n\n return this._createOrUpdateConsignment(\n {\n id: existingConsignment && existingConsignment.id,\n address,\n lineItems: this._addLineItems(\n consignment.lineItems,\n existingConsignment,\n state.cart.getCart(),\n ),\n },\n options,\n )(store);\n };\n }\n\n selectShippingOption(\n id: string,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n const consignments = state.consignments.getConsignments();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (!consignments || !consignments.length) {\n throw new MissingDataError(MissingDataErrorType.MissingConsignments);\n }\n\n const consignmentUpdateBody = {\n id: consignments[0].id,\n shippingOptionId: id,\n };\n\n const consignmentMeta = {\n id: consignments[0].id,\n };\n\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .updateConsignment(checkout.id, consignmentUpdateBody, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionSucceeded,\n body,\n consignmentMeta,\n ),\n );\n\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.UpdateShippingOptionFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n loadShippingOptions(\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(ConsignmentActionType.LoadShippingOptionsRequested));\n\n this._checkoutRequestSender\n .loadCheckout(checkout.id, {\n ...options,\n params: {\n include: [CheckoutIncludes.AvailableShippingOptions],\n },\n })\n .then(({ body }) => {\n observer.next(\n createAction(ConsignmentActionType.LoadShippingOptionsSucceeded, body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.LoadShippingOptionsFailed,\n response,\n ),\n );\n });\n });\n }\n\n updateAddress(\n address: AddressRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const consignment = this._getUpdateAddressRequestBody(address, store);\n const consignments = store.getState().consignments.getConsignments();\n\n if (consignments && consignments.length) {\n (consignment as ConsignmentUpdateRequestBody).id = consignments[0].id;\n }\n\n return this._createOrUpdateConsignment(consignment, options)(store);\n };\n }\n\n createConsignments(\n consignments: ConsignmentsRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n this._consignmentRequestSender\n .createConsignments(checkout.id, consignments, options)\n .then(({ body }) => {\n observer.next(\n createAction(ConsignmentActionType.CreateConsignmentsSucceeded, body),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.CreateConsignmentsFailed,\n response,\n ),\n );\n });\n });\n }\n\n updateConsignment(\n consignment: ConsignmentUpdateRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const consignmentMeta = { id: consignment.id };\n\n observer.next(\n createAction(\n ConsignmentActionType.UpdateConsignmentRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .updateConsignment(checkout.id, consignment, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.UpdateConsignmentSucceeded,\n body,\n consignmentMeta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.UpdateConsignmentFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n deleteConsignment(\n consignmentId: string,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n const consignmentMeta = { id: consignmentId };\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n observer.next(\n createAction(\n ConsignmentActionType.DeleteConsignmentRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .deleteConsignment(checkout.id, consignmentId, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.DeleteConsignmentSucceeded,\n body,\n consignmentMeta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.DeleteConsignmentFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n updateShippingOption(\n consignment: ConsignmentShippingOptionRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n Observable.create((observer: Observer) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const consignmentMeta = { id: consignment.id };\n\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionRequested,\n undefined,\n consignmentMeta,\n ),\n );\n\n this._consignmentRequestSender\n .updateConsignment(checkout.id, consignment, options)\n .then(({ body }) => {\n observer.next(\n createAction(\n ConsignmentActionType.UpdateShippingOptionSucceeded,\n body,\n consignmentMeta,\n ),\n );\n observer.complete();\n })\n .catch((response) => {\n observer.error(\n createErrorAction(\n ConsignmentActionType.UpdateShippingOptionFailed,\n response,\n consignmentMeta,\n ),\n );\n });\n });\n }\n\n private _createOrUpdateConsignment(\n consignment: ConsignmentCreateRequestBody | ConsignmentUpdateRequestBody,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) => {\n const checkout = store.getState().checkout.getCheckout();\n\n if (!checkout || !checkout.id) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (this._isUpdateConsignmentRequest(consignment)) {\n return this.updateConsignment(consignment, options)(store);\n }\n\n return this.createConsignments([consignment], options)(store);\n };\n }\n\n private _getUpdateAddressRequestBody(\n address: AddressRequestBody,\n store: ReadableCheckoutStore,\n ): ConsignmentRequestBody {\n const state = store.getState();\n const cart = state.cart.getCart();\n\n if (!cart) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n const { physicalItems, customItems = [] } = cart.lineItems;\n\n return {\n address,\n lineItems: [...physicalItems, ...customItems].map((item) => ({\n itemId: item.id,\n quantity: item.quantity,\n })),\n };\n }\n\n private _removeLineItems(\n lineItems: ConsignmentLineItem[],\n consignment: Consignment,\n cart?: Cart,\n ): ConsignmentLineItem[] {\n if (!cart) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n return this._hydrateLineItems(consignment.lineItemIds, cart)\n .map((existingItem) => {\n const sharedItem = find(\n lineItems,\n (lineItem) => lineItem.itemId === existingItem.itemId,\n );\n\n return {\n ...existingItem,\n quantity: sharedItem\n ? existingItem.quantity - sharedItem.quantity\n : existingItem.quantity,\n };\n })\n .filter((lineItem) => lineItem.quantity > 0);\n }\n\n private _addLineItems(\n lineItems: ConsignmentLineItem[],\n consignment?: Consignment,\n cart?: Cart,\n ): ConsignmentLineItem[] {\n if (!consignment) {\n return lineItems;\n }\n\n if (!cart) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n return lineItems\n .concat(this._hydrateLineItems(consignment.lineItemIds, cart))\n .filter((lineItem) => lineItem.quantity > 0);\n }\n\n private _hydrateLineItems(lineItemIds: string[], cart: Cart): ConsignmentLineItem[] {\n return lineItemIds.map((itemId) => {\n const item = find(cart.lineItems.physicalItems, (lineItem) => lineItem.id === itemId);\n\n return {\n itemId,\n quantity: item ? item.quantity : 0,\n };\n });\n }\n\n private _isUpdateConsignmentRequest(\n request: ConsignmentRequestBody,\n ): request is ConsignmentUpdateRequestBody {\n const updateRequest = request as ConsignmentUpdateRequestBody;\n\n return !!updateRequest.id;\n }\n\n private _consignmentHasAddress(\n consignment:\n | ConsignmentAssignmentBaseRequestBodyWithAddress\n | ConsignmentAssignmentBaseRequestBodyWithShippingAddress,\n ): consignment is ConsignmentAssignmentBaseRequestBodyWithAddress {\n return typeof consignment === 'object' && 'address' in consignment;\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout, CheckoutParams } from '../checkout';\nimport {\n ContentType,\n joinIncludes,\n joinOrMergeIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { ConsignmentsRequestBody, ConsignmentUpdateRequestBody } from './consignment';\n\nconst DEFAULT_INCLUDES = [\n 'consignments.availableShippingOptions',\n 'cart.lineItems.physicalItems.options',\n 'cart.lineItems.digitalItems.options',\n 'customer',\n 'promotions.banners',\n];\n\nexport default class ConsignmentRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createConsignments(\n checkoutId: string,\n consignments: ConsignmentsRequestBody,\n { timeout, params: { include } = {} }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/consignments`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, {\n body: consignments,\n params: {\n include: joinOrMergeIncludes(DEFAULT_INCLUDES, include),\n },\n headers,\n timeout,\n });\n }\n\n updateConsignment(\n checkoutId: string,\n consignment: ConsignmentUpdateRequestBody,\n { timeout, params: { include } = {} }: RequestOptions = {},\n ): Promise> {\n const { id, ...body } = consignment;\n const url = `/api/storefront/checkouts/${checkoutId}/consignments/${id}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.put(url, {\n body,\n params: {\n include: joinOrMergeIncludes(DEFAULT_INCLUDES, include),\n },\n headers,\n timeout,\n });\n }\n\n deleteConsignment(\n checkoutId: string,\n consignmentId: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/consignments/${consignmentId}`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n const include = joinIncludes(DEFAULT_INCLUDES);\n\n return this._requestSender.delete(url, { params: { include }, headers, timeout });\n }\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, of } from 'rxjs';\nimport { catchError, switchMap, take } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport { SpamProtectionChallengeNotCompletedError, SpamProtectionFailedError } from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\nimport isSpamProtectionExecuteSucceededAction from './is-spam-protection-succeeded-action';\nimport { SpamProtectionAction, SpamProtectionActionType } from './spam-protection-actions';\nimport { SpamProtectionOptions } from './spam-protection-options';\nimport SpamProtectionRequestSender from './spam-protection-request-sender';\n\nexport default class SpamProtectionActionCreator {\n constructor(\n private _googleRecaptcha: GoogleRecaptcha,\n private _requestSender: SpamProtectionRequestSender,\n ) {}\n\n initialize(\n options?: SpamProtectionOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(SpamProtectionActionType.InitializeRequested, undefined)),\n defer(async () => {\n const spamProtectionElementId = options\n ? options.containerId\n : 'spamProtectionContainer';\n\n if (!options && !document.getElementById(spamProtectionElementId)) {\n const spamProtectionElement = document.createElement('div');\n\n spamProtectionElement.setAttribute('id', spamProtectionElementId);\n document.body.appendChild(spamProtectionElement);\n }\n\n const state = store.getState();\n const storeConfig = state.config.getStoreConfigOrThrow();\n const recaptchaSitekey = storeConfig.checkoutSettings.googleRecaptchaSitekey;\n\n await this._googleRecaptcha.load(spamProtectionElementId, recaptchaSitekey);\n\n return createAction(SpamProtectionActionType.InitializeSucceeded);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(SpamProtectionActionType.InitializeFailed, error),\n ),\n );\n }\n\n verifyCheckoutSpamProtection(): ThunkAction {\n return (store) =>\n defer(() => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return concat(\n of(createAction(SpamProtectionActionType.VerifyCheckoutRequested)),\n from(this.execute()(store)).pipe(\n switchMap((action) => {\n if (\n !isSpamProtectionExecuteSucceededAction(action) ||\n !action.payload\n ) {\n return of(action);\n }\n\n return from(\n this._requestSender.validate(checkout.id, action.payload.token),\n ).pipe(\n switchMap(({ body }) =>\n concat(\n of(action),\n of(\n createAction(\n SpamProtectionActionType.VerifyCheckoutSucceeded,\n body,\n ),\n ),\n ),\n ),\n );\n }),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(SpamProtectionActionType.VerifyCheckoutFailed, error),\n ),\n );\n });\n }\n\n execute(): ThunkAction {\n return (store) =>\n concat(\n of(createAction(SpamProtectionActionType.ExecuteRequested)),\n this.initialize()(store),\n this._googleRecaptcha\n .execute()\n .pipe(take(1))\n .pipe(\n switchMap(async ({ error, token }) => {\n if (error instanceof SpamProtectionChallengeNotCompletedError) {\n throw error;\n }\n\n if (error || !token) {\n throw new SpamProtectionFailedError();\n }\n\n return createAction(SpamProtectionActionType.ExecuteSucceeded, {\n token,\n });\n }),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(SpamProtectionActionType.ExecuteFailed, error),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout } from '../checkout';\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class SpamProtectionRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n validate(\n checkoutId: string,\n token: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/spam-protection`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, { body: { token }, headers, timeout });\n }\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport { StoreCreditAction, StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditRequestSender from './store-credit-request-sender';\n\nexport default class StoreCreditActionCreator {\n constructor(private _storeCreditRequestSender: StoreCreditRequestSender) {}\n\n applyStoreCredit(\n useStoreCredit: boolean,\n options?: RequestOptions,\n ): ThunkAction {\n return (store) =>\n concat(\n of(createAction(StoreCreditActionType.ApplyStoreCreditRequested)),\n defer(async () => {\n const state = store.getState();\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n const { body } = await (useStoreCredit\n ? this._storeCreditRequestSender.applyStoreCredit(checkout.id, options)\n : this._storeCreditRequestSender.removeStoreCredit(checkout.id, options));\n\n return createAction(StoreCreditActionType.ApplyStoreCreditSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(StoreCreditActionType.ApplyStoreCreditFailed, error),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout, CHECKOUT_DEFAULT_INCLUDES } from '../checkout';\nimport {\n ContentType,\n joinIncludes,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nexport default class StoreCreditRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n applyStoreCredit(\n checkoutId: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/store-credit`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, {\n headers,\n timeout,\n params: {\n include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n },\n });\n }\n\n removeStoreCredit(\n checkoutId: string,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = `/api/storefront/checkouts/${checkoutId}/store-credit`;\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.delete(url, {\n headers,\n timeout,\n params: {\n include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n },\n });\n }\n}\n","import { RequestError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when the subscriptions fails to be updated\n */\nexport default class UpdateSubscriptionsError extends RequestError {\n constructor(response?: Response) {\n super(response);\n\n this.name = 'UpdateSubscriptionsError';\n this.type = 'update_subscriptions';\n }\n}\n","import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport {\n Subscriptions,\n SubscriptionsActionType,\n SubscriptionsRequestSender,\n UpdateSubscriptionsAction,\n} from '../subscription';\n\nimport { UpdateSubscriptionsError } from './errors';\n\nexport default class SubscriptionsActionCreator {\n constructor(private _subscriptionsRequestSender: SubscriptionsRequestSender) {}\n\n updateSubscriptions(\n subscriptions: Subscriptions,\n options?: RequestOptions,\n ): Observable {\n return concat(\n of(createAction(SubscriptionsActionType.UpdateSubscriptionsRequested)),\n defer(async () => {\n const { body } = await this._subscriptionsRequestSender.updateSubscriptions(\n subscriptions,\n options,\n );\n\n return createAction(SubscriptionsActionType.UpdateSubscriptionsSucceeded, body);\n }),\n ).pipe(\n catchError((error) =>\n throwErrorAction(\n SubscriptionsActionType.UpdateSubscriptionsFailed,\n new UpdateSubscriptionsError(error),\n ),\n ),\n );\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { Subscriptions } from './subscriptions';\n\nexport default class SubscriptionsRequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n updateSubscriptions(\n subscriptions: Subscriptions,\n { timeout }: RequestOptions = {},\n ): Promise> {\n const url = '/api/storefront/subscriptions';\n const headers = {\n Accept: ContentType.JsonV1,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post(url, { body: subscriptions, headers, timeout });\n }\n}\n","import { memoize } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\n\nconst cloneDeep = memoize((input: T): T => {\n if (Array.isArray(input)) {\n // Fixed in later versions of typescript https://github.com/microsoft/TypeScript/issues/36390\n return (input as any[]).map((value: T[keyof T]) => cloneDeepSafe(value)) as any;\n }\n\n if (isPlainObject(input)) {\n return (Object.keys(input) as Array).reduce(\n (result, key) => ({\n ...result,\n [key]: cloneDeepSafe(input[key]),\n }),\n {},\n ) as T;\n }\n\n return input;\n});\n\n// Use WeakMap as the MapCache, this allows for better garbage collection\n// There's a deprecated `clear` method in the lodash implementation\n// of MapCache, hence the `any`\ncloneDeep.cache = new WeakMap() as any;\n\n/**\n * This is a wrapper function for `cloneDeep`. We need it because `cloneDeep` is\n * a memoized function using an instance of `WeakMap` as its cache. Without this\n * wrapper, the memoized function will throw an error if it is called with a\n * non-object argument.\n */\nconst cloneDeepSafe = (input: T): T => {\n return typeof input === 'object' && input !== null ? cloneDeep(input) : input;\n};\n\n/**\n * Clone the return value of a function. If the result is the same as previous\n * calls, return the previous clone instead of cloning it again.\n */\nexport default function cloneResult(fn: T): T {\n return ((...args: any[]) => cloneDeepSafe(fn(...args))) as T;\n}\n\nexport type Func = (...args: any[]) => any;\n","import { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { cloneResult as clone } from '../common/utility';\n\nexport default function createPaymentIntegrationSelectors({\n billingAddress: { getBillingAddress, getBillingAddressOrThrow },\n cart: { getCart, getCartOrThrow },\n checkout: { getCheckout, getCheckoutOrThrow },\n config: { getHost, getLocale, getStoreConfig, getStoreConfigOrThrow },\n consignments: { getConsignments, getConsignmentsOrThrow },\n customer: { getCustomer, getCustomerOrThrow },\n instruments: { getCardInstrument, getCardInstrumentOrThrow },\n order: { getOrder, getOrderOrThrow },\n payment: {\n getPaymentToken,\n getPaymentTokenOrThrow,\n getPaymentId,\n getPaymentIdOrThrow,\n getPaymentStatus,\n getPaymentStatusOrThrow,\n getPaymentRedirectUrl,\n getPaymentRedirectUrlOrThrow,\n isPaymentDataRequired,\n },\n paymentMethods: { getPaymentMethod, getPaymentMethodOrThrow },\n paymentStrategies: { isInitialized: isPaymentMethodInitialized },\n shippingAddress: {\n getShippingAddress,\n getShippingAddressOrThrow,\n getShippingAddresses,\n getShippingAddressesOrThrow,\n },\n}: InternalCheckoutSelectors): PaymentIntegrationSelectors {\n return {\n getHost: clone(getHost),\n getLocale: clone(getLocale),\n getBillingAddress: clone(getBillingAddress),\n getBillingAddressOrThrow: clone(getBillingAddressOrThrow),\n getCart: clone(getCart),\n getCartOrThrow: clone(getCartOrThrow),\n getCheckout: clone(getCheckout),\n getCheckoutOrThrow: clone(getCheckoutOrThrow),\n getStoreConfig: clone(getStoreConfig),\n getStoreConfigOrThrow: clone(getStoreConfigOrThrow),\n getConsignments: clone(getConsignments),\n getConsignmentsOrThrow: clone(getConsignmentsOrThrow),\n getCustomer: clone(getCustomer),\n getCustomerOrThrow: clone(getCustomerOrThrow),\n getCardInstrument: clone(getCardInstrument),\n getCardInstrumentOrThrow: clone(getCardInstrumentOrThrow),\n getOrder: clone(getOrder),\n getOrderOrThrow: clone(getOrderOrThrow),\n getPaymentToken,\n getPaymentTokenOrThrow,\n getPaymentId,\n getPaymentIdOrThrow,\n getPaymentStatus,\n getPaymentStatusOrThrow,\n getPaymentRedirectUrl,\n getPaymentRedirectUrlOrThrow,\n getPaymentMethod: clone(getPaymentMethod),\n getPaymentMethodOrThrow: clone(getPaymentMethodOrThrow),\n getShippingAddress: clone(getShippingAddress),\n getShippingAddressOrThrow: clone(getShippingAddressOrThrow),\n getShippingAddresses: clone(getShippingAddresses),\n getShippingAddressesOrThrow: clone(getShippingAddressesOrThrow),\n isPaymentDataRequired,\n isPaymentMethodInitialized,\n };\n}\n","import {\n BillingAddressRequestBody,\n BuyNowCartRequestBody,\n Cart,\n HostedForm,\n HostedFormOptions,\n InitializeOffsitePaymentConfig,\n OrderRequestBody,\n Payment,\n PaymentIntegrationSelectors,\n PaymentIntegrationService,\n RequestOptions,\n ShippingAddressRequestBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BillingAddressActionCreator } from '../billing';\nimport { CartRequestSender } from '../cart';\nimport { CheckoutActionCreator, CheckoutStore } from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\nimport { CustomerActionCreator, CustomerCredentials } from '../customer';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator } from '../order';\nimport PaymentActionCreator from '../payment/payment-action-creator';\nimport PaymentMethodActionCreator from '../payment/payment-method-action-creator';\nimport { ConsignmentActionCreator } from '../shipping';\nimport { SpamProtectionActionCreator } from '../spam-protection';\nimport { StoreCreditActionCreator } from '../store-credit';\n\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\nexport default class DefaultPaymentIntegrationService implements PaymentIntegrationService {\n private _storeProjection: DataStoreProjection;\n\n constructor(\n private _store: CheckoutStore,\n private _storeProjectionFactory: PaymentIntegrationStoreProjectionFactory,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _hostedFormFactory: HostedFormFactory,\n private _orderActionCreator: OrderActionCreator,\n private _billingAddressActionCreator: BillingAddressActionCreator,\n private _consignmentActionCreator: ConsignmentActionCreator,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n private _paymentActionCreator: PaymentActionCreator,\n private _customerActionCreator: CustomerActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _storeCreditActionCreator: StoreCreditActionCreator,\n private _spamProtectionActionCreator: SpamProtectionActionCreator,\n ) {\n this._storeProjection = this._storeProjectionFactory.create(this._store);\n }\n\n createHostedForm(host: string, options: HostedFormOptions): HostedForm {\n return this._hostedFormFactory.create(host, options);\n }\n\n subscribe(\n subscriber: (state: PaymentIntegrationSelectors) => void,\n ...filters: Array<(state: PaymentIntegrationSelectors) => unknown>\n ): () => void {\n return this._storeProjection.subscribe(subscriber, ...filters);\n }\n\n getState(): PaymentIntegrationSelectors {\n return this._storeProjection.getState();\n }\n\n async initializeOffsitePayment(\n initializeOffsitePaymentConfig: InitializeOffsitePaymentConfig,\n ): Promise {\n await this._store.dispatch(\n this._paymentActionCreator.initializeOffsitePayment(initializeOffsitePaymentConfig),\n );\n\n return this._storeProjection.getState();\n }\n\n async loadCheckout(id?: string): Promise {\n if (id) {\n await this._store.dispatch(this._checkoutActionCreator.loadCheckout(id));\n } else {\n await this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout());\n }\n\n return this._storeProjection.getState();\n }\n\n async loadDefaultCheckout(): Promise {\n await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n\n return this._storeProjection.getState();\n }\n\n async loadPaymentMethod(\n methodId: string,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._paymentMethodActionCreator.loadPaymentMethod(methodId, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async submitOrder(\n payload?: OrderRequestBody,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(this._orderActionCreator.submitOrder(payload, options));\n\n return this._storeProjection.getState();\n }\n\n async submitPayment(payment: Payment): Promise {\n await this._store.dispatch(this._paymentActionCreator.submitPayment(payment));\n\n return this._storeProjection.getState();\n }\n\n async finalizeOrder(options?: RequestOptions): Promise {\n const {\n order: { getOrderOrThrow },\n } = this._store.getState();\n\n await this._store.dispatch(\n this._orderActionCreator.finalizeOrder(getOrderOrThrow().orderId, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async updateBillingAddress(\n payload: BillingAddressRequestBody,\n ): Promise {\n await this._store.dispatch(this._billingAddressActionCreator.updateAddress(payload));\n\n return this._storeProjection.getState();\n }\n\n async updateShippingAddress(\n payload: ShippingAddressRequestBody,\n ): Promise {\n await this._store.dispatch(this._consignmentActionCreator.updateAddress(payload));\n\n return this._storeProjection.getState();\n }\n\n async selectShippingOption(\n id: string,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._consignmentActionCreator.selectShippingOption(id, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async signInCustomer(\n credentials: CustomerCredentials,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._customerActionCreator.signInCustomer(credentials, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async signOutCustomer(options?: RequestOptions): Promise {\n await this._store.dispatch(this._customerActionCreator.signOutCustomer(options));\n\n return this._storeProjection.getState();\n }\n\n async createBuyNowCart(\n buyNowCartRequestBody: BuyNowCartRequestBody,\n options?: RequestOptions,\n ): Promise {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n buyNowCartRequestBody,\n options,\n );\n\n return buyNowCart;\n }\n\n async applyStoreCredit(\n useStoreCredit: boolean,\n options?: RequestOptions,\n ): Promise {\n await this._store.dispatch(\n this._storeCreditActionCreator.applyStoreCredit(useStoreCredit, options),\n );\n\n return this._storeProjection.getState();\n }\n\n async verifyCheckoutSpamProtection(): Promise {\n const { checkout } = this._store.getState();\n const { shouldExecuteSpamCheck } = checkout.getCheckoutOrThrow();\n\n if (shouldExecuteSpamCheck) {\n await this._store.dispatch(\n this._spamProtectionActionCreator.verifyCheckoutSpamProtection(),\n );\n }\n\n return this._storeProjection.getState();\n }\n}\n","import { Action, createAction, createDataStore, ReadableDataStore } from '@bigcommerce/data-store';\n\nenum ProjectionActionType {\n Synchronize = 'SYNCHRONIZE',\n}\n\ninterface SynchronizeAction extends Action {\n type: ProjectionActionType.Synchronize;\n payload: TState;\n}\n\nexport interface DataStoreProjection\n extends ReadableDataStore {\n notifyState(): void;\n}\n\nexport default function createDataStoreProjection(\n store: ReadableDataStore,\n stateTransformer: (state: TState) => TTransformedState,\n): DataStoreProjection {\n const projection = createDataStore<\n TState | undefined,\n SynchronizeAction,\n TTransformedState\n >(\n (state, action) =>\n action.type === ProjectionActionType.Synchronize ? action.payload : state,\n store.getState(),\n { stateTransformer },\n );\n\n store.subscribe(\n (state) => {\n projection.dispatch(\n createAction(ProjectionActionType.Synchronize, state) as SynchronizeAction,\n );\n },\n { initial: false },\n );\n\n return projection;\n}\n","import { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors, ReadableCheckoutStore } from '../checkout';\nimport { createDataStoreProjection, DataStoreProjection } from '../common/data-store';\n\nexport default class PaymentIntegrationStoreProjectionFactory {\n constructor(\n private _transformSelectors: (\n selectors: InternalCheckoutSelectors,\n ) => PaymentIntegrationSelectors,\n ) {}\n\n create(store: ReadableCheckoutStore): DataStoreProjection {\n return createDataStoreProjection(store, this._transformSelectors);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"shallowequal\");","export interface RootCacheKeyMap {\n maps: ChildCacheKeyMap[];\n}\n\nexport interface IntermediateCacheKeyMap {\n maps: ChildCacheKeyMap[];\n parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n usedCount: number;\n value: any;\n}\n\nexport interface TerminalCacheKeyMap extends IntermediateCacheKeyMap {\n cacheKey: string;\n}\n\nexport type ChildCacheKeyMap = IntermediateCacheKeyMap | TerminalCacheKeyMap;\n\nexport function isTerminalCacheKeyMap(map: ChildCacheKeyMap): map is TerminalCacheKeyMap {\n return Object.prototype.hasOwnProperty.call(map, 'cacheKey');\n}\n\nexport function isRootCacheKeyMap(map: RootCacheKeyMap | ChildCacheKeyMap): map is RootCacheKeyMap {\n return Object.prototype.hasOwnProperty.call(map, 'parentMap');\n}\n","import { noop } from 'lodash';\nimport shallowEqual from 'shallowequal';\n\nimport {\n ChildCacheKeyMap,\n IntermediateCacheKeyMap,\n isRootCacheKeyMap,\n isTerminalCacheKeyMap,\n RootCacheKeyMap,\n TerminalCacheKeyMap,\n} from './cache-key-maps';\n\nexport interface CacheKeyResolverOptions {\n maxSize?: number;\n onExpire?(key: string): void;\n isEqual?(valueA: any, valueB: any): boolean;\n}\n\ninterface ResolveResult {\n index: number;\n parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n map?: TerminalCacheKeyMap;\n}\n\nexport default class CacheKeyResolver {\n private _lastId = 0;\n private _map: RootCacheKeyMap = { maps: [] };\n private _usedMaps: TerminalCacheKeyMap[] = [];\n private _options: Required;\n\n constructor(options?: CacheKeyResolverOptions) {\n this._options = {\n maxSize: 0,\n isEqual: shallowEqual,\n onExpire: noop,\n ...options,\n };\n }\n\n getKey(...args: any[]): string {\n const result = this._resolveMap(...args);\n const { index, parentMap } = result;\n let { map } = result;\n\n if (map && map.cacheKey) {\n map.usedCount++;\n } else {\n map = this._generateMap(parentMap, args.slice(index));\n }\n\n // Keep track of the least used map so we can remove it if the size of\n // the stack exceeds the maximum size.\n this._removeLeastUsedMap(map);\n\n return map.cacheKey;\n }\n\n getUsedCount(...args: any[]): number {\n const { map } = this._resolveMap(...args);\n\n return map ? map.usedCount : 0;\n }\n\n private _resolveMap(...args: any[]): ResolveResult {\n let index = 0;\n let parentMap = this._map;\n\n // Traverse the tree to find the linked list of maps that match the\n // arguments of the call. Each intermediate or terminal map contains a\n // value that could be used to match with the arguments. The last map in\n // the list (the terminal) should contain a cache key. If it can does\n // not exist, we will return a falsy value so that the caller could\n // handle and generate a new cache key.\n while (parentMap.maps.length) {\n let isMatched = false;\n\n for (let mapIndex = 0; mapIndex < parentMap.maps.length; mapIndex++) {\n const map = parentMap.maps[mapIndex];\n\n if (!this._options.isEqual(map.value, args[index])) {\n continue;\n }\n\n // Move the most recently used map to the top of the stack for\n // quicker access\n parentMap.maps.unshift(...parentMap.maps.splice(mapIndex, 1));\n\n if (\n (args.length === 0 || index === args.length - 1) &&\n isTerminalCacheKeyMap(map)\n ) {\n return { index, map, parentMap };\n }\n\n isMatched = true;\n parentMap = map;\n index++;\n\n break;\n }\n\n if (!isMatched) {\n break;\n }\n }\n\n return { index, parentMap };\n }\n\n private _generateMap(\n parent: RootCacheKeyMap | IntermediateCacheKeyMap,\n args: any[],\n ): TerminalCacheKeyMap {\n let index = 0;\n let parentMap = parent;\n let map: IntermediateCacheKeyMap;\n\n do {\n map = {\n maps: [],\n parentMap,\n usedCount: 1,\n value: args[index],\n };\n\n // Continue to build the tree of maps so that it could be resolved\n // next time when the function is called with the same set of\n // arguments.\n parentMap.maps.unshift(map);\n\n parentMap = map;\n index++;\n } while (index < args.length);\n\n const terminalMap = map as TerminalCacheKeyMap;\n\n terminalMap.cacheKey = `${++this._lastId}`;\n\n return terminalMap;\n }\n\n private _removeLeastUsedMap(recentlyUsedMap: TerminalCacheKeyMap): void {\n if (!this._options.maxSize) {\n return;\n }\n\n const index = this._usedMaps.indexOf(recentlyUsedMap);\n\n this._usedMaps.splice(index === -1 ? 0 : index, index === -1 ? 0 : 1, recentlyUsedMap);\n\n if (this._usedMaps.length <= this._options.maxSize) {\n return;\n }\n\n const map = this._usedMaps.pop();\n\n if (!map) {\n return;\n }\n\n this._removeMap(map);\n this._options.onExpire(map.cacheKey);\n }\n\n private _removeMap(map: ChildCacheKeyMap): void {\n if (!map.parentMap) {\n return;\n }\n\n map.parentMap.maps.splice(map.parentMap.maps.indexOf(map), 1);\n\n if (isRootCacheKeyMap(map.parentMap)) {\n return;\n }\n\n this._removeMap(map.parentMap);\n }\n}\n","import { memoize } from '@bigcommerce/memoize';\n\nimport { bindDecorator, CacheKeyResolver, isEqual, isPrivate } from '../utility';\n\n/**\n * Decorates a class by patching all of its methods to cache their return values\n * and return them if they are called again with the same set of parameters. The\n * decorator also binds all the methods to the calling instance so it can be\n * destructed.\n */\nexport default function selectorDecorator>(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 selectorMethodDecorator(target.prototype, key, descriptor),\n );\n });\n\n return decoratedTarget;\n}\n\nfunction selectorMethodDecorator(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor,\n): TypedPropertyDescriptor {\n if (typeof descriptor.value !== 'function') {\n return descriptor;\n }\n\n let resolver = new CacheKeyResolver();\n let method = descriptor.value;\n let memoizedMethod = memoize(method);\n\n return bindDecorator(target, key, {\n get() {\n const value = ((...args: any[]) => {\n const cachedValue = memoizedMethod.call(this, ...args);\n\n if (resolver.getUsedCount(...args) === 1) {\n return cachedValue;\n }\n\n const newValue = method.call(this, ...args);\n\n if (isEqual(newValue, cachedValue, { keyFilter: (key) => !isPrivate(key) })) {\n return cachedValue;\n }\n\n memoizedMethod.cache.set(resolver.getKey(...args), newValue);\n\n return newValue;\n }) as T;\n\n Object.defineProperty(this, key, { ...descriptor, value });\n\n return value;\n },\n set(value) {\n resolver = new CacheKeyResolver();\n method = value;\n memoizedMethod = memoize(method);\n },\n });\n}\n\nexport type Constructor = new (...args: any[]) => T;\ntype Method = (...args: any[]) => any;\n","export default function isPrivate(key: string): boolean {\n return `${key}`.indexOf('$$') === 0 || `${key}`.indexOf('_') === 0;\n}\n","import { InternalCheckoutSelectors } from '../checkout';\nimport { selector } from '../common/selector';\n\nimport CheckoutButtonSelector from './checkout-button-selector';\nimport { CheckoutButtonMethodType } from './strategies';\n\n@selector\nexport default class CheckoutButtonErrorSelector {\n private _checkoutButton: CheckoutButtonSelector;\n\n /**\n * @internal\n */\n constructor(selectors: InternalCheckoutSelectors) {\n this._checkoutButton = selectors.checkoutButton;\n }\n\n getInitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined {\n return this._checkoutButton.getInitializeError(methodId);\n }\n\n getDeinitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined {\n return this._checkoutButton.getDeinitializeError(methodId);\n }\n}\n","import { InternalCheckoutSelectors } from '../checkout';\nimport { selector } from '../common/selector';\n\nimport CheckoutButtonSelector from './checkout-button-selector';\nimport { CheckoutButtonMethodType } from './strategies';\n\n@selector\nexport default class CheckoutButtonStatusSelector {\n private _checkoutButton: CheckoutButtonSelector;\n\n /**\n * @internal\n */\n constructor(selectors: InternalCheckoutSelectors) {\n this._checkoutButton = selectors.checkoutButton;\n }\n\n isInitializingButton(methodId?: CheckoutButtonMethodType): boolean {\n return this._checkoutButton.isInitializing(methodId);\n }\n\n isDeinitializingButton(methodId?: CheckoutButtonMethodType): boolean {\n return this._checkoutButton.isDeinitializing(methodId);\n }\n}\n","import { InternalCheckoutSelectors } from '../checkout';\n\nimport CheckoutButtonErrorSelector from './checkout-button-error-selector';\nimport CheckoutButtonSelectors from './checkout-button-selectors';\nimport CheckoutButtonStatusSelector from './checkout-button-status-selector';\n\nexport default function createCheckoutButtonSelectors(\n selectors: InternalCheckoutSelectors,\n): CheckoutButtonSelectors {\n const errors = new CheckoutButtonErrorSelector(selectors);\n const statuses = new CheckoutButtonStatusSelector(selectors);\n\n return {\n errors,\n statuses,\n };\n}\n","import { CheckoutStore, InternalCheckoutSelectors } from '../checkout';\nimport { isElementId, setUniqueElementId } from '../common/dom';\nimport { bindDecorator as bind } from '../common/utility';\n\nimport { CheckoutButtonInitializeOptions, CheckoutButtonOptions } from './checkout-button-options';\nimport CheckoutButtonSelectors from './checkout-button-selectors';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonSelectors from './create-checkout-button-selectors';\n\n@bind\nexport default class CheckoutButtonInitializer {\n private _state: CheckoutButtonSelectors;\n\n /**\n * @internal\n */\n constructor(\n private _store: CheckoutStore,\n private _buttonStrategyActionCreator: CheckoutButtonStrategyActionCreator,\n ) {\n this._state = createCheckoutButtonSelectors(this._store.getState());\n\n this._store.subscribe((state) => {\n this._state = createCheckoutButtonSelectors(state);\n });\n }\n\n /**\n * Returns a snapshot of the current state.\n *\n * The method returns a new instance every time there is a change in the\n * state. You can query the state by calling any of its getter methods.\n *\n * ```js\n * const state = service.getState();\n *\n * console.log(state.errors.getInitializeButtonError());\n * console.log(state.statuses.isInitializingButton());\n * ```\n *\n * @returns The current customer's checkout state\n */\n getState(): CheckoutButtonSelectors {\n return this._state;\n }\n\n /**\n * Subscribes to any changes to the current state.\n *\n * The method registers a callback function and executes it every time there\n * is a change in the current state.\n *\n * ```js\n * service.subscribe(state => {\n * console.log(state.statuses.isInitializingButton());\n * });\n * ```\n *\n * The method can be configured to notify subscribers only regarding\n * relevant changes, by providing a filter function.\n *\n * ```js\n * const filter = state => state.errors.getInitializeButtonError();\n *\n * // Only trigger the subscriber when the cart changes.\n * service.subscribe(state => {\n * console.log(state.errors.getInitializeButtonError())\n * }, filter);\n * ```\n *\n * @param subscriber - The function to subscribe to state changes.\n * @param filters - One or more functions to filter out irrelevant state\n * changes. If more than one function is provided, the subscriber will only\n * be triggered if all conditions are met.\n * @returns A function, if called, will unsubscribe the subscriber.\n */\n subscribe(\n subscriber: (state: CheckoutButtonSelectors) => void,\n ...filters: Array<(state: CheckoutButtonSelectors) => any>\n ): () => void {\n return this._store.subscribe(\n () => subscriber(this.getState()),\n (state) => state.checkoutButton.getState(),\n ...filters.map(\n (filter) => (state: InternalCheckoutSelectors) =>\n filter(createCheckoutButtonSelectors(state)),\n ),\n );\n }\n\n /**\n * Initializes the checkout button of a payment method.\n *\n * When the checkout button is initialized, it will be inserted into the DOM,\n * ready to be interacted with by the customer.\n *\n * ```js\n * initializer.initializeButton({\n * methodId: 'braintreepaypal',\n * containerId: 'checkoutButton',\n * braintreepaypal: {\n * },\n * });\n * ```\n *\n * @param options - Options for initializing the checkout button.\n * @returns A promise that resolves to the current state.\n */\n initializeButton(options: CheckoutButtonInitializeOptions): Promise {\n const containerIds = isElementId(options.containerId)\n ? [options.containerId]\n : setUniqueElementId(options.containerId, `${options.methodId}-container`);\n\n return Promise.all(\n containerIds.map((containerId) => {\n const action = this._buttonStrategyActionCreator.initialize({\n ...options,\n containerId,\n });\n const queueId = `checkoutButtonStrategy:${options.methodId}:${containerId}`;\n\n return this._store.dispatch(action, { queueId });\n }),\n ).then(() => this.getState());\n }\n\n /**\n * De-initializes the checkout button by performing any necessary clean-ups.\n *\n * ```js\n * await service.deinitializeButton({\n * methodId: 'braintreepaypal',\n * });\n * ```\n *\n * @param options - Options for deinitializing the checkout button.\n * @returns A promise that resolves to the current state.\n */\n deinitializeButton(options: CheckoutButtonOptions): Promise {\n const action = this._buttonStrategyActionCreator.deinitialize(options);\n const queueId = `checkoutButtonStrategy:${options.methodId}`;\n\n return this._store.dispatch(action, { queueId }).then(() => this.getState());\n }\n}\n","/* eslint-disable no-useless-escape */\nexport default function isElementId(id: string): boolean {\n return /^\\w[\\w\\-\\:\\.]*$/.test(id);\n}\n","import { uniqueId } from 'lodash';\n\nimport { InvalidArgumentError } from '../error/errors';\n\nexport default function setUniqueElementId(selector: string, idPrefix: string): string[] {\n const containers = document.querySelectorAll(selector);\n\n if (!containers.length) {\n throw new InvalidArgumentError(\n `Unable to find any element with the specified selector: ${selector}`,\n );\n }\n\n return Array.prototype.slice.call(containers).map((container: HTMLElement) => {\n if (!container.id) {\n container.id = uniqueId(idPrefix);\n }\n\n return container.id;\n });\n}\n","import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, empty, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { CheckoutButtonStrategy as CheckoutButtonStrategyV2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { Registry } from '../common/registry';\nimport { PaymentMethodActionCreator } from '../payment';\n\nimport {\n CheckoutButtonActionType,\n DeinitializeButtonAction,\n InitializeButtonAction,\n} from './checkout-button-actions';\nimport { CheckoutButtonInitializeOptions, CheckoutButtonOptions } from './checkout-button-options';\nimport CheckoutButtonRegistryV2 from './checkout-button-strategy-registry-v2';\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\n\nexport default class CheckoutButtonStrategyActionCreator {\n constructor(\n private _registry: Registry,\n private _registryV2: CheckoutButtonRegistryV2,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n ) {}\n\n initialize(\n options: CheckoutButtonInitializeOptions,\n ): ThunkAction {\n return (store) => {\n const meta = {\n methodId: options.methodId,\n containerId: options.containerId,\n };\n\n if (\n store.getState().checkoutButton.isInitialized(options.methodId, options.containerId)\n ) {\n return empty();\n }\n\n const paymentMethodRequestParams = options.currencyCode\n ? { params: { currencyCode: options.currencyCode } }\n : {};\n\n const paymentMethodRequestOptions = {\n ...paymentMethodRequestParams,\n timeout: options.timeout,\n useCache: true,\n };\n\n return concat(\n of(\n createAction(\n CheckoutButtonActionType.InitializeButtonRequested,\n undefined,\n meta,\n ),\n ),\n this._paymentMethodActionCreator.loadPaymentMethod(\n options.methodId,\n paymentMethodRequestOptions,\n )(store),\n defer(() =>\n this._getStrategy(options.methodId)\n .initialize(options)\n .then(() =>\n createAction(\n CheckoutButtonActionType.InitializeButtonSucceeded,\n undefined,\n meta,\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(CheckoutButtonActionType.InitializeButtonFailed, error, meta),\n ),\n );\n };\n }\n\n deinitialize(\n options: CheckoutButtonOptions,\n ): ThunkAction {\n return (store) => {\n const meta = { methodId: options.methodId };\n\n if (!store.getState().checkoutButton.isInitialized(options.methodId)) {\n return empty();\n }\n\n return concat(\n of(\n createAction(\n CheckoutButtonActionType.DeinitializeButtonRequested,\n undefined,\n meta,\n ),\n ),\n defer(() =>\n this._getStrategy(options.methodId)\n .deinitialize()\n .then(() =>\n createAction(\n CheckoutButtonActionType.DeinitializeButtonSucceeded,\n undefined,\n meta,\n ),\n ),\n ),\n ).pipe(\n catchError((error) =>\n throwErrorAction(\n CheckoutButtonActionType.DeinitializeButtonFailed,\n error,\n meta,\n ),\n ),\n );\n };\n }\n\n private _getStrategy(\n methodId: CheckoutButtonMethodType,\n ): CheckoutButtonStrategy | CheckoutButtonStrategyV2 {\n let strategy: CheckoutButtonStrategy | CheckoutButtonStrategyV2;\n\n try {\n strategy = this._registryV2.get({ id: methodId });\n } catch {\n strategy = this._registry.get(methodId);\n }\n\n return strategy;\n }\n}\n","import { InvalidArgumentError } from '../error/errors';\n\nimport Factory from './factory';\n\nexport default class Registry {\n private _factories: { [key: string]: Factory };\n private _instances: { [key: string]: T };\n private _defaultToken: string;\n private _useFallback: string | boolean;\n private _tokenResolver: (token: string, registeredTokens: string[]) => string | undefined;\n\n constructor(options?: RegistryOptions) {\n this._factories = {};\n this._instances = {};\n this._defaultToken = options?.defaultToken ?? 'default';\n this._useFallback = options?.useFallback ?? true;\n this._tokenResolver = options?.tokenResolver ?? ((token) => token);\n }\n\n get(token?: K, cacheToken?: string): T {\n try {\n return this._getInstance(\n token || this._defaultToken,\n cacheToken || token || this._defaultToken,\n );\n } catch (error) {\n if (!this._useFallback) {\n throw error;\n }\n\n return this._getInstance(this._defaultToken, cacheToken || this._defaultToken);\n }\n }\n\n register(token: K, factory: Factory): void {\n if (this._hasFactory(token)) {\n throw new InvalidArgumentError(`'${token}' is already registered.`);\n }\n\n this._factories[token] = factory;\n }\n\n protected _hasFactory(token: string): boolean {\n return !!this._factories[token];\n }\n\n private _hasInstance(token: string): boolean {\n return !!this._instances[token];\n }\n\n private _getInstance(token: string, cacheToken: string): T {\n if (!this._hasInstance(cacheToken)) {\n const resolvedToken = this._tokenResolver(token, Object.keys(this._factories));\n const factory = resolvedToken && this._factories[resolvedToken];\n\n if (!factory) {\n throw new InvalidArgumentError(`'${token}' is not registered.`);\n }\n\n this._instances[cacheToken] = factory();\n }\n\n return this._instances[cacheToken];\n }\n}\n\nexport interface RegistryOptions {\n defaultToken?: string;\n useFallback?: boolean;\n tokenResolver?(token: string, registeredTokens: string[]): string | undefined;\n}\n","import { Cart } from '../cart';\n\nimport getLineItemsCount from './getLineItemsCount';\n\nexport default function getShippableItemsCount(cart: Cart): number {\n return getLineItemsCount(cart.lineItems.physicalItems.filter((item) => !item.addedByPromotion));\n}\n","import { reduce } from 'lodash';\n\nimport { LineItem } from '../cart';\n\nexport default function getLineItemsCount(lineItems: LineItem[]): number {\n return reduce(lineItems, (total, item) => total + item.quantity, 0);\n}\n","import { InternalCheckoutSelectors } from '../../../../../core/src/checkout';\n\nexport type EnvironmentType = 'PRODUCTION' | 'TEST';\n\nexport interface AmazonPayV2Options {\n environment: EnvironmentType;\n}\n\nexport interface AmazonPayV2SDK {\n Pay: AmazonPayV2Client;\n}\n\nexport interface RequestConfig {\n createCheckoutSessionConfig: AmazonPayV2CheckoutSessionConfig;\n estimatedOrderAmount?: AmazonPayV2Price;\n productType?: AmazonPayV2PayOptions;\n}\n\nexport interface AmazonPayV2Button {\n /**\n * Allows you to define custom actions.\n */\n onClick: (callback: () => void) => void;\n\n /**\n * Initiates the Amazon Pay checkout.\n */\n initCheckout(requestConfig: RequestConfig): void;\n}\n\nexport type AmazonPayV2ButtonParameters = AmazonPayV2ButtonParams | AmazonPayV2NewButtonParams;\n\nexport interface AmazonPayV2Client {\n /**\n * Render the Amazon Pay button to a HTML container element.\n *\n * @param containerId - HTML element id.\n * @param params - Button rendering params.\n */\n renderButton(containerId: string, params: AmazonPayV2ButtonParameters): AmazonPayV2Button;\n\n /**\n * Bind click events to HTML elements, so that when the element is clicked, the buyer can select a different shipping address or payment method.\n *\n * @param buttonId - HTML element id.\n * @param options - Element binding options.\n */\n bindChangeAction(buttonId: string, options: AmazonPayV2ChangeActionOptions): void;\n\n /**\n * Allow buyers to sign out from their Amazon account.\n */\n signout(): void;\n}\n\nexport interface AmazonPayV2HostWindow extends Window {\n amazon?: AmazonPayV2SDK;\n}\n\nexport interface AmazonPayV2ButtonConfig {\n /**\n * Amazon Pay merchant account identifier.\n */\n merchantId: string;\n\n /**\n * Placement of the Amazon Pay button on your website.\n */\n placement: AmazonPayV2Placement;\n\n /**\n * Ledger currency provided during registration for the given merchant identifier.\n */\n ledgerCurrency: AmazonPayV2LedgerCurrency;\n\n /**\n * Product type selected for checkout. Default is 'PayAndShip'.\n */\n productType?: AmazonPayV2PayOptions;\n\n /**\n * Color of the Amazon Pay button.\n */\n buttonColor?: AmazonPayV2ButtonColor;\n\n /**\n * Language used to render the button and text on Amazon Pay hosted pages.\n */\n checkoutLanguage?: AmazonPayV2CheckoutLanguage;\n\n /**\n * Sets button to Sandbox environment. You do not have to set this parameter\n * if your `publicKeyId` has an environment prefix. Default is false.\n */\n sandbox?: boolean;\n\n /**\n * Sets Amazon Pay button design.\n */\n design?: AmazonPayV2ButtonDesign;\n}\n\nexport interface AmazonPayV2ButtonParams extends AmazonPayV2ButtonConfig {\n /**\n * Configuration for calling the endpoint to Create Checkout Session.\n */\n createCheckoutSession: AmazonPayV2CheckoutSession;\n}\n\nexport interface AmazonPayV2NewButtonParams extends AmazonPayV2ButtonConfig {\n /**\n * Credential provided by Amazon Pay. You must also set the `sandbox`\n * parameter if your `publicKeyId` does not have an environment prefix.\n */\n publicKeyId?: string;\n\n /**\n * It does not have to match the final order amount if the buyer updates\n * their order after starting checkout. Amazon Pay will use this value to\n * assess transaction risk and prevent buyers from selecting payment methods\n * that can't be used to process the order.\n */\n estimatedOrderAmount?: AmazonPayV2Price;\n\n /**\n * Create Checkout Session configuration.\n */\n createCheckoutSessionConfig?: AmazonPayV2CheckoutSessionConfig;\n}\n\nexport interface AmazonPayV2CheckoutSession {\n /**\n * Endpoint URL to Create Checkout Session.\n */\n url: string;\n\n /**\n * HTTP request method. Default is 'POST'.\n */\n method?: 'GET' | 'POST';\n\n /**\n * Checkout Session ID parameter in the response. Default is 'checkoutSessionId'.\n */\n extractAmazonCheckoutSessionId?: string;\n}\n\nexport interface AmazonPayV2CheckoutSessionConfig {\n /**\n * A payload that Amazon Pay will use to create a Checkout Session object.\n */\n payloadJSON: string;\n\n /**\n * Payload's signature.\n */\n signature: string;\n\n /**\n * Credential provided by Amazon Pay. You do not have to set this parameter\n * if your `publicKeyId` has an environment prefix.\n */\n publicKeyId?: string;\n}\n\nexport interface AmazonPayV2Price {\n /**\n * Transaction amount.\n */\n amount: string;\n\n /**\n * Transaction currency code in ISO 4217 format. Example: USD.\n */\n currencyCode: string;\n}\n\nexport type AmazonPayV2ChangeActionType = 'changeAddress' | 'changePayment';\n\nexport interface AmazonPayV2ChangeActionOptions {\n /**\n * Amazon Pay Checkout Session identifier.\n */\n amazonCheckoutSessionId: string;\n\n /**\n * Update requested by the buyer.\n */\n changeAction: AmazonPayV2ChangeActionType;\n}\n\nexport enum AmazonPayV2Regions {\n de = 'eu',\n jp = 'fe',\n uk = 'eu',\n us = 'na',\n}\n\nexport enum AmazonPayV2CheckoutLanguage {\n en_US = 'en_US',\n en_GB = 'en_GB',\n de_DE = 'de_DE',\n fr_FR = 'fr_FR',\n it_IT = 'it_IT',\n es_ES = 'es_ES',\n ja_JP = 'ja_JP',\n}\n\nexport enum AmazonPayV2Placement {\n /** Initial or main page. */\n Home = 'Home',\n\n /** Product details page. */\n Product = 'Product',\n\n /** Cart review page before buyer starts checkout. */\n Cart = 'Cart',\n\n /** Any page after buyer starts checkout. */\n Checkout = 'Checkout',\n\n /** Any page that doesn't fit the previous descriptions. */\n Other = 'Other',\n}\n\nexport enum AmazonPayV2LedgerCurrency {\n USD = 'USD',\n EUR = 'EUR',\n GBP = 'GBP',\n JPY = 'JPY',\n}\n\nexport enum AmazonPayV2PayOptions {\n /** Select this product type if you need the buyer's shipping details. */\n PayAndShip = 'PayAndShip',\n\n /** Select this product type if you do not need the buyer's shipping details. */\n PayOnly = 'PayOnly',\n}\n\nexport enum AmazonPayV2ButtonColor {\n Gold = 'Gold',\n LightGray = 'LightGray',\n DarkGray = 'DarkGray',\n}\n\nexport enum AmazonPayV2ButtonDesign {\n C0001 = 'C0001',\n}\n\nexport interface AmazonPayV2ButtonRenderingOptions {\n checkoutState: InternalCheckoutSelectors;\n containerId: string;\n decoupleCheckoutInitiation?: boolean;\n methodId: string;\n buttonColor?: AmazonPayV2ButtonColor;\n options?: AmazonPayV2ButtonParameters;\n placement: AmazonPayV2Placement;\n}\n","import { PaymentMethod } from '../..';\nimport { InternalCheckoutSelectors } from '../../../../../core/src/checkout';\nimport { getShippableItemsCount } from '../../../../../core/src/shipping';\nimport { guard } from '../../../../src/common/utility';\nimport { StoreProfile } from '../../../../src/config';\nimport { CheckoutSettings } from '../../../../src/config/config';\nimport BuyNowCartRequestBody from '../../../cart/buy-now-cart-request-body';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '../../../common/error/errors';\n\nimport {\n AmazonPayV2Button,\n AmazonPayV2ButtonColor,\n AmazonPayV2ButtonConfig,\n AmazonPayV2ButtonDesign,\n AmazonPayV2ButtonParameters,\n AmazonPayV2ButtonRenderingOptions,\n AmazonPayV2ChangeActionType,\n AmazonPayV2CheckoutSessionConfig,\n AmazonPayV2NewButtonParams,\n AmazonPayV2PayOptions,\n AmazonPayV2Placement,\n AmazonPayV2Price,\n AmazonPayV2SDK,\n RequestConfig,\n} from './amazon-pay-v2';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\n\nexport default class AmazonPayV2PaymentProcessor {\n private _amazonPayV2SDK?: AmazonPayV2SDK;\n private _buttonParentContainer?: HTMLDivElement;\n private _amazonPayV2Button?: AmazonPayV2Button;\n private _buyNowCartRequestBody?: BuyNowCartRequestBody;\n\n constructor(private _amazonPayV2ScriptLoader: AmazonPayV2ScriptLoader) {}\n\n async initialize(paymentMethod: PaymentMethod): Promise {\n this._amazonPayV2SDK = await this._amazonPayV2ScriptLoader.load(paymentMethod);\n this._buttonParentContainer =\n this._buttonParentContainer || this._createAmazonPayButtonParentContainer();\n }\n\n deinitialize(): Promise {\n this._amazonPayV2Button = undefined;\n this._buttonParentContainer?.remove();\n this._buttonParentContainer = undefined;\n this._amazonPayV2SDK = undefined;\n\n return Promise.resolve();\n }\n\n bindButton(\n buttonId: string,\n sessionId: string,\n changeAction: AmazonPayV2ChangeActionType,\n ): void {\n this._getAmazonPayV2SDK().Pay.bindChangeAction(`#${buttonId}`, {\n amazonCheckoutSessionId: sessionId,\n changeAction,\n });\n }\n\n createButton(containerId: string, options: AmazonPayV2ButtonParameters): void {\n this._amazonPayV2Button = this._getAmazonPayV2SDK().Pay.renderButton(\n `#${containerId}`,\n options,\n );\n }\n\n prepareCheckout(createCheckoutSessionConfig: Required) {\n const requestConfig = this._prepareRequestConfig(createCheckoutSessionConfig);\n\n this._getAmazonPayV2Button().onClick(() => {\n this._getAmazonPayV2Button().initCheckout(requestConfig);\n });\n }\n\n prepareCheckoutWithCreationRequestConfig(\n createCheckoutConfig: () => Promise<{\n createCheckoutSessionConfig: Required;\n estimatedOrderAmount: AmazonPayV2Price;\n productType: AmazonPayV2PayOptions;\n }>,\n ) {\n this._getAmazonPayV2Button().onClick(async () => {\n const config = await createCheckoutConfig();\n const requestConfig = this._prepareRequestConfig(\n config.createCheckoutSessionConfig,\n config.estimatedOrderAmount,\n config.productType,\n );\n\n this._getAmazonPayV2Button().initCheckout(requestConfig);\n });\n }\n\n async signout(): Promise {\n if (this._amazonPayV2SDK) {\n this._amazonPayV2SDK.Pay.signout();\n }\n\n return Promise.resolve();\n }\n\n renderAmazonPayButton({\n buttonColor,\n checkoutState,\n containerId,\n decoupleCheckoutInitiation = false,\n methodId,\n options,\n placement,\n }: AmazonPayV2ButtonRenderingOptions): HTMLDivElement {\n const container = document.querySelector(`#${containerId}`);\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to render the Amazon Pay button to an invalid HTML container element.',\n );\n }\n\n const { id: parentContainerId } = container.appendChild(this._getButtonParentContainer());\n\n if (options) {\n options.design = AmazonPayV2ButtonDesign.C0001;\n }\n\n const amazonPayV2ButtonOptions =\n options ??\n this._getAmazonPayV2ButtonOptions(\n checkoutState,\n methodId,\n placement,\n decoupleCheckoutInitiation,\n buttonColor,\n );\n\n this.createButton(parentContainerId, amazonPayV2ButtonOptions);\n\n return this._getButtonParentContainer();\n }\n\n setCartRequestBody(buyNowCartRequestBody: BuyNowCartRequestBody) {\n this._buyNowCartRequestBody = buyNowCartRequestBody;\n }\n\n /**\n * @internal\n */\n isPh4Enabled(\n features: CheckoutSettings['features'],\n storeCountryCode: StoreProfile['storeCountryCode'],\n ): boolean {\n const isPh4Enabled = !!features['PROJECT-3483.amazon_pay_ph4'];\n const isPh4UsOnly = !!features['INT-6885.amazon_pay_ph4_us_only'];\n\n if (isPh4Enabled && isPh4UsOnly) {\n return storeCountryCode === 'US';\n }\n\n return isPh4Enabled;\n }\n\n private _prepareRequestConfig(\n createCheckoutSessionConfig: Required,\n estimatedOrderAmount?: AmazonPayV2Price,\n productType?: AmazonPayV2PayOptions,\n ): RequestConfig {\n const { publicKeyId, ...signedPayload } = createCheckoutSessionConfig;\n\n return {\n createCheckoutSessionConfig: this._isEnvironmentSpecific(publicKeyId)\n ? signedPayload\n : createCheckoutSessionConfig,\n ...(estimatedOrderAmount && { estimatedOrderAmount }),\n ...(productType && { productType }),\n };\n }\n\n private _createAmazonPayButtonParentContainer(): HTMLDivElement {\n const uid = Math.random().toString(16).substr(-4);\n const parentContainer = document.createElement('div');\n\n parentContainer.id = `amazonpay_button_parent_container_${uid}`;\n\n return parentContainer;\n }\n\n private _getAmazonPayV2ButtonOptions(\n {\n cart: { getCart },\n checkout: { getCheckout },\n config: { getStoreConfigOrThrow },\n paymentMethods: { getPaymentMethodOrThrow },\n }: InternalCheckoutSelectors,\n methodId: string,\n placement: AmazonPayV2Placement,\n decoupleCheckoutInitiation = false,\n buttonColor = AmazonPayV2ButtonColor.Gold,\n ): AmazonPayV2ButtonParameters {\n const {\n config: { merchantId, testMode },\n initializationData: {\n checkoutLanguage,\n checkoutSessionMethod,\n createCheckoutSessionConfig,\n extractAmazonCheckoutSessionId,\n ledgerCurrency,\n publicKeyId,\n },\n } = getPaymentMethodOrThrow(methodId);\n\n if (!merchantId || !ledgerCurrency) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const buttonBaseConfig: AmazonPayV2ButtonConfig = {\n merchantId,\n ledgerCurrency,\n checkoutLanguage,\n placement,\n buttonColor,\n design: AmazonPayV2ButtonDesign.C0001,\n };\n\n if (this._buyNowCartRequestBody) {\n return {\n ...buttonBaseConfig,\n sandbox: !!testMode,\n };\n }\n\n const cart = getCart();\n\n buttonBaseConfig.productType =\n cart && getShippableItemsCount(cart) === 0\n ? AmazonPayV2PayOptions.PayOnly\n : AmazonPayV2PayOptions.PayAndShip;\n\n const {\n checkoutSettings: { features },\n storeProfile: { shopPath, storeCountryCode },\n } = getStoreConfigOrThrow();\n\n if (this.isPh4Enabled(features, storeCountryCode)) {\n const amount = getCheckout()?.outstandingBalance.toString();\n const currencyCode = cart?.currency.code;\n const buttonOptions: AmazonPayV2NewButtonParams = { ...buttonBaseConfig };\n let tmpConfig: AmazonPayV2CheckoutSessionConfig;\n\n if (this._isEnvironmentSpecific(publicKeyId)) {\n buttonOptions.publicKeyId = publicKeyId;\n tmpConfig = createCheckoutSessionConfig;\n } else {\n buttonOptions.sandbox = !!testMode;\n tmpConfig = { ...createCheckoutSessionConfig, publicKeyId };\n }\n\n if (!decoupleCheckoutInitiation) {\n buttonOptions.createCheckoutSessionConfig = tmpConfig;\n }\n\n if (amount && currencyCode) {\n buttonOptions.estimatedOrderAmount = { amount, currencyCode };\n }\n\n return buttonOptions;\n }\n\n const createCheckoutSession = {\n method: checkoutSessionMethod,\n url: features['INT-5826.amazon_relative_url']\n ? `/remote-checkout/${methodId}/payment-session`\n : `${shopPath}/remote-checkout/${methodId}/payment-session`,\n extractAmazonCheckoutSessionId,\n };\n\n return {\n ...buttonBaseConfig,\n createCheckoutSession,\n sandbox: !!testMode,\n };\n }\n\n private _isEnvironmentSpecific(publicKeyId: string): boolean {\n return /^(SANDBOX|LIVE)/.test(publicKeyId);\n }\n\n private _getAmazonPayV2SDK(): AmazonPayV2SDK {\n return this._getOrThrow(this._amazonPayV2SDK);\n }\n\n private _getButtonParentContainer(): HTMLDivElement {\n return this._getOrThrow(this._buttonParentContainer);\n }\n\n private _getAmazonPayV2Button(): AmazonPayV2Button {\n return this._getOrThrow(this._amazonPayV2Button);\n }\n\n private _getOrThrow(value?: T): T {\n return guard(\n value,\n () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n );\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when the client library of a payment method fails\n * to load, or for some reason, it is inaccessible.\n */\nexport default class PaymentMethodClientUnavailableError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n );\n\n this.name = 'PaymentMethodClientUnavailableError';\n this.type = 'payment_method_client_unavailable';\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\nimport PaymentMethod from '../../payment-method';\n\nimport { AmazonPayV2HostWindow, AmazonPayV2Regions, AmazonPayV2SDK } from './amazon-pay-v2';\n\nexport default class AmazonPayV2ScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: AmazonPayV2HostWindow = window,\n ) {}\n\n async load(method: PaymentMethod): Promise {\n const { initializationData: { region = 'us' } = {} } = method;\n\n const amazonPayV2Region = (AmazonPayV2Regions as any)[region];\n\n await this._scriptLoader.loadScript(\n `https://static-${amazonPayV2Region}.payments-amazon.com/checkout.js`,\n );\n\n if (!this._window.amazon) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.amazon;\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * Throw this error if the shopper is using a browser version that is not\n * supported by us or any third party provider we use.\n */\nexport default class UnsupportedBrowserError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unsupported browser error');\n\n this.name = 'UnsupportedBrowserError';\n this.type = 'unsupported_browser';\n }\n}\n","import { Omit } from '../../../common/types';\nimport {\n GooglePayBraintreeDataRequest,\n GooglePayBraintreePaymentDataRequestV1,\n GooglePayCreator,\n GooglePaymentData,\n TokenizePayload,\n} from '../googlepay';\nimport { PaypalAuthorizeData, PaypalButtonOptions, PaypalButtonRender, PaypalSDK } from '../paypal';\n\nimport {\n VisaCheckoutInitOptions,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from './visacheckout';\n\n/**\n *\n * Constants\n *\n */\nexport const PAYPAL_COMPONENTS = ['buttons', 'messages'];\n\n/**\n *\n * Common\n *\n */\nexport interface BraintreeModuleCreator<\n TInstance,\n TOptions = BraintreeModuleCreatorConfig,\n TError = BraintreeError,\n> {\n create(\n config: TOptions,\n callback?: (error: TError, instance: TInstance) => void,\n ): Promise;\n}\n\nexport interface BraintreeModuleCreatorConfig {\n client?: BraintreeClient;\n authorization?: string;\n}\n\nexport interface BraintreeModule {\n teardown(): Promise;\n}\n\nexport interface BraintreeSDK {\n client?: BraintreeClientCreator;\n dataCollector?: BraintreeDataCollectorCreator;\n googlePayment?: GooglePayCreator;\n hostedFields?: BraintreeHostedFieldsCreator;\n paypal?: BraintreePaypalCreator;\n paypalCheckout?: BraintreePaypalCheckoutCreator;\n threeDSecure?: BraintreeThreeDSecureCreator;\n venmo?: BraintreeVenmoCheckoutCreator;\n visaCheckout?: BraintreeVisaCheckoutCreator;\n}\n\nexport interface BraintreePaypalRequest {\n amount: string | number;\n billingAgreementDescription?: string;\n currency?: string;\n displayName?: string;\n enableShippingAddress: true;\n flow: 'checkout' | 'vault';\n intent?: 'authorize' | 'order' | 'sale';\n landingPageType?: 'login' | 'billing';\n locale?: string;\n offerCredit?: boolean;\n shippingAddressEditable?: boolean;\n shippingAddressOverride?: BraintreeShippingAddressOverride;\n useraction?: 'commit';\n}\n\nexport interface BraintreeShippingAddressOverride {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n phone?: string;\n recipientName?: string;\n}\n\nexport interface BraintreeTokenizePayload {\n nonce: string;\n type: 'PaypalAccount' | 'VenmoAccount';\n details: BraintreeDetails;\n creditFinancingOffered?: {\n totalCost: {\n value: string;\n currency: string;\n };\n term: number;\n monthlyPayment: {\n value: string;\n currency: string;\n };\n totalInsterest: {\n value: string;\n currency: string;\n };\n payerAcceptance: boolean;\n cartAmountImmutable: boolean;\n };\n}\n\nexport interface BraintreeDetails {\n username?: string;\n email?: string;\n payerId?: string;\n firstName?: string;\n lastName?: string;\n countryCode?: string;\n phone?: string;\n shippingAddress?: BraintreeShippingAddress;\n billingAddress?: BraintreeAddress;\n}\n\nexport interface BraintreeAddress {\n line1: string;\n line2: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n}\n\nexport interface BraintreeShippingAddress extends BraintreeAddress {\n recipientName: string;\n}\n\nexport interface BraintreeVerifyPayload {\n nonce: string;\n details: {\n cardType: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n}\n\nexport interface BraintreeError extends Error {\n type: 'CUSTOMER' | 'MERCHANT' | 'NETWORK' | 'INTERNAL' | 'UNKNOWN';\n code: string;\n details?: unknown;\n}\n\n/**\n *\n * Braintree Client\n *\n */\nexport type BraintreeClientCreator = BraintreeModuleCreator;\n\nexport interface BraintreeClient {\n request(payload: BraintreeRequestData): Promise;\n getVersion(): string | void;\n}\n\nexport interface BraintreeRequestData {\n data: {\n creditCard: {\n billingAddress?: {\n countryCodeAlpha2: string;\n locality: string;\n countryName: string;\n postalCode: string;\n streetAddress: string;\n };\n cardholderName: string;\n cvv?: string;\n expirationDate: string;\n number: string;\n options: {\n validate: boolean;\n };\n };\n };\n endpoint: string;\n method: string;\n}\n\nexport interface BraintreeTokenizeResponse {\n creditCards: BraintreeHostedFieldsTokenizePayload[];\n}\n\n/**\n *\n * Braintree Data Collector\n *\n */\nexport type BraintreeDataCollectorCreator = BraintreeModuleCreator<\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig\n>;\n\nexport interface BraintreeDataCollectorCreatorConfig extends BraintreeModuleCreatorConfig {\n kount?: boolean;\n paypal?: boolean;\n}\n\nexport interface BraintreeDataCollector extends BraintreeModule {\n deviceData?: string;\n}\n\n/**\n *\n * Braintree Google Pay\n *\n */\nexport interface BraintreeGooglePayThreeDSecure {\n verifyCard(options: BraintreeGooglePayThreeDSecureOptions): Promise;\n}\n\nexport interface BraintreeGooglePayThreeDSecureOptions {\n nonce: string;\n amount: number;\n showLoader?: boolean;\n onLookupComplete(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\nexport interface GooglePayBraintreeSDK extends BraintreeModule {\n createPaymentDataRequest(\n request?: GooglePayBraintreeDataRequest,\n ): GooglePayBraintreePaymentDataRequestV1;\n parseResponse(paymentData: GooglePaymentData): Promise;\n}\n\n/**\n *\n * Braintree Hosted Fields\n *\n */\nexport type BraintreeHostedFieldsCreator = BraintreeModuleCreator<\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig\n>;\n\nexport interface BraintreeHostedFields {\n teardown(): Promise;\n tokenize(\n options?: BraintreeHostedFieldsTokenizeOptions,\n ): Promise;\n on(eventName: string, callback: (event: BraintreeHostedFieldsState) => void): void;\n}\n\nexport interface BraintreeHostedFieldsCreatorConfig extends BraintreeModuleCreatorConfig {\n fields: {\n number?: BraintreeHostedFieldOption;\n expirationDate?: BraintreeHostedFieldOption;\n expirationMonth?: BraintreeHostedFieldOption;\n expirationYear?: BraintreeHostedFieldOption;\n cvv?: BraintreeHostedFieldOption;\n postalCode?: BraintreeHostedFieldOption;\n };\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n}\n\nexport interface BraintreeHostedFieldOption {\n container: string | HTMLElement;\n placeholder?: string;\n type?: string;\n formatInput?: boolean;\n maskInput?: boolean | { character?: string; showLastFour?: string };\n select?: boolean | { options?: string[] };\n maxCardLength?: number;\n maxlength?: number;\n minlength?: number;\n prefill?: string;\n rejectUnsupportedCards?: boolean;\n supportedCardBrands?: { [key: string]: boolean };\n internalLabel?: string;\n}\n\nexport interface BraintreeHostedFieldsState {\n cards: BraintreeHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: BraintreeHostedFieldsFieldData;\n expirationDate?: BraintreeHostedFieldsFieldData;\n expirationMonth?: BraintreeHostedFieldsFieldData;\n expirationYear?: BraintreeHostedFieldsFieldData;\n cvv?: BraintreeHostedFieldsFieldData;\n postalCode?: BraintreeHostedFieldsFieldData;\n };\n}\n\nexport interface BraintreeHostedFieldsCard {\n type: string;\n niceType: string;\n code: { name: string; size: number };\n}\n\nexport interface BraintreeFormFieldState {\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\nexport interface BraintreeHostedFieldsFieldData extends BraintreeFormFieldState {\n container: HTMLElement;\n}\n\nexport type BraintreeFormErrorData = Omit;\n\nexport type BraintreeFormErrorDataKeys =\n | 'number'\n | 'expirationDate'\n | 'expirationMonth'\n | 'expirationYear'\n | 'cvv'\n | 'postalCode';\n\nexport type BraintreeFormErrorsData = Partial<\n Record\n>;\n\nexport interface BraintreeHostedFieldsTokenizeOptions {\n vault?: boolean;\n fieldsToTokenize?: string[];\n cardholderName?: string;\n billingAddress?: BraintreeBillingAddressRequestData;\n}\n\nexport interface BraintreeHostedFieldsTokenizePayload {\n nonce: string;\n details: {\n bin: string;\n cardType: string;\n expirationMonth: string;\n expirationYear: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n type: string;\n binData: {\n commercial: string;\n countryOfIssuance: string;\n debit: string;\n durbinRegulated: string;\n healthcare: string;\n issuingBank: string;\n payroll: string;\n prepaid: string;\n productId: string;\n };\n}\n\nexport interface TokenizationPayload {\n nonce: string;\n bin: string;\n}\n\nexport interface BraintreeBillingAddressRequestData {\n postalCode?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress?: string;\n extendedAddress?: string;\n locality?: string;\n region?: string;\n countryCodeNumeric?: string;\n countryCodeAlpha2?: string;\n countryCodeAlpha3?: string;\n countryName?: string;\n}\n\nexport interface BraintreeHostedFormError extends BraintreeError {\n details?: {\n invalidFieldKeys?: string[];\n };\n}\n\n/**\n *\n * Braintree 3D Secure\n *\n */\nexport type BraintreeThreeDSecureCreator = BraintreeModuleCreator<\n BraintreeThreeDSecure,\n BraintreeThreeDSecureCreatorConfig\n>;\n\nexport interface BraintreeThreeDSecure extends BraintreeModule {\n verifyCard(options: BraintreeThreeDSecureOptions): Promise;\n cancelVerifyCard(): Promise;\n}\n\nexport interface BraintreeThreeDSecureCreatorConfig extends BraintreeModuleCreatorConfig {\n version?: number;\n}\n\nexport interface BraintreeThreeDSecureOptions {\n nonce: string;\n amount: number;\n bin?: string;\n challengeRequested: boolean;\n showLoader?: boolean;\n addFrame(error: Error | undefined, iframe: HTMLIFrameElement): void;\n removeFrame(): void;\n onLookupComplete(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\ninterface BraintreeThreeDSecureVerificationData {\n lookup: {\n threeDSecureVersion: string;\n };\n paymentMethod: BraintreeVerifyPayload;\n requiresUserAuthentication: boolean;\n threeDSecureInfo: {\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n };\n}\n\n/**\n *\n * Braintree PayPal\n *\n */\nexport type BraintreePaypalCreator = BraintreeModuleCreator;\n\nexport interface BraintreePaypal {\n closeWindow(): void;\n focusWindow(): void;\n tokenize(options: BraintreePaypalRequest): Promise;\n Buttons?(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\n/**\n *\n * Braintree PayPal Checkout\n *\n */\nexport type BraintreePaypalCheckoutCreator = BraintreeModuleCreator;\n\nexport interface BraintreePaypalCheckout {\n loadPayPalSDK(\n config: BraintreePaypalSdkCreatorConfig,\n callback: (instance: BraintreePaypalCheckout) => void,\n ): void;\n createPayment(options: BraintreePaypalRequest): Promise;\n teardown(): Promise;\n tokenizePayment(options: PaypalAuthorizeData): Promise;\n}\n\nexport interface BraintreePaypalSdkCreatorConfig {\n components?: string;\n currency?: string;\n intent?: string;\n isCreditEnabled?: boolean;\n}\n\n/**\n *\n * Braintree Venmo\n *\n */\nexport type BraintreeVenmoCheckoutCreator = BraintreeModuleCreator<\n BraintreeVenmoCheckout,\n BraintreeVenmoCreatorConfig\n>;\n\nexport interface BraintreeVenmoCheckout extends BraintreeModule {\n tokenize(callback: (error: BraintreeError, payload: BraintreeTokenizePayload) => void): void;\n isBrowserSupported(): boolean;\n}\n\nexport interface BraintreeVenmoCreatorConfig extends BraintreeModuleCreatorConfig {\n allowDesktop: boolean;\n paymentMethodUsage: string;\n}\n\n/**\n *\n * Braintree Visa Checkout\n *\n */\nexport type BraintreeVisaCheckoutCreator = BraintreeModuleCreator;\n\nexport interface BraintreeVisaCheckout extends BraintreeModule {\n tokenize(payment: VisaCheckoutPaymentSuccessPayload): Promise;\n createInitOptions(options: Partial): VisaCheckoutInitOptions;\n}\n\n/**\n *\n * Other\n *\n */\nexport interface BraintreeHostWindow extends Window {\n braintree?: BraintreeSDK;\n paypal?: PaypalSDK;\n}\n","import {\n NotInitializedError,\n NotInitializedErrorType,\n UnsupportedBrowserError,\n} from '../../../common/error/errors';\nimport { PaypalHostWindow } from '../paypal';\n\nimport {\n BraintreeClient,\n BraintreeDataCollector,\n BraintreeError,\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig,\n BraintreeModule,\n BraintreePaypal,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeThreeDSecure,\n BraintreeVenmoCheckout,\n BraintreeVisaCheckout,\n GooglePayBraintreeSDK,\n PAYPAL_COMPONENTS,\n} from './braintree';\nimport BraintreeScriptLoader from './braintree-script-loader';\n\nexport default class BraintreeSDKCreator {\n private _client?: Promise;\n private _3ds?: Promise;\n private _paypal?: Promise;\n private _paypalCheckout?: Promise;\n private _clientToken?: string;\n private _visaCheckout?: Promise;\n private _venmoCheckout?: Promise;\n private _dataCollectors: {\n default?: Promise;\n paypal?: Promise;\n } = {};\n private _googlePay?: Promise;\n private _window: PaypalHostWindow;\n\n constructor(private _braintreeScriptLoader: BraintreeScriptLoader) {\n this._window = window;\n }\n\n initialize(clientToken: string) {\n this._clientToken = clientToken;\n }\n\n getClient(): Promise {\n if (!this._clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n if (!this._client) {\n this._client = this._braintreeScriptLoader\n .loadClient()\n .then((client) => client.create({ authorization: this._clientToken }));\n }\n\n return this._client;\n }\n\n getPaypal(): Promise {\n if (!this._paypal) {\n this._paypal = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadPaypal(),\n ]).then(([client, paypal]) => paypal.create({ client }));\n }\n\n return this._paypal;\n }\n\n async getPaypalCheckout(\n config: Partial,\n onSuccess: (instance: BraintreePaypalCheckout) => void,\n onError: (error: BraintreeError) => void,\n ): Promise {\n const client = await this.getClient();\n const paypalCheckout = await this._braintreeScriptLoader.loadPaypalCheckout();\n\n const paypalCheckoutConfig = { client };\n const paypalCheckoutCallback = (\n error: BraintreeError,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n if (error) {\n return onError(error);\n }\n\n const paypalSdkLoadCallback = () => onSuccess(braintreePaypalCheckout);\n const paypalSdkLoadConfig = {\n currency: config.currency,\n ...(config.isCreditEnabled && { 'enable-funding': 'paylater' }),\n components: PAYPAL_COMPONENTS.toString(),\n intent: config.intent,\n };\n\n if (!this._window.paypal) {\n braintreePaypalCheckout.loadPayPalSDK(paypalSdkLoadConfig, paypalSdkLoadCallback);\n } else {\n onSuccess(braintreePaypalCheckout);\n }\n };\n\n this._paypalCheckout = paypalCheckout.create(paypalCheckoutConfig, paypalCheckoutCallback);\n\n return this._paypalCheckout;\n }\n\n async getVenmoCheckout(\n onSuccess: (braintreeVenmoCheckout: BraintreeVenmoCheckout) => void,\n onError: (error: BraintreeError | UnsupportedBrowserError) => void,\n ): Promise {\n if (!this._venmoCheckout) {\n const client = await this.getClient();\n\n const venmoCheckout = await this._braintreeScriptLoader.loadVenmoCheckout();\n\n const venmoCheckoutConfig = {\n client,\n allowDesktop: true,\n paymentMethodUsage: 'multi_use',\n };\n\n const venmoCheckoutCallback = (\n error: BraintreeError,\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n ): void => {\n if (error) {\n return onError(error);\n }\n\n if (!braintreeVenmoCheckout.isBrowserSupported()) {\n return onError(new UnsupportedBrowserError());\n }\n\n onSuccess(braintreeVenmoCheckout);\n };\n\n this._venmoCheckout = venmoCheckout.create(venmoCheckoutConfig, venmoCheckoutCallback);\n }\n\n return this._venmoCheckout;\n }\n\n get3DS(): Promise {\n if (!this._3ds) {\n this._3ds = Promise.all([this.getClient(), this._braintreeScriptLoader.load3DS()]).then(\n ([client, threeDSecure]) => threeDSecure.create({ client, version: 2 }),\n );\n }\n\n return this._3ds;\n }\n\n getDataCollector(options?: { paypal: boolean }): Promise {\n const cacheKey = options && options.paypal ? 'paypal' : 'default';\n let cached = this._dataCollectors[cacheKey];\n\n if (!cached) {\n cached = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadDataCollector(),\n ])\n .then(([client, dataCollector]) =>\n dataCollector.create({ client, kount: true, ...options }),\n )\n .catch((error) => {\n if (error && error.code === 'DATA_COLLECTOR_KOUNT_NOT_ENABLED') {\n return { deviceData: undefined, teardown: () => Promise.resolve() };\n }\n\n throw error;\n });\n\n this._dataCollectors[cacheKey] = cached;\n }\n\n return cached;\n }\n\n getVisaCheckout(): Promise {\n if (!this._visaCheckout) {\n this._visaCheckout = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadVisaCheckout(),\n ]).then(([client, visaCheckout]) => visaCheckout.create({ client }));\n }\n\n return this._visaCheckout;\n }\n\n getGooglePaymentComponent(): Promise {\n if (!this._googlePay) {\n this._googlePay = Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadGooglePayment(),\n ]).then(([client, googlePay]) => googlePay.create({ client }));\n }\n\n return this._googlePay;\n }\n\n async createHostedFields(\n options: Pick,\n ): Promise {\n const [client, hostedFields] = await Promise.all([\n this.getClient(),\n this._braintreeScriptLoader.loadHostedFields(),\n ]);\n\n return hostedFields.create({ ...options, client });\n }\n\n teardown(): Promise {\n return Promise.all([\n this._teardown(this._3ds),\n this._teardown(this._dataCollectors.default),\n this._teardown(this._dataCollectors.paypal),\n this._teardown(this._googlePay),\n this._teardown(this._paypalCheckout),\n this._teardown(this._venmoCheckout),\n this._teardown(this._visaCheckout),\n ]).then(() => {\n this._3ds = undefined;\n this._dataCollectors = {};\n this._googlePay = undefined;\n this._paypalCheckout = undefined;\n this._venmoCheckout = undefined;\n this._visaCheckout = undefined;\n });\n }\n\n private _teardown(module?: Promise) {\n return module\n ? module\n .then((mod) => mod.teardown())\n .catch((error) => {\n if (error.code !== 'METHOD_CALLED_AFTER_TEARDOWN') {\n throw error;\n }\n })\n : Promise.resolve();\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\nimport { GooglePayCreator } from '../googlepay';\n\nimport {\n BraintreeClientCreator,\n BraintreeDataCollectorCreator,\n BraintreeHostedFieldsCreator,\n BraintreeHostWindow,\n BraintreePaypalCheckoutCreator,\n BraintreePaypalCreator,\n BraintreeThreeDSecureCreator,\n BraintreeVenmoCheckoutCreator,\n BraintreeVisaCheckoutCreator,\n} from './braintree';\n\nconst version = '3.95.0';\n\nexport default class BraintreeScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: BraintreeHostWindow = window,\n ) {}\n\n loadClient(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/client.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.client) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.client;\n });\n }\n\n load3DS(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/three-d-secure.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.threeDSecure) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.threeDSecure;\n });\n }\n\n loadDataCollector(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/data-collector.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.dataCollector) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.dataCollector;\n });\n }\n\n loadPaypal(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/paypal.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.paypal;\n });\n }\n\n loadPaypalCheckout(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/paypal-checkout.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.paypalCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.paypalCheckout;\n });\n }\n\n loadVisaCheckout(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/visa-checkout.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.visaCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.visaCheckout;\n });\n }\n\n loadVenmoCheckout(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/venmo.min.js`)\n .then(() => {\n if (!this._window.braintree?.venmo) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.venmo;\n });\n }\n\n loadGooglePayment(): Promise {\n return this._scriptLoader\n .loadScript(`//js.braintreegateway.com/web/${version}/js/google-payment.min.js`)\n .then(() => {\n if (!this._window.braintree || !this._window.braintree.googlePayment) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.googlePayment;\n });\n }\n\n async loadHostedFields(): Promise {\n await this._scriptLoader.loadScript(\n `//js.braintreegateway.com/web/${version}/js/hosted-fields.min.js`,\n );\n\n if (!this._window.braintree || !this._window.braintree.hostedFields) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.braintree.hostedFields;\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we are unable to synchronize the checkout details of a\n * shopper with a hosted / remote checkout provider (i.e.: Amazon).\n */\nexport default class RemoteCheckoutSynchronizationError extends StandardError {\n constructor(public error?: Error) {\n super(\n 'Unable to synchronize your checkout details with a third party provider. Please try again later.',\n );\n\n this.name = 'RemoteCheckoutSynchronizationError';\n this.type = 'remote_checkout_synchronization';\n }\n}\n","import { PaymentInitializeOptions } from '../..';\nimport { Checkout, InternalCheckoutSelectors } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\nimport {\n BraintreeModuleCreator,\n BraintreeVerifyPayload,\n GooglePayBraintreeSDK,\n} from '../braintree';\n\nexport enum CallbackTriggerType {\n INITIALIZE = 'INITIALIZE',\n SHIPPING_OPTION = 'SHIPPING_OPTION',\n SHIPPING_ADDRESS = 'SHIPPING_ADDRESS',\n OFFER = 'OFFER',\n}\n\nexport enum TotalPriceStatusType {\n ESTIMATED = 'ESTIMATED',\n FINAL = 'FINAL',\n NOT_CURRENTLY_KNOWN = 'NOT_CURRENTLY_KNOWN',\n}\n\nexport enum CallbackIntentsType {\n OFFER = 'OFFER',\n PAYMENT_AUTHORIZATION = 'PAYMENT_AUTHORIZATION',\n SHIPPING_ADDRESS = 'SHIPPING_ADDRESS',\n SHIPPING_OPTION = 'SHIPPING_OPTION',\n}\n\nexport type EnvironmentType = 'PRODUCTION' | 'TEST';\nexport type TokenizeType = 'AndroidPayCard' | 'CreditCard' | 'CARD';\n\nexport interface GooglePayInitializer {\n initialize(\n checkout: Checkout | void,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n publishableKey?: string,\n ): Promise;\n teardown(): Promise;\n parseResponse(paymentData: GooglePaymentData): Promise;\n}\n\nexport interface GooglePayProviderProcessor {\n initialize(options: PaymentInitializeOptions): Promise;\n processAdditionalAction(error: unknown): Promise;\n}\n\nexport type GooglePayCreator = BraintreeModuleCreator;\n\nexport interface GooglePayPaymentOptions {\n environment: EnvironmentType;\n paymentDataCallbacks?: {\n onPaymentDataChanged(\n intermediatePaymentData: IntermediatePaymentData,\n ): Promise;\n };\n}\n\nexport type GooglePayVerifyPayload = BraintreeVerifyPayload | undefined;\n\nexport interface GooglePayIsReadyToPayResponse {\n result: boolean;\n paymentMethodPresend?: boolean;\n}\n\nexport interface GooglePaySDK {\n payments: {\n api: {\n PaymentsClient: new (options: GooglePayPaymentOptions) => GooglePayClient;\n };\n };\n}\n\nexport interface GooglePayClient {\n isReadyToPay(options: object): Promise;\n loadPaymentData(paymentDataRequest: GooglePayPaymentDataRequestV2): Promise;\n createButton(options: { [key: string]: string | object }): HTMLElement;\n}\n\nexport interface GooglePayHostWindow extends Window {\n google?: GooglePaySDK;\n}\n\nexport interface TokenizePayload {\n nonce: string;\n tokenFormat?: string;\n details: {\n cardType: string;\n lastFour: string;\n lastTwo?: string;\n };\n description?: string;\n type: TokenizeType;\n binData?: {\n commercial: string;\n countryOfIssuance: string;\n debit: string;\n durbinRegulated: string;\n healthcare: string;\n issuingBank: string;\n payroll: string;\n prepaid: string;\n productId: string;\n };\n}\n\nexport interface GooglePaymentData {\n apiVersion: number;\n apiVersionMinor: number;\n paymentMethodData: {\n description: string;\n info: {\n cardDetails: string;\n cardNetwork: string;\n billingAddress: GooglePayAddress;\n };\n tokenizationData: {\n token: string;\n type: string;\n };\n type: TokenizeType;\n };\n shippingAddress: GooglePayAddress;\n email: string;\n}\n\nexport interface GooglePayAddress {\n address1: string;\n address2: string;\n address3: string;\n administrativeArea: string;\n companyName: string;\n countryCode: string;\n locality: string;\n name: string;\n postalCode: string;\n sortingCode: string;\n phoneNumber: string;\n}\n\nexport interface GooglePaymentsError {\n statusCode: string;\n statusMessage?: string;\n}\n\nexport interface PaymentMethodData {\n methodId: string;\n paymentData: {\n method: string;\n nonce: string;\n cardInformation: {\n type: string;\n number: string;\n };\n };\n}\n\nexport enum ButtonType {\n Long = 'long',\n Short = 'short',\n}\nexport enum ButtonColor {\n Default = 'default',\n Black = 'black',\n White = 'white',\n}\n\nexport interface TokenizationSpecification {\n type: string;\n parameters: {\n gateway: string;\n gatewayMerchantId?: string;\n 'braintree:apiVersion'?: string;\n 'braintree:clientKey'?: string;\n 'braintree:merchantId'?: string;\n 'braintree:sdkVersion'?: string;\n 'braintree:authorizationFingerprint'?: string;\n 'stripe:version'?: string;\n 'stripe:publishableKey'?: string;\n };\n}\n\nexport enum BillingAddressFormat {\n /*\n * Name, country code, and postal code (default).\n */\n Min = 'MIN',\n /*\n * Name, street address, locality, region, country code, and postal code.\n */\n Full = 'FULL',\n}\n\nexport interface GooglePayPaymentDataRequestV2 {\n apiVersion: number;\n apiVersionMinor: number;\n merchantInfo: {\n authJwt?: string;\n merchantId?: string;\n merchantName?: string;\n };\n allowedPaymentMethods: [\n {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n allowPrepaidCards?: boolean;\n billingAddressRequired?: boolean;\n billingAddressParameters?: {\n format?: BillingAddressFormat;\n phoneNumberRequired?: boolean;\n };\n };\n tokenizationSpecification?: TokenizationSpecification;\n },\n ];\n transactionInfo: {\n currencyCode: string;\n countryCode?: string;\n totalPriceStatus?: TotalPriceStatusType;\n totalPrice?: string;\n checkoutOption?: string;\n };\n callbackIntents?: CallbackIntentsType[];\n emailRequired?: boolean;\n shippingAddressRequired?: boolean;\n shippingAddressParameters?: {\n allowedCountryCodes?: string[];\n phoneNumberRequired?: boolean;\n };\n}\n\nexport interface UpdatePaymentDataRequestPayload {\n apiVersion?: number;\n apiVersionMinor?: number;\n merchantInfo?: {\n authJwt?: string;\n merchantId?: string;\n merchantName?: string;\n };\n allowedPaymentMethods?: [\n {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n allowPrepaidCards?: boolean;\n billingAddressRequired?: boolean;\n billingAddressParameters?: {\n format?: BillingAddressFormat;\n phoneNumberRequired?: boolean;\n };\n };\n tokenizationSpecification?: TokenizationSpecification;\n },\n ];\n transactionInfo?: {\n currencyCode: string;\n countryCode?: string;\n totalPriceStatus?: TotalPriceStatusType;\n totalPrice?: string;\n checkoutOption?: string;\n };\n callbackIntents?: CallbackIntentsType[];\n emailRequired?: boolean;\n shippingAddressRequired?: boolean;\n shippingAddressParameters?: {\n allowedCountryCodes?: string[];\n phoneNumberRequired?: boolean;\n };\n}\n\nexport interface NewTransactionInfo {\n newTransactionInfo: {\n currencyCode: string;\n totalPrice: string;\n totalPriceStatus: TotalPriceStatusType;\n };\n}\n\nexport interface IntermediatePaymentData {\n callbackTrigger: CallbackTriggerType;\n}\n\nexport type GooglePayTransactionInfo = Pick;\n","export function getFirstAndLastName(fullName: string): [string, string] {\n const nameParts = fullName.split(' ');\n\n if (nameParts.length === 1) {\n return [fullName, ''];\n }\n\n const firstName = nameParts.slice(0, -1).join(' ');\n const lastName = nameParts[nameParts.length - 1];\n\n return [firstName, lastName];\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { PaymentMethodInvalidError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AddressRequestBody } from '../../../address';\nimport { BillingAddressActionCreator, BillingAddressUpdateRequestBody } from '../../../billing';\nimport { Checkout, CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '../../../common/error/errors';\nimport { SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { RemoteCheckoutSynchronizationError } from '../../../remote-checkout/errors';\nimport { ConsignmentActionCreator } from '../../../shipping';\nimport PaymentMethodActionCreator from '../../payment-method-action-creator';\n\nimport {\n ButtonColor,\n ButtonType,\n EnvironmentType,\n GooglePayAddress,\n GooglePayClient,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n GooglePayPaymentOptions,\n GooglePaySDK,\n TokenizePayload,\n UpdatePaymentDataRequestPayload,\n} from './googlepay';\nimport { getFirstAndLastName } from './googlepay-get-first-and-last-name';\nimport GooglePayScriptLoader from './googlepay-script-loader';\n\nexport default class GooglePayPaymentProcessor {\n private _googlePayClient?: GooglePayClient;\n private _methodId?: string;\n private _paymentDataRequest?: GooglePayPaymentDataRequestV2;\n private _isBuyNowFlow = false;\n\n constructor(\n private _store: CheckoutStore,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n private _googlePayScriptLoader: GooglePayScriptLoader,\n private _googlePayInitializer: GooglePayInitializer,\n private _billingAddressActionCreator: BillingAddressActionCreator,\n private _consignmentActionCreator: ConsignmentActionCreator,\n private _requestSender: RequestSender,\n ) {}\n\n initialize(methodId: string, googlePayClientOptions?: GooglePayPaymentOptions): Promise {\n this._methodId = methodId;\n\n return this._configureWallet(googlePayClientOptions);\n }\n\n deinitialize(): Promise {\n return this._googlePayInitializer.teardown();\n }\n\n createButton(\n onClick: (event: Event) => Promise,\n buttonType: ButtonType = ButtonType.Short,\n buttonColor: ButtonColor = ButtonColor.Default,\n ): HTMLElement {\n if (!this._googlePayClient) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._googlePayClient.createButton({\n buttonColor,\n buttonType,\n onClick,\n });\n }\n\n updatePaymentDataRequest(paymentDataRequest: UpdatePaymentDataRequestPayload) {\n const existingPaymentDataRequest = this._getPaymentDataRequest();\n\n this._paymentDataRequest = {\n ...existingPaymentDataRequest,\n ...paymentDataRequest,\n merchantInfo: {\n ...(existingPaymentDataRequest.merchantInfo ?? {}),\n ...(paymentDataRequest.merchantInfo ?? {}),\n },\n transactionInfo: {\n ...(existingPaymentDataRequest.transactionInfo ?? {}),\n ...(paymentDataRequest.transactionInfo ?? {}),\n },\n shippingAddressParameters: {\n ...(existingPaymentDataRequest.shippingAddressParameters ?? {}),\n ...(paymentDataRequest.shippingAddressParameters ?? {}),\n },\n };\n }\n\n displayWallet(): Promise {\n if (!this._googlePayClient) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._googlePayClient.loadPaymentData(this._getPaymentDataRequest());\n }\n\n handleSuccess(paymentData: GooglePaymentData): Promise {\n return this._googlePayInitializer\n .parseResponse(paymentData)\n .then((tokenizePayload) => this._postForm(tokenizePayload))\n .then(() => this._updateBillingAddress(paymentData));\n }\n\n updateShippingAddress(shippingAddress: GooglePayAddress): Promise {\n return this._store.dispatch(\n this._consignmentActionCreator.updateAddress(\n this._mapGooglePayAddressToShippingAddress(shippingAddress),\n ),\n );\n }\n\n updateBuyNowFlowFlag(isBuyNowFlow: boolean): void {\n this._isBuyNowFlow = isBuyNowFlow;\n }\n\n private _configureWallet(\n googlePayClientOptions?: Partial,\n ): Promise {\n const features = this._store.getState().config.getStoreConfig()?.checkoutSettings.features;\n const options =\n features && features['INT-5826.google_hostname_alias']\n ? { params: { origin: window.location.hostname } }\n : undefined;\n const methodId = this._getMethodId();\n\n return this._store\n .dispatch(this._paymentMethodActionCreator.loadPaymentMethod(methodId, options))\n .then((state) => {\n const checkout = this._getCheckout(state);\n const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n const hasShippingAddress = !!state.shippingAddress.getShippingAddress();\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { testMode } = paymentMethod.config;\n\n return Promise.all([\n this._googlePayScriptLoader.load(),\n this._googlePayInitializer.initialize(\n checkout,\n paymentMethod,\n hasShippingAddress,\n ),\n ]).then(([googlePay, paymentDataRequest]) => {\n this._googlePayClient = this._getGooglePayClient(\n googlePay,\n testMode,\n googlePayClientOptions,\n );\n this._paymentDataRequest = paymentDataRequest;\n\n return this._googlePayClient\n .isReadyToPay({\n allowedPaymentMethods: [\n {\n type: paymentDataRequest.allowedPaymentMethods[0].type,\n parameters: {\n allowedAuthMethods:\n paymentDataRequest.allowedPaymentMethods[0].parameters\n .allowedAuthMethods,\n allowedCardNetworks:\n paymentDataRequest.allowedPaymentMethods[0].parameters\n .allowedCardNetworks,\n },\n },\n ],\n apiVersion: paymentDataRequest.apiVersion,\n apiVersionMinor: paymentDataRequest.apiVersionMinor,\n })\n .then((response) => {\n if (response.result) {\n return;\n }\n\n throw new PaymentMethodInvalidError();\n });\n });\n });\n }\n\n private _getCardInformation(cardInformation: { cardType: string; lastFour: string }) {\n return {\n type: cardInformation.cardType,\n number: cardInformation.lastFour,\n };\n }\n\n private _getCheckout(state: InternalCheckoutSelectors): Checkout | void {\n if (this._isBuyNowFlow) {\n return;\n }\n\n const checkout = state.checkout.getCheckout();\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n return checkout;\n }\n\n private _getPaymentDataRequest(): GooglePayPaymentDataRequestV2 {\n if (!this._paymentDataRequest) {\n throw new RemoteCheckoutSynchronizationError();\n }\n\n return this._paymentDataRequest;\n }\n\n private _getGooglePayClient(\n google: GooglePaySDK,\n testMode?: boolean,\n googlePayClientOptions?: Partial,\n ): GooglePayClient {\n if (testMode === undefined) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const environment: EnvironmentType = testMode ? 'TEST' : 'PRODUCTION';\n\n return new google.payments.api.PaymentsClient({\n environment,\n ...(googlePayClientOptions ?? {}),\n });\n }\n\n private _getMethodId(): string {\n if (!this._methodId) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._methodId;\n }\n\n private _mapGooglePayAddressToBillingAddress(\n paymentData: GooglePaymentData,\n id: string,\n customerEmail?: string,\n ): BillingAddressUpdateRequestBody {\n const fullName = paymentData.paymentMethodData.info.billingAddress.name;\n const [firstName, lastName] = getFirstAndLastName(fullName);\n const address1 = paymentData.paymentMethodData.info.billingAddress.address1;\n const city = paymentData.paymentMethodData.info.billingAddress.locality;\n const postalCode = paymentData.paymentMethodData.info.billingAddress.postalCode;\n const countryCode = paymentData.paymentMethodData.info.billingAddress.countryCode;\n\n if (!firstName || !address1 || !city || !postalCode || !countryCode) {\n throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n }\n\n return {\n id,\n firstName,\n lastName,\n company: paymentData.paymentMethodData.info.billingAddress.companyName,\n address1,\n address2:\n paymentData.paymentMethodData.info.billingAddress.address2 +\n paymentData.paymentMethodData.info.billingAddress.address3,\n city,\n stateOrProvince: paymentData.paymentMethodData.info.billingAddress.administrativeArea,\n stateOrProvinceCode:\n paymentData.paymentMethodData.info.billingAddress.administrativeArea,\n postalCode,\n countryCode,\n phone: paymentData.paymentMethodData.info.billingAddress.phoneNumber,\n customFields: [],\n email: customerEmail || paymentData.email,\n };\n }\n\n private _mapGooglePayAddressToShippingAddress(address: GooglePayAddress): AddressRequestBody {\n const [firstName, lastName] = getFirstAndLastName(address.name);\n\n return {\n firstName,\n lastName,\n company: address.companyName,\n address1: address.address1,\n address2: address.address2 + address.address3,\n city: address.locality,\n stateOrProvince: address.administrativeArea,\n stateOrProvinceCode: address.administrativeArea,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phoneNumber,\n customFields: [],\n };\n }\n\n private _postForm(postPaymentData: TokenizePayload): Promise> {\n const cardInformation = postPaymentData.details;\n const buyNowCartId = this._isBuyNowFlow\n ? this._store.getState().cart.getCartOrThrow().id\n : undefined;\n\n return this._requestSender.post('/checkout.php', {\n headers: {\n Accept: 'text/html',\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...SDK_VERSION_HEADERS,\n },\n body: {\n payment_type: postPaymentData.type,\n nonce: postPaymentData.nonce,\n tokenFormat: postPaymentData.tokenFormat,\n provider: this._getMethodId(),\n action: 'set_external_checkout',\n card_information: this._getCardInformation(cardInformation),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n },\n });\n }\n\n private _updateBillingAddress(\n paymentData: GooglePaymentData,\n ): Promise {\n const remoteBillingAddress = this._store.getState().billingAddress.getBillingAddress();\n\n if (!remoteBillingAddress) {\n throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n }\n\n const googlePayAddressMapped = this._mapGooglePayAddressToBillingAddress(\n paymentData,\n remoteBillingAddress.id,\n remoteBillingAddress.email,\n );\n\n return this._store.dispatch(\n this._billingAddressActionCreator.updateAddress(googlePayAddressMapped),\n );\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { GooglePayHostWindow, GooglePaySDK } from './googlepay';\n\nexport default class GooglePayScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n private _window: GooglePayHostWindow = window,\n ) {}\n\n load(): Promise {\n return this._scriptLoader.loadScript('https://pay.google.com/gp/p/js/pay.js').then(() => {\n if (!this._window.google) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.google;\n });\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../../../billing';\nimport { CheckoutRequestSender, CheckoutStore } from '../../../checkout';\nimport { ConsignmentActionCreator, ConsignmentRequestSender } from '../../../shipping';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../../../subscription';\nimport PaymentMethodActionCreator from '../../payment-method-action-creator';\nimport PaymentMethodRequestSender from '../../payment-method-request-sender';\n\nimport { GooglePayInitializer } from './googlepay';\nimport GooglePayPaymentProcessor from './googlepay-payment-processor';\nimport GooglePayScriptLoader from './googlepay-script-loader';\n\nexport default function createGooglePayPaymentProcessor(\n store: CheckoutStore,\n initializer: GooglePayInitializer,\n): GooglePayPaymentProcessor {\n const requestSender = createRequestSender();\n const scriptLoader = getScriptLoader();\n\n return new GooglePayPaymentProcessor(\n store,\n new PaymentMethodActionCreator(new PaymentMethodRequestSender(requestSender)),\n new GooglePayScriptLoader(scriptLoader),\n initializer,\n new BillingAddressActionCreator(\n new BillingAddressRequestSender(requestSender),\n new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n ),\n new ConsignmentActionCreator(\n new ConsignmentRequestSender(requestSender),\n new CheckoutRequestSender(requestSender),\n ),\n requestSender,\n );\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayAdyenV2Initializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n type,\n nonce: token,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'adyen',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n countryCode,\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayAdyenV3Initializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n type,\n nonce: token,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'adyen',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n countryCode,\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { PaymentMethod } from '../..';\nimport { Checkout } from '../../../checkout';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizationSpecification,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nconst baseRequest = {\n apiVersion: 2,\n apiVersionMinor: 0,\n};\n\nexport default class GooglePayAuthorizeNetInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n type,\n nonce: btoa(token),\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n paymentGatewayId: gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n const paymentGatewaySpecification = this._getPaymentGatewaySpecification(gatewayMerchantId);\n const cardPaymentMethod = this._getCardPaymentMethod(\n paymentGatewaySpecification,\n supportedCards,\n );\n\n return {\n ...baseRequest,\n allowedPaymentMethods: [cardPaymentMethod],\n transactionInfo: {\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n currencyCode,\n countryCode,\n },\n merchantInfo: {\n merchantName,\n merchantId,\n authJwt,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n\n private _getPaymentGatewaySpecification(gatewayMerchantId: string) {\n return {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'authorizenet',\n gatewayMerchantId,\n },\n };\n }\n\n private _getCardPaymentMethod(\n tokenizationSpecification: TokenizationSpecification,\n supportedCards: string[],\n ) {\n return {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification,\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayBNZInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'cybersource',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../../../common/error/errors';\nimport PaymentMethod from '../../payment-method';\nimport { BraintreeSDKCreator, GooglePayBraintreeSDK } from '../braintree';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\nimport {\n GooglePayBraintreeDataRequest,\n GooglePayBraintreePaymentDataRequestV1,\n} from './googlepay-braintree';\n\nexport default class GooglePayBraintreeInitializer implements GooglePayInitializer {\n private _googlePaymentInstance!: GooglePayBraintreeSDK;\n\n constructor(private _braintreeSDKCreator: BraintreeSDKCreator) {}\n\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n\n return this._braintreeSDKCreator\n .getGooglePaymentComponent()\n .then((googleBraintreePaymentInstance) => {\n this._googlePaymentInstance = googleBraintreePaymentInstance;\n\n return this._createGooglePayPayload(\n checkout,\n paymentMethod.initializationData,\n hasShippingAddress,\n );\n });\n }\n\n teardown(): Promise {\n return this._braintreeSDKCreator.teardown();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const payload = JSON.parse(paymentData.paymentMethodData.tokenizationData.token)\n .androidPayCards[0];\n\n return Promise.resolve({\n nonce: payload.nonce,\n type: payload.type,\n description: payload.description,\n details: {\n cardType: payload.details.cardType,\n lastFour: payload.details.lastFour,\n lastTwo: payload.details.lastTwo,\n },\n binData: payload.binData,\n });\n }\n\n private _createGooglePayPayload(\n checkout: Checkout | undefined,\n initializationData: any,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n if (!initializationData.platformToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const googlePayBraintreePaymentDataRequest: GooglePayBraintreeDataRequest = {\n merchantInfo: {\n authJwt: initializationData.platformToken,\n merchantName: initializationData.googleMerchantName,\n merchantId: initializationData.googleMerchantId,\n },\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n cardRequirements: {\n billingAddressRequired: true,\n billingAddressFormat: 'FULL',\n },\n shippingAddressRequired: !hasShippingAddress,\n emailRequired: true,\n phoneNumberRequired: true,\n };\n\n return this._mapGooglePayBraintreeDataRequestToGooglePayDataRequestV2(\n this._googlePaymentInstance.createPaymentDataRequest(\n googlePayBraintreePaymentDataRequest,\n ),\n );\n }\n\n private _mapGooglePayBraintreeDataRequestToGooglePayDataRequestV2(\n googlePayBraintreeDataRequestV1: GooglePayBraintreePaymentDataRequestV1,\n ): GooglePayPaymentDataRequestV2 {\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt: googlePayBraintreeDataRequestV1.merchantInfo.authJwt,\n merchantId: googlePayBraintreeDataRequestV1.merchantInfo.merchantId,\n merchantName: googlePayBraintreeDataRequestV1.merchantInfo.merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks:\n googlePayBraintreeDataRequestV1.cardRequirements.allowedCardNetworks,\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'braintree',\n 'braintree:apiVersion': 'v1',\n 'braintree:authorizationFingerprint':\n googlePayBraintreeDataRequestV1.paymentMethodTokenizationParameters\n .parameters['braintree:authorizationFingerprint'],\n 'braintree:merchantId':\n googlePayBraintreeDataRequestV1.paymentMethodTokenizationParameters\n .parameters['braintree:merchantId'],\n 'braintree:sdkVersion':\n googlePayBraintreeDataRequestV1.paymentMethodTokenizationParameters\n .parameters['braintree:sdkVersion'],\n },\n },\n },\n ],\n transactionInfo: googlePayBraintreeDataRequestV1.transactionInfo,\n emailRequired: true,\n shippingAddressRequired: googlePayBraintreeDataRequestV1.shippingAddressRequired,\n shippingAddressParameters: {\n phoneNumberRequired: googlePayBraintreeDataRequestV1.phoneNumberRequired,\n },\n };\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a payment method experiences some kind of\n * failure (i.e.: its client library returns a rejected promise). And there is\n * no other error type that is more specific than this one.\n */\nexport default class PaymentMethodFailedError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method has thrown an unexpected error.',\n );\n\n this.name = 'PaymentMethodFailedError';\n this.type = 'payment_method_client_invalid';\n }\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\nimport { round } from 'lodash';\n\nimport { PaymentMethodFailedError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport { ContentType } from '../../../common/http-request';\nimport PaymentMethod from '../../payment-method';\nimport { CheckoutcomGooglePayToken, CheckoutcomToken } from '../checkoutcom';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayCheckoutcomInitializer implements GooglePayInitializer {\n private _publishableKey = '';\n private _testMode = true;\n private _errorMessage = 'Unable to parse response from GooglePay.';\n\n constructor(private _requestSender: RequestSender) {}\n\n async initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n this._publishableKey = paymentMethod.initializationData.checkoutcomkey;\n this._testMode = !!paymentMethod.config.testMode;\n\n return this._mapGooglePayCheckoutcomDataRequestToGooglePayDataRequestV2(\n checkout,\n paymentMethod.initializationData,\n hasShippingAddress,\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n async parseResponse(paymentData: GooglePaymentData): Promise {\n let token;\n\n try {\n token = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\n } catch (err) {\n throw new InvalidArgumentError(this._errorMessage);\n }\n\n if (!token.signature || !token.protocolVersion || !token.signedMessage) {\n throw new PaymentMethodFailedError(this._errorMessage);\n }\n\n const finalToken = await this._convertToken(this._testMode, this._publishableKey, token);\n\n const payload: TokenizePayload = {\n nonce: finalToken.token,\n type: 'CreditCard',\n description: paymentData.paymentMethodData.description,\n details: {\n cardType: paymentData.paymentMethodData.info.cardNetwork,\n lastFour: paymentData.paymentMethodData.info.cardDetails,\n },\n };\n\n if (finalToken.token_format) {\n payload.tokenFormat = finalToken.token_format;\n }\n\n return payload;\n }\n\n private async _convertToken(\n testMode: boolean,\n checkoutcomkey: string,\n token: CheckoutcomGooglePayToken,\n ): Promise {\n const checkoutcomToken: CheckoutcomToken = await this._requestCheckoutcomTokenize(\n testMode,\n checkoutcomkey,\n {\n type: 'googlepay',\n token_data: token,\n },\n );\n\n if (!checkoutcomToken || !checkoutcomToken.token) {\n throw new PaymentMethodFailedError('Unable to parse response from Checkout.com');\n }\n\n return checkoutcomToken;\n }\n\n private async _requestCheckoutcomTokenize(\n testMode: boolean,\n checkoutcomKey: string,\n data = {},\n ): Promise {\n const TEST_URL = 'https://api.sandbox.checkout.com/tokens';\n const LIVE_URL = 'https://api.checkout.com/tokens';\n\n const url = testMode ? TEST_URL : LIVE_URL;\n\n const response = await this._requestSender.post(url, {\n credentials: false,\n body: data,\n headers: {\n 'Content-Type': ContentType.Json,\n Authorization: checkoutcomKey,\n 'X-XSRF-TOKEN': null,\n },\n });\n\n return response.body as CheckoutcomToken;\n }\n\n private _mapGooglePayCheckoutcomDataRequestToGooglePayDataRequestV2(\n checkout: Checkout | undefined,\n initializationData: any,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt: initializationData.platformToken,\n merchantId: initializationData.googleMerchantId,\n merchantName: initializationData.googleMerchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA'],\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'checkoutltd',\n gatewayMerchantId: initializationData.checkoutcomkey,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayCybersourceV2Initializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'cybersource',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayOrbitalInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'chase',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayStripeInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n try {\n const payload = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\n\n return Promise.resolve({\n nonce: payload.id,\n type: payload.type,\n details: {\n cardType: payload.card.brand,\n lastFour: payload.card.last4,\n },\n });\n } catch (err) {\n throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n }\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n const consignments = checkout?.consignments || [];\n\n const {\n initializationData: {\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n stripeVersion,\n stripePublishableKey,\n stripeConnectedAccount,\n bopis,\n },\n supportedCards,\n } = paymentMethod;\n\n const isPickup = consignments.every((consignment) => consignment.selectedPickupOption);\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'stripe',\n 'stripe:version': stripeVersion,\n 'stripe:publishableKey': `${stripePublishableKey}/${stripeConnectedAccount}`,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired:\n bopis?.enabled && isPickup && bopis?.requiredAddress === 'none'\n ? false\n : !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { PaymentMethodFailedError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayStripeUPEInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n let payload;\n\n try {\n payload = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\n } catch (err) {\n throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n }\n\n if (\n !payload.id ||\n !payload.type ||\n !payload.card ||\n !payload.card.brand ||\n !payload.card.last4\n ) {\n throw new PaymentMethodFailedError('Unable to parse response from Google Pay.');\n }\n\n return Promise.resolve({\n nonce: payload.id,\n type: payload.type,\n details: {\n cardType: payload.card.brand,\n lastFour: payload.card.last4,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const decimalPlaces = checkout?.cart.currency.decimalPlaces || 2;\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, decimalPlaces).toFixed(decimalPlaces)\n : '';\n\n const {\n initializationData: {\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n stripeVersion,\n stripePublishableKey,\n stripeConnectedAccount,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'stripe',\n 'stripe:version': stripeVersion,\n 'stripe:publishableKey': `${stripePublishableKey}/${stripeConnectedAccount}`,\n },\n },\n },\n ],\n transactionInfo: {\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { round } from 'lodash';\n\nimport { Checkout } from '../../../checkout';\nimport PaymentMethod from '../../payment-method';\n\nimport {\n BillingAddressFormat,\n GooglePayInitializer,\n GooglePaymentData,\n GooglePayPaymentDataRequestV2,\n TokenizePayload,\n TotalPriceStatusType,\n} from './googlepay';\n\nexport default class GooglePayWorldpayAccessInitializer implements GooglePayInitializer {\n initialize(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): Promise {\n return Promise.resolve(\n this._getGooglePayPaymentDataRequest(checkout, paymentMethod, hasShippingAddress),\n );\n }\n\n teardown(): Promise {\n return Promise.resolve();\n }\n\n parseResponse(paymentData: GooglePaymentData): Promise {\n const {\n paymentMethodData: {\n type,\n tokenizationData: { token },\n info: { cardNetwork: cardType, cardDetails: lastFour },\n },\n } = paymentData;\n\n return Promise.resolve({\n nonce: btoa(token),\n type,\n details: {\n cardType,\n lastFour,\n },\n });\n }\n\n private _getGooglePayPaymentDataRequest(\n checkout: Checkout | undefined,\n paymentMethod: PaymentMethod,\n hasShippingAddress: boolean,\n ): GooglePayPaymentDataRequestV2 {\n const currencyCode = checkout?.cart.currency.code || '';\n const totalPrice = checkout?.outstandingBalance\n ? round(checkout.outstandingBalance, 2).toFixed(2)\n : '';\n\n const {\n initializationData: {\n gatewayMerchantId,\n storeCountry: countryCode,\n googleMerchantName: merchantName,\n googleMerchantId: merchantId,\n platformToken: authJwt,\n },\n supportedCards,\n } = paymentMethod;\n\n return {\n apiVersion: 2,\n apiVersionMinor: 0,\n merchantInfo: {\n authJwt,\n merchantId,\n merchantName,\n },\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: supportedCards.map((card) =>\n card === 'MC' ? 'MASTERCARD' : card,\n ),\n billingAddressRequired: true,\n billingAddressParameters: {\n format: BillingAddressFormat.Full,\n phoneNumberRequired: true,\n },\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: 'worldpay',\n gatewayMerchantId,\n },\n },\n },\n ],\n transactionInfo: {\n countryCode,\n currencyCode,\n totalPriceStatus: TotalPriceStatusType.FINAL,\n totalPrice,\n },\n emailRequired: true,\n shippingAddressRequired: !hasShippingAddress,\n shippingAddressParameters: {\n phoneNumberRequired: true,\n },\n };\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { Masterpass, MasterpassHostWindow } from './masterpass';\n\ninterface MasterpassScriptLoaderParams {\n useMasterpassSrc: boolean;\n language: string;\n testMode?: boolean;\n checkoutId?: string;\n}\n\nexport default class MasterpassScriptLoader {\n constructor(\n private _scriptLoader: ScriptLoader,\n public _window: MasterpassHostWindow = window,\n ) {}\n\n async load({\n useMasterpassSrc,\n language,\n testMode,\n checkoutId,\n }: MasterpassScriptLoaderParams): Promise {\n if (useMasterpassSrc) {\n const subdomain = testMode ? 'sandbox.' : '';\n const params = [`locale=${language}`, `checkoutid=${checkoutId}`];\n\n const sourceUrl = [\n `https://${subdomain}src.mastercard.com/srci/integration/merchant.js`,\n params.join('&'),\n ].join('?');\n\n await this._scriptLoader.loadScript(sourceUrl);\n\n if (!this._window.masterpass) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.masterpass;\n }\n\n await this._scriptLoader.loadScript(\n `//${testMode ? 'sandbox.' : ''}masterpass.com/integration/merchant.js`,\n );\n\n if (!this._window.masterpass) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.masterpass;\n }\n}\n","import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { PaypalHostWindow, PaypalSDK } from './paypal-sdk';\n\nexport default class PaypalScriptLoader {\n private _window: PaypalHostWindow;\n\n constructor(private _scriptLoader: ScriptLoader) {\n this._window = window;\n }\n\n async loadPaypal(merchantId = ''): Promise {\n const scriptSrc = '//www.paypalobjects.com/api/checkout.min.js';\n const options: LoadScriptOptions = {\n async: true,\n attributes: { 'data-merchant-id': merchantId },\n };\n\n merchantId\n ? await this._scriptLoader.loadScript(scriptSrc, options)\n : await this._scriptLoader.loadScript(scriptSrc);\n\n if (!this._window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this._window.paypal;\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class BuyNowCartCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during buy now cart creation process. Please try again later.',\n );\n\n this.name = 'BuyNowCartCreationError';\n this.type = 'buy_now_cart_creation_error';\n }\n}\n","import { BuyNowCartRequestBody } from '../../../cart';\nimport {\n AmazonPayV2ButtonConfig,\n AmazonPayV2ButtonParameters,\n} from '../../../payment/strategies/amazon-pay-v2';\n\nexport function isWithBuyNowFeatures(options: unknown): options is WithBuyNowFeature {\n if (!(options instanceof Object)) {\n return false;\n }\n\n return 'buyNowInitializeOptions' in options;\n}\n\nexport interface WithBuyNowFeature extends AmazonPayV2ButtonConfig {\n /**\n * The options that are required to initialize Buy Now functionality.\n */\n buyNowInitializeOptions?: {\n getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n };\n}\n\n/**\n * The required config to render the AmazonPayV2 button.\n */\nexport type AmazonPayV2ButtonInitializeOptions = AmazonPayV2ButtonParameters | WithBuyNowFeature;\n","import { StandardError } from '../../../../common/error/errors';\n\nexport default class AmazonPayV2ConfigCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during config creation process. Please try again later.',\n );\n\n this.name = 'AmazonPayV2ConfigCreationError';\n this.type = 'amazon_pay_v2_config_creation_error';\n }\n}\n","import { CartRequestSender } from '../../../cart';\nimport BuyNowCartRequestBody from '../../../cart/buy-now-cart-request-body';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n} from '../../../common/error/errors';\nimport {\n AmazonPayV2CheckoutSessionConfig,\n AmazonPayV2PaymentProcessor,\n AmazonPayV2PayOptions,\n AmazonPayV2Placement,\n} from '../../../payment/strategies/amazon-pay-v2';\nimport { getShippableItemsCount } from '../../../shipping';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { isWithBuyNowFeatures } from './amazon-pay-v2-button-options';\nimport AmazonPayV2RequestSender from './amazon-pay-v2-request-sender';\nimport AmazonPayV2ConfigCreationError from './errors/amazon-pay-v2-config-creation-error';\n\nexport default class AmazonPayV2ButtonStrategy implements CheckoutButtonStrategy {\n private _buyNowCartRequestBody?: BuyNowCartRequestBody | void;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor,\n private _cartRequestSender: CartRequestSender,\n private _amazonPayV2ConfigRequestSender: AmazonPayV2RequestSender,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { methodId, containerId, amazonpay } = options;\n const { buttonColor } = amazonpay || {};\n\n if (!methodId || !containerId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.',\n );\n }\n\n const {\n paymentMethods: { getPaymentMethodOrThrow },\n } = this._store.getState();\n\n await this._amazonPayV2PaymentProcessor.initialize(getPaymentMethodOrThrow(methodId));\n\n if (!amazonpay) {\n await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n }\n\n const initializeAmazonButtonOptions = isWithBuyNowFeatures(amazonpay)\n ? undefined\n : amazonpay;\n\n if (\n isWithBuyNowFeatures(amazonpay) &&\n typeof amazonpay?.buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n ) {\n this._buyNowCartRequestBody =\n amazonpay.buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (this._buyNowCartRequestBody) {\n this._amazonPayV2PaymentProcessor.setCartRequestBody(this._buyNowCartRequestBody);\n }\n }\n\n this._amazonPayV2PaymentProcessor.renderAmazonPayButton({\n checkoutState: this._store.getState(),\n containerId,\n methodId,\n options: initializeAmazonButtonOptions,\n placement: AmazonPayV2Placement.Cart,\n buttonColor,\n });\n\n if (this._buyNowCartRequestBody) {\n this._amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(\n this._getCheckoutCreationRequestConfig.bind(this),\n );\n }\n }\n\n deinitialize(): Promise {\n return this._amazonPayV2PaymentProcessor.deinitialize();\n }\n\n private async _createBuyNowCart() {\n if (!this._buyNowCartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n this._buyNowCartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private async _createCheckoutConfig(\n id: string,\n ): Promise> {\n try {\n const {\n body: { payload, public_key, ...rest },\n } = await this._amazonPayV2ConfigRequestSender.createCheckoutConfig(id);\n\n return {\n payloadJSON: payload,\n publicKeyId: public_key,\n ...rest,\n };\n } catch (error) {\n throw new AmazonPayV2ConfigCreationError();\n }\n }\n\n private async _getCheckoutCreationRequestConfig() {\n const buyNowCart = await this._createBuyNowCart();\n\n const estimatedOrderAmount = {\n amount: String(buyNowCart.baseAmount),\n currencyCode: buyNowCart.currency.code,\n };\n\n const createCheckoutSessionConfig = await this._createCheckoutConfig(buyNowCart.id);\n\n return {\n createCheckoutSessionConfig,\n estimatedOrderAmount,\n productType:\n getShippableItemsCount(buyNowCart) === 0\n ? AmazonPayV2PayOptions.PayOnly\n : AmazonPayV2PayOptions.PayAndShip,\n };\n }\n}\n","import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../../../common/http-request';\n\nexport interface CheckoutConfig {\n payload: string;\n signature: string;\n public_key: string;\n}\n\nexport default class AmazonPayV2RequestSender {\n constructor(private _requestSender: RequestSender) {}\n\n createCheckoutConfig(cartId: string | number): Promise> {\n const body = { cartId };\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n return this._requestSender.post('/api/storefront/payment/amazonpay', { headers, body });\n }\n}\n","import { Address } from '../../../address';\n\nimport { BraintreeShippingAddressOverride } from './braintree';\n\nexport default function mapToBraintreeShippingAddressOverride(\n address: Address,\n): BraintreeShippingAddressOverride {\n return {\n recipientName: `${address.firstName} ${address.lastName}`,\n line1: address.address1,\n line2: address.address2,\n city: address.city,\n state: address.stateOrProvinceCode,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phone,\n };\n}\n","import { isNil, omitBy } from 'lodash';\n\nimport { PaypalStyleOptions } from '../../../payment/strategies/paypal';\n\nexport default function getValidButtonStyle(style: PaypalStyleOptions): PaypalStyleOptions {\n const { color, fundingicons, height, layout, shape, size, tagline } = style;\n\n const validStyles = {\n color,\n fundingicons,\n height: getValidHeight(height),\n layout,\n shape: shape || 'rect',\n size,\n tagline,\n };\n\n return omitBy(validStyles, isNil);\n}\n\nfunction getValidHeight(height?: number): number {\n const minHeight = 25;\n const maxHeight = 55;\n\n if (typeof height !== 'number' || height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n}\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeDetails } from '../../../payment/strategies/braintree';\n\nexport default function mapToLegacyBillingAddress(\n details: BraintreeDetails,\n): Partial {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n email,\n first_name: firstName,\n last_name: lastName,\n phone_number: phone,\n address_line_1: address?.line1,\n address_line_2: address?.line2,\n city: address?.city,\n state: address?.state,\n country_code: address?.countryCode,\n postal_code: address?.postalCode,\n };\n}\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeDetails } from '../../../payment/strategies/braintree';\n\nexport default function mapToLegacyShippingAddress(\n details: BraintreeDetails,\n): Partial {\n const { email, phone, shippingAddress } = details;\n\n const recipientName = shippingAddress?.recipientName || '';\n const [firstName, lastName] = recipientName.split(' ');\n\n return {\n email,\n first_name: firstName || '',\n last_name: lastName || '',\n phone_number: phone,\n address_line_1: shippingAddress?.line1,\n address_line_2: shippingAddress?.line2,\n city: shippingAddress?.city,\n state: shippingAddress?.state,\n country_code: shippingAddress?.countryCode,\n postal_code: shippingAddress?.postalCode,\n };\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport { Cart, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n StandardError,\n} from '../../../common/error/errors';\nimport PaymentMethod from '../../../payment/payment-method';\nimport {\n BraintreeError,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeSDKCreator,\n BraintreeTokenizePayload,\n mapToBraintreeShippingAddressOverride,\n} from '../../../payment/strategies/braintree';\nimport { PaypalAuthorizeData, PaypalHostWindow } from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { BraintreePaypalButtonInitializeOptions } from './braintree-paypal-button-options';\nimport getValidButtonStyle from './get-valid-button-style';\nimport mapToLegacyBillingAddress from './map-to-legacy-billing-address';\nimport mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\ntype BuyNowInitializeOptions = Pick<\n BraintreePaypalButtonInitializeOptions,\n 'buyNowInitializeOptions'\n>;\n\nexport default class BraintreePaypalButtonStrategy implements CheckoutButtonStrategy {\n private _buyNowCart?: Cart;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _braintreeSDKCreator: BraintreeSDKCreator,\n private _formPoster: FormPoster,\n private _window: PaypalHostWindow,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { braintreepaypal, containerId, methodId } = options;\n const { messagingContainerId, onError } = braintreepaypal || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n let state: InternalCheckoutSelectors;\n let paymentMethod: PaymentMethod;\n let currencyCode: string;\n\n if (braintreepaypal.buyNowInitializeOptions) {\n state = this._store.getState();\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n if (!braintreepaypal.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypal.currencyCode;\n } else {\n state = await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n currencyCode = state.cart.getCartOrThrow().currency.code;\n }\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial = {\n currency: currencyCode,\n intent: paymentMethod.initializationData?.intent,\n isCreditEnabled: paymentMethod.initializationData?.isCreditEnabled,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this._renderPayPalComponents(\n braintreePaypalCheckout,\n braintreepaypal,\n containerId,\n methodId,\n Boolean(paymentMethod.config.testMode),\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this._handleError(error, containerId, messagingContainerId, onError);\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n await this._braintreeSDKCreator.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n deinitialize(): Promise {\n this._braintreeSDKCreator.teardown();\n\n return Promise.resolve();\n }\n\n private _renderPayPalComponents(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { messagingContainerId } = braintreepaypal;\n\n this._renderPayPalMessages(messagingContainerId);\n this._renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypal,\n containerId,\n methodId,\n testMode,\n );\n }\n\n private _renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError } = braintreepaypal;\n\n const { paypal } = this._window;\n const fundingSource = paypal?.FUNDING.PAYPAL;\n\n if (paypal && fundingSource) {\n const validButtonStyle = style ? getValidButtonStyle(style) : {};\n\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n commit: false,\n fundingSource,\n style: validButtonStyle,\n createOrder: () =>\n this._setupPayment(braintreePaypalCheckout, braintreepaypal, methodId),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this._tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n }\n } else {\n this._removeElement(containerId);\n }\n }\n\n private _renderPayPalMessages(messagingContainerId?: string): void {\n const isMessageContainerAvailable =\n messagingContainerId && Boolean(document.getElementById(messagingContainerId));\n const { paypal } = this._window;\n\n if (paypal && isMessageContainerAvailable) {\n const state = this._store.getState();\n const cart = state.cart.getCartOrThrow();\n\n const paypalMessagesRender = paypal.Messages({\n amount: cart.cartAmount,\n placement: 'cart',\n });\n\n paypalMessagesRender.render(`#${messagingContainerId}`);\n } else {\n this._removeElement(messagingContainerId);\n }\n }\n\n private async _setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n methodId: string,\n ): Promise {\n const { buyNowInitializeOptions, shippingAddress, onPaymentError } = braintreepaypal;\n let state: InternalCheckoutSelectors;\n\n try {\n this._buyNowCart = await this._createBuyNowCart({ buyNowInitializeOptions });\n\n if (this._buyNowCart) {\n state = this._store.getState();\n } else {\n state = await this._store.dispatch(\n this._checkoutActionCreator.loadDefaultCheckout(),\n );\n }\n\n const customer = state.customer.getCustomer();\n const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n const amount = this._buyNowCart\n ? this._buyNowCart.cartAmount\n : state.checkout.getCheckoutOrThrow().outstandingBalance;\n const currencyCode =\n braintreepaypal.currencyCode ?? state.config.getStoreConfigOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: false,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n if (onPaymentError) {\n onPaymentError(error);\n }\n\n throw error;\n }\n }\n\n private async _createBuyNowCart({ buyNowInitializeOptions }: BuyNowInitializeOptions) {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: cart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return cart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n private async _tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise {\n try {\n const { deviceData } = await this._braintreeSDKCreator.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const buyNowCartId = this._buyNowCart?.id;\n\n this._formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private _handleError(\n error: BraintreeError,\n buttonContainerId: string,\n messagingContainerId?: string,\n onErrorCallback?: (error: BraintreeError) => void,\n ): void {\n this._removeElement(buttonContainerId);\n this._removeElement(messagingContainerId);\n\n if (onErrorCallback) {\n onErrorCallback(error);\n }\n }\n\n private _removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n}\n","export interface PaypalSDK {\n Button: PaypalButton;\n checkout: PaypalExpressCheckout;\n FUNDING: PaypalFundingTypeList;\n Messages(options: MessagingOptions): MessagingRender;\n Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\nexport interface PaypalFundingTypeList {\n CARD?: string;\n CREDIT?: string;\n PAYPAL?: string;\n PAYLATER?: string;\n}\n\nexport interface PaypalButton {\n render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalButtonRender {\n render(container: string): void;\n isEligible(): boolean;\n}\n\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface MessagingOptions {\n amount: number;\n placement: string;\n}\n\nexport interface PaypalButtonOptions {\n env?: string;\n commit?: boolean;\n style?: PaypalStyleOptions;\n funding?: PaypalFundingType;\n fundingSource?: string;\n client?: PaypalClientToken;\n payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n}\n\nexport interface PaypalClientToken {\n production?: string;\n sandbox?: string;\n}\n\nexport interface PaypalFundingType {\n allowed?: string[];\n disallowed?: string[];\n}\n\nexport enum PaypalButtonStyleLayoutOption {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical',\n}\n\nexport enum PaypalButtonStyleSizeOption {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n RESPONSIVE = 'responsive',\n}\n\nexport enum PaypalButtonStyleColorOption {\n GOLD = 'gold',\n BLUE = 'blue',\n SIlVER = 'silver',\n BLACK = 'black',\n}\n\nexport enum PaypalButtonStyleLabelOption {\n CHECKOUT = 'checkout',\n PAY = 'pay',\n BUYNOW = 'buynow',\n PAYPAL = 'paypal',\n CREDIT = 'credit',\n}\n\nexport enum PaypalButtonStyleShapeOption {\n PILL = 'pill',\n RECT = 'rect',\n}\n\nexport interface PaypalStyleOptions {\n layout?: PaypalButtonStyleLayoutOption;\n size?: PaypalButtonStyleSizeOption;\n color?: PaypalButtonStyleColorOption;\n label?: PaypalButtonStyleLabelOption;\n shape?: PaypalButtonStyleShapeOption;\n tagline?: boolean;\n fundingicons?: boolean;\n height?: number;\n}\n\nexport interface PaypalActions {\n payment: PaypalPaymentActions;\n request: PaypalRequestActions;\n}\n\nexport interface PaypalPaymentActions {\n get(id: string): Promise;\n}\n\nexport interface PaypalRequestActions {\n post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface PaypalTransaction {\n amount?: PaypalAmount;\n payee?: PaypalPayee;\n description?: string;\n note_to_payee?: string;\n item_list?: PaypalItemList;\n}\n\nexport interface PaypalItemList {\n items?: PaypalItem[];\n shipping_address?: PaypalAddress;\n}\n\nexport interface PaypalItem {\n sku?: string;\n name?: string;\n description?: string;\n quantity: string;\n price: string;\n currency: string;\n tax?: string;\n}\n\nexport interface PaypalAmount {\n currency: string;\n total: string;\n}\n\nexport interface PaypalPayer {\n payer_info: object;\n}\n\nexport interface PaypalPayee {\n email?: string;\n merchant_id?: string;\n}\n\nexport interface PaypalAddress {\n line1: string;\n line2?: string;\n city?: string;\n country_code: string;\n postal_code?: string;\n state?: string;\n phone?: string;\n type?: string;\n}\n\nexport interface PaypalPaymentPayload {\n payment: PaypalPaymentPayload;\n payer: PaypalPayer;\n transactions?: PaypalTransaction[];\n}\n\nexport interface PaypalAuthorizeData {\n payerId: string;\n paymentId?: string;\n billingToken?: string;\n // the PayPal side of things uses uppercase ID instead of camel case Id\n payerID?: string;\n paymentID?: string;\n}\n\nexport interface PaypalExpressCheckout {\n initXO(): void;\n startFlow(url: string): void;\n closeFlow(): void;\n setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\n}\n\nexport interface PaypalExpressCheckoutOptions {\n button: string;\n environment: string;\n}\n\nexport interface PaypalHostWindow extends Window {\n paypal?: PaypalSDK;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport { Cart, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n StandardError,\n} from '../../../common/error/errors';\nimport PaymentMethod from '../../../payment/payment-method';\nimport {\n BraintreeError,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeSDKCreator,\n BraintreeTokenizePayload,\n mapToBraintreeShippingAddressOverride,\n} from '../../../payment/strategies/braintree';\nimport {\n PaypalAuthorizeData,\n PaypalButtonStyleLabelOption,\n PaypalHostWindow,\n} from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { BraintreePaypalCreditButtonInitializeOptions } from './braintree-paypal-credit-button-options';\nimport getValidButtonStyle from './get-valid-button-style';\nimport mapToLegacyBillingAddress from './map-to-legacy-billing-address';\nimport mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\ntype BuyNowInitializeOptions = Pick<\n BraintreePaypalCreditButtonInitializeOptions,\n 'buyNowInitializeOptions'\n>;\n\nexport default class BraintreePaypalCreditButtonStrategy implements CheckoutButtonStrategy {\n private _buyNowCart?: Cart;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _braintreeSDKCreator: BraintreeSDKCreator,\n private _formPoster: FormPoster,\n private _window: PaypalHostWindow,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { braintreepaypalcredit, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n let state: InternalCheckoutSelectors;\n let paymentMethod: PaymentMethod;\n let currencyCode: string;\n\n if (braintreepaypalcredit.buyNowInitializeOptions) {\n state = this._store.getState();\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n if (!braintreepaypalcredit.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypalcredit.currencyCode;\n } else {\n state = await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n currencyCode = state.cart.getCartOrThrow().currency.code;\n }\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial = {\n currency: currencyCode,\n intent: paymentMethod.initializationData?.intent,\n isCreditEnabled: paymentMethod.initializationData?.isCreditEnabled,\n };\n\n const paypalCheckoutCallback = (braintreePaypalCheckout: BraintreePaypalCheckout) =>\n this._renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n containerId,\n methodId,\n Boolean(paymentMethod.config.testMode),\n );\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this._handleError(error, containerId, braintreepaypalcredit.onError);\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n await this._braintreeSDKCreator.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n deinitialize(): Promise {\n this._braintreeSDKCreator.teardown();\n\n return Promise.resolve();\n }\n\n private _renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError } = braintreepaypalcredit;\n const { paypal } = this._window;\n\n let hasRenderedSmartButton = false;\n\n if (paypal) {\n const fundingSources = [paypal.FUNDING.PAYLATER, paypal.FUNDING.CREDIT];\n const commonButtonStyle = style ? getValidButtonStyle(style) : {};\n\n fundingSources.forEach((fundingSource) => {\n const buttonStyle =\n fundingSource === paypal.FUNDING.CREDIT\n ? { label: PaypalButtonStyleLabelOption.CREDIT, ...commonButtonStyle }\n : commonButtonStyle;\n\n if (!hasRenderedSmartButton) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n commit: false,\n fundingSource,\n style: buttonStyle,\n createOrder: () =>\n this._setupPayment(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n ),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this._tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n }\n\n if (!paypal || !hasRenderedSmartButton) {\n this._removeElement(containerId);\n }\n }\n\n private async _setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n methodId: string,\n ): Promise {\n const { onPaymentError, shippingAddress, buyNowInitializeOptions } = braintreepaypalcredit;\n let state: InternalCheckoutSelectors;\n\n try {\n this._buyNowCart = await this._createBuyNowCart({ buyNowInitializeOptions });\n\n if (this._buyNowCart) {\n state = this._store.getState();\n } else {\n state = await this._store.dispatch(\n this._checkoutActionCreator.loadDefaultCheckout(),\n );\n }\n\n const customer = state.customer.getCustomer();\n const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n const amount = this._buyNowCart\n ? this._buyNowCart.cartAmount\n : state.checkout.getCheckoutOrThrow().outstandingBalance;\n const currencyCode =\n braintreepaypalcredit.currencyCode ??\n state.config.getStoreConfigOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: true,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n if (onPaymentError) {\n onPaymentError(error);\n }\n\n throw error;\n }\n }\n\n private async _createBuyNowCart({ buyNowInitializeOptions }: BuyNowInitializeOptions) {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n private async _tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise {\n try {\n const { deviceData } = await this._braintreeSDKCreator.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const buyNowCartId = this._buyNowCart?.id;\n\n this._formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private _handleError(\n error: BraintreeError,\n containerId: string,\n onErrorCallback?: (error: BraintreeError) => void,\n ): void {\n this._removeElement(containerId);\n\n if (onErrorCallback) {\n onErrorCallback(error);\n }\n }\n\n private _removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport { BuyNowCartRequestBody, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n UnsupportedBrowserError,\n} from '../../../common/error/errors';\nimport { PaymentMethodActionCreator } from '../../../payment';\nimport {\n BraintreeError,\n BraintreeSDKCreator,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n} from '../../../payment/strategies/braintree';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\nimport { CheckoutButtonMethodType } from '../index';\n\nimport mapToLegacyBillingAddress from './map-to-legacy-billing-address';\nimport mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\nconst venmoButtonStyle = {\n backgroundColor: '#3D95CE',\n backgroundPosition: '50% 50%',\n backgroundSize: '80px auto',\n backgroundImage: 'url(\"/app/assets/img/payment-providers/venmo-logo-white.svg\")',\n backgroundRepeat: 'no-repeat',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: '0.2s ease',\n minHeight: '40px',\n minWidth: '150px',\n height: '100%',\n width: '100%',\n};\n\nconst venmoButtonStyleHover = {\n backgroundColor: '#0a7fc2',\n};\n\ninterface BuyNowInitializeOptions {\n getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n}\n\nexport default class BraintreeVenmoButtonStrategy implements CheckoutButtonStrategy {\n private _onError = noop;\n\n constructor(\n private _store: CheckoutStore,\n private _paymentMethodActionCreator: PaymentMethodActionCreator,\n private _cartRequestSender: CartRequestSender,\n private _braintreeSDKCreator: BraintreeSDKCreator,\n private _formPoster: FormPoster,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { braintreevenmo, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n const state = await this._store.dispatch(\n this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n );\n const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n this._onError = braintreevenmo?.onError || this._handleError;\n\n this._braintreeSDKCreator.initialize(paymentMethod.clientToken);\n await this._braintreeSDKCreator.getVenmoCheckout(\n (braintreeVenmoCheckout) =>\n this._handleInitializationVenmoSuccess(\n braintreeVenmoCheckout,\n containerId,\n braintreevenmo?.buyNowInitializeOptions,\n ),\n (error) => this._handleInitializationVenmoError(error, containerId),\n );\n }\n\n deinitialize(): Promise {\n this._braintreeSDKCreator.teardown();\n\n return Promise.resolve();\n }\n\n private _handleError(error: BraintreeError) {\n throw new Error(error.message);\n }\n\n private _handleInitializationVenmoSuccess(\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n parentContainerId: string,\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n ): void {\n return this._renderVenmoButton(\n braintreeVenmoCheckout,\n parentContainerId,\n buyNowInitializeOptions,\n );\n }\n\n private _handleInitializationVenmoError(\n error: BraintreeError | UnsupportedBrowserError,\n containerId: string,\n ): void {\n this._removeVenmoContainer(containerId);\n\n return this._onError(error);\n }\n\n private _removeVenmoContainer(containerId: string): void {\n const buttonContainer = document.getElementById(containerId);\n\n if (buttonContainer) {\n buttonContainer.remove();\n }\n }\n\n private _renderVenmoButton(\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n containerId: string,\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n ): void {\n const venmoButton = document.getElementById(containerId);\n\n if (!venmoButton) {\n throw new InvalidArgumentError(\n 'Unable to create wallet button without valid container ID.',\n );\n }\n\n venmoButton.setAttribute('aria-label', 'Venmo');\n Object.assign(venmoButton.style, venmoButtonStyle);\n\n venmoButton.addEventListener('click', async () => {\n venmoButton.setAttribute('disabled', 'true');\n\n const buyBowCart = await this._createBuyNowCart(buyNowInitializeOptions);\n\n if (braintreeVenmoCheckout.tokenize) {\n braintreeVenmoCheckout.tokenize(\n async (error: BraintreeError, payload: BraintreeTokenizePayload) => {\n venmoButton.removeAttribute('disabled');\n\n if (error) {\n return this._onError(error);\n }\n\n await this._handlePostForm(payload, buyBowCart?.id);\n },\n );\n }\n });\n\n venmoButton.addEventListener('mouseenter', () => {\n venmoButton.style.backgroundColor = venmoButtonStyleHover.backgroundColor;\n });\n\n venmoButton.addEventListener('mouseleave', () => {\n venmoButton.style.backgroundColor = venmoButtonStyle.backgroundColor;\n });\n }\n\n private async _createBuyNowCart(buyNowInitializeOptions?: BuyNowInitializeOptions) {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n private async _handlePostForm(\n payload: BraintreeTokenizePayload,\n buyNowCartId?: string,\n ): Promise {\n const { deviceData } = await this._braintreeSDKCreator.getDataCollector();\n const { nonce, details } = payload;\n\n this._formPoster.postForm('/checkout.php', {\n nonce,\n provider: CheckoutButtonMethodType.BRAINTREE_VENMO,\n payment_type: 'paypal',\n device_data: deviceData,\n action: 'set_external_checkout',\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n }\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 StandardError from './standard-error';\n\nexport enum NotInitializedErrorType {\n CheckoutButtonNotInitialized,\n CustomerNotInitialized,\n PaymentNotInitialized,\n ShippingNotInitialized,\n SpamProtectionNotInitialized,\n}\n\n/**\n * Throw this error if a method requires a certain initialization call to be\n * made first. Some objects can be constructed but they cannot be used until a\n * separate initialization call is made.\n */\nexport default class NotInitializedError extends StandardError {\n constructor(public subtype: NotInitializedErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'NotInitializedError';\n this.type = 'not_initialized';\n }\n}\n\nfunction getErrorMessage(type: NotInitializedErrorType): string {\n switch (type) {\n case NotInitializedErrorType.CustomerNotInitialized:\n return 'Unable to proceed because the customer step of checkout has not been initialized.';\n\n case NotInitializedErrorType.PaymentNotInitialized:\n return 'Unable to proceed because the payment step of checkout has not been initialized.';\n\n case NotInitializedErrorType.ShippingNotInitialized:\n return 'Unable to proceed because the shipping step of checkout has not been initialized.';\n\n case NotInitializedErrorType.SpamProtectionNotInitialized:\n return 'Unable to proceed because the checkout spam protection has not been initialized.';\n\n default:\n return 'Unable to proceed because the required component has not been initialized.';\n }\n}\n","import StandardError from './standard-error';\n\nexport enum MissingDataErrorType {\n MissingBillingAddress,\n MissingCart,\n MissingCheckout,\n MissingConsignments,\n MissingCustomer,\n MissingCheckoutConfig,\n MissingOrder,\n MissingOrderConfig,\n MissingOrderId,\n MissingPayment,\n MissingPaymentId,\n MissingPaymentInstrument,\n MissingPaymentMethod,\n MissingPaymentRedirectUrl,\n MissingPaymentStatus,\n MissingPaymentToken,\n MissingShippingAddress,\n}\n\n/**\n * Throw this error when data that is expected to exist is missing. Usually it\n * is due to the fact that certain data has not been retrieved from or saved to\n * the server yet. And such data is required to perform certain actions.\n */\nexport default class MissingDataError extends StandardError {\n constructor(public subtype: MissingDataErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'MissingDataError';\n this.type = 'missing_data';\n }\n}\n\nfunction getErrorMessage(type: MissingDataErrorType): string {\n switch (type) {\n case MissingDataErrorType.MissingBillingAddress:\n return 'Unable to proceed because billing address data is unavailable.';\n\n case MissingDataErrorType.MissingCart:\n return 'Unable to proceed because cart data is unavailable.';\n\n case MissingDataErrorType.MissingConsignments:\n return 'Unable to proceed because consignments data is unavailable.';\n\n case MissingDataErrorType.MissingCheckout:\n return 'Unable to proceed because checkout data is unavailable.';\n\n case MissingDataErrorType.MissingCustomer:\n return 'Unable to proceed because customer data is unavailable.';\n\n case MissingDataErrorType.MissingCheckoutConfig:\n case MissingDataErrorType.MissingOrderConfig:\n return 'Unable to proceed because configuration data is unavailable.';\n\n case MissingDataErrorType.MissingOrder:\n return 'Unable to proceed because order data is unavailable.';\n\n case MissingDataErrorType.MissingOrderId:\n return 'Unable to proceed because order ID is unavailable or not generated yet.';\n\n case MissingDataErrorType.MissingPayment:\n return 'Unable to proceed because payment data is unavailable.';\n\n case MissingDataErrorType.MissingPaymentToken:\n return 'Unable to proceed because the token required to submit a payment is missing.';\n\n case MissingDataErrorType.MissingPaymentMethod:\n return 'Unable to proceed because payment method data is unavailable or not properly configured.';\n\n case MissingDataErrorType.MissingShippingAddress:\n return 'Unable to proceed because shipping address data is unavailable.';\n\n default:\n return 'Unable to proceed because the required data is unavailable.';\n }\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutButtonMethodType } from '../';\nimport { Cart, CartRequestSender } from '../../../cart';\nimport { BuyNowCartCreationError } from '../../../cart/errors';\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport { SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { bindDecorator as bind } from '../../../common/utility';\nimport {\n CallbackIntentsType,\n CallbackTriggerType,\n EnvironmentType,\n GooglePayPaymentOptions,\n GooglePayPaymentProcessor,\n IntermediatePaymentData,\n NewTransactionInfo,\n TotalPriceStatusType,\n} from '../../../payment/strategies/googlepay';\nimport { GooglePayBuyNowInitializeOptions } from './googlepay-button-types';\nimport { getShippableItemsCount } from '../../../shipping';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nimport { GooglePayButtonInitializeOptions } from './googlepay-button-options';\n\nexport default class GooglePayButtonStrategy implements CheckoutButtonStrategy {\n private _methodId?: string;\n private _walletButton?: HTMLElement;\n private _buyNowCart?: Cart;\n private _isBuyNowFlow?: boolean;\n\n constructor(\n private _store: CheckoutStore,\n private _formPoster: FormPoster,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n private _cartRequestSender: CartRequestSender,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { containerId, methodId, currencyCode } = options;\n\n const googlePayOptions = this._getGooglePayOptions(options);\n const { buyNowInitializeOptions } = googlePayOptions;\n\n if (!containerId || !methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"containerId\" argument is not provided.',\n );\n }\n\n const state = this._store.getState();\n const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n const { testMode } = paymentMethod?.config || {};\n\n this._methodId = methodId;\n\n this._isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (this._isBuyNowFlow) {\n if (!currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.currencyCode\" argument is not provided.`,\n );\n }\n\n const { buyNowInitializeOptions } = googlePayOptions;\n this._googlePayPaymentProcessor.updateBuyNowFlowFlag(this._isBuyNowFlow);\n\n await this._googlePayPaymentProcessor.initialize(\n this._getMethodId(),\n this._getGooglePayClientOptions(currencyCode, testMode, buyNowInitializeOptions),\n );\n } else {\n await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n await this._googlePayPaymentProcessor.initialize(this._getMethodId());\n }\n\n this._walletButton = this._createSignInButton(containerId, googlePayOptions, currencyCode);\n }\n\n deinitialize(): Promise {\n if (this._walletButton && this._walletButton.parentNode) {\n this._walletButton.parentNode.removeChild(this._walletButton);\n this._walletButton = undefined;\n }\n\n return this._googlePayPaymentProcessor.deinitialize();\n }\n\n private _getGooglePayClientOptions(\n currencyCode: string,\n testMode?: boolean,\n buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions,\n ): GooglePayPaymentOptions {\n const environment: EnvironmentType = testMode ? 'TEST' : 'PRODUCTION';\n\n return {\n environment,\n paymentDataCallbacks: {\n onPaymentDataChanged: async ({\n callbackTrigger,\n }: IntermediatePaymentData): Promise => {\n if (callbackTrigger !== CallbackTriggerType.INITIALIZE) {\n return;\n }\n\n try {\n this._buyNowCart = await this._createBuyNowCart(buyNowInitializeOptions);\n\n if (this._buyNowCart) {\n const { id, cartAmount } = this._buyNowCart;\n\n await this._store.dispatch(\n this._checkoutActionCreator.loadCheckout(id),\n );\n\n return {\n newTransactionInfo: {\n currencyCode,\n totalPrice: String(cartAmount),\n totalPriceStatus: TotalPriceStatusType.FINAL,\n },\n };\n }\n } catch (error) {\n throw new BuyNowCartCreationError(error);\n }\n },\n },\n };\n }\n\n private _createSignInButton(\n containerId: string,\n buttonOptions: GooglePayButtonInitializeOptions,\n currencyCode?: string,\n ): HTMLElement {\n const container = document.getElementById(containerId);\n const { buttonType, buttonColor } = buttonOptions;\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to create sign-in button without valid container ID.',\n );\n }\n\n const onClick = (event: Event) => this._handleWalletButtonClick(event, currencyCode);\n\n const googlePayButton = this._googlePayPaymentProcessor.createButton(\n onClick,\n buttonType,\n buttonColor,\n );\n\n container.appendChild(googlePayButton);\n\n return googlePayButton;\n }\n\n private _getMethodId(): string {\n if (!this._methodId) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this._methodId;\n }\n\n private _getGooglePayOptions(\n options: CheckoutButtonInitializeOptions,\n ): GooglePayButtonInitializeOptions {\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_ADYENV2 &&\n options.googlepayadyenv2\n ) {\n return options.googlepayadyenv2;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_ADYENV3 &&\n options.googlepayadyenv3\n ) {\n return options.googlepayadyenv3;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_AUTHORIZENET &&\n options.googlepayauthorizenet\n ) {\n return options.googlepayauthorizenet;\n }\n\n if (options.methodId === CheckoutButtonMethodType.GOOGLEPAY_BNZ && options.googlepaybnz) {\n return options.googlepaybnz;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_BRAINTREE &&\n options.googlepaybraintree\n ) {\n return options.googlepaybraintree;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_CHECKOUTCOM &&\n options.googlepaycheckoutcom\n ) {\n return options.googlepaycheckoutcom;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_CYBERSOURCEV2 &&\n options.googlepaycybersourcev2\n ) {\n return options.googlepaycybersourcev2;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_ORBITAL &&\n options.googlepayorbital\n ) {\n return options.googlepayorbital;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_STRIPE &&\n options.googlepaystripe\n ) {\n return options.googlepaystripe;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_STRIPEUPE &&\n options.googlepaystripeupe\n ) {\n return options.googlepaystripeupe;\n }\n\n if (\n options.methodId === CheckoutButtonMethodType.GOOGLEPAY_WORLDPAYACCESS &&\n options.googlepayworldpayaccess\n ) {\n return options.googlepayworldpayaccess;\n }\n\n throw new InvalidArgumentError();\n }\n\n private async _createBuyNowCart(\n buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions,\n ): Promise {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const { body: cart } = await this._cartRequestSender.createBuyNowCart(\n cartRequestBody,\n );\n\n return cart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n }\n\n @bind\n private async _handleWalletButtonClick(event: Event, currencyCode?: string): Promise {\n event.preventDefault();\n\n try {\n if (this._isBuyNowFlow && currencyCode) {\n this._googlePayPaymentProcessor.updatePaymentDataRequest({\n transactionInfo: {\n currencyCode,\n totalPrice: '0',\n totalPriceStatus: TotalPriceStatusType.ESTIMATED,\n },\n callbackIntents: [CallbackIntentsType.OFFER],\n });\n }\n const paymentData = await this._googlePayPaymentProcessor.displayWallet();\n\n await this._googlePayPaymentProcessor.handleSuccess(paymentData);\n\n const cart = this._store.getState().cart.getCartOrThrow();\n const hasPhysicalItems = getShippableItemsCount(cart) > 0;\n\n if (hasPhysicalItems && paymentData.shippingAddress) {\n await this._googlePayPaymentProcessor.updateShippingAddress(\n paymentData.shippingAddress,\n );\n }\n\n await this._onPaymentSelectComplete();\n } catch (error) {\n if (error && error.message !== 'CANCELED') {\n throw error;\n }\n }\n }\n\n private _onPaymentSelectComplete(): void {\n const buyNowCartId = this._buyNowCart?.id;\n\n this._formPoster.postForm('/checkout.php', {\n headers: {\n Accept: 'text/html',\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...SDK_VERSION_HEADERS,\n },\n ...(buyNowCartId && {\n action: 'set_external_checkout',\n provider: this._methodId,\n cart_id: buyNowCartId,\n }),\n });\n }\n}\n","export const supportedLocales: { [language: string]: string[] } = {\n es: ['es_es', 'es_mx', 'es_pe', 'es_co', 'es_ar', 'es_cl'],\n en: [\n 'en_us',\n 'en_gb',\n 'en_ca',\n 'en_es',\n 'en_fr',\n 'en_ie',\n 'en_sg',\n 'en_au',\n 'en_nz',\n 'en_my',\n 'en_hk',\n 'en_th',\n 'en_ae',\n 'en_sa',\n 'en_qa',\n 'en_kw',\n 'en_za',\n ],\n pt: ['pt_br'],\n zu: ['zu_za'],\n ar: ['ar_sa', 'ar_ae', 'ar_qa', 'ar_kw'],\n zh: ['zh_sg', 'zh_hk'],\n ms: ['ms_my'],\n uk: ['uk_ua'],\n sv: ['sv_se'],\n hr: ['hr_hr'],\n pl: ['pl_pl'],\n nl: ['nl_be'],\n it: ['it_it'],\n de: ['de_de'],\n fr: ['fr_fr', 'fr_ca'],\n};\n","import { supportedLocales } from './masterpass-supported-locales';\n\nexport default function formatLocale(localeLanguage: string): string {\n const [language, country] = localeLanguage.replace('-', '_').toLowerCase().split('_');\n const formattedLocale = `${language}_${country}`;\n const countryLocales = supportedLocales[language];\n\n if (!countryLocales) {\n return 'en_us';\n }\n\n return countryLocales.indexOf(formattedLocale) > -1 ? formattedLocale : countryLocales[0];\n}\n","import { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n} from '../../../common/error/errors';\nimport { bindDecorator as bind } from '../../../common/utility';\nimport {\n formatLocale,\n getCallbackUrl,\n Masterpass,\n MasterpassCheckoutOptions,\n MasterpassScriptLoader,\n} from '../../../payment/strategies/masterpass';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nexport default class MasterpassButtonStrategy implements CheckoutButtonStrategy {\n private _masterpassClient?: Masterpass;\n private _methodId?: string;\n private _signInButton?: HTMLElement;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _masterpassScriptLoader: MasterpassScriptLoader,\n private _locale: string,\n ) {}\n\n initialize(options: CheckoutButtonInitializeOptions): Promise {\n const { containerId, methodId } = options;\n\n if (!containerId || !methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"containerId\" argument is not provided.',\n );\n }\n\n this._methodId = methodId;\n\n return this._store\n .dispatch(this._checkoutActionCreator.loadDefaultCheckout())\n .then((state) => {\n const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n\n if (!paymentMethod || !paymentMethod.initializationData.checkoutId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const masterpassScriptLoaderParams = {\n useMasterpassSrc: paymentMethod.initializationData.isMasterpassSrcEnabled,\n language: formatLocale(this._locale),\n testMode: paymentMethod.config.testMode,\n checkoutId: paymentMethod.initializationData.checkoutId,\n };\n\n return this._masterpassScriptLoader.load(masterpassScriptLoaderParams);\n })\n .then((masterpass) => {\n this._masterpassClient = masterpass;\n this._signInButton = this._createSignInButton(containerId);\n });\n }\n\n deinitialize(): Promise {\n if (this._signInButton && this._signInButton.parentNode) {\n this._signInButton.removeEventListener('click', this._handleWalletButtonClick);\n this._signInButton.parentNode.removeChild(this._signInButton);\n this._signInButton = undefined;\n }\n\n return Promise.resolve();\n }\n\n private _createSignInButton(containerId: string): HTMLElement {\n const buttonContainer = document.getElementById(containerId);\n const state = this._store.getState();\n const paymentMethod = this._methodId\n ? state.paymentMethods.getPaymentMethod(this._methodId)\n : null;\n const storeConfig = state.config.getStoreConfig();\n\n if (!buttonContainer) {\n throw new Error('Need a container to place the button');\n }\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n if (!storeConfig) {\n throw new InvalidArgumentError('Unable to retrieve store configuration');\n }\n\n const button = document.createElement('input');\n\n button.type = 'image';\n\n if (paymentMethod.initializationData.isMasterpassSrcEnabled) {\n const subdomain = paymentMethod.config.testMode ? 'sandbox.' : '';\n const { checkoutId } = paymentMethod.initializationData;\n\n const params = [\n `locale=${formatLocale(this._locale)}`,\n `paymentmethod=master,visa,amex,discover`,\n `checkoutid=${checkoutId}`,\n ];\n\n button.src = [\n `https://${subdomain}src.mastercard.com/assets/img/btn/src_chk_btn_126x030px.svg`,\n params.join('&'),\n ].join('?');\n } else {\n button.src =\n 'https://static.masterpass.com/dyn/img/btn/global/mp_chk_btn_160x037px.svg';\n }\n\n buttonContainer.appendChild(button);\n\n button.addEventListener('click', this._handleWalletButtonClick);\n\n return button;\n }\n\n private _createMasterpassPayload(): MasterpassCheckoutOptions {\n const state = this._store.getState();\n const checkout = state.checkout.getCheckout();\n const paymentMethod = this._methodId\n ? state.paymentMethods.getPaymentMethod(this._methodId)\n : null;\n\n if (!checkout) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n return {\n checkoutId: paymentMethod.initializationData.checkoutId,\n allowedCardTypes: paymentMethod.initializationData.allowedCardTypes,\n amount: checkout.cart.cartAmount.toString(),\n currency: checkout.cart.currency.code,\n cartId: checkout.cart.id,\n callbackUrl: getCallbackUrl('cart'),\n };\n }\n\n @bind\n private _handleWalletButtonClick(): void {\n if (!this._masterpassClient) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n this._masterpassClient.checkout(this._createMasterpassPayload());\n }\n}\n","export default function getCallbackUrl(origin: string): string {\n return `${window.location.origin}/checkout.php?action=set_external_checkout&provider=masterpass&gateway=stripe&origin=${origin}`;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { pick } from 'lodash';\n\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n StandardError,\n} from '../../../common/error/errors';\nimport { INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { PaymentMethod } from '../../../payment';\nimport {\n PaypalActions,\n PaypalAuthorizeData,\n PaypalButtonStyleShapeOption,\n PaypalButtonStyleSizeOption,\n PaypalClientToken,\n PaypalScriptLoader,\n} from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nexport default class PaypalButtonStrategy implements CheckoutButtonStrategy {\n private _paymentMethod?: PaymentMethod;\n\n constructor(\n private _store: CheckoutStore,\n private _checkoutActionCreator: CheckoutActionCreator,\n private _paypalScriptLoader: PaypalScriptLoader,\n private _formPoster: FormPoster,\n private _host: string = '',\n ) {}\n\n initialize(options: CheckoutButtonInitializeOptions): Promise {\n const paypalOptions = options.paypal;\n const state = this._store.getState();\n const paymentMethod = (this._paymentMethod = state.paymentMethods.getPaymentMethod(\n options.methodId,\n ));\n\n if (!paypalOptions) {\n throw new InvalidArgumentError();\n }\n\n if (!paymentMethod) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n return this._paypalScriptLoader\n .loadPaypal(paymentMethod.config.merchantId)\n .then((paypal) => {\n if (!paymentMethod || !paymentMethod.config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const merchantId = paymentMethod.config.merchantId;\n const env = paymentMethod.config.testMode ? 'sandbox' : 'production';\n const clientToken: PaypalClientToken = { [env]: paypalOptions.clientId };\n\n const fundingCreditOption = paypal.FUNDING.CREDIT || 'credit';\n const allowedSources = paypalOptions.allowCredit ? [fundingCreditOption] : [];\n const disallowedSources = !paypalOptions.allowCredit ? [fundingCreditOption] : [];\n\n return paypal.Button.render(\n {\n env,\n client: clientToken,\n commit: paypalOptions.shouldProcessPayment,\n funding: {\n allowed: allowedSources,\n disallowed: disallowedSources,\n },\n style: {\n shape: PaypalButtonStyleShapeOption.RECT,\n ...pick(\n paypalOptions.style,\n 'layout',\n 'color',\n 'label',\n 'shape',\n 'tagline',\n 'fundingicons',\n ),\n size:\n paymentMethod.id === 'paypalexpress' &&\n paypalOptions.style?.size === 'small'\n ? PaypalButtonStyleSizeOption.RESPONSIVE\n : paypalOptions.style?.size,\n },\n payment: (_, actions) =>\n this._setupPayment(merchantId, actions, paypalOptions.onPaymentError),\n onAuthorize: (data, actions) =>\n this._tokenizePayment(\n data,\n actions,\n paypalOptions.shouldProcessPayment,\n paypalOptions.onAuthorizeError,\n ),\n },\n options.containerId,\n );\n });\n }\n\n deinitialize(): Promise {\n this._paymentMethod = undefined;\n\n return Promise.resolve();\n }\n\n private _setupPayment(\n merchantId: string,\n actions?: PaypalActions,\n onError?: (error: StandardError) => void,\n ): Promise {\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n return this._store\n .dispatch(this._checkoutActionCreator.loadDefaultCheckout())\n .then((state) => {\n const cart = state.cart.getCart();\n const cartId = cart ? cart.id : '';\n\n return actions.request.post(\n `${this._host}/api/storefront/payment/paypalexpress`,\n { merchantId, cartId },\n {\n headers: {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n },\n );\n })\n .then((res) => res.id)\n .catch((error) => {\n if (onError) {\n onError(error);\n }\n\n throw error;\n });\n }\n\n private _tokenizePayment(\n data: PaypalAuthorizeData,\n actions?: PaypalActions,\n shouldProcessPayment?: boolean,\n _onError?: (error: StandardError) => void, // FIXME: This parameter seems to be unused\n ): Promise {\n if (!this._paymentMethod) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n if (!data.paymentID || !data.payerID) {\n throw new MissingDataError(MissingDataErrorType.MissingPayment);\n }\n\n const methodId = this._paymentMethod.id;\n\n return actions.payment.get(data.paymentID).then((payload) => {\n this._formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n paymentId: data.paymentID,\n payerId: data.payerID,\n payerInfo: JSON.stringify(payload.payer.payer_info),\n });\n });\n }\n}\n","export default function getEnvironment(): string {\n try {\n return process.env.NODE_ENV || 'development';\n } catch (e) {\n return 'development';\n }\n}\n","import Logger from './logger';\n\nexport default class ConsoleLogger implements Logger {\n constructor(private _console?: Console) {}\n\n log(...messages: any[]): void {\n this._logToConsole('log', ...messages);\n }\n\n info(...messages: any[]): void {\n this._logToConsole('info', ...messages);\n }\n\n warn(...messages: any[]): void {\n this._logToConsole('warn', ...messages);\n }\n\n error(...messages: any[]): void {\n this._logToConsole('error', ...messages);\n }\n\n debug(...messages: any[]): void {\n this._logToConsole('debug', ...messages);\n }\n\n private _logToConsole(type: keyof Console, ...messages: any[]): void {\n if (!this._console || !this._console[type]) {\n return;\n }\n\n this._console[type].call(this._console, ...messages);\n }\n}\n","import Logger from './logger';\n\nexport default class NoopLogger implements Logger {\n log(): void {}\n\n info(): void {}\n\n warn(): void {}\n\n error(): void {}\n\n debug(): void {}\n}\n","import { getEnvironment } from '../utility';\n\nimport createLogger from './create-logger';\nimport Logger from './logger';\n\nconst logger = createLogger(getEnvironment() !== 'test');\n\nexport default function getDefaultLogger(): Logger {\n return logger;\n}\n","import ConsoleLogger from './console-logger';\nimport Logger from './logger';\nimport NoopLogger from './noop-logger';\n\nexport default function createLogger(isEnabled = true): Logger {\n if (!isEnabled) {\n return new NoopLogger();\n }\n\n return new ConsoleLogger(console);\n}\n","import { getDefaultLogger } from '../log';\nimport { getEnvironment } from '../utility';\n\nimport Factory from './factory';\nimport Registry from './registry';\n\nexport default class ResolveIdRegistry {\n private _registry: Registry;\n\n constructor(private _useFallback = false) {\n this._registry = new Registry({\n tokenResolver: this._resolveToken.bind(this),\n useFallback: this._useFallback,\n });\n }\n\n get(resolveId: TToken): TType {\n return this._registry.get(this._encodeToken(resolveId));\n }\n\n register(resolveId: TToken, factory: Factory): void {\n this._registry.register(this._encodeToken(resolveId), factory);\n }\n\n private _encodeToken(resolveId: TToken): string {\n return btoa(JSON.stringify(resolveId));\n }\n\n private _decodeToken(token: string): TToken {\n return JSON.parse(atob(token));\n }\n\n private _resolveToken(token: string, registeredTokens: string[]): string | undefined {\n const query = this._decodeToken(token);\n\n const results: Array<{ token: string; matches: number; default: boolean }> = [];\n\n registeredTokens.forEach((registeredToken) => {\n const resolverId = this._decodeToken(registeredToken);\n\n const result = { token: registeredToken, matches: 0, default: false };\n\n for (const [key, value] of Object.entries(resolverId)) {\n if (key in query && query[key] !== value) {\n result.matches = 0;\n break;\n }\n\n if (key in query && query[key] === value) {\n result.matches++;\n }\n\n if (key === 'default' && value === true) {\n result.default = true;\n }\n }\n\n results.push(result);\n });\n\n const matchedResults = results\n .sort((a, b) => b.matches - a.matches)\n .filter((result) => result.matches > 0);\n\n if (matchedResults.length > 1 && matchedResults[0].matches === matchedResults[1].matches) {\n if (getEnvironment() === 'development') {\n getDefaultLogger().warn(\n 'The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.',\n );\n }\n }\n\n const matched = matchedResults[0];\n\n if (matched && matched.token) {\n return matched.token;\n }\n\n if (this._useFallback) {\n const defaultToken = results.find((result) => result.default)?.token;\n\n if (defaultToken) {\n return defaultToken;\n }\n }\n\n throw new Error('Unable to resolve to a registered token with the provided token.');\n }\n}\n","import ResolvableModule from './resolvable-module';\n\nexport default function toResolvableModule(\n module: TModule,\n resolveIds: TIdentifier[],\n): ResolvableModule {\n return Object.assign(module, { resolveIds });\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the payment flow is cancelled. It could be\n * due to a deliberate user interaction, i.e.: the user clicks on a cancel\n * button which dismisses the payment modal.\n */\nexport default class PaymentMethodCancelledError extends StandardError {\n constructor(message?: string) {\n super(message || 'Payment process was cancelled.');\n\n this.name = 'PaymentMethodCancelledError';\n this.type = 'payment_cancelled';\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class BuyNowCartCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during buy now cart creation process. Please try again later.',\n );\n\n this.name = 'BuyNowCartCreationError';\n this.type = 'buy_now_cart_creation_error';\n }\n}\n","interface ApplePayWindow extends Window {\n ApplePaySession: ApplePaySession;\n}\n\nfunction isApplePayWindow(window: Window): window is ApplePayWindow {\n return 'ApplePaySession' in window;\n}\n\nexport function assertApplePayWindow(window: Window): asserts window is ApplePayWindow {\n if (!isApplePayWindow(window)) {\n throw new Error('Apple pay is not supported');\n }\n}\n\nexport default class ApplePaySessionFactory {\n create(request: ApplePayJS.ApplePayPaymentRequest): ApplePaySession {\n assertApplePayWindow(window);\n\n return new ApplePaySession(1, request);\n }\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport {\n AddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n Checkout,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n Payment,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodCancelledError,\n ShippingOption,\n StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ApplePayButtonInitializeOptions, {\n WithApplePayButtonInitializeOptions,\n} from './apple-pay-button-initialize-options';\nimport ApplePaySessionFactory, { assertApplePayWindow } from './apple-pay-session-factory';\n\nconst validationEndpoint = (bigPayEndpoint: string) =>\n `${bigPayEndpoint}/api/public/v1/payments/applepay/validate_merchant`;\n\nenum DefaultLabels {\n Subtotal = 'Subtotal',\n Shipping = 'Shipping',\n}\n\nfunction isShippingOptions(options: ShippingOption[] | undefined): options is ShippingOption[] {\n return options instanceof Array;\n}\n\nexport default class ApplePayButtonStrategy implements CheckoutButtonStrategy {\n private _paymentMethod?: PaymentMethod;\n private _applePayButton?: HTMLElement;\n private _requiresShipping?: boolean;\n private _buyNowInitializeOptions?: ApplePayButtonInitializeOptions['buyNowInitializeOptions'];\n private _onAuthorizeCallback = noop;\n private _subTotalLabel: string = DefaultLabels.Subtotal;\n private _shippingLabel: string = DefaultLabels.Shipping;\n\n constructor(\n private _requestSender: RequestSender,\n private _paymentIntegrationService: PaymentIntegrationService,\n private _sessionFactory: ApplePaySessionFactory,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithApplePayButtonInitializeOptions,\n ): Promise {\n const { methodId, containerId, applepay } = options;\n\n assertApplePayWindow(window);\n\n if (!methodId || !applepay) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { buttonClassName, onPaymentAuthorize, buyNowInitializeOptions, requiresShipping } =\n applepay;\n\n this._requiresShipping = requiresShipping;\n\n this._buyNowInitializeOptions = buyNowInitializeOptions;\n\n this._onAuthorizeCallback = onPaymentAuthorize;\n\n if (!buyNowInitializeOptions) {\n await this._paymentIntegrationService.loadDefaultCheckout();\n }\n\n await this._paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this._paymentIntegrationService.getState();\n\n this._paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n await this._paymentIntegrationService.verifyCheckoutSpamProtection();\n\n this._applePayButton = this._createButton(containerId, buttonClassName);\n this._applePayButton.addEventListener('click', this._handleWalletButtonClick.bind(this));\n\n return Promise.resolve();\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private _createButton(\n containerId: string,\n buttonClassName = 'apple-pay-checkout-button',\n ): HTMLElement {\n const container = document.getElementById(containerId);\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to create wallet button without valid container ID.',\n );\n }\n\n document.body.classList.add('apple-pay-supported');\n\n const button = document.createElement('div');\n\n button.setAttribute('class', buttonClassName);\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', 'Apple Pay button');\n container.appendChild(button);\n\n return button;\n }\n\n private async _handleWalletButtonClick(event: Event) {\n event.preventDefault();\n\n if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n if (\n this._buyNowInitializeOptions &&\n typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody === 'function'\n ) {\n const {\n countryCode,\n currencyCode,\n merchantCapabilities,\n supportedNetworks,\n storeName,\n } = this._paymentMethod.initializationData;\n\n const request = this._getRequestWithEmptyTotal(\n countryCode,\n currencyCode,\n supportedNetworks,\n merchantCapabilities,\n );\n\n if (this._requiresShipping) {\n request.requiredShippingContactFields?.push('postalAddress');\n }\n\n const applePaySession = this._sessionFactory.create(request);\n\n this._handleApplePayEvents(applePaySession, this._paymentMethod, storeName);\n\n applePaySession.begin();\n } else {\n const state = this._paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const config = state.getStoreConfigOrThrow();\n const checkout = state.getCheckoutOrThrow();\n const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n const applePaySession = this._sessionFactory.create(request);\n\n this._handleApplePayEvents(\n applePaySession,\n this._paymentMethod,\n config.storeProfile.storeName,\n );\n\n applePaySession.begin();\n }\n }\n\n private _getRequestWithEmptyTotal(\n countryCode: string,\n currencyCode: string,\n supportedNetworks: string[],\n merchantCapabilities: ApplePayJS.ApplePayMerchantCapability[],\n ): ApplePayJS.ApplePayPaymentRequest {\n return {\n countryCode,\n currencyCode,\n supportedNetworks,\n merchantCapabilities,\n total: { label: '', amount: '0', type: 'pending' },\n requiredBillingContactFields: ['postalAddress'],\n requiredShippingContactFields: ['email', 'phone'],\n };\n }\n\n private _getBaseRequest(\n cart: Cart,\n checkout: Checkout,\n config: StoreConfig,\n paymentMethod: PaymentMethod,\n ): ApplePayJS.ApplePayPaymentRequest {\n const {\n storeProfile: { storeCountryCode, storeName },\n } = config;\n const {\n currency: { code, decimalPlaces },\n } = cart;\n\n const {\n initializationData: { merchantCapabilities, supportedNetworks },\n } = paymentMethod;\n\n const requiresShipping = cart.lineItems.physicalItems.length > 0;\n const total: ApplePayJS.ApplePayLineItem = requiresShipping\n ? {\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n type: 'pending',\n }\n : {\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n type: 'final',\n };\n\n const request: ApplePayJS.ApplePayPaymentRequest = {\n requiredBillingContactFields: ['postalAddress'],\n requiredShippingContactFields: ['email', 'phone'],\n countryCode: storeCountryCode,\n currencyCode: code,\n merchantCapabilities,\n supportedNetworks,\n lineItems: [],\n total,\n };\n\n if (requiresShipping) {\n request.requiredShippingContactFields?.push('postalAddress');\n } else {\n const lineItems: ApplePayJS.ApplePayLineItem[] = [\n {\n label: this._subTotalLabel,\n amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n },\n ];\n\n checkout.taxes.forEach((tax) =>\n lineItems.push({\n label: tax.name,\n amount: `${tax.amount.toFixed(decimalPlaces)}`,\n }),\n );\n\n request.lineItems = lineItems;\n }\n\n return request;\n }\n\n private _handleApplePayEvents(\n applePaySession: ApplePaySession,\n paymentMethod: PaymentMethod,\n storeName: string,\n ) {\n applePaySession.onvalidatemerchant = async (event) => {\n try {\n const { body: merchantSession } = await this._onValidateMerchant(\n paymentMethod,\n event,\n );\n\n applePaySession.completeMerchantValidation(merchantSession);\n } catch (error) {\n throw new Error('Merchant validation failed');\n }\n };\n\n if (this._buyNowInitializeOptions && !this._requiresShipping) {\n applePaySession.onpaymentmethodselected = async () => {\n await this._createBuyNowCart();\n this._handlePaymentMethodSelected(applePaySession);\n };\n }\n\n applePaySession.onshippingcontactselected = async (event) => {\n if (this._buyNowInitializeOptions && this._requiresShipping) {\n await this._createBuyNowCart();\n }\n\n await this._handleShippingContactSelected(applePaySession, storeName, event);\n };\n\n applePaySession.onshippingmethodselected = async (event) => {\n await this._handleShippingMethodSelected(applePaySession, storeName, event);\n };\n\n applePaySession.oncancel = async () => {\n try {\n const url = `/remote-checkout/${paymentMethod.id}/signout`;\n\n await this._requestSender.get(url);\n\n return await this._paymentIntegrationService.loadCheckout();\n } catch (error) {\n throw new PaymentMethodCancelledError();\n }\n };\n\n applePaySession.onpaymentauthorized = async (event) =>\n this._onPaymentAuthorized(event, applePaySession, paymentMethod);\n }\n\n private async _createBuyNowCart() {\n try {\n const cartRequestBody = this._buyNowInitializeOptions?.getBuyNowCartRequestBody?.();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n const buyNowCart = await this._paymentIntegrationService.createBuyNowCart(\n cartRequestBody,\n );\n\n await this._paymentIntegrationService.loadCheckout(buyNowCart.id);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private _handlePaymentMethodSelected(applePaySession: ApplePaySession) {\n const state = this._paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const config = state.getStoreConfigOrThrow();\n const checkout = state.getCheckoutOrThrow();\n\n if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n\n delete request.total.type;\n\n applePaySession.completePaymentMethodSelection({\n newTotal: request.total,\n newLineItems: request.lineItems,\n });\n }\n\n private async _handleShippingContactSelected(\n applePaySession: ApplePaySession,\n storeName: string,\n event: ApplePayJS.ApplePayShippingContactSelectedEvent,\n ) {\n const shippingAddress = this._transformContactToAddress(event.shippingContact);\n\n try {\n await this._paymentIntegrationService.updateShippingAddress(shippingAddress);\n } catch (error) {\n applePaySession.abort();\n\n throw new Error('Shipping address update failed');\n }\n\n let state = this._paymentIntegrationService.getState();\n const {\n currency: { decimalPlaces },\n } = state.getCartOrThrow();\n let checkout = state.getCheckoutOrThrow();\n const selectionShippingOptionId = checkout.consignments[0].selectedShippingOption?.id;\n const availableOptions = checkout.consignments[0].availableShippingOptions;\n const selectedOption = availableOptions?.find(({ id }) => id === selectionShippingOptionId);\n const unselectedOptions = availableOptions?.filter(\n (option) => option.id !== selectionShippingOptionId,\n );\n const shippingOptions: ApplePayJS.ApplePayShippingMethod[] = selectedOption\n ? [\n {\n label: selectedOption.description,\n amount: `${selectedOption.cost.toFixed(decimalPlaces)}`,\n detail: selectedOption.additionalDescription,\n identifier: selectedOption.id,\n },\n ]\n : [];\n\n if (unselectedOptions) {\n [\n ...unselectedOptions.filter((option) => option.isRecommended),\n ...unselectedOptions.filter((option) => !option.isRecommended),\n ].forEach((option) =>\n shippingOptions.push({\n label: option.description,\n amount: `${option.cost.toFixed(decimalPlaces)}`,\n detail: option.additionalDescription,\n identifier: option.id,\n }),\n );\n }\n\n if (!isShippingOptions(availableOptions)) {\n throw new Error('Shipping options not available.');\n }\n\n if (availableOptions.length === 0) {\n applePaySession.completeShippingContactSelection(\n ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,\n [],\n {\n type: 'pending',\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n },\n [],\n );\n\n return;\n }\n\n const recommendedOption = availableOptions.find((option) => option.isRecommended);\n\n const optionId = recommendedOption ? recommendedOption.id : availableOptions[0].id;\n const selectedOptionId = selectedOption ? selectedOption.id : optionId;\n\n try {\n await this._updateShippingOption(selectedOptionId);\n } catch (error) {\n throw new Error('Shipping options update failed');\n }\n\n state = this._paymentIntegrationService.getState();\n checkout = state.getCheckoutOrThrow();\n\n applePaySession.completeShippingContactSelection({\n newShippingMethods: shippingOptions,\n newTotal: {\n type: 'final',\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n },\n newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n });\n }\n\n private async _handleShippingMethodSelected(\n applePaySession: ApplePaySession,\n storeName: string,\n event: ApplePayJS.ApplePayShippingMethodSelectedEvent,\n ) {\n const {\n shippingMethod: { identifier: optionId },\n } = event;\n\n try {\n await this._updateShippingOption(optionId);\n } catch (error) {\n applePaySession.abort();\n\n throw new Error('Shipping option selection update failed.');\n }\n\n const state = this._paymentIntegrationService.getState();\n const {\n currency: { decimalPlaces },\n } = state.getCartOrThrow();\n const checkout = state.getCheckoutOrThrow();\n\n applePaySession.completeShippingMethodSelection({\n newTotal: {\n type: 'final',\n label: storeName,\n amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n },\n newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n });\n }\n\n private _getUpdatedLineItems(\n checkout: Checkout,\n decimalPlaces: number,\n ): ApplePayJS.ApplePayLineItem[] {\n const lineItems: ApplePayJS.ApplePayLineItem[] = [\n {\n label: this._subTotalLabel,\n amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n },\n ];\n\n checkout.taxes.forEach((tax) =>\n lineItems.push({\n label: tax.name,\n amount: `${tax.amount.toFixed(decimalPlaces)}`,\n }),\n );\n lineItems.push({\n label: this._shippingLabel,\n amount: `${checkout.shippingCostTotal.toFixed(decimalPlaces)}`,\n });\n\n return lineItems;\n }\n\n private async _updateShippingOption(optionId: string) {\n return this._paymentIntegrationService.selectShippingOption(optionId);\n }\n\n private async _onValidateMerchant(\n paymentData: PaymentMethod,\n event: ApplePayJS.ApplePayValidateMerchantEvent,\n ) {\n const body = [\n `validationUrl=${event.validationURL}`,\n `merchantIdentifier=${paymentData.initializationData.merchantId}`,\n `displayName=${paymentData.initializationData.storeName}`,\n `domainName=${window.location.hostname}`,\n ].join('&');\n\n return this._requestSender.post(\n validationEndpoint(paymentData.initializationData.paymentsUrl),\n {\n credentials: false,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-XSRF-TOKEN': null,\n },\n body,\n },\n );\n }\n\n private async _onPaymentAuthorized(\n event: ApplePayJS.ApplePayPaymentAuthorizedEvent,\n applePaySession: ApplePaySession,\n paymentMethod: PaymentMethod,\n ) {\n const { token, billingContact, shippingContact } = event.payment;\n const state = this._paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const requiresShipping = cart.lineItems.physicalItems.length > 0;\n\n const payment: Payment = {\n methodId: paymentMethod.id,\n paymentData: {\n formattedPayload: {\n apple_pay_token: {\n payment_data: token.paymentData,\n payment_method: token.paymentMethod,\n transaction_id: token.transactionIdentifier,\n },\n },\n },\n };\n\n const transformedBillingAddress = this._transformContactToAddress(billingContact);\n const transformedShippingAddress = this._transformContactToAddress(shippingContact);\n const emailAddress = shippingContact?.emailAddress;\n const phone = shippingContact?.phoneNumber || '';\n\n try {\n await this._paymentIntegrationService.updateBillingAddress({\n ...transformedBillingAddress,\n email: emailAddress,\n phone,\n });\n\n if (requiresShipping) {\n await this._paymentIntegrationService.updateShippingAddress(\n transformedShippingAddress,\n );\n }\n\n await this._paymentIntegrationService.submitOrder({\n useStoreCredit: false,\n });\n\n await this._paymentIntegrationService.submitPayment(payment);\n applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n return this._onAuthorizeCallback();\n } catch (error) {\n applePaySession.completePayment(ApplePaySession.STATUS_FAILURE);\n\n throw new Error('Payment cannot complete');\n }\n }\n\n private _transformContactToAddress(\n contact?: ApplePayJS.ApplePayPaymentContact,\n ): AddressRequestBody {\n return {\n firstName: contact?.givenName || '',\n lastName: contact?.familyName || '',\n city: contact?.locality || '',\n company: '',\n address1: (contact?.addressLines && contact.addressLines[0]) || '',\n address2: (contact?.addressLines && contact.addressLines[1]) || '',\n postalCode: contact?.postalCode || '',\n countryCode: contact?.countryCode || '',\n phone: contact?.phoneNumber || '',\n stateOrProvince: contact?.administrativeArea || '',\n stateOrProvinceCode: contact?.administrativeArea || '',\n customFields: [],\n };\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ApplePayButtonStrategy from './apple-pay-button-strategy';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst createApplePayButtonStrategy: CheckoutButtonStrategyFactory = (\n paymentIntegrationService,\n) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new ApplePayButtonStrategy(\n createRequestSender({ host: getHost() }),\n paymentIntegrationService,\n new ApplePaySessionFactory(),\n );\n};\n\nexport default toResolvableModule(createApplePayButtonStrategy, [{ id: 'applepay' }]);\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"query-string\");","import StandardError from './standard-error';\n\n/**\n * Throw this error if we try to call a method that is only a stub and has not\n * been fully implemented.\n */\nexport default class NotImplementedError extends StandardError {\n constructor(message?: string) {\n super(message || 'Not implemented.');\n\n this.name = 'NotImplementedError';\n this.type = 'not_implemented';\n }\n}\n","import {\n BuyNowCartRequestBody,\n NonceInstrument,\n PaymentMethod,\n WithAccountCreation,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface BoltHostWindow extends Window {\n BoltCheckout?: BoltCheckout;\n BoltConnect?: BoltConnect;\n Bolt?(publicKey: string): BoltEmbedded;\n}\n\nexport interface BoltCheckout {\n configure(cart: BoltCart, hints: Record, callbacks?: BoltCallbacks): BoltClient;\n hasBoltAccount(email: string): Promise;\n getTransactionReference(): Promise;\n openCheckout(email: string, callbacks?: BoltOpenCheckoutCallbacks): Promise;\n setClientCustomCallbacks(callbacks: BoltCallbacks): void;\n setOrderId(orderId: number): Promise;\n}\n\nexport interface BoltConnect {\n setupProductPageCheckout?(): void;\n}\n\nexport interface BoltOpenCheckoutCallbacks {\n close?(): void;\n}\n\nexport interface BoltEmbeddedOptions {\n styles: { backgroundColor: string };\n renderSeparateFields?: boolean;\n}\n\nexport interface BoltEmbedded {\n create(name: string, options?: BoltEmbeddedOptions): BoltEmbededField;\n}\n\nexport interface BoltEmbededField {\n mount(element: string): void;\n unmount(): void;\n tokenize(): Promise;\n}\n\nexport interface BoltDeveloperModeParams {\n developerMode: BoltDeveloperMode;\n developerDomain: string;\n}\n\nexport enum BoltDeveloperMode {\n SandboxMode = 'bolt_sandbox',\n StagingMode = 'bolt_staging',\n DevelopmentMode = 'bolt_development',\n}\n\nexport interface BoltClient {\n open(): void;\n}\n\nexport interface BoltCart {\n orderToken: string;\n}\n\nexport interface BoltCallbacks {\n check?(): boolean;\n onCheckoutStart?(): void;\n onPaymentSubmit?(): void;\n success(transaction: BoltTransaction, callback: () => void): void;\n close?(): void;\n}\n\nexport interface BoltTransaction {\n id: string;\n type: string;\n processor: string;\n date: number;\n reference: string;\n status: string;\n authorization: BoltAuthorization;\n}\n\nexport interface BoltAuthorization {\n status: string;\n reason: string;\n}\n\nexport interface BoltEmbeddedTokenize {\n bin: string;\n expiration: string;\n last4: string;\n postal_code?: string;\n token: string;\n token_type: string;\n}\n\nexport interface BoltPaymentMethod extends PaymentMethod {\n initializationData?: BoltInitializationData;\n}\n\nexport interface BoltInitializationData {\n publishableKey: string;\n developerConfig: BoltDeveloperModeParams;\n embeddedOneClickEnabled: boolean;\n}\n\nexport type BoltPaymentData = WithAccountCreation & NonceInstrument;\n\nexport interface BoltBuyNowInitializeOptions {\n storefrontApiToken?: string;\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\nexport enum StyleButtonSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\nexport enum StyleButtonShape {\n Pill = 'pill',\n Rect = 'rect',\n}\n\nexport interface BoltButtonStyleOptions {\n shape?: StyleButtonShape;\n size?: StyleButtonSize;\n}\n","import { stringifyUrl } from 'query-string';\n\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n NotImplementedError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n BoltButtonStyleOptions,\n BoltHostWindow,\n BoltPaymentMethod,\n StyleButtonShape,\n StyleButtonSize,\n} from './bolt';\nimport { WithBoltButtonInitializeOptions } from './bolt-button-initialize-options';\nimport BoltScriptLoader from './bolt-script-loader';\n\nexport default class BoltButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private boltScriptLoader: BoltScriptLoader,\n public boltHostWindow: BoltHostWindow = window,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBoltButtonInitializeOptions,\n ): Promise {\n const { bolt, containerId, methodId } = options;\n const { buyNowInitializeOptions, style } = bolt || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!bolt) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.bolt\" argument is not provided.`,\n );\n }\n\n const isBuyNowFlow = Boolean(buyNowInitializeOptions);\n\n if (!isBuyNowFlow) {\n throw new NotImplementedError('Only buy now flow is implemented for Bolt button');\n }\n\n if (\n !buyNowInitializeOptions?.storefrontApiToken ||\n typeof buyNowInitializeOptions.storefrontApiToken !== 'string'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.`,\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod: BoltPaymentMethod = state.getPaymentMethodOrThrow(methodId);\n const { initializationData, config } = paymentMethod;\n const { publishableKey, developerConfig } = initializationData || {};\n\n await this.boltScriptLoader.loadBoltClient(\n publishableKey,\n config.testMode,\n developerConfig,\n 'BigCommerce',\n buyNowInitializeOptions.storefrontApiToken,\n );\n\n this.renderButton(containerId, paymentMethod, style);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n paymentMethod: BoltPaymentMethod,\n style?: BoltButtonStyleOptions,\n ): void {\n if (typeof this.boltHostWindow.BoltConnect?.setupProductPageCheckout !== 'function') {\n return;\n }\n\n this.addButtonContainer(containerId, paymentMethod, style);\n this.boltHostWindow.BoltConnect.setupProductPageCheckout();\n }\n\n private addButtonContainer(\n containerId: string,\n paymentMethod: BoltPaymentMethod,\n style?: BoltButtonStyleOptions,\n ): void {\n const container = document.getElementById(containerId);\n\n if (!container) {\n return;\n }\n\n const boltButtonContainer = document.createElement('div');\n const boltButtonObject = document.createElement('object');\n\n boltButtonContainer.setAttribute('id', 'product-page-checkout-wrapper');\n boltButtonContainer.setAttribute('class', 'bolt-button-wrapper');\n boltButtonContainer.setAttribute('style', 'display:none');\n boltButtonContainer.setAttribute('data-tid', 'product-page-checkout-wrapper');\n\n boltButtonObject.setAttribute('data', this.getBoltObjectData(paymentMethod, style));\n boltButtonObject.setAttribute('class', 'bolt-product-checkout-button');\n\n boltButtonContainer.append(boltButtonObject);\n container.innerHTML = '';\n container.append(boltButtonContainer);\n }\n\n private getBoltObjectData(\n paymentMethod: BoltPaymentMethod,\n style?: BoltButtonStyleOptions,\n ): string {\n const { initializationData, config } = paymentMethod;\n const { publishableKey, developerConfig } = initializationData || {};\n\n const domainUrl = this.boltScriptLoader.getDomainURL(!!config.testMode, developerConfig);\n const buttonHeight = this.getButtonHeight(style?.size);\n const buttonBorderRadius = this.getButtonBorderRadius(style?.shape, buttonHeight);\n\n return stringifyUrl({\n url: `https://${domainUrl}/v1/checkout_button`,\n query: {\n publishable_key: publishableKey,\n variant: 'ppc',\n height: buttonHeight,\n border_radius: buttonBorderRadius,\n },\n });\n }\n\n private getButtonHeight(buttonSize?: StyleButtonSize): number | undefined {\n if (!buttonSize) {\n return;\n }\n\n switch (buttonSize) {\n case StyleButtonSize.Small:\n return 25;\n\n case StyleButtonSize.Large:\n return 45;\n\n case StyleButtonSize.Medium:\n default:\n return 40;\n }\n }\n\n private getButtonBorderRadius(\n buttonShape?: StyleButtonShape,\n buttonHeight?: number,\n ): number | undefined {\n if (!buttonShape) {\n return;\n }\n\n switch (buttonShape) {\n case StyleButtonShape.Pill:\n return buttonHeight ? Math.round(buttonHeight / 2) : undefined;\n\n case StyleButtonShape.Rect:\n default:\n return 4;\n }\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the client library of a payment method fails\n * to load, or for some reason, it is inaccessible.\n */\nexport default class PaymentMethodClientUnavailableError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n );\n\n this.name = 'PaymentMethodClientUnavailableError';\n this.type = 'payment_method_client_unavailable';\n }\n}\n","import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n InvalidArgumentError,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n BoltCheckout,\n BoltDeveloperMode,\n BoltDeveloperModeParams,\n BoltEmbedded,\n BoltHostWindow,\n} from './bolt';\n\nexport default class BoltScriptLoader {\n constructor(\n private scriptLoader: ScriptLoader,\n public boltHostWindow: BoltHostWindow = window,\n ) {}\n\n async loadBoltClient(\n publishableKey?: string,\n testMode?: boolean,\n developerModeParams?: BoltDeveloperModeParams,\n cartId?: string,\n storefrontApiToken?: string,\n ): Promise {\n if (this.boltHostWindow.BoltCheckout) {\n return this.boltHostWindow.BoltCheckout;\n }\n\n if (!publishableKey) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"publishableKey\" argument is not provided.',\n );\n }\n\n await this.scriptLoader.loadScript(\n `//${this.getDomainURL(!!testMode, developerModeParams)}/connect-bigcommerce.js`,\n this.getScriptOptions('bolt-connect', publishableKey, cartId, storefrontApiToken),\n );\n await this.scriptLoader.loadScript(\n `//${this.getDomainURL(!!testMode, developerModeParams)}/track.js`,\n this.getScriptOptions('bolt-track', publishableKey),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!this.boltHostWindow.BoltCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.boltHostWindow.BoltCheckout;\n }\n\n async loadBoltEmbedded(\n publishableKey: string,\n testMode?: boolean,\n developerModeParams?: BoltDeveloperModeParams,\n ): Promise {\n const options: LoadScriptOptions = {\n async: true,\n attributes: {\n id: 'bolt-embedded',\n },\n };\n\n await this.scriptLoader.loadScript(\n `//${this.getDomainURL(!!testMode, developerModeParams)}/embed.js`,\n options,\n );\n\n if (!this.boltHostWindow.Bolt) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.boltHostWindow.Bolt(publishableKey);\n }\n\n getDomainURL(testMode: boolean, developerModeParams?: BoltDeveloperModeParams): string {\n if (!testMode) {\n return 'connect.bolt.com';\n }\n\n if (developerModeParams) {\n switch (developerModeParams.developerMode) {\n case BoltDeveloperMode.StagingMode:\n return 'connect-staging.bolt.com';\n\n case BoltDeveloperMode.DevelopmentMode:\n return `connect.${developerModeParams.developerDomain}`;\n }\n }\n\n return 'connect-sandbox.bolt.com';\n }\n\n private getScriptOptions(\n id: string,\n publishableKey: string,\n cartId?: string,\n storefrontApiToken?: string,\n ): LoadScriptOptions {\n return {\n async: true,\n attributes: {\n id,\n 'data-publishable-key': publishableKey,\n ...(cartId && { 'data-shopping-cart-id': cartId }),\n ...(storefrontApiToken && { 'data-storefront-api-token': storefrontApiToken }),\n },\n };\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BoltButtonStrategy from './bolt-button-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\n\nconst createBoltButtonStrategy: CheckoutButtonStrategyFactory = (\n paymentIntegrationService,\n) => {\n return new BoltButtonStrategy(\n paymentIntegrationService,\n new BoltScriptLoader(getScriptLoader()),\n );\n};\n\nexport default toResolvableModule(createBoltButtonStrategy, [{ id: 'bolt' }]);\n","export enum CartSource {\n BuyNow = 'BUY_NOW',\n}\n","import {\n BuyNowCartRequestBody,\n HostedInstrument,\n ShippingOption,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Commerce Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n CARD: string;\n PAYPAL: string;\n CREDIT: string;\n PAYLATER: string;\n OXXO: string;\n SEPA: string;\n VENMO: string;\n}\n\n/**\n *\n * PayPal Commerce SDK\n *\n */\nexport interface PayPalSDK {\n FUNDING: PayPalCommerceSDKFunding;\n HostedFields: {\n isEligible(): boolean;\n render(data: PayPalCommerceHostedFieldsRenderOptions): Promise;\n };\n Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\n PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\n Messages(options: PayPalCommerceMessagesOptions): PayPalCommerceMessages;\n}\n\nexport interface PayPalCommerceScriptParams {\n 'client-id'?: string;\n 'merchant-id'?: string;\n 'buyer-country'?: string;\n 'disable-funding'?: FundingType;\n 'enable-funding'?: EnableFundingType;\n 'data-client-token'?: string;\n 'data-partner-attribution-id'?: string;\n currency?: string;\n commit?: boolean;\n intent?: PayPalCommerceIntent;\n components?: ComponentsScriptType;\n}\n\nexport enum PayPalCommerceIntent {\n AUTHORIZE = 'authorize',\n CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n 'buttons' | 'funding-eligibility' | 'hosted-fields' | 'messages' | 'payment-fields'\n>;\n\nexport interface PayPalCommerceHostWindow extends Window {\n paypal?: PayPalSDK;\n paypalLoadScript?(options: PayPalCommerceScriptParams): Promise<{ paypal: PayPalSDK }>;\n}\n\n/**\n *\n * PayPal Commerce Initialization Data\n *\n */\nexport interface PayPalCommerceInitializationData {\n attributionId?: string;\n availableAlternativePaymentMethods: FundingType;\n buttonStyle?: PayPalButtonStyleOptions;\n buyerCountry?: string;\n clientId: string;\n clientToken?: string;\n enabledAlternativePaymentMethods: FundingType;\n isDeveloperModeApplicable?: boolean;\n intent?: PayPalCommerceIntent;\n isHostedCheckoutEnabled?: boolean;\n isPayPalCreditAvailable?: boolean;\n isVenmoEnabled?: boolean;\n merchantId?: string;\n orderId?: string;\n shouldRenderFields?: boolean;\n}\n\n/**\n *\n * PayPal Commerce BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Commerce Hosted Fields\n *\n */\nexport interface PayPalCommerceHostedFieldsRenderOptions {\n fields?: {\n number?: PayPalCommerceHostedFieldOption;\n cvv?: PayPalCommerceHostedFieldOption;\n expirationDate?: PayPalCommerceHostedFieldOption;\n };\n paymentsSDK?: boolean;\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n createOrder(): Promise;\n}\n\nexport interface PayPalCommerceHostedFieldOption {\n selector: string;\n placeholder?: string;\n}\n\nexport interface PayPalCommerceHostedFields {\n submit(\n options?: PayPalCommerceHostedFieldsSubmitOptions,\n ): Promise;\n getState(): PayPalCommerceHostedFieldsState;\n on(eventName: string, callback: (event: PayPalCommerceHostedFieldsState) => void): void;\n}\n\nexport interface PayPalCommerceHostedFieldsSubmitOptions {\n contingencies?: Array<'3D_SECURE'>;\n cardholderName?: string;\n}\n\nexport interface PayPalCommerceHostedFieldsApprove {\n orderId: string;\n liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalCommerceHostedFieldsState {\n cards: PayPalCommerceHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: PayPalCommerceHostedFieldsFieldData;\n expirationDate?: PayPalCommerceHostedFieldsFieldData;\n expirationMonth?: PayPalCommerceHostedFieldsFieldData;\n expirationYear?: PayPalCommerceHostedFieldsFieldData;\n cvv?: PayPalCommerceHostedFieldsFieldData;\n postalCode?: PayPalCommerceHostedFieldsFieldData;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsCard {\n type: string;\n niceType: string;\n code: {\n name: string;\n size: number;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\n/**\n *\n * PayPal Commerce Buttons\n *\n */\nexport interface PayPalCommerceButtons {\n render(id: string): void;\n close(): void;\n isEligible(): boolean;\n}\n\nexport interface PayPalCommerceButtonsOptions {\n experience?: string;\n style?: PayPalButtonStyleOptions;\n fundingSource: string;\n createOrder(): Promise;\n onApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ): Promise | void;\n onComplete?(data: CompleteCallbackDataPayload): Promise;\n onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise;\n onError?(error: Error): void;\n onCancel?(): void;\n onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise;\n onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n reject(): void;\n resolve(): void;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n orderId: string;\n shippingAddress: PayPalAddress;\n}\n\nexport interface PayPalAddress {\n city: string;\n country_code: string;\n postal_code: string;\n state: string;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n orderId: string;\n selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface PayPalSelectedShippingOption {\n amount: {\n currency_code: string;\n value: string;\n };\n id: string;\n label: string;\n selected: boolean;\n type: string;\n}\n\nexport interface ApproveCallbackPayload {\n orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n order: {\n get: () => Promise;\n };\n}\n\nexport interface PayPalOrderDetails {\n payer: {\n name: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n address: PayPalOrderAddress;\n };\n purchase_units: Array<{\n shipping: {\n address: PayPalOrderAddress;\n };\n }>;\n}\n\nexport interface PayPalOrderAddress {\n address_line_1: string;\n admin_area_2: string;\n admin_area_1?: string;\n postal_code: string;\n country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n intent: string;\n orderID: string;\n}\n\nexport enum StyleButtonLabel {\n paypal = 'paypal',\n checkout = 'checkout',\n buynow = 'buynow',\n pay = 'pay',\n installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n gold = 'gold',\n blue = 'blue',\n silver = 'silver',\n black = 'black',\n white = 'white',\n}\n\nexport enum StyleButtonShape {\n pill = 'pill',\n rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n color?: StyleButtonColor;\n shape?: StyleButtonShape;\n height?: number;\n label?: StyleButtonLabel;\n}\n\n/**\n *\n * PayPal Commerce Payment fields\n *\n */\nexport interface PayPalCommercePaymentFields {\n render(id: string): void;\n}\n\nexport interface PayPalCommercePaymentFieldsOptions {\n style?: PayPalCommerceFieldsStyleOptions;\n fundingSource: string;\n fields: {\n name?: {\n value?: string;\n };\n email?: {\n value?: string;\n };\n };\n}\n\nexport interface PayPalCommerceFieldsStyleOptions {\n variables?: {\n fontFamily?: string;\n fontSizeBase?: string;\n fontSizeSm?: string;\n fontSizeM?: string;\n fontSizeLg?: string;\n textColor?: string;\n colorTextPlaceholder?: string;\n colorBackground?: string;\n colorInfo?: string;\n colorDanger?: string;\n borderRadius?: string;\n borderColor?: string;\n borderWidth?: string;\n borderFocusColor?: string;\n spacingUnit?: string;\n };\n rules?: {\n [key: string]: any;\n };\n}\n\n/**\n *\n * PayPalCommerce Messages\n *\n */\nexport interface PayPalCommerceMessages {\n render(id: string): void;\n}\n\nexport interface PayPalCommerceMessagesOptions {\n amount: number;\n placement: string;\n style?: PayPalCommerceMessagesStyleOptions;\n fundingSource?: string;\n}\n\nexport interface PayPalCommerceMessagesStyleOptions {\n layout?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n OXXO = 'oxxo',\n}\n\nexport interface PayPalOrderData {\n orderId: string;\n approveUrl: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n availableShippingOptions?: ShippingOption[];\n cartId: string;\n selectedShippingOption?: ShippingOption;\n}\n\nexport interface PayPalUpdateOrderResponse {\n statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n cartId: string;\n}\n\nexport enum PayPalOrderStatus {\n Approved = 'APPROVED',\n Created = 'CREATED',\n PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n}\n\nexport interface PayPalOrderStatusData {\n status: PayPalOrderStatus;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n BillingAddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n CartSource,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n RequestError,\n ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceInitializationData,\n PayPalCreateOrderRequestBody,\n PayPalOrderDetails,\n PayPalOrderStatus,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceIntegrationService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private formPoster: FormPoster,\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n methodId: string,\n providedCurrencyCode?: string,\n initializesOnCheckoutPage?: boolean,\n ): Promise {\n const state = this.paymentIntegrationService.getState();\n const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n const paymentMethod =\n state.getPaymentMethodOrThrow(methodId);\n\n this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n paymentMethod,\n currencyCode,\n initializesOnCheckoutPage,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Buy Now cart creation methods\n *\n */\n async createBuyNowCartOrThrow(\n buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n ): Promise {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n /**\n *\n * Order methods\n *\n */\n async createOrder(\n providerId: string,\n requestBody?: Partial,\n ): Promise {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId } = await this.paypalCommerceRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return orderId;\n }\n\n async updateOrder(): Promise {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n try {\n await this.paypalCommerceRequestSender.updateOrder({\n availableShippingOptions: consignment.availableShippingOptions,\n cartId: cart.id,\n selectedShippingOption: consignment.selectedShippingOption,\n });\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n async getOrderStatus(): Promise {\n try {\n const { status } = await this.paypalCommerceRequestSender.getOrderStatus();\n\n return status;\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n tokenizePayment(methodId: string, orderId?: string): void {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n action: 'set_external_checkout',\n provider: methodId,\n order_id: orderId,\n ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n });\n }\n\n async submitPayment(methodId: string, orderId: string): Promise {\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: methodId,\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitPayment({ methodId, paymentData });\n }\n\n /**\n *\n * Shipping options methods\n *\n */\n getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n const state = this.paymentIntegrationService.getState();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n const availableShippingOptions = consignment.availableShippingOptions || [];\n\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n const selectedShippingOption = selectedShippingOptionId\n ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n : availableShippingOptions.find(\n (option) => option.id === consignment.selectedShippingOption?.id,\n );\n\n const shippingOptionToSelect =\n selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n if (!shippingOptionToSelect) {\n throw new Error(\"Your order can't be shipped to this address\");\n }\n\n return shippingOptionToSelect;\n }\n\n /**\n *\n * Address transforming methods\n *\n */\n getAddress(address?: Partial): BillingAddressRequestBody {\n return {\n firstName: address?.firstName || '',\n lastName: address?.lastName || '',\n email: address?.email || '',\n phone: '',\n company: '',\n address1: address?.address1 || '',\n address2: '',\n city: address?.city || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n stateOrProvince: '',\n stateOrProvinceCode: address?.stateOrProvinceCode || '',\n customFields: [],\n };\n }\n\n getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: payer.address.address_line_1,\n city: payer.address.admin_area_2,\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n stateOrProvinceCode: payer.address.admin_area_1,\n });\n }\n\n getShippingAddressFromOrderDetails(\n orderDetails: PayPalOrderDetails,\n ): BillingAddressRequestBody {\n const { payer, purchase_units } = orderDetails;\n const shippingAddress = purchase_units[0]?.shipping?.address || {};\n\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: shippingAddress.address_line_1,\n city: shippingAddress.admin_area_2,\n countryCode: shippingAddress.country_code,\n postalCode: shippingAddress.postal_code,\n stateOrProvinceCode: shippingAddress.admin_area_1,\n });\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style || {};\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n}\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\n","enum ContentType {\n Json = 'application/json',\n JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n","export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCreateOrderRequestBody,\n PayPalOrderData,\n PayPalOrderStatusData,\n PayPalUpdateOrderRequestBody,\n PayPalUpdateOrderResponse,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async createOrder(\n providerId: string,\n requestBody: Partial,\n ): Promise {\n const url = `/api/storefront/payment/${providerId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.post(url, { headers, body });\n\n return res.body;\n }\n\n async updateOrder(\n requestBody: PayPalUpdateOrderRequestBody,\n ): Promise {\n const url = `/api/storefront/initialization/paypalcommerce`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.put(url, { headers, body });\n\n return res.body;\n }\n\n async getOrderStatus(): Promise {\n const url = '/api/storefront/initialization/paypalcommerce';\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.get(url, { headers });\n\n return res.body;\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n FundingType,\n PayPalCommerceHostWindow,\n PayPalCommerceInitializationData,\n PayPalCommerceScriptParams,\n PayPalSDK,\n} from './paypal-commerce-types';\n\nconst PAYPAL_SDK_VERSION = '5.0.5';\n\nexport default class PayPalCommerceScriptLoader {\n private window: PayPalCommerceHostWindow;\n private paypalSdk?: PayPalSDK;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async getPayPalSDK(\n paymentMethod: PaymentMethod,\n currencyCode: string,\n initializesOnCheckoutPage?: boolean,\n ): Promise {\n if (!this.paypalSdk) {\n this.paypalSdk = await this.loadPayPalSDK(\n this.getPayPalSdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n initializesOnCheckoutPage,\n ),\n );\n }\n\n return this.paypalSdk;\n }\n\n private async loadPayPalSDK(\n paypalSdkScriptConfig: PayPalCommerceScriptParams,\n ): Promise {\n if (!this.window.paypalLoadScript) {\n const scriptSrc = `https://unpkg.com/@paypal/paypal-js@${PAYPAL_SDK_VERSION}/dist/iife/paypal-js.min.js`;\n\n await this.scriptLoader.loadScript(scriptSrc, { async: true, attributes: {} });\n\n if (!this.window.paypalLoadScript) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n await this.window.paypalLoadScript(paypalSdkScriptConfig);\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypal;\n }\n\n private getPayPalSdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod,\n currencyCode: string,\n initializesOnCheckoutPage = true,\n ): PayPalCommerceScriptParams {\n const { id, clientToken, initializationData } = paymentMethod;\n\n if (!initializationData?.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isVenmoEnabled,\n isHostedCheckoutEnabled,\n isPayPalCreditAvailable,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const shouldEnableCard = id === 'paypalcommercecreditcards';\n const enableCardFunding = shouldEnableCard ? ['card'] : [];\n const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n const shouldEnableAPMs = initializesOnCheckoutPage || !commit;\n const enableVenmoFunding = shouldEnableAPMs && isVenmoEnabled ? ['venmo'] : [];\n const disableVenmoFunding = !shouldEnableAPMs || !isVenmoEnabled ? ['venmo'] : [];\n const enableAPMsFunding = shouldEnableAPMs ? enabledAlternativePaymentMethods : [];\n const disableAPMsFunding = shouldEnableAPMs\n ? availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n )\n : availableAlternativePaymentMethods;\n\n const disableFunding: FundingType = [\n ...disableCardFunding,\n ...disableCreditFunding,\n ...disableVenmoFunding,\n ...disableAPMsFunding,\n ];\n const enableFunding: FundingType = [\n ...enableCardFunding,\n ...enableCreditFunding,\n ...enableVenmoFunding,\n ...enableAPMsFunding,\n ];\n\n return {\n 'client-id': clientId,\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n 'merchant-id': merchantId,\n 'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n 'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n commit,\n components: ['buttons', 'hosted-fields', 'messages', 'payment-fields'],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n };\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCommerceIntegrationService,\n PayPalCommerceRequestSender,\n PayPalCommerceScriptLoader,\n} from './index';\n\nconst createPayPalCommerceIntegrationService = (\n paymentIntegrationService: PaymentIntegrationService,\n) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PayPalCommerceIntegrationService(\n createFormPoster(),\n paymentIntegrationService,\n new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n new PayPalCommerceScriptLoader(getScriptLoader()),\n );\n};\n\nexport default createPayPalCommerceIntegrationService;\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceButtonInitializeOptions, {\n WithPayPalCommerceButtonInitializeOptions,\n} from './paypal-commerce-button-initialize-options';\n\nexport default class PayPalCommerceButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions,\n ): Promise {\n const { paypalcommerce, containerId, methodId } = options;\n\n const isBuyNowFlow = Boolean(paypalcommerce?.buyNowInitializeOptions);\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !paypalcommerce.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof paypalcommerce.buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? paypalcommerce.currencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommerce);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommerce: PayPalCommerceButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete } = paypalcommerce;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow(methodId);\n const { isHostedCheckoutEnabled } = paymentMethod.initializationData || {};\n\n const defaultCallbacks = {\n createOrder: () => this.paypalCommerceIntegrationService.createOrder('paypalcommerce'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const hostedCheckoutCallbacks = {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(data, actions, methodId, onComplete),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n ): Promise {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const orderDetails = await actions.order.get();\n\n try {\n const billingAddress =\n this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (cart.lineItems.physicalItems.length > 0) {\n const shippingAddress =\n this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n await this.paypalCommerceIntegrationService.updateOrder();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n\n return true; // FIXME: Do we really need to return true here?\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise {\n const address = this.paypalCommerceIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.country_code,\n postalCode: data.shippingAddress.postal_code,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise {\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\nconst createPayPalCommerceButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceButtonStrategy, [{ id: 'paypalcommerce' }]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditButtonInitializeOptions, {\n WithPayPalCommerceCreditButtonInitializeOptions,\n} from './paypal-commerce-credit-button-initialize-options';\n\nexport default class PayPalCommerceCreditButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions,\n ): Promise {\n const { paypalcommercecredit, containerId, methodId } = options;\n const {\n buyNowInitializeOptions,\n currencyCode: providedCurrencyCode,\n messagingContainerId,\n } = paypalcommercecredit || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercecredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercecredit);\n this.renderMessages(messagingContainerId);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercecredit: PayPalCommerceCreditButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete } = paypalcommercecredit;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow(methodId);\n const { isHostedCheckoutEnabled } = paymentMethod.initializationData || {};\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercecredit'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const hostedCheckoutCallbacks = {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(data, actions, methodId, onComplete),\n };\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n ): Promise {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const orderDetails = await actions.order.get();\n\n try {\n const billingAddress =\n this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (cart.lineItems.physicalItems.length > 0) {\n const shippingAddress =\n this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n await this.paypalCommerceIntegrationService.updateOrder();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n\n return true; // FIXME: Do we really need to return true here?\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise {\n const address = this.paypalCommerceIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.country_code,\n postalCode: data.shippingAddress.postal_code,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise {\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n throw new Error(error);\n }\n }\n\n private renderMessages(messagingContainerId?: string): void {\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n\n if (messagingContainerId && document.getElementById(messagingContainerId)) {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n const paypalMessagesOptions = {\n amount: cart.cartAmount,\n placement: 'cart',\n style: {\n layout: 'text',\n },\n };\n\n const paypalMessages = paypalSdk.Messages(paypalMessagesOptions);\n\n paypalMessages.render(`#${messagingContainerId}`);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\nconst createPayPalCommerceCreditButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceCreditButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditButtonStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoButtonInitializeOptions, {\n WithPayPalCommerceVenmoButtonInitializeOptions,\n} from './paypal-commerce-venmo-button-initialize-options';\n\nexport default class PayPalCommerceVenmoButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions,\n ): Promise {\n const { paypalcommercevenmo, containerId, methodId } = options;\n const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n paypalcommercevenmo || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercevenmo);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style } = paypalcommercevenmo;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const fundingSource = paypalSdk.FUNDING.VENMO;\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.getValidVenmoButtonStyles(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n const validButtonStyle = this.paypalCommerceIntegrationService.getValidButtonStyle(style);\n\n if (validButtonStyle.color === StyleButtonColor.gold) {\n return {\n ...validButtonStyle,\n color: undefined,\n };\n }\n\n return validButtonStyle;\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\nconst createPayPalCommerceVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceVenmoButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoButtonStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceAlternativeMethodsButtonOptions, {\n WithPayPalCommerceAlternativeMethodsButtonInitializeOptions,\n} from './paypal-commerce-alternative-methods-button-initialize-options';\n\nexport default class PayPalCommerceAlternativeMethodsButtonStrategy\n implements CheckoutButtonStrategy\n{\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions &\n WithPayPalCommerceAlternativeMethodsButtonInitializeOptions,\n ): Promise {\n const { paypalcommercealternativemethods, containerId, methodId } = options;\n const {\n apm,\n buyNowInitializeOptions,\n currencyCode: providedCurrencyCode,\n } = paypalcommercealternativemethods || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercealternativemethods) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.`,\n );\n }\n\n if (!apm) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods.apm\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercealternativemethods);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercealternativemethods: PayPalCommerceAlternativeMethodsButtonOptions,\n ): void {\n const { apm, buyNowInitializeOptions, style } = paypalcommercealternativemethods;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const isAvailableFundingSource = Object.values(paypalSdk.FUNDING).includes(apm);\n\n if (!isAvailableFundingSource) {\n throw new InvalidArgumentError(\n `Unable to initialize PayPal button because \"options.paypalcommercealternativemethods.apm\" argument is not valid funding source.`,\n );\n }\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder(\n 'paypalcommercealternativemethod',\n ),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: apm,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceAlternativeMethodsButtonStrategy from './paypal-commerce-alternative-methods-button-strategy';\n\nconst createPayPalCommerceAlternativeMethodsButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceAlternativeMethodsButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceAlternativeMethodsButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceAlternativeMethodsButtonStrategy, [\n { id: 'paypalcommercealternativemethods' },\n]);\n","export interface PaypalFundingTypeList {\n CARD?: string;\n CREDIT?: string;\n PAYPAL?: string;\n PAYLATER?: string;\n}\n\nexport interface PaypalButton {\n render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalButtonRender {\n render(container: string): void;\n isEligible(): boolean;\n}\n\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface MessagingOptions {\n amount: number;\n placement: string;\n}\n\nexport interface PaypalButtonOptions {\n env?: string;\n commit?: boolean;\n style?: PaypalStyleOptions;\n funding?: PaypalFundingType;\n fundingSource?: string;\n client?: PaypalClientToken;\n payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise;\n}\n\nexport interface PaypalClientToken {\n production?: string;\n sandbox?: string;\n}\n\nexport interface PaypalFundingType {\n allowed?: string[];\n disallowed?: string[];\n}\n\nexport enum PaypalButtonStyleLayoutOption {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical',\n}\n\nexport enum PaypalButtonStyleSizeOption {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n RESPONSIVE = 'responsive',\n}\n\nexport enum PaypalButtonStyleColorOption {\n GOLD = 'gold',\n BLUE = 'blue',\n SIlVER = 'silver',\n BLACK = 'black',\n}\n\nexport enum PaypalButtonStyleLabelOption {\n CHECKOUT = 'checkout',\n PAY = 'pay',\n BUYNOW = 'buynow',\n PAYPAL = 'paypal',\n CREDIT = 'credit',\n}\n\nexport enum PaypalButtonStyleShapeOption {\n PILL = 'pill',\n RECT = 'rect',\n}\n\nexport interface PaypalStyleOptions {\n layout?: PaypalButtonStyleLayoutOption;\n size?: PaypalButtonStyleSizeOption;\n color?: PaypalButtonStyleColorOption;\n label?: PaypalButtonStyleLabelOption;\n shape?: PaypalButtonStyleShapeOption;\n tagline?: boolean;\n fundingicons?: boolean;\n height?: number;\n}\n\nexport interface PaypalActions {\n payment: PaypalPaymentActions;\n request: PaypalRequestActions;\n}\n\nexport interface PaypalPaymentActions {\n get(id: string): Promise;\n}\n\nexport interface PaypalRequestActions {\n post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface PaypalTransaction {\n amount?: PaypalAmount;\n payee?: PaypalPayee;\n description?: string;\n note_to_payee?: string;\n item_list?: PaypalItemList;\n}\n\nexport interface PaypalItemList {\n items?: PaypalItem[];\n shipping_address?: PaypalAddress;\n}\n\nexport interface PaypalItem {\n sku?: string;\n name?: string;\n description?: string;\n quantity: string;\n price: string;\n currency: string;\n tax?: string;\n}\n\nexport interface PaypalAmount {\n currency: string;\n total: string;\n}\n\nexport interface PaypalPayer {\n payer_info: object;\n}\n\nexport interface PaypalPayee {\n email?: string;\n merchant_id?: string;\n}\n\nexport interface PaypalAddress {\n line1: string;\n line2?: string;\n city?: string;\n country_code: string;\n postal_code?: string;\n state?: string;\n phone?: string;\n type?: string;\n}\n\nexport interface PaypalPaymentPayload {\n payment: PaypalPaymentPayload;\n payer: PaypalPayer;\n transactions?: PaypalTransaction[];\n}\n\nexport interface PaypalAuthorizeData {\n payerId: string;\n paymentId?: string;\n billingToken?: string;\n // the PayPal side of things uses uppercase ID instead of camel case Id\n payerID?: string;\n paymentID?: string;\n}\n\nexport interface PaypalExpressCheckout {\n initXO(): void;\n startFlow(url: string): void;\n closeFlow(): void;\n setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\n}\n\nexport interface PaypalExpressCheckoutOptions {\n button: string;\n environment: string;\n}\n\nexport interface PaypalHostWindow extends Window {\n paypal?: PaypalSDK;\n}\n\nexport interface PaypalSDK {\n Button: PaypalButton;\n checkout: PaypalExpressCheckout;\n FUNDING: PaypalFundingTypeList;\n Messages(options: MessagingOptions): MessagingRender;\n Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n INTERNAL_USE_ONLY,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n PaymentIntegrationService,\n SDK_VERSION_HEADERS,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithPaypalExpressButtonInitializeOptions } from './paypal-express-button-initialize-options';\nimport PaypalScriptLoader from './paypal-express-script-loader';\nimport {\n PaypalActions,\n PaypalAuthorizeData,\n PaypalButtonStyleShapeOption,\n PaypalButtonStyleSizeOption,\n PaypalClientToken,\n PaypalSDK,\n PaypalStyleOptions,\n} from './paypal-express-types';\n\nexport default class PaypalButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalExpressScriptLoader: PaypalScriptLoader,\n private formPoster: FormPoster,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions,\n ): Promise {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n if (!options.paypal) {\n throw new InvalidArgumentError();\n }\n\n if (!paymentMethod.config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalSDK = await this.paypalExpressScriptLoader.loadPaypalSDK(\n paymentMethod.config.merchantId,\n );\n\n this.renderButton(options, paypalSDK);\n }\n\n deinitialize(): Promise {\n return Promise.resolve();\n }\n\n private renderButton(\n options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions,\n paypalSDK: PaypalSDK,\n ) {\n const { containerId, methodId, paypal } = options;\n const { allowCredit, clientId, onPaymentError, shouldProcessPayment, style } = paypal;\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n if (!paymentMethod.config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const merchantId = paymentMethod.config.merchantId;\n const env = paymentMethod.config.testMode ? 'sandbox' : 'production';\n const clientToken: PaypalClientToken = { [env]: clientId };\n const fundingCreditOption = paypalSDK.FUNDING.CREDIT || 'credit';\n const allowedSources = allowCredit ? [fundingCreditOption] : [];\n const disallowedSources = !allowCredit ? [fundingCreditOption] : [];\n\n return paypalSDK.Button.render(\n {\n env,\n client: clientToken,\n commit: shouldProcessPayment,\n funding: {\n allowed: allowedSources,\n disallowed: disallowedSources,\n },\n style: this.getStyle(style),\n payment: (_, actions) => this.setupPayment(merchantId, actions, onPaymentError),\n onAuthorize: (data, actions) =>\n this.tokenizePayment(data, methodId, actions, shouldProcessPayment),\n },\n containerId,\n );\n }\n\n private getStyle(style?: Omit): PaypalStyleOptions {\n const { color, fundingicons, label, layout, shape, size, tagline } = style || {};\n\n return {\n color,\n fundingicons,\n label,\n layout,\n shape: shape || PaypalButtonStyleShapeOption.RECT,\n size: size === 'small' ? PaypalButtonStyleSizeOption.RESPONSIVE : size,\n tagline,\n };\n }\n\n private async setupPayment(\n merchantId: string,\n actions?: PaypalActions,\n onError?: (error: StandardError) => void,\n ): Promise {\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n try {\n const state = await this.paymentIntegrationService.loadDefaultCheckout();\n const { id: cartId } = state.getCartOrThrow();\n const host = state.getHost() || '';\n\n const paymentRequest = await actions.request.post(\n `${host}/api/storefront/payment/paypalexpress`,\n { merchantId, cartId },\n {\n headers: {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n ...SDK_VERSION_HEADERS,\n },\n },\n );\n\n return paymentRequest.id;\n } catch (error) {\n if (onError) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n data: PaypalAuthorizeData,\n methodId: string,\n actions?: PaypalActions,\n shouldProcessPayment?: boolean,\n ): Promise {\n if (!actions) {\n throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n }\n\n if (!data.paymentID || !data.payerID) {\n throw new MissingDataError(MissingDataErrorType.MissingPayment);\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n const getPaymentData = await actions.payment.get(data.paymentID);\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: paymentMethod.id,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n paymentId: data.paymentID,\n payerId: data.payerID,\n payerInfo: JSON.stringify(getPaymentData.payer.payer_info),\n });\n }\n}\n","import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalHostWindow, PaypalSDK } from './paypal-express-types';\n\nexport default class PaypalScriptLoader {\n private window: PaypalHostWindow;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async loadPaypalSDK(merchantId = ''): Promise {\n const scriptSrc = '//www.paypalobjects.com/api/checkout.min.js';\n const options: LoadScriptOptions = {\n async: true,\n attributes: { 'data-merchant-id': merchantId },\n ...(merchantId && {\n attributes: { 'data-merchant-id': merchantId },\n }),\n };\n\n await this.scriptLoader.loadScript(scriptSrc, options);\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypal;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalExpressButtonStrategy, PaypalExpressScriptLoader } from './index';\n\nconst createPaypalExpressButtonStrategy: CheckoutButtonStrategyFactory<\n PaypalExpressButtonStrategy\n> = (paymentIntegrationService) => {\n return new PaypalExpressButtonStrategy(\n paymentIntegrationService,\n new PaypalExpressScriptLoader(getScriptLoader()),\n createFormPoster(),\n );\n};\n\nexport default toResolvableModule(createPaypalExpressButtonStrategy, [{ id: 'paypalexpress' }]);\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\nimport { PaymentMethodActionCreator, PaymentMethodRequestSender } from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\n\nimport CheckoutButtonInitializer from './checkout-button-initializer';\nimport CheckoutButtonInitializerOptions from './checkout-button-initializer-options';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonRegistry from './create-checkout-button-registry';\nimport createCheckoutButtonRegistryV2 from './create-checkout-button-registry-v2';\n\n/**\n * Creates an instance of `CheckoutButtonInitializer`.\n *\n * @remarks\n * ```js\n * const initializer = createCheckoutButtonInitializer();\n *\n * initializer.initializeButton({\n * methodId: 'braintreepaypal',\n * braintreepaypal: {\n * container: '#checkoutButton',\n * },\n * });\n * ```\n *\n * @alpha\n * Please note that `CheckoutButtonInitializer` is currently in an early stage\n * of development. Therefore the API is unstable and not ready for public\n * consumption.\n *\n * @param options - A set of construction options.\n * @returns an instance of `CheckoutButtonInitializer`.\n */\nexport default function createCheckoutButtonInitializer(\n options?: CheckoutButtonInitializerOptions,\n): CheckoutButtonInitializer {\n const { host, locale = 'en' } = options ?? {};\n const store = createCheckoutStore();\n const requestSender = createRequestSender({ host });\n const formPoster = createFormPoster({ host });\n const paymentIntegrationService = createPaymentIntegrationService(store);\n const registryV2 = createCheckoutButtonRegistryV2(paymentIntegrationService);\n\n return new CheckoutButtonInitializer(\n store,\n new CheckoutButtonStrategyActionCreator(\n createCheckoutButtonRegistry(store, requestSender, formPoster, locale, host),\n registryV2,\n new PaymentMethodActionCreator(new PaymentMethodRequestSender(requestSender)),\n ),\n );\n}\n","import {\n CheckoutButtonStrategy,\n CheckoutButtonStrategyFactory,\n CheckoutButtonStrategyResolveId,\n isResolvableModule,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\nimport * as defaultCheckoutButtonStrategyFactories from '../generated/checkout-button-strategies';\n\nexport interface CheckoutButtonStrategyFactories {\n [key: string]: CheckoutButtonStrategyFactory;\n}\n\nexport default function createCheckoutButtonStrategyRegistry(\n paymentIntegrationService: PaymentIntegrationService,\n checkoutButtonStrategyFactories: CheckoutButtonStrategyFactories = defaultCheckoutButtonStrategyFactories,\n): ResolveIdRegistry {\n const registry = new ResolveIdRegistry<\n CheckoutButtonStrategy,\n CheckoutButtonStrategyResolveId\n >();\n\n for (const [, createCheckoutButtonStrategy] of Object.entries(\n checkoutButtonStrategyFactories,\n )) {\n if (\n !isResolvableModule<\n CheckoutButtonStrategyFactory,\n CheckoutButtonStrategyResolveId\n >(createCheckoutButtonStrategy)\n ) {\n continue;\n }\n\n for (const resolverId of createCheckoutButtonStrategy.resolveIds) {\n registry.register(resolverId, () =>\n createCheckoutButtonStrategy(paymentIntegrationService),\n );\n }\n }\n\n return registry;\n}\n","import ResolvableModule from './resolvable-module';\n\nexport default function isResolvableModule(\n module: TModule,\n): module is ResolvableModule {\n return 'resolveIds' in module;\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../billing';\nimport { CartRequestSender } from '../cart';\nimport {\n CheckoutActionCreator,\n CheckoutRequestSender,\n CheckoutStore,\n CheckoutValidator,\n} from '../checkout';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { CustomerActionCreator, CustomerRequestSender } from '../customer';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator, OrderRequestSender } from '../order';\nimport {\n createPaymentClient,\n PaymentActionCreator,\n PaymentMethodActionCreator,\n PaymentMethodRequestSender,\n PaymentRequestSender,\n PaymentRequestTransformer,\n} from '../payment';\nimport { ConsignmentActionCreator, ConsignmentRequestSender } from '../shipping';\nimport {\n createSpamProtection,\n PaymentHumanVerificationHandler,\n SpamProtectionActionCreator,\n SpamProtectionRequestSender,\n} from '../spam-protection';\nimport { StoreCreditActionCreator, StoreCreditRequestSender } from '../store-credit';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../subscription';\n\nimport createPaymentIntegrationSelectors from './create-payment-integration-selectors';\nimport DefaultPaymentIntegrationService from './default-payment-integration-service';\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\nexport default function createPaymentIntegrationService(\n store: CheckoutStore,\n): PaymentIntegrationService {\n const {\n config: { getHost },\n } = store.getState();\n\n const requestSender = createRequestSender({ host: getHost() });\n\n const storeProjectionFactory = new PaymentIntegrationStoreProjectionFactory(\n createPaymentIntegrationSelectors,\n );\n\n const checkoutActionCreator = new CheckoutActionCreator(\n new CheckoutRequestSender(requestSender),\n new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n );\n\n const hostedFormFactory = new HostedFormFactory(store);\n\n const orderActionCreator = new OrderActionCreator(\n new OrderRequestSender(requestSender),\n new CheckoutValidator(new CheckoutRequestSender(requestSender)),\n );\n\n const billingAddressActionCreator = new BillingAddressActionCreator(\n new BillingAddressRequestSender(requestSender),\n new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n );\n\n const consignmentActionCreator = new ConsignmentActionCreator(\n new ConsignmentRequestSender(requestSender),\n new CheckoutRequestSender(requestSender),\n );\n\n const paymentMethodActionCreator = new PaymentMethodActionCreator(\n new PaymentMethodRequestSender(requestSender),\n );\n\n const paymentActionCreator = new PaymentActionCreator(\n new PaymentRequestSender(createPaymentClient(store)),\n orderActionCreator,\n new PaymentRequestTransformer(),\n new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n );\n\n const customerActionCreator = new CustomerActionCreator(\n new CustomerRequestSender(requestSender),\n checkoutActionCreator,\n new SpamProtectionActionCreator(\n createSpamProtection(createScriptLoader()),\n new SpamProtectionRequestSender(requestSender),\n ),\n );\n\n const storeCreditActionCreator = new StoreCreditActionCreator(\n new StoreCreditRequestSender(requestSender),\n );\n\n const spamProtection = createSpamProtection(createScriptLoader());\n const spamProtectionRequestSender = new SpamProtectionRequestSender(requestSender);\n const spamProtectionActionCreator = new SpamProtectionActionCreator(\n spamProtection,\n spamProtectionRequestSender,\n );\n\n const cartRequestSender = new CartRequestSender(requestSender);\n\n return new DefaultPaymentIntegrationService(\n store,\n storeProjectionFactory,\n checkoutActionCreator,\n hostedFormFactory,\n orderActionCreator,\n billingAddressActionCreator,\n consignmentActionCreator,\n paymentMethodActionCreator,\n paymentActionCreator,\n customerActionCreator,\n cartRequestSender,\n storeCreditActionCreator,\n spamProtectionActionCreator,\n );\n}\n","// / \nimport { createClient as createBigpayClient } from '@bigcommerce/bigpay-client';\n\nimport { CheckoutStore } from '../checkout';\n\nexport default function createPaymentClient(store: CheckoutStore) {\n const paymentClient = createBigpayClient();\n\n store.subscribe(\n (state) => {\n const config = state.config.getStoreConfig();\n\n if (config) {\n paymentClient.setHost(config.paymentSettings.bigpayBaseUrl);\n }\n },\n (state) => state.config.getStoreConfig(),\n );\n\n return paymentClient;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CartRequestSender } from '../cart';\nimport { CheckoutActionCreator, CheckoutRequestSender, CheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { PaymentMethodActionCreator, PaymentMethodRequestSender } from '../payment';\nimport { createAmazonPayV2PaymentProcessor } from '../payment/strategies/amazon-pay-v2';\nimport { BraintreeScriptLoader, BraintreeSDKCreator } from '../payment/strategies/braintree';\nimport {\n createGooglePayPaymentProcessor,\n GooglePayAdyenV2Initializer,\n GooglePayAdyenV3Initializer,\n GooglePayAuthorizeNetInitializer,\n GooglePayBNZInitializer,\n GooglePayBraintreeInitializer,\n GooglePayCheckoutcomInitializer,\n GooglePayCybersourceV2Initializer,\n GooglePayOrbitalInitializer,\n GooglePayStripeInitializer,\n GooglePayStripeUPEInitializer,\n GooglePayWorldpayAccessInitializer,\n} from '../payment/strategies/googlepay';\nimport { MasterpassScriptLoader } from '../payment/strategies/masterpass';\nimport { PaypalScriptLoader } from '../payment/strategies/paypal';\n\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\nimport { AmazonPayV2ButtonStrategy } from './strategies/amazon-pay-v2';\nimport AmazonPayV2RequestSender from './strategies/amazon-pay-v2/amazon-pay-v2-request-sender';\nimport {\n BraintreePaypalButtonStrategy,\n BraintreePaypalCreditButtonStrategy,\n BraintreeVenmoButtonStrategy,\n} from './strategies/braintree';\nimport { GooglePayButtonStrategy } from './strategies/googlepay';\nimport { MasterpassButtonStrategy } from './strategies/masterpass';\nimport { PaypalButtonStrategy } from './strategies/paypal';\n\nexport default function createCheckoutButtonRegistry(\n store: CheckoutStore,\n requestSender: RequestSender,\n formPoster: FormPoster,\n locale: string,\n host?: string,\n): Registry {\n const registry = new Registry();\n const scriptLoader = getScriptLoader();\n const checkoutRequestSender = new CheckoutRequestSender(requestSender);\n const checkoutActionCreator = new CheckoutActionCreator(\n checkoutRequestSender,\n new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n );\n const paymentMethodActionCreator = new PaymentMethodActionCreator(\n new PaymentMethodRequestSender(requestSender),\n );\n\n const braintreeSdkCreator = new BraintreeSDKCreator(new BraintreeScriptLoader(scriptLoader));\n const cartRequestSender = new CartRequestSender(requestSender);\n const amazonPayV2RequestSender = new AmazonPayV2RequestSender(requestSender);\n\n registry.register(\n CheckoutButtonMethodType.AMAZON_PAY_V2,\n () =>\n new AmazonPayV2ButtonStrategy(\n store,\n checkoutActionCreator,\n createAmazonPayV2PaymentProcessor(),\n cartRequestSender,\n amazonPayV2RequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.BRAINTREE_PAYPAL,\n () =>\n new BraintreePaypalButtonStrategy(\n store,\n checkoutActionCreator,\n cartRequestSender,\n braintreeSdkCreator,\n formPoster,\n window,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.BRAINTREE_PAYPAL_CREDIT,\n () =>\n new BraintreePaypalCreditButtonStrategy(\n store,\n checkoutActionCreator,\n cartRequestSender,\n braintreeSdkCreator,\n formPoster,\n window,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.BRAINTREE_VENMO,\n () =>\n new BraintreeVenmoButtonStrategy(\n store,\n paymentMethodActionCreator,\n cartRequestSender,\n braintreeSdkCreator,\n formPoster,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_ADYENV2,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayAdyenV2Initializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_ADYENV3,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayAdyenV3Initializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_AUTHORIZENET,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayAuthorizeNetInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_BNZ,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayBNZInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_BRAINTREE,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(\n store,\n new GooglePayBraintreeInitializer(braintreeSdkCreator),\n ),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_CHECKOUTCOM,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(\n store,\n new GooglePayCheckoutcomInitializer(requestSender),\n ),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_CYBERSOURCEV2,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayCybersourceV2Initializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_ORBITAL,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayOrbitalInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_STRIPE,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayStripeInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_STRIPEUPE,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayStripeUPEInitializer()),\n cartRequestSender,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.MASTERPASS,\n () =>\n new MasterpassButtonStrategy(\n store,\n checkoutActionCreator,\n new MasterpassScriptLoader(scriptLoader),\n locale,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.PAYPALEXPRESS,\n () =>\n new PaypalButtonStrategy(\n store,\n checkoutActionCreator,\n new PaypalScriptLoader(scriptLoader),\n formPoster,\n host,\n ),\n );\n\n registry.register(\n CheckoutButtonMethodType.GOOGLEPAY_WORLDPAYACCESS,\n () =>\n new GooglePayButtonStrategy(\n store,\n formPoster,\n checkoutActionCreator,\n createGooglePayPaymentProcessor(store, new GooglePayWorldpayAccessInitializer()),\n cartRequestSender,\n ),\n );\n\n return registry;\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport AmazonPayV2PaymentProcessor from './amazon-pay-v2-payment-processor';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\n\nexport default function createAmazonPayV2PaymentProcessor(): AmazonPayV2PaymentProcessor {\n return new AmazonPayV2PaymentProcessor(new AmazonPayV2ScriptLoader(getScriptLoader()));\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","require","message","object","name","type","setPrototypeOf","__proto__","Error","captureStackTrace","stack","DEFAULT_RESPONSE","body","headers","status","response","errors","joinErrors","reduce","result","error","join","mapFromPaymentErrorResponse","Array","isArray","_factoryMethods","this","register","detail","title","length","map","code","mapFromInternalErrorResponse","mapFromStorefrontErrorResponse","factoryMethod","createError","_getType","default","_isStorefrontErrorResponseBody","_isInternalErrorResponseBody","internalType","last","split","errorResponse","storefrontErrorResponse","internalErrorResponse","CheckoutActionType","ErrorActionType","SubscriptionsActionType","BillingAddressActionType","omitDeep","predicate","isPlainObject","transform","omitBy","clearErrorReducer","state","action","ClearError","isClearErrorAction","payload","isEqual","objectA","objectB","options","index","isArrayEqual","Date","getTime","isDateEqual","RegExp","toString","isRegExpEqual","filter","keyFilter","keysA","keys","keysB","isObjectEqual","replace","currentValue","newValue","undefined","objectSet","DEFAULT_STATE","statuses","billingAddressReducer","combineReducers","data","dataReducer","composeReducers","errorsReducer","statusesReducer","reducer","UpdateBillingAddressSucceeded","ContinueAsGuestSucceeded","LoadCheckoutSucceeded","billingAddress","LoadCheckoutRequested","LoadCheckoutFailed","UpdateBillingAddressRequested","UpdateBillingAddressFailed","UpdateSubscriptionsRequested","UpdateSubscriptionsSucceeded","ContinueAsGuestRequested","UpdateSubscriptionsFailed","ContinueAsGuestFailed","arrayReplace","currentArray","newArray","matchObject","b","id","sameAsCurrentCount","sameAsNewCount","countSameAsReplaced","replacedValue","newItem","currentItem","objectMerge","currentObject","newObject","CouponActionType","GiftCertificateActionType","ConsignmentActionType","CheckoutButtonActionType","cartReducer","CreateConsignmentsSucceeded","DeleteConsignmentSucceeded","UpdateConsignmentSucceeded","UpdateShippingOptionSucceeded","LoadShippingOptionsSucceeded","ApplyCouponSucceeded","RemoveCouponSucceeded","ApplyGiftCertificateSucceeded","RemoveGiftCertificateSucceeded","cart","ConfigActionType","DEFAULT_DATA_STATE","initializedContainers","DEFAULT_ERROR_STATE","DEFAULT_STATUS_STATE","checkoutButtonReducer","meta","methodId","InitializeButtonSucceeded","containerId","DeinitializeButtonSucceeded","InitializeButtonRequested","InitializeButtonFailed","DeinitializeButtonRequested","DeinitializeButtonFailed","OrderActionType","configReducer","LoadConfigSucceeded","LoadConfigFailed","LoadConfigRequested","couponReducer","LoadOrderSucceeded","coupons","ApplyCouponRequested","ApplyCouponFailed","RemoveCouponRequested","RemoveCouponFailed","CustomerActionType","giftCertificateReducer","giftCertificates","ApplyGiftCertificateRequested","ApplyGiftCertificateFailed","RemoveGiftCertificateRequested","RemoveGiftCertificateFailed","CustomerStrategyActionType","customerReducer","customer","CreateCustomerAddressSucceeded","StripeLinkAuthenticated","CreateCustomerRequested","CreateCustomerSucceeded","CreateCustomerFailed","CreateCustomerAddressRequested","CreateCustomerAddressFailed","ExtensionActionType","customerStrategyReducer","InitializeSucceeded","isInitialized","DeinitializeSucceeded","InitializeRequested","initializeErrors","initializeMethodId","InitializeFailed","DeinitializeRequested","deinitializeError","deinitializeMethodId","DeinitializeFailed","SignInRequested","SignInSucceeded","signInError","signInMethodId","SignInFailed","SignOutRequested","SignOutSucceeded","signOutError","signOutMethodId","SignOutFailed","ExecutePaymentMethodCheckoutRequested","ExecutePaymentMethodCheckoutSucceeded","executePaymentMethodCheckoutError","executePaymentMethodCheckoutMethodId","ExecutePaymentMethodCheckoutFailed","WidgetInteractionStarted","WidgetInteractionFinished","widgetInteractionError","widgetInteractionMethodId","WidgetInteractionFailed","isInitializing","isDeinitializing","isSigningIn","isSigningOut","isExecutingPaymentMethodCheckout","isWidgetInteracting","FormFieldsActionType","extensionReducer","LoadExtensionsSucceeded","LoadExtensionsRequested","RenderExtensionRequested","RenderExtensionSucceeded","LoadExtensionsFailed","RenderExtensionFailed","CountryActionType","formFieldsReducer","LoadFormFieldsSucceeded","LoadFormFieldsFailed","LoadFormFieldsRequested","countryReducer","LoadCountriesSucceeded","LoadCountriesRequested","LoadCountriesFailed","orderReducer","metaReducer","LoadOrderPaymentsSucceeded","omit","FinalizeOrderSucceeded","SubmitOrderSucceeded","callbackUrl","order","orderToken","token","payment","LoadOrderRequested","LoadOrderPaymentsRequested","LoadOrderFailed","LoadOrderPaymentsFailed","PaymentActionType","PaymentMethodActionType","orderBillingAddressReducer","paymentReducer","SubmitPaymentSucceeded","PaymentStrategyActionType","paymentMethodReducer","LoadPaymentMethodSucceeded","array","item","defaultPredicate","pick","findIndex","pickBy","push","existingItem","mergeOrPush","gateway","LoadPaymentMethodsSucceeded","methodA","methodB","LoadPaymentMethodsRequested","LoadPaymentMethodsFailed","LoadPaymentMethodRequested","loadMethodId","loadMethodError","LoadPaymentMethodFailed","isLoadingMethod","InstrumentActionType","paymentStrategyReducer","gatewayId","initializeError","ExecuteRequested","ExecuteSucceeded","executeError","executeMethodId","ExecuteFailed","FinalizeRequested","FinalizeSucceeded","finalizeError","finalizeMethodId","FinalizeFailed","isExecuting","isFinalizing","RemoteCheckoutActionType","instrumentReducer","LoadInstrumentsSucceeded","vaultedInstruments","DeleteInstrumentSucceeded","LoadInstrumentsRequested","DeleteInstrumentRequested","deleteError","failedInstrument","LoadInstrumentsFailed","DeleteInstrumentFailed","instrumentId","isDeleting","deletingInstrument","remoteCheckoutReducer","InitializeRemoteBillingSucceeded","billing","InitializeRemoteShippingSucceeded","shipping","LoadRemoteSettingsSucceeded","UpdateRemoteCheckout","PickupOptionActionType","updateShippingOptionError","updateError","isUpdating","isUpdatingShippingOption","consignmentReducer","consignments","SignOutCustomerSucceeded","LoadShippingOptionsRequested","LoadShippingOptionsFailed","CreateConsignmentsRequested","CreateConsignmentsFailed","UpdateConsignmentRequested","UpdateConsignmentFailed","DeleteConsignmentRequested","DeleteConsignmentFailed","UpdateShippingOptionRequested","UpdateShippingOptionFailed","objectFlatten","parent","flattened","forEach","keyString","assign","objectWithSortedKeys","sort","previous","current","ShippingCountryActionType","pickupOptionReducer","LoadPickupOptionsSucceeded","sortedflattenedMeta","consignmentId","searchArea","btoa","JSON","stringify","LoadPickupOptionsRequested","LoadPickupOptionsFailed","ShippingStrategyActionType","shippingCountryReducer","LoadShippingCountriesSucceeded","LoadShippingCountriesRequested","LoadShippingCountriesFailed","SignInEmailActionType","shippingStrategyReducer","UpdateAddressRequested","UpdateAddressSucceeded","updateAddressError","updateAddressMethodId","UpdateAddressFailed","SelectOptionRequested","SelectOptionSucceeded","selectOptionError","selectOptionMethodId","SelectOptionFailed","isUpdatingAddress","isSelectingOption","StoreCreditActionType","signInEmailReducer","SendSignInEmailSucceeded","SendSignInEmailRequested","SendSignInEmailFailed","storeCreditReducer","ApplyStoreCreditRequested","ApplyStoreCreditSucceeded","ApplyStoreCreditFailed","SpamProtectionActionType","subscriptionsReducer","checkoutReducer","UpdateCheckoutSucceeded","VerifyCheckoutSucceeded","orderId","UpdateCheckoutRequested","UpdateCheckoutFailed","MissingDataErrorType","subtype","MissingBillingAddress","MissingCart","MissingConsignments","MissingCheckout","MissingCustomer","MissingCheckoutConfig","MissingOrderConfig","MissingOrder","MissingOrderId","MissingPayment","MissingPaymentToken","MissingPaymentMethod","MissingShippingAddress","getErrorMessage","creator","combiner","args","pop","combinerArgs","memoize","guard","errorFactory","createFreezeProxy","target","trap","proxy","create","iteratee","getPrototypeOf","traversePrototypeOf","getOwnPropertyNames","charAt","deepFreeze","createProxy","ACKNOWLEDGE","FINALIZE","provider","method","barclays","braintree","braintreepaypal","braintreeach","authorizenet","elavon","checkoutcom","sagepay","stripe","cybersource","cybersourcev2","bnz","converge","bluesnapv2","orbital","paymetric","bolt","digitalriver","moneris","cba_mpgs","worldpayaccess","normalize","address","firstName","lastName","company","address1","address2","city","stateOrProvince","countryCode","postalCode","phone","customFields","identity","createInternalCheckoutSelectorsFactory","getBillingAddress","getBillingAddressOrThrow","getUpdateError","getContinueAsGuestError","getLoadError","isContinuingAsGuest","isLoading","getState","getInitializeError","getDeinitializeError","getCoupons","getRemoveError","getApplyError","isApplying","isRemoving","getCustomer","getCustomerOrThrow","getCreateAccountError","isCreatingCustomerAccount","getCreateAddressError","isCreatingCustomerAddress","getCheckout","getShippingAddress","getShippingAddressOrThrow","getShippingAddresses","getShippingAddressesOrThrow","getOrderBillingAddress","getInternalPayment","getGatewayPayment","getHostedPayment","getPaymentId","getPaymentIdOrThrow","getPaymentStatus","getPaymentStatusOrThrow","getPaymentToken","getPaymentTokenOrThrow","getPaymentRedirectUrl","getPaymentRedirectUrlOrThrow","isPaymentDataRequired","isPaymentDataSubmitted","getEmail","getSendError","isSending","createBillingAddressSelector","continueAsGuestError","loadError","memoizeOne","createCartSelector","getCart","getCartOrThrow","createCartSelectorFactory","createCheckoutButtonSelector","some","find","values","createConfigSelector","getConfig","getFlashMessages","filterType","flashMessages","context","getStoreConfig","_","formState","formFields","storeConfig","getStoreConfigOrThrow","getContextConfig","getExternalSource","externalSource","getHost","host","getLocale","locale","getVariantIdentificationToken","variantIdentificationToken","createConfigSelectorFactory","createCountrySelector","getCountries","countries","createCountrySelectorFactory","createCouponSelector","removeCouponError","applyCouponError","isApplyingCoupon","isRemovingCoupon","createCustomerSelector","isCreating","createAddressError","isCreatingAddress","createCustomerStrategySelector","getSignInError","getSignOutError","getExecutePaymentMethodCheckoutError","getWidgetInteractionError","createCustomerStrategySelectorFactory","createGiftCertificateSelector","getGiftCertificates","removeGiftCertificateError","applyGiftCertificateError","isApplyingGiftCertificate","isRemovingGiftCertificate","createGiftCertificateSelectorFactory","createInstrumentSelector","getInstrumentsByPaymentMethod","instruments","paymentMethod","paymentMethodKey","currentMethod","getCardInstrument","cards","instrument","bigpayToken","card","isMatch","getCardInstrumentOrThrow","MissingPaymentInstrument","getInstruments","flatMap","supportedProvider","getInstrumentsMeta","getDeleteError","createInstrumentSelectorFactory","createFormSelector","getShippingAddressFields","selectedCountry","shippingAddress","field","processField","getBillingAddressFields","getCustomerAccountFields","customerAccount","country","items","label","fieldType","itemtype","processCountry","subdivisions","requiresState","required","processProvince","hasPostalCodes","Boolean","processsPostCode","createFormSelectorFactory","createPaymentMethodSelector","getPaymentMethods","paymentMethods","getPaymentMethodsMeta","getPaymentMethod","getPaymentMethodOrThrow","getLoadMethodError","createPaymentMethodSelectorFactory","createPaymentStrategySelector","getExecuteError","getFinalizeError","getWidgetInteractingError","query","createPaymentStrategySelectorFactory","createPickupOptionSelector","getPickupOptions","pickupOptions","sortedFlattenedParams","createPickupOptionSelectorFactory","createRemoteCheckoutSelector","createShippingAddressSelector","shippingConsignment","consignment","selectedPickupOption","shippingConsignments","createShippingCountrySelector","getShippingCountries","createShippingCountrySelectorFactory","createShippingStrategySelector","getUpdateAddressError","getSelectOptionError","createShippingStrategySelectorFactory","createConsignmentSelector","getConsignments","getConsignmentsOrThrow","getConsignmentById","getConsignmentByAddress","addressA","addressB","getShippingOption","selectedShippingOption","getCreateError","getLoadShippingOptionsError","loadShippingOptionsError","getUnassignedItems","assignedLineItemIds","itemIds","concat","lineItemIds","lineItems","physicalItems","indexOf","getItemAssignmentError","getUpdateShippingOptionError","isLoadingShippingOptions","isAssigningItems","createConsignmentSelectorFactory","createCheckoutSelector","getCheckoutOrThrow","getOutstandingBalance","useStoreCredit","checkout","grandTotal","storeCredit","Math","max","outstandingBalance","isExecutingSpamCheck","createCheckoutSelectorFactory","createOrderSelector","getOrder","getOrderOrThrow","getOrderMeta","payments","currentPayment","paymentId","createOrderSelectorFactory","createOrderBillingAddressSelector","createPaymentSelector","providerId","internalPayment","MissingPaymentId","step","MissingPaymentStatus","redirectUrl","MissingPaymentRedirectUrl","nonce","createStoreCreditSelector","applyError","createStoreCreditSelectorFactory","createSubscriptionsSelector","createSubscriptionsSelectorFactory","createSignInEmailSelector","signInEmail","sendError","createExtensionSelector","getExtensions","getExtensionByRegion","region","e","createExtensionSelectorFactory","checkoutButton","customerStrategies","extensions","form","orderBillingAddress","paymentStrategies","remoteCheckout","shippingCountries","shippingStrategies","subscriptions","selectors","config","shouldWarnMutation","createCheckoutStore","initialState","factory","requestErrorFactory","actionTransformer","action$","from","pipe","catchError","every","createInternalCheckoutSelectors","createDataStore","stateTransformer","cachableActionDecorator","descriptor","memoizedMethods","WeakMap","decorateMethod","param","lastArg","useCache","fn","instanceMethods","set","Observable","shareReplay","store","_requestSender","loadPaymentMethods","observer","next","createAction","params","cartId","then","deviceSessionId","sessionHash","methods","filteredMethods","_filterApplePay","complete","catch","createErrorAction","loadPaymentMethod","window","isApplePayWindow","ContentType","INTERNAL_USE_ONLY","SDK_VERSION_HEADERS","timeout","Accept","url","throwErrorAction","of","throwError","_subscriptionActionCreator","continueAsGuest","credentials","isGuest","billingAddressRequestBody","existingBillingAddressRequestBody","merge","defer","_createOrUpdateBillingAddress","_updateCustomerConsent","updateAddress","email","acceptsAbandonedCartEmails","acceptsMarketingNewsletter","empty","updateSubscriptions","checkoutId","createAddress","DEFAULT_PARAMS","include","post","put","createBuyNowCart","_checkoutRequestSender","_configActionCreator","_formFieldsActionCreator","loadCheckout","loadConfig","loadFormFields","loadDefaultCheckout","updateCheckout","loadCurrentCheckout","joinIncludes","includes","uniq","joinOrMergeIncludes","baseIncludes","includeDictionaryOrList","includesDictionary","deletions","on","additions","difference","mergeIncludes","cartA","cartB","_normalize","cartAmount","currency","digitalItems","slice","itemA","itemB","productId","variantId","localeCompare","extendedSalePrice","quantity","amount","recipient","giftWrapping","updated","validate","comparator","_compareCoupons","_compareGiftCertificates","_getComparableCheckout","couponsA","couponsB","giftCertificatesA","giftCertificatesB","_configRequestSender","isSpamProtectionExecuteSucceededAction","succeededAction","_customerRequestSender","_checkoutActionCreator","_spamProtectionActionCreator","createCustomer","isStorefrontSpamProtectionEnabled","checkoutSettings","createAccount","switchMap","execute","customerAddress","signInCustomer","SignInCustomerRequested","SignInCustomerSucceeded","SignInCustomerFailed","signOutCustomer","SignOutCustomerRequested","SignOutCustomerFailed","delete","_formFieldsRequestSender","loadFields","promise","cancellable","Promise","reject","cancel","race","_mutationObserver","ensurePresence","targets","mutationsList","mutation","removedNodes","node","contains","observe","document","childList","subtree","output","disconnect","_window","callback","MutationObserver","parseUrl","test","anchor","createElement","href","port","hostname","hash","origin","protocol","pathname","search","isIframeEvent","targetOrigin","_targetWindow","_targetOrigin","event","targetWindow","fromEvent","successType","errorType","take","toPromise","postMessage","setTarget","bindMethodDecorator","decoratedTarget","getOwnPropertyDescriptor","bindClassDecorator","boundMethod","bind","sourceOrigin","_sourceOrigins","_isListening","_listeners","listen","addEventListener","_handleMessage","stopListen","removeEventListener","addListener","listener","listeners","removeListener","splice","trigger","_googleRecaptcha","handle","errorOrId","handleWithRecaptchaSitekey","handleWithPaymentHumanVerificationRequestError","_isPaymentHumanVerificationRequest","_initialize","additional_action_required","_performRecaptcha","human_verification_token","recaptchaSitekey","cardingProtectionElementId","cardingProtectionElement","getElementById","parentNode","removeChild","setAttribute","appendChild","load","NotInitializedErrorType","CustomerNotInitialized","PaymentNotInitialized","ShippingNotInitialized","SpamProtectionNotInitialized","googleRecaptchaScriptLoader","mutationObserverFactory","_memoized","recaptcha","sitekey","container","event$","Subject","_widgetId","render","size","getResponse","reset","_event$","_recaptcha","element","querySelector","retryWhen","delay","TIMEOUT","_watchRecaptchaChallengeWindow","iframeContainer","parentElement","style","visibility","attributes","attributeFilter","_scriptLoader","_loadPromise","_loadScript","callbackName","resolve","grecaptcha","loadScript","createSpamProtection","scriptLoader","MutationObserverFactory","fieldErrors","HostedFieldEventType","HostedInputEventType","_type","_containerId","_placeholder","_accessibilityLabel","_styles","_eventPoster","_eventListener","_detachmentObserver","_cardInstrument","_iframe","src","border","height","overflow","width","getType","attach","contentWindow","AttachRequested","accessibilityLabel","cardInstrument","fontUrls","_getFontUrls","placeholder","styles","location","AttachSucceeded","AttachFailed","detach","submitForm","fields","SubmitRequested","SubmitSucceeded","SubmitFailed","_isSubmitErrorEvent","validateForm","ValidateRequested","Validated","isValid","links","querySelectorAll","link","fontFamily","family","_fields","_payloadTransformer","_eventCallbacks","_paymentHumanVerificationHandler","_handleEnter","noop","onBlur","onCardTypeChange","onFocus","onValidate","Blurred","CardTypeChanged","Focused","Entered","_cardType","cardType","BinChanged","_bin","bin","getBin","getCardType","_getFirstField","otherFields","without","all","otherField","submit","additionalActionData","additionalAction","isVaultedInstrument","_store","instrumentMeta","orderMeta","paymentData","paymentMethodMeta","authToken","vaultAccessToken","fieldOptions","_getCardInstrument","createScriptLoader","_orderRequestSender","_checkoutValidator","loadOrder","loadOrderPayments","loadCurrentOrder","_getCurrentOrderId","submitOrder","SubmitOrderRequested","shouldExecuteSpamCheck","_mapToOrderRequestBody","customerMessage","checkoutVariant","SubmitOrderFailed","finalizeOrder","FinalizeOrderRequested","FinalizeOrderFailed","isNil","_paymentRequestSender","_orderActionCreator","_paymentRequestTransformer","initializeOffsitePayment","shouldSaveInstrument","shouldSetAsDefaultInstrument","formattedPayload","bigpay_token","vault_payment_instrument","set_as_default_stored_instrument","InitializeOffsitePaymentRequested","InitializeOffsitePaymentSucceeded","InitializeOffsitePaymentFailed","submitPayment","SubmitPaymentRequested","SubmitPaymentFailed","_client","_transformResponse","statusText","mapToInternalAddress","addressId","isBillingAddressLike","addressLine1","addressLine2","province","provinceCode","stateOrProvinceCode","postCode","_decimalPlaces","toInteger","round","pow","CheckoutButtonMethodType","couponTypes","mapToInternalCoupon","coupon","discount","displayName","discountType","couponType","mapToInternalGiftCertificate","giftCertificate","discountedAmount","used","remainingBalance","remaining","balance","purchaseDate","mapToInternalLineItems","itemMap","decimalPlaces","idKey","amountTransformer","imageUrl","amountAfterDiscount","integerAmount","integerAmountAfterDiscount","integerUnitPrice","integerUnitPriceAfterDiscount","integerDiscount","sender","mapGiftCertificateToInternalLineItem","extendedListPrice","discountAmount","listPrice","salePrice","downloadsPageUrl","downloadPageUrl","brand","sku","categoryNames","option","addedByPromotion","mapToInternalLineItem","mapToInternalLineItemType","mapToInternalCart","promotions","notifications","sum","discountNotifications","promotion","banners","banner","placeholders","messageHtml","text","totalDiscountedAmount","certificate","appliedGiftCertificates","keyBy","shippingCostTotal","amountBeforeDiscount","shippingCostBeforeDiscount","integerAmountBeforeDiscount","lineItem","isShippingRequired","subtotal","taxSubtotal","taxTotal","taxes","handling","handlingCostTotal","mapToInternalCustomer","addresses","customerId","fullName","customerGroupName","customerGroup","format","month","year","trimmedMonth","trimmedYear","toObject","number","maxLength","creditCardType","info","lengths","unformattedValue","unformat","gaps","gapIndex","mapToInternalOrder","customerCanBeCreated","mapToInternalOrderPayment","baseAmount","socialData","mapToInternalSocialDataList","hasDigitalItems","isDownloadable","isComplete","mapToStoreCredit","orderAmount","orderAmountAsInteger","isDefaultOrderPayment","helpText","instructions","returnUrl","socialDataObject","socialMedia","description","image","shareText","sharingLink","channelName","channel","channelCode","mapToInternalShippingOption","isSelected","price","cost","selected","isRecommended","transitTime","_cardExpiryFormatter","_cardNumberFormatter","checkoutState","formattedInstrument","_mapShippingAddress","shippingOption","contextConfig","paymentMeta","internalCustomer","_transformPaymentMethod","quoteMeta","request","geoCountryCode","source","storeProfile","transformWithHostedFormData","_transformHostedInputValues","initializationData","ccCvv","cardCodeVerification","ccNumber","cardNumberVerification","hostedFormNonce","cardCode","ccExpiry","cardExpiry","ccName","cardName","cardNumber","isBopisEnabled","bopis","enabled","requiredAddress","isPickup","CheckoutIncludes","_consignmentRequestSender","unassignItemsByAddress","_consignmentHasAddress","existingConsignment","_removeLineItems","updateConsignment","deleteConsignment","assignItemsByAddress","_createOrUpdateConsignment","_addLineItems","selectShippingOption","consignmentUpdateBody","shippingOptionId","consignmentMeta","loadShippingOptions","AvailableShippingOptions","_getUpdateAddressRequestBody","createConsignments","updateShippingOption","_isUpdateConsignmentRequest","customItems","itemId","_hydrateLineItems","sharedItem","DEFAULT_INCLUDES","initialize","spamProtectionElementId","spamProtectionElement","googleRecaptchaSitekey","verifyCheckoutSpamProtection","VerifyCheckoutRequested","VerifyCheckoutFailed","_storeCreditRequestSender","applyStoreCredit","removeStoreCredit","_subscriptionsRequestSender","cloneDeep","input","cloneDeepSafe","cache","cloneResult","createPaymentIntegrationSelectors","isPaymentMethodInitialized","_storeProjectionFactory","_hostedFormFactory","_billingAddressActionCreator","_consignmentActionCreator","_paymentMethodActionCreator","_paymentActionCreator","_customerActionCreator","_cartRequestSender","_storeCreditActionCreator","_storeProjection","createHostedForm","subscribe","subscriber","filters","initializeOffsitePaymentConfig","dispatch","updateBillingAddress","updateShippingAddress","buyNowCartRequestBody","ProjectionActionType","_transformSelectors","projection","Synchronize","initial","createDataStoreProjection","isTerminalCacheKeyMap","_lastId","_map","maps","_usedMaps","_options","maxSize","onExpire","getKey","_resolveMap","parentMap","cacheKey","usedCount","_generateMap","_removeLeastUsedMap","getUsedCount","isMatched","mapIndex","unshift","terminalMap","recentlyUsedMap","_removeMap","isRootCacheKeyMap","selectorDecorator","resolver","memoizedMethod","cachedValue","isPrivate","selectorMethodDecorator","_checkoutButton","getInitializeButtonError","getDeinitializeButtonError","CheckoutButtonErrorSelector","isInitializingButton","isDeinitializingButton","CheckoutButtonStatusSelector","createCheckoutButtonSelectors","_buttonStrategyActionCreator","_state","initializeButton","containerIds","selector","idPrefix","containers","uniqueId","setUniqueElementId","queueId","deinitializeButton","deinitialize","CheckoutButtonInitializer","_registry","_registryV2","paymentMethodRequestParams","currencyCode","paymentMethodRequestOptions","_getStrategy","strategy","_factories","_instances","_defaultToken","defaultToken","_useFallback","useFallback","_tokenResolver","tokenResolver","cacheToken","_getInstance","_hasFactory","_hasInstance","resolvedToken","getShippableItemsCount","total","AmazonPayV2Regions","AmazonPayV2CheckoutLanguage","AmazonPayV2Placement","AmazonPayV2LedgerCurrency","AmazonPayV2PayOptions","AmazonPayV2ButtonColor","AmazonPayV2ButtonDesign","_amazonPayV2ScriptLoader","_amazonPayV2SDK","_buttonParentContainer","_createAmazonPayButtonParentContainer","_amazonPayV2Button","remove","bindButton","buttonId","sessionId","changeAction","_getAmazonPayV2SDK","Pay","bindChangeAction","amazonCheckoutSessionId","createButton","renderButton","prepareCheckout","createCheckoutSessionConfig","requestConfig","_prepareRequestConfig","_getAmazonPayV2Button","onClick","initCheckout","prepareCheckoutWithCreationRequestConfig","createCheckoutConfig","estimatedOrderAmount","productType","signout","renderAmazonPayButton","buttonColor","decoupleCheckoutInitiation","placement","parentContainerId","_getButtonParentContainer","design","C0001","amazonPayV2ButtonOptions","_getAmazonPayV2ButtonOptions","setCartRequestBody","_buyNowCartRequestBody","isPh4Enabled","features","storeCountryCode","isPh4UsOnly","publicKeyId","signedPayload","_isEnvironmentSpecific","uid","random","substr","parentContainer","Gold","merchantId","testMode","checkoutLanguage","checkoutSessionMethod","extractAmazonCheckoutSessionId","ledgerCurrency","buttonBaseConfig","sandbox","PayOnly","PayAndShip","shopPath","buttonOptions","tmpConfig","createCheckoutSession","_getOrThrow","amazonPayV2Region","amazon","PAYPAL_COMPONENTS","_braintreeScriptLoader","_dataCollectors","clientToken","_clientToken","getClient","loadClient","client","authorization","getPaypal","_paypal","loadPaypal","getPaypalCheckout","onSuccess","onError","loadPaypalCheckout","paypalCheckout","paypalCheckoutConfig","paypalCheckoutCallback","braintreePaypalCheckout","paypalSdkLoadConfig","isCreditEnabled","components","intent","paypal","loadPayPalSDK","_paypalCheckout","getVenmoCheckout","_venmoCheckout","loadVenmoCheckout","venmoCheckout","venmoCheckoutConfig","allowDesktop","paymentMethodUsage","venmoCheckoutCallback","braintreeVenmoCheckout","isBrowserSupported","get3DS","_3ds","load3DS","version","getDataCollector","cached","loadDataCollector","kount","deviceData","teardown","getVisaCheckout","_visaCheckout","loadVisaCheckout","getGooglePaymentComponent","_googlePay","loadGooglePayment","createHostedFields","loadHostedFields","_teardown","mod","threeDSecure","dataCollector","visaCheckout","venmo","googlePayment","hostedFields","CallbackTriggerType","TotalPriceStatusType","CallbackIntentsType","ButtonType","ButtonColor","BillingAddressFormat","getFirstAndLastName","nameParts","_googlePayScriptLoader","_googlePayInitializer","_isBuyNowFlow","googlePayClientOptions","_methodId","_configureWallet","buttonType","Short","Default","_googlePayClient","updatePaymentDataRequest","paymentDataRequest","existingPaymentDataRequest","_getPaymentDataRequest","_paymentDataRequest","merchantInfo","transactionInfo","shippingAddressParameters","displayWallet","loadPaymentData","handleSuccess","parseResponse","tokenizePayload","_postForm","_updateBillingAddress","_mapGooglePayAddressToShippingAddress","updateBuyNowFlowFlag","isBuyNowFlow","_getMethodId","_getCheckout","hasShippingAddress","googlePay","_getGooglePayClient","isReadyToPay","allowedPaymentMethods","parameters","allowedAuthMethods","allowedCardNetworks","apiVersion","apiVersionMinor","_getCardInformation","cardInformation","lastFour","google","environment","api","PaymentsClient","_mapGooglePayAddressToBillingAddress","customerEmail","paymentMethodData","locality","companyName","address3","administrativeArea","phoneNumber","postPaymentData","details","buyNowCartId","payment_type","tokenFormat","card_information","cart_id","remoteBillingAddress","googlePayAddressMapped","createGooglePayPaymentProcessor","initializer","requestSender","createRequestSender","getScriptLoader","_getGooglePayPaymentDataRequest","totalPrice","toFixed","gatewayMerchantId","merchantName","authJwt","billingAddressRequired","billingAddressParameters","Full","phoneNumberRequired","tokenizationSpecification","totalPriceStatus","FINAL","emailRequired","shippingAddressRequired","baseRequest","_getGooglePaymentDataRequest","supportedCards","paymentGatewaySpecification","_getPaymentGatewaySpecification","cardPaymentMethod","_getCardPaymentMethod","_braintreeSDKCreator","googleBraintreePaymentInstance","_googlePaymentInstance","_createGooglePayPayload","parse","tokenizationData","androidPayCards","lastTwo","binData","platformToken","googlePayBraintreePaymentDataRequest","googleMerchantName","googleMerchantId","cardRequirements","billingAddressFormat","_mapGooglePayBraintreeDataRequestToGooglePayDataRequestV2","createPaymentDataRequest","googlePayBraintreeDataRequestV1","paymentMethodTokenizationParameters","_publishableKey","_testMode","_errorMessage","checkoutcomkey","_mapGooglePayCheckoutcomDataRequestToGooglePayDataRequestV2","err","signature","protocolVersion","signedMessage","_convertToken","finalToken","cardNetwork","cardDetails","token_format","_requestCheckoutcomTokenize","token_data","checkoutcomToken","checkoutcomKey","Authorization","last4","stripeVersion","stripePublishableKey","stripeConnectedAccount","useMasterpassSrc","language","sourceUrl","masterpass","scriptSrc","async","isWithBuyNowFeatures","_amazonPayV2PaymentProcessor","_amazonPayV2ConfigRequestSender","amazonpay","initializeAmazonButtonOptions","buyNowInitializeOptions","getBuyNowCartRequestBody","Cart","_getCheckoutCreationRequestConfig","_createBuyNowCart","_createCheckoutConfig","public_key","rest","payloadJSON","buyNowCart","String","mapToBraintreeShippingAddressOverride","recipientName","line1","line2","getValidButtonStyle","color","fundingicons","layout","shape","tagline","validStyles","getValidHeight","mapToLegacyBillingAddress","first_name","last_name","phone_number","address_line_1","address_line_2","country_code","postal_code","mapToLegacyShippingAddress","_formPoster","messagingContainerId","paypalCheckoutOptions","paypalCheckoutSuccessCallback","_renderPayPalComponents","paypalCheckoutErrorCallback","_handleError","_renderPayPalMessages","_renderPayPalButton","shouldProcessPayment","onAuthorizeError","fundingSource","FUNDING","PAYPAL","validButtonStyle","paypalButtonRender","Buttons","env","commit","createOrder","_setupPayment","onApprove","authorizeData","_tokenizePayment","isEligible","_removeElement","isMessageContainerAvailable","Messages","onPaymentError","_buyNowCart","shippingAddressOverride","createPayment","flow","enableShippingAddress","shippingAddressEditable","offerCredit","cartRequestBody","tokenizePayment","postForm","device_data","billing_address","shipping_address","buttonContainerId","onErrorCallback","elementId","PaypalButtonStyleLayoutOption","PaypalButtonStyleSizeOption","PaypalButtonStyleColorOption","PaypalButtonStyleLabelOption","PaypalButtonStyleShapeOption","braintreepaypalcredit","hasRenderedSmartButton","fundingSources","PAYLATER","CREDIT","buttonStyle","venmoButtonStyle","backgroundColor","backgroundPosition","backgroundSize","backgroundImage","backgroundRepeat","borderRadius","cursor","transition","minHeight","minWidth","_onError","braintreevenmo","_handleInitializationVenmoSuccess","_handleInitializationVenmoError","_renderVenmoButton","_removeVenmoContainer","buttonContainer","venmoButton","buyBowCart","tokenize","removeAttribute","_handlePostForm","_googlePayPaymentProcessor","googlePayOptions","_getGooglePayOptions","_getGooglePayClientOptions","_walletButton","_createSignInButton","paymentDataCallbacks","onPaymentDataChanged","callbackTrigger","INITIALIZE","newTransactionInfo","googlePayButton","_handleWalletButtonClick","googlepayadyenv2","googlepayadyenv3","googlepayauthorizenet","googlepaybnz","googlepaybraintree","googlepaycheckoutcom","googlepaycybersourcev2","googlepayorbital","googlepaystripe","googlepaystripeupe","googlepayworldpayaccess","preventDefault","ESTIMATED","callbackIntents","OFFER","_onPaymentSelectComplete","supportedLocales","es","en","pt","zu","ar","zh","ms","uk","sv","hr","pl","nl","it","de","fr","formatLocale","localeLanguage","toLowerCase","formattedLocale","countryLocales","_masterpassScriptLoader","_locale","masterpassScriptLoaderParams","isMasterpassSrcEnabled","_masterpassClient","_signInButton","button","subdomain","_createMasterpassPayload","allowedCardTypes","CheckoutButtonNotInitialized","_paypalScriptLoader","_host","paypalOptions","_paymentMethod","clientId","fundingCreditOption","allowedSources","allowCredit","disallowedSources","Button","funding","allowed","disallowed","RECT","RESPONSIVE","actions","onAuthorize","res","paymentID","payerID","payerId","payerInfo","payer","payer_info","getEnvironment","process","NODE_ENV","_console","log","_logToConsole","messages","warn","debug","isEnabled","logger","console","_resolveToken","resolveId","_encodeToken","_decodeToken","atob","registeredTokens","results","registeredToken","resolverId","matches","entries","matchedResults","matched","toResolvableModule","resolveIds","ApplePaySession","DefaultLabels","_paymentIntegrationService","_sessionFactory","_onAuthorizeCallback","_subTotalLabel","Subtotal","_shippingLabel","Shipping","applepay","buttonClassName","onPaymentAuthorize","requiresShipping","_requiresShipping","_buyNowInitializeOptions","_applePayButton","_createButton","classList","add","merchantCapabilities","supportedNetworks","storeName","_getRequestWithEmptyTotal","requiredShippingContactFields","applePaySession","_handleApplePayEvents","begin","_getBaseRequest","requiredBillingContactFields","tax","onvalidatemerchant","_onValidateMerchant","merchantSession","completeMerchantValidation","onpaymentmethodselected","_handlePaymentMethodSelected","onshippingcontactselected","_handleShippingContactSelected","onshippingmethodselected","_handleShippingMethodSelected","oncancel","onpaymentauthorized","_onPaymentAuthorized","completePaymentMethodSelection","newTotal","newLineItems","_transformContactToAddress","shippingContact","abort","selectionShippingOptionId","availableOptions","availableShippingOptions","selectedOption","unselectedOptions","shippingOptions","additionalDescription","identifier","completeShippingContactSelection","STATUS_INVALID_SHIPPING_POSTAL_ADDRESS","recommendedOption","optionId","selectedOptionId","_updateShippingOption","newShippingMethods","_getUpdatedLineItems","completeShippingMethodSelection","validationURL","bigPayEndpoint","paymentsUrl","billingContact","apple_pay_token","payment_data","payment_method","transaction_id","transactionIdentifier","transformedBillingAddress","transformedShippingAddress","emailAddress","completePayment","STATUS_SUCCESS","STATUS_FAILURE","contact","givenName","familyName","addressLines","paymentIntegrationService","BoltDeveloperMode","StyleButtonSize","StyleButtonShape","boltScriptLoader","boltHostWindow","storefrontApiToken","publishableKey","developerConfig","loadBoltClient","BoltConnect","setupProductPageCheckout","addButtonContainer","boltButtonContainer","boltButtonObject","getBoltObjectData","append","innerHTML","domainUrl","getDomainURL","buttonHeight","getButtonHeight","buttonBorderRadius","getButtonBorderRadius","stringifyUrl","publishable_key","variant","border_radius","buttonSize","Small","Large","Medium","buttonShape","Pill","Rect","developerModeParams","BoltCheckout","getScriptOptions","loadBoltEmbedded","Bolt","developerMode","StagingMode","DevelopmentMode","developerDomain","CartSource","PayPalCommerceIntent","StyleButtonLabel","StyleButtonColor","NonInstantAlternativePaymentMethods","PayPalOrderStatus","formPoster","paypalCommerceRequestSender","paypalCommerceScriptLoader","loadPayPalSdk","providedCurrencyCode","initializesOnCheckoutPage","getPayPalSDK","paypalSdk","getPayPalSdkOrThrow","createBuyNowCartOrThrow","requestBody","updateOrder","getOrderStatus","order_id","BuyNow","device_info","method_id","paypal_account","getShippingOptionOrThrow","selectedShippingOptionId","recommendedShippingOption","shippingOptionToSelect","getAddress","getBillingAddressFromOrderDetails","given_name","surname","email_address","admin_area_2","admin_area_1","getShippingAddressFromOrderDetails","orderDetails","removeElement","getPayPalSdkScriptConfigOrThrow","paypalSdkScriptConfig","paypalLoadScript","buyerCountry","attributionId","isVenmoEnabled","isHostedCheckoutEnabled","isPayPalCreditAvailable","isDeveloperModeApplicable","availableAlternativePaymentMethods","enabledAlternativePaymentMethods","shouldEnableCard","enableCardFunding","disableCardFunding","enableCreditFunding","disableCreditFunding","shouldEnableAPMs","enableVenmoFunding","disableVenmoFunding","enableAPMsFunding","disableAPMsFunding","apm","disableFunding","enableFunding","createFormPoster","paypalCommerceIntegrationService","paypalcommerce","onComplete","defaultCallbacks","orderID","buyNowFlowCallbacks","handleClick","onCancel","hostedCheckoutCallbacks","onShippingAddressChange","onShippingOptionsChange","onHostedCheckoutApprove","buttonRenderOptions","paypalButton","paypalcommercecredit","renderMessages","paypalMessagesOptions","paypalcommercevenmo","VENMO","getValidVenmoButtonStyles","gold","paypalcommercealternativemethods","paypalExpressScriptLoader","loadPaypalSDK","paypalSDK","getStyle","setupPayment","getPaymentData","createCheckoutButtonInitializer","registryV2","checkoutButtonStrategyFactories","registry","createCheckoutButtonStrategy","isResolvableModule","storeProjectionFactory","checkoutActionCreator","hostedFormFactory","orderActionCreator","billingAddressActionCreator","consignmentActionCreator","paymentMethodActionCreator","paymentActionCreator","paymentClient","setHost","paymentSettings","bigpayBaseUrl","createPaymentClient","customerActionCreator","storeCreditActionCreator","spamProtection","spamProtectionRequestSender","spamProtectionActionCreator","cartRequestSender","createPaymentIntegrationService","checkoutRequestSender","braintreeSdkCreator","amazonPayV2RequestSender","createCheckoutButtonRegistry"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/checkout-button.umd.js b/dist/checkout-button.umd.js index 3431a8cb19..d3438d3c51 100644 --- a/dist/checkout-button.umd.js +++ b/dist/checkout-button.umd.js @@ -1,3 +1,3 @@ /*! For license information please see checkout-button.umd.js.LICENSE.txt */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.checkoutKit=e():t.checkoutKit=e()}(self,(()=>(()=>{var t={89538:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=d(n(66534)),o=d(n(43279)),a=d(n(86202)),u=d(n(98834)),s=d(n(43961)),c=d(n(11906));function d(t){return t&&t.__esModule?t:{default:t}}function l(t){return l="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},l(t)}function f(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={host:""}},56280:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.APPLICATION_JSON=void 0,e.APPLICATION_JSON="application/json"},44955:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var r=n(56280),i=n(99338),o={headers:{Accept:r.APPLICATION_JSON,"Content-Type":r.APPLICATION_JSON},method:i.GET};e.default=o},99338:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.POST=e.GET=e.DELETE=void 0,e.GET="GET",e.POST="POST",e.DELETE="DELETE"},92197:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(5099),n(38490),n(64668),n(16368),n(99023),n(40737),n(74035),n(10951),n(58443),n(34500),n(25959),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,o=(i=n(66534))&&i.__esModule?i:{default:i},a=n(56280),u=n(60301);function s(t){return s="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s(t)}function c(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:a.APPLICATION_JSON;return t&&(0,u.includes)(e,a.APPLICATION_JSON)?JSON.stringify(t):t}},{key:"fromResponse",value:function(t){var e=this.parseResponseHeaders(t.getAllResponseHeaders()),n=t.getResponseHeader("Content-Type"),r=t.status,i=t.statusText,o="response"in t?t.response:t.responseText;return o&&(0,u.includes)(n,a.APPLICATION_JSON)&&(o=JSON.parse(o)),{data:o,headers:e,status:r,statusText:i}}},{key:"parseResponseHeaders",value:function(t){return(t?t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/):[]).reduce((function(t,e){var n=e.split(":"),r=(n.shift()||"").trim();return r?(0,o.default)({},t,function(t,e,n){return(e=d(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({},r.toLowerCase(),n.join(":").trim())):t}),{})}}],r=[{key:"create",value:function(){return new t}}],n&&c(e.prototype,n),r&&c(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.default=l},48773:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}function o(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=d(n(18712)),o=d(n(66534)),a=n(99338),u=d(n(44955)),s=d(n(92197)),c=d(n(48773));function d(t){return t&&t.__esModule?t:{default:t}}function l(t){return l="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},l(t)}function f(t,e){for(var n=0;n=200&&t.status<300}}])&&f(e.prototype,n),r&&f(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.default=p},50630:(t,e,n)=>{"use strict";n(6550),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return!(!Array.isArray(t)&&"string"!=typeof t)&&-1!==t.indexOf(e)}},60301:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"includes",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"isNil",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"isObject",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"omitEmptyStringAndNil",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"omitNil",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"omitProperty",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"toNumber",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"toSnakeCase",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(e,"toString",{enumerable:!0,get:function(){return l.default}});var r=f(n(50630)),i=f(n(65480)),o=f(n(63387)),a=f(n(91145)),u=f(n(75750)),s=f(n(66206)),c=f(n(30439)),d=f(n(27302)),l=f(n(78267));function f(t){return t&&t.__esModule?t:{default:t}}},57457:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return""===t}},32713:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,r.default)(t)||(0,i.default)(t)};var r=o(n(57457)),i=o(n(65480));function o(t){return t&&t.__esModule?t:{default:t}}},65480:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return null==t}},63387:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return null!==t&&"object"===i(t)&&!Array.isArray(t)}},91145:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,i.default)(t,r.default)};var r=o(n(32713)),i=o(n(66206));function o(t){return t&&t.__esModule?t:{default:t}}},75750:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,i.default)(t,r.default)};var r=o(n(65480)),i=o(n(66206));function o(t){return t&&t.__esModule?t:{default:t}}},66206:(t,e,n)=>{"use strict";n(13722),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return(0,i.default)(t)?Object.keys(t).reduce((function(n,r){var i=t[r];return e(i)||(n[r]=i),n}),{}):t};var r,i=(r=n(63387))&&r.__esModule?r:{default:r}},30439:(t,e,n)=>{"use strict";n(83681),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return parseFloat(t)||0}},27302:(t,e,n)=>{"use strict";n(58443),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"string"!=typeof t?t:t.replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},78267:(t,e,n)=>{"use strict";n(99023),n(80226),n(40737),n(26667),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"string"==typeof t?t:"number"!=typeof t||Number.isNaN(t)?"":t.toString()}},36438:(t,e,n)=>{"use strict";e.e=function(t){return i.default.create(t)};var r,i=(r=n(89538))&&r.__esModule?r:{default:r}},98834:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=u(n(14735)),o=u(n(15859)),a=u(n(92239));function u(t){return t&&t.__esModule?t:{default:t}}function s(t){return s="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s(t)}function c(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(13751),o=n(7969),a=s(n(14088)),u=s(n(92239));function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},c(t)}function d(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e,n){return(e=s(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function u(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(34745),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=l(n(66534)),o=n(60301),a=l(n(45860)),u=l(n(31146)),s=l(n(8006)),c=l(n(80720)),d=l(n(85064));function l(t){return t&&t.__esModule?t:{default:t}}function f(t){return f="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},f(t)}function p(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PAYPAL_COMMERCE_VENMO=e.PAYPAL_COMMERCE_CREDIT_CARDS=e.PAYPAL_COMMERCE_CREDIT=e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=e.PAYPAL_COMMERCE=e.BRAINTREE_VISACHECKOUT=e.BRAINTREE_PAYPAL_CREDIT=e.BRAINTREE_PAYPAL=e.BRAINTREE_LOCAL_METHODS=e.BRAINTREE_GOOGLEPAY=e.BRAINTREE_ACH=e.BRAINTREE=void 0,e.BRAINTREE="braintree",e.BRAINTREE_PAYPAL="braintreepaypal",e.BRAINTREE_PAYPAL_CREDIT="braintreepaypalcredit",e.BRAINTREE_VISACHECKOUT="braintreevisacheckout",e.BRAINTREE_LOCAL_METHODS="braintreelocalmethods",e.BRAINTREE_GOOGLEPAY="googlepaybraintree",e.BRAINTREE_ACH="braintreeach",e.PAYPAL_COMMERCE="paypalcommerce",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS="paypalcommercealternativemethods",e.PAYPAL_COMMERCE_CREDIT="paypalcommercecredit",e.PAYPAL_COMMERCE_CREDIT_CARDS="paypalcommercecreditcards",e.PAYPAL_COMMERCE_VENMO="paypalcommercevenmo"},80720:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(9257),o=n(86879);function a(t){return a="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},a(t)}function u(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PPSDK_CREDIT_CARD=e.MULTI_OPTION=e.CREDIT_CARD=void 0,e.CREDIT_CARD="credit-card",e.MULTI_OPTION="multi-option",e.PPSDK_CREDIT_CARD="card"},86202:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=c(n(14735)),o=n(7969),a=c(n(86130)),u=c(n(22147)),s=c(n(92239));function c(t){return t&&t.__esModule?t:{default:t}}function d(t){return d="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},d(t)}function l(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SDK=e.OFFLINE=e.HOSTED=e.API=void 0,e.API="PAYMENT_TYPE_API",e.HOSTED="PAYMENT_TYPE_HOSTED",e.OFFLINE="PAYMENT_TYPE_OFFLINE",e.SDK="PAYMENT_TYPE_SDK"},22147:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301),o=n(9257);function a(t){return a="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},a(t)}function u(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}function o(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(95412),n(16368),n(34745),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301),o=c(n(43085)),a=c(n(11106)),u=c(n(47752)),s=c(n(58332));function c(t){return t&&t.__esModule?t:{default:t}}function d(t){return d="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},d(t)}function l(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=u(n(66534)),o=n(60301),a=u(n(80720));function u(t){return t&&t.__esModule?t:{default:t}}function s(t){return s="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s(t)}function c(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(95412),n(16368),n(34745),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301),o=c(n(45873)),a=c(n(43026)),u=c(n(70170)),s=c(n(23393));function c(t){return t&&t.__esModule?t:{default:t}}function d(t){return d="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},d(t)}function l(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,o=n(60301),a=(i=n(80720))&&i.__esModule?i:{default:i};function u(t){return u="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},u(t)}function s(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=s(n(14735)),o=n(99338),a=s(n(25682)),u=n(68109);function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},c(t)}function d(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}function o(t,e){for(var n=0;n{"use strict";n(95412),Object.defineProperty(e,"__esModule",{value:!0}),e.mapToHeaders=function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).authToken;return(0,r.omitNil)({Authorization:t})},e.mapToInstrumentPayload=function(){var t,e,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},u=a.providerName,s=a.defaultInstrument,c=(0,r.omitNil)({name:u});return(0,r.omitNil)({provider:c,credit_card:(t=a,e=t.creditCard,n=void 0===e?{}:e,o=(0,r.omitNil)(n.threeDSecure),(0,r.omitNil)({cardholder_name:n.cardholderName,number:n.number,month:n.month,year:n.year,verification_code:n.verificationCode,issue_month:n.issueMonth,issue_year:n.issueYear,issue_number:n.issueNumber,track_data:n.trackData,is_manual_entry:n.isManualEntry,icc_data:n.iccData,fallback_reason:n.fallbackReason,is_contactless:n.isContactless,encrypted_pin_cryptogram:n.encryptedPinCryptogram,encrypted_pin_ksn:n.encryptedPinKsn,three_d_secure:o})),billing_address:i(a.billingAddress),default_instrument:s})},e.mapToTrustedShippingAddressPayload=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(t.shippingAddress)?(0,r.omitNil)({shipping_addresses:t.shippingAddress.map((function(t){return i(t)}))}):(0,r.omitNil)({shipping_address:i(t.shippingAddress)})};var r=n(60301);function i(){var t,e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=(t=n.provinceCode,e=n.province,(0,r.omitNil)({code:t,name:e}));return(0,r.omitNil)({address_line_1:n.addressLine1,address_line_2:n.addressLine2,city:n.city,company:n.company,country_code:n.countryCode,email:n.email,first_name:n.firstName,last_name:n.lastName,phone:n.phone,postal_code:n.postCode,state:i})}},119:(t,e,n)=>{"use strict";n(13722),Object.defineProperty(e,"__esModule",{value:!0});var r=n(87275),i=n(10874);e.default=function(t,e){var n=(e||{}).equalityCheck,o=void 0===n?i:n;return function(e,n){return Object.keys(t).reduce((function(i,a){var u,s=t[a],c=e?e[a]:void 0,d=s(c,n);return o(c,d)&&i?i:r.assign({},i,((u={})[a]=d,u))}),e||{})}}},50538:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(51725),n(38490),n(95412),n(16516),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var i=n(61699),o=n(87275),a=n(10874);e.default=function(){for(var t=[],e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=n(87275);e.default=function(t,e,n){if("string"!=typeof t||""===t)throw new Error("`type` must be a string");return r.__assign({type:t},i.omitBy({payload:e,meta:n},(function(t){return void 0===t})))}},17372:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(119),i=n(58941);e.default=function(t,e,n){return"function"==typeof t?new i.default(t,e,n):new i.default(r.default(t,{equalityCheck:n&&n.equalityCheck}),e,n)}},13304:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=n(10520);e.default=function(t,e,n){return r.__assign({},i.default(t,e,n),{error:!0})}},58941:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(51725),n(38490),n(95412),n(40737),n(83823),n(10951),n(71806),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var i=n(61699),o=n(87275),a=n(57469),u=n(11065),s=n(10874),c=n(35580),d=n(35643),l=n(25151),f=n(32168),p=function(){function t(t,e,n){void 0===e&&(e={});var r=this;this._reducer=t,this._options=i.__assign({actionTransformer:l.default,equalityCheck:s,shouldWarnMutation:!0,stateTransformer:f.default},n),this._state$=new a.BehaviorSubject(this._options.stateTransformer(e)),this._notification$=new a.Subject,this._dispatchers={},this._dispatchQueue$=new a.Subject,this._errors={},this._dispatchQueue$.pipe(u.mergeMap((function(t){return t.pipe(u.concatMap((function(t){return t})))})),u.filter((function(t){return!!t.type})),u.scan((function(t,e){return r._transformStates(t,e)}),{state:e,transformedState:this._state$.getValue()}),u.distinctUntilChanged((function(t,e){var n=t.state,i=e.state;return r._options.equalityCheck(n,i)})),u.map((function(t){return t.transformedState}))).subscribe(this._state$),this.dispatch({type:"INIT"})}return t.prototype.dispatch=function(t,e){return d.default(t)?this._dispatchObservableAction(t,e):"function"==typeof t?this._dispatchThunkAction(t,e):this._dispatchAction(t)},t.prototype.getState=function(){return this._state$.getValue()},t.prototype.notifyState=function(){this._notification$.next(this.getState())},t.prototype.subscribe=function(t){for(var e=this,n=[],i=1;i0&&(s=s.pipe(u.distinctUntilChanged((function(t,n){return a.every((function(r){return e._options.equalityCheck(r(t),r(n))}))})))),o&&!1===o.initial&&(s=s.pipe(u.skip(1)));var c=[s.subscribe(t),this._notification$.subscribe(t)];return function(){return c.forEach((function(t){return t.unsubscribe()}))}},t.prototype._transformStates=function(t,e){try{var n=!1===this._options.shouldWarnMutation?this._reducer(t.state,e):c.default(this._reducer(t.state,e),{equalityCheck:this._options.equalityCheck,previousValue:t.state});return{state:n,transformedState:this._options.stateTransformer(n)}}catch(n){return this._getDispatchError(e.meta&&e.meta.queueId).next(n),{state:t.state,transformedState:t.transformedState}}},t.prototype._dispatchAction=function(t){return this._dispatchObservableAction(t.error?a.throwError(t):a.of(t))},t.prototype._dispatchObservableAction=function(t,e){var n=this;return void 0===e&&(e={}),new Promise((function(r,i){var s=n._getDispatchError(e.queueId),c=n._options.actionTransformer(a.from(t).pipe(u.map((function(t){return e.queueId?o.merge({},t,{meta:{queueId:e.queueId}}):t}))));n._getDispatcher(e.queueId).next(a.from(c).pipe(u.map((function(t,e){return 0===e&&s.pipe(u.first()).subscribe(i),t.error&&i(t.payload),t})),u.catchError((function(t){return i(t instanceof Error?t:t.payload),a.of(t)})),u.tap({complete:function(){r(n.getState())}})))}))},t.prototype._dispatchThunkAction=function(t,e){var n=this;return void 0===e&&(e={}),this._dispatchObservableAction(a.defer((function(){return t(n)})),e)},t.prototype._getDispatcher=function(t){return void 0===t&&(t="default"),this._dispatchers[t]||(this._dispatchers[t]=new a.Subject,this._dispatchQueue$.next(this._dispatchers[t])),this._dispatchers[t]},t.prototype._getDispatchError=function(t){return void 0===t&&(t="default"),this._errors[t]||(this._errors[t]=new a.Subject),this._errors[t]},t}();e.default=p},35580:(t,e,n)=>{"use strict";n(95412),n(33409),n(60678),n(97814),Object.defineProperty(e,"__esModule",{value:!0});var r=n(87275),i=n(10874);e.default=function t(e,n){try{var o=n||{},a=o.equalityCheck,u=void 0===a?i:a,s=o.previousValue,c=void 0===s?null:s;return u(e,c)&&Object.isFrozen(c)?c:Object.isFrozen(e)||!Array.isArray(e)&&!r.isPlainObject(e)?e:Array.isArray(e)?Object.freeze(e.map((function(e,n){return t(e,{equalityCheck:u,previousValue:Array.isArray(c)?c[n]:void 0})}))):Object.freeze(Object.getOwnPropertyNames(e).reduce((function(n,r){return n[r]=t(e[r],{equalityCheck:u,previousValue:c&&c.hasOwnProperty(r)?c[r]:void 0}),n}),{}))}catch(t){if(t instanceof TypeError)return e;throw t}}},45346:(t,e,n)=>{"use strict";n(58941).default;var r=n(119);e.UY=r.default;var i=n(50538);e.g0=i.default;var o=n(10520);e.PH=o.default;var a=n(17372);e.Mg=a.default;var u=n(13304);e.bR=u.default;var s=n(35580);e._A=s.default},35643:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"function"==typeof t.subscribe||"function"==typeof t.then}},25151:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t}},32168:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t}},78545:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11077),i=n(51243);e.default=function(t){var e=new r.default;return new i.default(e,t)}},11077:(t,e,n)=>{"use strict";n(13722),n(71806),Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.prototype.build=function(t,e,n){var r=this,i=document.createElement("form");return i.style.display="none",i.setAttribute("action",t),i.setAttribute("method","POST"),i.setAttribute("target",n||"_top"),Object.keys(e).forEach((function(t){var n=e[t];i.appendChild(r._createInput(n,t))})),i},t.prototype._createInput=function(t,e){var n=document.createElement("input");return n.setAttribute("name",e),n.setAttribute("type","hidden"),n.setAttribute("value",t),n},t}();e.default=r},51243:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(73543),i=function(){function t(t,e){this._formBuilder=t,this._options=e}return t.prototype.postForm=function(t,e,n,r){var i=this._formBuilder.build(this._prependHost(t),e,r);window.addEventListener("unload",(function t(){window.removeEventListener("unload",t),n&&n()})),document.body.appendChild(i),i.submit(),document.body.removeChild(i)},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!r.isAbsoluteUrl(t)?r.joinPaths(this._options.host,t):t},t}();e.default=i},13751:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(78545);e.createFormPoster=r.default;var i=n(51243);e.FormPoster=i.default},73543:(t,e,n)=>{"use strict";n(58443),Object.defineProperty(e,"__esModule",{value:!0}),e.isAbsoluteUrl=function(t){return/^https?:\/\//.test(t)},e.joinPaths=function(t,e){return t.replace(/\/$/,"")+"/"+e.replace(/^\//,"")}},65934:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isTerminalCacheKeyMap=function(t){return t.hasOwnProperty("cacheKey")},e.isRootCacheKeyMap=function(t){return t.hasOwnProperty("parentMap")}},67959:(t,e,n)=>{"use strict";n(6550),n(95412),n(16516),n(32345),Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=n(87275),o=r.__importDefault(n(10874)),a=n(65934),u=function(){function t(t){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=r.__assign({isEqual:o.default,maxSize:0,onExpire:i.noop},t)}return t.prototype.getKey=function(){for(var t=[],e=0;e{"use strict";var r=n(78497);e.HP=r.default,e.qe=r.memoizeOne},78497:(t,e,n)=>{"use strict";n(38490),n(34897),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=r.__importDefault(n(84026)),o=r.__importDefault(n(10874)),a=r.__importDefault(n(67959));function u(t,e){var n=r.__assign({maxSize:0,isEqual:o.default},e),u=n.maxSize,s=n.isEqual,c=new Map,d=new a.default({isEqual:s,maxSize:u,onExpire:function(t){return c.delete(t)}}),l=i.default(t,(function(){for(var t=[],e=0;e{"use strict";n.d(e,{v:()=>i}),n(13722);var r=n(52163),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:t+"?"+r.Pz(e)},t}()},78128:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(53028),i=n(70613),o=n(44169),a=n(73185);function u(t){return new a.Z(new o.Z,new i.Z,r,t)}},98215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(88287);function i(t){return new r.Z(t)}},14121:(t,e,n)=>{"use strict";n.r(e),n.d(e,{RequestSender:()=>o.Z,Timeout:()=>a.Z,createRequestSender:()=>r.Z,createTimeout:()=>i.Z});var r=n(78128),i=n(98215),o=n(73185),a=n(88287)},16927:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return!!t&&("object"===r(t)||"function"==typeof t)&&"function"==typeof t.then}n.d(e,{Z:()=>i}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193)},70613:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u}),n(64668),n(58443),n(34500),n(25959);var r=n(61699),i=n(75457),o=/application\/(\w+\+)?json/,a=/application\/x-www-form-urlencoded/;const u=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,"Content-Type"):"";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(a.test(e))return(0,i.Z)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody("response"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,"Content-Type");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/):[]).reduce((function(t,e){var n,i=e.split(":"),o=(i.shift()||"").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(":").trim(),n)):t}),{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||""},t}()},44169:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i}),n(51725),n(13722),n(71806);var r=n(52163);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||"GET",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),"boolean"==typeof n.credentials&&(t.withCredentials=n.credentials),"number"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter((function(t){return null!==e[t]})).forEach((function(n){t.setRequestHeader(n,e[n])}))},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?t+"?"+r.Pz(e,{encode:n}):t},t}()},73185:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c}),n(40737),n(83823),n(58443),n(34500);var r=n(61699),i=n(59947),o=n.n(i),a=n(90956),u=n(16927),s=n(88287);const c=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.v}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise((function(e,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(t,r,a),e(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof s.Z&&(r.timeout.onComplete((function(){return o.abort()})),r.timeout.start()),(0,u.Z)(r.timeout)&&r.timeout.then((function(){return o.abort()})),o.send(n._payloadTransformer.toRequestBody(r))}))},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"GET"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"POST"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"PUT"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"PATCH"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"DELETE"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:"application/json, text/plain, */*"},method:"GET"},r=this._cookie.get("XSRF-TOKEN");return r&&n.headers&&!this._isAssetRequest(t,e)&&(n.headers["X-XSRF-TOKEN"]=r),e&&e.body&&n.headers&&(n.headers["Content-Type"]="application/json"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\/\//.test(t)?t:this._options.host.replace(/\/$/,"")+"/"+t.replace(/^\//,"")},t.prototype._shouldCacheRequest=function(t){return"GET"===(t.method||"GET").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||"GET"===e.method.toUpperCase())&&/\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split("?")[0])},t}()},88287:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r}),n(40737),n(83823);const r=function(){function t(t){var e=this;this._delay=t,this._resolve=function(){},this._promise=new Promise((function(t){e._resolve=t}))}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),this._timeoutToken&&window.clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;this._delay&&(this._timeoutToken=window.setTimeout((function(){return t.complete()}),this._delay))},t}()},75457:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return"object"!==r(t)||null===t?t:Object.keys(t).filter((function(e){return void 0!==t[e]})).map((function(e){var n=t[e];return"string"==typeof n?e+"="+encodeURIComponent(n):e+"="+encodeURIComponent(JSON.stringify(n)||"")})).join("&")}n.d(e,{Z:()=>i}),n(93942),n(70472),n(93270),n(51725),n(38490),n(64668),n(95412),n(13722),n(40737),n(10951),n(5193)},52163:(t,e,n)=>{"use strict";n(93942),n(70472),n(93270),n(88033),n(51725),n(6550),n(38490),n(64668),n(95412),n(16516),n(2934),n(99023),n(13722),n(40737),n(10951),n(58443),n(34500),n(25959),n(71806),n(5193);var r=n(29590),i=n(66534);n(99684);function o(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}e.Pz=function(t,e){!1===(e=i({encode:!0,strict:!0,arrayFormat:"none"},e)).sort&&(e.sort=function(){});var n=function(t){switch(t.arrayFormat){case"index":return function(e,n,r){return null===n?[o(e,t),"[",r,"]"].join(""):[o(e,t),"[",o(r,t),"]=",o(n,t)].join("")};case"bracket":return function(e,n){return null===n?o(e,t):[o(e,t),"[]=",o(n,t)].join("")};default:return function(e,n){return null===n?o(e,t):[o(e,t),"=",o(n,t)].join("")}}}(e);return t?Object.keys(t).sort(e.sort).map((function(r){var i=t[r];if(void 0===i)return"";if(null===i)return o(r,e);if(Array.isArray(i)){var a=[];return i.slice().forEach((function(t){void 0!==t&&a.push(n(r,t,a.length))})),a.join("&")}return o(r,e)+"="+o(i,e)})).filter((function(t){return t.length>0})).join("&"):""}},42372:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement("link");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},30799:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(14121),i=n(42372),o=n(89379);e.default=function(){return new o.default(new i.default,r.createRequestSender())}},83116:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(14121),i=n(42372),o=n(41583);e.default=function(){return new o.default(new i.default,r.createRequestSender())}},57537:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(30799);e.default=function(){return r||(r=i.default()),r}},59136:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(83116);e.default=function(){return r||(r=i.default()),r}},56046:(t,e,n)=>{"use strict";n(89379).default;var r=n(30799);e.VD=r.default;var i=n(57537);e.Vr=i.default,n(41583).default,n(83116).default,n(59136).default},89379:(t,e,n)=>{"use strict";n(38490),n(95412),n(13722),n(40737),n(83823),n(10951),n(71806),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise((function(r,i){var o=document.createElement("script"),a=e||{},u=a.async,s=void 0!==u&&u,c=a.attributes,d=void 0===c?{}:c;Object.keys(d).forEach((function(t){o.setAttribute(t,d[t])})),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=s,o.src=t,document.body.appendChild(o)}))),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.loadScript(t,e)}))).then((function(){}))},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise((function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o?"prefetch":"preload";if(n._browserSupport.canSupportRel(a)){var u=document.createElement("link");u.as="script",u.rel=a,u.href=t,u.onload=function(){r()},u.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(u)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:"application/javascript"}}).then((function(){return r()})).catch(i)}))),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.preloadScript(t,e)}))).then((function(){}))},t}();e.default=r},41583:(t,e,n)=>{"use strict";n(38490),n(95412),n(13722),n(40737),n(83823),n(10951),n(71806),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise((function(r,i){var o=document.createElement("link"),a=e||{},u=a.prepend,s=void 0!==u&&u,c=a.attributes,d=void 0===c?{}:c;Object.keys(d).forEach((function(t){o.setAttribute(t,d[t])})),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel="stylesheet",o.href=t,s&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)}))),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.loadStylesheet(t,e)}))).then((function(){}))},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise((function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o,u=a?"prefetch":"preload";if(n._browserSupport.canSupportRel(u)){var s=document.createElement("link");s.as="style",s.rel=a?"prefetch":"preload",s.href=t,s.onload=function(){r()},s.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(s)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:"text/css"}}).then((function(){return r()})).catch(i)}))),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.preloadStylesheet(t,e)}))).then((function(){}))},t}();e.default=r},67061:(t,e,n)=>{"use strict";t.exports={number:n(9428),expirationDate:n(10370),expirationMonth:n(86075),expirationYear:n(34005),cvv:n(56348),postalCode:n(46887),creditCardType:n(56897)}},9428:(t,e,n)=>{"use strict";n(58443);var r=n(54442),i=n(56897);function o(t,e,n){return{card:t,isPotentiallyValid:e,isValid:n}}t.exports=function(t,e){var n,a,u,s,c;if(e=e||{},"number"==typeof t&&(t=String(t)),"string"!=typeof t)return o(null,!1,!1);if(t=t.replace(/\-|\s/g,""),!/^\d*$/.test(t))return o(null,!1,!1);if(0===(n=i(t)).length)return o(null,!1,!1);if(1!==n.length)return o(null,!0,!1);if(a=n[0],e.maxLength&&t.length>e.maxLength)return o(a,!1,!1);for(u=a.type===i.types.UNIONPAY&&!0!==e.luhnValidateUnionPay||r(t),c=Math.max.apply(null,a.lengths),e.maxLength&&(c=Math.min(e.maxLength,c)),s=0;s{"use strict";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,n){return n=(n=n||3)instanceof Array?n:[n],"string"!=typeof t?e(!1,!1):/^\d*$/.test(t)?function(t,e){for(var n=0;nfunction(t){for(var e=3,n=0;ne?t[n]:e;return e}(n)?e(!1,!1):e(!0,!0):e(!1,!1)}},10370:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(58443),n(5193);var i=n(30443),o=n(86075),a=n(34005);function u(t,e,n,r){return{isValid:t,isPotentiallyValid:e,month:n,year:r}}t.exports=function(t,e){var n,s,c,d;if("string"==typeof t)t=t.replace(/^(\d\d) (\d\d(\d\d)?)$/,"$1/$2"),n=i(t);else{if(null===t||"object"!==r(t))return u(!1,!1,null,null);n={month:String(t.month),year:String(t.year)}}if(s=o(n.month),c=a(n.year,e),s.isValid){if(c.isCurrentYear)return u(d=s.isValidForThisYear,d,n.month,n.year);if(c.isValid)return u(!0,!0,n.month,n.year)}return s.isPotentiallyValid&&c.isPotentiallyValid?u(!1,!0,null,null):u(!1,!1,null,null)}},86075:(t,e,n)=>{"use strict";function r(t,e,n){return{isValid:t,isPotentiallyValid:e,isValidForThisYear:n||!1}}n(50633),n(58443),t.exports=function(t){var e,n,i=(new Date).getMonth()+1;return"string"!=typeof t?r(!1,!1):""===t.replace(/\s/g,"")||"0"===t?r(!1,!0):/^\d*$/.test(t)?(e=parseInt(t,10),isNaN(t)?r(!1,!1):r(n=e>0&&e<13,n,n&&e>=i)):r(!1,!1)}},34005:(t,e,n)=>{"use strict";n(16516),n(99023),n(50633),n(58443);function r(t,e,n){return{isValid:t,isPotentiallyValid:e,isCurrentYear:n||!1}}t.exports=function(t,e){var n,i,o,a,u;return e=e||19,"string"!=typeof t?r(!1,!1):""===t.replace(/\s/g,"")?r(!1,!0):/^\d*$/.test(t)?(i=t.length)<2?r(!1,!0):(n=(new Date).getFullYear(),3===i?r(!1,t.slice(0,2)===String(n).slice(0,2)):i>4?r(!1,!1):(t=parseInt(t,10),o=Number(String(n).substr(2,2)),2===i?(u=o===t,a=t>=o&&t<=o+e):4===i&&(u=n===t,a=t>=n&&t<=n+e),r(a,a,u))):r(!1,!1)}},16108:(t,e,n)=>{"use strict";n(40737),n(26667),t.exports=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},54442:(t,e,n)=>{"use strict";n(50633),t.exports=function(t){for(var e,n=0,r=!1,i=t.length-1;i>=0;)e=parseInt(t.charAt(i),10),r&&(e*=2)>9&&(e=e%10+1),r=!r,n+=e,i--;return n%10==0}},30443:(t,e,n)=>{"use strict";n(64668),n(72590),n(16516),n(99023),n(34500);var r=n(34005),i=n(16108);t.exports=function(t){var e,n,o,a,u;return/^\d{4}-\d{1,2}$/.test(t)?t=t.split("-").reverse():/\//.test(t)?t=t.split(/\s*\/\s*/g):/\s/.test(t)&&(t=t.split(/ +/g)),i(t)?{month:t[0]||"",year:t.slice(1).join()}:(o=t,n=0===(u=Number(o[0]))?2:u>1||1===u&&Number(o[1])>2?1:1===u?(a=o.substr(1),r(a).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:e=t.substr(0,n),year:t.substr(e.length)})}},46887:t=>{"use strict";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,n){var r;return r=(n=n||{}).minLength||3,"string"!=typeof t?e(!1,!1):t.length{"use strict";n(6550),n(95412),n(32345),n(13722),n(71806);var r,i=n(18906),o=n(80826),a=n(16538),u=n(76754),s=n(25578),c={},d={VISA:"visa",MASTERCARD:"mastercard",AMERICAN_EXPRESS:"american-express",DINERS_CLUB:"diners-club",DISCOVER:"discover",JCB:"jcb",UNIONPAY:"unionpay",MAESTRO:"maestro",ELO:"elo",MIR:"mir",HIPER:"hiper",HIPERCARD:"hipercard"},l=[d.VISA,d.MASTERCARD,d.AMERICAN_EXPRESS,d.DINERS_CLUB,d.DISCOVER,d.JCB,d.UNIONPAY,d.MAESTRO,d.ELO,d.MIR,d.HIPER,d.HIPERCARD];function f(t){return c[t]||i[t]}function p(t,e){var n=r.indexOf(t);if(!e&&-1===n)throw new Error('"'+t+'" is not a supported card type.');return n}function h(t){var e,n=[];return u(t)?0===t.length?r.map((function(t){return o(f(t))})):(r.forEach((function(e){var r=f(e);s(t,r,n)})),(e=a(n))?[e]:n):[]}r=o(l),h.getTypeInfo=function(t){return o(f(t))},h.removeCard=function(t){var e=p(t);r.splice(e,1)},h.addCard=function(t){var e=p(t.type,!0);c[t.type]=t,-1===e&&r.push(t.type)},h.updateCard=function(t,e){var n,r=c[t]||i[t];if(!r)throw new Error('"'+t+'" is not a recognized type. Use `addCard` instead.');if(e.type&&r.type!==e.type)throw new Error("Cannot overwrite type parameter.");n=o(r,!0),Object.keys(n).forEach((function(t){e[t]&&(n[t]=e[t])})),c[n.type]=n},h.changeOrder=function(t,e){var n=p(t);r.splice(n,1),r.splice(e,0,t)},h.resetModifications=function(){r=o(l),c={}},h.types=d,t.exports=h},25578:(t,e,n)=>{"use strict";var r=n(80826),i=n(90013);t.exports=function(t,e,n){var o,a,u,s;for(o=0;o=u&&(s.matchStrength=u),n.push(s);break}}},18906:t=>{"use strict";t.exports={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}}},80826:t=>{"use strict";t.exports=function(t){return t?JSON.parse(JSON.stringify(t)):null}},16538:(t,e,n)=>{"use strict";n(51725),t.exports=function(t){if(function(t){var e=t.filter((function(t){return t.matchStrength})).length;return e>0&&e===t.length}(t))return t.reduce((function(t,e){return t?t.matchStrength{"use strict";t.exports=function(t){return"string"==typeof t||t instanceof String}},90013:(t,e,n)=>{"use strict";n(50633),t.exports=function(t,e){return Array.isArray(e)?function(t,e,n){var r=String(e).length,i=t.substr(0,r),o=parseInt(i,10);return e=parseInt(String(e).substr(0,i.length),10),n=parseInt(String(n).substr(0,i.length),10),o>=e&&o<=n}(t,e[0],e[1]):function(t,e){return(e=String(e)).substring(0,t.length)===t.substring(0,e.length)}(t,e)}},99684:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(88033),n(38490),n(64668),n(16516),n(13722),n(40737),n(84868),n(26667),n(10951),n(15483),n(58443),n(5193);var i="%[a-f0-9]{2}",o=new RegExp("("+i+")|([^%]+?)","gi"),a=new RegExp("("+i+")+","gi");function u(t,e){try{return[decodeURIComponent(t.join(""))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],u(n),u(r))}function s(t){try{return decodeURIComponent(t)}catch(r){for(var e=t.match(o)||[],n=1;n{"use strict";n(93942);var r=n(59788),i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(t,e,n){var o=e[n];if(null!=o){if(i.call(t,n)&&(void 0===t[n]||null===t[n]))throw new TypeError("Cannot convert undefined or null to object ("+n+")");i.call(t,n)&&r(o)?t[n]=u(Object(t[n]),e[n]):t[n]=o}}function u(t,e){if(t===e)return t;for(var n in e=Object(e))i.call(e,n)&&a(t,e,n);if(Object.getOwnPropertySymbols)for(var r=Object.getOwnPropertySymbols(e),u=0;u{"use strict";n(6550),n(13722),t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193),t.exports=function(t){var e=r(t);return null!==t&&("object"===e||"function"===e)}},53028:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(64668),n(16516),n(40737),n(10951),n(58443),n(34500),n(5193),function(n){var i;if("function"==typeof define&&define.amd&&(define(n),i=!0),"object"===r(e)&&(t.exports=n(),i=!0),!i){var o=window.Cookies,a=window.Cookies=n();a.noConflict=function(){return window.Cookies=o,a}}}((function(){function t(){for(var t=0,e={};t{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(95412),n(32345),n(40737),n(84868),n(26667),n(10951),n(58443),n(5193);var i,o="Expected a function",a="__lodash_hash_undefined__",u="[object Function]",s="[object GeneratorFunction]",c=/^\[object .+?Constructor\]$/,d="object"==(void 0===n.g?"undefined":r(n.g))&&n.g&&n.g.Object===Object&&n.g,l="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,f=d||l||Function("return this")(),p=Array.prototype,h=Function.prototype,y=Object.prototype,m=f["__core-js_shared__"],v=(i=/[^.]+$/.exec(m&&m.keys&&m.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"",g=h.toString,_=y.hasOwnProperty,b=y.toString,S=RegExp("^"+g.call(_).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),w=p.splice,C=x(f,"Map"),E=x(Object,"create");function I(t){var e=-1,n=t?t.length:0;for(this.clear();++e-1},P.prototype.set=function(t,e){var n=this.__data__,r=O(n,t);return r<0?n.push([t,e]):n[r][1]=e,this},A.prototype.clear=function(){this.__data__={hash:new I,map:new(C||P),string:new I}},A.prototype.delete=function(t){return T(this,t).delete(t)},A.prototype.get=function(t){return T(this,t).get(t)},A.prototype.has=function(t){return T(this,t).has(t)},A.prototype.set=function(t,e){return T(this,t).set(t,e),this},R.Cache=A,t.exports=R},59947:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}t=n.nmd(t),n(93942),n(70472),n(93270),n(38490),n(95412),n(16516),n(32345),n(71582),n(40737),n(84868),n(26667),n(10951),n(58443),n(5193);var i="__lodash_hash_undefined__",o=9007199254740991,a="[object Arguments]",u="[object AsyncFunction]",s="[object Function]",c="[object GeneratorFunction]",d="[object Null]",l="[object Object]",f="[object Proxy]",p="[object Undefined]",h=/^\[object .+?Constructor\]$/,y=/^(?:0|[1-9]\d*)$/,m={};m["[object Float32Array]"]=m["[object Float64Array]"]=m["[object Int8Array]"]=m["[object Int16Array]"]=m["[object Int32Array]"]=m["[object Uint8Array]"]=m["[object Uint8ClampedArray]"]=m["[object Uint16Array]"]=m["[object Uint32Array]"]=!0,m[a]=m["[object Array]"]=m["[object ArrayBuffer]"]=m["[object Boolean]"]=m["[object DataView]"]=m["[object Date]"]=m["[object Error]"]=m[s]=m["[object Map]"]=m["[object Number]"]=m[l]=m["[object RegExp]"]=m["[object Set]"]=m["[object String]"]=m["[object WeakMap]"]=!1;var v,g,_,b="object"==(void 0===n.g?"undefined":r(n.g))&&n.g&&n.g.Object===Object&&n.g,S="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,w=b||S||Function("return this")(),C="object"==r(e)&&e&&!e.nodeType&&e,E=C&&"object"==r(t)&&t&&!t.nodeType&&t,I=E&&E.exports===C,P=I&&b.process,A=function(){try{return E&&E.require&&E.require("util").types||P&&P.binding&&P.binding("util")}catch(t){}}(),O=A&&A.isTypedArray,T=Array.prototype,x=Function.prototype,R=Object.prototype,k=w["__core-js_shared__"],M=x.toString,N=R.hasOwnProperty,D=(v=/[^.]+$/.exec(k&&k.keys&&k.keys.IE_PROTO||""))?"Symbol(src)_1."+v:"",L=R.toString,z=M.call(Object),j=RegExp("^"+M.call(N).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),U=I?w.Buffer:void 0,F=w.Symbol,q=w.Uint8Array,B=(U&&U.allocUnsafe,g=Object.getPrototypeOf,_=Object,function(t){return g(_(t))}),G=Object.create,V=R.propertyIsEnumerable,Y=T.splice,H=F?F.toStringTag:void 0,W=function(){try{var t=ht(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),K=U?U.isBuffer:void 0,Z=Math.max,$=Date.now,J=ht(w,"Map"),Q=ht(Object,"create"),X=function(){function t(){}return function(e){if(!Pt(e))return{};if(G)return G(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function tt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1},et.prototype.set=function(t,e){var n=this.__data__,r=at(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},nt.prototype.clear=function(){this.size=0,this.__data__={hash:new tt,map:new(J||et),string:new tt}},nt.prototype.delete=function(t){var e=pt(this,t).delete(t);return this.size-=e?1:0,e},nt.prototype.get=function(t){return pt(this,t).get(t)},nt.prototype.has=function(t){return pt(this,t).has(t)},nt.prototype.set=function(t,e){var n=pt(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},rt.prototype.clear=function(){this.__data__=new et,this.size=0},rt.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},rt.prototype.get=function(t){return this.__data__.get(t)},rt.prototype.has=function(t){return this.__data__.has(t)},rt.prototype.set=function(t,e){var n=this.__data__;if(n instanceof et){var r=n.__data__;if(!J||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new nt(r)}return n.set(t,e),this.size=n.size,this};var st=function(t,e,n){for(var r=-1,i=Object(t),o=n(t),a=o.length;a--;){var u=o[++r];if(!1===e(i[u],u,i))break}return t};function ct(t){return null==t?void 0===t?p:d:H&&H in Object(t)?function(t){var e=N.call(t,H),n=t[H];try{t[H]=void 0;var r=!0}catch(t){}var i=L.call(t);return r&&(e?t[H]=n:delete t[H]),i}(t):function(t){return L.call(t)}(t)}function dt(t){return At(t)&&ct(t)==a}function lt(t,e,n,r,i){t!==e&&st(e,(function(o,a){if(i||(i=new rt),Pt(o))!function(t,e,n,r,i,o,a){var u=vt(t,n),s=vt(e,n),c=a.get(s);if(c)it(t,n,c);else{var d,f,p,h,y,m=o?o(u,s,n+"",t,e,a):void 0,v=void 0===m;if(v){var g=St(s),_=!g&&Ct(s),b=!g&&!_&&Ot(s);m=s,g||_||b?St(u)?m=u:At(y=u)&&wt(y)?m=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n-1&&t%1==0&&t0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ft);function _t(t,e){return t===e||t!=t&&e!=e}var bt=dt(function(){return arguments}())?dt:function(t){return At(t)&&N.call(t,"callee")&&!V.call(t,"callee")},St=Array.isArray;function wt(t){return null!=t&&It(t.length)&&!Et(t)}var Ct=K||function(){return!1};function Et(t){if(!Pt(t))return!1;var e=ct(t);return e==s||e==c||e==u||e==f}function It(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=o}function Pt(t){var e=r(t);return null!=t&&("object"==e||"function"==e)}function At(t){return null!=t&&"object"==r(t)}var Ot=O?function(t){return function(e){return t(e)}}(O):function(t){return At(t)&&It(t.length)&&!!m[ct(t)]};function Tt(t){return wt(t)?function(t,e){var n=St(t),r=!n&&bt(t),i=!n&&!r&&Ct(t),o=!n&&!r&&!i&&Ot(t),a=n||r||i||o,u=a?function(t,e){for(var n=-1,r=Array(t);++n1?e[i-1]:void 0,a=i>2?e[2]:void 0;for(o=xt.length>3&&"function"==typeof o?(i--,o):void 0,a&&function(t,e,n){if(!Pt(n))return!1;var i=r(e);return!!("number"==i?wt(n)&&yt(e,n.length):"string"==i&&e in n)&&_t(n[e],t)}(e[0],e[1],a)&&(o=i<3?void 0:o,i=1),t=Object(t);++n"']/g,W=RegExp(Y.source),K=RegExp(H.source),Z=/<%-([\s\S]+?)%>/g,$=/<%([\s\S]+?)%>/g,J=/<%=([\s\S]+?)%>/g,Q=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,X=/^\w*$/,tt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,et=/[\\^$.*+?()[\]{}|]/g,nt=RegExp(et.source),rt=/^\s+/,it=/\s/,ot=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,at=/\{\n\/\* \[wrapped with (.+)\] \*/,ut=/,? & /,st=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ct=/[()=,{}\[\]\/\s]/,dt=/\\(\\)?/g,lt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ft=/\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,yt=/^\[object .+?Constructor\]$/,mt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\d*)$/,gt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,_t=/($^)/,bt=/['\n\r\u2028\u2029\\]/g,St="\\ud800-\\udfff",wt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ct="\\u2700-\\u27bf",Et="a-z\\xdf-\\xf6\\xf8-\\xff",It="A-Z\\xc0-\\xd6\\xd8-\\xde",Pt="\\ufe0e\\ufe0f",At="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ot="["+St+"]",Tt="["+At+"]",xt="["+wt+"]",Rt="\\d+",kt="["+Ct+"]",Mt="["+Et+"]",Nt="[^"+St+At+Rt+Ct+Et+It+"]",Dt="\\ud83c[\\udffb-\\udfff]",Lt="[^"+St+"]",zt="(?:\\ud83c[\\udde6-\\uddff]){2}",jt="[\\ud800-\\udbff][\\udc00-\\udfff]",Ut="["+It+"]",Ft="\\u200d",qt="(?:"+Mt+"|"+Nt+")",Bt="(?:"+Ut+"|"+Nt+")",Gt="(?:['’](?:d|ll|m|re|s|t|ve))?",Vt="(?:['’](?:D|LL|M|RE|S|T|VE))?",Yt="(?:"+xt+"|"+Dt+")?",Ht="["+Pt+"]?",Wt=Ht+Yt+"(?:"+Ft+"(?:"+[Lt,zt,jt].join("|")+")"+Ht+Yt+")*",Kt="(?:"+[kt,zt,jt].join("|")+")"+Wt,Zt="(?:"+[Lt+xt+"?",xt,zt,jt,Ot].join("|")+")",$t=RegExp("['’]","g"),Jt=RegExp(xt,"g"),Qt=RegExp(Dt+"(?="+Dt+")|"+Zt+Wt,"g"),Xt=RegExp([Ut+"?"+Mt+"+"+Gt+"(?="+[Tt,Ut,"$"].join("|")+")",Bt+"+"+Vt+"(?="+[Tt,Ut+qt,"$"].join("|")+")",Ut+"?"+qt+"+"+Gt,Ut+"+"+Vt,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Rt,Kt].join("|"),"g"),te=RegExp("["+Ft+St+wt+Pt+"]"),ee=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ne=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],re=-1,ie={};ie[M]=ie[N]=ie[D]=ie[L]=ie[z]=ie[j]=ie[U]=ie[F]=ie[q]=!0,ie[y]=ie[m]=ie[R]=ie[v]=ie[k]=ie[g]=ie[_]=ie[b]=ie[w]=ie[C]=ie[E]=ie[P]=ie[A]=ie[O]=ie[x]=!1;var oe={};oe[y]=oe[m]=oe[R]=oe[k]=oe[v]=oe[g]=oe[M]=oe[N]=oe[D]=oe[L]=oe[z]=oe[w]=oe[C]=oe[E]=oe[P]=oe[A]=oe[O]=oe[T]=oe[j]=oe[U]=oe[F]=oe[q]=!0,oe[_]=oe[b]=oe[x]=!1;var ae={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ue=parseFloat,se=parseInt,ce="object"==(void 0===n.g?"undefined":r(n.g))&&n.g&&n.g.Object===Object&&n.g,de="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,le=ce||de||Function("return this")(),fe="object"==r(e)&&e&&!e.nodeType&&e,pe=fe&&"object"==r(t)&&t&&!t.nodeType&&t,he=pe&&pe.exports===fe,ye=he&&ce.process,me=function(){try{return pe&&pe.require&&pe.require("util").types||ye&&ye.binding&&ye.binding("util")}catch(t){}}(),ve=me&&me.isArrayBuffer,ge=me&&me.isDate,_e=me&&me.isMap,be=me&&me.isRegExp,Se=me&&me.isSet,we=me&&me.isTypedArray;function Ce(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function xe(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Ue(e,t[n],0)>-1;);return n}var tn=Ve({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),en=Ve({"&":"&","<":"<",">":">",'"':""","'":"'"});function nn(t){return"\\"+ae[t]}function rn(t){return te.test(t)}function on(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function an(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n",""":'"',"'":"'"}),hn=function t(e){var n,it=(e=null==e?le:hn.defaults(le.Object(),e,hn.pick(le,ne))).Array,St=e.Date,wt=e.Error,Ct=e.Function,Et=e.Math,It=e.Object,Pt=e.RegExp,At=e.String,Ot=e.TypeError,Tt=it.prototype,xt=Ct.prototype,Rt=It.prototype,kt=e["__core-js_shared__"],Mt=xt.toString,Nt=Rt.hasOwnProperty,Dt=0,Lt=(n=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",zt=Rt.toString,jt=Mt.call(It),Ut=le._,Ft=Pt("^"+Mt.call(Nt).replace(et,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),qt=he?e.Buffer:i,Bt=e.Symbol,Gt=e.Uint8Array,Vt=qt?qt.allocUnsafe:i,Yt=an(It.getPrototypeOf,It),Ht=It.create,Wt=Rt.propertyIsEnumerable,Kt=Tt.splice,Zt=Bt?Bt.isConcatSpreadable:i,Qt=Bt?Bt.iterator:i,te=Bt?Bt.toStringTag:i,ae=function(){try{var t=co(It,"defineProperty");return t({},"",{}),t}catch(t){}}(),ce=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,de=St&&St.now!==le.Date.now&&St.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=Et.ceil,ye=Et.floor,me=It.getOwnPropertySymbols,Le=qt?qt.isBuffer:i,Ve=e.isFinite,yn=Tt.join,mn=an(It.keys,It),vn=Et.max,gn=Et.min,_n=St.now,bn=e.parseInt,Sn=Et.random,wn=Tt.reverse,Cn=co(e,"DataView"),En=co(e,"Map"),In=co(e,"Promise"),Pn=co(e,"Set"),An=co(e,"WeakMap"),On=co(It,"create"),Tn=An&&new An,xn={},Rn=jo(Cn),kn=jo(En),Mn=jo(In),Nn=jo(Pn),Dn=jo(An),Ln=Bt?Bt.prototype:i,zn=Ln?Ln.valueOf:i,jn=Ln?Ln.toString:i;function Un(t){if(eu(t)&&!Va(t)&&!(t instanceof Gn)){if(t instanceof Bn)return t;if(Nt.call(t,"__wrapped__"))return Uo(t)}return new Bn(t)}var Fn=function(){function t(){}return function(e){if(!tu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=i,n}}();function qn(){}function Bn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=i}function Gn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function ur(t,e,n,r,o,a){var u,s=1&e,c=2&e,d=4&e;if(n&&(u=o?n(t,r,o,a):n(t)),u!==i)return u;if(!tu(t))return t;var l=Va(t);if(l){if(u=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&Nt.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!s)return Ai(t,u)}else{var f=po(t),p=f==b||f==S;if(Ka(t))return Si(t,s);if(f==E||f==y||p&&!o){if(u=c||p?{}:yo(t),!s)return c?function(t,e){return Oi(t,fo(t),e)}(t,function(t,e){return t&&Oi(e,ku(e),t)}(u,t)):function(t,e){return Oi(t,lo(t),e)}(t,rr(u,t))}else{if(!oe[f])return o?t:{};u=function(t,e,n){var r,i=t.constructor;switch(e){case R:return wi(t);case v:case g:return new i(+t);case k:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case M:case N:case D:case L:case z:case j:case U:case F:case q:return Ci(t,n);case w:return new i;case C:case O:return new i(t);case P:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case A:return new i;case T:return r=t,zn?It(zn.call(r)):{}}}(t,f,s)}}a||(a=new Kn);var h=a.get(t);if(h)return h;a.set(t,u),au(t)?t.forEach((function(r){u.add(ur(r,e,n,r,t,a))})):nu(t)&&t.forEach((function(r,i){u.set(i,ur(r,e,n,i,t,a))}));var m=l?i:(d?c?no:eo:c?ku:Ru)(t);return Ie(m||t,(function(r,i){m&&(r=t[i=r]),tr(u,i,ur(r,e,n,i,t,a))})),u}function sr(t,e,n){var r=n.length;if(null==t)return!r;for(t=It(t);r--;){var o=n[r],a=e[o],u=t[o];if(u===i&&!(o in t)||!a(u))return!1}return!0}function cr(t,e,n){if("function"!=typeof t)throw new Ot(o);return To((function(){t.apply(i,n)}),e)}function dr(t,e,n,r){var i=-1,o=Te,a=!0,u=t.length,s=[],c=e.length;if(!u)return s;n&&(e=Re(e,Ze(n))),r?(o=xe,a=!1):e.length>=200&&(o=Je,a=!1,e=new Wn(e));t:for(;++i-1},Yn.prototype.set=function(t,e){var n=this.__data__,r=er(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new Vn,map:new(En||Yn),string:new Vn}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Wn.prototype.add=Wn.prototype.push=function(t){return this.__data__.set(t,a),this},Wn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.clear=function(){this.__data__=new Yn,this.size=0},Kn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Kn.prototype.get=function(t){return this.__data__.get(t)},Kn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Yn){var r=n.__data__;if(!En||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var lr=Ri(_r),fr=Ri(br,!0);function pr(t,e){var n=!0;return lr(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function hr(t,e,n){for(var r=-1,o=t.length;++r0&&n(u)?e>1?mr(u,e-1,n,r,i):ke(i,u):r||(i[i.length]=u)}return i}var vr=ki(),gr=ki(!0);function _r(t,e){return t&&vr(t,e,Ru)}function br(t,e){return t&&gr(t,e,Ru)}function Sr(t,e){return Oe(e,(function(e){return Ja(t[e])}))}function wr(t,e){for(var n=0,r=(e=vi(e,t)).length;null!=t&&ne}function Pr(t,e){return null!=t&&Nt.call(t,e)}function Ar(t,e){return null!=t&&e in It(t)}function Or(t,e,n){for(var r=n?xe:Te,o=t[0].length,a=t.length,u=a,s=it(a),c=1/0,d=[];u--;){var l=t[u];u&&e&&(l=Re(l,Ze(e))),c=gn(l.length,c),s[u]=!n&&(e||o>=120&&l.length>=120)?new Wn(u&&l):i}l=t[0];var f=-1,p=s[0];t:for(;++f=u?s:s*("desc"==n[r]?-1:1)}return t.index-e.index}(t,e,n)}));r--;)t[r]=t[r].value;return t}(i)}function Gr(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)u!==t&&Kt.call(u,s,1),Kt.call(t,s,1);return t}function Yr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;vo(i)?Kt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+ye(Sn()*(e-t+1))}function Wr(t,e){var n="";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=ye(e/2))&&(t+=t)}while(e);return n}function Kr(t,e){return xo(Io(t,e,rs),t+"")}function Zr(t){return $n(Fu(t))}function $r(t,e){var n=Fu(t);return Mo(n,ar(e,0,n.length))}function Jr(t,e,n,r){if(!tu(t))return t;for(var o=-1,a=(e=vi(e,t)).length,u=a-1,s=t;null!=s&&++oi?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=it(i);++r>>1,a=t[o];null!==a&&!su(a)&&(n?a<=e:a=200){var c=e?null:Wi(t);if(c)return sn(c);a=!1,i=Je,s=new Wn}else s=e?[]:u;t:for(;++r=r?t:ei(t,e,n)}var bi=ce||function(t){return le.clearTimeout(t)};function Si(t,e){if(e)return t.slice();var n=t.length,r=Vt?Vt(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Gt(e).set(new Gt(t)),e}function Ci(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ei(t,e){if(t!==e){var n=t!==i,r=null===t,o=t==t,a=su(t),u=e!==i,s=null===e,c=e==e,d=su(e);if(!s&&!d&&!a&&t>e||a&&u&&c&&!s&&!d||r&&u&&c||!n&&c||!o)return 1;if(!r&&!a&&!d&&t1?n[o-1]:i,u=o>2?n[2]:i;for(a=t.length>3&&"function"==typeof a?(o--,a):i,u&&go(n[0],n[1],u)&&(a=o<3?i:a,o=1),e=It(e);++r-1?o[a?e[u]:u]:i}}function zi(t){return to((function(e){var n=e.length,r=n,a=Bn.prototype.thru;for(t&&e.reverse();r--;){var u=e[r];if("function"!=typeof u)throw new Ot(o);if(a&&!s&&"wrapper"==io(u))var s=new Bn([],!0)}for(r=s?r:n;++r1&&_.reverse(),f&&ds))return!1;var d=a.get(t),l=a.get(e);if(d&&l)return d==e&&l==t;var f=-1,p=!0,h=2&n?new Wn:i;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(ot,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ie(h,(function(n){var r="_."+n[0];e&n[1]&&!Te(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(at);return e?e[1].split(ut):[]}(r),n)))}function ko(t){var e=0,n=0;return function(){var r=_n(),o=16-(r-n);if(n=r,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Mo(t,e){var n=-1,r=t.length,o=r-1;for(e=e===i?r:e;++n1?t[e-1]:i;return n="function"==typeof n?(t.pop(),n):i,oa(t,n)}));function fa(t){var e=Un(t);return e.__chain__=!0,e}function pa(t,e){return e(t)}var ha=to((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return or(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Gn&&vo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:pa,args:[o],thisArg:i}),new Bn(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)})),ya=Ti((function(t,e,n){Nt.call(t,n)?++t[n]:ir(t,n,1)})),ma=Li(Go),va=Li(Vo);function ga(t,e){return(Va(t)?Ie:lr)(t,ao(e,3))}function _a(t,e){return(Va(t)?Pe:fr)(t,ao(e,3))}var ba=Ti((function(t,e,n){Nt.call(t,n)?t[n].push(e):ir(t,n,[e])})),Sa=Kr((function(t,e,n){var r=-1,i="function"==typeof e,o=Ha(t)?it(t.length):[];return lr(t,(function(t){o[++r]=i?Ce(e,t,n):Tr(t,e,n)})),o})),wa=Ti((function(t,e,n){ir(t,n,e)}));function Ca(t,e){return(Va(t)?Re:zr)(t,ao(e,3))}var Ea=Ti((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]})),Ia=Kr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&go(t,e[0],e[1])?e=[]:n>2&&go(e[0],e[1],e[2])&&(e=[e[0]]),Br(t,mr(e,1),[])})),Pa=de||function(){return le.Date.now()};function Aa(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Zi(t,c,i,i,i,i,e)}function Oa(t,e){var n;if("function"!=typeof e)throw new Ot(o);return t=hu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Ta=Kr((function(t,e,n){var r=1;if(n.length){var i=un(n,oo(Ta));r|=s}return Zi(t,r,e,n,i)})),xa=Kr((function(t,e,n){var r=3;if(n.length){var i=un(n,oo(xa));r|=s}return Zi(e,r,t,n,i)}));function Ra(t,e,n){var r,a,u,s,c,d,l=0,f=!1,p=!1,h=!0;if("function"!=typeof t)throw new Ot(o);function y(e){var n=r,o=a;return r=a=i,l=e,s=t.apply(o,n)}function m(t){var n=t-d;return d===i||n>=e||n<0||p&&t-l>=u}function v(){var t=Pa();if(m(t))return g(t);c=To(v,function(t){var n=e-(t-d);return p?gn(n,u-(t-l)):n}(t))}function g(t){return c=i,h&&r?y(t):(r=a=i,s)}function _(){var t=Pa(),n=m(t);if(r=arguments,a=this,d=t,n){if(c===i)return function(t){return l=t,c=To(v,e),f?y(t):s}(d);if(p)return bi(c),c=To(v,e),y(d)}return c===i&&(c=To(v,e)),s}return e=mu(e)||0,tu(n)&&(f=!!n.leading,u=(p="maxWait"in n)?vn(mu(n.maxWait)||0,e):u,h="trailing"in n?!!n.trailing:h),_.cancel=function(){c!==i&&bi(c),l=0,r=d=a=c=i},_.flush=function(){return c===i?s:g(Pa())},_}var ka=Kr((function(t,e){return cr(t,1,e)})),Ma=Kr((function(t,e,n){return cr(t,mu(e)||0,n)}));function Na(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new Ot(o);var n=function n(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(Na.Cache||Hn),n}function Da(t){if("function"!=typeof t)throw new Ot(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Na.Cache=Hn;var La=gi((function(t,e){var n=(e=1==e.length&&Va(e[0])?Re(e[0],Ze(ao())):Re(mr(e,1),Ze(ao()))).length;return Kr((function(r){for(var i=-1,o=gn(r.length,n);++i=e})),Ga=xr(function(){return arguments}())?xr:function(t){return eu(t)&&Nt.call(t,"callee")&&!Wt.call(t,"callee")},Va=it.isArray,Ya=ve?Ze(ve):function(t){return eu(t)&&Er(t)==R};function Ha(t){return null!=t&&Xa(t.length)&&!Ja(t)}function Wa(t){return eu(t)&&Ha(t)}var Ka=Le||ms,Za=ge?Ze(ge):function(t){return eu(t)&&Er(t)==g};function $a(t){if(!eu(t))return!1;var e=Er(t);return e==_||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!iu(t)}function Ja(t){if(!tu(t))return!1;var e=Er(t);return e==b||e==S||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Qa(t){return"number"==typeof t&&t==hu(t)}function Xa(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=l}function tu(t){var e=r(t);return null!=t&&("object"==e||"function"==e)}function eu(t){return null!=t&&"object"==r(t)}var nu=_e?Ze(_e):function(t){return eu(t)&&po(t)==w};function ru(t){return"number"==typeof t||eu(t)&&Er(t)==C}function iu(t){if(!eu(t)||Er(t)!=E)return!1;var e=Yt(t);if(null===e)return!0;var n=Nt.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Mt.call(n)==jt}var ou=be?Ze(be):function(t){return eu(t)&&Er(t)==P},au=Se?Ze(Se):function(t){return eu(t)&&po(t)==A};function uu(t){return"string"==typeof t||!Va(t)&&eu(t)&&Er(t)==O}function su(t){return"symbol"==r(t)||eu(t)&&Er(t)==T}var cu=we?Ze(we):function(t){return eu(t)&&Xa(t.length)&&!!ie[Er(t)]},du=Vi(Lr),lu=Vi((function(t,e){return t<=e}));function fu(t){if(!t)return[];if(Ha(t))return uu(t)?ln(t):Ai(t);if(Qt&&t[Qt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Qt]());var e=po(t);return(e==w?on:e==A?sn:Fu)(t)}function pu(t){return t?(t=mu(t))===d||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function hu(t){var e=pu(t),n=e%1;return e==e?n?e-n:e:0}function yu(t){return t?ar(hu(t),0,p):0}function mu(t){if("number"==typeof t)return t;if(su(t))return f;if(tu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=tu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ke(t);var n=ht.test(t);return n||mt.test(t)?se(t.slice(2),n?2:8):pt.test(t)?f:+t}function vu(t){return Oi(t,ku(t))}function gu(t){return null==t?"":ui(t)}var _u=xi((function(t,e){if(wo(e)||Ha(e))Oi(e,Ru(e),t);else for(var n in e)Nt.call(e,n)&&tr(t,n,e[n])})),bu=xi((function(t,e){Oi(e,ku(e),t)})),Su=xi((function(t,e,n,r){Oi(e,ku(e),t,r)})),wu=xi((function(t,e,n,r){Oi(e,Ru(e),t,r)})),Cu=to(or),Eu=Kr((function(t,e){t=It(t);var n=-1,r=e.length,o=r>2?e[2]:i;for(o&&go(e[0],e[1],o)&&(r=1);++n1),e})),Oi(t,no(t),n),r&&(n=ur(n,7,Qi));for(var i=e.length;i--;)ci(n,e[i]);return n})),Lu=to((function(t,e){return null==t?{}:function(t,e){return Gr(t,e,(function(e,n){return Au(t,n)}))}(t,e)}));function zu(t,e){if(null==t)return{};var n=Re(no(t),(function(t){return[t]}));return e=ao(e),Gr(t,n,(function(t,n){return e(t,n[0])}))}var ju=Ki(Ru),Uu=Ki(ku);function Fu(t){return null==t?[]:$e(t,Ru(t))}var qu=Ni((function(t,e,n){return e=e.toLowerCase(),t+(n?Bu(e):e)}));function Bu(t){return $u(gu(t).toLowerCase())}function Gu(t){return(t=gu(t))&&t.replace(gt,tn).replace(Jt,"")}var Vu=Ni((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Yu=Ni((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Hu=Mi("toLowerCase"),Wu=Ni((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()})),Ku=Ni((function(t,e,n){return t+(n?" ":"")+$u(e)})),Zu=Ni((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),$u=Mi("toUpperCase");function Ju(t,e,n){return t=gu(t),(e=n?i:e)===i?function(t){return ee.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(e)||[]}var Qu=Kr((function(t,e){try{return Ce(t,i,e)}catch(t){return $a(t)?t:new wt(t)}})),Xu=to((function(t,e){return Ie(e,(function(e){e=zo(e),ir(t,e,Ta(t[e],t))})),t}));function ts(t){return function(){return t}}var es=zi(),ns=zi(!0);function rs(t){return t}function is(t){return Nr("function"==typeof t?t:ur(t,1))}var os=Kr((function(t,e){return function(n){return Tr(n,t,e)}})),as=Kr((function(t,e){return function(n){return Tr(t,n,e)}}));function us(t,e,n){var r=Ru(e),i=Sr(e,r);null!=n||tu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Sr(e,Ru(e)));var o=!(tu(n)&&"chain"in n&&!n.chain),a=Ja(t);return Ie(i,(function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,ke([this.value()],arguments))})})),t}function ss(){}var cs=qi(Re),ds=qi(Ae),ls=qi(De);function fs(t){return _o(t)?Ge(zo(t)):function(t){return function(e){return wr(e,t)}}(t)}var ps=Gi(),hs=Gi(!0);function ys(){return[]}function ms(){return!1}var vs,gs=Fi((function(t,e){return t+e}),0),_s=Hi("ceil"),bs=Fi((function(t,e){return t/e}),1),Ss=Hi("floor"),ws=Fi((function(t,e){return t*e}),1),Cs=Hi("round"),Es=Fi((function(t,e){return t-e}),0);return Un.after=function(t,e){if("function"!=typeof e)throw new Ot(o);return t=hu(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=Aa,Un.assign=_u,Un.assignIn=bu,Un.assignInWith=Su,Un.assignWith=wu,Un.at=Cu,Un.before=Oa,Un.bind=Ta,Un.bindAll=Xu,Un.bindKey=xa,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Va(t)?t:[t]},Un.chain=fa,Un.chunk=function(t,e,n){e=(n?go(t,e,n):e===i)?1:vn(hu(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var o=0,a=0,u=it(pe(r/e));oo?0:o+n),(r=r===i||r>o?o:hu(r))<0&&(r+=o),r=n>r?0:yu(r);n>>0)?(t=gu(t))&&("string"==typeof e||null!=e&&!ou(e))&&!(e=ui(e))&&rn(t)?_i(ln(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if("function"!=typeof t)throw new Ot(o);return e=null==e?0:vn(hu(e),0),Kr((function(n){var r=n[e],i=_i(n,0,e);return r&&ke(i,r),Ce(t,this,i)}))},Un.tail=function(t){var e=null==t?0:t.length;return e?ei(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ei(t,0,(e=n||e===i?1:hu(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?ei(t,(e=r-(e=n||e===i?1:hu(e)))<0?0:e,r):[]},Un.takeRightWhile=function(t,e){return t&&t.length?li(t,ao(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?li(t,ao(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new Ot(o);return tu(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Ra(t,e,{leading:r,maxWait:e,trailing:i})},Un.thru=pa,Un.toArray=fu,Un.toPairs=ju,Un.toPairsIn=Uu,Un.toPath=function(t){return Va(t)?Re(t,zo):su(t)?[t]:Ai(Lo(gu(t)))},Un.toPlainObject=vu,Un.transform=function(t,e,n){var r=Va(t),i=r||Ka(t)||cu(t);if(e=ao(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:tu(t)&&Ja(o)?Fn(Yt(t)):{}}return(i?Ie:_r)(t,(function(t,r,i){return e(n,t,r,i)})),n},Un.unary=function(t){return Aa(t,1)},Un.union=ea,Un.unionBy=na,Un.unionWith=ra,Un.uniq=function(t){return t&&t.length?si(t):[]},Un.uniqBy=function(t,e){return t&&t.length?si(t,ao(e,2)):[]},Un.uniqWith=function(t,e){return e="function"==typeof e?e:i,t&&t.length?si(t,i,e):[]},Un.unset=function(t,e){return null==t||ci(t,e)},Un.unzip=ia,Un.unzipWith=oa,Un.update=function(t,e,n){return null==t?t:di(t,e,mi(n))},Un.updateWith=function(t,e,n,r){return r="function"==typeof r?r:i,null==t?t:di(t,e,mi(n),r)},Un.values=Fu,Un.valuesIn=function(t){return null==t?[]:$e(t,ku(t))},Un.without=aa,Un.words=Ju,Un.wrap=function(t,e){return za(mi(e),t)},Un.xor=ua,Un.xorBy=sa,Un.xorWith=ca,Un.zip=da,Un.zipObject=function(t,e){return hi(t||[],e||[],tr)},Un.zipObjectDeep=function(t,e){return hi(t||[],e||[],Jr)},Un.zipWith=la,Un.entries=ju,Un.entriesIn=Uu,Un.extend=bu,Un.extendWith=Su,us(Un,Un),Un.add=gs,Un.attempt=Qu,Un.camelCase=qu,Un.capitalize=Bu,Un.ceil=_s,Un.clamp=function(t,e,n){return n===i&&(n=e,e=i),n!==i&&(n=(n=mu(n))==n?n:0),e!==i&&(e=(e=mu(e))==e?e:0),ar(mu(t),e,n)},Un.clone=function(t){return ur(t,4)},Un.cloneDeep=function(t){return ur(t,5)},Un.cloneDeepWith=function(t,e){return ur(t,5,e="function"==typeof e?e:i)},Un.cloneWith=function(t,e){return ur(t,4,e="function"==typeof e?e:i)},Un.conformsTo=function(t,e){return null==e||sr(t,e,Ru(e))},Un.deburr=Gu,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=bs,Un.endsWith=function(t,e,n){t=gu(t),e=ui(e);var r=t.length,o=n=n===i?r:ar(hu(n),0,r);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=Fa,Un.escape=function(t){return(t=gu(t))&&K.test(t)?t.replace(H,en):t},Un.escapeRegExp=function(t){return(t=gu(t))&&nt.test(t)?t.replace(et,"\\$&"):t},Un.every=function(t,e,n){var r=Va(t)?Ae:pr;return n&&go(t,e,n)&&(e=i),r(t,ao(e,3))},Un.find=ma,Un.findIndex=Go,Un.findKey=function(t,e){return ze(t,ao(e,3),_r)},Un.findLast=va,Un.findLastIndex=Vo,Un.findLastKey=function(t,e){return ze(t,ao(e,3),br)},Un.floor=Ss,Un.forEach=ga,Un.forEachRight=_a,Un.forIn=function(t,e){return null==t?t:vr(t,ao(e,3),ku)},Un.forInRight=function(t,e){return null==t?t:gr(t,ao(e,3),ku)},Un.forOwn=function(t,e){return t&&_r(t,ao(e,3))},Un.forOwnRight=function(t,e){return t&&br(t,ao(e,3))},Un.get=Pu,Un.gt=qa,Un.gte=Ba,Un.has=function(t,e){return null!=t&&ho(t,e,Pr)},Un.hasIn=Au,Un.head=Ho,Un.identity=rs,Un.includes=function(t,e,n,r){t=Ha(t)?t:Fu(t),n=n&&!r?hu(n):0;var i=t.length;return n<0&&(n=vn(i+n,0)),uu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ue(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:hu(n);return i<0&&(i=vn(r+i,0)),Ue(t,e,i)},Un.inRange=function(t,e,n){return e=pu(e),n===i?(n=e,e=0):n=pu(n),function(t,e,n){return t>=gn(e,n)&&t=-9007199254740991&&t<=l},Un.isSet=au,Un.isString=uu,Un.isSymbol=su,Un.isTypedArray=cu,Un.isUndefined=function(t){return t===i},Un.isWeakMap=function(t){return eu(t)&&po(t)==x},Un.isWeakSet=function(t){return eu(t)&&"[object WeakSet]"==Er(t)},Un.join=function(t,e){return null==t?"":yn.call(t,e)},Un.kebabCase=Vu,Un.last=$o,Un.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r;return n!==i&&(o=(o=hu(n))<0?vn(r+o,0):gn(o,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):je(t,qe,o,!0)},Un.lowerCase=Yu,Un.lowerFirst=Hu,Un.lt=du,Un.lte=lu,Un.max=function(t){return t&&t.length?hr(t,rs,Ir):i},Un.maxBy=function(t,e){return t&&t.length?hr(t,ao(e,2),Ir):i},Un.mean=function(t){return Be(t,rs)},Un.meanBy=function(t,e){return Be(t,ao(e,2))},Un.min=function(t){return t&&t.length?hr(t,rs,Lr):i},Un.minBy=function(t,e){return t&&t.length?hr(t,ao(e,2),Lr):i},Un.stubArray=ys,Un.stubFalse=ms,Un.stubObject=function(){return{}},Un.stubString=function(){return""},Un.stubTrue=function(){return!0},Un.multiply=ws,Un.nth=function(t,e){return t&&t.length?qr(t,hu(e)):i},Un.noConflict=function(){return le._===this&&(le._=Ut),this},Un.noop=ss,Un.now=Pa,Un.pad=function(t,e,n){t=gu(t);var r=(e=hu(e))?dn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Bi(ye(i),n)+t+Bi(pe(i),n)},Un.padEnd=function(t,e,n){t=gu(t);var r=(e=hu(e))?dn(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var o=Sn();return gn(t+o*(e-t+ue("1e-"+((o+"").length-1))),e)}return Hr(t,e)},Un.reduce=function(t,e,n){var r=Va(t)?Me:Ye,i=arguments.length<3;return r(t,ao(e,4),n,i,lr)},Un.reduceRight=function(t,e,n){var r=Va(t)?Ne:Ye,i=arguments.length<3;return r(t,ao(e,4),n,i,fr)},Un.repeat=function(t,e,n){return e=(n?go(t,e,n):e===i)?1:hu(e),Wr(gu(t),e)},Un.replace=function(){var t=arguments,e=gu(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var r=-1,o=(e=vi(e,t)).length;for(o||(o=1,t=i);++rl)return[];var n=p,r=gn(t,p);e=ao(e),t-=p;for(var i=We(r,e);++n=a)return t;var s=n-dn(r);if(s<1)return r;var c=u?_i(u,0,s).join(""):t.slice(0,s);if(o===i)return c+r;if(u&&(s+=c.length-s),ou(o)){if(t.slice(s).search(o)){var d,l=c;for(o.global||(o=Pt(o.source,gu(ft.exec(o))+"g")),o.lastIndex=0;d=o.exec(l);)var f=d.index;c=c.slice(0,f===i?s:f)}}else if(t.indexOf(ui(o),s)!=s){var p=c.lastIndexOf(o);p>-1&&(c=c.slice(0,p))}return c+r},Un.unescape=function(t){return(t=gu(t))&&W.test(t)?t.replace(Y,pn):t},Un.uniqueId=function(t){var e=++Dt;return gu(t)+e},Un.upperCase=Zu,Un.upperFirst=$u,Un.each=ga,Un.eachRight=_a,Un.first=Ho,us(Un,(vs={},_r(Un,(function(t,e){Nt.call(Un.prototype,e)||(vs[e]=t)})),vs),{chain:!1}),Un.VERSION="4.17.21",Ie(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Un[t].placeholder=Un})),Ie(["drop","take"],(function(t,e){Gn.prototype[t]=function(n){n=n===i?1:vn(hu(n),0);var r=this.__filtered__&&!e?new Gn(this):this.clone();return r.__filtered__?r.__takeCount__=gn(n,r.__takeCount__):r.__views__.push({size:gn(n,p),type:t+(r.__dir__<0?"Right":"")}),r},Gn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),Ie(["filter","map","takeWhile"],(function(t,e){var n=e+1,r=1==n||3==n;Gn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ao(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),Ie(["head","last"],(function(t,e){var n="take"+(e?"Right":"");Gn.prototype[t]=function(){return this[n](1).value()[0]}})),Ie(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");Gn.prototype[t]=function(){return this.__filtered__?new Gn(this):this[n](1)}})),Gn.prototype.compact=function(){return this.filter(rs)},Gn.prototype.find=function(t){return this.filter(t).head()},Gn.prototype.findLast=function(t){return this.reverse().find(t)},Gn.prototype.invokeMap=Kr((function(t,e){return"function"==typeof t?new Gn(this):this.map((function(n){return Tr(n,t,e)}))})),Gn.prototype.reject=function(t){return this.filter(Da(ao(t)))},Gn.prototype.slice=function(t,e){t=hu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Gn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(n=(e=hu(e))<0?n.dropRight(-e):n.take(e-t)),n)},Gn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Gn.prototype.toArray=function(){return this.take(p)},_r(Gn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=Un[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,u=r?[1]:arguments,s=e instanceof Gn,c=u[0],d=s||Va(e),l=function(t){var e=o.apply(Un,ke([t],u));return r&&f?e[0]:e};d&&n&&"function"==typeof c&&1!=c.length&&(s=d=!1);var f=this.__chain__,p=!!this.__actions__.length,h=a&&!f,y=s&&!p;if(!a&&d){e=y?e:new Gn(this);var m=t.apply(e,u);return m.__actions__.push({func:pa,args:[l],thisArg:i}),new Bn(m,f)}return h&&y?t.apply(this,u):(m=this.thru(l),h?r?m.value()[0]:m.value():m)})})),Ie(["pop","push","shift","sort","splice","unshift"],(function(t){var e=Tt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Va(i)?i:[],t)}return this[n]((function(n){return e.apply(Va(n)?n:[],t)}))}})),_r(Gn.prototype,(function(t,e){var n=Un[e];if(n){var r=n.name+"";Nt.call(xn,r)||(xn[r]=[]),xn[r].push({name:e,func:n})}})),xn[ji(i,2).name]=[{name:"wrapper",func:i}],Gn.prototype.clone=function(){var t=new Gn(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},Gn.prototype.reverse=function(){if(this.__filtered__){var t=new Gn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Gn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Va(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof qn;){var r=Uo(n);r.__index__=0,r.__values__=i,e?o.__wrapped__=r:e=r;var o=r;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Gn){var e=t;return this.__actions__.length&&(e=new Gn(this)),(e=e.reverse()).__actions__.push({func:pa,args:[ta],thisArg:i}),new Bn(e,this.__chain__)}return this.thru(ta)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return fi(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Qt&&(Un.prototype[Qt]=function(){return this}),Un}();"function"==typeof define&&"object"==r(define.amd)&&define.amd?(le._=hn,define((function(){return hn}))):pe?((pe.exports=hn)._=hn,fe._=hn):le._=hn}.call(this)},66534:(t,e,n)=>{"use strict";n(93942),n(64668),n(95412),n(27835),n(60678),n(13722),n(34500);var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(t){r[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,a,u=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),s=1;s{"use strict";function r(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,u=[],s=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(u.push(r.value),u.length!==e);s=!0);}catch(t){c=!0,i=t}finally{try{if(!s&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return u}}(t,e)||u(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t){return function(t){if(Array.isArray(t))return s(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||u(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e){if(t){if("string"==typeof t)return s(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(t,e):void 0}}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0})).join("&")},e.parseUrl=function(t,e){e=Object.assign({decode:!0},e);var n=i(l(t,"#"),2),r=n[0],o=n[1];return Object.assign({url:r.split("?")[0]||"",query:S(_(t),e)},e&&e.parseFragmentIdentifier&&o?{fragmentIdentifier:m(o,e)}:{})},e.stringifyUrl=function(t,n){n=Object.assign(r({encode:!0,strict:!0},p,!0),n);var i=g(t.url).split("?")[0]||"",o=e.extract(t.url),a=e.parse(o,{sort:!1}),u=Object.assign(a,t.query),s=e.stringify(u,n);s&&(s="?".concat(s));var c=function(t){var e="",n=t.indexOf("#");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(c="#".concat(n[p]?y(t.fragmentIdentifier,n):t.fragmentIdentifier)),"".concat(i).concat(s).concat(c)},e.pick=function(t,n,i){i=Object.assign(r({parseFragmentIdentifier:!0},p,!1),i);var o=e.parseUrl(t,i),a=o.url,u=o.query,s=o.fragmentIdentifier;return e.stringifyUrl({url:a,query:f(u,n),fragmentIdentifier:s},i)},e.exclude=function(t,n,r){var i=Array.isArray(n)?function(t){return!n.includes(t)}:function(t,e){return!n(t,e)};return e.pick(t,i,r)}},89311:(t,e,n)=>{"use strict";n(40737),n(26667),n(58443),t.exports=function(t){return encodeURIComponent(t).replace(/[!'()*]/g,(function(t){return"%".concat(t.charCodeAt(0).toString(16).toUpperCase())}))}},57469:(t,e,n)=>{"use strict";n.r(e),n.d(e,{ArgumentOutOfRangeError:()=>x.W,AsyncSubject:()=>d.c,BehaviorSubject:()=>s.X,ConnectableObservable:()=>i.c,EMPTY:()=>Z.E,EmptyError:()=>R.K,GroupedObservable:()=>o.T,NEVER:()=>dt,Notification:()=>I.P,NotificationKind:()=>I.W,ObjectUnsubscribedError:()=>k.N,Observable:()=>r.y,ReplaySubject:()=>c.t,Scheduler:()=>w.b,Subject:()=>u.xQ,Subscriber:()=>E.L,Subscription:()=>C.w,TimeoutError:()=>N.W,UnsubscriptionError:()=>M.B,VirtualAction:()=>S,VirtualTimeScheduler:()=>b,animationFrame:()=>_,animationFrameScheduler:()=>g,asap:()=>l.e,asapScheduler:()=>l.E,async:()=>f.P,asyncScheduler:()=>f.z,bindCallback:()=>U,bindNodeCallback:()=>B,combineLatest:()=>H.aj,concat:()=>W.z,config:()=>Ot.v,defer:()=>K.P,empty:()=>Z.c,forkJoin:()=>Q,from:()=>J.D,fromEvent:()=>tt.R,fromEventPattern:()=>nt,generate:()=>rt,identity:()=>O.y,iif:()=>ot,interval:()=>ut,isObservable:()=>T,merge:()=>ct.T,never:()=>lt,noop:()=>A.Z,observable:()=>a.L,of:()=>ft.of,onErrorResumeNext:()=>pt,pairs:()=>ht,partition:()=>_t,pipe:()=>P.z,queue:()=>p.c,queueScheduler:()=>p.N,race:()=>bt.S3,range:()=>St,scheduled:()=>At.x,throwError:()=>Ct._,timer:()=>Et.H,using:()=>It,zip:()=>Pt.$R});var r=n(64074),i=n(46700),o=n(82727),a=n(86916),u=n(99357),s=n(41735),c=n(28646),d=n(2503),l=n(18420),f=n(26858),p=n(30396),h=n(61699),y=n(674),m=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return h.__extends(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(y.o),v=n(41978),g=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return h.__extends(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++re.index?1:-1:t.delay>e.delay?1:-1},e}(y.o),w=n(78379),C=n(75838),E=n(90782),I=n(48811),P=n(76252),A=n(38375),O=n(16726);function T(t){return!!t&&(t instanceof r.y||"function"==typeof t.lift&&"function"==typeof t.subscribe)}var x=n(4069),R=n(2246),k=n(42046),M=n(42135),N=n(76960),D=(n(88033),n(92160)),L=n(12411),z=n(24937),j=n(79917);function U(t,e,n){if(e){if(!(0,j.K)(e))return function(){for(var r=[],i=0;i=e){r.complete();break}if(r.next(o++),r.closed)break}}))}function wt(t){var e=t.start,n=t.index,r=t.count,i=t.subscriber;n>=r?i.complete():(i.next(e),i.closed||(t.index=n+1,t.start=e+1,this.schedule(t)))}var Ct=n(78665),Et=n(12670);function It(t,e){return new r.y((function(n){var r,i;try{r=t()}catch(t){return void n.error(t)}try{i=e(r)}catch(t){return void n.error(t)}var o=(i?(0,J.D)(i):Z.E).subscribe(n);return function(){o.unsubscribe(),r&&r.unsubscribe()}}))}var Pt=n(66436),At=n(77488),Ot=n(84850)},2503:(t,e,n)=>{"use strict";n.d(e,{c:()=>a});var r=n(61699),i=n(99357),o=n(75838),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.value=null,e.hasNext=!1,e.hasCompleted=!1,e}return r.__extends(e,t),e.prototype._subscribe=function(e){return this.hasError?(e.error(this.thrownError),o.w.EMPTY):this.hasCompleted&&this.hasNext?(e.next(this.value),e.complete(),o.w.EMPTY):t.prototype._subscribe.call(this,e)},e.prototype.next=function(t){this.hasCompleted||(this.value=t,this.hasNext=!0)},e.prototype.error=function(e){this.hasCompleted||t.prototype.error.call(this,e)},e.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&t.prototype.next.call(this,this.value),t.prototype.complete.call(this)},e}(i.xQ)},41735:(t,e,n)=>{"use strict";n.d(e,{X:()=>a});var r=n(61699),i=n(99357),o=n(42046),a=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.__extends(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.N;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.xQ)},48811:(t,e,n)=>{"use strict";n.d(e,{P:()=>u,W:()=>r});var r,i=n(14585),o=n(12309),a=n(78665);r||(r={});var u=function(){function t(t,e,n){this.kind=t,this.value=e,this.error=n,this.hasValue="N"===t}return t.prototype.observe=function(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}},t.prototype.do=function(t,e,n){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return n&&n()}},t.prototype.accept=function(t,e,n){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,n)},t.prototype.toObservable=function(){switch(this.kind){case"N":return(0,o.of)(this.value);case"E":return(0,a._)(this.error);case"C":return(0,i.c)()}throw new Error("unexpected notification kind value")},t.createNext=function(e){return void 0!==e?new t("N",e):t.undefinedValueNotification},t.createError=function(e){return new t("E",void 0,e)},t.createComplete=function(){return t.completeNotification},t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t}()},64074:(t,e,n)=>{"use strict";n.d(e,{y:()=>s}),n(40737),n(83823),n(71806);var r=n(12411),i=n(54752),o=n(86916),a=n(76252),u=n(84850),s=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var r=this.operator,o=(0,i.Y)(t,e,n);if(r?o.add(r.call(o,this.source)):o.add(this.source||u.v.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),u.v.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){u.v.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),(0,r._)(t)?t.error(e):console.warn(e)}},t.prototype.forEach=function(t,e){var n=this;return new(e=c(e))((function(e,r){var i;i=n.subscribe((function(e){try{t(e)}catch(t){r(t),i&&i.unsubscribe()}}),r,e)}))},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[o.L]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e{"use strict";n.d(e,{c:()=>o});var r=n(84850),i=n(61554),o={closed:!0,next:function(t){},error:function(t){if(r.v.useDeprecatedSynchronousErrorHandling)throw t;(0,i.z)(t)},complete:function(){}}},64809:(t,e,n)=>{"use strict";n.d(e,{L:()=>i});var r=n(61699),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(n(90782).L)},28646:(t,e,n)=>{"use strict";n.d(e,{t:()=>d}),n(32345),n(99023);var r=n(61699),i=n(99357),o=n(30396),a=n(75838),u=n(9202),s=n(42046),c=n(17630),d=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.__extends(e,t),e.prototype.nextInfiniteTimeWindow=function(e){if(!this.isStopped){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift()}t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this.isStopped||(this._events.push(new l(this._getNow(),e)),this._trimBufferThenGetEvents()),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new s.N;if(this.isStopped||this.hasError?e=a.w.EMPTY:(this.observers.push(t),e=new c.W(this,t)),i&&t.add(t=new u.ht(t,i)),n)for(var d=0;de&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.xQ),l=function(){return function(t,e){this.time=t,this.value=e}}()},78379:(t,e,n)=>{"use strict";n.d(e,{b:()=>r});var r=function(){function t(e,n){void 0===n&&(n=t.now),this.SchedulerAction=e,this.now=n}return t.prototype.schedule=function(t,e,n){return void 0===e&&(e=0),new this.SchedulerAction(this,t).schedule(n,e)},t.now=function(){return Date.now()},t}()},99357:(t,e,n)=>{"use strict";n.d(e,{Yc:()=>d,xQ:()=>l}),n(16516);var r=n(61699),i=n(64074),o=n(90782),a=n(75838),u=n(42046),s=n(17630),c=n(70239),d=function(t){function e(e){var n=t.call(this,e)||this;return n.destination=e,n}return r.__extends(e,t),e}(o.L),l=function(t){function e(){var e=t.call(this)||this;return e.observers=[],e.closed=!1,e.isStopped=!1,e.hasError=!1,e.thrownError=null,e}return r.__extends(e,t),e.prototype[c.b]=function(){return new d(this)},e.prototype.lift=function(t){var e=new f(this,this);return e.operator=t,e},e.prototype.next=function(t){if(this.closed)throw new u.N;if(!this.isStopped)for(var e=this.observers,n=e.length,r=e.slice(),i=0;i{"use strict";n.d(e,{W:()=>i}),n(6550),n(32345);var r=n(61699),i=function(t){function e(e,n){var r=t.call(this)||this;return r.subject=e,r.subscriber=n,r.closed=!1,r}return r.__extends(e,t),e.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var t=this.subject,e=t.observers;if(this.subject=null,e&&0!==e.length&&!t.isStopped&&!t.closed){var n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},e}(n(75838).w)},90782:(t,e,n)=>{"use strict";n.d(e,{L:()=>l}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193);var r=n(61699),i=n(11169),o=n(43610),a=n(75838),u=n(70239),s=n(84850),c=n(61554);function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}var l=function(t){function e(n,r,i){var a=t.call(this)||this;switch(a.syncErrorValue=null,a.syncErrorThrown=!1,a.syncErrorThrowable=!1,a.isStopped=!1,arguments.length){case 0:a.destination=o.c;break;case 1:if(!n){a.destination=o.c;break}if("object"===d(n)){n instanceof e?(a.syncErrorThrowable=n.syncErrorThrowable,a.destination=n,n.add(a)):(a.syncErrorThrowable=!0,a.destination=new f(a,n));break}default:a.syncErrorThrowable=!0,a.destination=new f(a,n,r,i)}return a}return r.__extends(e,t),e.prototype[u.b]=function(){return this},e.create=function(t,n,r){var i=new e(t,n,r);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},e}(a.w),f=function(t){function e(e,n,r,a){var u,s=t.call(this)||this;s._parentSubscriber=e;var c=s;return(0,i.m)(n)?u=n:n&&(u=n.next,r=n.error,a=n.complete,n!==o.c&&(c=Object.create(n),(0,i.m)(c.unsubscribe)&&s.add(c.unsubscribe.bind(c)),c.unsubscribe=s.unsubscribe.bind(s))),s._context=c,s._next=u,s._error=r,s._complete=a,s}return r.__extends(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;s.v.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,n=s.v.useDeprecatedSynchronousErrorHandling;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):(0,c.z)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;(0,c.z)(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var n=function(){return t._complete.call(t._context)};s.v.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),s.v.useDeprecatedSynchronousErrorHandling)throw t;(0,c.z)(t)}},e.prototype.__tryOrSetError=function(t,e,n){if(!s.v.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,n)}catch(e){return s.v.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):((0,c.z)(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(l)},75838:(t,e,n)=>{"use strict";n.d(e,{w:()=>s}),n(93942),n(70472),n(93270),n(88033),n(6550),n(38490),n(32345),n(40737),n(10951),n(5193);var r=n(24937),i=n(46308),o=n(11169),a=n(42135);function u(t){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u(t)}var s=function(){function t(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}var e;return t.prototype.unsubscribe=function(){var e;if(!this.closed){var n=this,u=n._parentOrParents,s=n._ctorUnsubscribe,d=n._unsubscribe,l=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,u instanceof t)u.remove(this);else if(null!==u)for(var f=0;f{"use strict";n.d(e,{v:()=>i});var r=!1,i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){t&&(new Error).stack,r=t},get useDeprecatedSynchronousErrorHandling(){return r}}},56431:(t,e,n)=>{"use strict";n.d(e,{Ds:()=>s,IY:()=>u,ft:()=>c});var r=n(61699),i=n(90782),o=n(64074),a=n(28817),u=function(t){function e(e){var n=t.call(this)||this;return n.parent=e,n}return r.__extends(e,t),e.prototype._next=function(t){this.parent.notifyNext(t)},e.prototype._error=function(t){this.parent.notifyError(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},e}(i.L),s=(i.L,function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.notifyNext=function(t){this.destination.next(t)},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(){this.destination.complete()},e}(i.L));function c(t,e){if(!e.closed){if(t instanceof o.y)return t.subscribe(e);var n;try{n=(0,a.s)(t)(e)}catch(t){e.error(t)}return n}}i.L},46700:(t,e,n)=>{"use strict";n.d(e,{N:()=>d,c:()=>c});var r=n(61699),i=n(99357),o=n(64074),a=n(90782),u=n(75838),s=n(16807),c=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.__extends(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new u.w).add(this.source.subscribe(new l(this.getSubject(),this))),t.closed&&(this._connection=null,t=u.w.EMPTY)),t},e.prototype.refCount=function(){return(0,s.x)()(this)},e}(o.y),d=function(){var t=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}}(),l=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.__extends(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.Yc);a.L},12206:(t,e,n)=>{"use strict";n.d(e,{Ms:()=>l,aj:()=>d}),n(38490),n(16516),n(40737),n(5193);var r=n(61699),i=n(79917),o=n(24937),a=n(64809),u=n(30121),s=n(42178),c={};function d(){for(var t=[],e=0;e{"use strict";n.d(e,{z:()=>o});var r=n(12309),i=n(54110);function o(){for(var t=[],e=0;e{"use strict";n.d(e,{P:()=>a});var r=n(64074),i=n(73531),o=n(14585);function a(t){return new r.y((function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?(0,i.D)(n):(0,o.c)()).subscribe(e)}))}},14585:(t,e,n)=>{"use strict";n.d(e,{E:()=>i,c:()=>o});var r=n(64074),i=new r.y((function(t){return t.complete()}));function o(t){return t?function(t){return new r.y((function(e){return t.schedule((function(){return e.complete()}))}))}(t):i}},73531:(t,e,n)=>{"use strict";n.d(e,{D:()=>a});var r=n(64074),i=n(28817),o=n(77488);function a(t,e){return e?(0,o.x)(t,e):t instanceof r.y?t:new r.y((0,i.s)(t))}},42178:(t,e,n)=>{"use strict";n.d(e,{n:()=>a});var r=n(64074),i=n(97327),o=n(75077);function a(t,e){return e?(0,o.r)(t,e):new r.y((0,i.V)(t))}},55343:(t,e,n)=>{"use strict";n.d(e,{R:()=>u}),n(16516),n(40737),n(26667);var r=n(64074),i=n(24937),o=n(11169),a=n(92160);function u(t,e,n,c){return(0,o.m)(n)&&(c=n,n=void 0),c?u(t,e,n).pipe((0,a.U)((function(t){return(0,i.k)(t)?c.apply(void 0,t):c(t)}))):new r.y((function(r){s(t,e,(function(t){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(t)}),r,n)}))}function s(t,e,n,r,i){var o;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(t)){var a=t;t.addEventListener(e,n,i),o=function(){return a.removeEventListener(e,n,i)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(t)){var u=t;t.on(e,n),o=function(){return u.off(e,n)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(t)){var c=t;t.addListener(e,n),o=function(){return c.removeListener(e,n)}}else{if(!t||!t.length)throw new TypeError("Invalid event target");for(var d=0,l=t.length;d{"use strict";n.d(e,{T:()=>u}),n(99023);var r=n(64074),i=n(79917),o=n(64688),a=n(42178);function u(){for(var t=[],e=0;e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof s&&(n=t.pop()),null===u&&1===t.length&&t[0]instanceof r.y?t[0]:(0,o.J)(n)((0,a.n)(t,u))}},12309:(t,e,n)=>{"use strict";n.d(e,{of:()=>a});var r=n(79917),i=n(42178),o=n(75077);function a(){for(var t=[],e=0;e{"use strict";n.d(e,{S3:()=>s});var r=n(61699),i=n(24937),o=n(42178),a=n(64809),u=n(30121);function s(){for(var t=[],e=0;e{"use strict";n.d(e,{_:()=>i});var r=n(64074);function i(t,e){return e?new r.y((function(n){return e.schedule(o,0,{error:t,subscriber:n})})):new r.y((function(e){return e.error(t)}))}function o(t){var e=t.error;t.subscriber.error(e)}},12670:(t,e,n)=>{"use strict";n.d(e,{H:()=>u}),n(99023);var r=n(64074),i=n(26858),o=n(13491),a=n(79917);function u(t,e,n){void 0===t&&(t=0);var u=-1;return(0,o.k)(e)?u=Number(e)<1?1:Number(e):(0,a.K)(e)&&(n=e),(0,a.K)(n)||(n=i.P),new r.y((function(e){var r=(0,o.k)(t)?t:+t-n.now();return n.schedule(s,r,{index:0,period:u,subscriber:e})}))}function s(t){var e=t.index,n=t.period,r=t.subscriber;if(r.next(e),!r.closed){if(-1===n)return r.complete();t.index=e+1,this.schedule(t,n)}}},66436:(t,e,n)=>{"use strict";n.d(e,{$R:()=>c,mx:()=>d});var r=n(61699),i=n(42178),o=n(24937),a=n(90782),u=n(42e3),s=n(56431);function c(){for(var t=[],e=0;ethis.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),h=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.parent=n,i.observable=r,i.stillUnsubscribed=!0,i.buffer=[],i.isComplete=!1,i}return r.__extends(e,t),e.prototype[u.hZ]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t){this.buffer.push(t),this.parent.checkIterators()},e.prototype.subscribe=function(){return(0,s.ft)(this.observable,new s.IY(this))},e}(s.Ds)},63660:(t,e,n)=>{"use strict";n.d(e,{K:()=>o});var r=n(61699),i=n(56431);function o(t){return function(e){var n=new a(t),r=e.lift(n);return n.caught=r}}var a=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.selector,this.caught))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.selector=n,i.caught=r,i}return r.__extends(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=void 0;try{n=this.selector(e,this.caught)}catch(e){return void t.prototype.error.call(this,e)}this._unsubscribeAndRecycle();var r=new i.IY(this);this.add(r);var o=(0,i.ft)(n,r);o!==r&&this.add(o)}},e}(i.Ds)},54110:(t,e,n)=>{"use strict";n.d(e,{u:()=>i});var r=n(64688);function i(){return(0,r.J)(1)}},5026:(t,e,n)=>{"use strict";n.d(e,{g:()=>s});var r=n(61699),i=n(26858),o=n(79903),a=n(90782),u=n(48811);function s(t,e){void 0===e&&(e=i.P);var n=(0,o.J)(t)?+t-e.now():Math.abs(t);return function(t){return t.lift(new c(n,e))}}var c=function(){function t(t,e){this.delay=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new d(t,this.delay,this.scheduler))},t}(),d=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.delay=n,i.scheduler=r,i.queue=[],i.active=!1,i.errored=!1,i}return r.__extends(e,t),e.dispatch=function(t){for(var e=t.source,n=e.queue,r=t.scheduler,i=t.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new l(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(u.P.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(u.P.createComplete()),this.unsubscribe()},e}(a.L),l=function(){return function(t,e){this.time=t,this.notification=e}}()},57603:(t,e,n)=>{"use strict";n.d(e,{x:()=>o});var r=n(61699),i=n(90782);function o(t,e){return function(n){return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.compare,this.keySelector))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.keySelector=r,i.hasKey=!1,"function"==typeof n&&(i.compare=n),i}return r.__extends(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e;try{var n=this.keySelector;e=n?n(t):t}catch(t){return this.destination.error(t)}var r=!1;if(this.hasKey)try{r=(0,this.compare)(this.key,e)}catch(t){return this.destination.error(t)}else this.hasKey=!0;r||(this.key=e,this.destination.next(t))},e}(i.L)},20239:(t,e,n)=>{"use strict";n.d(e,{h:()=>o});var r=n(61699),i=n(90782);function o(t,e){return function(n){return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.predicate,this.thisArg))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.__extends(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.L)},82727:(t,e,n)=>{"use strict";n.d(e,{T:()=>f,v:()=>s}),n(38490),n(34897),n(40737),n(10951),n(71806),n(5193);var r=n(61699),i=n(90782),o=n(75838),a=n(64074),u=n(99357);function s(t,e,n,r){return function(i){return i.lift(new c(t,e,n,r))}}var c=function(){function t(t,e,n,r){this.keySelector=t,this.elementSelector=e,this.durationSelector=n,this.subjectSelector=r}return t.prototype.call=function(t,e){return e.subscribe(new d(t,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},t}(),d=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;return a.keySelector=n,a.elementSelector=r,a.durationSelector=i,a.subjectSelector=o,a.groups=null,a.attemptedToUnsubscribe=!1,a.count=0,a}return r.__extends(e,t),e.prototype._next=function(t){var e;try{e=this.keySelector(t)}catch(t){return void this.error(t)}this._group(t,e)},e.prototype._group=function(t,e){var n=this.groups;n||(n=this.groups=new Map);var r,i=n.get(e);if(this.elementSelector)try{r=this.elementSelector(t)}catch(t){this.error(t)}else r=t;if(!i){i=this.subjectSelector?this.subjectSelector():new u.xQ,n.set(e,i);var o=new f(e,i,this);if(this.destination.next(o),this.durationSelector){var a=void 0;try{a=this.durationSelector(new f(e,i))}catch(t){return void this.error(t)}this.add(a.subscribe(new l(e,i,this)))}}i.closed||i.next(r)},e.prototype._error=function(t){var e=this.groups;e&&(e.forEach((function(e,n){e.error(t)})),e.clear()),this.destination.error(t)},e.prototype._complete=function(){var t=this.groups;t&&(t.forEach((function(t,e){t.complete()})),t.clear()),this.destination.complete()},e.prototype.removeGroup=function(t){this.groups.delete(t)},e.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&t.prototype.unsubscribe.call(this))},e}(i.L),l=function(t){function e(e,n,r){var i=t.call(this,n)||this;return i.key=e,i.group=n,i.parent=r,i}return r.__extends(e,t),e.prototype._next=function(t){this.complete()},e.prototype._unsubscribe=function(){var t=this.parent,e=this.key;this.key=this.parent=null,t&&t.removeGroup(e)},e}(i.L),f=function(t){function e(e,n,r){var i=t.call(this)||this;return i.key=e,i.groupSubject=n,i.refCountSubscription=r,i}return r.__extends(e,t),e.prototype._subscribe=function(t){var e=new o.w,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&e.add(new p(n)),e.add(r.subscribe(t)),e},e}(a.y),p=function(t){function e(e){var n=t.call(this)||this;return n.parent=e,e.count++,n}return r.__extends(e,t),e.prototype.unsubscribe=function(){var e=this.parent;e.closed||this.closed||(t.prototype.unsubscribe.call(this),e.count-=1,0===e.count&&e.attemptedToUnsubscribe&&e.unsubscribe())},e}(o.w)},92160:(t,e,n)=>{"use strict";n.d(e,{U:()=>o});var r=n(61699),i=n(90782);function o(t,e){return function(n){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.project,this.thisArg))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return r.__extends(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.L)},64688:(t,e,n)=>{"use strict";n.d(e,{J:()=>o}),n(99023);var r=n(61693),i=n(16726);function o(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),(0,r.zg)(i.y,t)}},61693:(t,e,n)=>{"use strict";n.d(e,{VS:()=>d,zg:()=>u}),n(99023);var r=n(61699),i=n(92160),o=n(73531),a=n(56431);function u(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"function"==typeof e?function(r){return r.pipe(u((function(n,r){return(0,o.D)(t(n,r)).pipe((0,i.U)((function(t,i){return e(n,t,r,i)})))}),n))}:("number"==typeof e&&(n=e),function(e){return e.lift(new s(t,n))})}var s=function(){function t(t,e){void 0===e&&(e=Number.POSITIVE_INFINITY),this.project=t,this.concurrent=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.concurrent))},t}(),c=function(t){function e(e,n,r){void 0===r&&(r=Number.POSITIVE_INFINITY);var i=t.call(this,e)||this;return i.project=n,i.concurrent=r,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}return r.__extends(e,t),e.prototype._next=function(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(a.Ds),d=u},9202:(t,e,n)=>{"use strict";n.d(e,{QV:()=>a,ht:()=>s});var r=n(61699),i=n(90782),o=n(48811);function a(t,e){return void 0===e&&(e=0),function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){void 0===e&&(e=0),this.scheduler=t,this.delay=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.scheduler,this.delay))},t}(),s=function(t){function e(e,n,r){void 0===r&&(r=0);var i=t.call(this,e)||this;return i.scheduler=n,i.delay=r,i}return r.__extends(e,t),e.dispatch=function(t){var e=t.notification,n=t.destination;e.observe(n),this.unsubscribe()},e.prototype.scheduleMessage=function(t){this.destination.add(this.scheduler.schedule(e.dispatch,this.delay,new c(t,this.destination)))},e.prototype._next=function(t){this.scheduleMessage(o.P.createNext(t))},e.prototype._error=function(t){this.scheduleMessage(o.P.createError(t)),this.unsubscribe()},e.prototype._complete=function(){this.scheduleMessage(o.P.createComplete()),this.unsubscribe()},e}(i.L),c=function(){return function(t,e){this.notification=t,this.destination=e}}()},16807:(t,e,n)=>{"use strict";n.d(e,{x:()=>o});var r=n(61699),i=n(90782);function o(){return function(t){return t.lift(new a(t))}}var a=function(){function t(t){this.connectable=t}return t.prototype.call=function(t,e){var n=this.connectable;n._refCount++;var r=new u(t,n),i=e.subscribe(r);return r.closed||(r.connection=n.connect()),i},t}(),u=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.__extends(e,t),e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._refCount;if(e<=0)this.connection=null;else if(t._refCount=e-1,e>1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(i.L)},62156:(t,e,n)=>{"use strict";n.d(e,{a:()=>a});var r=n(61699),i=n(99357),o=n(56431);function a(t){return function(e){return e.lift(new u(t,e))}}var u=function(){function t(t,e){this.notifier=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.notifier,this.source))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.notifier=n,i.source=r,i}return r.__extends(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.errors,r=this.retries,a=this.retriesSubscription;if(r)this.errors=void 0,this.retriesSubscription=void 0;else{n=new i.xQ;try{r=(0,this.notifier)(n)}catch(e){return t.prototype.error.call(this,e)}a=(0,o.ft)(r,new o.IY(this))}this._unsubscribeAndRecycle(),this.errors=n,this.retries=r,this.retriesSubscription=a,n.next(e)}},e.prototype._unsubscribe=function(){var t=this.errors,e=this.retriesSubscription;t&&(t.unsubscribe(),this.errors=void 0),e&&(e.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},e.prototype.notifyNext=function(){var t=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=t,this.source.subscribe(this)},e}(o.Ds)},7263:(t,e,n)=>{"use strict";n.d(e,{d:()=>o}),n(93942),n(70472),n(93270),n(38490),n(99023),n(40737),n(10951),n(5193);var r=n(28646);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function o(t,e,n){var o;return o=t&&"object"===i(t)?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,i=t.bufferSize,o=void 0===i?Number.POSITIVE_INFINITY:i,a=t.windowTime,u=void 0===a?Number.POSITIVE_INFINITY:a,s=t.refCount,c=t.scheduler,d=0,l=!1,f=!1;return function(t){var i;d++,!e||l?(l=!1,e=new r.t(o,u,c),i=e.subscribe(this),n=t.subscribe({next:function(t){e.next(t)},error:function(t){l=!0,e.error(t)},complete:function(){f=!0,n=void 0,e.complete()}}),f&&(n=void 0)):i=e.subscribe(this),this.add((function(){d--,i.unsubscribe(),i=void 0,n&&!f&&s&&0===d&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(o))}}},64440:(t,e,n)=>{"use strict";n.d(e,{w:()=>u});var r=n(61699),i=n(92160),o=n(73531),a=n(56431);function u(t,e){return"function"==typeof e?function(n){return n.pipe(u((function(n,r){return(0,o.D)(t(n,r)).pipe((0,i.U)((function(t,i){return e(n,t,r,i)})))})))}:function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.project=n,r.index=0,r}return r.__extends(e,t),e.prototype._next=function(t){var e,n=this.index++;try{e=this.project(t,n)}catch(t){return void this.destination.error(t)}this._innerSub(e)},e.prototype._innerSub=function(t){var e=this.innerSubscription;e&&e.unsubscribe();var n=new a.IY(this),r=this.destination;r.add(n),this.innerSubscription=(0,a.ft)(t,n),this.innerSubscription!==n&&r.add(this.innerSubscription)},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this),this.unsubscribe()},e.prototype._unsubscribe=function(){this.innerSubscription=void 0},e.prototype.notifyComplete=function(){this.innerSubscription=void 0,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t){this.destination.next(t)},e}(a.Ds)},31407:(t,e,n)=>{"use strict";n.d(e,{q:()=>u});var r=n(61699),i=n(90782),o=n(4069),a=n(14585);function u(t){return function(e){return 0===t?(0,a.c)():e.lift(new s(t))}}var s=function(){function t(t){if(this.total=t,this.total<0)throw new o.W}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.total))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.__extends(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.L)},75077:(t,e,n)=>{"use strict";n.d(e,{r:()=>o});var r=n(64074),i=n(75838);function o(t,e){return new r.y((function(n){var r=new i.w,o=0;return r.add(e.schedule((function(){o!==t.length?(n.next(t[o++]),n.closed||r.add(this.schedule())):n.complete()}))),r}))}},77488:(t,e,n)=>{"use strict";n.d(e,{x:()=>l}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193);var r=n(64074),i=n(75838),o=n(86916),a=n(75077),u=n(42e3),s=n(18316),c=n(56554);function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}function l(t,e){if(null!=t){if(function(t){return t&&"function"==typeof t[o.L]}(t))return function(t,e){return new r.y((function(n){var r=new i.w;return r.add(e.schedule((function(){var i=t[o.L]();r.add(i.subscribe({next:function(t){r.add(e.schedule((function(){return n.next(t)})))},error:function(t){r.add(e.schedule((function(){return n.error(t)})))},complete:function(){r.add(e.schedule((function(){return n.complete()})))}}))}))),r}))}(t,e);if((0,s.t)(t))return function(t,e){return new r.y((function(n){var r=new i.w;return r.add(e.schedule((function(){return t.then((function(t){r.add(e.schedule((function(){n.next(t),r.add(e.schedule((function(){return n.complete()})))})))}),(function(t){r.add(e.schedule((function(){return n.error(t)})))}))}))),r}))}(t,e);if((0,c.z)(t))return(0,a.r)(t,e);if(function(t){return t&&"function"==typeof t[u.hZ]}(t)||"string"==typeof t)return function(t,e){if(!t)throw new Error("Iterable cannot be null");return new r.y((function(n){var r,o=new i.w;return o.add((function(){r&&"function"==typeof r.return&&r.return()})),o.add(e.schedule((function(){r=t[u.hZ](),o.add(e.schedule((function(){if(!n.closed){var t,e;try{var i=r.next();t=i.value,e=i.done}catch(t){return void n.error(t)}e?n.complete():(n.next(t),this.schedule())}})))}))),o}))}(t,e)}throw new TypeError((null!==t&&d(t)||t)+" is not observable")}},674:(t,e,n)=>{"use strict";n.d(e,{o:()=>i}),n(6550),n(32345);var r=n(61699),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r.pending=!1,r}return r.__extends(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this},e.prototype.requestAsyncId=function(t,e,n){return void 0===n&&(n=0),setInterval(t.flush.bind(t,this),n)},e.prototype.recycleAsyncId=function(t,e,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(t,e){var n=!1,r=void 0;try{this.work(t)}catch(t){n=!0,r=!!t&&t||new Error(t)}if(n)return this.unsubscribe(),r},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,n=e.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null},e}(function(t){function e(e,n){return t.call(this)||this}return r.__extends(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(n(75838).w))},41978:(t,e,n)=>{"use strict";n.d(e,{v:()=>o});var r=n(61699),i=n(78379),o=function(t){function e(n,r){void 0===r&&(r=i.b.now);var o=t.call(this,n,(function(){return e.delegate&&e.delegate!==o?e.delegate.now():r()}))||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return r.__extends(e,t),e.prototype.schedule=function(n,r,i){return void 0===r&&(r=0),e.delegate&&e.delegate!==this?e.delegate.schedule(n,r,i):t.prototype.schedule.call(this,n,r,i)},e.prototype.flush=function(t){var e=this.actions;if(this.active)e.push(t);else{var n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}},e}(i.b)},18420:(t,e,n)=>{"use strict";n.d(e,{e:()=>d,E:()=>c});var r=n(61699),i=(n(13722),n(40737),n(83823),1),o=function(){return Promise.resolve()}(),a={};function u(t){return t in a&&(delete a[t],!0)}var s=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.__extends(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=(s=e.flush.bind(e,null),c=i++,a[c]=!0,o.then((function(){return u(c)&&s()})),c)));var s,c},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(u(n),e.scheduled=void 0)},e}(n(674).o),c=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r{"use strict";n.d(e,{P:()=>o,z:()=>i});var r=n(674),i=new(n(41978).v)(r.o),o=i},30396:(t,e,n)=>{"use strict";n.d(e,{c:()=>a,N:()=>o});var r=n(61699),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.__extends(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n(674).o),o=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e}(n(41978).v))(i),a=o},42e3:(t,e,n)=>{"use strict";function r(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}n.d(e,{hZ:()=>i}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193);var i=r()},86916:(t,e,n)=>{"use strict";n.d(e,{L:()=>r}),n(93942),n(70472),n(40737);var r=function(){return"function"==typeof Symbol&&Symbol.observable||"@@observable"}()},70239:(t,e,n)=>{"use strict";n.d(e,{b:()=>r}),n(93942),n(70472),n(40737);var r=function(){return"function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random()}()},4069:(t,e,n)=>{"use strict";n.d(e,{W:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t}()},2246:(t,e,n)=>{"use strict";n.d(e,{K:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return t.prototype=Object.create(Error.prototype),t}()},42046:(t,e,n)=>{"use strict";n.d(e,{N:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return t.prototype=Object.create(Error.prototype),t}()},76960:(t,e,n)=>{"use strict";n.d(e,{W:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="Timeout has occurred",this.name="TimeoutError",this}return t.prototype=Object.create(Error.prototype),t}()},42135:(t,e,n)=>{"use strict";n.d(e,{B:()=>r}),n(64668),n(95412),n(34745),n(40737),n(26667);var r=function(){function t(t){return Error.call(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map((function(t,e){return e+1+") "+t.toString()})).join("\n "):"",this.name="UnsubscriptionError",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t}()},12411:(t,e,n)=>{"use strict";n.d(e,{_:()=>i});var r=n(90782);function i(t){for(;t;){var e=t,n=e.closed,i=e.destination,o=e.isStopped;if(n||o)return!1;t=i&&i instanceof r.L?i:null}return!0}},61554:(t,e,n)=>{"use strict";function r(t){setTimeout((function(){throw t}),0)}n.d(e,{z:()=>r})},16726:(t,e,n)=>{"use strict";function r(t){return t}n.d(e,{y:()=>r})},24937:(t,e,n)=>{"use strict";n.d(e,{k:()=>r});var r=function(){return Array.isArray||function(t){return t&&"number"==typeof t.length}}()},56554:(t,e,n)=>{"use strict";n.d(e,{z:()=>r});var r=function(t){return t&&"number"==typeof t.length&&"function"!=typeof t}},79903:(t,e,n)=>{"use strict";function r(t){return t instanceof Date&&!isNaN(+t)}n.d(e,{J:()=>r})},11169:(t,e,n)=>{"use strict";function r(t){return"function"==typeof t}n.d(e,{m:()=>r})},13491:(t,e,n)=>{"use strict";n.d(e,{k:()=>i}),n(83681);var r=n(24937);function i(t){return!(0,r.k)(t)&&t-parseFloat(t)+1>=0}},46308:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return null!==t&&"object"===r(t)}n.d(e,{K:()=>i}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193)},18316:(t,e,n)=>{"use strict";function r(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}n.d(e,{t:()=>r})},79917:(t,e,n)=>{"use strict";function r(t){return t&&"function"==typeof t.schedule}n.d(e,{K:()=>r})},38375:(t,e,n)=>{"use strict";function r(){}n.d(e,{Z:()=>r})},70696:(t,e,n)=>{"use strict";function r(t,e){function n(){return!n.pred.apply(n.thisArg,arguments)}return n.pred=t,n.thisArg=e,n}n.d(e,{f:()=>r})},76252:(t,e,n)=>{"use strict";n.d(e,{U:()=>o,z:()=>i});var r=n(16726);function i(){for(var t=[],e=0;e{"use strict";n.d(e,{s:()=>d});var r=n(97327),i=n(61554),o=n(42e3),a=n(86916),u=n(56554),s=n(18316),c=n(46308),d=function(t){if(t&&"function"==typeof t[a.L])return d=t,function(t){var e=d[a.L]();if("function"!=typeof e.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return e.subscribe(t)};if((0,u.z)(t))return(0,r.V)(t);if((0,s.t)(t))return n=t,function(t){return n.then((function(e){t.closed||(t.next(e),t.complete())}),(function(e){return t.error(e)})).then(null,i.z),t};if(t&&"function"==typeof t[o.hZ])return e=t,function(t){for(var n=e[o.hZ]();;){var r=void 0;try{r=n.next()}catch(e){return t.error(e),t}if(r.done){t.complete();break}if(t.next(r.value),t.closed)break}return"function"==typeof n.return&&t.add((function(){n.return&&n.return()})),t};var e,n,d,l=(0,c.K)(t)?"an invalid object":"'"+t+"'";throw new TypeError("You provided "+l+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.")}},97327:(t,e,n)=>{"use strict";n.d(e,{V:()=>r});var r=function(t){return function(e){for(var n=0,r=t.length;n{"use strict";n.d(e,{D:()=>u});var r=n(61699),i=function(t){function e(e,n,r){var i=t.call(this)||this;return i.parent=e,i.outerValue=n,i.outerIndex=r,i.index=0,i}return r.__extends(e,t),e.prototype._next=function(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)},e.prototype._error=function(t){this.parent.notifyError(t,this),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},e}(n(90782).L),o=n(28817),a=n(64074);function u(t,e,n,r,u){if(void 0===u&&(u=new i(t,n,r)),!u.closed)return e instanceof a.y?e.subscribe(u):(0,o.s)(e)(u)}},54752:(t,e,n)=>{"use strict";n.d(e,{Y:()=>a});var r=n(90782),i=n(70239),o=n(43610);function a(t,e,n){if(t){if(t instanceof r.L)return t;if(t[i.b])return t[i.b]()}return t||e||n?new r.L(t,e,n):new r.L(o.c)}},11065:(t,e,n)=>{"use strict";n.r(e),n.d(e,{audit:()=>o,auditTime:()=>d,buffer:()=>l,bufferCount:()=>y,bufferTime:()=>b,bufferToggle:()=>x,bufferWhen:()=>M,catchError:()=>L.K,combineAll:()=>j,combineLatest:()=>q,concat:()=>G,concatAll:()=>V.u,concatMap:()=>H,concatMapTo:()=>W,count:()=>K,debounce:()=>J,debounceTime:()=>tt,defaultIfEmpty:()=>it,delay:()=>ut.g,delayWhen:()=>ct,dematerialize:()=>ht,distinct:()=>vt,distinctUntilChanged:()=>bt.x,distinctUntilKeyChanged:()=>St,elementAt:()=>xt,endWith:()=>kt,every:()=>Mt,exhaust:()=>Lt,exhaustMap:()=>Ft,expand:()=>Gt,filter:()=>Ct.h,finalize:()=>Ht,find:()=>Zt,findIndex:()=>Qt,first:()=>te,flatMap:()=>Y.VS,groupBy:()=>ee.v,ignoreElements:()=>ne,isEmpty:()=>oe,last:()=>fe,map:()=>Ut.U,mapTo:()=>pe,materialize:()=>ve,max:()=>Ie,merge:()=>Ae,mergeAll:()=>Oe.J,mergeMap:()=>Y.zg,mergeMapTo:()=>Te,mergeScan:()=>xe,min:()=>Me,multicast:()=>De,observeOn:()=>ze.QV,onErrorResumeNext:()=>je,pairwise:()=>qe,partition:()=>Ye,pluck:()=>He,publish:()=>Ke,publishBehavior:()=>$e,publishLast:()=>Qe,publishReplay:()=>tn,race:()=>nn,reduce:()=>Ee,refCount:()=>hn.x,repeat:()=>rn,repeatWhen:()=>un,retry:()=>dn,retryWhen:()=>pn.a,sample:()=>yn,sampleTime:()=>gn,scan:()=>be,sequenceEqual:()=>wn,share:()=>An,shareReplay:()=>On.d,single:()=>Tn,skip:()=>kn,skipLast:()=>Dn,skipUntil:()=>jn,skipWhile:()=>qn,startWith:()=>Vn,subscribeOn:()=>Kn,switchAll:()=>Jn,switchMap:()=>$n.w,switchMapTo:()=>Qn,take:()=>Tt.q,takeLast:()=>ce,takeUntil:()=>Xn,takeWhile:()=>nr,tap:()=>ur,throttle:()=>lr,throttleTime:()=>hr,throwIfEmpty:()=>It,timeInterval:()=>_r,timeout:()=>Ar,timeoutWith:()=>Cr,timestamp:()=>Or,toArray:()=>Rr,window:()=>kr,windowCount:()=>Dr,windowTime:()=>jr,windowToggle:()=>Yr,windowWhen:()=>Kr,withLatestFrom:()=>Jr,zip:()=>ei,zipAll:()=>ni});var r=n(61699),i=n(56431);function o(t){return function(e){return e.lift(new a(t))}}var a=function(){function t(t){this.durationSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.durationSelector))},t}(),u=function(t){function e(e,n){var r=t.call(this,e)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.__extends(e,t),e.prototype._next=function(t){if(this.value=t,this.hasValue=!0,!this.throttled){var e=void 0;try{e=(0,this.durationSelector)(t)}catch(t){return this.destination.error(t)}var n=(0,i.ft)(e,new i.IY(this));!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}},e.prototype.clearThrottle=function(){var t=this,e=t.value,n=t.hasValue,r=t.throttled;r&&(this.remove(r),this.throttled=void 0,r.unsubscribe()),n&&(this.value=void 0,this.hasValue=!1,this.destination.next(e))},e.prototype.notifyNext=function(){this.clearThrottle()},e.prototype.notifyComplete=function(){this.clearThrottle()},e}(i.Ds),s=n(26858),c=n(12670);function d(t,e){return void 0===e&&(e=s.P),o((function(){return(0,c.H)(t,e)}))}function l(t){return function(e){return e.lift(new f(t))}}var f=function(){function t(t){this.closingNotifier=t}return t.prototype.call=function(t,e){return e.subscribe(new p(t,this.closingNotifier))},t}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.buffer=[],r.add((0,i.ft)(n,new i.IY(r))),r}return r.__extends(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype.notifyNext=function(){var t=this.buffer;this.buffer=[],this.destination.next(t)},e}(i.Ds),h=(n(32345),n(90782));function y(t,e){return void 0===e&&(e=null),function(n){return n.lift(new m(t,e))}}var m=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?g:v}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),v=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return r.__extends(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(h.L),g=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.__extends(e,t),e.prototype._next=function(t){var e=this,n=e.bufferSize,r=e.startBufferEvery,i=e.buffers,o=e.count;this.count++,o%r==0&&i.push([]);for(var a=i.length;a--;){var u=i[a];u.push(t),u.length===n&&(i.splice(a,1),this.destination.next(u))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(h.L),_=(n(6550),n(99023),n(79917));function b(t){var e=arguments.length,n=s.P;(0,_.K)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],e--);var r=null;e>=2&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return e>=3&&(i=arguments[2]),function(e){return e.lift(new S(t,r,i,n))}}var S=function(){function t(t,e,n,r){this.bufferTimeSpan=t,this.bufferCreationInterval=e,this.maxBufferSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new C(t,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},t}(),w=function(){return function(){this.buffer=[]}}(),C=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;a.bufferTimeSpan=n,a.bufferCreationInterval=r,a.maxBufferSize=i,a.scheduler=o,a.contexts=[];var u=a.openContext();if(a.timespanOnly=null==r||r<0,a.timespanOnly){var s={subscriber:a,context:u,bufferTimeSpan:n};a.add(u.closeAction=o.schedule(E,n,s))}else{var c={subscriber:a,context:u},d={bufferTimeSpan:n,bufferCreationInterval:r,subscriber:a,scheduler:o};a.add(u.closeAction=o.schedule(P,n,c)),a.add(o.schedule(I,r,d))}return a}return r.__extends(e,t),e.prototype._next=function(t){for(var e,n=this.contexts,r=n.length,i=0;i0;){var r=e.shift();n.next(r.buffer)}t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.contexts=null},e.prototype.onBufferFull=function(t){this.closeContext(t);var e=t.closeAction;if(e.unsubscribe(),this.remove(e),!this.closed&&this.timespanOnly){t=this.openContext();var n=this.bufferTimeSpan,r={subscriber:this,context:t,bufferTimeSpan:n};this.add(t.closeAction=this.scheduler.schedule(E,n,r))}},e.prototype.openContext=function(){var t=new w;return this.contexts.push(t),t},e.prototype.closeContext=function(t){this.destination.next(t.buffer);var e=this.contexts;(e?e.indexOf(t):-1)>=0&&e.splice(e.indexOf(t),1)},e}(h.L);function E(t){var e=t.subscriber,n=t.context;n&&e.closeContext(n),e.closed||(t.context=e.openContext(),t.context.closeAction=this.schedule(t,t.bufferTimeSpan))}function I(t){var e=t.bufferCreationInterval,n=t.bufferTimeSpan,r=t.subscriber,i=t.scheduler,o=r.openContext();r.closed||(r.add(o.closeAction=i.schedule(P,n,{subscriber:r,context:o})),this.schedule(t,e))}function P(t){var e=t.subscriber,n=t.context;e.closeContext(n)}var A=n(75838),O=n(30121),T=n(64809);function x(t,e){return function(n){return n.lift(new R(t,e))}}var R=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new k(t,this.openings,this.closingSelector))},t}(),k=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.closingSelector=r,i.contexts=[],i.add((0,O.D)(i,n)),i}return r.__extends(e,t),e.prototype._next=function(t){for(var e=this.contexts,n=e.length,r=0;r0;){var r=n.shift();r.subscription.unsubscribe(),r.buffer=null,r.subscription=null}this.contexts=null,t.prototype._error.call(this,e)},e.prototype._complete=function(){for(var e=this.contexts;e.length>0;){var n=e.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e){t?this.closeBuffer(t):this.openBuffer(e)},e.prototype.notifyComplete=function(t){this.closeBuffer(t.context)},e.prototype.openBuffer=function(t){try{var e=this.closingSelector.call(this,t);e&&this.trySubscribe(e)}catch(t){this._error(t)}},e.prototype.closeBuffer=function(t){var e=this.contexts;if(e&&t){var n=t.buffer,r=t.subscription;this.destination.next(n),e.splice(e.indexOf(t),1),this.remove(r),r.unsubscribe()}},e.prototype.trySubscribe=function(t){var e=this.contexts,n=new A.w,r={buffer:[],subscription:n};e.push(r);var i=(0,O.D)(this,t,r);!i||i.closed?this.closeBuffer(r):(i.context=r,this.add(i),n.add(i))},e}(T.L);function M(t){return function(e){return e.lift(new N(t))}}var N=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new D(t,this.closingSelector))},t}(),D=function(t){function e(e,n){var r=t.call(this,e)||this;return r.closingSelector=n,r.subscribing=!1,r.openBuffer(),r}return r.__extends(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=void 0,this.subscribing=!1},e.prototype.notifyNext=function(){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe());var e,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{e=(0,this.closingSelector)()}catch(t){return this.error(t)}t=new A.w,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add((0,i.ft)(e,new i.IY(this))),this.subscribing=!1},e}(i.Ds),L=n(63660),z=n(12206);function j(t){return function(e){return e.lift(new z.Ms(t))}}n(88033),n(16516);var U=n(24937),F=n(73531);function q(){for(var t=[],e=0;e=2;return function(r){return r.pipe((0,Ct.h)((function(e,n){return n===t})),(0,Tt.q)(1),n?it(e):It((function(){return new wt.W})))}}var Rt=n(12309);function kt(){for(var t=[],e=0;e0&&this._next(t.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(i.Ds);function Ht(t){return function(e){return e.lift(new Wt(t))}}var Wt=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new Kt(t,this.callback))},t}(),Kt=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new A.w(n)),r}return r.__extends(e,t),e}(h.L);function Zt(t,e){if("function"!=typeof t)throw new TypeError("predicate is not a function");return function(n){return n.lift(new $t(t,n,!1,e))}}var $t=function(){function t(t,e,n,r){this.predicate=t,this.source=e,this.yieldIndex=n,this.thisArg=r}return t.prototype.call=function(t,e){return e.subscribe(new Jt(t,this.predicate,this.source,this.yieldIndex,this.thisArg))},t}(),Jt=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;return a.predicate=n,a.source=r,a.yieldIndex=i,a.thisArg=o,a.index=0,a}return r.__extends(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete(),this.unsubscribe()},e.prototype._next=function(t){var e=this.predicate,n=this.thisArg,r=this.index++;try{e.call(n||this,t,r,this.source)&&this.notifyComplete(this.yieldIndex?r:t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},e}(h.L);function Qt(t,e){return function(n){return n.lift(new $t(t,n,!0,e))}}var Xt=n(16726);function te(t,e){var n=arguments.length>=2;return function(r){return r.pipe(t?(0,Ct.h)((function(e,n){return t(e,n,r)})):Xt.y,(0,Tt.q)(1),n?it(e):It((function(){return new Et.K})))}}var ee=n(82727);function ne(){return function(t){return t.lift(new re)}}var re=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new ie(t))},t}(),ie=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype._next=function(t){},e}(h.L);function oe(){return function(t){return t.lift(new ae)}}var ae=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new ue(t))},t}(),ue=function(t){function e(e){return t.call(this,e)||this}return r.__extends(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype._next=function(t){this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(h.L),se=n(14585);function ce(t){return function(e){return 0===t?(0,se.c)():e.lift(new de(t))}}var de=function(){function t(t){if(this.total=t,this.total<0)throw new wt.W}return t.prototype.call=function(t,e){return e.subscribe(new le(t,this.total))},t}(),le=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.ring=new Array,r.count=0,r}return r.__extends(e,t),e.prototype._next=function(t){var e=this.ring,n=this.total,r=this.count++;e.length0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i=2;return function(r){return r.pipe(t?(0,Ct.h)((function(e,n){return t(e,n,r)})):Xt.y,ce(1),n?it(e):It((function(){return new Et.K})))}}function pe(t){return function(e){return e.lift(new he(t))}}var he=function(){function t(t){this.value=t}return t.prototype.call=function(t,e){return e.subscribe(new ye(t,this.value))},t}(),ye=function(t){function e(e,n){var r=t.call(this,e)||this;return r.value=n,r}return r.__extends(e,t),e.prototype._next=function(t){this.destination.next(this.value)},e}(h.L),me=n(48811);function ve(){return function(t){return t.lift(new ge)}}var ge=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new _e(t))},t}(),_e=function(t){function e(e){return t.call(this,e)||this}return r.__extends(e,t),e.prototype._next=function(t){this.destination.next(me.P.createNext(t))},e.prototype._error=function(t){var e=this.destination;e.next(me.P.createError(t)),e.complete()},e.prototype._complete=function(){var t=this.destination;t.next(me.P.createComplete()),t.complete()},e}(h.L);function be(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new Se(t,e,n))}}var Se=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new we(t,this.accumulator,this.seed,this.hasSeed))},t}(),we=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.__extends(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(h.L),Ce=n(76252);function Ee(t,e){return arguments.length>=2?function(n){return(0,Ce.z)(be(t,e),ce(1),it(e))(n)}:function(e){return(0,Ce.z)(be((function(e,n,r){return t(e,n,r+1)})),ce(1))(e)}}function Ie(t){return Ee("function"==typeof t?function(e,n){return t(e,n)>0?e:n}:function(t,e){return t>e?t:e})}var Pe=n(48864);function Ae(){for(var t=[],e=0;e0?this._next(t.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},e}(i.Ds);function Me(t){return Ee("function"==typeof t?function(e,n){return t(e,n)<0?e:n}:function(t,e){return t-1&&(this.count=n-1),e.subscribe(this._unsubscribeAndRecycle())}},e}(h.L);function un(t){return function(e){return e.lift(new sn(t))}}var sn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new cn(t,this.notifier,e))},t}(),cn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.notifier=n,i.source=r,i.sourceIsBeingSubscribedTo=!0,i}return r.__extends(e,t),e.prototype.notifyNext=function(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},e.prototype.notifyComplete=function(){if(!1===this.sourceIsBeingSubscribedTo)return t.prototype.complete.call(this)},e.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return t.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next(void 0)}},e.prototype._unsubscribe=function(){var t=this.notifications,e=this.retriesSubscription;t&&(t.unsubscribe(),this.notifications=void 0),e&&(e.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},e.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;return this._unsubscribe=null,t.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=e,this},e.prototype.subscribeToRetries=function(){var e;this.notifications=new We.xQ;try{e=(0,this.notifier)(this.notifications)}catch(e){return t.prototype.complete.call(this)}this.retries=e,this.retriesSubscription=(0,i.ft)(e,new i.IY(this))},e}(i.Ds);function dn(t){return void 0===t&&(t=-1),function(e){return e.lift(new ln(t,e))}}var ln=function(){function t(t,e){this.count=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new fn(t,this.count,this.source))},t}(),fn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.count=n,i.source=r,i}return r.__extends(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.source,r=this.count;if(0===r)return t.prototype.error.call(this,e);r>-1&&(this.count=r-1),n.subscribe(this._unsubscribeAndRecycle())}},e}(h.L),pn=n(62156),hn=n(16807);function yn(t){return function(e){return e.lift(new mn(t))}}var mn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){var n=new vn(t),r=e.subscribe(n);return r.add((0,i.ft)(this.notifier,new i.IY(n))),r},t}(),vn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasValue=!1,e}return r.__extends(e,t),e.prototype._next=function(t){this.value=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},e}(i.Ds);function gn(t,e){return void 0===e&&(e=s.P),function(n){return n.lift(new _n(t,e))}}var _n=function(){function t(t,e){this.period=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new bn(t,this.period,this.scheduler))},t}(),bn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.period=n,i.scheduler=r,i.hasValue=!1,i.add(r.schedule(Sn,n,{subscriber:i,period:n})),i}return r.__extends(e,t),e.prototype._next=function(t){this.lastValue=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},e}(h.L);function Sn(t){var e=t.subscriber,n=t.period;e.notifyNext(),this.schedule(t,n)}function wn(t,e){return function(n){return n.lift(new Cn(t,e))}}var Cn=function(){function t(t,e){this.compareTo=t,this.comparator=e}return t.prototype.call=function(t,e){return e.subscribe(new En(t,this.compareTo,this.comparator))},t}(),En=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.compareTo=n,i.comparator=r,i._a=[],i._b=[],i._oneComplete=!1,i.destination.add(n.subscribe(new In(e,i))),i}return r.__extends(e,t),e.prototype._next=function(t){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(t),this.checkValues())},e.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},e.prototype.checkValues=function(){for(var t=this,e=t._a,n=t._b,r=t.comparator;e.length>0&&n.length>0;){var i=e.shift(),o=n.shift(),a=!1;try{a=r?r(i,o):i===o}catch(t){this.destination.error(t)}a||this.emit(!1)}},e.prototype.emit=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype.nextB=function(t){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(t),this.checkValues())},e.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},e}(h.L),In=function(t){function e(e,n){var r=t.call(this,e)||this;return r.parent=n,r}return r.__extends(e,t),e.prototype._next=function(t){this.parent.nextB(t)},e.prototype._error=function(t){this.parent.error(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},e}(h.L);function Pn(){return new We.xQ}function An(){return function(t){return(0,hn.x)()(De(Pn)(t))}}var On=n(7263);function Tn(t){return function(e){return e.lift(new xn(t,e))}}var xn=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Rn(t,this.predicate,this.source))},t}(),Rn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.source=r,i.seenValue=!1,i.index=0,i}return r.__extends(e,t),e.prototype.applySingleValue=function(t){this.seenValue?this.destination.error("Sequence contains more than one element"):(this.seenValue=!0,this.singleValue=t)},e.prototype._next=function(t){var e=this.index++;this.predicate?this.tryNext(t,e):this.applySingleValue(t)},e.prototype.tryNext=function(t,e){try{this.predicate(t,e,this.source)&&this.applySingleValue(t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){var t=this.destination;this.index>0?(t.next(this.seenValue?this.singleValue:void 0),t.complete()):t.error(new Et.K)},e}(h.L);function kn(t){return function(e){return e.lift(new Mn(t))}}var Mn=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new Nn(t,this.total))},t}(),Nn=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.__extends(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(h.L);function Dn(t){return function(e){return e.lift(new Ln(t))}}var Ln=function(){function t(t){if(this._skipCount=t,this._skipCount<0)throw new wt.W}return t.prototype.call=function(t,e){return 0===this._skipCount?e.subscribe(new h.L(t)):e.subscribe(new zn(t,this._skipCount))},t}(),zn=function(t){function e(e,n){var r=t.call(this,e)||this;return r._skipCount=n,r._count=0,r._ring=new Array(n),r}return r.__extends(e,t),e.prototype._next=function(t){var e=this._skipCount,n=this._count++;if(n0?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,a=0;a=0&&u%e==0&&!this.closed&&i.shift().complete(),++this.count%e==0&&!this.closed){var s=new We.xQ;i.push(s),n.next(s)}},e.prototype._error=function(t){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().complete();this.destination.complete()},e.prototype._unsubscribe=function(){this.count=0,this.windows=null},e}(h.L);function jr(t){var e=s.P,n=null,r=Number.POSITIVE_INFINITY;return(0,_.K)(arguments[3])&&(e=arguments[3]),(0,_.K)(arguments[2])?e=arguments[2]:(0,Hn.k)(arguments[2])&&(r=Number(arguments[2])),(0,_.K)(arguments[1])?e=arguments[1]:(0,Hn.k)(arguments[1])&&(n=Number(arguments[1])),function(i){return i.lift(new Ur(t,n,r,e))}}var Ur=function(){function t(t,e,n,r){this.windowTimeSpan=t,this.windowCreationInterval=e,this.maxWindowSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new qr(t,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},t}(),Fr=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._numberOfNextedValues=0,e}return r.__extends(e,t),e.prototype.next=function(e){this._numberOfNextedValues++,t.prototype.next.call(this,e)},Object.defineProperty(e.prototype,"numberOfNextedValues",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),e}(We.xQ),qr=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;a.destination=e,a.windowTimeSpan=n,a.windowCreationInterval=r,a.maxWindowSize=i,a.scheduler=o,a.windows=[];var u=a.openWindow();if(null!==r&&r>=0){var s={subscriber:a,window:u,context:null},c={windowTimeSpan:n,windowCreationInterval:r,subscriber:a,scheduler:o};a.add(o.schedule(Vr,n,s)),a.add(o.schedule(Gr,r,c))}else{var d={subscriber:a,window:u,windowTimeSpan:n};a.add(o.schedule(Br,n,d))}return a}return r.__extends(e,t),e.prototype._next=function(t){for(var e=this.windows,n=e.length,r=0;r=this.maxWindowSize&&this.closeWindow(i))}},e.prototype._error=function(t){for(var e=this.windows;e.length>0;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){for(var t=this.windows;t.length>0;){var e=t.shift();e.closed||e.complete()}this.destination.complete()},e.prototype.openWindow=function(){var t=new Fr;return this.windows.push(t),this.destination.next(t),t},e.prototype.closeWindow=function(t){t.complete();var e=this.windows;e.splice(e.indexOf(t),1)},e}(h.L);function Br(t){var e=t.subscriber,n=t.windowTimeSpan,r=t.window;r&&e.closeWindow(r),t.window=e.openWindow(),this.schedule(t,n)}function Gr(t){var e=t.windowTimeSpan,n=t.subscriber,r=t.scheduler,i=t.windowCreationInterval,o=n.openWindow(),a=this,u={action:a,subscription:null},s={subscriber:n,window:o,context:u};u.subscription=r.schedule(Vr,e,s),a.add(u.subscription),a.schedule(t,i)}function Vr(t){var e=t.subscriber,n=t.window,r=t.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),e.closeWindow(n)}function Yr(t,e){return function(n){return n.lift(new Hr(t,e))}}var Hr=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new Wr(t,this.openings,this.closingSelector))},t}(),Wr=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.openings=n,i.closingSelector=r,i.contexts=[],i.add(i.openSubscription=(0,O.D)(i,n,n)),i}return r.__extends(e,t),e.prototype._next=function(t){var e=this.contexts;if(e)for(var n=e.length,r=0;r0){var i=r.indexOf(n);-1!==i&&r.splice(i,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(T.L),ti=n(66436);function ei(){for(var t=[],e=0;e{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(13722),n(40737),n(10951),n(5193),t.exports=function(t,e,n,i){var o=n?n.call(i,t,e):void 0;if(void 0!==o)return!!o;if(t===e)return!0;if("object"!==r(t)||!t||"object"!==r(e)||!e)return!1;var a=Object.keys(t),u=Object.keys(e);if(a.length!==u.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(e),c=0;c{"use strict";n(6550),n(16516),t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)throw new TypeError("Expected the arguments to be of type `string`");if(""===e)return[t];var n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},29590:(t,e,n)=>{"use strict";n(40737),n(26667),n(58443),t.exports=function(t){return encodeURIComponent(t).replace(/[!'()*]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}},61699:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n.r(e),n.d(e,{__assign:()=>a,__asyncDelegator:()=>S,__asyncGenerator:()=>b,__asyncValues:()=>w,__await:()=>_,__awaiter:()=>l,__classPrivateFieldGet:()=>P,__classPrivateFieldSet:()=>A,__createBinding:()=>p,__decorate:()=>s,__exportStar:()=>h,__extends:()=>o,__generator:()=>f,__importDefault:()=>I,__importStar:()=>E,__makeTemplateObject:()=>C,__metadata:()=>d,__param:()=>c,__read:()=>m,__rest:()=>u,__spread:()=>v,__spreadArrays:()=>g,__values:()=>y}),n(93942),n(70472),n(9190),n(93270),n(88033),n(6550),n(38490),n(27835),n(19926),n(28101),n(40737),n(83823),n(10951),n(5193);var i=function(t,e){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},i(t,e)};function o(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var a=function(){return a=Object.assign||function(t){for(var e,n=1,r=arguments.length;n=0;s--)(o=t[s])&&(u=(a<3?o(u):a>3?o(e,n,u):o(e,n))||u);return a>3&&u&&Object.defineProperty(e,n,u),u}function c(t,e){return function(n,r){e(n,r,t)}}function d(t,e){if("object"===("undefined"==typeof Reflect?"undefined":r(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function l(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))}function f(t,e){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function m(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function v(){for(var t=[],e=0;e1||u(t,e)}))})}function u(t,e){try{(n=i[t](e)).value instanceof _?Promise.resolve(n.value.v).then(s,c):d(o[0][2],n)}catch(t){d(o[0][3],t)}var n}function s(t){u("next",t)}function c(t){u("throw",t)}function d(t,e){t(e),o.shift(),o.length&&u(o[0][0],o[0][1])}}function S(t){var e,n;return e={},r("next"),r("throw",(function(t){throw t})),r("return"),e[Symbol.iterator]=function(){return this},e;function r(r,i){e[r]=t[r]?function(e){return(n=!n)?{value:_(t[r](e)),done:"return"===r}:i?i(e):e}:i}}function w(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t=y(t),e={},r("next"),r("throw"),r("return"),e[Symbol.asyncIterator]=function(){return this},e);function r(n){e[n]=t[n]&&function(e){return new Promise((function(r,i){!function(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)}(r,i,(e=t[n](e)).done,e.value)}))}}}function C(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function E(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function I(t){return t&&t.__esModule?t:{default:t}}function P(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function A(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}},86173:(t,e,n)=>{var r=n(34028),i=n(84160),o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+" is not a function")}},52023:(t,e,n)=>{var r=n(78449),i=n(84160),o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+" is not a constructor")}},41684:(t,e,n)=>{var r=n(34028),i=String,o=TypeError;t.exports=function(t){if("object"==typeof t||r(t))return t;throw o("Can't set "+i(t)+" as a prototype")}},47512:(t,e,n)=>{var r=n(30191),i=n(13250),o=n(43087).f,a=r("unscopables"),u=Array.prototype;null==u[a]&&o(u,a,{configurable:!0,value:i(null)}),t.exports=function(t){u[a][t]=!0}},75527:(t,e,n)=>{"use strict";var r=n(58402).charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},39837:(t,e,n)=>{var r=n(27357),i=TypeError;t.exports=function(t,e){if(r(e,t))return t;throw i("Incorrect invocation")}},52546:(t,e,n)=>{var r=n(51355),i=String,o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+" is not an object")}},68096:t=>{t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},1743:(t,e,n)=>{var r=n(38986);t.exports=r((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},65140:(t,e,n)=>{"use strict";var r=n(32022),i=n(59913),o=n(12115),a=n(68096),u=n(27765),s=n(22775),c=n(3193),d=n(38986),l=n(39837),f=n(75982),p=n(9375),h=n(91173),y=n(38108),m=n(75783),v=n(25466),g=n(92775).f,_=n(43087).f,b=n(13750),S=n(42893),w=n(27747),C=n(78045),E=u.PROPER,I=u.CONFIGURABLE,P=C.get,A=C.set,O="ArrayBuffer",T="DataView",x="prototype",R="Wrong index",k=r[O],M=k,N=M&&M[x],D=r[T],L=D&&D[x],z=Object.prototype,j=r.Array,U=r.RangeError,F=i(b),q=i([].reverse),B=y.pack,G=y.unpack,V=function(t){return[255&t]},Y=function(t){return[255&t,t>>8&255]},H=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},W=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},K=function(t){return B(t,23,4)},Z=function(t){return B(t,52,8)},$=function(t,e){_(t[x],e,{get:function(){return P(this)[e]}})},J=function(t,e,n,r){var i=h(n),o=P(t);if(i+e>o.byteLength)throw U(R);var a=P(o.buffer).bytes,u=i+o.byteOffset,s=S(a,u,u+e);return r?s:q(s)},Q=function(t,e,n,r,i,o){var a=h(n),u=P(t);if(a+e>u.byteLength)throw U(R);for(var s=P(u.buffer).bytes,c=a+u.byteOffset,d=r(+i),l=0;lnt;)(tt=et[nt++])in M||s(M,tt,k[tt]);N.constructor=M}v&&m(L)!==z&&v(L,z);var rt=new D(new M(2)),it=i(L.setInt8);rt.setInt8(0,2147483648),rt.setInt8(1,2147483649),!rt.getInt8(0)&&rt.getInt8(1)||c(L,{setInt8:function(t,e){it(this,t,e<<24>>24)},setUint8:function(t,e){it(this,t,e<<24>>24)}},{unsafe:!0})}else N=(M=function(t){l(this,N);var e=h(t);A(this,{bytes:F(j(e),0),byteLength:e}),o||(this.byteLength=e)})[x],L=(D=function(t,e,n){l(this,L),l(t,N);var r=P(t).byteLength,i=f(e);if(i<0||i>r)throw U("Wrong offset");if(i+(n=void 0===n?r-i:p(n))>r)throw U("Wrong length");A(this,{buffer:t,byteLength:n,byteOffset:i}),o||(this.buffer=t,this.byteLength=n,this.byteOffset=i)})[x],o&&($(M,"byteLength"),$(D,"buffer"),$(D,"byteLength"),$(D,"byteOffset")),c(L,{getInt8:function(t){return J(this,1,t)[0]<<24>>24},getUint8:function(t){return J(this,1,t)[0]},getInt16:function(t){var e=J(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=J(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return W(J(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return W(J(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return G(J(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return G(J(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){Q(this,1,t,V,e)},setUint8:function(t,e){Q(this,1,t,V,e)},setInt16:function(t,e){Q(this,2,t,Y,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){Q(this,2,t,Y,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){Q(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){Q(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){Q(this,4,t,K,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){Q(this,8,t,Z,e,arguments.length>2?arguments[2]:void 0)}});w(M,O),w(D,T),t.exports={ArrayBuffer:M,DataView:D}},13750:(t,e,n)=>{"use strict";var r=n(47137),i=n(86593),o=n(84117);t.exports=function(t){for(var e=r(this),n=o(e),a=arguments.length,u=i(a>1?arguments[1]:void 0,n),s=a>2?arguments[2]:void 0,c=void 0===s?n:i(s,n);c>u;)e[u++]=t;return e}},33609:(t,e,n)=>{"use strict";var r=n(55883).forEach,i=n(94694)("forEach");t.exports=i?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},65375:(t,e,n)=>{"use strict";var r=n(80391),i=n(49425),o=n(47137),a=n(7701),u=n(92882),s=n(78449),c=n(84117),d=n(19402),l=n(32057),f=n(6897),p=Array;t.exports=function(t){var e=o(t),n=s(this),h=arguments.length,y=h>1?arguments[1]:void 0,m=void 0!==y;m&&(y=r(y,h>2?arguments[2]:void 0));var v,g,_,b,S,w,C=f(e),E=0;if(!C||this===p&&u(C))for(v=c(e),g=n?new this(v):p(v);v>E;E++)w=m?y(e[E],E):e[E],d(g,E,w);else for(S=(b=l(e,C)).next,g=n?new this:[];!(_=i(S,b)).done;E++)w=m?a(b,y,[_.value,E],!0):_.value,d(g,E,w);return g.length=E,g}},78035:(t,e,n)=>{var r=n(58326),i=n(86593),o=n(84117),a=function(t){return function(e,n,a){var u,s=r(e),c=o(s),d=i(a,c);if(t&&n!=n){for(;c>d;)if((u=s[d++])!=u)return!0}else for(;c>d;d++)if((t||d in s)&&s[d]===n)return t||d||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},55883:(t,e,n)=>{var r=n(80391),i=n(59913),o=n(94032),a=n(47137),u=n(84117),s=n(74842),c=i([].push),d=function(t){var e=1==t,n=2==t,i=3==t,d=4==t,l=6==t,f=7==t,p=5==t||l;return function(h,y,m,v){for(var g,_,b=a(h),S=o(b),w=r(y,m),C=u(S),E=0,I=v||s,P=e?I(h,C):n||f?I(h,0):void 0;C>E;E++)if((p||E in S)&&(_=w(g=S[E],E,b),t))if(e)P[E]=_;else if(_)switch(t){case 3:return!0;case 5:return g;case 6:return E;case 2:c(P,g)}else switch(t){case 4:return!1;case 7:c(P,g)}return l?-1:i||d?d:P}};t.exports={forEach:d(0),map:d(1),filter:d(2),some:d(3),every:d(4),find:d(5),findIndex:d(6),filterReject:d(7)}},44687:(t,e,n)=>{"use strict";var r=n(10584),i=n(58326),o=n(75982),a=n(84117),u=n(94694),s=Math.min,c=[].lastIndexOf,d=!!c&&1/[1].lastIndexOf(1,-0)<0,l=u("lastIndexOf"),f=d||!l;t.exports=f?function(t){if(d)return r(c,this,arguments)||0;var e=i(this),n=a(e),u=n-1;for(arguments.length>1&&(u=s(u,o(arguments[1]))),u<0&&(u=n+u);u>=0;u--)if(u in e&&e[u]===t)return u||0;return-1}:c},41665:(t,e,n)=>{var r=n(38986),i=n(30191),o=n(80714),a=i("species");t.exports=function(t){return o>=51||!r((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},94694:(t,e,n)=>{"use strict";var r=n(38986);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){return 1},1)}))}},17761:(t,e,n)=>{"use strict";var r=n(12115),i=n(65351),o=TypeError,a=Object.getOwnPropertyDescriptor,u=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=u?function(t,e){if(i(t)&&!a(t,"length").writable)throw o("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},42893:(t,e,n)=>{var r=n(86593),i=n(84117),o=n(19402),a=Array,u=Math.max;t.exports=function(t,e,n){for(var s=i(t),c=r(e,s),d=r(void 0===n?s:n,s),l=a(u(d-c,0)),f=0;c{var r=n(59913);t.exports=r([].slice)},71929:(t,e,n)=>{var r=n(42893),i=Math.floor,o=function(t,e){var n=t.length,s=i(n/2);return n<8?a(t,e):u(t,o(r(t,0,s),e),o(r(t,s),e),e)},a=function(t,e){for(var n,r,i=t.length,o=1;o0;)t[r]=t[--r];r!==o++&&(t[r]=n)}return t},u=function(t,e,n,r){for(var i=e.length,o=n.length,a=0,u=0;a{var r=n(65351),i=n(78449),o=n(51355),a=n(30191)("species"),u=Array;t.exports=function(t){var e;return r(t)&&(e=t.constructor,(i(e)&&(e===u||r(e.prototype))||o(e)&&null===(e=e[a]))&&(e=void 0)),void 0===e?u:e}},74842:(t,e,n)=>{var r=n(78502);t.exports=function(t,e){return new(r(t))(0===e?0:e)}},7701:(t,e,n)=>{var r=n(52546),i=n(94681);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){i(t,"throw",e)}}},41269:(t,e,n)=>{var r=n(30191)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o={};o[r]=function(){return{next:function(){return{done:n=!0}}}},t(o)}catch(t){}return n}},39523:(t,e,n)=>{var r=n(59913),i=r({}.toString),o=r("".slice);t.exports=function(t){return o(i(t),8,-1)}},82814:(t,e,n)=>{var r=n(77568),i=n(34028),o=n(39523),a=n(30191)("toStringTag"),u=Object,s="Arguments"==o(function(){return arguments}());t.exports=r?o:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=u(t),a))?n:s?o(e):"Object"==(r=o(e))&&i(e.callee)?"Arguments":r}},61961:(t,e,n)=>{"use strict";var r=n(43087).f,i=n(13250),o=n(3193),a=n(80391),u=n(39837),s=n(87126),c=n(38640),d=n(53338),l=n(80251),f=n(42343),p=n(12115),h=n(67023).fastKey,y=n(78045),m=y.set,v=y.getterFor;t.exports={getConstructor:function(t,e,n,d){var l=t((function(t,r){u(t,f),m(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),p||(t.size=0),s(r)||c(r,t[d],{that:t,AS_ENTRIES:n})})),f=l.prototype,y=v(e),g=function(t,e,n){var r,i,o=y(t),a=_(t,e);return a?a.value=n:(o.last=a={index:i=h(e,!0),key:e,value:n,previous:r=o.last,next:void 0,removed:!1},o.first||(o.first=a),r&&(r.next=a),p?o.size++:t.size++,"F"!==i&&(o.index[i]=a)),t},_=function(t,e){var n,r=y(t),i=h(e);if("F"!==i)return r.index[i];for(n=r.first;n;n=n.next)if(n.key==e)return n};return o(f,{clear:function(){for(var t=y(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,p?t.size=0:this.size=0},delete:function(t){var e=this,n=y(e),r=_(e,t);if(r){var i=r.next,o=r.previous;delete n.index[r.index],r.removed=!0,o&&(o.next=i),i&&(i.previous=o),n.first==r&&(n.first=i),n.last==r&&(n.last=o),p?n.size--:e.size--}return!!r},forEach:function(t){for(var e,n=y(this),r=a(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(r(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!_(this,t)}}),o(f,n?{get:function(t){var e=_(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),p&&r(f,"size",{get:function(){return y(this).size}}),l},setStrong:function(t,e,n){var r=e+" Iterator",i=v(e),o=v(r);d(t,e,(function(t,e){m(this,{type:r,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=o(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?l("keys"==e?n.key:"values"==e?n.value:[n.key,n.value],!1):(t.target=void 0,l(void 0,!0))}),n?"entries":"values",!n,!0),f(e)}}},31858:(t,e,n)=>{"use strict";var r=n(59913),i=n(3193),o=n(67023).getWeakData,a=n(39837),u=n(52546),s=n(87126),c=n(51355),d=n(38640),l=n(55883),f=n(98511),p=n(78045),h=p.set,y=p.getterFor,m=l.find,v=l.findIndex,g=r([].splice),_=0,b=function(t){return t.frozen||(t.frozen=new S)},S=function(){this.entries=[]},w=function(t,e){return m(t.entries,(function(t){return t[0]===e}))};S.prototype={get:function(t){var e=w(this,t);if(e)return e[1]},has:function(t){return!!w(this,t)},set:function(t,e){var n=w(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=v(this.entries,(function(e){return e[0]===t}));return~e&&g(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,n,r){var l=t((function(t,i){a(t,p),h(t,{type:e,id:_++,frozen:void 0}),s(i)||d(i,t[r],{that:t,AS_ENTRIES:n})})),p=l.prototype,m=y(e),v=function(t,e,n){var r=m(t),i=o(u(e),!0);return!0===i?b(r).set(e,n):i[r.id]=n,t};return i(p,{delete:function(t){var e=m(this);if(!c(t))return!1;var n=o(t);return!0===n?b(e).delete(t):n&&f(n,e.id)&&delete n[e.id]},has:function(t){var e=m(this);if(!c(t))return!1;var n=o(t);return!0===n?b(e).has(t):n&&f(n,e.id)}}),i(p,n?{get:function(t){var e=m(this);if(c(t)){var n=o(t);return!0===n?b(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return v(this,t,e)}}:{add:function(t){return v(this,t,!0)}}),l}}},69866:(t,e,n)=>{"use strict";var r=n(54635),i=n(32022),o=n(59913),a=n(77987),u=n(43068),s=n(67023),c=n(38640),d=n(39837),l=n(34028),f=n(87126),p=n(51355),h=n(38986),y=n(41269),m=n(27747),v=n(99618);t.exports=function(t,e,n){var g=-1!==t.indexOf("Map"),_=-1!==t.indexOf("Weak"),b=g?"set":"add",S=i[t],w=S&&S.prototype,C=S,E={},I=function(t){var e=o(w[t]);u(w,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(_&&!p(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return _&&!p(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(_&&!p(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(a(t,!l(S)||!(_||w.forEach&&!h((function(){(new S).entries().next()})))))C=n.getConstructor(e,t,g,b),s.enable();else if(a(t,!0)){var P=new C,A=P[b](_?{}:-0,1)!=P,O=h((function(){P.has(1)})),T=y((function(t){new S(t)})),x=!_&&h((function(){for(var t=new S,e=5;e--;)t[b](e,e);return!t.has(-0)}));T||((C=e((function(t,e){d(t,w);var n=v(new S,t,C);return f(e)||c(e,n[b],{that:n,AS_ENTRIES:g}),n}))).prototype=w,w.constructor=C),(O||x)&&(I("delete"),I("has"),g&&I("get")),(x||A)&&I(b),_&&w.clear&&delete w.clear}return E[t]=C,r({global:!0,constructor:!0,forced:C!=S},E),m(C,t),_||n.setStrong(C,t,g),C}},74953:(t,e,n)=>{var r=n(98511),i=n(91537),o=n(66213),a=n(43087);t.exports=function(t,e,n){for(var u=i(e),s=a.f,c=o.f,d=0;d{var r=n(30191)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,"/./"[t](e)}catch(t){}}return!1}},88538:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},89444:(t,e,n)=>{var r=n(59913),i=n(31591),o=n(74170),a=/"/g,u=r("".replace);t.exports=function(t,e,n,r){var s=o(i(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+u(o(r),a,""")+'"'),c+">"+s+""}},80251:t=>{t.exports=function(t,e){return{value:t,done:e}}},22775:(t,e,n)=>{var r=n(12115),i=n(43087),o=n(71111);t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},71111:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},19402:(t,e,n)=>{"use strict";var r=n(79127),i=n(43087),o=n(71111);t.exports=function(t,e,n){var a=r(e);a in t?i.f(t,a,o(0,n)):t[a]=n}},68959:(t,e,n)=>{"use strict";var r=n(52546),i=n(93126),o=TypeError;t.exports=function(t){if(r(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw o("Incorrect hint");return i(this,t)}},43068:(t,e,n)=>{var r=n(34028),i=n(43087),o=n(43608),a=n(97210);t.exports=function(t,e,n,u){u||(u={});var s=u.enumerable,c=void 0!==u.name?u.name:e;if(r(n)&&o(n,c,u),u.global)s?t[e]=n:a(e,n);else{try{u.unsafe?t[e]&&(s=!0):delete t[e]}catch(t){}s?t[e]=n:i.f(t,e,{value:n,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return t}},3193:(t,e,n)=>{var r=n(43068);t.exports=function(t,e,n){for(var i in e)r(t,i,e[i],n);return t}},97210:(t,e,n)=>{var r=n(32022),i=Object.defineProperty;t.exports=function(t,e){try{i(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},39850:(t,e,n)=>{"use strict";var r=n(84160),i=TypeError;t.exports=function(t,e){if(!delete t[e])throw i("Cannot delete property "+r(e)+" of "+r(t))}},12115:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},30805:t=>{var e="object"==typeof document&&document.all,n=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:n}},82985:(t,e,n)=>{var r=n(32022),i=n(51355),o=r.document,a=i(o)&&i(o.createElement);t.exports=function(t){return a?o.createElement(t):{}}},81912:t=>{var e=TypeError;t.exports=function(t){if(t>9007199254740991)throw e("Maximum allowed index exceeded");return t}},66910:t=>{t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},73391:(t,e,n)=>{var r=n(82985)("span").classList,i=r&&r.constructor&&r.constructor.prototype;t.exports=i===Object.prototype?void 0:i},93454:(t,e,n)=>{var r=n(30727).match(/firefox\/(\d+)/i);t.exports=!!r&&+r[1]},85048:(t,e,n)=>{var r=n(5835),i=n(79456);t.exports=!r&&!i&&"object"==typeof window&&"object"==typeof document},5835:t=>{t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},88633:(t,e,n)=>{var r=n(30727);t.exports=/MSIE|Trident/.test(r)},88525:(t,e,n)=>{var r=n(30727),i=n(32022);t.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==i.Pebble},649:(t,e,n)=>{var r=n(30727);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},79456:(t,e,n)=>{var r=n(39523),i=n(32022);t.exports="process"==r(i.process)},52054:(t,e,n)=>{var r=n(30727);t.exports=/web0s(?!.*chrome)/i.test(r)},30727:(t,e,n)=>{var r=n(83155);t.exports=r("navigator","userAgent")||""},80714:(t,e,n)=>{var r,i,o=n(32022),a=n(30727),u=o.process,s=o.Deno,c=u&&u.versions||s&&s.version,d=c&&c.v8;d&&(i=(r=d.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=+r[1]),t.exports=i},10720:(t,e,n)=>{var r=n(30727).match(/AppleWebKit\/(\d+)\./);t.exports=!!r&&+r[1]},26100:t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},54635:(t,e,n)=>{var r=n(32022),i=n(66213).f,o=n(22775),a=n(43068),u=n(97210),s=n(74953),c=n(77987);t.exports=function(t,e){var n,d,l,f,p,h=t.target,y=t.global,m=t.stat;if(n=y?r:m?r[h]||u(h,{}):(r[h]||{}).prototype)for(d in e){if(f=e[d],l=t.dontCallGetSet?(p=i(n,d))&&p.value:n[d],!c(y?d:h+(m?".":"#")+d,t.forced)&&void 0!==l){if(typeof f==typeof l)continue;s(f,l)}(t.sham||l&&l.sham)&&o(f,"sham",!0),a(n,d,f,t)}}},38986:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},26210:(t,e,n)=>{"use strict";n(49636);var r=n(59913),i=n(43068),o=n(83046),a=n(38986),u=n(30191),s=n(22775),c=u("species"),d=RegExp.prototype;t.exports=function(t,e,n,l){var f=u(t),p=!a((function(){var e={};return e[f]=function(){return 7},7!=""[t](e)})),h=p&&!a((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags="",n[f]=/./[f]),n.exec=function(){return e=!0,null},n[f](""),!e}));if(!p||!h||n){var y=r(/./[f]),m=e(f,""[t],(function(t,e,n,i,a){var u=r(t),s=e.exec;return s===o||s===d.exec?p&&!a?{done:!0,value:y(e,n,i)}:{done:!0,value:u(n,e,i)}:{done:!1}}));i(String.prototype,t,m[0]),i(d,f,m[1])}l&&s(d[f],"sham",!0)}},47484:(t,e,n)=>{"use strict";var r=n(65351),i=n(84117),o=n(81912),a=n(80391),u=function(t,e,n,s,c,d,l,f){for(var p,h,y=c,m=0,v=!!l&&a(l,f);m0&&r(p)?(h=i(p),y=u(t,e,p,h,y,d-1)-1):(o(y+1),t[y]=p),y++),m++;return y};t.exports=u},6769:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},10584:(t,e,n)=>{var r=n(74959),i=Function.prototype,o=i.apply,a=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},80391:(t,e,n)=>{var r=n(59913),i=n(86173),o=n(74959),a=r(r.bind);t.exports=function(t,e){return i(t),void 0===e?t:o?a(t,e):function(){return t.apply(e,arguments)}}},74959:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},49425:(t,e,n)=>{var r=n(74959),i=Function.prototype.call;t.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},27765:(t,e,n)=>{var r=n(12115),i=n(98511),o=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,u=i(o,"name"),s=u&&"something"===function(){}.name,c=u&&(!r||r&&a(o,"name").configurable);t.exports={EXISTS:u,PROPER:s,CONFIGURABLE:c}},59913:(t,e,n)=>{var r=n(74959),i=Function.prototype,o=i.bind,a=i.call,u=r&&o.bind(a,a);t.exports=r?function(t){return t&&u(t)}:function(t){return t&&function(){return a.apply(t,arguments)}}},83155:(t,e,n)=>{var r=n(32022),i=n(34028);t.exports=function(t,e){return arguments.length<2?(n=r[t],i(n)?n:void 0):r[t]&&r[t][e];var n}},6897:(t,e,n)=>{var r=n(82814),i=n(34040),o=n(87126),a=n(13766),u=n(30191)("iterator");t.exports=function(t){if(!o(t))return i(t,u)||i(t,"@@iterator")||a[r(t)]}},32057:(t,e,n)=>{var r=n(49425),i=n(86173),o=n(52546),a=n(84160),u=n(6897),s=TypeError;t.exports=function(t,e){var n=arguments.length<2?u(t):e;if(i(n))return o(r(n,t));throw s(a(t)+" is not iterable")}},34040:(t,e,n)=>{var r=n(86173),i=n(87126);t.exports=function(t,e){var n=t[e];return i(n)?void 0:r(n)}},82319:(t,e,n)=>{var r=n(59913),i=n(47137),o=Math.floor,a=r("".charAt),u=r("".replace),s=r("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,r,l,f){var p=n+t.length,h=r.length,y=d;return void 0!==l&&(l=i(l),y=c),u(f,y,(function(i,u){var c;switch(a(u,0)){case"$":return"$";case"&":return t;case"`":return s(e,0,n);case"'":return s(e,p);case"<":c=l[s(u,1,-1)];break;default:var d=+u;if(0===d)return i;if(d>h){var f=o(d/10);return 0===f?i:f<=h?void 0===r[f-1]?a(u,1):r[f-1]+a(u,1):i}c=r[d-1]}return void 0===c?"":c}))}},32022:(t,e,n)=>{var r=function(t){return t&&t.Math==Math&&t};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},98511:(t,e,n)=>{var r=n(59913),i=n(47137),o=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return o(i(t),e)}},17307:t=>{t.exports={}},39361:(t,e,n)=>{var r=n(32022);t.exports=function(t,e){var n=r.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},86419:(t,e,n)=>{var r=n(83155);t.exports=r("document","documentElement")},2159:(t,e,n)=>{var r=n(12115),i=n(38986),o=n(82985);t.exports=!r&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},38108:t=>{var e=Array,n=Math.abs,r=Math.pow,i=Math.floor,o=Math.log,a=Math.LN2;t.exports={pack:function(t,u,s){var c,d,l,f=e(s),p=8*s-u-1,h=(1<>1,m=23===u?r(2,-24)-r(2,-77):0,v=t<0||0===t&&1/t<0?1:0,g=0;for((t=n(t))!=t||t===1/0?(d=t!=t?1:0,c=h):(c=i(o(t)/a),t*(l=r(2,-c))<1&&(c--,l*=2),(t+=c+y>=1?m/l:m*r(2,1-y))*l>=2&&(c++,l/=2),c+y>=h?(d=0,c=h):c+y>=1?(d=(t*l-1)*r(2,u),c+=y):(d=t*r(2,y-1)*r(2,u),c=0));u>=8;)f[g++]=255&d,d/=256,u-=8;for(c=c<0;)f[g++]=255&c,c/=256,p-=8;return f[--g]|=128*v,f},unpack:function(t,e){var n,i=t.length,o=8*i-e-1,a=(1<>1,s=o-7,c=i-1,d=t[c--],l=127&d;for(d>>=7;s>0;)l=256*l+t[c--],s-=8;for(n=l&(1<<-s)-1,l>>=-s,s+=e;s>0;)n=256*n+t[c--],s-=8;if(0===l)l=1-u;else{if(l===a)return n?NaN:d?-1/0:1/0;n+=r(2,e),l-=u}return(d?-1:1)*n*r(2,l-e)}}},94032:(t,e,n)=>{var r=n(59913),i=n(38986),o=n(39523),a=Object,u=r("".split);t.exports=i((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?u(t,""):a(t)}:a},99618:(t,e,n)=>{var r=n(34028),i=n(51355),o=n(25466);t.exports=function(t,e,n){var a,u;return o&&r(a=e.constructor)&&a!==n&&i(u=a.prototype)&&u!==n.prototype&&o(t,u),t}},46169:(t,e,n)=>{var r=n(59913),i=n(34028),o=n(43349),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(t){return a(t)}),t.exports=o.inspectSource},67023:(t,e,n)=>{var r=n(54635),i=n(59913),o=n(17307),a=n(51355),u=n(98511),s=n(43087).f,c=n(92775),d=n(12098),l=n(62713),f=n(60232),p=n(6769),h=!1,y=f("meta"),m=0,v=function(t){s(t,y,{value:{objectID:"O"+m++,weakData:{}}})},g=t.exports={enable:function(){g.enable=function(){},h=!0;var t=c.f,e=i([].splice),n={};n[y]=1,t(n).length&&(c.f=function(n){for(var r=t(n),i=0,o=r.length;i{var r,i,o,a=n(74112),u=n(32022),s=n(59913),c=n(51355),d=n(22775),l=n(98511),f=n(43349),p=n(57186),h=n(17307),y="Object already initialized",m=u.TypeError,v=u.WeakMap;if(a||f.state){var g=f.state||(f.state=new v),_=s(g.get),b=s(g.has),S=s(g.set);r=function(t,e){if(b(g,t))throw m(y);return e.facade=t,S(g,t,e),e},i=function(t){return _(g,t)||{}},o=function(t){return b(g,t)}}else{var w=p("state");h[w]=!0,r=function(t,e){if(l(t,w))throw m(y);return e.facade=t,d(t,w,e),e},i=function(t){return l(t,w)?t[w]:{}},o=function(t){return l(t,w)}}t.exports={set:r,get:i,has:o,enforce:function(t){return o(t)?i(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!c(e)||(n=i(e)).type!==t)throw m("Incompatible receiver, "+t+" required");return n}}}},92882:(t,e,n)=>{var r=n(30191),i=n(13766),o=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||a[o]===t)}},65351:(t,e,n)=>{var r=n(39523);t.exports=Array.isArray||function(t){return"Array"==r(t)}},34028:(t,e,n)=>{var r=n(30805),i=r.all;t.exports=r.IS_HTMLDDA?function(t){return"function"==typeof t||t===i}:function(t){return"function"==typeof t}},78449:(t,e,n)=>{var r=n(59913),i=n(38986),o=n(34028),a=n(82814),u=n(83155),s=n(46169),c=function(){},d=[],l=u("Reflect","construct"),f=/^\s*(?:class|function)\b/,p=r(f.exec),h=!f.exec(c),y=function(t){if(!o(t))return!1;try{return l(c,d,t),!0}catch(t){return!1}},m=function(t){if(!o(t))return!1;switch(a(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return h||!!p(f,s(t))}catch(t){return!0}};m.sham=!0,t.exports=!l||i((function(){var t;return y(y.call)||!y(Object)||!y((function(){t=!0}))||t}))?m:y},77987:(t,e,n)=>{var r=n(38986),i=n(34028),o=/#|\.prototype\./,a=function(t,e){var n=s[u(t)];return n==d||n!=c&&(i(e)?r(e):!!e)},u=a.normalize=function(t){return String(t).replace(o,".").toLowerCase()},s=a.data={},c=a.NATIVE="N",d=a.POLYFILL="P";t.exports=a},87126:t=>{t.exports=function(t){return null==t}},51355:(t,e,n)=>{var r=n(34028),i=n(30805),o=i.all;t.exports=i.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:r(t)||t===o}:function(t){return"object"==typeof t?null!==t:r(t)}},68546:t=>{t.exports=!1},91035:(t,e,n)=>{var r=n(51355),i=n(39523),o=n(30191)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},24505:(t,e,n)=>{var r=n(83155),i=n(34028),o=n(27357),a=n(78590),u=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return i(e)&&o(e.prototype,u(t))}},38640:(t,e,n)=>{var r=n(80391),i=n(49425),o=n(52546),a=n(84160),u=n(92882),s=n(84117),c=n(27357),d=n(32057),l=n(6897),f=n(94681),p=TypeError,h=function(t,e){this.stopped=t,this.result=e},y=h.prototype;t.exports=function(t,e,n){var m,v,g,_,b,S,w,C=n&&n.that,E=!(!n||!n.AS_ENTRIES),I=!(!n||!n.IS_RECORD),P=!(!n||!n.IS_ITERATOR),A=!(!n||!n.INTERRUPTED),O=r(e,C),T=function(t){return m&&f(m,"normal",t),new h(!0,t)},x=function(t){return E?(o(t),A?O(t[0],t[1],T):O(t[0],t[1])):A?O(t,T):O(t)};if(I)m=t.iterator;else if(P)m=t;else{if(!(v=l(t)))throw p(a(t)+" is not iterable");if(u(v)){for(g=0,_=s(t);_>g;g++)if((b=x(t[g]))&&c(y,b))return b;return new h(!1)}m=d(t,v)}for(S=I?t.next:m.next;!(w=i(S,m)).done;){try{b=x(w.value)}catch(t){f(m,"throw",t)}if("object"==typeof b&&b&&c(y,b))return b}return new h(!1)}},94681:(t,e,n)=>{var r=n(49425),i=n(52546),o=n(34040);t.exports=function(t,e,n){var a,u;i(t);try{if(!(a=o(t,"return"))){if("throw"===e)throw n;return n}a=r(a,t)}catch(t){u=!0,a=t}if("throw"===e)throw n;if(u)throw a;return i(a),n}},92480:(t,e,n)=>{"use strict";var r=n(10798).IteratorPrototype,i=n(13250),o=n(71111),a=n(27747),u=n(13766),s=function(){return this};t.exports=function(t,e,n,c){var d=e+" Iterator";return t.prototype=i(r,{next:o(+!c,n)}),a(t,d,!1,!0),u[d]=s,t}},53338:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(68546),a=n(27765),u=n(34028),s=n(92480),c=n(75783),d=n(25466),l=n(27747),f=n(22775),p=n(43068),h=n(30191),y=n(13766),m=n(10798),v=a.PROPER,g=a.CONFIGURABLE,_=m.IteratorPrototype,b=m.BUGGY_SAFARI_ITERATORS,S=h("iterator"),w="keys",C="values",E="entries",I=function(){return this};t.exports=function(t,e,n,a,h,m,P){s(n,e,a);var A,O,T,x=function(t){if(t===h&&D)return D;if(!b&&t in M)return M[t];switch(t){case w:case C:case E:return function(){return new n(this,t)}}return function(){return new n(this)}},R=e+" Iterator",k=!1,M=t.prototype,N=M[S]||M["@@iterator"]||h&&M[h],D=!b&&N||x(h),L="Array"==e&&M.entries||N;if(L&&(A=c(L.call(new t)))!==Object.prototype&&A.next&&(o||c(A)===_||(d?d(A,_):u(A[S])||p(A,S,I)),l(A,R,!0,!0),o&&(y[R]=I)),v&&h==C&&N&&N.name!==C&&(!o&&g?f(M,"name",C):(k=!0,D=function(){return i(N,this)})),h)if(O={values:x(C),keys:m?D:x(w),entries:x(E)},P)for(T in O)(b||k||!(T in M))&&p(M,T,O[T]);else r({target:e,proto:!0,forced:b||k},O);return o&&!P||M[S]===D||p(M,S,D,{name:h}),y[e]=D,O}},10798:(t,e,n)=>{"use strict";var r,i,o,a=n(38986),u=n(34028),s=n(51355),c=n(13250),d=n(75783),l=n(43068),f=n(30191),p=n(68546),h=f("iterator"),y=!1;[].keys&&("next"in(o=[].keys())?(i=d(d(o)))!==Object.prototype&&(r=i):y=!0),!s(r)||a((function(){var t={};return r[h].call(t)!==t}))?r={}:p&&(r=c(r)),u(r[h])||l(r,h,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:y}},13766:t=>{t.exports={}},84117:(t,e,n)=>{var r=n(9375);t.exports=function(t){return r(t.length)}},43608:(t,e,n)=>{var r=n(38986),i=n(34028),o=n(98511),a=n(12115),u=n(27765).CONFIGURABLE,s=n(46169),c=n(78045),d=c.enforce,l=c.get,f=Object.defineProperty,p=a&&!r((function(){return 8!==f((function(){}),"length",{value:8}).length})),h=String(String).split("String"),y=t.exports=function(t,e,n){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!o(t,"name")||u&&t.name!==e)&&(a?f(t,"name",{value:e,configurable:!0}):t.name=e),p&&n&&o(n,"arity")&&t.length!==n.arity&&f(t,"length",{value:n.arity});try{n&&o(n,"constructor")&&n.constructor?a&&f(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var r=d(t);return o(r,"source")||(r.source=h.join("string"==typeof e?e:"")),t};Function.prototype.toString=y((function(){return i(this)&&l(this).source||s(this)}),"toString")},39309:t=>{var e=Math.ceil,n=Math.floor;t.exports=Math.trunc||function(t){var r=+t;return(r>0?n:e)(r)}},76173:(t,e,n)=>{var r,i,o,a,u,s,c,d,l=n(32022),f=n(80391),p=n(66213).f,h=n(16416).set,y=n(649),m=n(88525),v=n(52054),g=n(79456),_=l.MutationObserver||l.WebKitMutationObserver,b=l.document,S=l.process,w=l.Promise,C=p(l,"queueMicrotask"),E=C&&C.value;E||(r=function(){var t,e;for(g&&(t=S.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?a():o=void 0,t}}o=void 0,t&&t.enter()},y||g||v||!_||!b?!m&&w&&w.resolve?((c=w.resolve(void 0)).constructor=w,d=f(c.then,c),a=function(){d(r)}):g?a=function(){S.nextTick(r)}:(h=f(h,l),a=function(){h(r)}):(u=!0,s=b.createTextNode(""),new _(r).observe(s,{characterData:!0}),a=function(){s.data=u=!u})),t.exports=E||function(t){var e={fn:t,next:void 0};o&&(o.next=e),i||(i=e,a()),o=e}},67892:(t,e,n)=>{"use strict";var r=n(86173),i=TypeError,o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw i("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},17911:(t,e,n)=>{var r=n(91035),i=TypeError;t.exports=function(t){if(r(t))throw i("The method doesn't accept regular expressions");return t}},57017:(t,e,n)=>{var r=n(32022),i=n(38986),o=n(59913),a=n(74170),u=n(76109).trim,s=n(60812),c=o("".charAt),d=r.parseFloat,l=r.Symbol,f=l&&l.iterator,p=1/d(s+"-0")!=-1/0||f&&!i((function(){d(Object(f))}));t.exports=p?function(t){var e=u(a(t)),n=d(e);return 0===n&&"-"==c(e,0)?-0:n}:d},84475:(t,e,n)=>{var r=n(32022),i=n(38986),o=n(59913),a=n(74170),u=n(76109).trim,s=n(60812),c=r.parseInt,d=r.Symbol,l=d&&d.iterator,f=/^[+-]?0x/i,p=o(f.exec),h=8!==c(s+"08")||22!==c(s+"0x16")||l&&!i((function(){c(Object(l))}));t.exports=h?function(t,e){var n=u(a(t));return c(n,e>>>0||(p(f,n)?16:10))}:c},86851:(t,e,n)=>{"use strict";var r=n(12115),i=n(59913),o=n(49425),a=n(38986),u=n(95932),s=n(31711),c=n(23659),d=n(47137),l=n(94032),f=Object.assign,p=Object.defineProperty,h=i([].concat);t.exports=!f||a((function(){if(r&&1!==f({b:1},f(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach((function(t){e[t]=t})),7!=f({},t)[n]||u(f({},e)).join("")!=i}))?function(t,e){for(var n=d(t),i=arguments.length,a=1,f=s.f,p=c.f;i>a;)for(var y,m=l(arguments[a++]),v=f?h(u(m),f(m)):u(m),g=v.length,_=0;g>_;)y=v[_++],r&&!o(p,m,y)||(n[y]=m[y]);return n}:f},13250:(t,e,n)=>{var r,i=n(52546),o=n(13330),a=n(26100),u=n(17307),s=n(86419),c=n(82985),d=n(57186),l="prototype",f="script",p=d("IE_PROTO"),h=function(){},y=function(t){return"<"+f+">"+t+""},m=function(t){t.write(y("")),t.close();var e=t.parentWindow.Object;return t=null,e},v=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}var t,e,n;v="undefined"!=typeof document?document.domain&&r?m(r):(e=c("iframe"),n="java"+f+":",e.style.display="none",s.appendChild(e),e.src=String(n),(t=e.contentWindow.document).open(),t.write(y("document.F=Object")),t.close(),t.F):m(r);for(var i=a.length;i--;)delete v[l][a[i]];return v()};u[p]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h[l]=i(t),n=new h,h[l]=null,n[p]=t):n=v(),void 0===e?n:o.f(n,e)}},13330:(t,e,n)=>{var r=n(12115),i=n(71330),o=n(43087),a=n(52546),u=n(58326),s=n(95932);e.f=r&&!i?Object.defineProperties:function(t,e){a(t);for(var n,r=u(e),i=s(e),c=i.length,d=0;c>d;)o.f(t,n=i[d++],r[n]);return t}},43087:(t,e,n)=>{var r=n(12115),i=n(2159),o=n(71330),a=n(52546),u=n(79127),s=TypeError,c=Object.defineProperty,d=Object.getOwnPropertyDescriptor,l="enumerable",f="configurable",p="writable";e.f=r?o?function(t,e,n){if(a(t),e=u(e),a(n),"function"==typeof t&&"prototype"===e&&"value"in n&&p in n&&!n[p]){var r=d(t,e);r&&r[p]&&(t[e]=n.value,n={configurable:f in n?n[f]:r[f],enumerable:l in n?n[l]:r[l],writable:!1})}return c(t,e,n)}:c:function(t,e,n){if(a(t),e=u(e),a(n),i)try{return c(t,e,n)}catch(t){}if("get"in n||"set"in n)throw s("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},66213:(t,e,n)=>{var r=n(12115),i=n(49425),o=n(23659),a=n(71111),u=n(58326),s=n(79127),c=n(98511),d=n(2159),l=Object.getOwnPropertyDescriptor;e.f=r?l:function(t,e){if(t=u(t),e=s(e),d)try{return l(t,e)}catch(t){}if(c(t,e))return a(!i(o.f,t,e),t[e])}},12098:(t,e,n)=>{var r=n(39523),i=n(58326),o=n(92775).f,a=n(42893),u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return u&&"Window"==r(t)?function(t){try{return o(t)}catch(t){return a(u)}}(t):o(i(t))}},92775:(t,e,n)=>{var r=n(7282),i=n(26100).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},31711:(t,e)=>{e.f=Object.getOwnPropertySymbols},75783:(t,e,n)=>{var r=n(98511),i=n(34028),o=n(47137),a=n(57186),u=n(88538),s=a("IE_PROTO"),c=Object,d=c.prototype;t.exports=u?c.getPrototypeOf:function(t){var e=o(t);if(r(e,s))return e[s];var n=e.constructor;return i(n)&&e instanceof n?n.prototype:e instanceof c?d:null}},62713:(t,e,n)=>{var r=n(38986),i=n(51355),o=n(39523),a=n(1743),u=Object.isExtensible,s=r((function(){u(1)}));t.exports=s||a?function(t){return!!i(t)&&(!a||"ArrayBuffer"!=o(t))&&(!u||u(t))}:u},27357:(t,e,n)=>{var r=n(59913);t.exports=r({}.isPrototypeOf)},7282:(t,e,n)=>{var r=n(59913),i=n(98511),o=n(58326),a=n(78035).indexOf,u=n(17307),s=r([].push);t.exports=function(t,e){var n,r=o(t),c=0,d=[];for(n in r)!i(u,n)&&i(r,n)&&s(d,n);for(;e.length>c;)i(r,n=e[c++])&&(~a(d,n)||s(d,n));return d}},95932:(t,e,n)=>{var r=n(7282),i=n(26100);t.exports=Object.keys||function(t){return r(t,i)}},23659:(t,e)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);e.f=i?function(t){var e=r(this,t);return!!e&&e.enumerable}:n},25466:(t,e,n)=>{var r=n(59913),i=n(52546),o=n(41684);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=r(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,r){return i(n),o(r),e?t(n,r):n.__proto__=r,n}}():void 0)},76389:(t,e,n)=>{var r=n(12115),i=n(59913),o=n(95932),a=n(58326),u=i(n(23659).f),s=i([].push),c=function(t){return function(e){for(var n,i=a(e),c=o(i),d=c.length,l=0,f=[];d>l;)n=c[l++],r&&!u(i,n)||s(f,t?[n,i[n]]:i[n]);return f}};t.exports={entries:c(!0),values:c(!1)}},75954:(t,e,n)=>{"use strict";var r=n(77568),i=n(82814);t.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},93126:(t,e,n)=>{var r=n(49425),i=n(34028),o=n(51355),a=TypeError;t.exports=function(t,e){var n,u;if("string"===e&&i(n=t.toString)&&!o(u=r(n,t)))return u;if(i(n=t.valueOf)&&!o(u=r(n,t)))return u;if("string"!==e&&i(n=t.toString)&&!o(u=r(n,t)))return u;throw a("Can't convert object to primitive value")}},91537:(t,e,n)=>{var r=n(83155),i=n(59913),o=n(92775),a=n(31711),u=n(52546),s=i([].concat);t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(u(t)),n=a.f;return n?s(e,n(t)):e}},23034:(t,e,n)=>{var r=n(32022);t.exports=r},25786:t=>{t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},93494:(t,e,n)=>{var r=n(32022),i=n(33183),o=n(34028),a=n(77987),u=n(46169),s=n(30191),c=n(85048),d=n(5835),l=n(68546),f=n(80714),p=i&&i.prototype,h=s("species"),y=!1,m=o(r.PromiseRejectionEvent),v=a("Promise",(function(){var t=u(i),e=t!==String(i);if(!e&&66===f)return!0;if(l&&(!p.catch||!p.finally))return!0;if(!f||f<51||!/native code/.test(t)){var n=new i((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))};if((n.constructor={})[h]=r,!(y=n.then((function(){}))instanceof r))return!0}return!e&&(c||d)&&!m}));t.exports={CONSTRUCTOR:v,REJECTION_EVENT:m,SUBCLASSING:y}},33183:(t,e,n)=>{var r=n(32022);t.exports=r.Promise},39062:(t,e,n)=>{var r=n(52546),i=n(51355),o=n(67892);t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t);return(0,n.resolve)(e),n.promise}},22208:(t,e,n)=>{var r=n(33183),i=n(41269),o=n(93494).CONSTRUCTOR;t.exports=o||!i((function(t){r.all(t).then(void 0,(function(){}))}))},83623:(t,e,n)=>{var r=n(43087).f;t.exports=function(t,e,n){n in t||r(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},97278:t=>{var e=function(){this.head=null,this.tail=null};e.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=e},70468:(t,e,n)=>{var r=n(49425),i=n(52546),o=n(34028),a=n(39523),u=n(83046),s=TypeError;t.exports=function(t,e){var n=t.exec;if(o(n)){var c=r(n,t,e);return null!==c&&i(c),c}if("RegExp"===a(t))return r(u,t,e);throw s("RegExp#exec called on incompatible receiver")}},83046:(t,e,n)=>{"use strict";var r,i,o=n(49425),a=n(59913),u=n(74170),s=n(60333),c=n(13917),d=n(27905),l=n(13250),f=n(78045).get,p=n(45969),h=n(25404),y=d("native-string-replace",String.prototype.replace),m=RegExp.prototype.exec,v=m,g=a("".charAt),_=a("".indexOf),b=a("".replace),S=a("".slice),w=(i=/b*/g,o(m,r=/a/,"a"),o(m,i,"a"),0!==r.lastIndex||0!==i.lastIndex),C=c.BROKEN_CARET,E=void 0!==/()??/.exec("")[1];(w||E||C||p||h)&&(v=function(t){var e,n,r,i,a,c,d,p=this,h=f(p),I=u(t),P=h.raw;if(P)return P.lastIndex=p.lastIndex,e=o(v,P,I),p.lastIndex=P.lastIndex,e;var A=h.groups,O=C&&p.sticky,T=o(s,p),x=p.source,R=0,k=I;if(O&&(T=b(T,"y",""),-1===_(T,"g")&&(T+="g"),k=S(I,p.lastIndex),p.lastIndex>0&&(!p.multiline||p.multiline&&"\n"!==g(I,p.lastIndex-1))&&(x="(?: "+x+")",k=" "+k,R++),n=new RegExp("^(?:"+x+")",T)),E&&(n=new RegExp("^"+x+"$(?!\\s)",T)),w&&(r=p.lastIndex),i=o(m,O?n:p,k),O?i?(i.input=S(i.input,R),i[0]=S(i[0],R),i.index=p.lastIndex,p.lastIndex+=i[0].length):p.lastIndex=0:w&&i&&(p.lastIndex=p.global?i.index+i[0].length:r),E&&i&&i.length>1&&o(y,i[0],n,(function(){for(a=1;a{"use strict";var r=n(52546);t.exports=function(){var t=r(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},79517:(t,e,n)=>{var r=n(49425),i=n(98511),o=n(27357),a=n(60333),u=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in u||i(t,"flags")||!o(u,t)?e:r(a,t)}},13917:(t,e,n)=>{var r=n(38986),i=n(32022).RegExp,o=r((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),a=o||r((function(){return!i("a","y").sticky})),u=o||r((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}));t.exports={BROKEN_CARET:u,MISSED_STICKY:a,UNSUPPORTED_Y:o}},45969:(t,e,n)=>{var r=n(38986),i=n(32022).RegExp;t.exports=r((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},25404:(t,e,n)=>{var r=n(38986),i=n(32022).RegExp;t.exports=r((function(){var t=i("(?b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$c")}))},31591:(t,e,n)=>{var r=n(87126),i=TypeError;t.exports=function(t){if(r(t))throw i("Can't call method on "+t);return t}},60528:t=>{t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},42343:(t,e,n)=>{"use strict";var r=n(83155),i=n(43087),o=n(30191),a=n(12115),u=o("species");t.exports=function(t){var e=r(t),n=i.f;a&&e&&!e[u]&&n(e,u,{configurable:!0,get:function(){return this}})}},27747:(t,e,n)=>{var r=n(43087).f,i=n(98511),o=n(30191)("toStringTag");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!i(t,o)&&r(t,o,{configurable:!0,value:e})}},57186:(t,e,n)=>{var r=n(27905),i=n(60232),o=r("keys");t.exports=function(t){return o[t]||(o[t]=i(t))}},43349:(t,e,n)=>{var r=n(32022),i=n(97210),o="__core-js_shared__",a=r[o]||i(o,{});t.exports=a},27905:(t,e,n)=>{var r=n(68546),i=n(43349);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.25.2",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.25.2/LICENSE",source:"https://github.com/zloirock/core-js"})},33820:(t,e,n)=>{var r=n(52546),i=n(52023),o=n(87126),a=n(30191)("species");t.exports=function(t,e){var n,u=r(t).constructor;return void 0===u||o(n=r(u)[a])?e:i(n)}},9120:(t,e,n)=>{var r=n(38986);t.exports=function(t){return r((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},58402:(t,e,n)=>{var r=n(59913),i=n(75982),o=n(74170),a=n(31591),u=r("".charAt),s=r("".charCodeAt),c=r("".slice),d=function(t){return function(e,n){var r,d,l=o(a(e)),f=i(n),p=l.length;return f<0||f>=p?t?"":void 0:(r=s(l,f))<55296||r>56319||f+1===p||(d=s(l,f+1))<56320||d>57343?t?u(l,f):r:t?c(l,f,f+2):d-56320+(r-55296<<10)+65536}};t.exports={codeAt:d(!1),charAt:d(!0)}},4465:(t,e,n)=>{var r=n(30727);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(r)},59015:(t,e,n)=>{var r=n(59913),i=n(9375),o=n(74170),a=n(48126),u=n(31591),s=r(a),c=r("".slice),d=Math.ceil,l=function(t){return function(e,n,r){var a,l,f=o(u(e)),p=i(n),h=f.length,y=void 0===r?" ":o(r);return p<=h||""==y?f:((l=s(y,d((a=p-h)/y.length))).length>a&&(l=c(l,0,a)),t?f+l:l+f)}};t.exports={start:l(!1),end:l(!0)}},48126:(t,e,n)=>{"use strict";var r=n(75982),i=n(74170),o=n(31591),a=RangeError;t.exports=function(t){var e=i(o(this)),n="",u=r(t);if(u<0||u==1/0)throw a("Wrong number of repetitions");for(;u>0;(u>>>=1)&&(e+=e))1&u&&(n+=e);return n}},9334:(t,e,n)=>{"use strict";var r=n(76109).end,i=n(41017);t.exports=i("trimEnd")?function(){return r(this)}:"".trimEnd},41017:(t,e,n)=>{var r=n(27765).PROPER,i=n(38986),o=n(60812);t.exports=function(t){return i((function(){return!!o[t]()||"​…᠎"!=="​…᠎"[t]()||r&&o[t].name!==t}))}},97746:(t,e,n)=>{"use strict";var r=n(76109).start,i=n(41017);t.exports=i("trimStart")?function(){return r(this)}:"".trimStart},76109:(t,e,n)=>{var r=n(59913),i=n(31591),o=n(74170),a=n(60812),u=r("".replace),s="["+a+"]",c=RegExp("^"+s+s+"*"),d=RegExp(s+s+"*$"),l=function(t){return function(e){var n=o(i(e));return 1&t&&(n=u(n,c,"")),2&t&&(n=u(n,d,"")),n}};t.exports={start:l(1),end:l(2),trim:l(3)}},86263:(t,e,n)=>{var r=n(80714),i=n(38986);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},47498:(t,e,n)=>{var r=n(49425),i=n(83155),o=n(30191),a=n(43068);t.exports=function(){var t=i("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,u=o("toPrimitive");e&&!e[u]&&a(e,u,(function(t){return r(n,this)}),{arity:1})}},55666:(t,e,n)=>{var r=n(86263);t.exports=r&&!!Symbol.for&&!!Symbol.keyFor},16416:(t,e,n)=>{var r,i,o,a,u=n(32022),s=n(10584),c=n(80391),d=n(34028),l=n(98511),f=n(38986),p=n(86419),h=n(23141),y=n(82985),m=n(24246),v=n(649),g=n(79456),_=u.setImmediate,b=u.clearImmediate,S=u.process,w=u.Dispatch,C=u.Function,E=u.MessageChannel,I=u.String,P=0,A={},O="onreadystatechange";try{r=u.location}catch(t){}var T=function(t){if(l(A,t)){var e=A[t];delete A[t],e()}},x=function(t){return function(){T(t)}},R=function(t){T(t.data)},k=function(t){u.postMessage(I(t),r.protocol+"//"+r.host)};_&&b||(_=function(t){m(arguments.length,1);var e=d(t)?t:C(t),n=h(arguments,1);return A[++P]=function(){s(e,void 0,n)},i(P),P},b=function(t){delete A[t]},g?i=function(t){S.nextTick(x(t))}:w&&w.now?i=function(t){w.now(x(t))}:E&&!v?(a=(o=new E).port2,o.port1.onmessage=R,i=c(a.postMessage,a)):u.addEventListener&&d(u.postMessage)&&!u.importScripts&&r&&"file:"!==r.protocol&&!f(k)?(i=k,u.addEventListener("message",R,!1)):i=O in y("script")?function(t){p.appendChild(y("script"))[O]=function(){p.removeChild(this),T(t)}}:function(t){setTimeout(x(t),0)}),t.exports={set:_,clear:b}},10829:(t,e,n)=>{var r=n(59913);t.exports=r(1..valueOf)},86593:(t,e,n)=>{var r=n(75982),i=Math.max,o=Math.min;t.exports=function(t,e){var n=r(t);return n<0?i(n+e,0):o(n,e)}},91173:(t,e,n)=>{var r=n(75982),i=n(9375),o=RangeError;t.exports=function(t){if(void 0===t)return 0;var e=r(t),n=i(e);if(e!==n)throw o("Wrong length or index");return n}},58326:(t,e,n)=>{var r=n(94032),i=n(31591);t.exports=function(t){return r(i(t))}},75982:(t,e,n)=>{var r=n(39309);t.exports=function(t){var e=+t;return e!=e||0===e?0:r(e)}},9375:(t,e,n)=>{var r=n(75982),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},47137:(t,e,n)=>{var r=n(31591),i=Object;t.exports=function(t){return i(r(t))}},99127:(t,e,n)=>{var r=n(49425),i=n(51355),o=n(24505),a=n(34040),u=n(93126),s=n(30191),c=TypeError,d=s("toPrimitive");t.exports=function(t,e){if(!i(t)||o(t))return t;var n,s=a(t,d);if(s){if(void 0===e&&(e="default"),n=r(s,t,e),!i(n)||o(n))return n;throw c("Can't convert object to primitive value")}return void 0===e&&(e="number"),u(t,e)}},79127:(t,e,n)=>{var r=n(99127),i=n(24505);t.exports=function(t){var e=r(t,"string");return i(e)?e:e+""}},77568:(t,e,n)=>{var r={};r[n(30191)("toStringTag")]="z",t.exports="[object z]"===String(r)},74170:(t,e,n)=>{var r=n(82814),i=String;t.exports=function(t){if("Symbol"===r(t))throw TypeError("Cannot convert a Symbol value to a string");return i(t)}},84160:t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},60232:(t,e,n)=>{var r=n(59913),i=0,o=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++i+o,36)}},78590:(t,e,n)=>{var r=n(86263);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},71330:(t,e,n)=>{var r=n(12115),i=n(38986);t.exports=r&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},24246:t=>{var e=TypeError;t.exports=function(t,n){if(t{var r=n(32022),i=n(34028),o=r.WeakMap;t.exports=i(o)&&/native code/.test(String(o))},91165:(t,e,n)=>{var r=n(23034),i=n(98511),o=n(58855),a=n(43087).f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});i(e,t)||a(e,t,{value:o.f(t)})}},58855:(t,e,n)=>{var r=n(30191);e.f=r},30191:(t,e,n)=>{var r=n(32022),i=n(27905),o=n(98511),a=n(60232),u=n(86263),s=n(78590),c=i("wks"),d=r.Symbol,l=d&&d.for,f=s?d:d&&d.withoutSetter||a;t.exports=function(t){if(!o(c,t)||!u&&"string"!=typeof c[t]){var e="Symbol."+t;u&&o(d,t)?c[t]=d[t]:c[t]=s&&l?l(e):f(e)}return c[t]}},60812:t=>{t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},14459:(t,e,n)=>{"use strict";var r=n(54635),i=n(32022),o=n(65140),a=n(42343),u="ArrayBuffer",s=o[u];r({global:!0,constructor:!0,forced:i[u]!==s},{ArrayBuffer:s}),a(u)},75894:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(38986),a=n(65140),u=n(52546),s=n(86593),c=n(9375),d=n(33820),l=a.ArrayBuffer,f=a.DataView,p=f.prototype,h=i(l.prototype.slice),y=i(p.getUint8),m=i(p.setUint8);r({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:o((function(){return!new l(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(h&&void 0===e)return h(u(this),t);for(var n=u(this).byteLength,r=s(t,n),i=s(void 0===e?n:e,n),o=new(d(this,l))(c(i-r)),a=new f(this),p=new f(o),v=0;r{"use strict";var r=n(54635),i=n(38986),o=n(65351),a=n(51355),u=n(47137),s=n(84117),c=n(81912),d=n(19402),l=n(74842),f=n(41665),p=n(30191),h=n(80714),y=p("isConcatSpreadable"),m=h>=51||!i((function(){var t=[];return t[y]=!1,t.concat()[0]!==t})),v=f("concat"),g=function(t){if(!a(t))return!1;var e=t[y];return void 0!==e?!!e:o(t)};r({target:"Array",proto:!0,arity:1,forced:!m||!v},{concat:function(t){var e,n,r,i,o,a=u(this),f=l(a,0),p=0;for(e=-1,r=arguments.length;e{var r=n(54635),i=n(13750),o=n(47512);r({target:"Array",proto:!0},{fill:i}),o("fill")},51725:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).filter;r({target:"Array",proto:!0,forced:!n(41665)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},23143:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).findIndex,o=n(47512),a="findIndex",u=!0;a in[]&&Array(1)[a]((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o(a)},88342:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).find,o=n(47512),a="find",u=!0;a in[]&&Array(1)[a]((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o(a)},25036:(t,e,n)=>{"use strict";var r=n(54635),i=n(47484),o=n(86173),a=n(47137),u=n(84117),s=n(74842);r({target:"Array",proto:!0},{flatMap:function(t){var e,n=a(this),r=u(n);return o(t),(e=s(n,0)).length=i(e,n,n,r,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},95040:(t,e,n)=>{var r=n(54635),i=n(65375);r({target:"Array",stat:!0,forced:!n(41269)((function(t){Array.from(t)}))},{from:i})},5099:(t,e,n)=>{"use strict";var r=n(54635),i=n(78035).includes,o=n(38986),a=n(47512);r({target:"Array",proto:!0,forced:o((function(){return!Array(1).includes()}))},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),a("includes")},6550:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(78035).indexOf,a=n(94694),u=i([].indexOf),s=!!u&&1/u([1],1,-0)<0,c=a("indexOf");r({target:"Array",proto:!0,forced:s||!c},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return s?u(this,t,e)||0:o(this,t,e)}})},38490:(t,e,n)=>{"use strict";var r=n(58326),i=n(47512),o=n(13766),a=n(78045),u=n(43087).f,s=n(53338),c=n(80251),d=n(68546),l=n(12115),f="Array Iterator",p=a.set,h=a.getterFor(f);t.exports=s(Array,"Array",(function(t,e){p(this,{type:f,target:r(t),index:0,kind:e})}),(function(){var t=h(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,c(void 0,!0)):c("keys"==n?r:"values"==n?e[r]:[r,e[r]],!1)}),"values");var y=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!d&&l&&"values"!==y.name)try{u(y,"name",{value:"values"})}catch(t){}},64668:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(94032),a=n(58326),u=n(94694),s=i([].join),c=o!=Object,d=u("join",",");r({target:"Array",proto:!0,forced:c||!d},{join:function(t){return s(a(this),void 0===t?",":t)}})},74803:(t,e,n)=>{var r=n(54635),i=n(44687);r({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},95412:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).map;r({target:"Array",proto:!0,forced:!n(41665)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},72590:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(65351),a=i([].reverse),u=[1,2];r({target:"Array",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),a(this)}})},16516:(t,e,n)=>{"use strict";var r=n(54635),i=n(65351),o=n(78449),a=n(51355),u=n(86593),s=n(84117),c=n(58326),d=n(19402),l=n(30191),f=n(41665),p=n(23141),h=f("slice"),y=l("species"),m=Array,v=Math.max;r({target:"Array",proto:!0,forced:!h},{slice:function(t,e){var n,r,l,f=c(this),h=s(f),g=u(t,h),_=u(void 0===e?h:e,h);if(i(f)&&(n=f.constructor,(o(n)&&(n===m||i(n.prototype))||a(n)&&null===(n=n[y]))&&(n=void 0),n===m||void 0===n))return p(f,g,_);for(r=new(void 0===n?m:n)(v(_-g,0)),l=0;g<_;g++,l++)g in f&&d(r,l,f[g]);return r.length=l,r}})},2934:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(86173),a=n(47137),u=n(84117),s=n(39850),c=n(74170),d=n(38986),l=n(71929),f=n(94694),p=n(93454),h=n(88633),y=n(80714),m=n(10720),v=[],g=i(v.sort),_=i(v.push),b=d((function(){v.sort(void 0)})),S=d((function(){v.sort(null)})),w=f("sort"),C=!d((function(){if(y)return y<70;if(!(p&&p>3)){if(h)return!0;if(m)return m<603;var t,e,n,r,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)v.push({k:e+r,v:n})}for(v.sort((function(t,e){return e.v-t.v})),r=0;rc(n)?1:-1}}(t)),n=u(i),r=0;r{"use strict";var r=n(54635),i=n(47137),o=n(86593),a=n(75982),u=n(84117),s=n(17761),c=n(81912),d=n(74842),l=n(19402),f=n(39850),p=n(41665)("splice"),h=Math.max,y=Math.min;r({target:"Array",proto:!0,forced:!p},{splice:function(t,e){var n,r,p,m,v,g,_=i(this),b=u(_),S=o(t,b),w=arguments.length;for(0===w?n=r=0:1===w?(n=0,r=b-S):(n=w-2,r=y(h(a(e),0),b-S)),c(b+n-r),p=d(_,r),m=0;mb-r+n;m--)f(_,m-1)}else if(n>r)for(m=b-r;m>S;m--)g=m+n-1,(v=m+r-1)in _?_[g]=_[v]:f(_,g);for(m=0;m{n(47512)("flatMap")},16368:(t,e,n)=>{var r=n(98511),i=n(43068),o=n(68959),a=n(30191)("toPrimitive"),u=Date.prototype;r(u,a)||i(u,a,o)},34745:(t,e,n)=>{var r=n(12115),i=n(27765).EXISTS,o=n(59913),a=n(43087).f,u=Function.prototype,s=o(u.toString),c=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,d=o(c.exec);r&&!i&&a(u,"name",{configurable:!0,get:function(){try{return d(c,s(this))[1]}catch(t){return""}}})},55205:(t,e,n)=>{var r=n(54635),i=n(83155),o=n(10584),a=n(49425),u=n(59913),s=n(38986),c=n(65351),d=n(34028),l=n(51355),f=n(24505),p=n(23141),h=n(86263),y=i("JSON","stringify"),m=u(/./.exec),v=u("".charAt),g=u("".charCodeAt),_=u("".replace),b=u(1..toString),S=/[\uD800-\uDFFF]/g,w=/^[\uD800-\uDBFF]$/,C=/^[\uDC00-\uDFFF]$/,E=!h||s((function(){var t=i("Symbol")();return"[null]"!=y([t])||"{}"!=y({a:t})||"{}"!=y(Object(t))})),I=s((function(){return'"\\udf06\\ud834"'!==y("\udf06\ud834")||'"\\udead"'!==y("\udead")})),P=function(t,e){var n=p(arguments),r=e;if((l(e)||void 0!==t)&&!f(t))return c(e)||(e=function(t,e){if(d(r)&&(e=a(r,this,t,e)),!f(e))return e}),n[1]=e,o(y,null,n)},A=function(t,e,n){var r=v(n,e-1),i=v(n,e+1);return m(w,t)&&!m(C,i)||m(C,t)&&!m(w,r)?"\\u"+b(g(t,0),16):t};y&&r({target:"JSON",stat:!0,arity:3,forced:E||I},{stringify:function(t,e,n){var r=p(arguments),i=o(E?P:y,null,r);return I&&"string"==typeof i?_(i,S,A):i}})},3635:(t,e,n)=>{"use strict";n(69866)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(61961))},34897:(t,e,n)=>{n(3635)},99023:(t,e,n)=>{"use strict";var r=n(12115),i=n(32022),o=n(59913),a=n(77987),u=n(43068),s=n(98511),c=n(99618),d=n(27357),l=n(24505),f=n(99127),p=n(38986),h=n(92775).f,y=n(66213).f,m=n(43087).f,v=n(10829),g=n(76109).trim,_="Number",b=i[_],S=b.prototype,w=i.TypeError,C=o("".slice),E=o("".charCodeAt);if(a(_,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var I,P=function(t){var e=arguments.length<1?0:b(function(t){var e=f(t,"number");return"bigint"==typeof e?e:function(t){var e,n,r,i,o,a,u,s,c=f(t,"number");if(l(c))throw w("Cannot convert a Symbol value to a number");if("string"==typeof c&&c.length>2)if(c=g(c),43===(e=E(c,0))||45===e){if(88===(n=E(c,2))||120===n)return NaN}else if(48===e){switch(E(c,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+c}for(a=(o=C(c,2)).length,u=0;ui)return NaN;return parseInt(o,r)}return+c}(e)}(t)),n=this;return d(S,n)&&p((function(){v(n)}))?c(Object(e),n,P):e},A=r?h(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),O=0;A.length>O;O++)s(b,I=A[O])&&!s(P,I)&&m(P,I,y(b,I));P.prototype=S,S.constructor=P,u(i,_,P,{constructor:!0})}},80226:(t,e,n)=>{n(54635)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},21212:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(75982),a=n(10829),u=n(48126),s=n(38986),c=RangeError,d=String,l=Math.floor,f=i(u),p=i("".slice),h=i(1..toFixed),y=function(t,e,n){return 0===e?n:e%2==1?y(t,e-1,n*t):y(t*t,e/2,n)},m=function(t,e,n){for(var r=-1,i=n;++r<6;)i+=e*t[r],t[r]=i%1e7,i=l(i/1e7)},v=function(t,e){for(var n=6,r=0;--n>=0;)r+=t[n],t[n]=l(r/e),r=r%e*1e7},g=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var r=d(t[e]);n=""===n?r:n+f("0",7-r.length)+r}return n};r({target:"Number",proto:!0,forced:s((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!s((function(){h({})}))},{toFixed:function(t){var e,n,r,i,u=a(this),s=o(t),l=[0,0,0,0,0,0],h="",_="0";if(s<0||s>20)throw c("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return d(u);if(u<0&&(h="-",u=-u),u>1e-21)if(n=(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(u*y(2,69,1))-69)<0?u*y(2,-e,1):u/y(2,e,1),n*=4503599627370496,(e=52-e)>0){for(m(l,0,n),r=s;r>=7;)m(l,1e7,0),r-=7;for(m(l,y(10,r,1),0),r=e-1;r>=23;)v(l,1<<23),r-=23;v(l,1<0?h+((i=_.length)<=s?"0."+f("0",s-i)+_:p(_,0,i-s)+"."+p(_,i-s)):h+_}})},27835:(t,e,n)=>{var r=n(54635),i=n(86851);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},64701:(t,e,n)=>{var r=n(54635),i=n(76389).entries;r({target:"Object",stat:!0},{entries:function(t){return i(t)}})},33409:(t,e,n)=>{var r=n(54635),i=n(6769),o=n(38986),a=n(51355),u=n(67023).onFreeze,s=Object.freeze;r({target:"Object",stat:!0,forced:o((function(){s(1)})),sham:!i},{freeze:function(t){return s&&a(t)?s(u(t)):t}})},19926:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(58326),a=n(66213).f,u=n(12115),s=i((function(){a(1)}));r({target:"Object",stat:!0,forced:!u||s,sham:!u},{getOwnPropertyDescriptor:function(t,e){return a(o(t),e)}})},60678:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(12098).f;r({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:o})},17524:(t,e,n)=>{var r=n(54635),i=n(86263),o=n(38986),a=n(31711),u=n(47137);r({target:"Object",stat:!0,forced:!i||o((function(){a.f(1)}))},{getOwnPropertySymbols:function(t){var e=a.f;return e?e(u(t)):[]}})},71582:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(47137),a=n(75783),u=n(88538);r({target:"Object",stat:!0,forced:i((function(){a(1)})),sham:!u},{getPrototypeOf:function(t){return a(o(t))}})},97814:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(51355),a=n(39523),u=n(1743),s=Object.isFrozen;r({target:"Object",stat:!0,forced:i((function(){s(1)}))||u},{isFrozen:function(t){return!o(t)||!(!u||"ArrayBuffer"!=a(t))||!!s&&s(t)}})},13722:(t,e,n)=>{var r=n(54635),i=n(47137),o=n(95932);r({target:"Object",stat:!0,forced:n(38986)((function(){o(1)}))},{keys:function(t){return o(i(t))}})},28101:(t,e,n)=>{n(54635)({target:"Object",stat:!0},{setPrototypeOf:n(25466)})},40737:(t,e,n)=>{var r=n(77568),i=n(43068),o=n(75954);r||i(Object.prototype,"toString",o,{unsafe:!0})},83681:(t,e,n)=>{var r=n(54635),i=n(57017);r({global:!0,forced:parseFloat!=i},{parseFloat:i})},50633:(t,e,n)=>{var r=n(54635),i=n(84475);r({global:!0,forced:parseInt!=i},{parseInt:i})},47197:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(86173),a=n(67892),u=n(25786),s=n(38640);r({target:"Promise",stat:!0,forced:n(22208)},{all:function(t){var e=this,n=a.f(e),r=n.resolve,c=n.reject,d=u((function(){var n=o(e.resolve),a=[],u=0,d=1;s(t,(function(t){var o=u++,s=!1;d++,i(n,e,t).then((function(t){s||(s=!0,a[o]=t,--d||r(a))}),c)})),--d||r(a)}));return d.error&&c(d.value),n.promise}})},41395:(t,e,n)=>{"use strict";var r=n(54635),i=n(68546),o=n(93494).CONSTRUCTOR,a=n(33183),u=n(83155),s=n(34028),c=n(43068),d=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&s(a)){var l=u("Promise").prototype.catch;d.catch!==l&&c(d,"catch",l,{unsafe:!0})}},59761:(t,e,n)=>{"use strict";var r,i,o,a=n(54635),u=n(68546),s=n(79456),c=n(32022),d=n(49425),l=n(43068),f=n(25466),p=n(27747),h=n(42343),y=n(86173),m=n(34028),v=n(51355),g=n(39837),_=n(33820),b=n(16416).set,S=n(76173),w=n(39361),C=n(25786),E=n(97278),I=n(78045),P=n(33183),A=n(93494),O=n(67892),T="Promise",x=A.CONSTRUCTOR,R=A.REJECTION_EVENT,k=A.SUBCLASSING,M=I.getterFor(T),N=I.set,D=P&&P.prototype,L=P,z=D,j=c.TypeError,U=c.document,F=c.process,q=O.f,B=q,G=!!(U&&U.createEvent&&c.dispatchEvent),V="unhandledrejection",Y=function(t){var e;return!(!v(t)||!m(e=t.then))&&e},H=function(t,e){var n,r,i,o=e.value,a=1==e.state,u=a?t.ok:t.fail,s=t.resolve,c=t.reject,l=t.domain;try{u?(a||(2===e.rejection&&J(e),e.rejection=1),!0===u?n=o:(l&&l.enter(),n=u(o),l&&(l.exit(),i=!0)),n===t.promise?c(j("Promise-chain cycle")):(r=Y(n))?d(r,n,s,c):s(n)):c(o)}catch(t){l&&!i&&l.exit(),c(t)}},W=function(t,e){t.notified||(t.notified=!0,S((function(){for(var n,r=t.reactions;n=r.get();)H(n,t);t.notified=!1,e&&!t.rejection&&Z(t)})))},K=function(t,e,n){var r,i;G?((r=U.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),c.dispatchEvent(r)):r={promise:e,reason:n},!R&&(i=c["on"+t])?i(r):t===V&&w("Unhandled promise rejection",n)},Z=function(t){d(b,c,(function(){var e,n=t.facade,r=t.value;if($(t)&&(e=C((function(){s?F.emit("unhandledRejection",r,n):K(V,n,r)})),t.rejection=s||$(t)?2:1,e.error))throw e.value}))},$=function(t){return 1!==t.rejection&&!t.parent},J=function(t){d(b,c,(function(){var e=t.facade;s?F.emit("rejectionHandled",e):K("rejectionhandled",e,t.value)}))},Q=function(t,e,n){return function(r){t(e,r,n)}},X=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,W(t,!0))},tt=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw j("Promise can't be resolved itself");var r=Y(e);r?S((function(){var n={done:!1};try{d(r,e,Q(tt,n,t),Q(X,n,t))}catch(e){X(n,e,t)}})):(t.value=e,t.state=1,W(t,!1))}catch(e){X({done:!1},e,t)}}};if(x&&(z=(L=function(t){g(this,z),y(t),d(r,this);var e=M(this);try{t(Q(tt,e),Q(X,e))}catch(t){X(e,t)}}).prototype,(r=function(t){N(this,{type:T,done:!1,notified:!1,parent:!1,reactions:new E,rejection:!1,state:0,value:void 0})}).prototype=l(z,"then",(function(t,e){var n=M(this),r=q(_(this,L));return n.parent=!0,r.ok=!m(t)||t,r.fail=m(e)&&e,r.domain=s?F.domain:void 0,0==n.state?n.reactions.add(r):S((function(){H(r,n)})),r.promise})),i=function(){var t=new r,e=M(t);this.promise=t,this.resolve=Q(tt,e),this.reject=Q(X,e)},O.f=q=function(t){return t===L||void 0===t?new i(t):B(t)},!u&&m(P)&&D!==Object.prototype)){o=D.then,k||l(D,"then",(function(t,e){var n=this;return new L((function(t,e){d(o,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete D.constructor}catch(t){}f&&f(D,z)}a({global:!0,constructor:!0,wrap:!0,forced:x},{Promise:L}),p(L,T,!1,!0),h(T)},83823:(t,e,n)=>{n(59761),n(47197),n(41395),n(99790),n(38777),n(79244)},99790:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(86173),a=n(67892),u=n(25786),s=n(38640);r({target:"Promise",stat:!0,forced:n(22208)},{race:function(t){var e=this,n=a.f(e),r=n.reject,c=u((function(){var a=o(e.resolve);s(t,(function(t){i(a,e,t).then(n.resolve,r)}))}));return c.error&&r(c.value),n.promise}})},38777:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(67892);r({target:"Promise",stat:!0,forced:n(93494).CONSTRUCTOR},{reject:function(t){var e=o.f(this);return i(e.reject,void 0,t),e.promise}})},79244:(t,e,n)=>{"use strict";var r=n(54635),i=n(83155),o=n(68546),a=n(33183),u=n(93494).CONSTRUCTOR,s=n(39062),c=i("Promise"),d=o&&!u;r({target:"Promise",stat:!0,forced:o||u},{resolve:function(t){return s(d&&this===c?a:this,t)}})},84868:(t,e,n)=>{var r=n(12115),i=n(32022),o=n(59913),a=n(77987),u=n(99618),s=n(22775),c=n(92775).f,d=n(27357),l=n(91035),f=n(74170),p=n(79517),h=n(13917),y=n(83623),m=n(43068),v=n(38986),g=n(98511),_=n(78045).enforce,b=n(42343),S=n(30191),w=n(45969),C=n(25404),E=S("match"),I=i.RegExp,P=I.prototype,A=i.SyntaxError,O=o(P.exec),T=o("".charAt),x=o("".replace),R=o("".indexOf),k=o("".slice),M=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,N=/a/g,D=/a/g,L=new I(N)!==N,z=h.MISSED_STICKY,j=h.UNSUPPORTED_Y;if(a("RegExp",r&&(!L||z||w||C||v((function(){return D[E]=!1,I(N)!=N||I(D)==D||"/a/i"!=I(N,"i")}))))){for(var U=function(t,e){var n,r,i,o,a,c,h=d(P,this),y=l(t),m=void 0===e,v=[],b=t;if(!h&&y&&m&&t.constructor===U)return t;if((y||d(P,t))&&(t=t.source,m&&(e=p(b))),t=void 0===t?"":f(t),e=void 0===e?"":f(e),b=t,w&&"dotAll"in N&&(r=!!e&&R(e,"s")>-1)&&(e=x(e,/s/g,"")),n=e,z&&"sticky"in N&&(i=!!e&&R(e,"y")>-1)&&j&&(e=x(e,/y/g,"")),C&&(o=function(t){for(var e,n=t.length,r=0,i="",o=[],a={},u=!1,s=!1,c=0,d="";r<=n;r++){if("\\"===(e=T(t,r)))e+=T(t,++r);else if("]"===e)u=!1;else if(!u)switch(!0){case"["===e:u=!0;break;case"("===e:O(M,k(t,r+1))&&(r+=2,s=!0),i+=e,c++;continue;case">"===e&&s:if(""===d||g(a,d))throw new A("Invalid capture group name");a[d]=!0,o[o.length]=[d,c],s=!1,d="";continue}s?d+=e:i+=e}return[i,o]}(t),t=o[0],v=o[1]),a=u(I(t,e),h?this:P,U),(r||i||v.length)&&(c=_(a),r&&(c.dotAll=!0,c.raw=U(function(t){for(var e,n=t.length,r=0,i="",o=!1;r<=n;r++)"\\"!==(e=T(t,r))?o||"."!==e?("["===e?o=!0:"]"===e&&(o=!1),i+=e):i+="[\\s\\S]":i+=e+T(t,++r);return i}(t),n)),i&&(c.sticky=!0),v.length&&(c.groups=v)),t!==b)try{s(a,"source",""===b?"(?:)":b)}catch(t){}return a},F=c(I),q=0;F.length>q;)y(U,I,F[q++]);P.constructor=U,U.prototype=P,m(i,"RegExp",U,{constructor:!0})}b("RegExp")},49636:(t,e,n)=>{"use strict";var r=n(54635),i=n(83046);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},26667:(t,e,n)=>{"use strict";var r=n(27765).PROPER,i=n(43068),o=n(52546),a=n(74170),u=n(38986),s=n(79517),c="toString",d=RegExp.prototype[c],l=u((function(){return"/a/b"!=d.call({source:"a",flags:"b"})})),f=r&&d.name!=c;(l||f)&&i(RegExp.prototype,c,(function(){var t=o(this);return"/"+a(t.source)+"/"+a(s(t))}),{unsafe:!0})},1386:(t,e,n)=>{"use strict";n(69866)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(61961))},98351:(t,e,n)=>{n(1386)},51996:(t,e,n)=>{"use strict";var r,i=n(54635),o=n(59913),a=n(66213).f,u=n(9375),s=n(74170),c=n(17911),d=n(31591),l=n(41813),f=n(68546),p=o("".endsWith),h=o("".slice),y=Math.min,m=l("endsWith");i({target:"String",proto:!0,forced:!(!f&&!m&&(r=a(String.prototype,"endsWith"),r&&!r.writable)||m)},{endsWith:function(t){var e=s(d(this));c(t);var n=arguments.length>1?arguments[1]:void 0,r=e.length,i=void 0===n?r:y(u(n),r),o=s(t);return p?p(e,o,i):h(e,i-o.length,i)===o}})},74035:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(17911),a=n(31591),u=n(74170),s=n(41813),c=i("".indexOf);r({target:"String",proto:!0,forced:!s("includes")},{includes:function(t){return!!~c(u(a(this)),u(o(t)),arguments.length>1?arguments[1]:void 0)}})},10951:(t,e,n)=>{"use strict";var r=n(58402).charAt,i=n(74170),o=n(78045),a=n(53338),u=n(80251),s="String Iterator",c=o.set,d=o.getterFor(s);a(String,"String",(function(t){c(this,{type:s,string:i(t),index:0})}),(function(){var t,e=d(this),n=e.string,i=e.index;return i>=n.length?u(void 0,!0):(t=r(n,i),e.index+=t.length,u(t,!1))}))},88720:(t,e,n)=>{"use strict";var r=n(54635),i=n(89444);r({target:"String",proto:!0,forced:n(9120)("link")},{link:function(t){return i(this,"a","href",t)}})},15483:(t,e,n)=>{"use strict";var r=n(49425),i=n(26210),o=n(52546),a=n(87126),u=n(9375),s=n(74170),c=n(31591),d=n(34040),l=n(75527),f=n(70468);i("match",(function(t,e,n){return[function(e){var n=c(this),i=a(e)?void 0:d(e,t);return i?r(i,e,n):new RegExp(e)[t](s(n))},function(t){var r=o(this),i=s(t),a=n(e,r,i);if(a.done)return a.value;if(!r.global)return f(r,i);var c=r.unicode;r.lastIndex=0;for(var d,p=[],h=0;null!==(d=f(r,i));){var y=s(d[0]);p[h]=y,""===y&&(r.lastIndex=l(i,u(r.lastIndex),c)),h++}return 0===h?null:p}]}))},40550:(t,e,n)=>{"use strict";var r=n(54635),i=n(59015).end;r({target:"String",proto:!0,forced:n(4465)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},79963:(t,e,n)=>{"use strict";var r=n(54635),i=n(59015).start;r({target:"String",proto:!0,forced:n(4465)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},41267:(t,e,n)=>{n(54635)({target:"String",proto:!0},{repeat:n(48126)})},58443:(t,e,n)=>{"use strict";var r=n(10584),i=n(49425),o=n(59913),a=n(26210),u=n(38986),s=n(52546),c=n(34028),d=n(87126),l=n(75982),f=n(9375),p=n(74170),h=n(31591),y=n(75527),m=n(34040),v=n(82319),g=n(70468),_=n(30191)("replace"),b=Math.max,S=Math.min,w=o([].concat),C=o([].push),E=o("".indexOf),I=o("".slice),P="$0"==="a".replace(/./,"$0"),A=!!/./[_]&&""===/./[_]("a","$0");a("replace",(function(t,e,n){var o=A?"$":"$0";return[function(t,n){var r=h(this),o=d(t)?void 0:m(t,_);return o?i(o,t,r,n):i(e,p(r),t,n)},function(t,i){var a=s(this),u=p(t);if("string"==typeof i&&-1===E(i,o)&&-1===E(i,"$<")){var d=n(e,a,u,i);if(d.done)return d.value}var h=c(i);h||(i=p(i));var m=a.global;if(m){var _=a.unicode;a.lastIndex=0}for(var P=[];;){var A=g(a,u);if(null===A)break;if(C(P,A),!m)break;""===p(A[0])&&(a.lastIndex=y(u,f(a.lastIndex),_))}for(var O,T="",x=0,R=0;R=x&&(T+=I(u,x,M)+j,x=M+k.length)}return T+I(u,x)}]}),!!u((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}))||!P||A)},57347:(t,e,n)=>{"use strict";var r=n(49425),i=n(26210),o=n(52546),a=n(87126),u=n(31591),s=n(60528),c=n(74170),d=n(34040),l=n(70468);i("search",(function(t,e,n){return[function(e){var n=u(this),i=a(e)?void 0:d(e,t);return i?r(i,e,n):new RegExp(e)[t](c(n))},function(t){var r=o(this),i=c(t),a=n(e,r,i);if(a.done)return a.value;var u=r.lastIndex;s(u,0)||(r.lastIndex=0);var d=l(r,i);return s(r.lastIndex,u)||(r.lastIndex=u),null===d?-1:d.index}]}))},34500:(t,e,n)=>{"use strict";var r=n(10584),i=n(49425),o=n(59913),a=n(26210),u=n(52546),s=n(87126),c=n(91035),d=n(31591),l=n(33820),f=n(75527),p=n(9375),h=n(74170),y=n(34040),m=n(42893),v=n(70468),g=n(83046),_=n(13917),b=n(38986),S=_.UNSUPPORTED_Y,w=4294967295,C=Math.min,E=[].push,I=o(/./.exec),P=o(E),A=o("".slice);a("split",(function(t,e,n){var o;return o="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var o=h(d(this)),a=void 0===n?w:n>>>0;if(0===a)return[];if(void 0===t)return[o];if(!c(t))return i(e,o,t,a);for(var u,s,l,f=[],p=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),y=0,v=new RegExp(t.source,p+"g");(u=i(g,v,o))&&!((s=v.lastIndex)>y&&(P(f,A(o,y,u.index)),u.length>1&&u.index=a));)v.lastIndex===u.index&&v.lastIndex++;return y===o.length?!l&&I(v,"")||P(f,""):P(f,A(o,y)),f.length>a?m(f,0,a):f}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i(e,this,t,n)}:e,[function(e,n){var r=d(this),a=s(e)?void 0:y(e,t);return a?i(a,e,r,n):i(o,h(r),e,n)},function(t,r){var i=u(this),a=h(t),s=n(o,i,a,r,o!==e);if(s.done)return s.value;var c=l(i,RegExp),d=i.unicode,y=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(S?"g":"y"),m=new c(S?"^(?:"+i.source+")":i,y),g=void 0===r?w:r>>>0;if(0===g)return[];if(0===a.length)return null===v(m,a)?[a]:[];for(var _=0,b=0,E=[];b{"use strict";var r,i=n(54635),o=n(59913),a=n(66213).f,u=n(9375),s=n(74170),c=n(17911),d=n(31591),l=n(41813),f=n(68546),p=o("".startsWith),h=o("".slice),y=Math.min,m=l("startsWith");i({target:"String",proto:!0,forced:!(!f&&!m&&(r=a(String.prototype,"startsWith"),r&&!r.writable)||m)},{startsWith:function(t){var e=s(d(this));c(t);var n=u(y(arguments.length>1?arguments[1]:void 0,e.length)),r=s(t);return p?p(e,r,n):h(e,n,n+r.length)===r}})},91652:(t,e,n)=>{n(74962);var r=n(54635),i=n(9334);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},86630:(t,e,n)=>{var r=n(54635),i=n(97746);r({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},74962:(t,e,n)=>{var r=n(54635),i=n(9334);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},94064:(t,e,n)=>{n(86630);var r=n(54635),i=n(97746);r({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},25959:(t,e,n)=>{"use strict";var r=n(54635),i=n(76109).trim;r({target:"String",proto:!0,forced:n(41017)("trim")},{trim:function(){return i(this)}})},9190:(t,e,n)=>{n(91165)("asyncIterator")},69106:(t,e,n)=>{"use strict";var r=n(54635),i=n(32022),o=n(49425),a=n(59913),u=n(68546),s=n(12115),c=n(86263),d=n(38986),l=n(98511),f=n(27357),p=n(52546),h=n(58326),y=n(79127),m=n(74170),v=n(71111),g=n(13250),_=n(95932),b=n(92775),S=n(12098),w=n(31711),C=n(66213),E=n(43087),I=n(13330),P=n(23659),A=n(43068),O=n(27905),T=n(57186),x=n(17307),R=n(60232),k=n(30191),M=n(58855),N=n(91165),D=n(47498),L=n(27747),z=n(78045),j=n(55883).forEach,U=T("hidden"),F="Symbol",q="prototype",B=z.set,G=z.getterFor(F),V=Object[q],Y=i.Symbol,H=Y&&Y[q],W=i.TypeError,K=i.QObject,Z=C.f,$=E.f,J=S.f,Q=P.f,X=a([].push),tt=O("symbols"),et=O("op-symbols"),nt=O("wks"),rt=!K||!K[q]||!K[q].findChild,it=s&&d((function(){return 7!=g($({},"a",{get:function(){return $(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=Z(V,e);r&&delete V[e],$(t,e,n),r&&t!==V&&$(V,e,r)}:$,ot=function(t,e){var n=tt[t]=g(H);return B(n,{type:F,tag:t,description:e}),s||(n.description=e),n},at=function(t,e,n){t===V&&at(et,e,n),p(t);var r=y(e);return p(n),l(tt,r)?(n.enumerable?(l(t,U)&&t[U][r]&&(t[U][r]=!1),n=g(n,{enumerable:v(0,!1)})):(l(t,U)||$(t,U,v(1,{})),t[U][r]=!0),it(t,r,n)):$(t,r,n)},ut=function(t,e){p(t);var n=h(e),r=_(n).concat(lt(n));return j(r,(function(e){s&&!o(st,n,e)||at(t,e,n[e])})),t},st=function(t){var e=y(t),n=o(Q,this,e);return!(this===V&&l(tt,e)&&!l(et,e))&&(!(n||!l(this,e)||!l(tt,e)||l(this,U)&&this[U][e])||n)},ct=function(t,e){var n=h(t),r=y(e);if(n!==V||!l(tt,r)||l(et,r)){var i=Z(n,r);return!i||!l(tt,r)||l(n,U)&&n[U][r]||(i.enumerable=!0),i}},dt=function(t){var e=J(h(t)),n=[];return j(e,(function(t){l(tt,t)||l(x,t)||X(n,t)})),n},lt=function(t){var e=t===V,n=J(e?et:h(t)),r=[];return j(n,(function(t){!l(tt,t)||e&&!l(V,t)||X(r,tt[t])})),r};c||(A(H=(Y=function(){if(f(H,this))throw W("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?m(arguments[0]):void 0,e=R(t),n=function(t){this===V&&o(n,et,t),l(this,U)&&l(this[U],e)&&(this[U][e]=!1),it(this,e,v(1,t))};return s&&rt&&it(V,e,{configurable:!0,set:n}),ot(e,t)})[q],"toString",(function(){return G(this).tag})),A(Y,"withoutSetter",(function(t){return ot(R(t),t)})),P.f=st,E.f=at,I.f=ut,C.f=ct,b.f=S.f=dt,w.f=lt,M.f=function(t){return ot(k(t),t)},s&&($(H,"description",{configurable:!0,get:function(){return G(this).description}}),u||A(V,"propertyIsEnumerable",st,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:Y}),j(_(nt),(function(t){N(t)})),r({target:F,stat:!0,forced:!c},{useSetter:function(){rt=!0},useSimple:function(){rt=!1}}),r({target:"Object",stat:!0,forced:!c,sham:!s},{create:function(t,e){return void 0===e?g(t):ut(g(t),e)},defineProperty:at,defineProperties:ut,getOwnPropertyDescriptor:ct}),r({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:dt}),D(),L(Y,F),x[U]=!0},70472:(t,e,n)=>{"use strict";var r=n(54635),i=n(12115),o=n(32022),a=n(59913),u=n(98511),s=n(34028),c=n(27357),d=n(74170),l=n(43087).f,f=n(74953),p=o.Symbol,h=p&&p.prototype;if(i&&s(p)&&(!("description"in h)||void 0!==p().description)){var y={},m=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),e=c(h,this)?new p(t):void 0===t?p():p(t);return""===t&&(y[e]=!0),e};f(m,p),m.prototype=h,h.constructor=m;var v="Symbol(test)"==String(p("test")),g=a(h.valueOf),_=a(h.toString),b=/^Symbol\((.*)\)[^)]+$/,S=a("".replace),w=a("".slice);l(h,"description",{configurable:!0,get:function(){var t=g(this);if(u(y,t))return"";var e=_(t),n=v?w(e,7,-1):S(e,b,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:m})}},83038:(t,e,n)=>{var r=n(54635),i=n(83155),o=n(98511),a=n(74170),u=n(27905),s=n(55666),c=u("string-to-symbol-registry"),d=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!s},{for:function(t){var e=a(t);if(o(c,e))return c[e];var n=i("Symbol")(e);return c[e]=n,d[n]=e,n}})},93270:(t,e,n)=>{n(91165)("iterator")},93942:(t,e,n)=>{n(69106),n(83038),n(84272),n(55205),n(17524)},84272:(t,e,n)=>{var r=n(54635),i=n(98511),o=n(24505),a=n(84160),u=n(27905),s=n(55666),c=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!s},{keyFor:function(t){if(!o(t))throw TypeError(a(t)+" is not a symbol");if(i(c,t))return c[t]}})},8962:(t,e,n)=>{var r=n(91165),i=n(47498);r("toPrimitive"),i()},56019:(t,e,n)=>{"use strict";var r,i=n(32022),o=n(59913),a=n(3193),u=n(67023),s=n(69866),c=n(31858),d=n(51355),l=n(62713),f=n(78045).enforce,p=n(74112),h=!i.ActiveXObject&&"ActiveXObject"in i,y=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},m=s("WeakMap",y,c);if(p&&h){r=c.getConstructor(y,"WeakMap",!0),u.enable();var v=m.prototype,g=o(v.delete),_=o(v.has),b=o(v.get),S=o(v.set);a(v,{delete:function(t){if(d(t)&&!l(t)){var e=f(this);return e.frozen||(e.frozen=new r),g(this,t)||e.frozen.delete(t)}return g(this,t)},has:function(t){if(d(t)&&!l(t)){var e=f(this);return e.frozen||(e.frozen=new r),_(this,t)||e.frozen.has(t)}return _(this,t)},get:function(t){if(d(t)&&!l(t)){var e=f(this);return e.frozen||(e.frozen=new r),_(this,t)?b(this,t):e.frozen.get(t)}return b(this,t)},set:function(t,e){if(d(t)&&!l(t)){var n=f(this);n.frozen||(n.frozen=new r),_(this,t)?S(this,t,e):n.frozen.set(t,e)}else S(this,t,e);return this}})}},5963:(t,e,n)=>{n(56019)},71806:(t,e,n)=>{var r=n(32022),i=n(66910),o=n(73391),a=n(33609),u=n(22775),s=function(t){if(t&&t.forEach!==a)try{u(t,"forEach",a)}catch(e){t.forEach=a}};for(var c in i)i[c]&&s(r[c]&&r[c].prototype);s(o)},5193:(t,e,n)=>{var r=n(32022),i=n(66910),o=n(73391),a=n(38490),u=n(22775),s=n(30191),c=s("iterator"),d=s("toStringTag"),l=a.values,f=function(t,e){if(t){if(t[c]!==l)try{u(t,c,l)}catch(e){t[c]=l}if(t[d]||u(t,d,e),i[e])for(var n in a)if(t[n]!==a[n])try{u(t,n,a[n])}catch(e){t[n]=a[n]}}};for(var p in i)f(r[p]&&r[p].prototype,p);f(o,"DOMTokenList")},72031:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425);r({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};return(()=>{"use strict";n.r(r),n.d(r,{createCheckoutButtonInitializer:()=>Wu,createTimeout:()=>e.createTimeout});var t={};n.r(t),n.d(t,{createApplePayButtonStrategy:()=>au,createBoltButtonStrategy:()=>yu,createPayPalCommerceAlternativeMethodsButtonStrategy:()=>ju,createPayPalCommerceButtonStrategy:()=>ku,createPayPalCommerceCreditButtonStrategy:()=>Nu,createPayPalCommerceVenmoButtonStrategy:()=>Lu,createPaypalExpressButtonStrategy:()=>Hu});var e=n(14121),i=n(13751),o=n(61699),a=n(45346);const u=function(t){function e(e){var n,r,i=this.constructor,o=t.call(this,e||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(e,t),e}(Error);var s={body:{},headers:{},status:0};const c=function(t){function e(e,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,u=e||s,c=u.body,d=u.headers,l=u.status;return(a=t.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=c,a.headers=d,a.status=l,a.errors=o||[],a}return(0,o.__extends)(e,t),e}(u),d=function(t){function e(e){var n=t.call(this,e,{message:"There is a problem processing your payment. Please try again later."})||this;return n.name="PaymentMethodInvalidError",n.type="payment_method_invalid",n}return(0,o.__extends)(e,t),e}(c);n(34745),n(28101);const l=function(t){function e(e){var n,r,i=this.constructor,o=t.call(this,e||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(e,t),e}(Error);var f={body:{},headers:{},status:0};const p=function(t){function e(e,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,u=e||f,s=u.body,c=u.headers,d=u.status;return(a=t.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=s,a.headers=c,a.status=d,a.errors=o||[],a}return(0,o.__extends)(e,t),e}(l),h=function(t){function e(e,n){var r=t.call(this,e,{message:n||"An unexpected error has occurred. The checkout process cannot continue as a result."})||this;return r.name="UnrecoverableError",r.type="unrecoverable",r}return(0,o.__extends)(e,t),e}(p);n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(34500),n(5193);var y=n(87275);function m(t){return t.reduce((function(t,e){return e?(0,o.__spreadArrays)(t,[e]):t}),[]).join(" ")}function v(t,e){var n=t.body.errors,r=void 0===n?[]:n;return new p(t,{message:g(r)||e,errors:r})}function g(t){if(Array.isArray(t))return t.reduce((function(t,e){return e&&e.message?(0,o.__spreadArrays)(t,[e.message]):t}),[]).join(" ")}n(64668),n(95412);const _=function(t){function e(e){var n=t.call(this,e,{message:"The request has timed out or aborted."})||this;return n.name="TimeoutError",n.type="timeout",n}return(0,o.__extends)(e,t),e}(p);function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}const S=function(){function t(){this._factoryMethods={},this.register("default",(function(t,e){return new p(t,{message:e})})),this.register("internal",(function(t,e){return function(t,e){var n=t.body,r=n.errors,i=void 0===r?[]:r;return new p(t,{message:m(i)||n.detail||n.title||e,errors:i.length?i.map((function(t){return{code:n.type,message:t}})):[{code:n.type,message:n.detail||n.title}]})}(t,e)})),this.register("storefront",(function(t,e){return function(t,e){var n=t.body;return new p(t,{message:e||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(t,e)})),this.register("payment",(function(t,e){return v(t,e)})),this.register("timeout",(function(t){return new _(t)}))}return t.prototype.register=function(t,e){this._factoryMethods[t]=e},t.prototype.createError=function(t,e){return(this._factoryMethods[this._getType(t)]||this._factoryMethods.default)(t,e)},t.prototype._getType=function(t){if(0===t.status)return"timeout";if(this._isStorefrontErrorResponseBody(t.body))return"storefront";if(this._isInternalErrorResponseBody(t.body)){var e=(0,y.last)(t.body.type.split("/"));return e&&this._factoryMethods[e]?e:"internal"}var n=(0,y.last)(t.body&&t.body.errors);return n&&n.code&&this._factoryMethods[n.code]?n.code:"payment"},t.prototype._isStorefrontErrorResponseBody=function(t){var e=t;return!this._isInternalErrorResponseBody(t)&&"string"==typeof e.title&&"string"==typeof e.type&&"number"==typeof e.status&&"string"==typeof e.detail},t.prototype._isInternalErrorResponseBody=function(t){var e=t;return"object"===b(e.errors)&&"string"==typeof e.title&&"string"==typeof e.type&&"number"==typeof e.status},t}();var w,C,E,I,P=n(73531),A=n(63660);function O(t){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},O(t)}function T(t,e){return Array.isArray(t)?t.map((function(t){return T(t,e)})):(0,y.isPlainObject)(t)?(0,y.transform)((0,y.omitBy)(t,e),(function(t,n,r){t[r]=T(n,e)}),{}):t}function x(t,e){return function(t){return t.type===C.ClearError}(e)?T(t,(function(t){return t===e.payload})):t}function R(t){return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},R(t)}function k(t,e,n){return t===e||(t&&e&&"object"===R(t)&&"object"===R(e)?Array.isArray(t)&&Array.isArray(e)?function(t,e,n){if(t.length!==e.length)return!1;for(var r=0,i=t.length;r-1){var i=n[r];return r>0&&(n.splice(r,1),n.unshift(i)),i.value}return Nn}return{get:r,put:function(e,i){r(e)===Nn&&(n.unshift({key:e,value:i}),n.length>t&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(s,d);function f(){var e=l.get(arguments);if(e===Nn){if(e=t.apply(null,arguments),c){var n=l.getEntries().find((function(t){return c(t.value,e)}));n&&(e=n.value)}l.put(arguments,e)}return e}return f.clearCache=function(){return l.clear()},f}function zn(t){return zn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zn(t)}function jn(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r0}})),H=Un(U,(function(t){return function(e){return!(!e||!e.nonce)||t()===Vn||t()===Yn}})),(0,Rn.qe)((function(t,e){return{getPaymentId:z({checkout:t,order:e}),getPaymentIdOrThrow:j({checkout:t,order:e}),getPaymentStatus:U({checkout:t,order:e}),getPaymentStatusOrThrow:F({checkout:t,order:e}),getPaymentToken:q({checkout:t,order:e}),getPaymentTokenOrThrow:B({checkout:t,order:e}),getPaymentRedirectUrl:G({checkout:t,order:e}),getPaymentRedirectUrlOrThrow:V({checkout:t,order:e}),isPaymentDataRequired:Y({checkout:t,order:e}),isPaymentDataSubmitted:H({checkout:t,order:e})}}))),Et=function(){var t=Un((function(t){return t.errors.applyError}),(function(t){return function(){return t}})),e=Un((function(t){return!!t.statuses.isApplying}),(function(t){return function(){return t}}));return(0,Rn.qe)((function(n){return void 0===n&&(n=Kn),{getApplyError:t(n),isApplying:e(n)}}))}(),Pt=function(){var t=Un((function(t){return t.errors.updateError}),(function(t){return function(){return t}})),e=Un((function(t){return!!t.statuses.isUpdating}),(function(t){return function(){return t}}));return(0,Rn.qe)((function(n){return void 0===n&&(n=Sn),{getUpdateError:t(n),isUpdating:e(n)}}))}(),At=(K=Un((function(t){return t.data}),(function(t){return function(){return t}})),Z=Un((function(t){return t.errors.sendError}),(function(t){return function(){return t}})),$=Un((function(t){return!!t.statuses.isSending}),(function(t){return function(){return t}})),(0,Rn.qe)((function(t){return void 0===t&&(t=ln),{getEmail:K(t),getSendError:Z(t),isSending:$(t)}}))),Ot=function(){var t=Un((function(t){return t.data}),(function(t){return function(){return t}})),e=Un((function(t){return t.data}),(function(t){return function(e){return null==t?void 0:t.find((function(t){return t.region===e}))}})),n=Un((function(t){return t.errors.loadError}),(function(t){return function(){return t}})),r=Un((function(t){return t.statuses.isLoading}),(function(t){return function(){return!!t}}));return(0,Rn.qe)((function(i){return void 0===i&&(i=zt),{getExtensions:t(i),getExtensionByRegion:e(i),getLoadError:n(i),isLoading:r(i)}}))}();return function(t,e){void 0===e&&(e={});var n=J(t.billingAddress),r=Q(t.cart),i=tt(t.checkoutButton),o=nt(t.countries),a=rt(t.coupons),u=it(t.customer),s=ot(t.customerStrategies),c=Ot(t.extensions),d=ct(t.formFields),l=at(t.giftCertificates),f=ut(t.instruments),p=wt(t.orderBillingAddress),h=dt(t.paymentMethods),y=lt(t.paymentStrategies),m=ft(t.pickupOptions),v=ht(t.remoteCheckout),g=yt(t.consignments),_=mt(t.shippingCountries),b=vt(t.shippingStrategies),S=Pt(t.subscriptions),w=Et(t.storeCredit),C=At(t.signInEmail),E=gt(t.consignments,r),I=bt(t.checkout,n,r,E,a,u,l),P=St(t.order,p,a),A=Ct(I,P),O={billingAddress:n,cart:r,checkout:I,checkoutButton:i,config:et(t.config,t.formFields),consignments:E,countries:o,coupons:a,customer:u,customerStrategies:s,extensions:c,form:d,giftCertificates:l,instruments:f,order:P,orderBillingAddress:p,payment:A,paymentMethods:h,paymentStrategies:y,pickupOptions:m,remoteCheckout:v,shippingAddress:g,shippingCountries:_,shippingStrategies:b,signInEmail:C,subscriptions:S,storeCredit:w};return e.shouldWarnMutation?function(t){return Object.keys(t).reduce((function(e,n){return e[n]=Bn(t[n]),e}),{})}(O):O}}function $n(t,e){void 0===t&&(t={});var n,r,i=(n=new S,["catalog_only","empty_cart","invalid_order_id","invalid_order_token","missing_order_token","missing_provider_token","missing_shipping_method","order_completion_error","order_could_not_be_finalized_error","order_create_failed","provider_fatal_error","provider_setup_error","stock_too_low"].forEach((function(t){n.register(t,(function(t,e){return new h(t,e)}))})),n.register("invalid_payment_provider",(function(t){return new d(t)})),n.register("payment_config_not_found",(function(t){return new d(t)})),r=n,function(t){return(0,P.D)(t).pipe((0,A.K)((function(t){if(t instanceof Error||t.payload instanceof Error)throw t;if((n=t.payload)&&"object"===O(n)&&["body","headers","status","statusText"].every((function(t){return Object.prototype.hasOwnProperty.call(n,t)}))){var e=t.payload.body&&t.payload.body.detail;throw(0,o.__assign)((0,o.__assign)({},t),{payload:r.createError(t.payload,e)})}var n;throw t})))}),u=Zn();return(0,a.Mg)((0,a.UY)({billingAddress:L,cart:K,checkout:Pn,checkoutButton:rt,config:ct,consignments:je,countries:Zt,coupons:ht,customer:Pt,customerStrategies:kt,extensions:jt,formFields:Vt,giftCertificates:bt,instruments:Oe,orderBillingAddress:se,order:te,payment:de,paymentMethods:ye,paymentStrategies:we,pickupOptions:We,remoteCheckout:Ne,shippingCountries:Xe,shippingStrategies:an,signInEmail:fn,subscriptions:wn,storeCredit:vn}),t,(0,o.__assign)({actionTransformer:i,stateTransformer:function(t){return u(t)}},e))}var Jn=n(64074),Qn=(n(5963),n(7263));function Xn(t,e,n){var r=new WeakMap;function i(t){var n=this;return function(){for(var i,a=[],u=0;u=400&&t.status<500)throw new Cr(t);throw t}))},t.prototype.updateCheckout=function(t,e,n){var r=void 0===n?{}:n,i=r.params,a=(void 0===i?{}:i).include,u=r.timeout,s="/api/storefront/checkout/"+t,c=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.put(s,{params:{include:Sr(wr,a)},body:e,headers:c,timeout:u})},t}();n(16516);const Ir=function(){function t(){}return t.prototype.isEqual=function(t,e){return(0,y.isEqual)(this._normalize(t),this._normalize(e))},t.prototype._normalize=function(t){return{cartAmount:t.cartAmount,currency:t.currency,id:t.id,lineItems:{digitalItems:t.lineItems.digitalItems.slice().sort((function(t,e){return(""+t.productId+t.variantId).localeCompare(""+e.productId+e.variantId)})).map((function(t){return{extendedSalePrice:t.extendedSalePrice,productId:t.productId,quantity:t.quantity,variantId:t.variantId}})),giftCertificates:t.lineItems.giftCertificates.slice().sort((function(t,e){return(""+t.id).localeCompare(""+e.id)})).map((function(t){return{amount:t.amount,recipient:t.recipient}})),physicalItems:t.lineItems.physicalItems.slice().sort((function(t,e){return(""+t.productId+t.variantId).localeCompare(""+e.productId+e.variantId)})).map((function(t){return{extendedSalePrice:t.extendedSalePrice,productId:t.productId,quantity:t.quantity,variantId:t.variantId,giftWrapping:t.giftWrapping}}))}}},t}(),Pr=function(t){function e(e,n){var r=t.call(this,"An update to your shopping cart has been detected and your available shipping costs have been updated.")||this;return r.name="CartChangedError",r.type="cart_changed",r.data={previous:e,updated:n},r}return(0,o.__extends)(e,t),e}(l),Ar=function(){function t(t){this._checkoutRequestSender=t}return t.prototype.validate=function(t,e){var n=this;if(!t)throw new kn(xn.MissingCheckout);return this._checkoutRequestSender.loadCheckout(t.id,e).then((function(e){var r=new Ir;if(!(t.outstandingBalance===e.body.outstandingBalance&&n._compareCoupons(t.coupons,e.body.coupons)&&n._compareGiftCertificates(t.giftCertificates,e.body.giftCertificates)&&r.isEqual(t.cart,e.body.cart)))throw new Pr(n._getComparableCheckout(t),n._getComparableCheckout(e.body))}))},t.prototype._compareCoupons=function(t,e){return(0,y.isEqual)((0,y.map)(t,"code"),(0,y.map)(e,"code"))},t.prototype._compareGiftCertificates=function(t,e){return(0,y.isEqual)((0,y.map)(t,"code"),(0,y.map)(e,"code"))},t.prototype._getComparableCheckout=function(t){var e=t.cart,n=t.coupons,r=t.giftCertificates,i=t.outstandingBalance;return{cart:{cartAmount:e.cartAmount,currency:e.currency,lineItems:e.lineItems},coupons:n,giftCertificates:r,outstandingBalance:i}},t}(),Or=function(){function t(t){this._configRequestSender=t}return t.prototype.loadConfig=function(t){var e=this;return Jn.y.create((function(n){n.next((0,a.PH)(Q.LoadConfigRequested)),e._configRequestSender.loadConfig(t).then((function(t){n.next((0,a.PH)(Q.LoadConfigSucceeded,t.body)),n.complete()})).catch((function(t){n.error((0,a.bR)(Q.LoadConfigFailed,t))}))}))},(0,o.__decorate)([Xn],t.prototype,"loadConfig",null),t}(),Tr=function(){function t(t){this._requestSender=t}return t.prototype.loadConfig=function(t){var e=void 0===t?{}:t,n=e.timeout,r=e.params;return this._requestSender.get("/api/storefront/checkout-settings",{timeout:n,headers:(0,o.__assign)({Accept:nr.JsonV1,"X-API-INTERNAL":rr},ir),params:r}).catch((function(t){if(t.status>=400&&t.status<500)throw new Cr(t);throw t}))},t}();var xr=n(64440);function Rr(t){return Rr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rr(t)}function kr(t){var e=t;return"object"===Rr(e)&&"object"===Rr(e.payload)&&"string"==typeof e.payload.token}const Mr=function(){function t(t,e,n){this._customerRequestSender=t,this._checkoutActionCreator=e,this._spamProtectionActionCreator=n}return t.prototype.createCustomer=function(t,e){var n=this;return function(r){var i=r.getState().config.getStoreConfigOrThrow().checkoutSettings.isStorefrontSpamProtectionEnabled,u=function(i){return(0,P.D)(n._customerRequestSender.createAccount((0,o.__assign)((0,o.__assign)({},t),{token:i}),e)).pipe((0,xr.w)((function(){return(0,sr.z)(n._checkoutActionCreator.loadCurrentCheckout(e)(r),(0,cr.of)((0,a.PH)(gt.CreateCustomerSucceeded)))})))};return(0,sr.z)((0,cr.of)((0,a.PH)(gt.CreateCustomerRequested)),i?(0,P.D)(n._spamProtectionActionCreator.execute()(r)).pipe((0,xr.w)((function(t){var e;return kr(t)?(0,sr.z)((0,cr.of)(t),u(null===(e=t.payload)||void 0===e?void 0:e.token)):(0,cr.of)(t)}))):u()).pipe((0,A.K)((function(t){return pr(gt.CreateCustomerFailed,t)})))}},t.prototype.createAddress=function(t,e){var n=this;return(0,sr.z)((0,cr.of)((0,a.PH)(gt.CreateCustomerAddressRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._customerRequestSender.createAddress(t,e)];case 1:return n=r.sent().body,[2,(0,a.PH)(gt.CreateCustomerAddressSucceeded,n)]}}))}))}))).pipe((0,A.K)((function(t){return pr(gt.CreateCustomerAddressFailed,t)})))},t.prototype.signInCustomer=function(t,e){var n=this;return function(r){return(0,sr.z)((0,cr.of)((0,a.PH)(gt.SignInCustomerRequested)),(0,P.D)(n._customerRequestSender.signInCustomer(t,e)).pipe((0,xr.w)((function(t){var i=t.body;return(0,sr.z)(n._checkoutActionCreator.loadCurrentCheckout(e)(r),(0,cr.of)((0,a.PH)(gt.SignInCustomerSucceeded,i.data)))})))).pipe((0,A.K)((function(t){return pr(gt.SignInCustomerFailed,t)})))}},t.prototype.signOutCustomer=function(t){var e=this;return function(n){return(0,sr.z)((0,cr.of)((0,a.PH)(gt.SignOutCustomerRequested)),(0,P.D)(e._customerRequestSender.signOutCustomer(t)).pipe((0,xr.w)((function(r){var i=r.body;return(0,sr.z)(e._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,cr.of)((0,a.PH)(gt.SignOutCustomerSucceeded,i.data)))})))).pipe((0,A.K)((function(t){return pr(gt.SignOutCustomerFailed,t)})))}},t}(),Nr=function(){function t(t){this._requestSender=t}return t.prototype.createAccount=function(t,e){var n=(void 0===e?{}:e).timeout;return this._requestSender.post("/api/storefront/customer",{timeout:n,headers:ir,body:t})},t.prototype.createAddress=function(t,e){var n=(void 0===e?{}:e).timeout;return this._requestSender.post("/api/storefront/customer-address",{timeout:n,headers:ir,body:t})},t.prototype.signInCustomer=function(t,e){var n=(void 0===e?{}:e).timeout;return this._requestSender.post("/internalapi/v1/checkout/customer",{timeout:n,headers:ir,body:t})},t.prototype.signOutCustomer=function(t){var e=(void 0===t?{}:t).timeout;return this._requestSender.delete("/internalapi/v1/checkout/customer",{timeout:e,headers:ir})},t}(),Dr=function(){function t(t){this._formFieldsRequestSender=t}return t.prototype.loadFormFields=function(t){var e=this;return(0,sr.z)((0,cr.of)((0,a.PH)(Lt.LoadFormFieldsRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(e,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return[4,this._formFieldsRequestSender.loadFields(t)];case 1:return e=n.sent().body,[2,(0,a.PH)(Lt.LoadFormFieldsSucceeded,e)]}}))}))}))).pipe((0,A.K)((function(t){return pr(Lt.LoadFormFieldsFailed,t)})))},(0,o.__decorate)([Xn],t.prototype,"loadFormFields",null),t}(),Lr=function(){function t(t){this._requestSender=t}return t.prototype.loadFields=function(t){var e=(void 0===t?{}:t).timeout;return this._requestSender.get("/api/storefront/form-fields",{timeout:e,headers:(0,o.__assign)({Accept:nr.JsonV1,"X-API-INTERNAL":rr},ir)})},t}();n(95040);const zr=function(t){var e=this,n=new Promise((function(t,n){e.cancel=n}));this.promise=Promise.race([t,n])},jr=function(t){function e(e){var n=t.call(this,e||"Unable to proceed because the required element is unexpectedly detached from the page.")||this;return n.name="UnexpectedDetachmentError",n.type="unexpected_detachment",n}return(0,o.__extends)(e,t),e}(l),Ur=function(){function t(t){this._mutationObserver=t}return t.prototype.ensurePresence=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:n=new zr(e),(r=this._mutationObserver.create((function(e){e.forEach((function(e){0!==Array.from(e.removedNodes).filter((function(e){return t.some((function(t){return e===t||e.contains(t)}))})).length&&n.cancel(new jr)}))}))).observe(document.body,{childList:!0,subtree:!0}),o.label=1;case 1:return o.trys.push([1,3,,4]),[4,n.promise];case 2:return i=o.sent(),r.disconnect(),[2,i];case 3:throw a=o.sent(),r.disconnect(),a;case 4:return[2]}}))}))},t}();var Fr=function(){function t(t){void 0===t&&(t=window),this._window=t}return t.prototype.create=function(t){return new this._window.MutationObserver(t)},t}(),qr=n(55343),Br=n(20239),Gr=n(92160),Vr=n(31407);n(57347);const Yr=function(t){function e(e){var n=t.call(this,e||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(e,t),e}(l);function Hr(t){if(!/^(https?:)?\/\//.test(t))throw new Yr("The provided URL must be absolute.");var e=document.createElement("a");e.href=t;var n=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+(n?":"+n:""),pathname:e.pathname,port:n,protocol:e.protocol,search:e.search}}function Wr(t,e){return t.type===e}const Kr=function(){function t(t,e){this._targetWindow=e,this._targetOrigin="*"===t?"*":Hr(t).origin}return t.prototype.post=function(t,e){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=e&&(0,qr.R)(window,"message").pipe((0,Br.h)((function(t){return t.origin===n._targetOrigin&&Wr(t.data,t.data.type)&&-1!==[e.successType,e.errorType].indexOf(t.data.type)})),(0,Gr.U)((function(t){if(e.errorType===t.data.type)throw t.data;return t.data})),(0,Vr.q)(1)).toPromise();return r.postMessage(t,this._targetOrigin),i}},t.prototype.setTarget=function(t){this._targetWindow=t},t}();n(19926);const Zr=function(t,e,n){return e&&n?$r(0,e,n):function(t){var e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return(0,o.__extends)(e,t),e}(t);return Object.getOwnPropertyNames(t.prototype).forEach((function(n){var r=Object.getOwnPropertyDescriptor(t.prototype,n);r&&"constructor"!==n&&Object.defineProperty(e.prototype,n,$r(t.prototype,n,r))})),e}(t)};function $r(t,e,n){if("function"!=typeof n.value)return n;var r=n.value;return{get:function(){var t=r.bind(this);return Object.defineProperty(this,e,(0,o.__assign)((0,o.__assign)({},n),{value:t})),t},set:function(t){r=t}}}const Jr=function(){function t(t){var e;this._sourceOrigins=[Hr(t).origin,(e=Hr(t),Hr(0===e.hostname.indexOf("www")?e.href:e.href.replace(e.hostname,"www."+e.hostname))).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 n=this._listeners[t];n||(this._listeners[t]=n=[]),-1===n.indexOf(e)&&n.push(e)},t.prototype.removeListener=function(t,e){var n=this._listeners[t];if(n){var r=n.indexOf(e);r>=0&&n.splice(r,1)}},t.prototype.trigger=function(t){var e=this._listeners[t.type];e&&e.forEach((function(e){return e(t)}))},t.prototype._handleMessage=function(t){-1!==this._sourceOrigins.indexOf(t.origin)&&Wr(t.data,t.data.type)&&this.trigger(t.data)},(0,o.__decorate)([Zr],t.prototype,"_handleMessage",null),t}(),Qr=function(t){function e(){var e=t.call(this,"You haven't complete our spam protection challenge. Please try again.")||this;return e.name="SpamProtectionChallengeNotCompletedError",e.type="spam_protection_challenge_not_completed",e}return(0,o.__extends)(e,t),e}(l),Xr=function(t){function e(){var e=t.call(this,"Please complete our human verification challenge and try again.")||this;return e.name="CardingProtectionChallengeNotCompletedError",e.type="carding_protection_challenge_not_completed",e}return(0,o.__extends)(e,t),e}(l),ti=function(t){function e(){var e=t.call(this,"We were not able to verify that you are not a robot. Please try again.")||this;return e.name="CardingProtectionFailedError",e.type="carding_protection_failed",e}return(0,o.__extends)(e,t),e}(l),ei=function(){function t(t){this._googleRecaptcha=t}return t.prototype.handle=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){return"string"==typeof t?[2,this.handleWithRecaptchaSitekey(t,e)]:[2,this.handleWithPaymentHumanVerificationRequestError(t)]}))}))},t.prototype.handleWithPaymentHumanVerificationRequestError=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:if(!this._isPaymentHumanVerificationRequest(t))throw t;return[4,this._initialize(t.body.additional_action_required.data.key)];case 1:return e.sent(),[2,this._performRecaptcha()]}}))}))},t.prototype.handleWithRecaptchaSitekey=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("recaptcha_v2"!==t)throw Error("Human verification method is not supported.");if(!e)throw Error("Recaptcha site key is missing.");return[4,this._initialize(e)];case 1:return n.sent(),[2,this._performRecaptcha()]}}))}))},t.prototype._performRecaptcha=function(){var t=this;return this._googleRecaptcha.execute().pipe((0,Vr.q)(1)).pipe((0,xr.w)((function(e){var n=e.error,r=e.token;return(0,o.__awaiter)(t,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){if(n instanceof Qr)throw new Xr;if(n||!r)throw new ti;return[2,{type:"recaptcha_v2_verification",data:{human_verification_token:r}}]}))}))}))).toPromise()},t.prototype._initialize=function(t){var e="cardingProtectionContainer",n=document.getElementById(e);return n&&n.parentNode&&n.parentNode.removeChild(n),(n=document.createElement("div")).setAttribute("id",e),document.body.appendChild(n),this._googleRecaptcha.load(e,t)},t.prototype._isPaymentHumanVerificationRequest=function(t){var e=t.body||{},n=e.additional_action_required;return"additional_action_required"===e.status&&n&&"recaptcha_v2_verification"===n.type},t}();var ni,ri=n(99357),ii=n(62156),oi=n(5026);!function(t){t[t.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",t[t.CustomerNotInitialized=1]="CustomerNotInitialized",t[t.PaymentNotInitialized=2]="PaymentNotInitialized",t[t.ShippingNotInitialized=3]="ShippingNotInitialized",t[t.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(ni||(ni={}));const ai=function(t){function e(e){var n=t.call(this,function(t){switch(t){case ni.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case ni.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case ni.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case ni.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(e))||this;return n.subtype=e,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(e,t),e}(l),ui=function(t){function e(){var e=t.call(this,"We were not able to complete your spam protection verification. Please try again.")||this;return e.name="SpamProtectionFailedError",e.type="spam_protection_failed",e}return(0,o.__extends)(e,t),e}(l),si=function(t){function e(){var e=t.call(this,"Spam protection is not loaded. Please try again.")||this;return e.name="SpamProtectionNotLoadedError",e.type="spam_protection_failed",e}return(0,o.__extends)(e,t),e}(l),ci=function(){function t(t,e){var n=this;this.googleRecaptchaScriptLoader=t,this.mutationObserverFactory=e,this._memoized=(0,Rn.HP)((function(t,e,r){var i=new ri.xQ;if(!r)throw new Error;return n._widgetId=t.render(r.id,{sitekey:e,size:"invisible",callback:function(){i.next({token:t.getResponse(n._widgetId)}),t.reset(n._widgetId)},"error-callback":function(){i.next({error:new ui})}}),i}),{isEqual:function(t,e){return t===e}})}return t.prototype.load=function(t,e){var n=this;return this.googleRecaptchaScriptLoader.load().then((function(r){r&&(n._event$=n._memoized(r,e,document.getElementById(t)),n._recaptcha=r)}))},t.prototype.execute=function(){var t=this;return(0,dr.P)((function(){var e=t._event$,n=t._recaptcha;if(!e||!n)throw new ai(ni.SpamProtectionNotInitialized);return(0,dr.P)((function(){var t=document.querySelector('iframe[src*="bframe"]');return t?(0,cr.of)(t):(0,fr._)(new si)})).pipe((0,ii.a)((function(t){return t.pipe((0,oi.g)(250),(0,xr.w)((function(t,e){return e<28?(0,cr.of)(t):(0,fr._)(t)})))})),(0,xr.w)((function(r){return t._watchRecaptchaChallengeWindow(e,r),n.execute(t._widgetId),e})),(0,A.K)((function(t){return(0,cr.of)({error:t})})))}))},t.prototype._watchRecaptchaChallengeWindow=function(t,e){var n=e.parentElement;if(!n)throw new si;var r=n.parentElement;if(!r)throw new si;this.mutationObserverFactory.create((function(){"hidden"===r.style.visibility&&t.next({error:new Qr})})).observe(r,{attributes:!0,attributeFilter:["style"]})},t}();n(83823);const di=function(){function t(t,e){void 0===e&&(e=window),this._scriptLoader=t,this._window=e}return t.prototype.load=function(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise},t.prototype._loadScript=function(){var t=this,e="initRecaptcha",n=["onload="+e,"render=explicit"].join("&");return new Promise((function(r,i){t._window[e]=function(){return r(t._window.grecaptcha)},t._scriptLoader.loadScript("//www.google.com/recaptcha/api.js?"+n).catch((function(e){t._loadPromise=void 0,i(e)}))}))},t}();function li(t){return new ci(new di(t),new Fr)}const fi=function(t){function e(e){var n=t.call(this,e||"Unable to proceed due to invalid configuration provided for the hosted payment form.")||this;return n.name="InvalidHostedFormConfigError",n.type="invalid_hosted_form_config",n}return(0,o.__extends)(e,t),e}(l),pi=function(t){function e(e){var n=t.call(this,e||"Unable to proceed due to an unknown error with the hosted payment form.")||this;return n.name="InvalidHostedFormError",n.type="invalid_hosted_form",n}return(0,o.__extends)(e,t),e}(l),hi=function(t){function e(e){var n=t.call(this,(0,o.__spreadArrays)(["Unable to proceed due to invalid user input values"],(0,y.flatMap)((0,y.values)(e),(function(t){return(0,y.map)(t,(function(t){return t.message}))}))).join(". "))||this;return n.errors=e,n.name="InvalidHostedFormValueError",n.type="invalid_hosted_form_value",n}return(0,o.__extends)(e,t),e}(l);var yi,mi;!function(t){t.AttachRequested="HOSTED_FIELD:ATTACH_REQUESTED",t.SubmitRequested="HOSTED_FIELD:SUBMITTED_REQUESTED",t.ValidateRequested="HOSTED_FIELD:VALIDATE_REQUESTED"}(yi||(yi={})),function(t){t.AttachSucceeded="HOSTED_INPUT:ATTACH_SUCCEEDED",t.AttachFailed="HOSTED_INPUT:ATTACH_FAILED",t.BinChanged="HOSTED_INPUT:BIN_CHANGED",t.Blurred="HOSTED_INPUT:BLURRED",t.Changed="HOSTED_INPUT:CHANGED",t.CardTypeChanged="HOSTED_INPUT:CARD_TYPE_CHANGED",t.Entered="HOSTED_INPUT:ENTERED",t.Focused="HOSTED_INPUT:FOCUSED",t.SubmitSucceeded="HOSTED_INPUT:SUBMIT_SUCCEEDED",t.SubmitFailed="HOSTED_INPUT:SUBMIT_FAILED",t.Validated="HOSTED_INPUT:VALIDATED"}(mi||(mi={}));const vi=function(){function t(t,e,n,r,i,o,a,u,s){this._type=t,this._containerId=e,this._placeholder=n,this._accessibilityLabel=r,this._styles=i,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=u,this._cardInstrument=s,this._iframe=document.createElement("iframe"),this._iframe.src="/checkout/payment/hosted-field?version=1.400.0",this._iframe.style.border="none",this._iframe.style.height="100%",this._iframe.style.overflow="hidden",this._iframe.style.width="100%"}return t.prototype.getType=function(){return this._type},t.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e,n=this;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:if(!(t=document.getElementById(this._containerId)))throw new fi("Unable to proceed because the provided container ID is not valid.");return t.appendChild(this._iframe),this._eventListener.listen(),e=(0,qr.R)(this._iframe,"load").pipe((0,xr.w)((function(t){var e=t.target;return(0,o.__awaiter)(n,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(t=e&&e.contentWindow))throw new Error("The content window of the iframe cannot be accessed.");return this._eventPoster.setTarget(t),[4,this._eventPoster.post({type:yi.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:mi.AttachSucceeded,errorType:mi.AttachFailed})];case 1:return n.sent(),[2]}}))}))})),(0,Vr.q)(1)).toPromise(),[4,this._detachmentObserver.ensurePresence([this._iframe],e)];case 1:return r.sent(),[2]}}))}))},t.prototype.detach=function(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())},t.prototype.submitForm=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),n=this._eventPoster.post({type:yi.SubmitRequested,payload:{fields:t,data:e}},{successType:mi.SubmitSucceeded,errorType:mi.SubmitFailed}),[4,this._detachmentObserver.ensurePresence([this._iframe],n)];case 1:return[2,i.sent()];case 2:if(r=i.sent(),this._isSubmitErrorEvent(r)){if("hosted_form_error"===r.payload.error.code)throw new pi(r.payload.error.message);if(r.payload.response)throw v(r.payload.response);throw new Error(r.payload.error.message)}throw r;case 3:return[2]}}))}))},t.prototype.validateForm=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t=this._eventPoster.post({type:yi.ValidateRequested},{successType:mi.Validated}),[4,this._detachmentObserver.ensurePresence([this._iframe],t)];case 1:if(!(e=n.sent().payload).isValid)throw new hi(e.errors);return[2]}}))}))},t.prototype._getFontUrls=function(){var t=this,e="fonts.googleapis.com",n=document.querySelectorAll("link[href*='"+e+"'][rel='stylesheet']");return Array.prototype.slice.call(n).filter((function(t){return Hr(t.href).hostname===e})).filter((function(e){return(0,y.values)(t._styles).map((function(t){return t&&t.fontFamily})).filter((function(t){return"string"==typeof t})).some((function(t){return t.split(/,\s/).some((function(t){return-1!==e.href.indexOf(t.replace(" ","+"))}))}))})).map((function(t){return t.href}))},t.prototype._isSubmitErrorEvent=function(t){return t.type===mi.SubmitFailed},t}(),gi=function(){function t(t,e,n,r,i){var a=this;this._fields=t,this._eventListener=e,this._payloadTransformer=n,this._eventCallbacks=r,this._paymentHumanVerificationHandler=i,this._handleEnter=function(t){var e=t.payload;return(0,o.__awaiter)(a,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.validate()];case 1:return r.sent(),[3,3];case 2:if("InvalidHostedFormValueError"!==(t=r.sent()).name)throw t;return[3,3];case 3:return(void 0===(n=this._eventCallbacks.onEnter)?y.noop:n)(e),[2]}}))}))};var u=this._eventCallbacks,s=u.onBlur,c=void 0===s?y.noop:s,d=u.onCardTypeChange,l=void 0===d?y.noop:d,f=u.onFocus,p=void 0===f?y.noop:f,h=u.onValidate,m=void 0===h?y.noop:h;this._eventListener.addListener(mi.Blurred,(function(t){var e=t.payload;return c(e)})),this._eventListener.addListener(mi.CardTypeChanged,(function(t){var e=t.payload;return l(e)})),this._eventListener.addListener(mi.Focused,(function(t){var e=t.payload;return p(e)})),this._eventListener.addListener(mi.Validated,(function(t){var e=t.payload;return m(e)})),this._eventListener.addListener(mi.Entered,this._handleEnter),this._eventListener.addListener(mi.CardTypeChanged,(function(t){var e=t.payload;return a._cardType=e.cardType})),this._eventListener.addListener(mi.BinChanged,(function(t){var e=t.payload;return a._bin=e.bin}))}return t.prototype.getBin=function(){return this._bin},t.prototype.getCardType=function(){return this._cardType},t.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return this._eventListener.listen(),t=this._getFirstField(),e=(0,y.without)(this._fields,t),[4,t.attach()];case 1:return n.sent(),[4,Promise.all(e.map((function(t){return t.attach()})))];case 2:return n.sent(),[2]}}))}))},t.prototype.detach=function(){this._eventListener.stopListen(),this._fields.forEach((function(t){t.detach()}))},t.prototype.submit=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._getFirstField().submitForm(this._fields.map((function(t){return t.getType()})),this._payloadTransformer.transform(t,e))];case 1:case 4:return[2,i.sent()];case 2:return n=i.sent(),[4,this._paymentHumanVerificationHandler.handle(n)];case 3:return r=i.sent(),[4,this._getFirstField().submitForm(this._fields.map((function(t){return t.getType()})),this._payloadTransformer.transform(t,r))];case 5:return[2]}}))}))},t.prototype.validate=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){return[2,this._getFirstField().validateForm()]}))}))},t.prototype._getFirstField=function(){var t=this._fields[0];if(!t)throw new fi("Unable to proceed because the payment form has no field defined.");return t},t}();function _i(t){return Boolean(t.instrumentId)}const bi=function(){function t(t){this._store=t}return t.prototype.transform=function(t,e){var n=this._store.getState(),r=n.checkout.getCheckout(),i=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),u=n.order.getOrderMeta(),s=(0,y.omit)(t.paymentData,"ccExpiry","ccName","ccNumber","ccCvv"),c=n.paymentMethods.getPaymentMethod(t.methodId,t.gatewayId),d=n.paymentMethods.getPaymentMethodsMeta(),l=o&&s&&_i(s)?n.payment.getPaymentToken()+", "+o.vaultAccessToken:n.payment.getPaymentToken();if(!l)throw new kn(xn.MissingPaymentToken);return{additionalAction:e,authToken:l,checkout:r,config:i,order:a,orderMeta:u,payment:s,paymentMethod:c,paymentMethodMeta:d}},t}(),Si=function(){function t(t){this._store=t}return t.prototype.create=function(t,e){var n=this,r=Object.keys(e.fields).reduce((function(r,i){var a=e.fields[i];return a?(0,o.__spreadArrays)(r,[new vi(i,a.containerId,a.placeholder||"",a.accessibilityLabel||"",e.styles||{},new Kr(t),new Jr(t),new Ur(new Fr),"instrumentId"in a?n._getCardInstrument(a.instrumentId):void 0)]):r}),[]);return new gi(r,new Jr(t),new bi(this._store),(0,y.pick)(e,"onBlur","onEnter","onFocus","onCardTypeChange","onValidate"),new ei(li((0,ar.VD)())))},t.prototype._getCardInstrument=function(t){var e=(0,this._store.getState().instruments.getCardInstrument)(t);if(!e)throw new kn(xn.MissingPaymentInstrument);return e},t}(),wi=function(t){function e(){var e=t.call(this,"You haven't complete our spam check. Please try again.")||this;return e.name="SpamProtectionNotCompletedError",e.type="spam_protection_not_completed",e}return(0,o.__extends)(e,t),e}(l),Ci=function(){function t(t,e){this._orderRequestSender=t,this._checkoutValidator=e}return t.prototype.loadOrder=function(t,e){var n=this;return new Jn.y((function(r){r.next((0,a.PH)(ut.LoadOrderRequested)),n._orderRequestSender.loadOrder(t,e).then((function(t){r.next((0,a.PH)(ut.LoadOrderSucceeded,t.body)),r.complete()})).catch((function(t){r.error((0,a.bR)(ut.LoadOrderFailed,t))}))}))},t.prototype.loadOrderPayments=function(t,e){var n=this;return new Jn.y((function(r){r.next((0,a.PH)(ut.LoadOrderPaymentsRequested)),n._orderRequestSender.loadOrder(t,e).then((function(t){r.next((0,a.PH)(ut.LoadOrderPaymentsSucceeded,t.body)),r.complete()})).catch((function(t){r.error((0,a.bR)(ut.LoadOrderPaymentsFailed,t))}))}))},t.prototype.loadCurrentOrder=function(t){var e=this;return function(n){return(0,dr.P)((function(){var r=e._getCurrentOrderId(n.getState());if(!r)throw new kn(xn.MissingOrderId);return e.loadOrder(r,t)}))}},t.prototype.submitOrder=function(t,e){var n=this;return function(r){return(0,sr.z)((0,cr.of)((0,a.PH)(ut.SubmitOrderRequested)),(0,dr.P)((function(){var i=r.getState(),u=i.config.getExternalSource(),s=i.config.getVariantIdentificationToken(),c=i.checkout.getCheckout();if(!c)throw new kn(xn.MissingCheckout);if(c.shouldExecuteSpamCheck)throw new wi;return(0,P.D)(n._checkoutValidator.validate(c,e).then((function(){return n._orderRequestSender.submitOrder(n._mapToOrderRequestBody(null!=t?t:{},c.id,c.customerMessage,u),(0,o.__assign)((0,o.__assign)({},e),{headers:{checkoutVariant:s}}))}))).pipe((0,xr.w)((function(t){return(0,sr.z)(n.loadOrder(t.body.data.order.orderId,e),(0,cr.of)((0,a.PH)(ut.SubmitOrderSucceeded,t.body.data,(0,o.__assign)((0,o.__assign)({},t.body.meta),{token:t.headers.token}))))})))})).pipe((0,A.K)((function(t){return pr(ut.SubmitOrderFailed,t)}))))}},t.prototype.finalizeOrder=function(t,e){var n=this;return(0,sr.z)((0,cr.of)((0,a.PH)(ut.FinalizeOrderRequested)),(0,P.D)(this._orderRequestSender.finalizeOrder(t,e)).pipe((0,xr.w)((function(r){return(0,sr.z)(n.loadOrder(t,e),(0,cr.of)((0,a.PH)(ut.FinalizeOrderSucceeded,r.body.data)))})))).pipe((0,A.K)((function(t){return pr(ut.FinalizeOrderFailed,t)})))},t.prototype._getCurrentOrderId=function(t){var e=t.order.getOrder(),n=t.checkout.getCheckout();return e&&e.orderId||n&&n.orderId},t.prototype._mapToOrderRequestBody=function(t,e,n,r){var i=t.payment,a=(0,o.__rest)(t,["payment"]);return i?(0,o.__assign)((0,o.__assign)({},a),{cartId:e,customerMessage:n,externalSource:r,payment:{paymentData:i.paymentData,name:i.methodId,gateway:i.gatewayId}}):(0,o.__assign)((0,o.__assign)({},a),{cartId:e,customerMessage:n,externalSource:r})},t}(),Ei=function(t){function e(e){var n=t.call(this,e||"Your checkout could not be processed because some details have changed. Please review your order and try again.")||this;return n.name="CartConsistencyError",n.type="cart_consistency",n}return(0,o.__extends)(e,t),e}(l),Ii=function(t){function e(e){var n=t.call(this,e||"The tax provider is unavailable.")||this;return n.name="OrderTaxProviderUnavailableError",n.type="tax_provider_unavailable",n}return(0,o.__extends)(e,t),e}(l),Pi=function(){function t(t){this._requestSender=t}return t.prototype.loadOrder=function(t,e){var n=(void 0===e?{}:e).timeout,r="/api/storefront/orders/"+t,i=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.get(r,{params:{include:br(["payments","lineItems.physicalItems.socialMedia","lineItems.physicalItems.options","lineItems.physicalItems.categories","lineItems.digitalItems.socialMedia","lineItems.digitalItems.options","lineItems.digitalItems.categories"])},headers:i,timeout:n})},t.prototype.submitOrder=function(t,e){var n=void 0===e?{}:e,r=n.headers,i=n.timeout;return this._requestSender.post("/internalapi/v1/checkout/order",{body:t,headers:(0,y.omitBy)((0,o.__assign)({"X-Checkout-Variant":r&&r.checkoutVariant},ir),y.isNil),timeout:i}).catch((function(t){if("tax_provider_unavailable"===t.body.type)throw new Ii;if("cart_has_changed"===t.body.type)throw new Ei;throw t}))},t.prototype.finalizeOrder=function(t,e){var n=(void 0===e?{}:e).timeout,r="/internalapi/v1/checkout/order/"+t;return this._requestSender.post(r,{timeout:n,headers:ir})},t}(),Ai=function(){function t(t,e,n,r){var i=this;this._paymentRequestSender=t,this._orderActionCreator=e,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=r,this.initializeOffsitePayment=function(t){var e=t.methodId,n=t.gatewayId,r=t.instrumentId,o=t.target,u=t.promise,s=t.shouldSaveInstrument,c=t.shouldSetAsDefaultInstrument;return function(t){var d;r?d={formattedPayload:{bigpay_token:r}}:s&&(d={formattedPayload:{vault_payment_instrument:s,set_as_default_stored_instrument:c||null}});var l=i._paymentRequestTransformer.transform({gatewayId:n,methodId:e,paymentData:d},t.getState());return(0,sr.z)((0,cr.of)((0,a.PH)(oe.InitializeOffsitePaymentRequested)),Promise.race([i._paymentRequestSender.initializeOffsitePayment(l,o),u].filter(Boolean)).then((function(){return(0,a.PH)(oe.InitializeOffsitePaymentSucceeded)}))).pipe((0,A.K)((function(t){return pr(oe.InitializeOffsitePaymentFailed,t)})))}}}return t.prototype.submitPayment=function(t){var e=this;return function(n){return(0,sr.z)((0,cr.of)((0,a.PH)(oe.SubmitPaymentRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(e,void 0,void 0,(function(){var e,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(t,n.getState()))];case 1:case 4:return[2,i.sent()];case 2:return e=i.sent(),[4,this._paymentHumanVerificationHandler.handle(e)];case 3:return r=i.sent(),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform((0,o.__assign)((0,o.__assign)({},t),{additionalAction:r}),n.getState()))];case 5:return[2]}}))}))})).pipe((0,xr.w)((function(t){var r=t.body;return(0,sr.z)(e._orderActionCreator.loadCurrentOrder()(n),(0,cr.of)((0,a.PH)(oe.SubmitPaymentSucceeded,r)))})))).pipe((0,A.K)((function(t){return pr(oe.SubmitPaymentFailed,t)})))}},t}(),Oi=function(){function t(t){this._client=t}return t.prototype.submitPayment=function(t){var e=this;return new Promise((function(n,r){e._client.submitPayment(t,(function(t,i){t?r(e._transformResponse(t)):n(e._transformResponse(i))}))}))},t.prototype.initializeOffsitePayment=function(t,e){var n=this;return new Promise((function(){n._client.initializeOffsitePayment(t,null,e)}))},t.prototype._transformResponse=function(t){return{headers:t.headers,body:t.data,status:t.status,statusText:t.statusText}},t}();var Ti=n(36438);function xi(t,e){var n;return function(t){return void 0!==t.id}(t)?n=t.id:e&&e.length&&(n=e[0].id),{id:n,firstName:t.firstName,lastName:t.lastName,company:t.company,addressLine1:t.address1,addressLine2:t.address2,city:t.city,province:t.stateOrProvince,provinceCode:t.stateOrProvinceCode,postCode:t.postalCode,country:t.country,countryCode:t.countryCode,phone:t.phone,customFields:t.customFields}}const Ri=function(){function t(t){this._decimalPlaces=t}return t.prototype.toInteger=function(t){return Math.round(t*Math.pow(10,this._decimalPlaces))},t}();var ki,Mi=["per_item_discount","percentage_discount","per_total_discount","shipping_discount","free_shipping"];function Ni(t){return{code:t.code,discount:t.displayName,discountType:Mi.indexOf(t.couponType)}}function Di(t){return{code:t.code,discountedAmount:t.used,remainingBalance:t.remaining,giftCertificate:{balance:t.balance,code:t.code,purchaseDate:t.purchaseDate}}}function Li(t,e,n){return void 0===n&&(n="id"),Object.keys(t).reduce((function(r,i){return(0,o.__spreadArrays)(r,t[i].map((function(t){return"giftCertificates"===i?function(t,e){var n=new Ri(e);return{id:t.id,imageUrl:"",name:t.name,amount:t.amount,amountAfterDiscount:t.amount,discount:0,integerAmount:n.toInteger(t.amount),integerAmountAfterDiscount:n.toInteger(t.amount),integerUnitPrice:n.toInteger(t.amount),integerUnitPriceAfterDiscount:n.toInteger(t.amount),integerDiscount:0,quantity:1,sender:t.sender,recipient:t.recipient,type:"ItemGiftCertificateEntity",attributes:[],variantId:null}}(t,e):function(t,e,n,r){void 0===r&&(r="id");var i=new Ri(n);return{id:t[r],imageUrl:t.imageUrl,amount:t.extendedListPrice,amountAfterDiscount:t.extendedSalePrice,discount:t.discountAmount,integerAmount:i.toInteger(t.extendedListPrice),integerAmountAfterDiscount:i.toInteger(t.extendedSalePrice),integerDiscount:i.toInteger(t.discountAmount),integerUnitPrice:i.toInteger(t.listPrice),integerUnitPriceAfterDiscount:i.toInteger(t.salePrice),downloadsPageUrl:t.downloadPageUrl,name:t.name,quantity:t.quantity,brand:t.brand,sku:t.sku,categoryNames:t.categoryNames,variantId:t.variantId,productId:t.productId,attributes:(t.options||[]).map((function(t){return{name:t.name,value:t.value}})),addedByPromotion:t.addedByPromotion,type:e}}(t,function(t){switch(t){case"physicalItems":return"ItemPhysicalEntity";case"digitalItems":return"ItemDigitalEntity";case"giftCertificates":return"ItemGiftCertificateEntity";default:return""}}(i),e,n)})))}),[])}function zi(t){var e,n,r=t.cart.currency.decimalPlaces,i=new Ri(r);return{id:t.cart.id,items:Li(t.cart.lineItems,r),currency:t.cart.currency.code,coupon:{discountedAmount:(0,y.reduce)(t.cart.coupons,(function(t,e){return t+e.discountedAmount}),0),coupons:t.cart.coupons.map(Ni)},discount:{amount:t.cart.discountAmount,integerAmount:i.toInteger(t.cart.discountAmount)},discountNotifications:(e=t.promotions,n=[],(e||[]).forEach((function(t){(t.banners||[]).forEach((function(t){n.push({placeholders:[],discountType:null,message:"",messageHtml:t.text})}))})),n),giftCertificate:{totalDiscountedAmount:(0,y.reduce)(t.giftCertificates,(function(t,e){return t+e.used}),0),appliedGiftCertificates:(0,y.keyBy)(t.giftCertificates.map(Di),"code")},shipping:{amount:t.shippingCostTotal,integerAmount:i.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(t.shippingCostBeforeDiscount),required:(0,y.some)(t.cart.lineItems.physicalItems,(function(t){return t.isShippingRequired}))},subtotal:{amount:t.subtotal,integerAmount:i.toInteger(t.subtotal)},storeCredit:{amount:t.customer?t.customer.storeCredit:0},taxSubtotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:i.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.grandTotal,integerAmount:i.toInteger(t.grandTotal)}}}!function(t){t.APPLEPAY="applepay",t.AMAZON_PAY_V2="amazonpay",t.BRAINTREE_PAYPAL="braintreepaypal",t.BRAINTREE_VENMO="braintreevenmo",t.BRAINTREE_PAYPAL_CREDIT="braintreepaypalcredit",t.GOOGLEPAY_ADYENV2="googlepayadyenv2",t.GOOGLEPAY_ADYENV3="googlepayadyenv3",t.GOOGLEPAY_AUTHORIZENET="googlepayauthorizenet",t.GOOGLEPAY_BNZ="googlepaybnz",t.GOOGLEPAY_BRAINTREE="googlepaybraintree",t.GOOGLEPAY_CHECKOUTCOM="googlepaycheckoutcom",t.GOOGLEPAY_CYBERSOURCEV2="googlepaycybersourcev2",t.GOOGLEPAY_ORBITAL="googlepayorbital",t.GOOGLEPAY_STRIPE="googlepaystripe",t.GOOGLEPAY_STRIPEUPE="googlepaystripeupe",t.GOOGLEPAY_WORLDPAYACCESS="googlepayworldpayaccess",t.MASTERPASS="masterpass",t.PAYPALEXPRESS="paypalexpress"}(ki||(ki={}));const ji=ki;function Ui(t,e){var n=t.firstName||e.firstName||"",r=t.lastName||e.lastName||"";return{addresses:(t.addresses||[]).map((function(t){return xi(t)})),customerId:t.id,isGuest:t.isGuest,storeCredit:t.storeCredit,email:t.email||e.email||"",firstName:n,lastName:r,name:t.fullName||[n,r].join(" "),customerGroupName:t.customerGroup&&t.customerGroup.name}}const Fi=function(){function t(){}return t.prototype.format=function(t){var e=t.split(new RegExp("\\s*/\\s*")),n=e[0],r=void 0===n?"":n,i=e[1],o=void 0===i?"":i,a=r.slice(0,2),u=4===o.length?o.slice(-2):o?o.slice(0,2):r.slice(2);return t.length<2?r:t.length>3&&!u?a:a+" / "+u},t.prototype.toObject=function(t){var e=t.split(new RegExp("\\s*/\\s*")),n=e[0],r=void 0===n?"":n,i=e[1],o=void 0===i?"":i;return/^\d+$/.test(r)&&/^\d+$/.test(o)?{month:1===r.length?"0"+r:r.slice(0,2),year:2===o.length?"20"+o:o.slice(0,4)}:{month:"",year:""}},t}();var qi=n(67061);const Bi=function(){function t(){}return t.prototype.format=function(t){var e=(0,qi.number)(t).card;if(!e)return t;var n=(0,y.max)((0,qi.creditCardType)(t).map((function(t){return(0,y.max)(t.lengths)}))),r=this.unformat(t).slice(0,n);return e.gaps.filter((function(t){return r.length>t})).reduce((function(t,e,n){return[t.slice(0,e+n),t.slice(e+n)].join(" ")}),r)},t.prototype.unformat=function(t){return(0,qi.number)(t).card?t.replace(new RegExp(" ","g"),""):t},t}();function Gi(t,e){void 0===e&&(e={});var n,r,i=t.currency.decimalPlaces,o=new Ri(i);return{id:t.orderId,items:Li(t.lineItems,t.currency.decimalPlaces,"productId"),orderId:t.orderId,currency:t.currency.code,customerCanBeCreated:t.customerCanBeCreated,payment:Yi(t.payments,e.payment),subtotal:{amount:t.baseAmount,integerAmount:o.toInteger(t.baseAmount)},coupon:{discountedAmount:(0,y.reduce)(t.coupons,(function(t,e){return t+e.discountedAmount}),0),coupons:t.coupons.map(Ni)},discount:{amount:t.discountAmount,integerAmount:o.toInteger(t.discountAmount)},token:e.orderToken,callbackUrl:e.callbackUrl,discountNotifications:[],giftCertificate:(n=t.payments,r=(0,y.filter)(n,{providerId:"giftcertificate"}),{totalDiscountedAmount:(0,y.reduce)(r,(function(t,e){return e.amount+t}),0),appliedGiftCertificates:(0,y.keyBy)(r.map((function(t){return{code:t.detail.code,discountedAmount:t.amount,remainingBalance:t.detail.remaining,giftCertificate:{balance:t.amount+t.detail.remaining,code:t.detail.code,purchaseDate:""}}})),"code")}),socialData:Wi(t),status:t.status,hasDigitalItems:t.hasDigitalItems,isDownloadable:t.isDownloadable,isComplete:t.isComplete,shipping:{amount:t.shippingCostTotal,integerAmount:o.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:o.toInteger(t.shippingCostBeforeDiscount)},storeCredit:{amount:Vi(t.payments)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:o.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:o.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.orderAmount,integerAmount:t.orderAmountAsInteger}}}function Vi(t){var e=(0,y.find)(t,{providerId:"storecredit"});return e?e.amount:0}function Yi(t,e){void 0===e&&(e={});var n,r=(0,y.find)(t,Hi);return r?{id:r.providerId,status:(n=r.detail.step,"PAYMENT_STATUS_"+n),helpText:r.detail.instructions,returnUrl:e.returnUrl}:{}}function Hi(t){return"giftcertificate"!==t.providerId&&"storecredit"!==t.providerId}function Wi(t){var e={};return(0,o.__spreadArrays)(t.lineItems.physicalItems,t.lineItems.digitalItems).forEach((function(t){var n;e[t.id]=(n=t,["fb","tw","gp"].reduce((function(t,e){var r=n.socialMedia&&(0,y.find)(n.socialMedia,(function(t){return t.code===e}));return r?(t[e]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},t):t}),{}))})),e}function Ki(t,e){return{description:t.description,module:t.type,price:t.cost,id:t.id,selected:e,isRecommended:t.isRecommended,imageUrl:t.imageUrl,transitTime:t.transitTime}}n(88720);const Zi=function(){function t(){this._cardExpiryFormatter=new Fi,this._cardNumberFormatter=new Bi}return t.prototype.transform=function(t,e){var n,r=e.billingAddress.getBillingAddress(),i=e.checkout.getCheckout(),a=e.customer.getCustomer(),u=e.order.getOrder(),s=e.paymentMethods.getPaymentMethod(t.methodId,t.gatewayId),c=this._mapShippingAddress(e,s),d=e.consignments.getConsignments(),l=e.consignments.getShippingOption(),f=e.config.getStoreConfig(),p=e.config.getContextConfig(),h=e.instruments.getInstrumentsMeta(),m=e.paymentMethods.getPaymentMethodsMeta(),v=e.order.getOrderMeta(),g=a&&r&&Ui(a,r),_=h&&t.paymentData&&(_i(t.paymentData)||(n=t.paymentData.formattedPayload)&&("string"==typeof n.bigpay_token||Boolean(n.bigpay_token&&n.bigpay_token.token)))?e.payment.getPaymentToken()+", "+h.vaultAccessToken:e.payment.getPaymentToken();if(!_)throw new kn(xn.MissingPaymentToken);return{additionalAction:t.additionalAction,authToken:_,customer:g,billingAddress:r&&xi(r),shippingAddress:c&&xi(c,d),shippingOption:l&&Ki(l,!0),cart:i&&zi(i),order:u&&Gi(u,v),orderMeta:v,payment:t.paymentData,paymentMethod:s&&this._transformPaymentMethod(s),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},m),{geoCountryCode:p&&p.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:(0,y.pick)(f&&f.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},t.prototype.transformWithHostedFormData=function(t,e,n){var r=e.additionalAction,i=e.authToken,a=e.checkout,u=e.config,s=e.order,c=e.orderMeta,d=e.payment,l=void 0===d?{}:d,f=e.paymentMethod,p=e.paymentMethodMeta,h=a&&a.consignments[0],m=h&&h.shippingAddress,v=h&&h.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:f&&this._transformPaymentMethod(f),customer:s&&s.billingAddress&&a&&Ui(a.customer,s.billingAddress),billingAddress:s&&s.billingAddress&&xi(s.billingAddress),shippingAddress:m&&a&&xi(m,a.consignments),shippingOption:v&&Ki(v,!0),cart:a&&zi(a),order:s&&Gi(s,c),orderMeta:c,payment:this._transformHostedInputValues(t,l,n),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},p),{geoCountryCode:u&&u.context.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:u&&(0,y.pick)(u.storeConfig.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},t.prototype._transformPaymentMethod=function(t){return"multi-option"!==t.method||t.gateway?t.initializationData&&t.initializationData.gateway?(0,o.__assign)((0,o.__assign)({},t),{id:t.initializationData.gateway}):t.id===ji.BRAINTREE_VENMO?(0,o.__assign)((0,o.__assign)({},t),{id:ji.BRAINTREE_PAYPAL}):t:(0,o.__assign)((0,o.__assign)({},t),{gateway:t.id})},t.prototype._transformHostedInputValues=function(t,e,n){return"instrumentId"in e?(0,o.__assign)((0,o.__assign)({},e),{ccCvv:t.cardCodeVerification,ccNumber:t.cardNumberVerification&&this._cardNumberFormatter.unformat(t.cardNumberVerification),hostedFormNonce:n}):(0,o.__assign)((0,o.__assign)({},e),{ccCvv:t.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(t.cardExpiry||""),ccName:t.cardName||"",ccNumber:this._cardNumberFormatter.unformat(t.cardNumber||""),hostedFormNonce:n})},t.prototype._mapShippingAddress=function(t,e){var n,r,i,o;if(e){var a=null===(r=null===(n=e.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,u=null===(o=null===(i=e.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,s=t.consignments.getConsignments(),c=null==s?void 0:s.every((function(t){return t.selectedPickupOption}));if(a&&c&&"none"===u)return}return t.shippingAddress.getShippingAddress()},t}();var $i;function Ji(t){return Ji="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ji(t)}!function(t){t.AvailableShippingOptions="consignments.availableShippingOptions",t.PhysicalItemsCategoryNames="cart.lineItems.physicalItems.categoryNames",t.DigitalItemsCategoryNames="cart.lineItems.digitalItems.categoryNames"}($i||($i={}));const Qi=function(){function t(t,e){this._consignmentRequestSender=t,this._checkoutRequestSender=e}return t.prototype.unassignItemsByAddress=function(t,e){var n=this;return function(r){var i=r.getState();if(!i.checkout.getCheckout())throw new kn(xn.MissingCheckout);var o=n._consignmentHasAddress(t)?t.address:t.shippingAddress,a=i.consignments.getConsignmentByAddress(o);if(!a)throw new Yr("No consignment found for the specified address");var u=n._removeLineItems(t.lineItems,a,i.cart.getCart());return u.length?n.updateConsignment({id:a.id,address:o,lineItems:u},e)(r):n.deleteConsignment(a.id,e)(r)}},t.prototype.assignItemsByAddress=function(t,e){var n=this;return function(r){var i=r.getState(),o=n._consignmentHasAddress(t)?t.address:t.shippingAddress,a=i.consignments.getConsignmentByAddress(o);return n._createOrUpdateConsignment({id:a&&a.id,address:o,lineItems:n._addLineItems(t.lineItems,a,i.cart.getCart())},e)(r)}},t.prototype.selectShippingOption=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState(),u=o.checkout.getCheckout(),s=o.consignments.getConsignments();if(!u)throw new kn(xn.MissingCheckout);if(!s||!s.length)throw new kn(xn.MissingConsignments);var c={id:s[0].id,shippingOptionId:t},d={id:s[0].id};i.next((0,a.PH)(Y.UpdateShippingOptionRequested,void 0,d)),n._consignmentRequestSender.updateConsignment(u.id,c,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.UpdateShippingOptionSucceeded,e,d)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.UpdateShippingOptionFailed,t,d))}))}))}},t.prototype.loadShippingOptions=function(t){var e=this;return function(n){return Jn.y.create((function(r){var i=n.getState().checkout.getCheckout();if(!i)throw new kn(xn.MissingCheckout);r.next((0,a.PH)(Y.LoadShippingOptionsRequested)),e._checkoutRequestSender.loadCheckout(i.id,(0,o.__assign)((0,o.__assign)({},t),{params:{include:[$i.AvailableShippingOptions]}})).then((function(t){var e=t.body;r.next((0,a.PH)(Y.LoadShippingOptionsSucceeded,e)),r.complete()})).catch((function(t){r.error((0,a.bR)(Y.LoadShippingOptionsFailed,t))}))}))}},t.prototype.updateAddress=function(t,e){var n=this;return function(r){var i=n._getUpdateAddressRequestBody(t,r),o=r.getState().consignments.getConsignments();return o&&o.length&&(i.id=o[0].id),n._createOrUpdateConsignment(i,e)(r)}},t.prototype.createConsignments=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new kn(xn.MissingCheckout);i.next((0,a.PH)(Y.CreateConsignmentsRequested)),n._consignmentRequestSender.createConsignments(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.CreateConsignmentsSucceeded,e)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.CreateConsignmentsFailed,t))}))}))}},t.prototype.updateConsignment=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new kn(xn.MissingCheckout);var u={id:t.id};i.next((0,a.PH)(Y.UpdateConsignmentRequested,void 0,u)),n._consignmentRequestSender.updateConsignment(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.UpdateConsignmentSucceeded,e,u)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.UpdateConsignmentFailed,t,u))}))}))}},t.prototype.deleteConsignment=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout(),u={id:t};if(!o||!o.id)throw new kn(xn.MissingCheckout);i.next((0,a.PH)(Y.DeleteConsignmentRequested,void 0,u)),n._consignmentRequestSender.deleteConsignment(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.DeleteConsignmentSucceeded,e,u)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.DeleteConsignmentFailed,t,u))}))}))}},t.prototype.updateShippingOption=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new kn(xn.MissingCheckout);var u={id:t.id};i.next((0,a.PH)(Y.UpdateShippingOptionRequested,void 0,u)),n._consignmentRequestSender.updateConsignment(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.UpdateShippingOptionSucceeded,e,u)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.UpdateShippingOptionFailed,t,u))}))}))}},t.prototype._createOrUpdateConsignment=function(t,e){var n=this;return function(r){var i=r.getState().checkout.getCheckout();if(!i||!i.id)throw new kn(xn.MissingCheckout);return n._isUpdateConsignmentRequest(t)?n.updateConsignment(t,e)(r):n.createConsignments([t],e)(r)}},t.prototype._getUpdateAddressRequestBody=function(t,e){var n=e.getState().cart.getCart();if(!n)throw new kn(xn.MissingCart);var r=n.lineItems,i=r.physicalItems,a=r.customItems,u=void 0===a?[]:a;return{address:t,lineItems:(0,o.__spreadArrays)(i,u).map((function(t){return{itemId:t.id,quantity:t.quantity}}))}},t.prototype._removeLineItems=function(t,e,n){if(!n)throw new kn(xn.MissingCart);return this._hydrateLineItems(e.lineItemIds,n).map((function(e){var n=(0,y.find)(t,(function(t){return t.itemId===e.itemId}));return(0,o.__assign)((0,o.__assign)({},e),{quantity:n?e.quantity-n.quantity:e.quantity})})).filter((function(t){return t.quantity>0}))},t.prototype._addLineItems=function(t,e,n){if(!e)return t;if(!n)throw new kn(xn.MissingCart);return t.concat(this._hydrateLineItems(e.lineItemIds,n)).filter((function(t){return t.quantity>0}))},t.prototype._hydrateLineItems=function(t,e){return t.map((function(t){var n=(0,y.find)(e.lineItems.physicalItems,(function(e){return e.id===t}));return{itemId:t,quantity:n?n.quantity:0}}))},t.prototype._isUpdateConsignmentRequest=function(t){return!!t.id},t.prototype._consignmentHasAddress=function(t){return"object"===Ji(t)&&"address"in t},t}();var Xi=["consignments.availableShippingOptions","cart.lineItems.physicalItems.options","cart.lineItems.digitalItems.options","customer","promotions.banners"];const to=function(){function t(t){this._requestSender=t}return t.prototype.createConsignments=function(t,e,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,u=(void 0===a?{}:a).include,s="/api/storefront/checkouts/"+t+"/consignments",c=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post(s,{body:e,params:{include:Sr(Xi,u)},headers:c,timeout:i})},t.prototype.updateConsignment=function(t,e,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,u=(void 0===a?{}:a).include,s=e.id,c=(0,o.__rest)(e,["id"]),d="/api/storefront/checkouts/"+t+"/consignments/"+s,l=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.put(d,{body:c,params:{include:Sr(Xi,u)},headers:l,timeout:i})},t.prototype.deleteConsignment=function(t,e,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+t+"/consignments/"+e,a=(0,o.__assign)({Accept:nr.JsonV1},ir),u=br(Xi);return this._requestSender.delete(i,{params:{include:u},headers:a,timeout:r})},t}(),eo=function(){function t(t,e){this._googleRecaptcha=t,this._requestSender=e}return t.prototype.initialize=function(t){var e=this;return function(n){return(0,sr.z)((0,cr.of)((0,a.PH)(bn.InitializeRequested,void 0)),(0,dr.P)((function(){return(0,o.__awaiter)(e,void 0,void 0,(function(){var e,r,i,u,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return e=t?t.containerId:"spamProtectionContainer",t||document.getElementById(e)||((r=document.createElement("div")).setAttribute("id",e),document.body.appendChild(r)),i=n.getState(),u=i.config.getStoreConfigOrThrow(),s=u.checkoutSettings.googleRecaptchaSitekey,[4,this._googleRecaptcha.load(e,s)];case 1:return o.sent(),[2,(0,a.PH)(bn.InitializeSucceeded)]}}))}))}))).pipe((0,A.K)((function(t){return pr(bn.InitializeFailed,t)})))}},t.prototype.verifyCheckoutSpamProtection=function(){var t=this;return function(e){return(0,dr.P)((function(){var n=e.getState().checkout.getCheckout();if(!n)throw new kn(xn.MissingCheckout);return(0,sr.z)((0,cr.of)((0,a.PH)(bn.VerifyCheckoutRequested)),(0,P.D)(t.execute()(e)).pipe((0,xr.w)((function(e){return kr(e)&&e.payload?(0,P.D)(t._requestSender.validate(n.id,e.payload.token)).pipe((0,xr.w)((function(t){var n=t.body;return(0,sr.z)((0,cr.of)(e),(0,cr.of)((0,a.PH)(bn.VerifyCheckoutSucceeded,n)))}))):(0,cr.of)(e)})))).pipe((0,A.K)((function(t){return pr(bn.VerifyCheckoutFailed,t)})))}))}},t.prototype.execute=function(){var t=this;return function(e){return(0,sr.z)((0,cr.of)((0,a.PH)(bn.ExecuteRequested)),t.initialize()(e),t._googleRecaptcha.execute().pipe((0,Vr.q)(1)).pipe((0,xr.w)((function(e){var n=e.error,r=e.token;return(0,o.__awaiter)(t,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){if(n instanceof Qr)throw n;if(n||!r)throw new ui;return[2,(0,a.PH)(bn.ExecuteSucceeded,{token:r})]}))}))})))).pipe((0,A.K)((function(t){return pr(bn.ExecuteFailed,t)})))}},t}(),no=function(){function t(t){this._requestSender=t}return t.prototype.validate=function(t,e,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+t+"/spam-protection",a=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post(i,{body:{token:e},headers:a,timeout:r})},t}(),ro=function(){function t(t){this._storeCreditRequestSender=t}return t.prototype.applyStoreCredit=function(t,e){var n=this;return function(r){return(0,sr.z)((0,cr.of)((0,a.PH)(dn.ApplyStoreCreditRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n,i,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=r.getState(),!(i=n.checkout.getCheckout()))throw new kn(xn.MissingCheckout);return[4,t?this._storeCreditRequestSender.applyStoreCredit(i.id,e):this._storeCreditRequestSender.removeStoreCredit(i.id,e)];case 1:return u=o.sent().body,[2,(0,a.PH)(dn.ApplyStoreCreditSucceeded,u)]}}))}))}))).pipe((0,A.K)((function(t){return pr(dn.ApplyStoreCreditFailed,t)})))}},t}(),io=function(){function t(t){this._requestSender=t}return t.prototype.applyStoreCredit=function(t,e){var n=(void 0===e?{}:e).timeout,r="/api/storefront/checkouts/"+t+"/store-credit",i=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:br(wr)}})},t.prototype.removeStoreCredit=function(t,e){var n=(void 0===e?{}:e).timeout,r="/api/storefront/checkouts/"+t+"/store-credit",i=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:br(wr)}})},t}(),oo=function(t){function e(e){var n=t.call(this,e)||this;return n.name="UpdateSubscriptionsError",n.type="update_subscriptions",n}return(0,o.__extends)(e,t),e}(p),ao=function(){function t(t){this._subscriptionsRequestSender=t}return t.prototype.updateSubscriptions=function(t,e){var n=this;return(0,sr.z)((0,cr.of)((0,a.PH)(E.UpdateSubscriptionsRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._subscriptionsRequestSender.updateSubscriptions(t,e)];case 1:return n=r.sent().body,[2,(0,a.PH)(E.UpdateSubscriptionsSucceeded,n)]}}))}))}))).pipe((0,A.K)((function(t){return pr(E.UpdateSubscriptionsFailed,new oo(t))})))},t}(),uo=function(){function t(t){this._requestSender=t}return t.prototype.updateSubscriptions=function(t,e){var n=(void 0===e?{}:e).timeout,r=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post("/api/storefront/subscriptions",{body:t,headers:r,timeout:n})},t}();function so(t){return so="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},so(t)}var co=(0,y.memoize)((function(t){return Array.isArray(t)?t.map((function(t){return lo(t)})):F(t)?Object.keys(t).reduce((function(e,n){var r;return(0,o.__assign)((0,o.__assign)({},e),((r={})[n]=lo(t[n]),r))}),{}):t}));co.cache=new WeakMap;var lo=function(t){return"object"===so(t)&&null!==t?co(t):t};function fo(t){return function(){for(var e=[],n=0;n55?55:t<25?25:t}function Pa(t){var e=t.billingAddress,n=t.email,r=t.firstName,i=t.lastName,o=t.phone,a=t.shippingAddress,u=e||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==u?void 0:u.line1,address_line_2:null==u?void 0:u.line2,city:null==u?void 0:u.city,state:null==u?void 0:u.state,country_code:null==u?void 0:u.countryCode,postal_code:null==u?void 0:u.postalCode}}function Aa(t){var e=t.email,n=t.phone,r=t.shippingAddress,i=((null==r?void 0:r.recipientName)||"").split(" ");return{email:e,first_name:i[0]||"",last_name:i[1]||"",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}const Oa=function(){function t(t,e,n,r,i,o){this._store=t,this._checkoutActionCreator=e,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return t.prototype.initialize=function(t){var e,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u,s,c,d,l,f,p,h,y,m=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=t.braintreepaypal,i=t.containerId,a=t.methodId,s=(u=r||{}).messagingContainerId,c=u.onError,!a)throw new Yr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Yr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Yr('Unable to initialize payment because "options.braintreepaypal" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(d=this._store.getState(),l=d.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Yr('Unable to initialize payment because "options.braintreepaypal.currencyCode" argument is not provided.');return f=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:d=o.sent(),l=d.paymentMethods.getPaymentMethodOrThrow(a),f=d.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!l.clientToken)throw new kn(xn.MissingPaymentMethod);return p={currency:f,intent:null===(e=l.initializationData)||void 0===e?void 0:e.intent,isCreditEnabled:null===(n=l.initializationData)||void 0===n?void 0:n.isCreditEnabled},h=function(t){m._renderPayPalComponents(t,r,i,a,Boolean(l.config.testMode))},y=function(t){return m._handleError(t,i,s,c)},this._braintreeSDKCreator.initialize(l.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(p,h,y)];case 4:return o.sent(),[2]}}))}))},t.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},t.prototype._renderPayPalComponents=function(t,e,n,r,i){var o=e.messagingContainerId;this._renderPayPalMessages(o),this._renderPayPalButton(t,e,n,r,i)},t.prototype._renderPayPalButton=function(t,e,n,r,i){var o=this,a=e.style,u=e.shouldProcessPayment,s=e.onAuthorizeError,c=this._window.paypal,d=null==c?void 0:c.FUNDING.PAYPAL;if(c&&d){var l=a?Ea(a):{},f=c.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:d,style:l,createOrder:function(){return o._setupPayment(t,e,r)},onApprove:function(e){return o._tokenizePayment(e,t,r,u,s)}});f.isEligible()&&f.render("#"+n)}else this._removeElement(n)},t.prototype._renderPayPalMessages=function(t){var e=t&&Boolean(document.getElementById(t)),n=this._window.paypal;if(n&&e){var r=this._store.getState().cart.getCartOrThrow();n.Messages({amount:r.cartAmount,placement:"cart"}).render("#"+t)}else this._removeElement(t)},t.prototype._setupPayment=function(t,e,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,u,s,c,d,l,f,p,h,y,m,v;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=e.buyNowInitializeOptions,u=e.shippingAddress,s=e.onPaymentError,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:a})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return l=c.customer.getCustomer(),f=c.paymentMethods.getPaymentMethodOrThrow(n),p=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,h=null!==(r=e.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,y=u||(null==l?void 0:l.addresses[0]),m=y?Ca(y):void 0,[4,t.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:m,amount:p,currency:h,offerCredit:!1,intent:null===(i=f.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw v=o.sent(),s&&s(v),v;case 8:return[2]}}))}))},t.prototype._createBuyNowCart=function(t){var e=t.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new kn(xn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._tokenizePayment=function(t,e,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var u,s,c,d,l,f;return(0,o.__generator)(this,(function(p){switch(p.label){case 0:return p.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return u=p.sent().deviceData,[4,e.tokenizePayment(t)];case 2:return s=p.sent(),c=s.details,d=s.nonce,l=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:u,billing_address:JSON.stringify(Pa(c)),shipping_address:JSON.stringify(Aa(c))},l&&{cart_id:l})),[2,s];case 3:throw f=p.sent(),i&&i(f),f;case 4:return[2]}}))}))},t.prototype._handleError=function(t,e,n,r){this._removeElement(e),this._removeElement(n),r&&r(t)},t.prototype._removeElement=function(t){var e=t&&document.getElementById(t);e&&e.remove()},t}();var Ta,xa,Ra,ka,Ma;!function(t){t.HORIZONTAL="horizontal",t.VERTICAL="vertical"}(Ta||(Ta={})),function(t){t.SMALL="small",t.MEDIUM="medium",t.LARGE="large",t.RESPONSIVE="responsive"}(xa||(xa={})),function(t){t.GOLD="gold",t.BLUE="blue",t.SIlVER="silver",t.BLACK="black"}(Ra||(Ra={})),function(t){t.CHECKOUT="checkout",t.PAY="pay",t.BUYNOW="buynow",t.PAYPAL="paypal",t.CREDIT="credit"}(ka||(ka={})),function(t){t.PILL="pill",t.RECT="rect"}(Ma||(Ma={}));const Na=function(){function t(t,e,n,r,i,o){this._store=t,this._checkoutActionCreator=e,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return t.prototype.initialize=function(t){var e,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u,s,c,d,l,f,p=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=t.braintreepaypalcredit,i=t.containerId,!(a=t.methodId))throw new Yr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Yr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Yr('Unable to initialize payment because "options.braintreepaypalcredit" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(u=this._store.getState(),s=u.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Yr('Unable to initialize payment because "options.braintreepaypalcredit.currencyCode" argument is not provided.');return c=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:u=o.sent(),s=u.paymentMethods.getPaymentMethodOrThrow(a),c=u.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!s.clientToken)throw new kn(xn.MissingPaymentMethod);return d={currency:c,intent:null===(e=s.initializationData)||void 0===e?void 0:e.intent,isCreditEnabled:null===(n=s.initializationData)||void 0===n?void 0:n.isCreditEnabled},l=function(t){return p._renderPayPalButton(t,r,i,a,Boolean(s.config.testMode))},f=function(t){return p._handleError(t,i,r.onError)},this._braintreeSDKCreator.initialize(s.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(d,l,f)];case 4:return o.sent(),[2]}}))}))},t.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},t.prototype._renderPayPalButton=function(t,e,n,r,i){var a=this,u=e.style,s=e.shouldProcessPayment,c=e.onAuthorizeError,d=this._window.paypal,l=!1;if(d){var f=[d.FUNDING.PAYLATER,d.FUNDING.CREDIT],p=u?Ea(u):{};f.forEach((function(u){var f=u===d.FUNDING.CREDIT?(0,o.__assign)({label:ka.CREDIT},p):p;if(!l){var h=d.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:u,style:f,createOrder:function(){return a._setupPayment(t,e,r)},onApprove:function(e){return a._tokenizePayment(e,t,r,s,c)}});h.isEligible()&&(h.render("#"+n),l=!0)}}))}d&&l||this._removeElement(n)},t.prototype._setupPayment=function(t,e,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,u,s,c,d,l,f,p,h,y,m,v;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=e.onPaymentError,u=e.shippingAddress,s=e.buyNowInitializeOptions,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:s})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return l=c.customer.getCustomer(),f=c.paymentMethods.getPaymentMethodOrThrow(n),p=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,h=null!==(r=e.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,y=u||(null==l?void 0:l.addresses[0]),m=y?Ca(y):void 0,[4,t.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:m,amount:p,currency:h,offerCredit:!0,intent:null===(i=f.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw v=o.sent(),a&&a(v),v;case 8:return[2]}}))}))},t.prototype._createBuyNowCart=function(t){var e=t.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new kn(xn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._tokenizePayment=function(t,e,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var u,s,c,d,l,f;return(0,o.__generator)(this,(function(p){switch(p.label){case 0:return p.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return u=p.sent().deviceData,[4,e.tokenizePayment(t)];case 2:return s=p.sent(),c=s.details,d=s.nonce,l=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:u,billing_address:JSON.stringify(Pa(c)),shipping_address:JSON.stringify(Aa(c))},l&&{cart_id:l})),[2,s];case 3:throw f=p.sent(),i&&i(f),f;case 4:return[2]}}))}))},t.prototype._handleError=function(t,e,n){this._removeElement(e),n&&n(t)},t.prototype._removeElement=function(t){var e=t&&document.getElementById(t);e&&e.remove()},t}();var Da={backgroundColor:"#3D95CE",backgroundPosition:"50% 50%",backgroundSize:"80px auto",backgroundImage:'url("/app/assets/img/payment-providers/venmo-logo-white.svg")',backgroundRepeat:"no-repeat",borderRadius:"4px",cursor:"pointer",transition:"0.2s ease",minHeight:"40px",minWidth:"150px",height:"100%",width:"100%"};const La=function(){function t(t,e,n,r,i){this._store=t,this._paymentMethodActionCreator=e,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._onError=y.noop}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.braintreevenmo,n=t.containerId,!(r=t.methodId))throw new Yr('Unable to initialize payment because "options.methodId" argument is not provided.');return[4,this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(r))];case 1:if(i=o.sent(),!(a=i.paymentMethods.getPaymentMethodOrThrow(r)).clientToken)throw new kn(xn.MissingPaymentMethod);if(!n)throw new Yr('Unable to initialize payment because "options.containerId" argument is not provided.');return this._onError=(null==e?void 0:e.onError)||this._handleError,this._braintreeSDKCreator.initialize(a.clientToken),[4,this._braintreeSDKCreator.getVenmoCheckout((function(t){return u._handleInitializationVenmoSuccess(t,n,null==e?void 0:e.buyNowInitializeOptions)}),(function(t){return u._handleInitializationVenmoError(t,n)}))];case 2:return o.sent(),[2]}}))}))},t.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},t.prototype._handleError=function(t){throw new Error(t.message)},t.prototype._handleInitializationVenmoSuccess=function(t,e,n){return this._renderVenmoButton(t,e,n)},t.prototype._handleInitializationVenmoError=function(t,e){return this._removeVenmoContainer(e),this._onError(t)},t.prototype._removeVenmoContainer=function(t){var e=document.getElementById(t);e&&e.remove()},t.prototype._renderVenmoButton=function(t,e,n){var r=this,i=document.getElementById(e);if(!i)throw new Yr("Unable to create wallet button without valid container ID.");i.setAttribute("aria-label","Venmo"),Object.assign(i.style,Da),i.addEventListener("click",(function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var e,r=this;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return i.setAttribute("disabled","true"),[4,this._createBuyNowCart(n)];case 1:return e=a.sent(),t.tokenize&&t.tokenize((function(t,n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return i.removeAttribute("disabled"),t?[2,this._onError(t)]:[4,this._handlePostForm(n,null==e?void 0:e.id)];case 1:return r.sent(),[2]}}))}))})),[2]}}))}))})),i.addEventListener("mouseenter",(function(){i.style.backgroundColor="#0a7fc2"})),i.addEventListener("mouseleave",(function(){i.style.backgroundColor=Da.backgroundColor}))},t.prototype._createBuyNowCart=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new kn(xn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._handlePostForm=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return[4,this._braintreeSDKCreator.getDataCollector()];case 1:return n=a.sent().deviceData,r=t.nonce,i=t.details,this._formPoster.postForm("/checkout.php",(0,o.__assign)({nonce:r,provider:ji.BRAINTREE_VENMO,payment_type:"paypal",device_data:n,action:"set_external_checkout",billing_address:JSON.stringify(Pa(i)),shipping_address:JSON.stringify(Aa(i))},e&&{cart_id:e})),[2]}}))}))},t}();const za=function(t){function e(e){var n=t.call(this,e||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(e,t),e}(u);var ja;!function(t){t[t.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",t[t.CustomerNotInitialized=1]="CustomerNotInitialized",t[t.PaymentNotInitialized=2]="PaymentNotInitialized",t[t.ShippingNotInitialized=3]="ShippingNotInitialized",t[t.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(ja||(ja={}));const Ua=function(t){function e(e){var n=t.call(this,function(t){switch(t){case ja.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case ja.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case ja.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case ja.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(e))||this;return n.subtype=e,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(e,t),e}(u);var Fa;!function(t){t[t.MissingBillingAddress=0]="MissingBillingAddress",t[t.MissingCart=1]="MissingCart",t[t.MissingCheckout=2]="MissingCheckout",t[t.MissingConsignments=3]="MissingConsignments",t[t.MissingCustomer=4]="MissingCustomer",t[t.MissingCheckoutConfig=5]="MissingCheckoutConfig",t[t.MissingOrder=6]="MissingOrder",t[t.MissingOrderConfig=7]="MissingOrderConfig",t[t.MissingOrderId=8]="MissingOrderId",t[t.MissingPayment=9]="MissingPayment",t[t.MissingPaymentId=10]="MissingPaymentId",t[t.MissingPaymentInstrument=11]="MissingPaymentInstrument",t[t.MissingPaymentMethod=12]="MissingPaymentMethod",t[t.MissingPaymentRedirectUrl=13]="MissingPaymentRedirectUrl",t[t.MissingPaymentStatus=14]="MissingPaymentStatus",t[t.MissingPaymentToken=15]="MissingPaymentToken",t[t.MissingShippingAddress=16]="MissingShippingAddress"}(Fa||(Fa={}));const qa=function(t){function e(e){var n=t.call(this,function(t){switch(t){case Fa.MissingBillingAddress:return"Unable to proceed because billing address data is unavailable.";case Fa.MissingCart:return"Unable to proceed because cart data is unavailable.";case Fa.MissingConsignments:return"Unable to proceed because consignments data is unavailable.";case Fa.MissingCheckout:return"Unable to proceed because checkout data is unavailable.";case Fa.MissingCustomer:return"Unable to proceed because customer data is unavailable.";case Fa.MissingCheckoutConfig:case Fa.MissingOrderConfig:return"Unable to proceed because configuration data is unavailable.";case Fa.MissingOrder:return"Unable to proceed because order data is unavailable.";case Fa.MissingOrderId:return"Unable to proceed because order ID is unavailable or not generated yet.";case Fa.MissingPayment:return"Unable to proceed because payment data is unavailable.";case Fa.MissingPaymentToken:return"Unable to proceed because the token required to submit a payment is missing.";case Fa.MissingPaymentMethod:return"Unable to proceed because payment method data is unavailable or not properly configured.";case Fa.MissingShippingAddress:return"Unable to proceed because shipping address data is unavailable.";default:return"Unable to proceed because the required data is unavailable."}}(e))||this;return n.subtype=e,n.name="MissingDataError",n.type="missing_data",n}return(0,o.__extends)(e,t),e}(u),Ba=function(){function t(t,e,n,r,i){this._store=t,this._formPoster=e,this._checkoutActionCreator=n,this._googlePayPaymentProcessor=r,this._cartRequestSender=i}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.containerId,n=t.methodId,r=t.currencyCode,i=this._getGooglePayOptions(t),a=i.buyNowInitializeOptions,!e||!n)throw new za('Unable to proceed because "containerId" argument is not provided.');if(u=this._store.getState(),s=u.paymentMethods.getPaymentMethod(n),c=((null==s?void 0:s.config)||{}).testMode,this._methodId=n,this._isBuyNowFlow=!!a,!this._isBuyNowFlow)return[3,2];if(!r)throw new za('Unable to initialize payment because "options.currencyCode" argument is not provided.');return d=i.buyNowInitializeOptions,this._googlePayPaymentProcessor.updateBuyNowFlowFlag(this._isBuyNowFlow),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId(),this._getGooglePayClientOptions(r,c,d))];case 1:return o.sent(),[3,5];case 2:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 3:return o.sent(),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId())];case 4:o.sent(),o.label=5;case 5:return this._walletButton=this._createSignInButton(e,i,r),[2]}}))}))},t.prototype.deinitialize=function(){return this._walletButton&&this._walletButton.parentNode&&(this._walletButton.parentNode.removeChild(this._walletButton),this._walletButton=void 0),this._googlePayPaymentProcessor.deinitialize()},t.prototype._getGooglePayClientOptions=function(t,e,n){var r=this;return{environment:e?"TEST":"PRODUCTION",paymentDataCallbacks:{onPaymentDataChanged:function(e){var i=e.callbackTrigger;return(0,o.__awaiter)(r,void 0,void 0,(function(){var e,r,a,u,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(i!==Wo.INITIALIZE)return[2];o.label=1;case 1:return o.trys.push([1,5,,6]),e=this,[4,this._createBuyNowCart(n)];case 2:return e._buyNowCart=o.sent(),this._buyNowCart?(r=this._buyNowCart,a=r.id,u=r.cartAmount,[4,this._store.dispatch(this._checkoutActionCreator.loadCheckout(a))]):[3,4];case 3:return o.sent(),[2,{newTransactionInfo:{currencyCode:t,totalPrice:String(u),totalPriceStatus:Ko.FINAL}}];case 4:return[3,6];case 5:throw s=o.sent(),new ga(s);case 6:return[2]}}))}))}}}},t.prototype._createSignInButton=function(t,e,n){var r=this,i=document.getElementById(t),o=e.buttonType,a=e.buttonColor;if(!i)throw new za("Unable to create sign-in button without valid container ID.");var u=this._googlePayPaymentProcessor.createButton((function(t){return r._handleWalletButtonClick(t,n)}),o,a);return i.appendChild(u),u},t.prototype._getMethodId=function(){if(!this._methodId)throw new Ua(ja.PaymentNotInitialized);return this._methodId},t.prototype._getGooglePayOptions=function(t){if(t.methodId===ji.GOOGLEPAY_ADYENV2&&t.googlepayadyenv2)return t.googlepayadyenv2;if(t.methodId===ji.GOOGLEPAY_ADYENV3&&t.googlepayadyenv3)return t.googlepayadyenv3;if(t.methodId===ji.GOOGLEPAY_AUTHORIZENET&&t.googlepayauthorizenet)return t.googlepayauthorizenet;if(t.methodId===ji.GOOGLEPAY_BNZ&&t.googlepaybnz)return t.googlepaybnz;if(t.methodId===ji.GOOGLEPAY_BRAINTREE&&t.googlepaybraintree)return t.googlepaybraintree;if(t.methodId===ji.GOOGLEPAY_CHECKOUTCOM&&t.googlepaycheckoutcom)return t.googlepaycheckoutcom;if(t.methodId===ji.GOOGLEPAY_CYBERSOURCEV2&&t.googlepaycybersourcev2)return t.googlepaycybersourcev2;if(t.methodId===ji.GOOGLEPAY_ORBITAL&&t.googlepayorbital)return t.googlepayorbital;if(t.methodId===ji.GOOGLEPAY_STRIPE&&t.googlepaystripe)return t.googlepaystripe;if(t.methodId===ji.GOOGLEPAY_STRIPEUPE&&t.googlepaystripeupe)return t.googlepaystripeupe;if(t.methodId===ji.GOOGLEPAY_WORLDPAYACCESS&&t.googlepayworldpayaccess)return t.googlepayworldpayaccess;throw new za},t.prototype._createBuyNowCart=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new qa(Fa.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._handleWalletButtonClick=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:t.preventDefault(),i.label=1;case 1:return i.trys.push([1,7,,8]),this._isBuyNowFlow&&e&&this._googlePayPaymentProcessor.updatePaymentDataRequest({transactionInfo:{currencyCode:e,totalPrice:"0",totalPriceStatus:Ko.ESTIMATED},callbackIntents:[Zo.OFFER]}),[4,this._googlePayPaymentProcessor.displayWallet()];case 2:return n=i.sent(),[4,this._googlePayPaymentProcessor.handleSuccess(n)];case 3:return i.sent(),xo(this._store.getState().cart.getCartOrThrow())>0&&n.shippingAddress?[4,this._googlePayPaymentProcessor.updateShippingAddress(n.shippingAddress)]:[3,5];case 4:i.sent(),i.label=5;case 5:return[4,this._onPaymentSelectComplete()];case 6:return i.sent(),[3,8];case 7:if((r=i.sent())&&"CANCELED"!==r.message)throw r;return[3,8];case 8:return[2]}}))}))},t.prototype._onPaymentSelectComplete=function(){var t,e=null===(t=this._buyNowCart)||void 0===t?void 0:t.id;this._formPoster.postForm("/checkout.php",(0,o.__assign)({headers:(0,o.__assign)({Accept:"text/html","Content-Type":"application/x-www-form-urlencoded"},ir)},e&&{action:"set_external_checkout",provider:this._methodId,cart_id:e}))},(0,o.__decorate)([Zr],t.prototype,"_handleWalletButtonClick",null),t}();var Ga={es:["es_es","es_mx","es_pe","es_co","es_ar","es_cl"],en:["en_us","en_gb","en_ca","en_es","en_fr","en_ie","en_sg","en_au","en_nz","en_my","en_hk","en_th","en_ae","en_sa","en_qa","en_kw","en_za"],pt:["pt_br"],zu:["zu_za"],ar:["ar_sa","ar_ae","ar_qa","ar_kw"],zh:["zh_sg","zh_hk"],ms:["ms_my"],uk:["uk_ua"],sv:["sv_se"],hr:["hr_hr"],pl:["pl_pl"],nl:["nl_be"],it:["it_it"],de:["de_de"],fr:["fr_fr","fr_ca"]};function Va(t){var e=t.replace("-","_").toLowerCase().split("_"),n=e[0],r=n+"_"+e[1],i=Ga[n];return i?i.indexOf(r)>-1?r:i[0]:"en_us"}const Ya=function(){function t(t,e,n,r){this._store=t,this._checkoutActionCreator=e,this._masterpassScriptLoader=n,this._locale=r}return t.prototype.initialize=function(t){var e=this,n=t.containerId,r=t.methodId;if(!n||!r)throw new Yr('Unable to proceed because "containerId" argument is not provided.');return this._methodId=r,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(t){var n=t.paymentMethods.getPaymentMethod(r);if(!n||!n.initializationData.checkoutId)throw new kn(xn.MissingPaymentMethod);var i={useMasterpassSrc:n.initializationData.isMasterpassSrcEnabled,language:Va(e._locale),testMode:n.config.testMode,checkoutId:n.initializationData.checkoutId};return e._masterpassScriptLoader.load(i)})).then((function(t){e._masterpassClient=t,e._signInButton=e._createSignInButton(n)}))},t.prototype.deinitialize=function(){return this._signInButton&&this._signInButton.parentNode&&(this._signInButton.removeEventListener("click",this._handleWalletButtonClick),this._signInButton.parentNode.removeChild(this._signInButton),this._signInButton=void 0),Promise.resolve()},t.prototype._createSignInButton=function(t){var e=document.getElementById(t),n=this._store.getState(),r=this._methodId?n.paymentMethods.getPaymentMethod(this._methodId):null,i=n.config.getStoreConfig();if(!e)throw new Error("Need a container to place the button");if(!r)throw new kn(xn.MissingPaymentMethod);if(!i)throw new Yr("Unable to retrieve store configuration");var o=document.createElement("input");if(o.type="image",r.initializationData.isMasterpassSrcEnabled){var a=r.config.testMode?"sandbox.":"",u=r.initializationData.checkoutId,s=["locale="+Va(this._locale),"paymentmethod=master,visa,amex,discover","checkoutid="+u];o.src=["https://"+a+"src.mastercard.com/assets/img/btn/src_chk_btn_126x030px.svg",s.join("&")].join("?")}else o.src="https://static.masterpass.com/dyn/img/btn/global/mp_chk_btn_160x037px.svg";return e.appendChild(o),o.addEventListener("click",this._handleWalletButtonClick),o},t.prototype._createMasterpassPayload=function(){var t=this._store.getState(),e=t.checkout.getCheckout(),n=this._methodId?t.paymentMethods.getPaymentMethod(this._methodId):null;if(!e)throw new kn(xn.MissingCheckout);if(!n)throw new kn(xn.MissingPaymentMethod);return{checkoutId:n.initializationData.checkoutId,allowedCardTypes:n.initializationData.allowedCardTypes,amount:e.cart.cartAmount.toString(),currency:e.cart.currency.code,cartId:e.cart.id,callbackUrl:("cart",window.location.origin+"/checkout.php?action=set_external_checkout&provider=masterpass&gateway=stripe&origin=cart")}},t.prototype._handleWalletButtonClick=function(){if(!this._masterpassClient)throw new ai(ni.CheckoutButtonNotInitialized);this._masterpassClient.checkout(this._createMasterpassPayload())},(0,o.__decorate)([Zr],t.prototype,"_handleWalletButtonClick",null),t}(),Ha=function(){function t(t,e,n,r,i){void 0===i&&(i=""),this._store=t,this._checkoutActionCreator=e,this._paypalScriptLoader=n,this._formPoster=r,this._host=i}return t.prototype.initialize=function(t){var e=this,n=t.paypal,r=this._store.getState(),i=this._paymentMethod=r.paymentMethods.getPaymentMethod(t.methodId);if(!n)throw new Yr;if(!i)throw new kn(xn.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then((function(r){var a,u,s;if(!i||!i.config.merchantId)throw new kn(xn.MissingPaymentMethod);var c=i.config.merchantId,d=i.config.testMode?"sandbox":"production",l=((a={})[d]=n.clientId,a),f=r.FUNDING.CREDIT||"credit",p=n.allowCredit?[f]:[],h=n.allowCredit?[]:[f];return r.Button.render({env:d,client:l,commit:n.shouldProcessPayment,funding:{allowed:p,disallowed:h},style:(0,o.__assign)((0,o.__assign)({shape:Ma.RECT},(0,y.pick)(n.style,"layout","color","label","shape","tagline","fundingicons")),{size:"paypalexpress"===i.id&&"small"===(null===(u=n.style)||void 0===u?void 0:u.size)?xa.RESPONSIVE:null===(s=n.style)||void 0===s?void 0:s.size}),payment:function(t,r){return e._setupPayment(c,r,n.onPaymentError)},onAuthorize:function(t,r){return e._tokenizePayment(t,r,n.shouldProcessPayment,n.onAuthorizeError)}},t.containerId)}))},t.prototype.deinitialize=function(){return this._paymentMethod=void 0,Promise.resolve()},t.prototype._setupPayment=function(t,e,n){var r=this;if(!e)throw new ai(ni.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(n){var i=n.cart.getCart(),a=i?i.id:"";return e.request.post(r._host+"/api/storefront/payment/paypalexpress",{merchantId:t,cartId:a},{headers:(0,o.__assign)({"X-API-INTERNAL":rr},ir)})})).then((function(t){return t.id})).catch((function(t){throw n&&n(t),t}))},t.prototype._tokenizePayment=function(t,e,n,r){var i=this;if(!this._paymentMethod)throw new ai(ni.CheckoutButtonNotInitialized);if(!e)throw new ai(ni.CheckoutButtonNotInitialized);if(!t.paymentID||!t.payerID)throw new kn(xn.MissingPayment);var o=this._paymentMethod.id;return e.payment.get(t.paymentID).then((function(e){i._formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:o,action:n?"process_payment":"set_external_checkout",paymentId:t.paymentID,payerId:t.payerID,payerInfo:JSON.stringify(e.payer.payer_info)})}))},t}();function Wa(){try{return"production"}catch(t){return"development"}}n(64701);const Ka=function(){function t(t){this._console=t}return t.prototype.log=function(){for(var t=[],e=0;e0}));a.length>1&&a[0].matches===a[1].matches&&"development"===Wa()&&Ja.warn("The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.");var u=a[0];if(u&&u.token)return u.token;if(this._useFallback){var s=null===(n=o.find((function(t){return t.default})))||void 0===n?void 0:n.token;if(s)return s}throw new Error("Unable to resolve to a registered token with the provided token.")},t}();function Xa(t,e){return Object.assign(t,{resolveIds:e})}const tu=function(t){function e(e){var n=t.call(this,e||"Payment process was cancelled.")||this;return n.name="PaymentMethodCancelledError",n.type="payment_cancelled",n}return(0,o.__extends)(e,t),e}(u);const eu=function(t){function e(e){var n=t.call(this,e||"An unexpected error has occurred during buy now cart creation process. Please try again later.")||this;return n.name="BuyNowCartCreationError",n.type="buy_now_cart_creation_error",n}return(0,o.__extends)(e,t),e}(u);function nu(t){if(!function(t){return"ApplePaySession"in t}(t))throw new Error("Apple pay is not supported")}const ru=function(){function t(){}return t.prototype.create=function(t){return nu(window),new ApplePaySession(1,t)},t}();var iu;!function(t){t.Subtotal="Subtotal",t.Shipping="Shipping"}(iu||(iu={}));const ou=function(){function t(t,e,n){this._requestSender=t,this._paymentIntegrationService=e,this._sessionFactory=n,this._onAuthorizeCallback=y.noop,this._subTotalLabel=iu.Subtotal,this._shippingLabel=iu.Shipping}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.methodId,n=t.containerId,r=t.applepay,nu(window),!e||!r)throw new qa(Fa.MissingPaymentMethod);return i=r.buttonClassName,a=r.onPaymentAuthorize,u=r.buyNowInitializeOptions,s=r.requiresShipping,this._requiresShipping=s,this._buyNowInitializeOptions=u,this._onAuthorizeCallback=a,u?[3,2]:[4,this._paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return[4,this._paymentIntegrationService.loadPaymentMethod(e)];case 3:return o.sent(),c=this._paymentIntegrationService.getState(),this._paymentMethod=c.getPaymentMethodOrThrow(e),[4,this._paymentIntegrationService.verifyCheckoutSpamProtection()];case 4:return o.sent(),this._applePayButton=this._createButton(n,i),this._applePayButton.addEventListener("click",this._handleWalletButtonClick.bind(this)),[2,Promise.resolve()]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype._createButton=function(t,e){void 0===e&&(e="apple-pay-checkout-button");var n=document.getElementById(t);if(!n)throw new za("Unable to create wallet button without valid container ID.");document.body.classList.add("apple-pay-supported");var r=document.createElement("div");return r.setAttribute("class",e),r.setAttribute("role","button"),r.setAttribute("aria-label","Apple Pay button"),n.appendChild(r),r},t.prototype._handleWalletButtonClick=function(t){var e;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,u,s,c,d,l,f,p,h;return(0,o.__generator)(this,(function(o){if(t.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new qa(Fa.MissingPaymentMethod);return this._buyNowInitializeOptions&&"function"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody?(n=this._paymentMethod.initializationData,r=n.countryCode,i=n.currencyCode,a=n.merchantCapabilities,u=n.supportedNetworks,s=n.storeName,p=this._getRequestWithEmptyTotal(r,i,u,a),this._requiresShipping&&(null===(e=p.requiredShippingContactFields)||void 0===e||e.push("postalAddress")),h=this._sessionFactory.create(p),this._handleApplePayEvents(h,this._paymentMethod,s),h.begin()):(c=this._paymentIntegrationService.getState(),d=c.getCartOrThrow(),l=c.getStoreConfigOrThrow(),f=c.getCheckoutOrThrow(),p=this._getBaseRequest(d,f,l,this._paymentMethod),h=this._sessionFactory.create(p),this._handleApplePayEvents(h,this._paymentMethod,l.storeProfile.storeName),h.begin()),[2]}))}))},t.prototype._getRequestWithEmptyTotal=function(t,e,n,r){return{countryCode:t,currencyCode:e,supportedNetworks:n,merchantCapabilities:r,total:{label:"",amount:"0",type:"pending"},requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"]}},t.prototype._getBaseRequest=function(t,e,n,r){var i,o=n.storeProfile,a=o.storeCountryCode,u=o.storeName,s=t.currency,c=s.code,d=s.decimalPlaces,l=r.initializationData,f=l.merchantCapabilities,p=l.supportedNetworks,h=t.lineItems.physicalItems.length>0,y={requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"],countryCode:a,currencyCode:c,merchantCapabilities:f,supportedNetworks:p,lineItems:[],total:h?{label:u,amount:""+e.grandTotal.toFixed(d),type:"pending"}:{label:u,amount:""+e.grandTotal.toFixed(d),type:"final"}};if(h)null===(i=y.requiredShippingContactFields)||void 0===i||i.push("postalAddress");else{var m=[{label:this._subTotalLabel,amount:""+e.subtotal.toFixed(d)}];e.taxes.forEach((function(t){return m.push({label:t.name,amount:""+t.amount.toFixed(d)})})),y.lineItems=m}return y},t.prototype._handleApplePayEvents=function(t,e,n){var r=this;t.onvalidatemerchant=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this._onValidateMerchant(e,n)];case 1:return r=i.sent().body,t.completeMerchantValidation(r),[3,3];case 2:throw i.sent(),new Error("Merchant validation failed");case 3:return[2]}}))}))},this._buyNowInitializeOptions&&!this._requiresShipping&&(t.onpaymentmethodselected=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return[4,this._createBuyNowCart()];case 1:return e.sent(),this._handlePaymentMethodSelected(t),[2]}}))}))}),t.onshippingcontactselected=function(e){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return this._buyNowInitializeOptions&&this._requiresShipping?[4,this._createBuyNowCart()]:[3,2];case 1:r.sent(),r.label=2;case 2:return[4,this._handleShippingContactSelected(t,n,e)];case 3:return r.sent(),[2]}}))}))},t.onshippingmethodselected=function(e){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._handleShippingMethodSelected(t,n,e)];case 1:return r.sent(),[2]}}))}))},t.oncancel=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),t="/remote-checkout/"+e.id+"/signout",[4,this._requestSender.get(t)];case 1:return n.sent(),[4,this._paymentIntegrationService.loadCheckout()];case 2:return[2,n.sent()];case 3:throw n.sent(),new tu;case 4:return[2]}}))}))},t.onpaymentauthorized=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){return[2,this._onPaymentAuthorized(n,t,e)]}))}))}},t.prototype._createBuyNowCart=function(){var t,e;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(i.trys.push([0,3,,4]),!(n=null===(e=null===(t=this._buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)||void 0===e?void 0:e.call(t)))throw new qa(Fa.MissingCart);return[4,this._paymentIntegrationService.createBuyNowCart(n)];case 1:return r=i.sent(),[4,this._paymentIntegrationService.loadCheckout(r.id)];case 2:return i.sent(),[3,4];case 3:throw i.sent(),new eu;case 4:return[2]}}))}))},t.prototype._handlePaymentMethodSelected=function(t){var e=this._paymentIntegrationService.getState(),n=e.getCartOrThrow(),r=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new qa(Fa.MissingPaymentMethod);var o=this._getBaseRequest(n,i,r,this._paymentMethod);delete o.total.type,t.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})},t.prototype._handleShippingContactSelected=function(t,e,n){var r;return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u,s,c,d,l,f,p,h,y,m;return(0,o.__generator)(this,(function(v){switch(v.label){case 0:i=this._transformContactToAddress(n.shippingContact),v.label=1;case 1:return v.trys.push([1,3,,4]),[4,this._paymentIntegrationService.updateShippingAddress(i)];case 2:return v.sent(),[3,4];case 3:throw v.sent(),t.abort(),new Error("Shipping address update failed");case 4:if(a=this._paymentIntegrationService.getState(),u=a.getCartOrThrow().currency.decimalPlaces,s=a.getCheckoutOrThrow(),c=null===(r=s.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,d=s.consignments[0].availableShippingOptions,l=null==d?void 0:d.find((function(t){return t.id===c})),f=null==d?void 0:d.filter((function(t){return t.id!==c})),p=l?[{label:l.description,amount:""+l.cost.toFixed(u),detail:l.additionalDescription,identifier:l.id}]:[],f&&(0,o.__spreadArrays)(f.filter((function(t){return t.isRecommended})),f.filter((function(t){return!t.isRecommended}))).forEach((function(t){return p.push({label:t.description,amount:""+t.cost.toFixed(u),detail:t.additionalDescription,identifier:t.id})})),!(d instanceof Array))throw new Error("Shipping options not available.");if(0===d.length)return t.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:"pending",label:e,amount:""+s.grandTotal.toFixed(u)},[]),[2];h=d.find((function(t){return t.isRecommended})),y=h?h.id:d[0].id,m=l?l.id:y,v.label=5;case 5:return v.trys.push([5,7,,8]),[4,this._updateShippingOption(m)];case 6:return v.sent(),[3,8];case 7:throw v.sent(),new Error("Shipping options update failed");case 8:return a=this._paymentIntegrationService.getState(),s=a.getCheckoutOrThrow(),t.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:"final",label:e,amount:""+s.grandTotal.toFixed(u)},newLineItems:this._getUpdatedLineItems(s,u)}),[2]}}))}))},t.prototype._handleShippingMethodSelected=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:r=n.shippingMethod.identifier,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,this._updateShippingOption(r)];case 2:return o.sent(),[3,4];case 3:throw o.sent(),t.abort(),new Error("Shipping option selection update failed.");case 4:return i=this._paymentIntegrationService.getState(),a=i.getCartOrThrow().currency.decimalPlaces,u=i.getCheckoutOrThrow(),t.completeShippingMethodSelection({newTotal:{type:"final",label:e,amount:""+u.grandTotal.toFixed(a)},newLineItems:this._getUpdatedLineItems(u,a)}),[2]}}))}))},t.prototype._getUpdatedLineItems=function(t,e){var n=[{label:this._subTotalLabel,amount:""+t.subtotal.toFixed(e)}];return t.taxes.forEach((function(t){return n.push({label:t.name,amount:""+t.amount.toFixed(e)})})),n.push({label:this._shippingLabel,amount:""+t.shippingCostTotal.toFixed(e)}),n},t.prototype._updateShippingOption=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){return[2,this._paymentIntegrationService.selectShippingOption(t)]}))}))},t.prototype._onValidateMerchant=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){return n=["validationUrl="+e.validationURL,"merchantIdentifier="+t.initializationData.merchantId,"displayName="+t.initializationData.storeName,"domainName="+window.location.hostname].join("&"),[2,this._requestSender.post((i=t.initializationData.paymentsUrl,i+"/api/public/v1/payments/applepay/validate_merchant"),{credentials:!1,headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded","X-XSRF-TOKEN":null},body:n})];var i}))}))},t.prototype._onPaymentAuthorized=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u,s,c,d,l,f,p,h,y;return(0,o.__generator)(this,(function(m){switch(m.label){case 0:r=t.payment,i=r.token,a=r.billingContact,u=r.shippingContact,s=this._paymentIntegrationService.getState(),c=s.getCartOrThrow(),d=c.lineItems.physicalItems.length>0,l={methodId:n.id,paymentData:{formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},f=this._transformContactToAddress(a),p=this._transformContactToAddress(u),h=null==u?void 0:u.emailAddress,y=(null==u?void 0:u.phoneNumber)||"",m.label=1;case 1:return m.trys.push([1,7,,8]),[4,this._paymentIntegrationService.updateBillingAddress((0,o.__assign)((0,o.__assign)({},f),{email:h,phone:y}))];case 2:return m.sent(),d?[4,this._paymentIntegrationService.updateShippingAddress(p)]:[3,4];case 3:m.sent(),m.label=4;case 4:return[4,this._paymentIntegrationService.submitOrder({useStoreCredit:!1})];case 5:return m.sent(),[4,this._paymentIntegrationService.submitPayment(l)];case 6:return m.sent(),e.completePayment(ApplePaySession.STATUS_SUCCESS),[2,this._onAuthorizeCallback()];case 7:throw m.sent(),e.completePayment(ApplePaySession.STATUS_FAILURE),new Error("Payment cannot complete");case 8:return[2]}}))}))},t.prototype._transformContactToAddress=function(t){return{firstName:(null==t?void 0:t.givenName)||"",lastName:(null==t?void 0:t.familyName)||"",city:(null==t?void 0:t.locality)||"",company:"",address1:(null==t?void 0:t.addressLines)&&t.addressLines[0]||"",address2:(null==t?void 0:t.addressLines)&&t.addressLines[1]||"",postalCode:(null==t?void 0:t.postalCode)||"",countryCode:(null==t?void 0:t.countryCode)||"",phone:(null==t?void 0:t.phoneNumber)||"",stateOrProvince:(null==t?void 0:t.administrativeArea)||"",stateOrProvinceCode:(null==t?void 0:t.administrativeArea)||"",customFields:[]}},t}(),au=Xa((function(t){var n=t.getState().getHost;return new ou((0,e.createRequestSender)({host:n()}),t,new ru)}),[{id:"applepay"}]);var uu=n(15373);const su=function(t){function e(e){var n=t.call(this,e||"Not implemented.")||this;return n.name="NotImplementedError",n.type="not_implemented",n}return(0,o.__extends)(e,t),e}(u);var cu,du,lu;!function(t){t.SandboxMode="bolt_sandbox",t.StagingMode="bolt_staging",t.DevelopmentMode="bolt_development"}(cu||(cu={})),function(t){t.Small="small",t.Medium="medium",t.Large="large"}(du||(du={})),function(t){t.Pill="pill",t.Rect="rect"}(lu||(lu={}));const fu=function(){function t(t,e,n){void 0===n&&(n=window),this.paymentIntegrationService=t,this.boltScriptLoader=e,this.boltHostWindow=n}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d,l,f,p,h;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.bolt,n=t.containerId,r=t.methodId,a=(i=e||{}).buyNowInitializeOptions,u=i.style,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.bolt" argument is not provided.');if(!Boolean(a))throw new su("Only buy now flow is implemented for Bolt button");if(!(null==a?void 0:a.storefrontApiToken)||"string"!=typeof a.storefrontApiToken)throw new za('Unable to initialize payment because "options.storefrontApiToken" argument is not provided.');return s=this.paymentIntegrationService.getState(),c=s.getPaymentMethodOrThrow(r),d=c.initializationData,l=c.config,p=(f=d||{}).publishableKey,h=f.developerConfig,[4,this.boltScriptLoader.loadBoltClient(p,l.testMode,h,"BigCommerce",a.storefrontApiToken)];case 1:return o.sent(),this.renderButton(n,c,u),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r;"function"==typeof(null===(r=this.boltHostWindow.BoltConnect)||void 0===r?void 0:r.setupProductPageCheckout)&&(this.addButtonContainer(t,e,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())},t.prototype.addButtonContainer=function(t,e,n){var r=document.getElementById(t);if(r){var i=document.createElement("div"),o=document.createElement("object");i.setAttribute("id","product-page-checkout-wrapper"),i.setAttribute("class","bolt-button-wrapper"),i.setAttribute("style","display:none"),i.setAttribute("data-tid","product-page-checkout-wrapper"),o.setAttribute("data",this.getBoltObjectData(e,n)),o.setAttribute("class","bolt-product-checkout-button"),i.append(o),r.innerHTML="",r.append(i)}},t.prototype.getBoltObjectData=function(t,e){var n=t.initializationData,r=t.config,i=n||{},o=i.publishableKey,a=i.developerConfig,u=this.boltScriptLoader.getDomainURL(!!r.testMode,a),s=this.getButtonHeight(null==e?void 0:e.size),c=this.getButtonBorderRadius(null==e?void 0:e.shape,s);return(0,uu.stringifyUrl)({url:"https://"+u+"/v1/checkout_button",query:{publishable_key:o,variant:"ppc",height:s,border_radius:c}})},t.prototype.getButtonHeight=function(t){if(t)switch(t){case du.Small:return 25;case du.Large:return 45;case du.Medium:default:return 40}},t.prototype.getButtonBorderRadius=function(t,e){if(t)switch(t){case lu.Pill:return e?Math.round(e/2):void 0;case lu.Rect:default:return 4}},t}();const pu=function(t){function e(e){var n=t.call(this,e||"Unable to proceed because the client library of a payment method is not loaded or ready to be used.")||this;return n.name="PaymentMethodClientUnavailableError",n.type="payment_method_client_unavailable",n}return(0,o.__extends)(e,t),e}(u),hu=function(){function t(t,e){void 0===e&&(e=window),this.scriptLoader=t,this.boltHostWindow=e}return t.prototype.loadBoltClient=function(t,e,n,r,i){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(this.boltHostWindow.BoltCheckout)return[2,this.boltHostWindow.BoltCheckout];if(!t)throw new za('Unable to initialize payment because "publishableKey" argument is not provided.');return[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!e,n)+"/connect-bigcommerce.js",this.getScriptOptions("bolt-connect",t,r,i))];case 1:return o.sent(),[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!e,n)+"/track.js",this.getScriptOptions("bolt-track",t))];case 2:if(o.sent(),!this.boltHostWindow.BoltCheckout)throw new pu;return[2,this.boltHostWindow.BoltCheckout]}}))}))},t.prototype.loadBoltEmbedded=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return r={async:!0,attributes:{id:"bolt-embedded"}},[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!e,n)+"/embed.js",r)];case 1:if(i.sent(),!this.boltHostWindow.Bolt)throw new pu;return[2,this.boltHostWindow.Bolt(t)]}}))}))},t.prototype.getDomainURL=function(t,e){if(!t)return"connect.bolt.com";if(e)switch(e.developerMode){case cu.StagingMode:return"connect-staging.bolt.com";case cu.DevelopmentMode:return"connect."+e.developerDomain}return"connect-sandbox.bolt.com"},t.prototype.getScriptOptions=function(t,e,n,r){return{async:!0,attributes:(0,o.__assign)((0,o.__assign)({id:t,"data-publishable-key":e},n&&{"data-shopping-cart-id":n}),r&&{"data-storefront-api-token":r})}},t}(),yu=Xa((function(t){return new fu(t,new hu((0,ar.Vr)()))}),[{id:"bolt"}]);var mu,vu,gu,_u,bu,Su,wu;!function(t){t.BuyNow="BUY_NOW"}(mu||(mu={})),function(t){t.AUTHORIZE="authorize",t.CAPTURE="capture"}(vu||(vu={})),function(t){t.paypal="paypal",t.checkout="checkout",t.buynow="buynow",t.pay="pay",t.installment="installment"}(gu||(gu={})),function(t){t.gold="gold",t.blue="blue",t.silver="silver",t.black="black",t.white="white"}(_u||(_u={})),function(t){t.pill="pill",t.rect="rect"}(bu||(bu={})),function(t){t.OXXO="oxxo"}(Su||(Su={})),function(t){t.Approved="APPROVED",t.Created="CREATED",t.PayerActionRequired="PAYER_ACTION_REQUIRED"}(wu||(wu={}));const Cu=function(){function t(t,e,n,r){this.formPoster=t,this.paymentIntegrationService=e,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=r}return t.prototype.loadPayPalSdk=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return r=this.paymentIntegrationService.getState(),i=e||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(t),u=this,[4,this.paypalCommerceScriptLoader.getPayPalSDK(a,i,n)];case 1:return u.paypalSdk=o.sent(),[2,this.paypalSdk]}}))}))},t.prototype.getPayPalSdkOrThrow=function(){if(!this.paypalSdk)throw new pu;return this.paypalSdk},t.prototype.createBuyNowCartOrThrow=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(e=t.getBuyNowCartRequestBody()))throw new qa(Fa.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this.paymentIntegrationService.createBuyNowCart(e)];case 2:return[2,n.sent()];case 3:throw n.sent(),new eu;case 4:return[2]}}))}))},t.prototype.createOrder=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n=this.paymentIntegrationService.getState().getCartOrThrow().id,[4,this.paypalCommerceRequestSender.createOrder(t,(0,o.__assign)({cartId:n},e))];case 1:return[2,r.sent().orderId]}}))}))},t.prototype.updateOrder=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:t=this.paymentIntegrationService.getState(),e=t.getCartOrThrow(),n=t.getConsignmentsOrThrow()[0],r.label=1;case 1:return r.trys.push([1,3,,4]),[4,this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:n.availableShippingOptions,cartId:e.id,selectedShippingOption:n.selectedShippingOption})];case 2:return r.sent(),[3,4];case 3:throw r.sent(),new c;case 4:return[2]}}))}))},t.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.paypalCommerceRequestSender.getOrderStatus()];case 1:return[2,t.sent().status];case 2:throw t.sent(),new c;case 3:return[2]}}))}))},t.prototype.tokenizePayment=function(t,e){var n=this.paymentIntegrationService.getState().getCartOrThrow();if(!e)throw new qa(Fa.MissingOrderId);return this.formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",action:"set_external_checkout",provider:t,order_id:e},n.source===mu.BuyNow&&{cart_id:n.id}))},t.prototype.submitPayment=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:t,paypal_account:{order_id:e}}},[4,this.paymentIntegrationService.submitPayment({methodId:t,paymentData:n})];case 1:return r.sent(),[2]}}))}))},t.prototype.getShippingOptionOrThrow=function(t){var e=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=e.availableShippingOptions||[],r=n.find((function(t){return t.isRecommended})),i=(t?n.find((function(e){return e.id===t})):n.find((function(t){var n;return t.id===(null===(n=e.selectedShippingOption)||void 0===n?void 0:n.id)})))||r||n[0];if(!i)throw new Error("Your order can't be shipped to this address");return i},t.prototype.getAddress=function(t){return{firstName:(null==t?void 0:t.firstName)||"",lastName:(null==t?void 0:t.lastName)||"",email:(null==t?void 0:t.email)||"",phone:"",company:"",address1:(null==t?void 0:t.address1)||"",address2:"",city:(null==t?void 0:t.city)||"",countryCode:(null==t?void 0:t.countryCode)||"",postalCode:(null==t?void 0:t.postalCode)||"",stateOrProvince:"",stateOrProvinceCode:(null==t?void 0:t.stateOrProvinceCode)||"",customFields:[]}},t.prototype.getBillingAddressFromOrderDetails=function(t){var e=t.payer;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1})},t.prototype.getShippingAddressFromOrderDetails=function(t){var e,n,r=t.payer,i=(null===(n=null===(e=t.purchase_units[0])||void 0===e?void 0:e.shipping)||void 0===n?void 0:n.address)||{};return this.getAddress({firstName:r.name.given_name,lastName:r.name.surname,email:r.email_address,address1:i.address_line_1,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})},t.prototype.getValidButtonStyle=function(t){var e=t||{},n=e.color,r=e.height,i=e.label,o=e.shape,a={color:n&&_u[n]?n:void 0,height:this.getValidHeight(r),label:i&&gu[i]?i:void 0,shape:o&&bu[o]?o:void 0};return(0,y.omitBy)(a,y.isNil)},t.prototype.getValidHeight=function(t){return t&&"number"==typeof t?t>55?55:t<25?25:t:40},t.prototype.removeElement=function(t){var e=t&&document.getElementById(t);e&&e.remove()},t}();var Eu,Iu="This API endpoint is for internal use only and may change in the future";!function(t){t.Json="application/json",t.JsonV1="application/vnd.bc.v1+json"}(Eu||(Eu={}));const Pu=Eu;var Au={"X-Checkout-SDK-Version":"1.400.0"};const Ou=function(){function t(t){this.requestSender=t}return t.prototype.createOrder=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return n="/api/storefront/payment/"+t,r=e,i=(0,o.__assign)({"X-API-INTERNAL":Iu,"Content-Type":Pu.Json},Au),[4,this.requestSender.post(n,{headers:i,body:r})];case 1:return[2,a.sent().body]}}))}))},t.prototype.updateOrder=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return e=t,n=(0,o.__assign)({"X-API-INTERNAL":Iu,"Content-Type":Pu.Json},Au),[4,this.requestSender.put("/api/storefront/initialization/paypalcommerce",{headers:n,body:e})];case 1:return[2,r.sent().body]}}))}))},t.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return t=(0,o.__assign)({"X-API-INTERNAL":Iu,"Content-Type":Pu.Json},Au),[4,this.requestSender.get("/api/storefront/initialization/paypalcommerce",{headers:t})];case 1:return[2,e.sent().body]}}))}))},t}(),Tu=function(){function t(t){this.scriptLoader=t,this.window=window}return t.prototype.getPayPalSDK=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return this.paypalSdk?[3,2]:(r=this,[4,this.loadPayPalSDK(this.getPayPalSdkScriptConfigOrThrow(t,e,n))]);case 1:r.paypalSdk=i.sent(),i.label=2;case 2:return[2,this.paypalSdk]}}))}))},t.prototype.loadPayPalSDK=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return this.window.paypalLoadScript?[3,2]:[4,this.scriptLoader.loadScript("https://unpkg.com/@paypal/paypal-js@5.0.5/dist/iife/paypal-js.min.js",{async:!0,attributes:{}})];case 1:if(e.sent(),!this.window.paypalLoadScript)throw new pu;e.label=2;case 2:return[4,this.window.paypalLoadScript(t)];case 3:if(e.sent(),!this.window.paypal)throw new pu;return[2,this.window.paypal]}}))}))},t.prototype.getPayPalSdkScriptConfigOrThrow=function(t,e,n){void 0===n&&(n=!0);var r=t.id,i=t.clientToken,a=t.initializationData;if(!(null==a?void 0:a.clientId))throw new qa(Fa.MissingPaymentMethod);var u=a.intent,s=a.clientId,c=a.merchantId,d=a.buyerCountry,l=a.attributionId,f=a.isVenmoEnabled,p=a.isHostedCheckoutEnabled,h=a.isPayPalCreditAvailable,y=a.isDeveloperModeApplicable,m=a.availableAlternativePaymentMethods,v=void 0===m?[]:m,g=a.enabledAlternativePaymentMethods,_=void 0===g?[]:g,b=p||n,S="paypalcommercecreditcards"===r,w=S?["card"]:[],C=S?[]:["card"],E=h?["credit","paylater"]:[],I=h?[]:["credit","paylater"],P=n||!b,A=P&&f?["venmo"]:[],O=P&&f?[]:["venmo"],T=P?_:[],x=P?v.filter((function(t){return!_.includes(t)})):v,R=(0,o.__spreadArrays)(C,I,O,x),k=(0,o.__spreadArrays)(w,E,A,T);return(0,o.__assign)({"client-id":s,"data-partner-attribution-id":l,"data-client-token":i,"merchant-id":c,"enable-funding":k.length>0?k:void 0,"disable-funding":R.length>0?R:void 0,commit:b,components:["buttons","hosted-fields","messages","payment-fields"],currency:e,intent:u},y&&{"buyer-country":d})},t}(),xu=function(t){var n=t.getState().getHost;return new Cu((0,i.createFormPoster)(),t,new Ou((0,e.createRequestSender)({host:n()})),new Tu((0,ar.Vr)()))},Ru=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){var e;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=t.paypalcommerce,r=t.containerId,i=t.methodId,a=Boolean(null==n?void 0:n.buyNowInitializeOptions),!i)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!r)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.paypalcommerce" argument is not provided.');if(a&&!n.currencyCode)throw new za('Unable to initialize payment because "options.paypalcommerce.currencyCode" argument is not provided.');if(a&&"function"!=typeof(null===(e=n.buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return a?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return u=a?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(i,u,!1)];case 3:return o.sent(),this.renderButton(r,i,n),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,u=n.onComplete,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommerce")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},l={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},f={onShippingAddressChange:function(t){return r.onShippingAddressChange(t)},onShippingOptionsChange:function(t){return r.onShippingOptionsChange(t)},onApprove:function(t,n){return r.onHostedCheckoutApprove(t,n,e,u)}},p=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:s.FUNDING.PAYPAL,style:this.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&l),c&&f),h=s.Buttons(p);h.isEligible()?h.render("#"+t):this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t.prototype.onHostedCheckoutApprove=function(t,e,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!t.orderID)throw new qa(Fa.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,e.order.get()];case 1:u=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),s=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateBillingAddress(s)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,t.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},t.prototype.onShippingAddressChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:e=this.paypalCommerceIntegrationService.getAddress({city:t.shippingAddress.city,countryCode:t.shippingAddress.country_code,postalCode:t.shippingAddress.postal_code,stateOrProvinceCode:t.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(e)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(e)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},t.prototype.onShippingOptionsChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(t.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(e.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},t}(),ku=Xa((function(t){return new Ru(t,xu(t))}),[{id:"paypalcommerce"}]),Mu=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.paypalcommercecredit,n=t.containerId,r=t.methodId,a=(i=e||{}).buyNowInitializeOptions,u=i.currencyCode,s=i.messagingContainerId,c=!!a,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.paypalcommercecredit" argument is not provided.');if(c&&!u)throw new za('Unable to initialize payment because "options.paypalcommercecredit.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?u:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,e),this.renderMessages(s),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,u=n.onComplete,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercecredit")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},l={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},f={onShippingAddressChange:function(t){return r.onShippingAddressChange(t)},onShippingOptionsChange:function(t){return r.onShippingOptionsChange(t)},onApprove:function(t,n){return r.onHostedCheckoutApprove(t,n,e,u)}},p=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT],h=!1;p.forEach((function(e){if(!h){var n=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:e,style:r.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&l),c&&f),u=s.Buttons(n);u.isEligible()&&(u.render("#"+t),h=!0)}})),h||this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t.prototype.onHostedCheckoutApprove=function(t,e,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!t.orderID)throw new qa(Fa.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,e.order.get()];case 1:u=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),s=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateBillingAddress(s)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,t.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},t.prototype.onShippingAddressChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:e=this.paypalCommerceIntegrationService.getAddress({city:t.shippingAddress.city,countryCode:t.shippingAddress.country_code,postalCode:t.shippingAddress.postal_code,stateOrProvinceCode:t.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(e)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(e)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},t.prototype.onShippingOptionsChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(t.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(e.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},t.prototype.renderMessages=function(t){var e=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(t&&document.getElementById(t)){var n={amount:this.paymentIntegrationService.getState().getCartOrThrow().cartAmount,placement:"cart",style:{layout:"text"}};e.Messages(n).render("#"+t)}},t}(),Nu=Xa((function(t){return new Mu(t,xu(t))}),[{id:"paypalcommercecredit"}]),Du=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.paypalcommercevenmo,n=t.containerId,r=t.methodId,a=(i=e||{}).buyNowInitializeOptions,u=i.currencyCode,s=!!a,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.paypalcommercevenmo" argument is not provided.');if(s&&!u)throw new za('Unable to initialize payment because "options.paypalcommercevenmo.currencyCode" argument is not provided.');if(s&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return s?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return c=s?u:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,c,!1)];case 3:return o.sent(),this.renderButton(n,r,e),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=u.FUNDING.VENMO,c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercevenmo")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},d={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l=(0,o.__assign)((0,o.__assign)({fundingSource:s,style:this.getValidVenmoButtonStyles(a)},c),i&&d),f=u.Buttons(l);f.isEligible()?f.render("#"+t):this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.getValidVenmoButtonStyles=function(t){var e=this.paypalCommerceIntegrationService.getValidButtonStyle(t);return e.color===_u.gold?(0,o.__assign)((0,o.__assign)({},e),{color:void 0}):e},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t}(),Lu=Xa((function(t){return new Du(t,xu(t))}),[{id:"paypalcommercevenmo"}]),zu=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.paypalcommercealternativemethods,n=t.containerId,r=t.methodId,a=(i=e||{}).apm,u=i.buyNowInitializeOptions,s=i.currencyCode,c=!!u,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods" argument is not provided.');if(!a)throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods.apm" argument is not provided.');if(c&&!s)throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==u?void 0:u.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?s:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,e),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.apm,a=n.buyNowInitializeOptions,u=n.style,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(!Object.values(s.FUNDING).includes(i))throw new za('Unable to initialize PayPal button because "options.paypalcommercealternativemethods.apm" argument is not valid funding source.');var c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercealternativemethod")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},d={onClick:function(){return r.handleClick(a)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l=(0,o.__assign)((0,o.__assign)({fundingSource:i,style:this.paypalCommerceIntegrationService.getValidButtonStyle(u)},c),a&&d),f=s.Buttons(l);f.isEligible()?f.render("#"+t):this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t}(),ju=Xa((function(t){return new zu(t,xu(t))}),[{id:"paypalcommercealternativemethods"}]);var Uu,Fu,qu,Bu,Gu;!function(t){t.HORIZONTAL="horizontal",t.VERTICAL="vertical"}(Uu||(Uu={})),function(t){t.SMALL="small",t.MEDIUM="medium",t.LARGE="large",t.RESPONSIVE="responsive"}(Fu||(Fu={})),function(t){t.GOLD="gold",t.BLUE="blue",t.SIlVER="silver",t.BLACK="black"}(qu||(qu={})),function(t){t.CHECKOUT="checkout",t.PAY="pay",t.BUYNOW="buynow",t.PAYPAL="paypal",t.CREDIT="credit"}(Bu||(Bu={})),function(t){t.PILL="pill",t.RECT="rect"}(Gu||(Gu={}));const Vu=function(){function t(t,e,n){this.paymentIntegrationService=t,this.paypalExpressScriptLoader=e,this.formPoster=n}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(e=this.paymentIntegrationService.getState(),n=e.getPaymentMethodOrThrow(t.methodId),!t.paypal)throw new za;if(!n.config.merchantId)throw new qa(Fa.MissingPaymentMethod);return[4,this.paypalExpressScriptLoader.loadPaypalSDK(n.config.merchantId)];case 1:return r=i.sent(),this.renderButton(t,r),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e){var n,r=this,i=t.containerId,o=t.methodId,a=t.paypal,u=a.allowCredit,s=a.clientId,c=a.onPaymentError,d=a.shouldProcessPayment,l=a.style,f=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId);if(!f.config.merchantId)throw new qa(Fa.MissingPaymentMethod);var p=f.config.merchantId,h=f.config.testMode?"sandbox":"production",y=((n={})[h]=s,n),m=e.FUNDING.CREDIT||"credit",v=u?[m]:[],g=u?[]:[m];return e.Button.render({env:h,client:y,commit:d,funding:{allowed:v,disallowed:g},style:this.getStyle(l),payment:function(t,e){return r.setupPayment(p,e,c)},onAuthorize:function(t,e){return r.tokenizePayment(t,o,e,d)}},i)},t.prototype.getStyle=function(t){var e=t||{},n=e.color,r=e.fundingicons,i=e.label,o=e.layout,a=e.shape,u=e.size,s=e.tagline;return{color:n,fundingicons:r,label:i,layout:o,shape:a||Gu.RECT,size:"small"===u?Fu.RESPONSIVE:u,tagline:s}},t.prototype.setupPayment=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u;return(0,o.__generator)(this,(function(s){switch(s.label){case 0:if(!e)throw new Ua(ja.CheckoutButtonNotInitialized);s.label=1;case 1:return s.trys.push([1,4,,5]),[4,this.paymentIntegrationService.loadDefaultCheckout()];case 2:return r=s.sent(),i=r.getCartOrThrow().id,a=r.getHost()||"",[4,e.request.post(a+"/api/storefront/payment/paypalexpress",{merchantId:t,cartId:i},{headers:(0,o.__assign)({"X-API-INTERNAL":Iu},Au)})];case 3:return[2,s.sent().id];case 4:throw u=s.sent(),n&&n(u),u;case 5:return[2]}}))}))},t.prototype.tokenizePayment=function(t,e,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!n)throw new Ua(ja.CheckoutButtonNotInitialized);if(!t.paymentID||!t.payerID)throw new qa(Fa.MissingPayment);return i=this.paymentIntegrationService.getState(),a=i.getPaymentMethodOrThrow(e),[4,n.payment.get(t.paymentID)];case 1:return u=o.sent(),[2,this.formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:a.id,action:r?"process_payment":"set_external_checkout",paymentId:t.paymentID,payerId:t.payerID,payerInfo:JSON.stringify(u.payer.payer_info)})]}}))}))},t}();const Yu=function(){function t(t){this.scriptLoader=t,this.window=window}return t.prototype.loadPaypalSDK=function(t){return void 0===t&&(t=""),(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e=(0,o.__assign)({async:!0,attributes:{"data-merchant-id":t}},t&&{attributes:{"data-merchant-id":t}}),[4,this.scriptLoader.loadScript("//www.paypalobjects.com/api/checkout.min.js",e)];case 1:if(n.sent(),!this.window.paypal)throw new pu;return[2,this.window.paypal]}}))}))},t}(),Hu=Xa((function(t){return new Vu(t,new Yu((0,ar.Vr)()),(0,i.createFormPoster)())}),[{id:"paypalexpress"}]);function Wu(n){var r=null!=n?n:{},o=r.host,a=r.locale,u=void 0===a?"en":a,s=$n(),c=(0,e.createRequestSender)({host:o}),d=(0,i.createFormPoster)({host:o}),l=function(e,n){void 0===n&&(n=t);for(var r=new Qa,i=function(t){if(!function(t){return"resolveIds"in t}(t))return"continue";for(var n=0,i=t.resolveIds;n(()=>{var t={89538:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=d(n(66534)),o=d(n(43279)),a=d(n(86202)),u=d(n(98834)),s=d(n(43961)),c=d(n(11906));function d(t){return t&&t.__esModule?t:{default:t}}function l(t){return l="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},l(t)}function f(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={host:""}},56280:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.APPLICATION_JSON=void 0,e.APPLICATION_JSON="application/json"},44955:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var r=n(56280),i=n(99338),o={headers:{Accept:r.APPLICATION_JSON,"Content-Type":r.APPLICATION_JSON},method:i.GET};e.default=o},99338:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.POST=e.GET=e.DELETE=void 0,e.GET="GET",e.POST="POST",e.DELETE="DELETE"},92197:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(5099),n(38490),n(64668),n(16368),n(99023),n(40737),n(74035),n(10951),n(58443),n(34500),n(25959),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,o=(i=n(66534))&&i.__esModule?i:{default:i},a=n(56280),u=n(60301);function s(t){return s="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s(t)}function c(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:a.APPLICATION_JSON;return t&&(0,u.includes)(e,a.APPLICATION_JSON)?JSON.stringify(t):t}},{key:"fromResponse",value:function(t){var e=this.parseResponseHeaders(t.getAllResponseHeaders()),n=t.getResponseHeader("Content-Type"),r=t.status,i=t.statusText,o="response"in t?t.response:t.responseText;return o&&(0,u.includes)(n,a.APPLICATION_JSON)&&(o=JSON.parse(o)),{data:o,headers:e,status:r,statusText:i}}},{key:"parseResponseHeaders",value:function(t){return(t?t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/):[]).reduce((function(t,e){var n=e.split(":"),r=(n.shift()||"").trim();return r?(0,o.default)({},t,function(t,e,n){return(e=d(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({},r.toLowerCase(),n.join(":").trim())):t}),{})}}],r=[{key:"create",value:function(){return new t}}],n&&c(e.prototype,n),r&&c(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.default=l},48773:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}function o(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=d(n(18712)),o=d(n(66534)),a=n(99338),u=d(n(44955)),s=d(n(92197)),c=d(n(48773));function d(t){return t&&t.__esModule?t:{default:t}}function l(t){return l="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},l(t)}function f(t,e){for(var n=0;n=200&&t.status<300}}])&&f(e.prototype,n),r&&f(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.default=p},50630:(t,e,n)=>{"use strict";n(6550),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return!(!Array.isArray(t)&&"string"!=typeof t)&&-1!==t.indexOf(e)}},60301:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"includes",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"isNil",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"isObject",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"omitEmptyStringAndNil",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"omitNil",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"omitProperty",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"toNumber",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"toSnakeCase",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(e,"toString",{enumerable:!0,get:function(){return l.default}});var r=f(n(50630)),i=f(n(65480)),o=f(n(63387)),a=f(n(91145)),u=f(n(75750)),s=f(n(66206)),c=f(n(30439)),d=f(n(27302)),l=f(n(78267));function f(t){return t&&t.__esModule?t:{default:t}}},57457:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return""===t}},32713:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,r.default)(t)||(0,i.default)(t)};var r=o(n(57457)),i=o(n(65480));function o(t){return t&&t.__esModule?t:{default:t}}},65480:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return null==t}},63387:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return null!==t&&"object"===i(t)&&!Array.isArray(t)}},91145:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,i.default)(t,r.default)};var r=o(n(32713)),i=o(n(66206));function o(t){return t&&t.__esModule?t:{default:t}}},75750:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,i.default)(t,r.default)};var r=o(n(65480)),i=o(n(66206));function o(t){return t&&t.__esModule?t:{default:t}}},66206:(t,e,n)=>{"use strict";n(13722),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return(0,i.default)(t)?Object.keys(t).reduce((function(n,r){var i=t[r];return e(i)||(n[r]=i),n}),{}):t};var r,i=(r=n(63387))&&r.__esModule?r:{default:r}},30439:(t,e,n)=>{"use strict";n(83681),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return parseFloat(t)||0}},27302:(t,e,n)=>{"use strict";n(58443),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"string"!=typeof t?t:t.replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},78267:(t,e,n)=>{"use strict";n(99023),n(80226),n(40737),n(26667),Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"string"==typeof t?t:"number"!=typeof t||Number.isNaN(t)?"":t.toString()}},36438:(t,e,n)=>{"use strict";e.e=function(t){return i.default.create(t)};var r,i=(r=n(89538))&&r.__esModule?r:{default:r}},98834:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=u(n(14735)),o=u(n(15859)),a=u(n(92239));function u(t){return t&&t.__esModule?t:{default:t}}function s(t){return s="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s(t)}function c(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(13751),o=n(7969),a=s(n(14088)),u=s(n(92239));function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},c(t)}function d(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e,n){return(e=s(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function u(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(34745),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=l(n(66534)),o=n(60301),a=l(n(45860)),u=l(n(31146)),s=l(n(8006)),c=l(n(80720)),d=l(n(85064));function l(t){return t&&t.__esModule?t:{default:t}}function f(t){return f="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},f(t)}function p(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PAYPAL_COMMERCE_VENMO=e.PAYPAL_COMMERCE_CREDIT_CARDS=e.PAYPAL_COMMERCE_CREDIT=e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=e.PAYPAL_COMMERCE=e.BRAINTREE_VISACHECKOUT=e.BRAINTREE_PAYPAL_CREDIT=e.BRAINTREE_PAYPAL=e.BRAINTREE_LOCAL_METHODS=e.BRAINTREE_GOOGLEPAY=e.BRAINTREE_ACH=e.BRAINTREE=void 0,e.BRAINTREE="braintree",e.BRAINTREE_PAYPAL="braintreepaypal",e.BRAINTREE_PAYPAL_CREDIT="braintreepaypalcredit",e.BRAINTREE_VISACHECKOUT="braintreevisacheckout",e.BRAINTREE_LOCAL_METHODS="braintreelocalmethods",e.BRAINTREE_GOOGLEPAY="googlepaybraintree",e.BRAINTREE_ACH="braintreeach",e.PAYPAL_COMMERCE="paypalcommerce",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS="paypalcommercealternativemethods",e.PAYPAL_COMMERCE_CREDIT="paypalcommercecredit",e.PAYPAL_COMMERCE_CREDIT_CARDS="paypalcommercecreditcards",e.PAYPAL_COMMERCE_VENMO="paypalcommercevenmo"},80720:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(9257),o=n(86879);function a(t){return a="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},a(t)}function u(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PPSDK_CREDIT_CARD=e.MULTI_OPTION=e.CREDIT_CARD=void 0,e.CREDIT_CARD="credit-card",e.MULTI_OPTION="multi-option",e.PPSDK_CREDIT_CARD="card"},86202:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=c(n(14735)),o=n(7969),a=c(n(86130)),u=c(n(22147)),s=c(n(92239));function c(t){return t&&t.__esModule?t:{default:t}}function d(t){return d="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},d(t)}function l(t,e){for(var n=0;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SDK=e.OFFLINE=e.HOSTED=e.API=void 0,e.API="PAYMENT_TYPE_API",e.HOSTED="PAYMENT_TYPE_HOSTED",e.OFFLINE="PAYMENT_TYPE_OFFLINE",e.SDK="PAYMENT_TYPE_SDK"},22147:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301),o=n(9257);function a(t){return a="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},a(t)}function u(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}function o(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(95412),n(16368),n(34745),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301),o=c(n(43085)),a=c(n(11106)),u=c(n(47752)),s=c(n(58332));function c(t){return t&&t.__esModule?t:{default:t}}function d(t){return d="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},d(t)}function l(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=u(n(66534)),o=n(60301),a=u(n(80720));function u(t){return t&&t.__esModule?t:{default:t}}function s(t){return s="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s(t)}function c(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(26667),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(95412),n(16368),n(34745),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301),o=c(n(45873)),a=c(n(43026)),u=c(n(70170)),s=c(n(23393));function c(t){return t&&t.__esModule?t:{default:t}}function d(t){return d="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},d(t)}function l(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,o=n(60301),a=(i=n(80720))&&i.__esModule?i:{default:i};function u(t){return u="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},u(t)}function s(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=n(60301);function o(t){return o="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},o(t)}function a(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(8962),n(38490),n(16368),n(99023),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=s(n(14735)),o=n(99338),a=s(n(25682)),u=n(68109);function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},c(t)}function d(t,e){for(var n=0;n{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return i="function"==typeof Symbol&&"symbol"==r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},i(t)}function o(t,e){for(var n=0;n{"use strict";n(95412),Object.defineProperty(e,"__esModule",{value:!0}),e.mapToHeaders=function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).authToken;return(0,r.omitNil)({Authorization:t})},e.mapToInstrumentPayload=function(){var t,e,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},u=a.providerName,s=a.defaultInstrument,c=(0,r.omitNil)({name:u});return(0,r.omitNil)({provider:c,credit_card:(t=a,e=t.creditCard,n=void 0===e?{}:e,o=(0,r.omitNil)(n.threeDSecure),(0,r.omitNil)({cardholder_name:n.cardholderName,number:n.number,month:n.month,year:n.year,verification_code:n.verificationCode,issue_month:n.issueMonth,issue_year:n.issueYear,issue_number:n.issueNumber,track_data:n.trackData,is_manual_entry:n.isManualEntry,icc_data:n.iccData,fallback_reason:n.fallbackReason,is_contactless:n.isContactless,encrypted_pin_cryptogram:n.encryptedPinCryptogram,encrypted_pin_ksn:n.encryptedPinKsn,three_d_secure:o})),billing_address:i(a.billingAddress),default_instrument:s})},e.mapToTrustedShippingAddressPayload=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(t.shippingAddress)?(0,r.omitNil)({shipping_addresses:t.shippingAddress.map((function(t){return i(t)}))}):(0,r.omitNil)({shipping_address:i(t.shippingAddress)})};var r=n(60301);function i(){var t,e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=(t=n.provinceCode,e=n.province,(0,r.omitNil)({code:t,name:e}));return(0,r.omitNil)({address_line_1:n.addressLine1,address_line_2:n.addressLine2,city:n.city,company:n.company,country_code:n.countryCode,email:n.email,first_name:n.firstName,last_name:n.lastName,phone:n.phone,postal_code:n.postCode,state:i})}},119:(t,e,n)=>{"use strict";n(13722),Object.defineProperty(e,"__esModule",{value:!0});var r=n(87275),i=n(10874);e.default=function(t,e){var n=(e||{}).equalityCheck,o=void 0===n?i:n;return function(e,n){return Object.keys(t).reduce((function(i,a){var u,s=t[a],c=e?e[a]:void 0,d=s(c,n);return o(c,d)&&i?i:r.assign({},i,((u={})[a]=d,u))}),e||{})}}},50538:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(51725),n(38490),n(95412),n(16516),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var i=n(61699),o=n(87275),a=n(10874);e.default=function(){for(var t=[],e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=n(87275);e.default=function(t,e,n){if("string"!=typeof t||""===t)throw new Error("`type` must be a string");return r.__assign({type:t},i.omitBy({payload:e,meta:n},(function(t){return void 0===t})))}},17372:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(119),i=n(58941);e.default=function(t,e,n){return"function"==typeof t?new i.default(t,e,n):new i.default(r.default(t,{equalityCheck:n&&n.equalityCheck}),e,n)}},13304:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=n(10520);e.default=function(t,e,n){return r.__assign({},i.default(t,e,n),{error:!0})}},58941:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(51725),n(38490),n(95412),n(40737),n(83823),n(10951),n(71806),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var i=n(61699),o=n(87275),a=n(57469),u=n(11065),s=n(10874),c=n(35580),d=n(35643),l=n(25151),f=n(32168),p=function(){function t(t,e,n){void 0===e&&(e={});var r=this;this._reducer=t,this._options=i.__assign({actionTransformer:l.default,equalityCheck:s,shouldWarnMutation:!0,stateTransformer:f.default},n),this._state$=new a.BehaviorSubject(this._options.stateTransformer(e)),this._notification$=new a.Subject,this._dispatchers={},this._dispatchQueue$=new a.Subject,this._errors={},this._dispatchQueue$.pipe(u.mergeMap((function(t){return t.pipe(u.concatMap((function(t){return t})))})),u.filter((function(t){return!!t.type})),u.scan((function(t,e){return r._transformStates(t,e)}),{state:e,transformedState:this._state$.getValue()}),u.distinctUntilChanged((function(t,e){var n=t.state,i=e.state;return r._options.equalityCheck(n,i)})),u.map((function(t){return t.transformedState}))).subscribe(this._state$),this.dispatch({type:"INIT"})}return t.prototype.dispatch=function(t,e){return d.default(t)?this._dispatchObservableAction(t,e):"function"==typeof t?this._dispatchThunkAction(t,e):this._dispatchAction(t)},t.prototype.getState=function(){return this._state$.getValue()},t.prototype.notifyState=function(){this._notification$.next(this.getState())},t.prototype.subscribe=function(t){for(var e=this,n=[],i=1;i0&&(s=s.pipe(u.distinctUntilChanged((function(t,n){return a.every((function(r){return e._options.equalityCheck(r(t),r(n))}))})))),o&&!1===o.initial&&(s=s.pipe(u.skip(1)));var c=[s.subscribe(t),this._notification$.subscribe(t)];return function(){return c.forEach((function(t){return t.unsubscribe()}))}},t.prototype._transformStates=function(t,e){try{var n=!1===this._options.shouldWarnMutation?this._reducer(t.state,e):c.default(this._reducer(t.state,e),{equalityCheck:this._options.equalityCheck,previousValue:t.state});return{state:n,transformedState:this._options.stateTransformer(n)}}catch(n){return this._getDispatchError(e.meta&&e.meta.queueId).next(n),{state:t.state,transformedState:t.transformedState}}},t.prototype._dispatchAction=function(t){return this._dispatchObservableAction(t.error?a.throwError(t):a.of(t))},t.prototype._dispatchObservableAction=function(t,e){var n=this;return void 0===e&&(e={}),new Promise((function(r,i){var s=n._getDispatchError(e.queueId),c=n._options.actionTransformer(a.from(t).pipe(u.map((function(t){return e.queueId?o.merge({},t,{meta:{queueId:e.queueId}}):t}))));n._getDispatcher(e.queueId).next(a.from(c).pipe(u.map((function(t,e){return 0===e&&s.pipe(u.first()).subscribe(i),t.error&&i(t.payload),t})),u.catchError((function(t){return i(t instanceof Error?t:t.payload),a.of(t)})),u.tap({complete:function(){r(n.getState())}})))}))},t.prototype._dispatchThunkAction=function(t,e){var n=this;return void 0===e&&(e={}),this._dispatchObservableAction(a.defer((function(){return t(n)})),e)},t.prototype._getDispatcher=function(t){return void 0===t&&(t="default"),this._dispatchers[t]||(this._dispatchers[t]=new a.Subject,this._dispatchQueue$.next(this._dispatchers[t])),this._dispatchers[t]},t.prototype._getDispatchError=function(t){return void 0===t&&(t="default"),this._errors[t]||(this._errors[t]=new a.Subject),this._errors[t]},t}();e.default=p},35580:(t,e,n)=>{"use strict";n(95412),n(33409),n(60678),n(97814),Object.defineProperty(e,"__esModule",{value:!0});var r=n(87275),i=n(10874);e.default=function t(e,n){try{var o=n||{},a=o.equalityCheck,u=void 0===a?i:a,s=o.previousValue,c=void 0===s?null:s;return u(e,c)&&Object.isFrozen(c)?c:Object.isFrozen(e)||!Array.isArray(e)&&!r.isPlainObject(e)?e:Array.isArray(e)?Object.freeze(e.map((function(e,n){return t(e,{equalityCheck:u,previousValue:Array.isArray(c)?c[n]:void 0})}))):Object.freeze(Object.getOwnPropertyNames(e).reduce((function(n,r){return n[r]=t(e[r],{equalityCheck:u,previousValue:c&&c.hasOwnProperty(r)?c[r]:void 0}),n}),{}))}catch(t){if(t instanceof TypeError)return e;throw t}}},45346:(t,e,n)=>{"use strict";n(58941).default;var r=n(119);e.UY=r.default;var i=n(50538);e.g0=i.default;var o=n(10520);e.PH=o.default;var a=n(17372);e.Mg=a.default;var u=n(13304);e.bR=u.default;var s=n(35580);e._A=s.default},35643:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"function"==typeof t.subscribe||"function"==typeof t.then}},25151:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t}},32168:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t}},78545:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11077),i=n(51243);e.default=function(t){var e=new r.default;return new i.default(e,t)}},11077:(t,e,n)=>{"use strict";n(13722),n(71806),Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.prototype.build=function(t,e,n){var r=this,i=document.createElement("form");return i.style.display="none",i.setAttribute("action",t),i.setAttribute("method","POST"),i.setAttribute("target",n||"_top"),Object.keys(e).forEach((function(t){var n=e[t];i.appendChild(r._createInput(n,t))})),i},t.prototype._createInput=function(t,e){var n=document.createElement("input");return n.setAttribute("name",e),n.setAttribute("type","hidden"),n.setAttribute("value",t),n},t}();e.default=r},51243:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(73543),i=function(){function t(t,e){this._formBuilder=t,this._options=e}return t.prototype.postForm=function(t,e,n,r){var i=this._formBuilder.build(this._prependHost(t),e,r);window.addEventListener("unload",(function t(){window.removeEventListener("unload",t),n&&n()})),document.body.appendChild(i),i.submit(),document.body.removeChild(i)},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!r.isAbsoluteUrl(t)?r.joinPaths(this._options.host,t):t},t}();e.default=i},13751:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(78545);e.createFormPoster=r.default;var i=n(51243);e.FormPoster=i.default},73543:(t,e,n)=>{"use strict";n(58443),Object.defineProperty(e,"__esModule",{value:!0}),e.isAbsoluteUrl=function(t){return/^https?:\/\//.test(t)},e.joinPaths=function(t,e){return t.replace(/\/$/,"")+"/"+e.replace(/^\//,"")}},65934:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isTerminalCacheKeyMap=function(t){return t.hasOwnProperty("cacheKey")},e.isRootCacheKeyMap=function(t){return t.hasOwnProperty("parentMap")}},67959:(t,e,n)=>{"use strict";n(6550),n(95412),n(16516),n(32345),Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=n(87275),o=r.__importDefault(n(10874)),a=n(65934),u=function(){function t(t){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=r.__assign({isEqual:o.default,maxSize:0,onExpire:i.noop},t)}return t.prototype.getKey=function(){for(var t=[],e=0;e{"use strict";var r=n(78497);e.HP=r.default,e.qe=r.memoizeOne},78497:(t,e,n)=>{"use strict";n(38490),n(34897),n(40737),n(10951),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var r=n(61699),i=r.__importDefault(n(84026)),o=r.__importDefault(n(10874)),a=r.__importDefault(n(67959));function u(t,e){var n=r.__assign({maxSize:0,isEqual:o.default},e),u=n.maxSize,s=n.isEqual,c=new Map,d=new a.default({isEqual:s,maxSize:u,onExpire:function(t){return c.delete(t)}}),l=i.default(t,(function(){for(var t=[],e=0;e{"use strict";n.d(e,{v:()=>i}),n(13722);var r=n(52163),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:t+"?"+r.Pz(e)},t}()},78128:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(53028),i=n(70613),o=n(44169),a=n(73185);function u(t){return new a.Z(new o.Z,new i.Z,r,t)}},98215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(88287);function i(t){return new r.Z(t)}},14121:(t,e,n)=>{"use strict";n.r(e),n.d(e,{RequestSender:()=>o.Z,Timeout:()=>a.Z,createRequestSender:()=>r.Z,createTimeout:()=>i.Z});var r=n(78128),i=n(98215),o=n(73185),a=n(88287)},16927:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return!!t&&("object"===r(t)||"function"==typeof t)&&"function"==typeof t.then}n.d(e,{Z:()=>i}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193)},70613:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u}),n(64668),n(58443),n(34500),n(25959);var r=n(61699),i=n(75457),o=/application\/(\w+\+)?json/,a=/application\/x-www-form-urlencoded/;const u=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,"Content-Type"):"";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(a.test(e))return(0,i.Z)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody("response"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,"Content-Type");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/):[]).reduce((function(t,e){var n,i=e.split(":"),o=(i.shift()||"").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(":").trim(),n)):t}),{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||""},t}()},44169:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i}),n(51725),n(13722),n(71806);var r=n(52163);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||"GET",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),"boolean"==typeof n.credentials&&(t.withCredentials=n.credentials),"number"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter((function(t){return null!==e[t]})).forEach((function(n){t.setRequestHeader(n,e[n])}))},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?t+"?"+r.Pz(e,{encode:n}):t},t}()},73185:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c}),n(40737),n(83823),n(58443),n(34500);var r=n(61699),i=n(59947),o=n.n(i),a=n(90956),u=n(16927),s=n(88287);const c=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.v}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise((function(e,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(t,r,a),e(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof s.Z&&(r.timeout.onComplete((function(){return o.abort()})),r.timeout.start()),(0,u.Z)(r.timeout)&&r.timeout.then((function(){return o.abort()})),o.send(n._payloadTransformer.toRequestBody(r))}))},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"GET"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"POST"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"PUT"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"PATCH"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:"DELETE"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:"application/json, text/plain, */*"},method:"GET"},r=this._cookie.get("XSRF-TOKEN");return r&&n.headers&&!this._isAssetRequest(t,e)&&(n.headers["X-XSRF-TOKEN"]=r),e&&e.body&&n.headers&&(n.headers["Content-Type"]="application/json"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\/\//.test(t)?t:this._options.host.replace(/\/$/,"")+"/"+t.replace(/^\//,"")},t.prototype._shouldCacheRequest=function(t){return"GET"===(t.method||"GET").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||"GET"===e.method.toUpperCase())&&/\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split("?")[0])},t}()},88287:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r}),n(40737),n(83823);const r=function(){function t(t){var e=this;this._delay=t,this._resolve=function(){},this._promise=new Promise((function(t){e._resolve=t}))}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),this._timeoutToken&&window.clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;this._delay&&(this._timeoutToken=window.setTimeout((function(){return t.complete()}),this._delay))},t}()},75457:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return"object"!==r(t)||null===t?t:Object.keys(t).filter((function(e){return void 0!==t[e]})).map((function(e){var n=t[e];return"string"==typeof n?e+"="+encodeURIComponent(n):e+"="+encodeURIComponent(JSON.stringify(n)||"")})).join("&")}n.d(e,{Z:()=>i}),n(93942),n(70472),n(93270),n(51725),n(38490),n(64668),n(95412),n(13722),n(40737),n(10951),n(5193)},52163:(t,e,n)=>{"use strict";n(93942),n(70472),n(93270),n(88033),n(51725),n(6550),n(38490),n(64668),n(95412),n(16516),n(2934),n(99023),n(13722),n(40737),n(10951),n(58443),n(34500),n(25959),n(71806),n(5193);var r=n(29590),i=n(66534);n(99684);function o(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}e.Pz=function(t,e){!1===(e=i({encode:!0,strict:!0,arrayFormat:"none"},e)).sort&&(e.sort=function(){});var n=function(t){switch(t.arrayFormat){case"index":return function(e,n,r){return null===n?[o(e,t),"[",r,"]"].join(""):[o(e,t),"[",o(r,t),"]=",o(n,t)].join("")};case"bracket":return function(e,n){return null===n?o(e,t):[o(e,t),"[]=",o(n,t)].join("")};default:return function(e,n){return null===n?o(e,t):[o(e,t),"=",o(n,t)].join("")}}}(e);return t?Object.keys(t).sort(e.sort).map((function(r){var i=t[r];if(void 0===i)return"";if(null===i)return o(r,e);if(Array.isArray(i)){var a=[];return i.slice().forEach((function(t){void 0!==t&&a.push(n(r,t,a.length))})),a.join("&")}return o(r,e)+"="+o(i,e)})).filter((function(t){return t.length>0})).join("&"):""}},42372:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement("link");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},30799:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(14121),i=n(42372),o=n(89379);e.default=function(){return new o.default(new i.default,r.createRequestSender())}},83116:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(14121),i=n(42372),o=n(41583);e.default=function(){return new o.default(new i.default,r.createRequestSender())}},57537:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(30799);e.default=function(){return r||(r=i.default()),r}},59136:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(83116);e.default=function(){return r||(r=i.default()),r}},56046:(t,e,n)=>{"use strict";n(89379).default;var r=n(30799);e.VD=r.default;var i=n(57537);e.Vr=i.default,n(41583).default,n(83116).default,n(59136).default},89379:(t,e,n)=>{"use strict";n(38490),n(95412),n(13722),n(40737),n(83823),n(10951),n(71806),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise((function(r,i){var o=document.createElement("script"),a=e||{},u=a.async,s=void 0!==u&&u,c=a.attributes,d=void 0===c?{}:c;Object.keys(d).forEach((function(t){o.setAttribute(t,d[t])})),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=s,o.src=t,document.body.appendChild(o)}))),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.loadScript(t,e)}))).then((function(){}))},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise((function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o?"prefetch":"preload";if(n._browserSupport.canSupportRel(a)){var u=document.createElement("link");u.as="script",u.rel=a,u.href=t,u.onload=function(){r()},u.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(u)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:"application/javascript"}}).then((function(){return r()})).catch(i)}))),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.preloadScript(t,e)}))).then((function(){}))},t}();e.default=r},41583:(t,e,n)=>{"use strict";n(38490),n(95412),n(13722),n(40737),n(83823),n(10951),n(71806),n(5193),Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise((function(r,i){var o=document.createElement("link"),a=e||{},u=a.prepend,s=void 0!==u&&u,c=a.attributes,d=void 0===c?{}:c;Object.keys(d).forEach((function(t){o.setAttribute(t,d[t])})),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel="stylesheet",o.href=t,s&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)}))),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.loadStylesheet(t,e)}))).then((function(){}))},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise((function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o,u=a?"prefetch":"preload";if(n._browserSupport.canSupportRel(u)){var s=document.createElement("link");s.as="style",s.rel=a?"prefetch":"preload",s.href=t,s.onload=function(){r()},s.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(s)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:"text/css"}}).then((function(){return r()})).catch(i)}))),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map((function(t){return n.preloadStylesheet(t,e)}))).then((function(){}))},t}();e.default=r},67061:(t,e,n)=>{"use strict";t.exports={number:n(9428),expirationDate:n(10370),expirationMonth:n(86075),expirationYear:n(34005),cvv:n(56348),postalCode:n(46887),creditCardType:n(56897)}},9428:(t,e,n)=>{"use strict";n(58443);var r=n(54442),i=n(56897);function o(t,e,n){return{card:t,isPotentiallyValid:e,isValid:n}}t.exports=function(t,e){var n,a,u,s,c;if(e=e||{},"number"==typeof t&&(t=String(t)),"string"!=typeof t)return o(null,!1,!1);if(t=t.replace(/\-|\s/g,""),!/^\d*$/.test(t))return o(null,!1,!1);if(0===(n=i(t)).length)return o(null,!1,!1);if(1!==n.length)return o(null,!0,!1);if(a=n[0],e.maxLength&&t.length>e.maxLength)return o(a,!1,!1);for(u=a.type===i.types.UNIONPAY&&!0!==e.luhnValidateUnionPay||r(t),c=Math.max.apply(null,a.lengths),e.maxLength&&(c=Math.min(e.maxLength,c)),s=0;s{"use strict";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,n){return n=(n=n||3)instanceof Array?n:[n],"string"!=typeof t?e(!1,!1):/^\d*$/.test(t)?function(t,e){for(var n=0;nfunction(t){for(var e=3,n=0;ne?t[n]:e;return e}(n)?e(!1,!1):e(!0,!0):e(!1,!1)}},10370:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(58443),n(5193);var i=n(30443),o=n(86075),a=n(34005);function u(t,e,n,r){return{isValid:t,isPotentiallyValid:e,month:n,year:r}}t.exports=function(t,e){var n,s,c,d;if("string"==typeof t)t=t.replace(/^(\d\d) (\d\d(\d\d)?)$/,"$1/$2"),n=i(t);else{if(null===t||"object"!==r(t))return u(!1,!1,null,null);n={month:String(t.month),year:String(t.year)}}if(s=o(n.month),c=a(n.year,e),s.isValid){if(c.isCurrentYear)return u(d=s.isValidForThisYear,d,n.month,n.year);if(c.isValid)return u(!0,!0,n.month,n.year)}return s.isPotentiallyValid&&c.isPotentiallyValid?u(!1,!0,null,null):u(!1,!1,null,null)}},86075:(t,e,n)=>{"use strict";function r(t,e,n){return{isValid:t,isPotentiallyValid:e,isValidForThisYear:n||!1}}n(50633),n(58443),t.exports=function(t){var e,n,i=(new Date).getMonth()+1;return"string"!=typeof t?r(!1,!1):""===t.replace(/\s/g,"")||"0"===t?r(!1,!0):/^\d*$/.test(t)?(e=parseInt(t,10),isNaN(t)?r(!1,!1):r(n=e>0&&e<13,n,n&&e>=i)):r(!1,!1)}},34005:(t,e,n)=>{"use strict";n(16516),n(99023),n(50633),n(58443);function r(t,e,n){return{isValid:t,isPotentiallyValid:e,isCurrentYear:n||!1}}t.exports=function(t,e){var n,i,o,a,u;return e=e||19,"string"!=typeof t?r(!1,!1):""===t.replace(/\s/g,"")?r(!1,!0):/^\d*$/.test(t)?(i=t.length)<2?r(!1,!0):(n=(new Date).getFullYear(),3===i?r(!1,t.slice(0,2)===String(n).slice(0,2)):i>4?r(!1,!1):(t=parseInt(t,10),o=Number(String(n).substr(2,2)),2===i?(u=o===t,a=t>=o&&t<=o+e):4===i&&(u=n===t,a=t>=n&&t<=n+e),r(a,a,u))):r(!1,!1)}},16108:(t,e,n)=>{"use strict";n(40737),n(26667),t.exports=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},54442:(t,e,n)=>{"use strict";n(50633),t.exports=function(t){for(var e,n=0,r=!1,i=t.length-1;i>=0;)e=parseInt(t.charAt(i),10),r&&(e*=2)>9&&(e=e%10+1),r=!r,n+=e,i--;return n%10==0}},30443:(t,e,n)=>{"use strict";n(64668),n(72590),n(16516),n(99023),n(34500);var r=n(34005),i=n(16108);t.exports=function(t){var e,n,o,a,u;return/^\d{4}-\d{1,2}$/.test(t)?t=t.split("-").reverse():/\//.test(t)?t=t.split(/\s*\/\s*/g):/\s/.test(t)&&(t=t.split(/ +/g)),i(t)?{month:t[0]||"",year:t.slice(1).join()}:(o=t,n=0===(u=Number(o[0]))?2:u>1||1===u&&Number(o[1])>2?1:1===u?(a=o.substr(1),r(a).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:e=t.substr(0,n),year:t.substr(e.length)})}},46887:t=>{"use strict";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,n){var r;return r=(n=n||{}).minLength||3,"string"!=typeof t?e(!1,!1):t.length{"use strict";n(6550),n(95412),n(32345),n(13722),n(71806);var r,i=n(18906),o=n(80826),a=n(16538),u=n(76754),s=n(25578),c={},d={VISA:"visa",MASTERCARD:"mastercard",AMERICAN_EXPRESS:"american-express",DINERS_CLUB:"diners-club",DISCOVER:"discover",JCB:"jcb",UNIONPAY:"unionpay",MAESTRO:"maestro",ELO:"elo",MIR:"mir",HIPER:"hiper",HIPERCARD:"hipercard"},l=[d.VISA,d.MASTERCARD,d.AMERICAN_EXPRESS,d.DINERS_CLUB,d.DISCOVER,d.JCB,d.UNIONPAY,d.MAESTRO,d.ELO,d.MIR,d.HIPER,d.HIPERCARD];function f(t){return c[t]||i[t]}function p(t,e){var n=r.indexOf(t);if(!e&&-1===n)throw new Error('"'+t+'" is not a supported card type.');return n}function h(t){var e,n=[];return u(t)?0===t.length?r.map((function(t){return o(f(t))})):(r.forEach((function(e){var r=f(e);s(t,r,n)})),(e=a(n))?[e]:n):[]}r=o(l),h.getTypeInfo=function(t){return o(f(t))},h.removeCard=function(t){var e=p(t);r.splice(e,1)},h.addCard=function(t){var e=p(t.type,!0);c[t.type]=t,-1===e&&r.push(t.type)},h.updateCard=function(t,e){var n,r=c[t]||i[t];if(!r)throw new Error('"'+t+'" is not a recognized type. Use `addCard` instead.');if(e.type&&r.type!==e.type)throw new Error("Cannot overwrite type parameter.");n=o(r,!0),Object.keys(n).forEach((function(t){e[t]&&(n[t]=e[t])})),c[n.type]=n},h.changeOrder=function(t,e){var n=p(t);r.splice(n,1),r.splice(e,0,t)},h.resetModifications=function(){r=o(l),c={}},h.types=d,t.exports=h},25578:(t,e,n)=>{"use strict";var r=n(80826),i=n(90013);t.exports=function(t,e,n){var o,a,u,s;for(o=0;o=u&&(s.matchStrength=u),n.push(s);break}}},18906:t=>{"use strict";t.exports={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}}},80826:t=>{"use strict";t.exports=function(t){return t?JSON.parse(JSON.stringify(t)):null}},16538:(t,e,n)=>{"use strict";n(51725),t.exports=function(t){if(function(t){var e=t.filter((function(t){return t.matchStrength})).length;return e>0&&e===t.length}(t))return t.reduce((function(t,e){return t?t.matchStrength{"use strict";t.exports=function(t){return"string"==typeof t||t instanceof String}},90013:(t,e,n)=>{"use strict";n(50633),t.exports=function(t,e){return Array.isArray(e)?function(t,e,n){var r=String(e).length,i=t.substr(0,r),o=parseInt(i,10);return e=parseInt(String(e).substr(0,i.length),10),n=parseInt(String(n).substr(0,i.length),10),o>=e&&o<=n}(t,e[0],e[1]):function(t,e){return(e=String(e)).substring(0,t.length)===t.substring(0,e.length)}(t,e)}},99684:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(88033),n(38490),n(64668),n(16516),n(13722),n(40737),n(84868),n(26667),n(10951),n(15483),n(58443),n(5193);var i="%[a-f0-9]{2}",o=new RegExp("("+i+")|([^%]+?)","gi"),a=new RegExp("("+i+")+","gi");function u(t,e){try{return[decodeURIComponent(t.join(""))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],u(n),u(r))}function s(t){try{return decodeURIComponent(t)}catch(r){for(var e=t.match(o)||[],n=1;n{"use strict";n(93942);var r=n(59788),i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(t,e,n){var o=e[n];if(null!=o){if(i.call(t,n)&&(void 0===t[n]||null===t[n]))throw new TypeError("Cannot convert undefined or null to object ("+n+")");i.call(t,n)&&r(o)?t[n]=u(Object(t[n]),e[n]):t[n]=o}}function u(t,e){if(t===e)return t;for(var n in e=Object(e))i.call(e,n)&&a(t,e,n);if(Object.getOwnPropertySymbols)for(var r=Object.getOwnPropertySymbols(e),u=0;u{"use strict";n(6550),n(13722),t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193),t.exports=function(t){var e=r(t);return null!==t&&("object"===e||"function"===e)}},53028:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(64668),n(16516),n(40737),n(10951),n(58443),n(34500),n(5193),function(n){var i;if("function"==typeof define&&define.amd&&(define(n),i=!0),"object"===r(e)&&(t.exports=n(),i=!0),!i){var o=window.Cookies,a=window.Cookies=n();a.noConflict=function(){return window.Cookies=o,a}}}((function(){function t(){for(var t=0,e={};t{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(95412),n(32345),n(40737),n(84868),n(26667),n(10951),n(58443),n(5193);var i,o="Expected a function",a="__lodash_hash_undefined__",u="[object Function]",s="[object GeneratorFunction]",c=/^\[object .+?Constructor\]$/,d="object"==(void 0===n.g?"undefined":r(n.g))&&n.g&&n.g.Object===Object&&n.g,l="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,f=d||l||Function("return this")(),p=Array.prototype,h=Function.prototype,y=Object.prototype,m=f["__core-js_shared__"],v=(i=/[^.]+$/.exec(m&&m.keys&&m.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"",g=h.toString,_=y.hasOwnProperty,b=y.toString,S=RegExp("^"+g.call(_).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),w=p.splice,C=x(f,"Map"),E=x(Object,"create");function I(t){var e=-1,n=t?t.length:0;for(this.clear();++e-1},P.prototype.set=function(t,e){var n=this.__data__,r=O(n,t);return r<0?n.push([t,e]):n[r][1]=e,this},A.prototype.clear=function(){this.__data__={hash:new I,map:new(C||P),string:new I}},A.prototype.delete=function(t){return T(this,t).delete(t)},A.prototype.get=function(t){return T(this,t).get(t)},A.prototype.has=function(t){return T(this,t).has(t)},A.prototype.set=function(t,e){return T(this,t).set(t,e),this},R.Cache=A,t.exports=R},59947:(t,e,n)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}t=n.nmd(t),n(93942),n(70472),n(93270),n(38490),n(95412),n(16516),n(32345),n(71582),n(40737),n(84868),n(26667),n(10951),n(58443),n(5193);var i="__lodash_hash_undefined__",o=9007199254740991,a="[object Arguments]",u="[object AsyncFunction]",s="[object Function]",c="[object GeneratorFunction]",d="[object Null]",l="[object Object]",f="[object Proxy]",p="[object Undefined]",h=/^\[object .+?Constructor\]$/,y=/^(?:0|[1-9]\d*)$/,m={};m["[object Float32Array]"]=m["[object Float64Array]"]=m["[object Int8Array]"]=m["[object Int16Array]"]=m["[object Int32Array]"]=m["[object Uint8Array]"]=m["[object Uint8ClampedArray]"]=m["[object Uint16Array]"]=m["[object Uint32Array]"]=!0,m[a]=m["[object Array]"]=m["[object ArrayBuffer]"]=m["[object Boolean]"]=m["[object DataView]"]=m["[object Date]"]=m["[object Error]"]=m[s]=m["[object Map]"]=m["[object Number]"]=m[l]=m["[object RegExp]"]=m["[object Set]"]=m["[object String]"]=m["[object WeakMap]"]=!1;var v,g,_,b="object"==(void 0===n.g?"undefined":r(n.g))&&n.g&&n.g.Object===Object&&n.g,S="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,w=b||S||Function("return this")(),C="object"==r(e)&&e&&!e.nodeType&&e,E=C&&"object"==r(t)&&t&&!t.nodeType&&t,I=E&&E.exports===C,P=I&&b.process,A=function(){try{return E&&E.require&&E.require("util").types||P&&P.binding&&P.binding("util")}catch(t){}}(),O=A&&A.isTypedArray,T=Array.prototype,x=Function.prototype,R=Object.prototype,k=w["__core-js_shared__"],M=x.toString,N=R.hasOwnProperty,D=(v=/[^.]+$/.exec(k&&k.keys&&k.keys.IE_PROTO||""))?"Symbol(src)_1."+v:"",L=R.toString,z=M.call(Object),j=RegExp("^"+M.call(N).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),U=I?w.Buffer:void 0,F=w.Symbol,q=w.Uint8Array,B=(U&&U.allocUnsafe,g=Object.getPrototypeOf,_=Object,function(t){return g(_(t))}),G=Object.create,V=R.propertyIsEnumerable,Y=T.splice,H=F?F.toStringTag:void 0,W=function(){try{var t=ht(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),K=U?U.isBuffer:void 0,Z=Math.max,$=Date.now,J=ht(w,"Map"),Q=ht(Object,"create"),X=function(){function t(){}return function(e){if(!Pt(e))return{};if(G)return G(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function tt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1},et.prototype.set=function(t,e){var n=this.__data__,r=at(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},nt.prototype.clear=function(){this.size=0,this.__data__={hash:new tt,map:new(J||et),string:new tt}},nt.prototype.delete=function(t){var e=pt(this,t).delete(t);return this.size-=e?1:0,e},nt.prototype.get=function(t){return pt(this,t).get(t)},nt.prototype.has=function(t){return pt(this,t).has(t)},nt.prototype.set=function(t,e){var n=pt(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},rt.prototype.clear=function(){this.__data__=new et,this.size=0},rt.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},rt.prototype.get=function(t){return this.__data__.get(t)},rt.prototype.has=function(t){return this.__data__.has(t)},rt.prototype.set=function(t,e){var n=this.__data__;if(n instanceof et){var r=n.__data__;if(!J||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new nt(r)}return n.set(t,e),this.size=n.size,this};var st=function(t,e,n){for(var r=-1,i=Object(t),o=n(t),a=o.length;a--;){var u=o[++r];if(!1===e(i[u],u,i))break}return t};function ct(t){return null==t?void 0===t?p:d:H&&H in Object(t)?function(t){var e=N.call(t,H),n=t[H];try{t[H]=void 0;var r=!0}catch(t){}var i=L.call(t);return r&&(e?t[H]=n:delete t[H]),i}(t):function(t){return L.call(t)}(t)}function dt(t){return At(t)&&ct(t)==a}function lt(t,e,n,r,i){t!==e&&st(e,(function(o,a){if(i||(i=new rt),Pt(o))!function(t,e,n,r,i,o,a){var u=vt(t,n),s=vt(e,n),c=a.get(s);if(c)it(t,n,c);else{var d,f,p,h,y,m=o?o(u,s,n+"",t,e,a):void 0,v=void 0===m;if(v){var g=St(s),_=!g&&Ct(s),b=!g&&!_&&Ot(s);m=s,g||_||b?St(u)?m=u:At(y=u)&&wt(y)?m=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n-1&&t%1==0&&t0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ft);function _t(t,e){return t===e||t!=t&&e!=e}var bt=dt(function(){return arguments}())?dt:function(t){return At(t)&&N.call(t,"callee")&&!V.call(t,"callee")},St=Array.isArray;function wt(t){return null!=t&&It(t.length)&&!Et(t)}var Ct=K||function(){return!1};function Et(t){if(!Pt(t))return!1;var e=ct(t);return e==s||e==c||e==u||e==f}function It(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=o}function Pt(t){var e=r(t);return null!=t&&("object"==e||"function"==e)}function At(t){return null!=t&&"object"==r(t)}var Ot=O?function(t){return function(e){return t(e)}}(O):function(t){return At(t)&&It(t.length)&&!!m[ct(t)]};function Tt(t){return wt(t)?function(t,e){var n=St(t),r=!n&&bt(t),i=!n&&!r&&Ct(t),o=!n&&!r&&!i&&Ot(t),a=n||r||i||o,u=a?function(t,e){for(var n=-1,r=Array(t);++n1?e[i-1]:void 0,a=i>2?e[2]:void 0;for(o=xt.length>3&&"function"==typeof o?(i--,o):void 0,a&&function(t,e,n){if(!Pt(n))return!1;var i=r(e);return!!("number"==i?wt(n)&&yt(e,n.length):"string"==i&&e in n)&&_t(n[e],t)}(e[0],e[1],a)&&(o=i<3?void 0:o,i=1),t=Object(t);++n"']/g,W=RegExp(Y.source),K=RegExp(H.source),Z=/<%-([\s\S]+?)%>/g,$=/<%([\s\S]+?)%>/g,J=/<%=([\s\S]+?)%>/g,Q=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,X=/^\w*$/,tt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,et=/[\\^$.*+?()[\]{}|]/g,nt=RegExp(et.source),rt=/^\s+/,it=/\s/,ot=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,at=/\{\n\/\* \[wrapped with (.+)\] \*/,ut=/,? & /,st=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ct=/[()=,{}\[\]\/\s]/,dt=/\\(\\)?/g,lt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ft=/\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,yt=/^\[object .+?Constructor\]$/,mt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\d*)$/,gt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,_t=/($^)/,bt=/['\n\r\u2028\u2029\\]/g,St="\\ud800-\\udfff",wt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ct="\\u2700-\\u27bf",Et="a-z\\xdf-\\xf6\\xf8-\\xff",It="A-Z\\xc0-\\xd6\\xd8-\\xde",Pt="\\ufe0e\\ufe0f",At="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ot="["+St+"]",Tt="["+At+"]",xt="["+wt+"]",Rt="\\d+",kt="["+Ct+"]",Mt="["+Et+"]",Nt="[^"+St+At+Rt+Ct+Et+It+"]",Dt="\\ud83c[\\udffb-\\udfff]",Lt="[^"+St+"]",zt="(?:\\ud83c[\\udde6-\\uddff]){2}",jt="[\\ud800-\\udbff][\\udc00-\\udfff]",Ut="["+It+"]",Ft="\\u200d",qt="(?:"+Mt+"|"+Nt+")",Bt="(?:"+Ut+"|"+Nt+")",Gt="(?:['’](?:d|ll|m|re|s|t|ve))?",Vt="(?:['’](?:D|LL|M|RE|S|T|VE))?",Yt="(?:"+xt+"|"+Dt+")?",Ht="["+Pt+"]?",Wt=Ht+Yt+"(?:"+Ft+"(?:"+[Lt,zt,jt].join("|")+")"+Ht+Yt+")*",Kt="(?:"+[kt,zt,jt].join("|")+")"+Wt,Zt="(?:"+[Lt+xt+"?",xt,zt,jt,Ot].join("|")+")",$t=RegExp("['’]","g"),Jt=RegExp(xt,"g"),Qt=RegExp(Dt+"(?="+Dt+")|"+Zt+Wt,"g"),Xt=RegExp([Ut+"?"+Mt+"+"+Gt+"(?="+[Tt,Ut,"$"].join("|")+")",Bt+"+"+Vt+"(?="+[Tt,Ut+qt,"$"].join("|")+")",Ut+"?"+qt+"+"+Gt,Ut+"+"+Vt,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Rt,Kt].join("|"),"g"),te=RegExp("["+Ft+St+wt+Pt+"]"),ee=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ne=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],re=-1,ie={};ie[M]=ie[N]=ie[D]=ie[L]=ie[z]=ie[j]=ie[U]=ie[F]=ie[q]=!0,ie[y]=ie[m]=ie[R]=ie[v]=ie[k]=ie[g]=ie[_]=ie[b]=ie[w]=ie[C]=ie[E]=ie[P]=ie[A]=ie[O]=ie[x]=!1;var oe={};oe[y]=oe[m]=oe[R]=oe[k]=oe[v]=oe[g]=oe[M]=oe[N]=oe[D]=oe[L]=oe[z]=oe[w]=oe[C]=oe[E]=oe[P]=oe[A]=oe[O]=oe[T]=oe[j]=oe[U]=oe[F]=oe[q]=!0,oe[_]=oe[b]=oe[x]=!1;var ae={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ue=parseFloat,se=parseInt,ce="object"==(void 0===n.g?"undefined":r(n.g))&&n.g&&n.g.Object===Object&&n.g,de="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,le=ce||de||Function("return this")(),fe="object"==r(e)&&e&&!e.nodeType&&e,pe=fe&&"object"==r(t)&&t&&!t.nodeType&&t,he=pe&&pe.exports===fe,ye=he&&ce.process,me=function(){try{return pe&&pe.require&&pe.require("util").types||ye&&ye.binding&&ye.binding("util")}catch(t){}}(),ve=me&&me.isArrayBuffer,ge=me&&me.isDate,_e=me&&me.isMap,be=me&&me.isRegExp,Se=me&&me.isSet,we=me&&me.isTypedArray;function Ce(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function xe(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Ue(e,t[n],0)>-1;);return n}var tn=Ve({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),en=Ve({"&":"&","<":"<",">":">",'"':""","'":"'"});function nn(t){return"\\"+ae[t]}function rn(t){return te.test(t)}function on(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function an(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n",""":'"',"'":"'"}),hn=function t(e){var n,it=(e=null==e?le:hn.defaults(le.Object(),e,hn.pick(le,ne))).Array,St=e.Date,wt=e.Error,Ct=e.Function,Et=e.Math,It=e.Object,Pt=e.RegExp,At=e.String,Ot=e.TypeError,Tt=it.prototype,xt=Ct.prototype,Rt=It.prototype,kt=e["__core-js_shared__"],Mt=xt.toString,Nt=Rt.hasOwnProperty,Dt=0,Lt=(n=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",zt=Rt.toString,jt=Mt.call(It),Ut=le._,Ft=Pt("^"+Mt.call(Nt).replace(et,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),qt=he?e.Buffer:i,Bt=e.Symbol,Gt=e.Uint8Array,Vt=qt?qt.allocUnsafe:i,Yt=an(It.getPrototypeOf,It),Ht=It.create,Wt=Rt.propertyIsEnumerable,Kt=Tt.splice,Zt=Bt?Bt.isConcatSpreadable:i,Qt=Bt?Bt.iterator:i,te=Bt?Bt.toStringTag:i,ae=function(){try{var t=co(It,"defineProperty");return t({},"",{}),t}catch(t){}}(),ce=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,de=St&&St.now!==le.Date.now&&St.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=Et.ceil,ye=Et.floor,me=It.getOwnPropertySymbols,Le=qt?qt.isBuffer:i,Ve=e.isFinite,yn=Tt.join,mn=an(It.keys,It),vn=Et.max,gn=Et.min,_n=St.now,bn=e.parseInt,Sn=Et.random,wn=Tt.reverse,Cn=co(e,"DataView"),En=co(e,"Map"),In=co(e,"Promise"),Pn=co(e,"Set"),An=co(e,"WeakMap"),On=co(It,"create"),Tn=An&&new An,xn={},Rn=jo(Cn),kn=jo(En),Mn=jo(In),Nn=jo(Pn),Dn=jo(An),Ln=Bt?Bt.prototype:i,zn=Ln?Ln.valueOf:i,jn=Ln?Ln.toString:i;function Un(t){if(eu(t)&&!Va(t)&&!(t instanceof Gn)){if(t instanceof Bn)return t;if(Nt.call(t,"__wrapped__"))return Uo(t)}return new Bn(t)}var Fn=function(){function t(){}return function(e){if(!tu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=i,n}}();function qn(){}function Bn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=i}function Gn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function ur(t,e,n,r,o,a){var u,s=1&e,c=2&e,d=4&e;if(n&&(u=o?n(t,r,o,a):n(t)),u!==i)return u;if(!tu(t))return t;var l=Va(t);if(l){if(u=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&Nt.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!s)return Ai(t,u)}else{var f=po(t),p=f==b||f==S;if(Ka(t))return Si(t,s);if(f==E||f==y||p&&!o){if(u=c||p?{}:yo(t),!s)return c?function(t,e){return Oi(t,fo(t),e)}(t,function(t,e){return t&&Oi(e,ku(e),t)}(u,t)):function(t,e){return Oi(t,lo(t),e)}(t,rr(u,t))}else{if(!oe[f])return o?t:{};u=function(t,e,n){var r,i=t.constructor;switch(e){case R:return wi(t);case v:case g:return new i(+t);case k:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case M:case N:case D:case L:case z:case j:case U:case F:case q:return Ci(t,n);case w:return new i;case C:case O:return new i(t);case P:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case A:return new i;case T:return r=t,zn?It(zn.call(r)):{}}}(t,f,s)}}a||(a=new Kn);var h=a.get(t);if(h)return h;a.set(t,u),au(t)?t.forEach((function(r){u.add(ur(r,e,n,r,t,a))})):nu(t)&&t.forEach((function(r,i){u.set(i,ur(r,e,n,i,t,a))}));var m=l?i:(d?c?no:eo:c?ku:Ru)(t);return Ie(m||t,(function(r,i){m&&(r=t[i=r]),tr(u,i,ur(r,e,n,i,t,a))})),u}function sr(t,e,n){var r=n.length;if(null==t)return!r;for(t=It(t);r--;){var o=n[r],a=e[o],u=t[o];if(u===i&&!(o in t)||!a(u))return!1}return!0}function cr(t,e,n){if("function"!=typeof t)throw new Ot(o);return To((function(){t.apply(i,n)}),e)}function dr(t,e,n,r){var i=-1,o=Te,a=!0,u=t.length,s=[],c=e.length;if(!u)return s;n&&(e=Re(e,Ze(n))),r?(o=xe,a=!1):e.length>=200&&(o=Je,a=!1,e=new Wn(e));t:for(;++i-1},Yn.prototype.set=function(t,e){var n=this.__data__,r=er(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new Vn,map:new(En||Yn),string:new Vn}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Wn.prototype.add=Wn.prototype.push=function(t){return this.__data__.set(t,a),this},Wn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.clear=function(){this.__data__=new Yn,this.size=0},Kn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Kn.prototype.get=function(t){return this.__data__.get(t)},Kn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Yn){var r=n.__data__;if(!En||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var lr=Ri(_r),fr=Ri(br,!0);function pr(t,e){var n=!0;return lr(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function hr(t,e,n){for(var r=-1,o=t.length;++r0&&n(u)?e>1?mr(u,e-1,n,r,i):ke(i,u):r||(i[i.length]=u)}return i}var vr=ki(),gr=ki(!0);function _r(t,e){return t&&vr(t,e,Ru)}function br(t,e){return t&&gr(t,e,Ru)}function Sr(t,e){return Oe(e,(function(e){return Ja(t[e])}))}function wr(t,e){for(var n=0,r=(e=vi(e,t)).length;null!=t&&ne}function Pr(t,e){return null!=t&&Nt.call(t,e)}function Ar(t,e){return null!=t&&e in It(t)}function Or(t,e,n){for(var r=n?xe:Te,o=t[0].length,a=t.length,u=a,s=it(a),c=1/0,d=[];u--;){var l=t[u];u&&e&&(l=Re(l,Ze(e))),c=gn(l.length,c),s[u]=!n&&(e||o>=120&&l.length>=120)?new Wn(u&&l):i}l=t[0];var f=-1,p=s[0];t:for(;++f=u?s:s*("desc"==n[r]?-1:1)}return t.index-e.index}(t,e,n)}));r--;)t[r]=t[r].value;return t}(i)}function Gr(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)u!==t&&Kt.call(u,s,1),Kt.call(t,s,1);return t}function Yr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;vo(i)?Kt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+ye(Sn()*(e-t+1))}function Wr(t,e){var n="";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=ye(e/2))&&(t+=t)}while(e);return n}function Kr(t,e){return xo(Io(t,e,rs),t+"")}function Zr(t){return $n(Fu(t))}function $r(t,e){var n=Fu(t);return Mo(n,ar(e,0,n.length))}function Jr(t,e,n,r){if(!tu(t))return t;for(var o=-1,a=(e=vi(e,t)).length,u=a-1,s=t;null!=s&&++oi?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=it(i);++r>>1,a=t[o];null!==a&&!su(a)&&(n?a<=e:a=200){var c=e?null:Wi(t);if(c)return sn(c);a=!1,i=Je,s=new Wn}else s=e?[]:u;t:for(;++r=r?t:ei(t,e,n)}var bi=ce||function(t){return le.clearTimeout(t)};function Si(t,e){if(e)return t.slice();var n=t.length,r=Vt?Vt(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Gt(e).set(new Gt(t)),e}function Ci(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ei(t,e){if(t!==e){var n=t!==i,r=null===t,o=t==t,a=su(t),u=e!==i,s=null===e,c=e==e,d=su(e);if(!s&&!d&&!a&&t>e||a&&u&&c&&!s&&!d||r&&u&&c||!n&&c||!o)return 1;if(!r&&!a&&!d&&t1?n[o-1]:i,u=o>2?n[2]:i;for(a=t.length>3&&"function"==typeof a?(o--,a):i,u&&go(n[0],n[1],u)&&(a=o<3?i:a,o=1),e=It(e);++r-1?o[a?e[u]:u]:i}}function zi(t){return to((function(e){var n=e.length,r=n,a=Bn.prototype.thru;for(t&&e.reverse();r--;){var u=e[r];if("function"!=typeof u)throw new Ot(o);if(a&&!s&&"wrapper"==io(u))var s=new Bn([],!0)}for(r=s?r:n;++r1&&_.reverse(),f&&ds))return!1;var d=a.get(t),l=a.get(e);if(d&&l)return d==e&&l==t;var f=-1,p=!0,h=2&n?new Wn:i;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(ot,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ie(h,(function(n){var r="_."+n[0];e&n[1]&&!Te(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(at);return e?e[1].split(ut):[]}(r),n)))}function ko(t){var e=0,n=0;return function(){var r=_n(),o=16-(r-n);if(n=r,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Mo(t,e){var n=-1,r=t.length,o=r-1;for(e=e===i?r:e;++n1?t[e-1]:i;return n="function"==typeof n?(t.pop(),n):i,oa(t,n)}));function fa(t){var e=Un(t);return e.__chain__=!0,e}function pa(t,e){return e(t)}var ha=to((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return or(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Gn&&vo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:pa,args:[o],thisArg:i}),new Bn(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)})),ya=Ti((function(t,e,n){Nt.call(t,n)?++t[n]:ir(t,n,1)})),ma=Li(Go),va=Li(Vo);function ga(t,e){return(Va(t)?Ie:lr)(t,ao(e,3))}function _a(t,e){return(Va(t)?Pe:fr)(t,ao(e,3))}var ba=Ti((function(t,e,n){Nt.call(t,n)?t[n].push(e):ir(t,n,[e])})),Sa=Kr((function(t,e,n){var r=-1,i="function"==typeof e,o=Ha(t)?it(t.length):[];return lr(t,(function(t){o[++r]=i?Ce(e,t,n):Tr(t,e,n)})),o})),wa=Ti((function(t,e,n){ir(t,n,e)}));function Ca(t,e){return(Va(t)?Re:zr)(t,ao(e,3))}var Ea=Ti((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]})),Ia=Kr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&go(t,e[0],e[1])?e=[]:n>2&&go(e[0],e[1],e[2])&&(e=[e[0]]),Br(t,mr(e,1),[])})),Pa=de||function(){return le.Date.now()};function Aa(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Zi(t,c,i,i,i,i,e)}function Oa(t,e){var n;if("function"!=typeof e)throw new Ot(o);return t=hu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Ta=Kr((function(t,e,n){var r=1;if(n.length){var i=un(n,oo(Ta));r|=s}return Zi(t,r,e,n,i)})),xa=Kr((function(t,e,n){var r=3;if(n.length){var i=un(n,oo(xa));r|=s}return Zi(e,r,t,n,i)}));function Ra(t,e,n){var r,a,u,s,c,d,l=0,f=!1,p=!1,h=!0;if("function"!=typeof t)throw new Ot(o);function y(e){var n=r,o=a;return r=a=i,l=e,s=t.apply(o,n)}function m(t){var n=t-d;return d===i||n>=e||n<0||p&&t-l>=u}function v(){var t=Pa();if(m(t))return g(t);c=To(v,function(t){var n=e-(t-d);return p?gn(n,u-(t-l)):n}(t))}function g(t){return c=i,h&&r?y(t):(r=a=i,s)}function _(){var t=Pa(),n=m(t);if(r=arguments,a=this,d=t,n){if(c===i)return function(t){return l=t,c=To(v,e),f?y(t):s}(d);if(p)return bi(c),c=To(v,e),y(d)}return c===i&&(c=To(v,e)),s}return e=mu(e)||0,tu(n)&&(f=!!n.leading,u=(p="maxWait"in n)?vn(mu(n.maxWait)||0,e):u,h="trailing"in n?!!n.trailing:h),_.cancel=function(){c!==i&&bi(c),l=0,r=d=a=c=i},_.flush=function(){return c===i?s:g(Pa())},_}var ka=Kr((function(t,e){return cr(t,1,e)})),Ma=Kr((function(t,e,n){return cr(t,mu(e)||0,n)}));function Na(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new Ot(o);var n=function n(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(Na.Cache||Hn),n}function Da(t){if("function"!=typeof t)throw new Ot(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Na.Cache=Hn;var La=gi((function(t,e){var n=(e=1==e.length&&Va(e[0])?Re(e[0],Ze(ao())):Re(mr(e,1),Ze(ao()))).length;return Kr((function(r){for(var i=-1,o=gn(r.length,n);++i=e})),Ga=xr(function(){return arguments}())?xr:function(t){return eu(t)&&Nt.call(t,"callee")&&!Wt.call(t,"callee")},Va=it.isArray,Ya=ve?Ze(ve):function(t){return eu(t)&&Er(t)==R};function Ha(t){return null!=t&&Xa(t.length)&&!Ja(t)}function Wa(t){return eu(t)&&Ha(t)}var Ka=Le||ms,Za=ge?Ze(ge):function(t){return eu(t)&&Er(t)==g};function $a(t){if(!eu(t))return!1;var e=Er(t);return e==_||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!iu(t)}function Ja(t){if(!tu(t))return!1;var e=Er(t);return e==b||e==S||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Qa(t){return"number"==typeof t&&t==hu(t)}function Xa(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=l}function tu(t){var e=r(t);return null!=t&&("object"==e||"function"==e)}function eu(t){return null!=t&&"object"==r(t)}var nu=_e?Ze(_e):function(t){return eu(t)&&po(t)==w};function ru(t){return"number"==typeof t||eu(t)&&Er(t)==C}function iu(t){if(!eu(t)||Er(t)!=E)return!1;var e=Yt(t);if(null===e)return!0;var n=Nt.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Mt.call(n)==jt}var ou=be?Ze(be):function(t){return eu(t)&&Er(t)==P},au=Se?Ze(Se):function(t){return eu(t)&&po(t)==A};function uu(t){return"string"==typeof t||!Va(t)&&eu(t)&&Er(t)==O}function su(t){return"symbol"==r(t)||eu(t)&&Er(t)==T}var cu=we?Ze(we):function(t){return eu(t)&&Xa(t.length)&&!!ie[Er(t)]},du=Vi(Lr),lu=Vi((function(t,e){return t<=e}));function fu(t){if(!t)return[];if(Ha(t))return uu(t)?ln(t):Ai(t);if(Qt&&t[Qt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Qt]());var e=po(t);return(e==w?on:e==A?sn:Fu)(t)}function pu(t){return t?(t=mu(t))===d||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function hu(t){var e=pu(t),n=e%1;return e==e?n?e-n:e:0}function yu(t){return t?ar(hu(t),0,p):0}function mu(t){if("number"==typeof t)return t;if(su(t))return f;if(tu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=tu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ke(t);var n=ht.test(t);return n||mt.test(t)?se(t.slice(2),n?2:8):pt.test(t)?f:+t}function vu(t){return Oi(t,ku(t))}function gu(t){return null==t?"":ui(t)}var _u=xi((function(t,e){if(wo(e)||Ha(e))Oi(e,Ru(e),t);else for(var n in e)Nt.call(e,n)&&tr(t,n,e[n])})),bu=xi((function(t,e){Oi(e,ku(e),t)})),Su=xi((function(t,e,n,r){Oi(e,ku(e),t,r)})),wu=xi((function(t,e,n,r){Oi(e,Ru(e),t,r)})),Cu=to(or),Eu=Kr((function(t,e){t=It(t);var n=-1,r=e.length,o=r>2?e[2]:i;for(o&&go(e[0],e[1],o)&&(r=1);++n1),e})),Oi(t,no(t),n),r&&(n=ur(n,7,Qi));for(var i=e.length;i--;)ci(n,e[i]);return n})),Lu=to((function(t,e){return null==t?{}:function(t,e){return Gr(t,e,(function(e,n){return Au(t,n)}))}(t,e)}));function zu(t,e){if(null==t)return{};var n=Re(no(t),(function(t){return[t]}));return e=ao(e),Gr(t,n,(function(t,n){return e(t,n[0])}))}var ju=Ki(Ru),Uu=Ki(ku);function Fu(t){return null==t?[]:$e(t,Ru(t))}var qu=Ni((function(t,e,n){return e=e.toLowerCase(),t+(n?Bu(e):e)}));function Bu(t){return $u(gu(t).toLowerCase())}function Gu(t){return(t=gu(t))&&t.replace(gt,tn).replace(Jt,"")}var Vu=Ni((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Yu=Ni((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Hu=Mi("toLowerCase"),Wu=Ni((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()})),Ku=Ni((function(t,e,n){return t+(n?" ":"")+$u(e)})),Zu=Ni((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),$u=Mi("toUpperCase");function Ju(t,e,n){return t=gu(t),(e=n?i:e)===i?function(t){return ee.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(e)||[]}var Qu=Kr((function(t,e){try{return Ce(t,i,e)}catch(t){return $a(t)?t:new wt(t)}})),Xu=to((function(t,e){return Ie(e,(function(e){e=zo(e),ir(t,e,Ta(t[e],t))})),t}));function ts(t){return function(){return t}}var es=zi(),ns=zi(!0);function rs(t){return t}function is(t){return Nr("function"==typeof t?t:ur(t,1))}var os=Kr((function(t,e){return function(n){return Tr(n,t,e)}})),as=Kr((function(t,e){return function(n){return Tr(t,n,e)}}));function us(t,e,n){var r=Ru(e),i=Sr(e,r);null!=n||tu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Sr(e,Ru(e)));var o=!(tu(n)&&"chain"in n&&!n.chain),a=Ja(t);return Ie(i,(function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,ke([this.value()],arguments))})})),t}function ss(){}var cs=qi(Re),ds=qi(Ae),ls=qi(De);function fs(t){return _o(t)?Ge(zo(t)):function(t){return function(e){return wr(e,t)}}(t)}var ps=Gi(),hs=Gi(!0);function ys(){return[]}function ms(){return!1}var vs,gs=Fi((function(t,e){return t+e}),0),_s=Hi("ceil"),bs=Fi((function(t,e){return t/e}),1),Ss=Hi("floor"),ws=Fi((function(t,e){return t*e}),1),Cs=Hi("round"),Es=Fi((function(t,e){return t-e}),0);return Un.after=function(t,e){if("function"!=typeof e)throw new Ot(o);return t=hu(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=Aa,Un.assign=_u,Un.assignIn=bu,Un.assignInWith=Su,Un.assignWith=wu,Un.at=Cu,Un.before=Oa,Un.bind=Ta,Un.bindAll=Xu,Un.bindKey=xa,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Va(t)?t:[t]},Un.chain=fa,Un.chunk=function(t,e,n){e=(n?go(t,e,n):e===i)?1:vn(hu(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var o=0,a=0,u=it(pe(r/e));oo?0:o+n),(r=r===i||r>o?o:hu(r))<0&&(r+=o),r=n>r?0:yu(r);n>>0)?(t=gu(t))&&("string"==typeof e||null!=e&&!ou(e))&&!(e=ui(e))&&rn(t)?_i(ln(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if("function"!=typeof t)throw new Ot(o);return e=null==e?0:vn(hu(e),0),Kr((function(n){var r=n[e],i=_i(n,0,e);return r&&ke(i,r),Ce(t,this,i)}))},Un.tail=function(t){var e=null==t?0:t.length;return e?ei(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ei(t,0,(e=n||e===i?1:hu(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?ei(t,(e=r-(e=n||e===i?1:hu(e)))<0?0:e,r):[]},Un.takeRightWhile=function(t,e){return t&&t.length?li(t,ao(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?li(t,ao(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new Ot(o);return tu(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Ra(t,e,{leading:r,maxWait:e,trailing:i})},Un.thru=pa,Un.toArray=fu,Un.toPairs=ju,Un.toPairsIn=Uu,Un.toPath=function(t){return Va(t)?Re(t,zo):su(t)?[t]:Ai(Lo(gu(t)))},Un.toPlainObject=vu,Un.transform=function(t,e,n){var r=Va(t),i=r||Ka(t)||cu(t);if(e=ao(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:tu(t)&&Ja(o)?Fn(Yt(t)):{}}return(i?Ie:_r)(t,(function(t,r,i){return e(n,t,r,i)})),n},Un.unary=function(t){return Aa(t,1)},Un.union=ea,Un.unionBy=na,Un.unionWith=ra,Un.uniq=function(t){return t&&t.length?si(t):[]},Un.uniqBy=function(t,e){return t&&t.length?si(t,ao(e,2)):[]},Un.uniqWith=function(t,e){return e="function"==typeof e?e:i,t&&t.length?si(t,i,e):[]},Un.unset=function(t,e){return null==t||ci(t,e)},Un.unzip=ia,Un.unzipWith=oa,Un.update=function(t,e,n){return null==t?t:di(t,e,mi(n))},Un.updateWith=function(t,e,n,r){return r="function"==typeof r?r:i,null==t?t:di(t,e,mi(n),r)},Un.values=Fu,Un.valuesIn=function(t){return null==t?[]:$e(t,ku(t))},Un.without=aa,Un.words=Ju,Un.wrap=function(t,e){return za(mi(e),t)},Un.xor=ua,Un.xorBy=sa,Un.xorWith=ca,Un.zip=da,Un.zipObject=function(t,e){return hi(t||[],e||[],tr)},Un.zipObjectDeep=function(t,e){return hi(t||[],e||[],Jr)},Un.zipWith=la,Un.entries=ju,Un.entriesIn=Uu,Un.extend=bu,Un.extendWith=Su,us(Un,Un),Un.add=gs,Un.attempt=Qu,Un.camelCase=qu,Un.capitalize=Bu,Un.ceil=_s,Un.clamp=function(t,e,n){return n===i&&(n=e,e=i),n!==i&&(n=(n=mu(n))==n?n:0),e!==i&&(e=(e=mu(e))==e?e:0),ar(mu(t),e,n)},Un.clone=function(t){return ur(t,4)},Un.cloneDeep=function(t){return ur(t,5)},Un.cloneDeepWith=function(t,e){return ur(t,5,e="function"==typeof e?e:i)},Un.cloneWith=function(t,e){return ur(t,4,e="function"==typeof e?e:i)},Un.conformsTo=function(t,e){return null==e||sr(t,e,Ru(e))},Un.deburr=Gu,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=bs,Un.endsWith=function(t,e,n){t=gu(t),e=ui(e);var r=t.length,o=n=n===i?r:ar(hu(n),0,r);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=Fa,Un.escape=function(t){return(t=gu(t))&&K.test(t)?t.replace(H,en):t},Un.escapeRegExp=function(t){return(t=gu(t))&&nt.test(t)?t.replace(et,"\\$&"):t},Un.every=function(t,e,n){var r=Va(t)?Ae:pr;return n&&go(t,e,n)&&(e=i),r(t,ao(e,3))},Un.find=ma,Un.findIndex=Go,Un.findKey=function(t,e){return ze(t,ao(e,3),_r)},Un.findLast=va,Un.findLastIndex=Vo,Un.findLastKey=function(t,e){return ze(t,ao(e,3),br)},Un.floor=Ss,Un.forEach=ga,Un.forEachRight=_a,Un.forIn=function(t,e){return null==t?t:vr(t,ao(e,3),ku)},Un.forInRight=function(t,e){return null==t?t:gr(t,ao(e,3),ku)},Un.forOwn=function(t,e){return t&&_r(t,ao(e,3))},Un.forOwnRight=function(t,e){return t&&br(t,ao(e,3))},Un.get=Pu,Un.gt=qa,Un.gte=Ba,Un.has=function(t,e){return null!=t&&ho(t,e,Pr)},Un.hasIn=Au,Un.head=Ho,Un.identity=rs,Un.includes=function(t,e,n,r){t=Ha(t)?t:Fu(t),n=n&&!r?hu(n):0;var i=t.length;return n<0&&(n=vn(i+n,0)),uu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ue(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:hu(n);return i<0&&(i=vn(r+i,0)),Ue(t,e,i)},Un.inRange=function(t,e,n){return e=pu(e),n===i?(n=e,e=0):n=pu(n),function(t,e,n){return t>=gn(e,n)&&t=-9007199254740991&&t<=l},Un.isSet=au,Un.isString=uu,Un.isSymbol=su,Un.isTypedArray=cu,Un.isUndefined=function(t){return t===i},Un.isWeakMap=function(t){return eu(t)&&po(t)==x},Un.isWeakSet=function(t){return eu(t)&&"[object WeakSet]"==Er(t)},Un.join=function(t,e){return null==t?"":yn.call(t,e)},Un.kebabCase=Vu,Un.last=$o,Un.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r;return n!==i&&(o=(o=hu(n))<0?vn(r+o,0):gn(o,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):je(t,qe,o,!0)},Un.lowerCase=Yu,Un.lowerFirst=Hu,Un.lt=du,Un.lte=lu,Un.max=function(t){return t&&t.length?hr(t,rs,Ir):i},Un.maxBy=function(t,e){return t&&t.length?hr(t,ao(e,2),Ir):i},Un.mean=function(t){return Be(t,rs)},Un.meanBy=function(t,e){return Be(t,ao(e,2))},Un.min=function(t){return t&&t.length?hr(t,rs,Lr):i},Un.minBy=function(t,e){return t&&t.length?hr(t,ao(e,2),Lr):i},Un.stubArray=ys,Un.stubFalse=ms,Un.stubObject=function(){return{}},Un.stubString=function(){return""},Un.stubTrue=function(){return!0},Un.multiply=ws,Un.nth=function(t,e){return t&&t.length?qr(t,hu(e)):i},Un.noConflict=function(){return le._===this&&(le._=Ut),this},Un.noop=ss,Un.now=Pa,Un.pad=function(t,e,n){t=gu(t);var r=(e=hu(e))?dn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Bi(ye(i),n)+t+Bi(pe(i),n)},Un.padEnd=function(t,e,n){t=gu(t);var r=(e=hu(e))?dn(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var o=Sn();return gn(t+o*(e-t+ue("1e-"+((o+"").length-1))),e)}return Hr(t,e)},Un.reduce=function(t,e,n){var r=Va(t)?Me:Ye,i=arguments.length<3;return r(t,ao(e,4),n,i,lr)},Un.reduceRight=function(t,e,n){var r=Va(t)?Ne:Ye,i=arguments.length<3;return r(t,ao(e,4),n,i,fr)},Un.repeat=function(t,e,n){return e=(n?go(t,e,n):e===i)?1:hu(e),Wr(gu(t),e)},Un.replace=function(){var t=arguments,e=gu(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var r=-1,o=(e=vi(e,t)).length;for(o||(o=1,t=i);++rl)return[];var n=p,r=gn(t,p);e=ao(e),t-=p;for(var i=We(r,e);++n=a)return t;var s=n-dn(r);if(s<1)return r;var c=u?_i(u,0,s).join(""):t.slice(0,s);if(o===i)return c+r;if(u&&(s+=c.length-s),ou(o)){if(t.slice(s).search(o)){var d,l=c;for(o.global||(o=Pt(o.source,gu(ft.exec(o))+"g")),o.lastIndex=0;d=o.exec(l);)var f=d.index;c=c.slice(0,f===i?s:f)}}else if(t.indexOf(ui(o),s)!=s){var p=c.lastIndexOf(o);p>-1&&(c=c.slice(0,p))}return c+r},Un.unescape=function(t){return(t=gu(t))&&W.test(t)?t.replace(Y,pn):t},Un.uniqueId=function(t){var e=++Dt;return gu(t)+e},Un.upperCase=Zu,Un.upperFirst=$u,Un.each=ga,Un.eachRight=_a,Un.first=Ho,us(Un,(vs={},_r(Un,(function(t,e){Nt.call(Un.prototype,e)||(vs[e]=t)})),vs),{chain:!1}),Un.VERSION="4.17.21",Ie(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Un[t].placeholder=Un})),Ie(["drop","take"],(function(t,e){Gn.prototype[t]=function(n){n=n===i?1:vn(hu(n),0);var r=this.__filtered__&&!e?new Gn(this):this.clone();return r.__filtered__?r.__takeCount__=gn(n,r.__takeCount__):r.__views__.push({size:gn(n,p),type:t+(r.__dir__<0?"Right":"")}),r},Gn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),Ie(["filter","map","takeWhile"],(function(t,e){var n=e+1,r=1==n||3==n;Gn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ao(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),Ie(["head","last"],(function(t,e){var n="take"+(e?"Right":"");Gn.prototype[t]=function(){return this[n](1).value()[0]}})),Ie(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");Gn.prototype[t]=function(){return this.__filtered__?new Gn(this):this[n](1)}})),Gn.prototype.compact=function(){return this.filter(rs)},Gn.prototype.find=function(t){return this.filter(t).head()},Gn.prototype.findLast=function(t){return this.reverse().find(t)},Gn.prototype.invokeMap=Kr((function(t,e){return"function"==typeof t?new Gn(this):this.map((function(n){return Tr(n,t,e)}))})),Gn.prototype.reject=function(t){return this.filter(Da(ao(t)))},Gn.prototype.slice=function(t,e){t=hu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Gn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(n=(e=hu(e))<0?n.dropRight(-e):n.take(e-t)),n)},Gn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Gn.prototype.toArray=function(){return this.take(p)},_r(Gn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=Un[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,u=r?[1]:arguments,s=e instanceof Gn,c=u[0],d=s||Va(e),l=function(t){var e=o.apply(Un,ke([t],u));return r&&f?e[0]:e};d&&n&&"function"==typeof c&&1!=c.length&&(s=d=!1);var f=this.__chain__,p=!!this.__actions__.length,h=a&&!f,y=s&&!p;if(!a&&d){e=y?e:new Gn(this);var m=t.apply(e,u);return m.__actions__.push({func:pa,args:[l],thisArg:i}),new Bn(m,f)}return h&&y?t.apply(this,u):(m=this.thru(l),h?r?m.value()[0]:m.value():m)})})),Ie(["pop","push","shift","sort","splice","unshift"],(function(t){var e=Tt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Va(i)?i:[],t)}return this[n]((function(n){return e.apply(Va(n)?n:[],t)}))}})),_r(Gn.prototype,(function(t,e){var n=Un[e];if(n){var r=n.name+"";Nt.call(xn,r)||(xn[r]=[]),xn[r].push({name:e,func:n})}})),xn[ji(i,2).name]=[{name:"wrapper",func:i}],Gn.prototype.clone=function(){var t=new Gn(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},Gn.prototype.reverse=function(){if(this.__filtered__){var t=new Gn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Gn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Va(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof qn;){var r=Uo(n);r.__index__=0,r.__values__=i,e?o.__wrapped__=r:e=r;var o=r;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Gn){var e=t;return this.__actions__.length&&(e=new Gn(this)),(e=e.reverse()).__actions__.push({func:pa,args:[ta],thisArg:i}),new Bn(e,this.__chain__)}return this.thru(ta)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return fi(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Qt&&(Un.prototype[Qt]=function(){return this}),Un}();"function"==typeof define&&"object"==r(define.amd)&&define.amd?(le._=hn,define((function(){return hn}))):pe?((pe.exports=hn)._=hn,fe._=hn):le._=hn}.call(this)},66534:(t,e,n)=>{"use strict";n(93942),n(64668),n(95412),n(27835),n(60678),n(13722),n(34500);var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(t){r[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,a,u=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),s=1;s{"use strict";function r(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,u=[],s=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(u.push(r.value),u.length!==e);s=!0);}catch(t){c=!0,i=t}finally{try{if(!s&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return u}}(t,e)||u(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t){return function(t){if(Array.isArray(t))return s(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||u(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e){if(t){if("string"==typeof t)return s(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(t,e):void 0}}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0})).join("&")},e.parseUrl=function(t,e){e=Object.assign({decode:!0},e);var n=i(l(t,"#"),2),r=n[0],o=n[1];return Object.assign({url:r.split("?")[0]||"",query:S(_(t),e)},e&&e.parseFragmentIdentifier&&o?{fragmentIdentifier:m(o,e)}:{})},e.stringifyUrl=function(t,n){n=Object.assign(r({encode:!0,strict:!0},p,!0),n);var i=g(t.url).split("?")[0]||"",o=e.extract(t.url),a=e.parse(o,{sort:!1}),u=Object.assign(a,t.query),s=e.stringify(u,n);s&&(s="?".concat(s));var c=function(t){var e="",n=t.indexOf("#");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(c="#".concat(n[p]?y(t.fragmentIdentifier,n):t.fragmentIdentifier)),"".concat(i).concat(s).concat(c)},e.pick=function(t,n,i){i=Object.assign(r({parseFragmentIdentifier:!0},p,!1),i);var o=e.parseUrl(t,i),a=o.url,u=o.query,s=o.fragmentIdentifier;return e.stringifyUrl({url:a,query:f(u,n),fragmentIdentifier:s},i)},e.exclude=function(t,n,r){var i=Array.isArray(n)?function(t){return!n.includes(t)}:function(t,e){return!n(t,e)};return e.pick(t,i,r)}},89311:(t,e,n)=>{"use strict";n(40737),n(26667),n(58443),t.exports=function(t){return encodeURIComponent(t).replace(/[!'()*]/g,(function(t){return"%".concat(t.charCodeAt(0).toString(16).toUpperCase())}))}},57469:(t,e,n)=>{"use strict";n.r(e),n.d(e,{ArgumentOutOfRangeError:()=>x.W,AsyncSubject:()=>d.c,BehaviorSubject:()=>s.X,ConnectableObservable:()=>i.c,EMPTY:()=>Z.E,EmptyError:()=>R.K,GroupedObservable:()=>o.T,NEVER:()=>dt,Notification:()=>I.P,NotificationKind:()=>I.W,ObjectUnsubscribedError:()=>k.N,Observable:()=>r.y,ReplaySubject:()=>c.t,Scheduler:()=>w.b,Subject:()=>u.xQ,Subscriber:()=>E.L,Subscription:()=>C.w,TimeoutError:()=>N.W,UnsubscriptionError:()=>M.B,VirtualAction:()=>S,VirtualTimeScheduler:()=>b,animationFrame:()=>_,animationFrameScheduler:()=>g,asap:()=>l.e,asapScheduler:()=>l.E,async:()=>f.P,asyncScheduler:()=>f.z,bindCallback:()=>U,bindNodeCallback:()=>B,combineLatest:()=>H.aj,concat:()=>W.z,config:()=>Ot.v,defer:()=>K.P,empty:()=>Z.c,forkJoin:()=>Q,from:()=>J.D,fromEvent:()=>tt.R,fromEventPattern:()=>nt,generate:()=>rt,identity:()=>O.y,iif:()=>ot,interval:()=>ut,isObservable:()=>T,merge:()=>ct.T,never:()=>lt,noop:()=>A.Z,observable:()=>a.L,of:()=>ft.of,onErrorResumeNext:()=>pt,pairs:()=>ht,partition:()=>_t,pipe:()=>P.z,queue:()=>p.c,queueScheduler:()=>p.N,race:()=>bt.S3,range:()=>St,scheduled:()=>At.x,throwError:()=>Ct._,timer:()=>Et.H,using:()=>It,zip:()=>Pt.$R});var r=n(64074),i=n(46700),o=n(82727),a=n(86916),u=n(99357),s=n(41735),c=n(28646),d=n(2503),l=n(18420),f=n(26858),p=n(30396),h=n(61699),y=n(674),m=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return h.__extends(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(y.o),v=n(41978),g=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return h.__extends(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++re.index?1:-1:t.delay>e.delay?1:-1},e}(y.o),w=n(78379),C=n(75838),E=n(90782),I=n(48811),P=n(76252),A=n(38375),O=n(16726);function T(t){return!!t&&(t instanceof r.y||"function"==typeof t.lift&&"function"==typeof t.subscribe)}var x=n(4069),R=n(2246),k=n(42046),M=n(42135),N=n(76960),D=(n(88033),n(92160)),L=n(12411),z=n(24937),j=n(79917);function U(t,e,n){if(e){if(!(0,j.K)(e))return function(){for(var r=[],i=0;i=e){r.complete();break}if(r.next(o++),r.closed)break}}))}function wt(t){var e=t.start,n=t.index,r=t.count,i=t.subscriber;n>=r?i.complete():(i.next(e),i.closed||(t.index=n+1,t.start=e+1,this.schedule(t)))}var Ct=n(78665),Et=n(12670);function It(t,e){return new r.y((function(n){var r,i;try{r=t()}catch(t){return void n.error(t)}try{i=e(r)}catch(t){return void n.error(t)}var o=(i?(0,J.D)(i):Z.E).subscribe(n);return function(){o.unsubscribe(),r&&r.unsubscribe()}}))}var Pt=n(66436),At=n(77488),Ot=n(84850)},2503:(t,e,n)=>{"use strict";n.d(e,{c:()=>a});var r=n(61699),i=n(99357),o=n(75838),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.value=null,e.hasNext=!1,e.hasCompleted=!1,e}return r.__extends(e,t),e.prototype._subscribe=function(e){return this.hasError?(e.error(this.thrownError),o.w.EMPTY):this.hasCompleted&&this.hasNext?(e.next(this.value),e.complete(),o.w.EMPTY):t.prototype._subscribe.call(this,e)},e.prototype.next=function(t){this.hasCompleted||(this.value=t,this.hasNext=!0)},e.prototype.error=function(e){this.hasCompleted||t.prototype.error.call(this,e)},e.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&t.prototype.next.call(this,this.value),t.prototype.complete.call(this)},e}(i.xQ)},41735:(t,e,n)=>{"use strict";n.d(e,{X:()=>a});var r=n(61699),i=n(99357),o=n(42046),a=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.__extends(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.N;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.xQ)},48811:(t,e,n)=>{"use strict";n.d(e,{P:()=>u,W:()=>r});var r,i=n(14585),o=n(12309),a=n(78665);r||(r={});var u=function(){function t(t,e,n){this.kind=t,this.value=e,this.error=n,this.hasValue="N"===t}return t.prototype.observe=function(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}},t.prototype.do=function(t,e,n){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return n&&n()}},t.prototype.accept=function(t,e,n){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,n)},t.prototype.toObservable=function(){switch(this.kind){case"N":return(0,o.of)(this.value);case"E":return(0,a._)(this.error);case"C":return(0,i.c)()}throw new Error("unexpected notification kind value")},t.createNext=function(e){return void 0!==e?new t("N",e):t.undefinedValueNotification},t.createError=function(e){return new t("E",void 0,e)},t.createComplete=function(){return t.completeNotification},t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t}()},64074:(t,e,n)=>{"use strict";n.d(e,{y:()=>s}),n(40737),n(83823),n(71806);var r=n(12411),i=n(54752),o=n(86916),a=n(76252),u=n(84850),s=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var r=this.operator,o=(0,i.Y)(t,e,n);if(r?o.add(r.call(o,this.source)):o.add(this.source||u.v.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),u.v.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){u.v.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),(0,r._)(t)?t.error(e):console.warn(e)}},t.prototype.forEach=function(t,e){var n=this;return new(e=c(e))((function(e,r){var i;i=n.subscribe((function(e){try{t(e)}catch(t){r(t),i&&i.unsubscribe()}}),r,e)}))},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[o.L]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e{"use strict";n.d(e,{c:()=>o});var r=n(84850),i=n(61554),o={closed:!0,next:function(t){},error:function(t){if(r.v.useDeprecatedSynchronousErrorHandling)throw t;(0,i.z)(t)},complete:function(){}}},64809:(t,e,n)=>{"use strict";n.d(e,{L:()=>i});var r=n(61699),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(n(90782).L)},28646:(t,e,n)=>{"use strict";n.d(e,{t:()=>d}),n(32345),n(99023);var r=n(61699),i=n(99357),o=n(30396),a=n(75838),u=n(9202),s=n(42046),c=n(17630),d=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.__extends(e,t),e.prototype.nextInfiniteTimeWindow=function(e){if(!this.isStopped){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift()}t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this.isStopped||(this._events.push(new l(this._getNow(),e)),this._trimBufferThenGetEvents()),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new s.N;if(this.isStopped||this.hasError?e=a.w.EMPTY:(this.observers.push(t),e=new c.W(this,t)),i&&t.add(t=new u.ht(t,i)),n)for(var d=0;de&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.xQ),l=function(){return function(t,e){this.time=t,this.value=e}}()},78379:(t,e,n)=>{"use strict";n.d(e,{b:()=>r});var r=function(){function t(e,n){void 0===n&&(n=t.now),this.SchedulerAction=e,this.now=n}return t.prototype.schedule=function(t,e,n){return void 0===e&&(e=0),new this.SchedulerAction(this,t).schedule(n,e)},t.now=function(){return Date.now()},t}()},99357:(t,e,n)=>{"use strict";n.d(e,{Yc:()=>d,xQ:()=>l}),n(16516);var r=n(61699),i=n(64074),o=n(90782),a=n(75838),u=n(42046),s=n(17630),c=n(70239),d=function(t){function e(e){var n=t.call(this,e)||this;return n.destination=e,n}return r.__extends(e,t),e}(o.L),l=function(t){function e(){var e=t.call(this)||this;return e.observers=[],e.closed=!1,e.isStopped=!1,e.hasError=!1,e.thrownError=null,e}return r.__extends(e,t),e.prototype[c.b]=function(){return new d(this)},e.prototype.lift=function(t){var e=new f(this,this);return e.operator=t,e},e.prototype.next=function(t){if(this.closed)throw new u.N;if(!this.isStopped)for(var e=this.observers,n=e.length,r=e.slice(),i=0;i{"use strict";n.d(e,{W:()=>i}),n(6550),n(32345);var r=n(61699),i=function(t){function e(e,n){var r=t.call(this)||this;return r.subject=e,r.subscriber=n,r.closed=!1,r}return r.__extends(e,t),e.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var t=this.subject,e=t.observers;if(this.subject=null,e&&0!==e.length&&!t.isStopped&&!t.closed){var n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},e}(n(75838).w)},90782:(t,e,n)=>{"use strict";n.d(e,{L:()=>l}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193);var r=n(61699),i=n(11169),o=n(43610),a=n(75838),u=n(70239),s=n(84850),c=n(61554);function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}var l=function(t){function e(n,r,i){var a=t.call(this)||this;switch(a.syncErrorValue=null,a.syncErrorThrown=!1,a.syncErrorThrowable=!1,a.isStopped=!1,arguments.length){case 0:a.destination=o.c;break;case 1:if(!n){a.destination=o.c;break}if("object"===d(n)){n instanceof e?(a.syncErrorThrowable=n.syncErrorThrowable,a.destination=n,n.add(a)):(a.syncErrorThrowable=!0,a.destination=new f(a,n));break}default:a.syncErrorThrowable=!0,a.destination=new f(a,n,r,i)}return a}return r.__extends(e,t),e.prototype[u.b]=function(){return this},e.create=function(t,n,r){var i=new e(t,n,r);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},e}(a.w),f=function(t){function e(e,n,r,a){var u,s=t.call(this)||this;s._parentSubscriber=e;var c=s;return(0,i.m)(n)?u=n:n&&(u=n.next,r=n.error,a=n.complete,n!==o.c&&(c=Object.create(n),(0,i.m)(c.unsubscribe)&&s.add(c.unsubscribe.bind(c)),c.unsubscribe=s.unsubscribe.bind(s))),s._context=c,s._next=u,s._error=r,s._complete=a,s}return r.__extends(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;s.v.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,n=s.v.useDeprecatedSynchronousErrorHandling;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):(0,c.z)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;(0,c.z)(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var n=function(){return t._complete.call(t._context)};s.v.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),s.v.useDeprecatedSynchronousErrorHandling)throw t;(0,c.z)(t)}},e.prototype.__tryOrSetError=function(t,e,n){if(!s.v.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,n)}catch(e){return s.v.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):((0,c.z)(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(l)},75838:(t,e,n)=>{"use strict";n.d(e,{w:()=>s}),n(93942),n(70472),n(93270),n(88033),n(6550),n(38490),n(32345),n(40737),n(10951),n(5193);var r=n(24937),i=n(46308),o=n(11169),a=n(42135);function u(t){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u(t)}var s=function(){function t(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}var e;return t.prototype.unsubscribe=function(){var e;if(!this.closed){var n=this,u=n._parentOrParents,s=n._ctorUnsubscribe,d=n._unsubscribe,l=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,u instanceof t)u.remove(this);else if(null!==u)for(var f=0;f{"use strict";n.d(e,{v:()=>i});var r=!1,i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){t&&(new Error).stack,r=t},get useDeprecatedSynchronousErrorHandling(){return r}}},56431:(t,e,n)=>{"use strict";n.d(e,{Ds:()=>s,IY:()=>u,ft:()=>c});var r=n(61699),i=n(90782),o=n(64074),a=n(28817),u=function(t){function e(e){var n=t.call(this)||this;return n.parent=e,n}return r.__extends(e,t),e.prototype._next=function(t){this.parent.notifyNext(t)},e.prototype._error=function(t){this.parent.notifyError(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},e}(i.L),s=(i.L,function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.notifyNext=function(t){this.destination.next(t)},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(){this.destination.complete()},e}(i.L));function c(t,e){if(!e.closed){if(t instanceof o.y)return t.subscribe(e);var n;try{n=(0,a.s)(t)(e)}catch(t){e.error(t)}return n}}i.L},46700:(t,e,n)=>{"use strict";n.d(e,{N:()=>d,c:()=>c});var r=n(61699),i=n(99357),o=n(64074),a=n(90782),u=n(75838),s=n(16807),c=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.__extends(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new u.w).add(this.source.subscribe(new l(this.getSubject(),this))),t.closed&&(this._connection=null,t=u.w.EMPTY)),t},e.prototype.refCount=function(){return(0,s.x)()(this)},e}(o.y),d=function(){var t=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}}(),l=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.__extends(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.Yc);a.L},12206:(t,e,n)=>{"use strict";n.d(e,{Ms:()=>l,aj:()=>d}),n(38490),n(16516),n(40737),n(5193);var r=n(61699),i=n(79917),o=n(24937),a=n(64809),u=n(30121),s=n(42178),c={};function d(){for(var t=[],e=0;e{"use strict";n.d(e,{z:()=>o});var r=n(12309),i=n(54110);function o(){for(var t=[],e=0;e{"use strict";n.d(e,{P:()=>a});var r=n(64074),i=n(73531),o=n(14585);function a(t){return new r.y((function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?(0,i.D)(n):(0,o.c)()).subscribe(e)}))}},14585:(t,e,n)=>{"use strict";n.d(e,{E:()=>i,c:()=>o});var r=n(64074),i=new r.y((function(t){return t.complete()}));function o(t){return t?function(t){return new r.y((function(e){return t.schedule((function(){return e.complete()}))}))}(t):i}},73531:(t,e,n)=>{"use strict";n.d(e,{D:()=>a});var r=n(64074),i=n(28817),o=n(77488);function a(t,e){return e?(0,o.x)(t,e):t instanceof r.y?t:new r.y((0,i.s)(t))}},42178:(t,e,n)=>{"use strict";n.d(e,{n:()=>a});var r=n(64074),i=n(97327),o=n(75077);function a(t,e){return e?(0,o.r)(t,e):new r.y((0,i.V)(t))}},55343:(t,e,n)=>{"use strict";n.d(e,{R:()=>u}),n(16516),n(40737),n(26667);var r=n(64074),i=n(24937),o=n(11169),a=n(92160);function u(t,e,n,c){return(0,o.m)(n)&&(c=n,n=void 0),c?u(t,e,n).pipe((0,a.U)((function(t){return(0,i.k)(t)?c.apply(void 0,t):c(t)}))):new r.y((function(r){s(t,e,(function(t){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(t)}),r,n)}))}function s(t,e,n,r,i){var o;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(t)){var a=t;t.addEventListener(e,n,i),o=function(){return a.removeEventListener(e,n,i)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(t)){var u=t;t.on(e,n),o=function(){return u.off(e,n)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(t)){var c=t;t.addListener(e,n),o=function(){return c.removeListener(e,n)}}else{if(!t||!t.length)throw new TypeError("Invalid event target");for(var d=0,l=t.length;d{"use strict";n.d(e,{T:()=>u}),n(99023);var r=n(64074),i=n(79917),o=n(64688),a=n(42178);function u(){for(var t=[],e=0;e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof s&&(n=t.pop()),null===u&&1===t.length&&t[0]instanceof r.y?t[0]:(0,o.J)(n)((0,a.n)(t,u))}},12309:(t,e,n)=>{"use strict";n.d(e,{of:()=>a});var r=n(79917),i=n(42178),o=n(75077);function a(){for(var t=[],e=0;e{"use strict";n.d(e,{S3:()=>s});var r=n(61699),i=n(24937),o=n(42178),a=n(64809),u=n(30121);function s(){for(var t=[],e=0;e{"use strict";n.d(e,{_:()=>i});var r=n(64074);function i(t,e){return e?new r.y((function(n){return e.schedule(o,0,{error:t,subscriber:n})})):new r.y((function(e){return e.error(t)}))}function o(t){var e=t.error;t.subscriber.error(e)}},12670:(t,e,n)=>{"use strict";n.d(e,{H:()=>u}),n(99023);var r=n(64074),i=n(26858),o=n(13491),a=n(79917);function u(t,e,n){void 0===t&&(t=0);var u=-1;return(0,o.k)(e)?u=Number(e)<1?1:Number(e):(0,a.K)(e)&&(n=e),(0,a.K)(n)||(n=i.P),new r.y((function(e){var r=(0,o.k)(t)?t:+t-n.now();return n.schedule(s,r,{index:0,period:u,subscriber:e})}))}function s(t){var e=t.index,n=t.period,r=t.subscriber;if(r.next(e),!r.closed){if(-1===n)return r.complete();t.index=e+1,this.schedule(t,n)}}},66436:(t,e,n)=>{"use strict";n.d(e,{$R:()=>c,mx:()=>d});var r=n(61699),i=n(42178),o=n(24937),a=n(90782),u=n(42e3),s=n(56431);function c(){for(var t=[],e=0;ethis.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),h=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.parent=n,i.observable=r,i.stillUnsubscribed=!0,i.buffer=[],i.isComplete=!1,i}return r.__extends(e,t),e.prototype[u.hZ]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t){this.buffer.push(t),this.parent.checkIterators()},e.prototype.subscribe=function(){return(0,s.ft)(this.observable,new s.IY(this))},e}(s.Ds)},63660:(t,e,n)=>{"use strict";n.d(e,{K:()=>o});var r=n(61699),i=n(56431);function o(t){return function(e){var n=new a(t),r=e.lift(n);return n.caught=r}}var a=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.selector,this.caught))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.selector=n,i.caught=r,i}return r.__extends(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=void 0;try{n=this.selector(e,this.caught)}catch(e){return void t.prototype.error.call(this,e)}this._unsubscribeAndRecycle();var r=new i.IY(this);this.add(r);var o=(0,i.ft)(n,r);o!==r&&this.add(o)}},e}(i.Ds)},54110:(t,e,n)=>{"use strict";n.d(e,{u:()=>i});var r=n(64688);function i(){return(0,r.J)(1)}},5026:(t,e,n)=>{"use strict";n.d(e,{g:()=>s});var r=n(61699),i=n(26858),o=n(79903),a=n(90782),u=n(48811);function s(t,e){void 0===e&&(e=i.P);var n=(0,o.J)(t)?+t-e.now():Math.abs(t);return function(t){return t.lift(new c(n,e))}}var c=function(){function t(t,e){this.delay=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new d(t,this.delay,this.scheduler))},t}(),d=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.delay=n,i.scheduler=r,i.queue=[],i.active=!1,i.errored=!1,i}return r.__extends(e,t),e.dispatch=function(t){for(var e=t.source,n=e.queue,r=t.scheduler,i=t.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new l(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(u.P.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(u.P.createComplete()),this.unsubscribe()},e}(a.L),l=function(){return function(t,e){this.time=t,this.notification=e}}()},57603:(t,e,n)=>{"use strict";n.d(e,{x:()=>o});var r=n(61699),i=n(90782);function o(t,e){return function(n){return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.compare,this.keySelector))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.keySelector=r,i.hasKey=!1,"function"==typeof n&&(i.compare=n),i}return r.__extends(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e;try{var n=this.keySelector;e=n?n(t):t}catch(t){return this.destination.error(t)}var r=!1;if(this.hasKey)try{r=(0,this.compare)(this.key,e)}catch(t){return this.destination.error(t)}else this.hasKey=!0;r||(this.key=e,this.destination.next(t))},e}(i.L)},20239:(t,e,n)=>{"use strict";n.d(e,{h:()=>o});var r=n(61699),i=n(90782);function o(t,e){return function(n){return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.predicate,this.thisArg))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.__extends(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.L)},82727:(t,e,n)=>{"use strict";n.d(e,{T:()=>f,v:()=>s}),n(38490),n(34897),n(40737),n(10951),n(71806),n(5193);var r=n(61699),i=n(90782),o=n(75838),a=n(64074),u=n(99357);function s(t,e,n,r){return function(i){return i.lift(new c(t,e,n,r))}}var c=function(){function t(t,e,n,r){this.keySelector=t,this.elementSelector=e,this.durationSelector=n,this.subjectSelector=r}return t.prototype.call=function(t,e){return e.subscribe(new d(t,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},t}(),d=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;return a.keySelector=n,a.elementSelector=r,a.durationSelector=i,a.subjectSelector=o,a.groups=null,a.attemptedToUnsubscribe=!1,a.count=0,a}return r.__extends(e,t),e.prototype._next=function(t){var e;try{e=this.keySelector(t)}catch(t){return void this.error(t)}this._group(t,e)},e.prototype._group=function(t,e){var n=this.groups;n||(n=this.groups=new Map);var r,i=n.get(e);if(this.elementSelector)try{r=this.elementSelector(t)}catch(t){this.error(t)}else r=t;if(!i){i=this.subjectSelector?this.subjectSelector():new u.xQ,n.set(e,i);var o=new f(e,i,this);if(this.destination.next(o),this.durationSelector){var a=void 0;try{a=this.durationSelector(new f(e,i))}catch(t){return void this.error(t)}this.add(a.subscribe(new l(e,i,this)))}}i.closed||i.next(r)},e.prototype._error=function(t){var e=this.groups;e&&(e.forEach((function(e,n){e.error(t)})),e.clear()),this.destination.error(t)},e.prototype._complete=function(){var t=this.groups;t&&(t.forEach((function(t,e){t.complete()})),t.clear()),this.destination.complete()},e.prototype.removeGroup=function(t){this.groups.delete(t)},e.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&t.prototype.unsubscribe.call(this))},e}(i.L),l=function(t){function e(e,n,r){var i=t.call(this,n)||this;return i.key=e,i.group=n,i.parent=r,i}return r.__extends(e,t),e.prototype._next=function(t){this.complete()},e.prototype._unsubscribe=function(){var t=this.parent,e=this.key;this.key=this.parent=null,t&&t.removeGroup(e)},e}(i.L),f=function(t){function e(e,n,r){var i=t.call(this)||this;return i.key=e,i.groupSubject=n,i.refCountSubscription=r,i}return r.__extends(e,t),e.prototype._subscribe=function(t){var e=new o.w,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&e.add(new p(n)),e.add(r.subscribe(t)),e},e}(a.y),p=function(t){function e(e){var n=t.call(this)||this;return n.parent=e,e.count++,n}return r.__extends(e,t),e.prototype.unsubscribe=function(){var e=this.parent;e.closed||this.closed||(t.prototype.unsubscribe.call(this),e.count-=1,0===e.count&&e.attemptedToUnsubscribe&&e.unsubscribe())},e}(o.w)},92160:(t,e,n)=>{"use strict";n.d(e,{U:()=>o});var r=n(61699),i=n(90782);function o(t,e){return function(n){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.project,this.thisArg))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return r.__extends(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.L)},64688:(t,e,n)=>{"use strict";n.d(e,{J:()=>o}),n(99023);var r=n(61693),i=n(16726);function o(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),(0,r.zg)(i.y,t)}},61693:(t,e,n)=>{"use strict";n.d(e,{VS:()=>d,zg:()=>u}),n(99023);var r=n(61699),i=n(92160),o=n(73531),a=n(56431);function u(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"function"==typeof e?function(r){return r.pipe(u((function(n,r){return(0,o.D)(t(n,r)).pipe((0,i.U)((function(t,i){return e(n,t,r,i)})))}),n))}:("number"==typeof e&&(n=e),function(e){return e.lift(new s(t,n))})}var s=function(){function t(t,e){void 0===e&&(e=Number.POSITIVE_INFINITY),this.project=t,this.concurrent=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.concurrent))},t}(),c=function(t){function e(e,n,r){void 0===r&&(r=Number.POSITIVE_INFINITY);var i=t.call(this,e)||this;return i.project=n,i.concurrent=r,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}return r.__extends(e,t),e.prototype._next=function(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(a.Ds),d=u},9202:(t,e,n)=>{"use strict";n.d(e,{QV:()=>a,ht:()=>s});var r=n(61699),i=n(90782),o=n(48811);function a(t,e){return void 0===e&&(e=0),function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){void 0===e&&(e=0),this.scheduler=t,this.delay=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.scheduler,this.delay))},t}(),s=function(t){function e(e,n,r){void 0===r&&(r=0);var i=t.call(this,e)||this;return i.scheduler=n,i.delay=r,i}return r.__extends(e,t),e.dispatch=function(t){var e=t.notification,n=t.destination;e.observe(n),this.unsubscribe()},e.prototype.scheduleMessage=function(t){this.destination.add(this.scheduler.schedule(e.dispatch,this.delay,new c(t,this.destination)))},e.prototype._next=function(t){this.scheduleMessage(o.P.createNext(t))},e.prototype._error=function(t){this.scheduleMessage(o.P.createError(t)),this.unsubscribe()},e.prototype._complete=function(){this.scheduleMessage(o.P.createComplete()),this.unsubscribe()},e}(i.L),c=function(){return function(t,e){this.notification=t,this.destination=e}}()},16807:(t,e,n)=>{"use strict";n.d(e,{x:()=>o});var r=n(61699),i=n(90782);function o(){return function(t){return t.lift(new a(t))}}var a=function(){function t(t){this.connectable=t}return t.prototype.call=function(t,e){var n=this.connectable;n._refCount++;var r=new u(t,n),i=e.subscribe(r);return r.closed||(r.connection=n.connect()),i},t}(),u=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.__extends(e,t),e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._refCount;if(e<=0)this.connection=null;else if(t._refCount=e-1,e>1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(i.L)},62156:(t,e,n)=>{"use strict";n.d(e,{a:()=>a});var r=n(61699),i=n(99357),o=n(56431);function a(t){return function(e){return e.lift(new u(t,e))}}var u=function(){function t(t,e){this.notifier=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.notifier,this.source))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.notifier=n,i.source=r,i}return r.__extends(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.errors,r=this.retries,a=this.retriesSubscription;if(r)this.errors=void 0,this.retriesSubscription=void 0;else{n=new i.xQ;try{r=(0,this.notifier)(n)}catch(e){return t.prototype.error.call(this,e)}a=(0,o.ft)(r,new o.IY(this))}this._unsubscribeAndRecycle(),this.errors=n,this.retries=r,this.retriesSubscription=a,n.next(e)}},e.prototype._unsubscribe=function(){var t=this.errors,e=this.retriesSubscription;t&&(t.unsubscribe(),this.errors=void 0),e&&(e.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},e.prototype.notifyNext=function(){var t=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=t,this.source.subscribe(this)},e}(o.Ds)},7263:(t,e,n)=>{"use strict";n.d(e,{d:()=>o}),n(93942),n(70472),n(93270),n(38490),n(99023),n(40737),n(10951),n(5193);var r=n(28646);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function o(t,e,n){var o;return o=t&&"object"===i(t)?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,i=t.bufferSize,o=void 0===i?Number.POSITIVE_INFINITY:i,a=t.windowTime,u=void 0===a?Number.POSITIVE_INFINITY:a,s=t.refCount,c=t.scheduler,d=0,l=!1,f=!1;return function(t){var i;d++,!e||l?(l=!1,e=new r.t(o,u,c),i=e.subscribe(this),n=t.subscribe({next:function(t){e.next(t)},error:function(t){l=!0,e.error(t)},complete:function(){f=!0,n=void 0,e.complete()}}),f&&(n=void 0)):i=e.subscribe(this),this.add((function(){d--,i.unsubscribe(),i=void 0,n&&!f&&s&&0===d&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(o))}}},64440:(t,e,n)=>{"use strict";n.d(e,{w:()=>u});var r=n(61699),i=n(92160),o=n(73531),a=n(56431);function u(t,e){return"function"==typeof e?function(n){return n.pipe(u((function(n,r){return(0,o.D)(t(n,r)).pipe((0,i.U)((function(t,i){return e(n,t,r,i)})))})))}:function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.project=n,r.index=0,r}return r.__extends(e,t),e.prototype._next=function(t){var e,n=this.index++;try{e=this.project(t,n)}catch(t){return void this.destination.error(t)}this._innerSub(e)},e.prototype._innerSub=function(t){var e=this.innerSubscription;e&&e.unsubscribe();var n=new a.IY(this),r=this.destination;r.add(n),this.innerSubscription=(0,a.ft)(t,n),this.innerSubscription!==n&&r.add(this.innerSubscription)},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this),this.unsubscribe()},e.prototype._unsubscribe=function(){this.innerSubscription=void 0},e.prototype.notifyComplete=function(){this.innerSubscription=void 0,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t){this.destination.next(t)},e}(a.Ds)},31407:(t,e,n)=>{"use strict";n.d(e,{q:()=>u});var r=n(61699),i=n(90782),o=n(4069),a=n(14585);function u(t){return function(e){return 0===t?(0,a.c)():e.lift(new s(t))}}var s=function(){function t(t){if(this.total=t,this.total<0)throw new o.W}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.total))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.__extends(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.L)},75077:(t,e,n)=>{"use strict";n.d(e,{r:()=>o});var r=n(64074),i=n(75838);function o(t,e){return new r.y((function(n){var r=new i.w,o=0;return r.add(e.schedule((function(){o!==t.length?(n.next(t[o++]),n.closed||r.add(this.schedule())):n.complete()}))),r}))}},77488:(t,e,n)=>{"use strict";n.d(e,{x:()=>l}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193);var r=n(64074),i=n(75838),o=n(86916),a=n(75077),u=n(42e3),s=n(18316),c=n(56554);function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}function l(t,e){if(null!=t){if(function(t){return t&&"function"==typeof t[o.L]}(t))return function(t,e){return new r.y((function(n){var r=new i.w;return r.add(e.schedule((function(){var i=t[o.L]();r.add(i.subscribe({next:function(t){r.add(e.schedule((function(){return n.next(t)})))},error:function(t){r.add(e.schedule((function(){return n.error(t)})))},complete:function(){r.add(e.schedule((function(){return n.complete()})))}}))}))),r}))}(t,e);if((0,s.t)(t))return function(t,e){return new r.y((function(n){var r=new i.w;return r.add(e.schedule((function(){return t.then((function(t){r.add(e.schedule((function(){n.next(t),r.add(e.schedule((function(){return n.complete()})))})))}),(function(t){r.add(e.schedule((function(){return n.error(t)})))}))}))),r}))}(t,e);if((0,c.z)(t))return(0,a.r)(t,e);if(function(t){return t&&"function"==typeof t[u.hZ]}(t)||"string"==typeof t)return function(t,e){if(!t)throw new Error("Iterable cannot be null");return new r.y((function(n){var r,o=new i.w;return o.add((function(){r&&"function"==typeof r.return&&r.return()})),o.add(e.schedule((function(){r=t[u.hZ](),o.add(e.schedule((function(){if(!n.closed){var t,e;try{var i=r.next();t=i.value,e=i.done}catch(t){return void n.error(t)}e?n.complete():(n.next(t),this.schedule())}})))}))),o}))}(t,e)}throw new TypeError((null!==t&&d(t)||t)+" is not observable")}},674:(t,e,n)=>{"use strict";n.d(e,{o:()=>i}),n(6550),n(32345);var r=n(61699),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r.pending=!1,r}return r.__extends(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this},e.prototype.requestAsyncId=function(t,e,n){return void 0===n&&(n=0),setInterval(t.flush.bind(t,this),n)},e.prototype.recycleAsyncId=function(t,e,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(t,e){var n=!1,r=void 0;try{this.work(t)}catch(t){n=!0,r=!!t&&t||new Error(t)}if(n)return this.unsubscribe(),r},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,n=e.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null},e}(function(t){function e(e,n){return t.call(this)||this}return r.__extends(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(n(75838).w))},41978:(t,e,n)=>{"use strict";n.d(e,{v:()=>o});var r=n(61699),i=n(78379),o=function(t){function e(n,r){void 0===r&&(r=i.b.now);var o=t.call(this,n,(function(){return e.delegate&&e.delegate!==o?e.delegate.now():r()}))||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return r.__extends(e,t),e.prototype.schedule=function(n,r,i){return void 0===r&&(r=0),e.delegate&&e.delegate!==this?e.delegate.schedule(n,r,i):t.prototype.schedule.call(this,n,r,i)},e.prototype.flush=function(t){var e=this.actions;if(this.active)e.push(t);else{var n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}},e}(i.b)},18420:(t,e,n)=>{"use strict";n.d(e,{e:()=>d,E:()=>c});var r=n(61699),i=(n(13722),n(40737),n(83823),1),o=function(){return Promise.resolve()}(),a={};function u(t){return t in a&&(delete a[t],!0)}var s=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.__extends(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=(s=e.flush.bind(e,null),c=i++,a[c]=!0,o.then((function(){return u(c)&&s()})),c)));var s,c},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(u(n),e.scheduled=void 0)},e}(n(674).o),c=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r{"use strict";n.d(e,{P:()=>o,z:()=>i});var r=n(674),i=new(n(41978).v)(r.o),o=i},30396:(t,e,n)=>{"use strict";n.d(e,{c:()=>a,N:()=>o});var r=n(61699),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.__extends(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n(674).o),o=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e}(n(41978).v))(i),a=o},42e3:(t,e,n)=>{"use strict";function r(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}n.d(e,{hZ:()=>i}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193);var i=r()},86916:(t,e,n)=>{"use strict";n.d(e,{L:()=>r}),n(93942),n(70472),n(40737);var r=function(){return"function"==typeof Symbol&&Symbol.observable||"@@observable"}()},70239:(t,e,n)=>{"use strict";n.d(e,{b:()=>r}),n(93942),n(70472),n(40737);var r=function(){return"function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random()}()},4069:(t,e,n)=>{"use strict";n.d(e,{W:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t}()},2246:(t,e,n)=>{"use strict";n.d(e,{K:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return t.prototype=Object.create(Error.prototype),t}()},42046:(t,e,n)=>{"use strict";n.d(e,{N:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return t.prototype=Object.create(Error.prototype),t}()},76960:(t,e,n)=>{"use strict";n.d(e,{W:()=>r}),n(34745);var r=function(){function t(){return Error.call(this),this.message="Timeout has occurred",this.name="TimeoutError",this}return t.prototype=Object.create(Error.prototype),t}()},42135:(t,e,n)=>{"use strict";n.d(e,{B:()=>r}),n(64668),n(95412),n(34745),n(40737),n(26667);var r=function(){function t(t){return Error.call(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map((function(t,e){return e+1+") "+t.toString()})).join("\n "):"",this.name="UnsubscriptionError",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t}()},12411:(t,e,n)=>{"use strict";n.d(e,{_:()=>i});var r=n(90782);function i(t){for(;t;){var e=t,n=e.closed,i=e.destination,o=e.isStopped;if(n||o)return!1;t=i&&i instanceof r.L?i:null}return!0}},61554:(t,e,n)=>{"use strict";function r(t){setTimeout((function(){throw t}),0)}n.d(e,{z:()=>r})},16726:(t,e,n)=>{"use strict";function r(t){return t}n.d(e,{y:()=>r})},24937:(t,e,n)=>{"use strict";n.d(e,{k:()=>r});var r=function(){return Array.isArray||function(t){return t&&"number"==typeof t.length}}()},56554:(t,e,n)=>{"use strict";n.d(e,{z:()=>r});var r=function(t){return t&&"number"==typeof t.length&&"function"!=typeof t}},79903:(t,e,n)=>{"use strict";function r(t){return t instanceof Date&&!isNaN(+t)}n.d(e,{J:()=>r})},11169:(t,e,n)=>{"use strict";function r(t){return"function"==typeof t}n.d(e,{m:()=>r})},13491:(t,e,n)=>{"use strict";n.d(e,{k:()=>i}),n(83681);var r=n(24937);function i(t){return!(0,r.k)(t)&&t-parseFloat(t)+1>=0}},46308:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function i(t){return null!==t&&"object"===r(t)}n.d(e,{K:()=>i}),n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(5193)},18316:(t,e,n)=>{"use strict";function r(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}n.d(e,{t:()=>r})},79917:(t,e,n)=>{"use strict";function r(t){return t&&"function"==typeof t.schedule}n.d(e,{K:()=>r})},38375:(t,e,n)=>{"use strict";function r(){}n.d(e,{Z:()=>r})},70696:(t,e,n)=>{"use strict";function r(t,e){function n(){return!n.pred.apply(n.thisArg,arguments)}return n.pred=t,n.thisArg=e,n}n.d(e,{f:()=>r})},76252:(t,e,n)=>{"use strict";n.d(e,{U:()=>o,z:()=>i});var r=n(16726);function i(){for(var t=[],e=0;e{"use strict";n.d(e,{s:()=>d});var r=n(97327),i=n(61554),o=n(42e3),a=n(86916),u=n(56554),s=n(18316),c=n(46308),d=function(t){if(t&&"function"==typeof t[a.L])return d=t,function(t){var e=d[a.L]();if("function"!=typeof e.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return e.subscribe(t)};if((0,u.z)(t))return(0,r.V)(t);if((0,s.t)(t))return n=t,function(t){return n.then((function(e){t.closed||(t.next(e),t.complete())}),(function(e){return t.error(e)})).then(null,i.z),t};if(t&&"function"==typeof t[o.hZ])return e=t,function(t){for(var n=e[o.hZ]();;){var r=void 0;try{r=n.next()}catch(e){return t.error(e),t}if(r.done){t.complete();break}if(t.next(r.value),t.closed)break}return"function"==typeof n.return&&t.add((function(){n.return&&n.return()})),t};var e,n,d,l=(0,c.K)(t)?"an invalid object":"'"+t+"'";throw new TypeError("You provided "+l+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.")}},97327:(t,e,n)=>{"use strict";n.d(e,{V:()=>r});var r=function(t){return function(e){for(var n=0,r=t.length;n{"use strict";n.d(e,{D:()=>u});var r=n(61699),i=function(t){function e(e,n,r){var i=t.call(this)||this;return i.parent=e,i.outerValue=n,i.outerIndex=r,i.index=0,i}return r.__extends(e,t),e.prototype._next=function(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)},e.prototype._error=function(t){this.parent.notifyError(t,this),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},e}(n(90782).L),o=n(28817),a=n(64074);function u(t,e,n,r,u){if(void 0===u&&(u=new i(t,n,r)),!u.closed)return e instanceof a.y?e.subscribe(u):(0,o.s)(e)(u)}},54752:(t,e,n)=>{"use strict";n.d(e,{Y:()=>a});var r=n(90782),i=n(70239),o=n(43610);function a(t,e,n){if(t){if(t instanceof r.L)return t;if(t[i.b])return t[i.b]()}return t||e||n?new r.L(t,e,n):new r.L(o.c)}},11065:(t,e,n)=>{"use strict";n.r(e),n.d(e,{audit:()=>o,auditTime:()=>d,buffer:()=>l,bufferCount:()=>y,bufferTime:()=>b,bufferToggle:()=>x,bufferWhen:()=>M,catchError:()=>L.K,combineAll:()=>j,combineLatest:()=>q,concat:()=>G,concatAll:()=>V.u,concatMap:()=>H,concatMapTo:()=>W,count:()=>K,debounce:()=>J,debounceTime:()=>tt,defaultIfEmpty:()=>it,delay:()=>ut.g,delayWhen:()=>ct,dematerialize:()=>ht,distinct:()=>vt,distinctUntilChanged:()=>bt.x,distinctUntilKeyChanged:()=>St,elementAt:()=>xt,endWith:()=>kt,every:()=>Mt,exhaust:()=>Lt,exhaustMap:()=>Ft,expand:()=>Gt,filter:()=>Ct.h,finalize:()=>Ht,find:()=>Zt,findIndex:()=>Qt,first:()=>te,flatMap:()=>Y.VS,groupBy:()=>ee.v,ignoreElements:()=>ne,isEmpty:()=>oe,last:()=>fe,map:()=>Ut.U,mapTo:()=>pe,materialize:()=>ve,max:()=>Ie,merge:()=>Ae,mergeAll:()=>Oe.J,mergeMap:()=>Y.zg,mergeMapTo:()=>Te,mergeScan:()=>xe,min:()=>Me,multicast:()=>De,observeOn:()=>ze.QV,onErrorResumeNext:()=>je,pairwise:()=>qe,partition:()=>Ye,pluck:()=>He,publish:()=>Ke,publishBehavior:()=>$e,publishLast:()=>Qe,publishReplay:()=>tn,race:()=>nn,reduce:()=>Ee,refCount:()=>hn.x,repeat:()=>rn,repeatWhen:()=>un,retry:()=>dn,retryWhen:()=>pn.a,sample:()=>yn,sampleTime:()=>gn,scan:()=>be,sequenceEqual:()=>wn,share:()=>An,shareReplay:()=>On.d,single:()=>Tn,skip:()=>kn,skipLast:()=>Dn,skipUntil:()=>jn,skipWhile:()=>qn,startWith:()=>Vn,subscribeOn:()=>Kn,switchAll:()=>Jn,switchMap:()=>$n.w,switchMapTo:()=>Qn,take:()=>Tt.q,takeLast:()=>ce,takeUntil:()=>Xn,takeWhile:()=>nr,tap:()=>ur,throttle:()=>lr,throttleTime:()=>hr,throwIfEmpty:()=>It,timeInterval:()=>_r,timeout:()=>Ar,timeoutWith:()=>Cr,timestamp:()=>Or,toArray:()=>Rr,window:()=>kr,windowCount:()=>Dr,windowTime:()=>jr,windowToggle:()=>Yr,windowWhen:()=>Kr,withLatestFrom:()=>Jr,zip:()=>ei,zipAll:()=>ni});var r=n(61699),i=n(56431);function o(t){return function(e){return e.lift(new a(t))}}var a=function(){function t(t){this.durationSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.durationSelector))},t}(),u=function(t){function e(e,n){var r=t.call(this,e)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.__extends(e,t),e.prototype._next=function(t){if(this.value=t,this.hasValue=!0,!this.throttled){var e=void 0;try{e=(0,this.durationSelector)(t)}catch(t){return this.destination.error(t)}var n=(0,i.ft)(e,new i.IY(this));!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}},e.prototype.clearThrottle=function(){var t=this,e=t.value,n=t.hasValue,r=t.throttled;r&&(this.remove(r),this.throttled=void 0,r.unsubscribe()),n&&(this.value=void 0,this.hasValue=!1,this.destination.next(e))},e.prototype.notifyNext=function(){this.clearThrottle()},e.prototype.notifyComplete=function(){this.clearThrottle()},e}(i.Ds),s=n(26858),c=n(12670);function d(t,e){return void 0===e&&(e=s.P),o((function(){return(0,c.H)(t,e)}))}function l(t){return function(e){return e.lift(new f(t))}}var f=function(){function t(t){this.closingNotifier=t}return t.prototype.call=function(t,e){return e.subscribe(new p(t,this.closingNotifier))},t}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.buffer=[],r.add((0,i.ft)(n,new i.IY(r))),r}return r.__extends(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype.notifyNext=function(){var t=this.buffer;this.buffer=[],this.destination.next(t)},e}(i.Ds),h=(n(32345),n(90782));function y(t,e){return void 0===e&&(e=null),function(n){return n.lift(new m(t,e))}}var m=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?g:v}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),v=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return r.__extends(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(h.L),g=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.__extends(e,t),e.prototype._next=function(t){var e=this,n=e.bufferSize,r=e.startBufferEvery,i=e.buffers,o=e.count;this.count++,o%r==0&&i.push([]);for(var a=i.length;a--;){var u=i[a];u.push(t),u.length===n&&(i.splice(a,1),this.destination.next(u))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(h.L),_=(n(6550),n(99023),n(79917));function b(t){var e=arguments.length,n=s.P;(0,_.K)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],e--);var r=null;e>=2&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return e>=3&&(i=arguments[2]),function(e){return e.lift(new S(t,r,i,n))}}var S=function(){function t(t,e,n,r){this.bufferTimeSpan=t,this.bufferCreationInterval=e,this.maxBufferSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new C(t,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},t}(),w=function(){return function(){this.buffer=[]}}(),C=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;a.bufferTimeSpan=n,a.bufferCreationInterval=r,a.maxBufferSize=i,a.scheduler=o,a.contexts=[];var u=a.openContext();if(a.timespanOnly=null==r||r<0,a.timespanOnly){var s={subscriber:a,context:u,bufferTimeSpan:n};a.add(u.closeAction=o.schedule(E,n,s))}else{var c={subscriber:a,context:u},d={bufferTimeSpan:n,bufferCreationInterval:r,subscriber:a,scheduler:o};a.add(u.closeAction=o.schedule(P,n,c)),a.add(o.schedule(I,r,d))}return a}return r.__extends(e,t),e.prototype._next=function(t){for(var e,n=this.contexts,r=n.length,i=0;i0;){var r=e.shift();n.next(r.buffer)}t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.contexts=null},e.prototype.onBufferFull=function(t){this.closeContext(t);var e=t.closeAction;if(e.unsubscribe(),this.remove(e),!this.closed&&this.timespanOnly){t=this.openContext();var n=this.bufferTimeSpan,r={subscriber:this,context:t,bufferTimeSpan:n};this.add(t.closeAction=this.scheduler.schedule(E,n,r))}},e.prototype.openContext=function(){var t=new w;return this.contexts.push(t),t},e.prototype.closeContext=function(t){this.destination.next(t.buffer);var e=this.contexts;(e?e.indexOf(t):-1)>=0&&e.splice(e.indexOf(t),1)},e}(h.L);function E(t){var e=t.subscriber,n=t.context;n&&e.closeContext(n),e.closed||(t.context=e.openContext(),t.context.closeAction=this.schedule(t,t.bufferTimeSpan))}function I(t){var e=t.bufferCreationInterval,n=t.bufferTimeSpan,r=t.subscriber,i=t.scheduler,o=r.openContext();r.closed||(r.add(o.closeAction=i.schedule(P,n,{subscriber:r,context:o})),this.schedule(t,e))}function P(t){var e=t.subscriber,n=t.context;e.closeContext(n)}var A=n(75838),O=n(30121),T=n(64809);function x(t,e){return function(n){return n.lift(new R(t,e))}}var R=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new k(t,this.openings,this.closingSelector))},t}(),k=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.closingSelector=r,i.contexts=[],i.add((0,O.D)(i,n)),i}return r.__extends(e,t),e.prototype._next=function(t){for(var e=this.contexts,n=e.length,r=0;r0;){var r=n.shift();r.subscription.unsubscribe(),r.buffer=null,r.subscription=null}this.contexts=null,t.prototype._error.call(this,e)},e.prototype._complete=function(){for(var e=this.contexts;e.length>0;){var n=e.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e){t?this.closeBuffer(t):this.openBuffer(e)},e.prototype.notifyComplete=function(t){this.closeBuffer(t.context)},e.prototype.openBuffer=function(t){try{var e=this.closingSelector.call(this,t);e&&this.trySubscribe(e)}catch(t){this._error(t)}},e.prototype.closeBuffer=function(t){var e=this.contexts;if(e&&t){var n=t.buffer,r=t.subscription;this.destination.next(n),e.splice(e.indexOf(t),1),this.remove(r),r.unsubscribe()}},e.prototype.trySubscribe=function(t){var e=this.contexts,n=new A.w,r={buffer:[],subscription:n};e.push(r);var i=(0,O.D)(this,t,r);!i||i.closed?this.closeBuffer(r):(i.context=r,this.add(i),n.add(i))},e}(T.L);function M(t){return function(e){return e.lift(new N(t))}}var N=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new D(t,this.closingSelector))},t}(),D=function(t){function e(e,n){var r=t.call(this,e)||this;return r.closingSelector=n,r.subscribing=!1,r.openBuffer(),r}return r.__extends(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=void 0,this.subscribing=!1},e.prototype.notifyNext=function(){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe());var e,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{e=(0,this.closingSelector)()}catch(t){return this.error(t)}t=new A.w,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add((0,i.ft)(e,new i.IY(this))),this.subscribing=!1},e}(i.Ds),L=n(63660),z=n(12206);function j(t){return function(e){return e.lift(new z.Ms(t))}}n(88033),n(16516);var U=n(24937),F=n(73531);function q(){for(var t=[],e=0;e=2;return function(r){return r.pipe((0,Ct.h)((function(e,n){return n===t})),(0,Tt.q)(1),n?it(e):It((function(){return new wt.W})))}}var Rt=n(12309);function kt(){for(var t=[],e=0;e0&&this._next(t.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(i.Ds);function Ht(t){return function(e){return e.lift(new Wt(t))}}var Wt=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new Kt(t,this.callback))},t}(),Kt=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new A.w(n)),r}return r.__extends(e,t),e}(h.L);function Zt(t,e){if("function"!=typeof t)throw new TypeError("predicate is not a function");return function(n){return n.lift(new $t(t,n,!1,e))}}var $t=function(){function t(t,e,n,r){this.predicate=t,this.source=e,this.yieldIndex=n,this.thisArg=r}return t.prototype.call=function(t,e){return e.subscribe(new Jt(t,this.predicate,this.source,this.yieldIndex,this.thisArg))},t}(),Jt=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;return a.predicate=n,a.source=r,a.yieldIndex=i,a.thisArg=o,a.index=0,a}return r.__extends(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete(),this.unsubscribe()},e.prototype._next=function(t){var e=this.predicate,n=this.thisArg,r=this.index++;try{e.call(n||this,t,r,this.source)&&this.notifyComplete(this.yieldIndex?r:t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},e}(h.L);function Qt(t,e){return function(n){return n.lift(new $t(t,n,!0,e))}}var Xt=n(16726);function te(t,e){var n=arguments.length>=2;return function(r){return r.pipe(t?(0,Ct.h)((function(e,n){return t(e,n,r)})):Xt.y,(0,Tt.q)(1),n?it(e):It((function(){return new Et.K})))}}var ee=n(82727);function ne(){return function(t){return t.lift(new re)}}var re=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new ie(t))},t}(),ie=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype._next=function(t){},e}(h.L);function oe(){return function(t){return t.lift(new ae)}}var ae=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new ue(t))},t}(),ue=function(t){function e(e){return t.call(this,e)||this}return r.__extends(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype._next=function(t){this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(h.L),se=n(14585);function ce(t){return function(e){return 0===t?(0,se.c)():e.lift(new de(t))}}var de=function(){function t(t){if(this.total=t,this.total<0)throw new wt.W}return t.prototype.call=function(t,e){return e.subscribe(new le(t,this.total))},t}(),le=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.ring=new Array,r.count=0,r}return r.__extends(e,t),e.prototype._next=function(t){var e=this.ring,n=this.total,r=this.count++;e.length0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i=2;return function(r){return r.pipe(t?(0,Ct.h)((function(e,n){return t(e,n,r)})):Xt.y,ce(1),n?it(e):It((function(){return new Et.K})))}}function pe(t){return function(e){return e.lift(new he(t))}}var he=function(){function t(t){this.value=t}return t.prototype.call=function(t,e){return e.subscribe(new ye(t,this.value))},t}(),ye=function(t){function e(e,n){var r=t.call(this,e)||this;return r.value=n,r}return r.__extends(e,t),e.prototype._next=function(t){this.destination.next(this.value)},e}(h.L),me=n(48811);function ve(){return function(t){return t.lift(new ge)}}var ge=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new _e(t))},t}(),_e=function(t){function e(e){return t.call(this,e)||this}return r.__extends(e,t),e.prototype._next=function(t){this.destination.next(me.P.createNext(t))},e.prototype._error=function(t){var e=this.destination;e.next(me.P.createError(t)),e.complete()},e.prototype._complete=function(){var t=this.destination;t.next(me.P.createComplete()),t.complete()},e}(h.L);function be(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new Se(t,e,n))}}var Se=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new we(t,this.accumulator,this.seed,this.hasSeed))},t}(),we=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.__extends(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(h.L),Ce=n(76252);function Ee(t,e){return arguments.length>=2?function(n){return(0,Ce.z)(be(t,e),ce(1),it(e))(n)}:function(e){return(0,Ce.z)(be((function(e,n,r){return t(e,n,r+1)})),ce(1))(e)}}function Ie(t){return Ee("function"==typeof t?function(e,n){return t(e,n)>0?e:n}:function(t,e){return t>e?t:e})}var Pe=n(48864);function Ae(){for(var t=[],e=0;e0?this._next(t.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},e}(i.Ds);function Me(t){return Ee("function"==typeof t?function(e,n){return t(e,n)<0?e:n}:function(t,e){return t-1&&(this.count=n-1),e.subscribe(this._unsubscribeAndRecycle())}},e}(h.L);function un(t){return function(e){return e.lift(new sn(t))}}var sn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new cn(t,this.notifier,e))},t}(),cn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.notifier=n,i.source=r,i.sourceIsBeingSubscribedTo=!0,i}return r.__extends(e,t),e.prototype.notifyNext=function(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},e.prototype.notifyComplete=function(){if(!1===this.sourceIsBeingSubscribedTo)return t.prototype.complete.call(this)},e.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return t.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next(void 0)}},e.prototype._unsubscribe=function(){var t=this.notifications,e=this.retriesSubscription;t&&(t.unsubscribe(),this.notifications=void 0),e&&(e.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},e.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;return this._unsubscribe=null,t.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=e,this},e.prototype.subscribeToRetries=function(){var e;this.notifications=new We.xQ;try{e=(0,this.notifier)(this.notifications)}catch(e){return t.prototype.complete.call(this)}this.retries=e,this.retriesSubscription=(0,i.ft)(e,new i.IY(this))},e}(i.Ds);function dn(t){return void 0===t&&(t=-1),function(e){return e.lift(new ln(t,e))}}var ln=function(){function t(t,e){this.count=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new fn(t,this.count,this.source))},t}(),fn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.count=n,i.source=r,i}return r.__extends(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.source,r=this.count;if(0===r)return t.prototype.error.call(this,e);r>-1&&(this.count=r-1),n.subscribe(this._unsubscribeAndRecycle())}},e}(h.L),pn=n(62156),hn=n(16807);function yn(t){return function(e){return e.lift(new mn(t))}}var mn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){var n=new vn(t),r=e.subscribe(n);return r.add((0,i.ft)(this.notifier,new i.IY(n))),r},t}(),vn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasValue=!1,e}return r.__extends(e,t),e.prototype._next=function(t){this.value=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},e}(i.Ds);function gn(t,e){return void 0===e&&(e=s.P),function(n){return n.lift(new _n(t,e))}}var _n=function(){function t(t,e){this.period=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new bn(t,this.period,this.scheduler))},t}(),bn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.period=n,i.scheduler=r,i.hasValue=!1,i.add(r.schedule(Sn,n,{subscriber:i,period:n})),i}return r.__extends(e,t),e.prototype._next=function(t){this.lastValue=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},e}(h.L);function Sn(t){var e=t.subscriber,n=t.period;e.notifyNext(),this.schedule(t,n)}function wn(t,e){return function(n){return n.lift(new Cn(t,e))}}var Cn=function(){function t(t,e){this.compareTo=t,this.comparator=e}return t.prototype.call=function(t,e){return e.subscribe(new En(t,this.compareTo,this.comparator))},t}(),En=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.compareTo=n,i.comparator=r,i._a=[],i._b=[],i._oneComplete=!1,i.destination.add(n.subscribe(new In(e,i))),i}return r.__extends(e,t),e.prototype._next=function(t){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(t),this.checkValues())},e.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},e.prototype.checkValues=function(){for(var t=this,e=t._a,n=t._b,r=t.comparator;e.length>0&&n.length>0;){var i=e.shift(),o=n.shift(),a=!1;try{a=r?r(i,o):i===o}catch(t){this.destination.error(t)}a||this.emit(!1)}},e.prototype.emit=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype.nextB=function(t){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(t),this.checkValues())},e.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},e}(h.L),In=function(t){function e(e,n){var r=t.call(this,e)||this;return r.parent=n,r}return r.__extends(e,t),e.prototype._next=function(t){this.parent.nextB(t)},e.prototype._error=function(t){this.parent.error(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},e}(h.L);function Pn(){return new We.xQ}function An(){return function(t){return(0,hn.x)()(De(Pn)(t))}}var On=n(7263);function Tn(t){return function(e){return e.lift(new xn(t,e))}}var xn=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Rn(t,this.predicate,this.source))},t}(),Rn=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.source=r,i.seenValue=!1,i.index=0,i}return r.__extends(e,t),e.prototype.applySingleValue=function(t){this.seenValue?this.destination.error("Sequence contains more than one element"):(this.seenValue=!0,this.singleValue=t)},e.prototype._next=function(t){var e=this.index++;this.predicate?this.tryNext(t,e):this.applySingleValue(t)},e.prototype.tryNext=function(t,e){try{this.predicate(t,e,this.source)&&this.applySingleValue(t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){var t=this.destination;this.index>0?(t.next(this.seenValue?this.singleValue:void 0),t.complete()):t.error(new Et.K)},e}(h.L);function kn(t){return function(e){return e.lift(new Mn(t))}}var Mn=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new Nn(t,this.total))},t}(),Nn=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.__extends(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(h.L);function Dn(t){return function(e){return e.lift(new Ln(t))}}var Ln=function(){function t(t){if(this._skipCount=t,this._skipCount<0)throw new wt.W}return t.prototype.call=function(t,e){return 0===this._skipCount?e.subscribe(new h.L(t)):e.subscribe(new zn(t,this._skipCount))},t}(),zn=function(t){function e(e,n){var r=t.call(this,e)||this;return r._skipCount=n,r._count=0,r._ring=new Array(n),r}return r.__extends(e,t),e.prototype._next=function(t){var e=this._skipCount,n=this._count++;if(n0?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,a=0;a=0&&u%e==0&&!this.closed&&i.shift().complete(),++this.count%e==0&&!this.closed){var s=new We.xQ;i.push(s),n.next(s)}},e.prototype._error=function(t){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().complete();this.destination.complete()},e.prototype._unsubscribe=function(){this.count=0,this.windows=null},e}(h.L);function jr(t){var e=s.P,n=null,r=Number.POSITIVE_INFINITY;return(0,_.K)(arguments[3])&&(e=arguments[3]),(0,_.K)(arguments[2])?e=arguments[2]:(0,Hn.k)(arguments[2])&&(r=Number(arguments[2])),(0,_.K)(arguments[1])?e=arguments[1]:(0,Hn.k)(arguments[1])&&(n=Number(arguments[1])),function(i){return i.lift(new Ur(t,n,r,e))}}var Ur=function(){function t(t,e,n,r){this.windowTimeSpan=t,this.windowCreationInterval=e,this.maxWindowSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new qr(t,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},t}(),Fr=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._numberOfNextedValues=0,e}return r.__extends(e,t),e.prototype.next=function(e){this._numberOfNextedValues++,t.prototype.next.call(this,e)},Object.defineProperty(e.prototype,"numberOfNextedValues",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),e}(We.xQ),qr=function(t){function e(e,n,r,i,o){var a=t.call(this,e)||this;a.destination=e,a.windowTimeSpan=n,a.windowCreationInterval=r,a.maxWindowSize=i,a.scheduler=o,a.windows=[];var u=a.openWindow();if(null!==r&&r>=0){var s={subscriber:a,window:u,context:null},c={windowTimeSpan:n,windowCreationInterval:r,subscriber:a,scheduler:o};a.add(o.schedule(Vr,n,s)),a.add(o.schedule(Gr,r,c))}else{var d={subscriber:a,window:u,windowTimeSpan:n};a.add(o.schedule(Br,n,d))}return a}return r.__extends(e,t),e.prototype._next=function(t){for(var e=this.windows,n=e.length,r=0;r=this.maxWindowSize&&this.closeWindow(i))}},e.prototype._error=function(t){for(var e=this.windows;e.length>0;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){for(var t=this.windows;t.length>0;){var e=t.shift();e.closed||e.complete()}this.destination.complete()},e.prototype.openWindow=function(){var t=new Fr;return this.windows.push(t),this.destination.next(t),t},e.prototype.closeWindow=function(t){t.complete();var e=this.windows;e.splice(e.indexOf(t),1)},e}(h.L);function Br(t){var e=t.subscriber,n=t.windowTimeSpan,r=t.window;r&&e.closeWindow(r),t.window=e.openWindow(),this.schedule(t,n)}function Gr(t){var e=t.windowTimeSpan,n=t.subscriber,r=t.scheduler,i=t.windowCreationInterval,o=n.openWindow(),a=this,u={action:a,subscription:null},s={subscriber:n,window:o,context:u};u.subscription=r.schedule(Vr,e,s),a.add(u.subscription),a.schedule(t,i)}function Vr(t){var e=t.subscriber,n=t.window,r=t.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),e.closeWindow(n)}function Yr(t,e){return function(n){return n.lift(new Hr(t,e))}}var Hr=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new Wr(t,this.openings,this.closingSelector))},t}(),Wr=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.openings=n,i.closingSelector=r,i.contexts=[],i.add(i.openSubscription=(0,O.D)(i,n,n)),i}return r.__extends(e,t),e.prototype._next=function(t){var e=this.contexts;if(e)for(var n=e.length,r=0;r0){var i=r.indexOf(n);-1!==i&&r.splice(i,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(T.L),ti=n(66436);function ei(){for(var t=[],e=0;e{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n(93942),n(70472),n(93270),n(38490),n(13722),n(40737),n(10951),n(5193),t.exports=function(t,e,n,i){var o=n?n.call(i,t,e):void 0;if(void 0!==o)return!!o;if(t===e)return!0;if("object"!==r(t)||!t||"object"!==r(e)||!e)return!1;var a=Object.keys(t),u=Object.keys(e);if(a.length!==u.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(e),c=0;c{"use strict";n(6550),n(16516),t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)throw new TypeError("Expected the arguments to be of type `string`");if(""===e)return[t];var n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},29590:(t,e,n)=>{"use strict";n(40737),n(26667),n(58443),t.exports=function(t){return encodeURIComponent(t).replace(/[!'()*]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}},61699:(t,e,n)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}n.r(e),n.d(e,{__assign:()=>a,__asyncDelegator:()=>S,__asyncGenerator:()=>b,__asyncValues:()=>w,__await:()=>_,__awaiter:()=>l,__classPrivateFieldGet:()=>P,__classPrivateFieldSet:()=>A,__createBinding:()=>p,__decorate:()=>s,__exportStar:()=>h,__extends:()=>o,__generator:()=>f,__importDefault:()=>I,__importStar:()=>E,__makeTemplateObject:()=>C,__metadata:()=>d,__param:()=>c,__read:()=>m,__rest:()=>u,__spread:()=>v,__spreadArrays:()=>g,__values:()=>y}),n(93942),n(70472),n(9190),n(93270),n(88033),n(6550),n(38490),n(27835),n(19926),n(28101),n(40737),n(83823),n(10951),n(5193);var i=function(t,e){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},i(t,e)};function o(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var a=function(){return a=Object.assign||function(t){for(var e,n=1,r=arguments.length;n=0;s--)(o=t[s])&&(u=(a<3?o(u):a>3?o(e,n,u):o(e,n))||u);return a>3&&u&&Object.defineProperty(e,n,u),u}function c(t,e){return function(n,r){e(n,r,t)}}function d(t,e){if("object"===("undefined"==typeof Reflect?"undefined":r(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function l(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))}function f(t,e){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function m(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function v(){for(var t=[],e=0;e1||u(t,e)}))})}function u(t,e){try{(n=i[t](e)).value instanceof _?Promise.resolve(n.value.v).then(s,c):d(o[0][2],n)}catch(t){d(o[0][3],t)}var n}function s(t){u("next",t)}function c(t){u("throw",t)}function d(t,e){t(e),o.shift(),o.length&&u(o[0][0],o[0][1])}}function S(t){var e,n;return e={},r("next"),r("throw",(function(t){throw t})),r("return"),e[Symbol.iterator]=function(){return this},e;function r(r,i){e[r]=t[r]?function(e){return(n=!n)?{value:_(t[r](e)),done:"return"===r}:i?i(e):e}:i}}function w(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t=y(t),e={},r("next"),r("throw"),r("return"),e[Symbol.asyncIterator]=function(){return this},e);function r(n){e[n]=t[n]&&function(e){return new Promise((function(r,i){!function(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)}(r,i,(e=t[n](e)).done,e.value)}))}}}function C(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function E(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function I(t){return t&&t.__esModule?t:{default:t}}function P(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function A(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}},86173:(t,e,n)=>{var r=n(34028),i=n(84160),o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+" is not a function")}},52023:(t,e,n)=>{var r=n(78449),i=n(84160),o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+" is not a constructor")}},41684:(t,e,n)=>{var r=n(34028),i=String,o=TypeError;t.exports=function(t){if("object"==typeof t||r(t))return t;throw o("Can't set "+i(t)+" as a prototype")}},47512:(t,e,n)=>{var r=n(30191),i=n(13250),o=n(43087).f,a=r("unscopables"),u=Array.prototype;null==u[a]&&o(u,a,{configurable:!0,value:i(null)}),t.exports=function(t){u[a][t]=!0}},75527:(t,e,n)=>{"use strict";var r=n(58402).charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},39837:(t,e,n)=>{var r=n(27357),i=TypeError;t.exports=function(t,e){if(r(e,t))return t;throw i("Incorrect invocation")}},52546:(t,e,n)=>{var r=n(51355),i=String,o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+" is not an object")}},68096:t=>{t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},1743:(t,e,n)=>{var r=n(38986);t.exports=r((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},65140:(t,e,n)=>{"use strict";var r=n(32022),i=n(59913),o=n(12115),a=n(68096),u=n(27765),s=n(22775),c=n(3193),d=n(38986),l=n(39837),f=n(75982),p=n(9375),h=n(91173),y=n(38108),m=n(75783),v=n(25466),g=n(92775).f,_=n(43087).f,b=n(13750),S=n(42893),w=n(27747),C=n(78045),E=u.PROPER,I=u.CONFIGURABLE,P=C.get,A=C.set,O="ArrayBuffer",T="DataView",x="prototype",R="Wrong index",k=r[O],M=k,N=M&&M[x],D=r[T],L=D&&D[x],z=Object.prototype,j=r.Array,U=r.RangeError,F=i(b),q=i([].reverse),B=y.pack,G=y.unpack,V=function(t){return[255&t]},Y=function(t){return[255&t,t>>8&255]},H=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},W=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},K=function(t){return B(t,23,4)},Z=function(t){return B(t,52,8)},$=function(t,e){_(t[x],e,{get:function(){return P(this)[e]}})},J=function(t,e,n,r){var i=h(n),o=P(t);if(i+e>o.byteLength)throw U(R);var a=P(o.buffer).bytes,u=i+o.byteOffset,s=S(a,u,u+e);return r?s:q(s)},Q=function(t,e,n,r,i,o){var a=h(n),u=P(t);if(a+e>u.byteLength)throw U(R);for(var s=P(u.buffer).bytes,c=a+u.byteOffset,d=r(+i),l=0;lnt;)(tt=et[nt++])in M||s(M,tt,k[tt]);N.constructor=M}v&&m(L)!==z&&v(L,z);var rt=new D(new M(2)),it=i(L.setInt8);rt.setInt8(0,2147483648),rt.setInt8(1,2147483649),!rt.getInt8(0)&&rt.getInt8(1)||c(L,{setInt8:function(t,e){it(this,t,e<<24>>24)},setUint8:function(t,e){it(this,t,e<<24>>24)}},{unsafe:!0})}else N=(M=function(t){l(this,N);var e=h(t);A(this,{bytes:F(j(e),0),byteLength:e}),o||(this.byteLength=e)})[x],L=(D=function(t,e,n){l(this,L),l(t,N);var r=P(t).byteLength,i=f(e);if(i<0||i>r)throw U("Wrong offset");if(i+(n=void 0===n?r-i:p(n))>r)throw U("Wrong length");A(this,{buffer:t,byteLength:n,byteOffset:i}),o||(this.buffer=t,this.byteLength=n,this.byteOffset=i)})[x],o&&($(M,"byteLength"),$(D,"buffer"),$(D,"byteLength"),$(D,"byteOffset")),c(L,{getInt8:function(t){return J(this,1,t)[0]<<24>>24},getUint8:function(t){return J(this,1,t)[0]},getInt16:function(t){var e=J(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=J(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return W(J(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return W(J(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return G(J(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return G(J(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){Q(this,1,t,V,e)},setUint8:function(t,e){Q(this,1,t,V,e)},setInt16:function(t,e){Q(this,2,t,Y,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){Q(this,2,t,Y,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){Q(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){Q(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){Q(this,4,t,K,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){Q(this,8,t,Z,e,arguments.length>2?arguments[2]:void 0)}});w(M,O),w(D,T),t.exports={ArrayBuffer:M,DataView:D}},13750:(t,e,n)=>{"use strict";var r=n(47137),i=n(86593),o=n(84117);t.exports=function(t){for(var e=r(this),n=o(e),a=arguments.length,u=i(a>1?arguments[1]:void 0,n),s=a>2?arguments[2]:void 0,c=void 0===s?n:i(s,n);c>u;)e[u++]=t;return e}},33609:(t,e,n)=>{"use strict";var r=n(55883).forEach,i=n(94694)("forEach");t.exports=i?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},65375:(t,e,n)=>{"use strict";var r=n(80391),i=n(49425),o=n(47137),a=n(7701),u=n(92882),s=n(78449),c=n(84117),d=n(19402),l=n(32057),f=n(6897),p=Array;t.exports=function(t){var e=o(t),n=s(this),h=arguments.length,y=h>1?arguments[1]:void 0,m=void 0!==y;m&&(y=r(y,h>2?arguments[2]:void 0));var v,g,_,b,S,w,C=f(e),E=0;if(!C||this===p&&u(C))for(v=c(e),g=n?new this(v):p(v);v>E;E++)w=m?y(e[E],E):e[E],d(g,E,w);else for(S=(b=l(e,C)).next,g=n?new this:[];!(_=i(S,b)).done;E++)w=m?a(b,y,[_.value,E],!0):_.value,d(g,E,w);return g.length=E,g}},78035:(t,e,n)=>{var r=n(58326),i=n(86593),o=n(84117),a=function(t){return function(e,n,a){var u,s=r(e),c=o(s),d=i(a,c);if(t&&n!=n){for(;c>d;)if((u=s[d++])!=u)return!0}else for(;c>d;d++)if((t||d in s)&&s[d]===n)return t||d||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},55883:(t,e,n)=>{var r=n(80391),i=n(59913),o=n(94032),a=n(47137),u=n(84117),s=n(74842),c=i([].push),d=function(t){var e=1==t,n=2==t,i=3==t,d=4==t,l=6==t,f=7==t,p=5==t||l;return function(h,y,m,v){for(var g,_,b=a(h),S=o(b),w=r(y,m),C=u(S),E=0,I=v||s,P=e?I(h,C):n||f?I(h,0):void 0;C>E;E++)if((p||E in S)&&(_=w(g=S[E],E,b),t))if(e)P[E]=_;else if(_)switch(t){case 3:return!0;case 5:return g;case 6:return E;case 2:c(P,g)}else switch(t){case 4:return!1;case 7:c(P,g)}return l?-1:i||d?d:P}};t.exports={forEach:d(0),map:d(1),filter:d(2),some:d(3),every:d(4),find:d(5),findIndex:d(6),filterReject:d(7)}},44687:(t,e,n)=>{"use strict";var r=n(10584),i=n(58326),o=n(75982),a=n(84117),u=n(94694),s=Math.min,c=[].lastIndexOf,d=!!c&&1/[1].lastIndexOf(1,-0)<0,l=u("lastIndexOf"),f=d||!l;t.exports=f?function(t){if(d)return r(c,this,arguments)||0;var e=i(this),n=a(e),u=n-1;for(arguments.length>1&&(u=s(u,o(arguments[1]))),u<0&&(u=n+u);u>=0;u--)if(u in e&&e[u]===t)return u||0;return-1}:c},41665:(t,e,n)=>{var r=n(38986),i=n(30191),o=n(80714),a=i("species");t.exports=function(t){return o>=51||!r((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},94694:(t,e,n)=>{"use strict";var r=n(38986);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){return 1},1)}))}},17761:(t,e,n)=>{"use strict";var r=n(12115),i=n(65351),o=TypeError,a=Object.getOwnPropertyDescriptor,u=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=u?function(t,e){if(i(t)&&!a(t,"length").writable)throw o("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},42893:(t,e,n)=>{var r=n(86593),i=n(84117),o=n(19402),a=Array,u=Math.max;t.exports=function(t,e,n){for(var s=i(t),c=r(e,s),d=r(void 0===n?s:n,s),l=a(u(d-c,0)),f=0;c{var r=n(59913);t.exports=r([].slice)},71929:(t,e,n)=>{var r=n(42893),i=Math.floor,o=function(t,e){var n=t.length,s=i(n/2);return n<8?a(t,e):u(t,o(r(t,0,s),e),o(r(t,s),e),e)},a=function(t,e){for(var n,r,i=t.length,o=1;o0;)t[r]=t[--r];r!==o++&&(t[r]=n)}return t},u=function(t,e,n,r){for(var i=e.length,o=n.length,a=0,u=0;a{var r=n(65351),i=n(78449),o=n(51355),a=n(30191)("species"),u=Array;t.exports=function(t){var e;return r(t)&&(e=t.constructor,(i(e)&&(e===u||r(e.prototype))||o(e)&&null===(e=e[a]))&&(e=void 0)),void 0===e?u:e}},74842:(t,e,n)=>{var r=n(78502);t.exports=function(t,e){return new(r(t))(0===e?0:e)}},7701:(t,e,n)=>{var r=n(52546),i=n(94681);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){i(t,"throw",e)}}},41269:(t,e,n)=>{var r=n(30191)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o={};o[r]=function(){return{next:function(){return{done:n=!0}}}},t(o)}catch(t){}return n}},39523:(t,e,n)=>{var r=n(59913),i=r({}.toString),o=r("".slice);t.exports=function(t){return o(i(t),8,-1)}},82814:(t,e,n)=>{var r=n(77568),i=n(34028),o=n(39523),a=n(30191)("toStringTag"),u=Object,s="Arguments"==o(function(){return arguments}());t.exports=r?o:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=u(t),a))?n:s?o(e):"Object"==(r=o(e))&&i(e.callee)?"Arguments":r}},61961:(t,e,n)=>{"use strict";var r=n(43087).f,i=n(13250),o=n(3193),a=n(80391),u=n(39837),s=n(87126),c=n(38640),d=n(53338),l=n(80251),f=n(42343),p=n(12115),h=n(67023).fastKey,y=n(78045),m=y.set,v=y.getterFor;t.exports={getConstructor:function(t,e,n,d){var l=t((function(t,r){u(t,f),m(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),p||(t.size=0),s(r)||c(r,t[d],{that:t,AS_ENTRIES:n})})),f=l.prototype,y=v(e),g=function(t,e,n){var r,i,o=y(t),a=_(t,e);return a?a.value=n:(o.last=a={index:i=h(e,!0),key:e,value:n,previous:r=o.last,next:void 0,removed:!1},o.first||(o.first=a),r&&(r.next=a),p?o.size++:t.size++,"F"!==i&&(o.index[i]=a)),t},_=function(t,e){var n,r=y(t),i=h(e);if("F"!==i)return r.index[i];for(n=r.first;n;n=n.next)if(n.key==e)return n};return o(f,{clear:function(){for(var t=y(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,p?t.size=0:this.size=0},delete:function(t){var e=this,n=y(e),r=_(e,t);if(r){var i=r.next,o=r.previous;delete n.index[r.index],r.removed=!0,o&&(o.next=i),i&&(i.previous=o),n.first==r&&(n.first=i),n.last==r&&(n.last=o),p?n.size--:e.size--}return!!r},forEach:function(t){for(var e,n=y(this),r=a(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(r(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!_(this,t)}}),o(f,n?{get:function(t){var e=_(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),p&&r(f,"size",{get:function(){return y(this).size}}),l},setStrong:function(t,e,n){var r=e+" Iterator",i=v(e),o=v(r);d(t,e,(function(t,e){m(this,{type:r,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=o(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?l("keys"==e?n.key:"values"==e?n.value:[n.key,n.value],!1):(t.target=void 0,l(void 0,!0))}),n?"entries":"values",!n,!0),f(e)}}},31858:(t,e,n)=>{"use strict";var r=n(59913),i=n(3193),o=n(67023).getWeakData,a=n(39837),u=n(52546),s=n(87126),c=n(51355),d=n(38640),l=n(55883),f=n(98511),p=n(78045),h=p.set,y=p.getterFor,m=l.find,v=l.findIndex,g=r([].splice),_=0,b=function(t){return t.frozen||(t.frozen=new S)},S=function(){this.entries=[]},w=function(t,e){return m(t.entries,(function(t){return t[0]===e}))};S.prototype={get:function(t){var e=w(this,t);if(e)return e[1]},has:function(t){return!!w(this,t)},set:function(t,e){var n=w(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=v(this.entries,(function(e){return e[0]===t}));return~e&&g(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,n,r){var l=t((function(t,i){a(t,p),h(t,{type:e,id:_++,frozen:void 0}),s(i)||d(i,t[r],{that:t,AS_ENTRIES:n})})),p=l.prototype,m=y(e),v=function(t,e,n){var r=m(t),i=o(u(e),!0);return!0===i?b(r).set(e,n):i[r.id]=n,t};return i(p,{delete:function(t){var e=m(this);if(!c(t))return!1;var n=o(t);return!0===n?b(e).delete(t):n&&f(n,e.id)&&delete n[e.id]},has:function(t){var e=m(this);if(!c(t))return!1;var n=o(t);return!0===n?b(e).has(t):n&&f(n,e.id)}}),i(p,n?{get:function(t){var e=m(this);if(c(t)){var n=o(t);return!0===n?b(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return v(this,t,e)}}:{add:function(t){return v(this,t,!0)}}),l}}},69866:(t,e,n)=>{"use strict";var r=n(54635),i=n(32022),o=n(59913),a=n(77987),u=n(43068),s=n(67023),c=n(38640),d=n(39837),l=n(34028),f=n(87126),p=n(51355),h=n(38986),y=n(41269),m=n(27747),v=n(99618);t.exports=function(t,e,n){var g=-1!==t.indexOf("Map"),_=-1!==t.indexOf("Weak"),b=g?"set":"add",S=i[t],w=S&&S.prototype,C=S,E={},I=function(t){var e=o(w[t]);u(w,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(_&&!p(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return _&&!p(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(_&&!p(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(a(t,!l(S)||!(_||w.forEach&&!h((function(){(new S).entries().next()})))))C=n.getConstructor(e,t,g,b),s.enable();else if(a(t,!0)){var P=new C,A=P[b](_?{}:-0,1)!=P,O=h((function(){P.has(1)})),T=y((function(t){new S(t)})),x=!_&&h((function(){for(var t=new S,e=5;e--;)t[b](e,e);return!t.has(-0)}));T||((C=e((function(t,e){d(t,w);var n=v(new S,t,C);return f(e)||c(e,n[b],{that:n,AS_ENTRIES:g}),n}))).prototype=w,w.constructor=C),(O||x)&&(I("delete"),I("has"),g&&I("get")),(x||A)&&I(b),_&&w.clear&&delete w.clear}return E[t]=C,r({global:!0,constructor:!0,forced:C!=S},E),m(C,t),_||n.setStrong(C,t,g),C}},74953:(t,e,n)=>{var r=n(98511),i=n(91537),o=n(66213),a=n(43087);t.exports=function(t,e,n){for(var u=i(e),s=a.f,c=o.f,d=0;d{var r=n(30191)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,"/./"[t](e)}catch(t){}}return!1}},88538:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},89444:(t,e,n)=>{var r=n(59913),i=n(31591),o=n(74170),a=/"/g,u=r("".replace);t.exports=function(t,e,n,r){var s=o(i(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+u(o(r),a,""")+'"'),c+">"+s+""}},80251:t=>{t.exports=function(t,e){return{value:t,done:e}}},22775:(t,e,n)=>{var r=n(12115),i=n(43087),o=n(71111);t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},71111:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},19402:(t,e,n)=>{"use strict";var r=n(79127),i=n(43087),o=n(71111);t.exports=function(t,e,n){var a=r(e);a in t?i.f(t,a,o(0,n)):t[a]=n}},68959:(t,e,n)=>{"use strict";var r=n(52546),i=n(93126),o=TypeError;t.exports=function(t){if(r(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw o("Incorrect hint");return i(this,t)}},43068:(t,e,n)=>{var r=n(34028),i=n(43087),o=n(43608),a=n(97210);t.exports=function(t,e,n,u){u||(u={});var s=u.enumerable,c=void 0!==u.name?u.name:e;if(r(n)&&o(n,c,u),u.global)s?t[e]=n:a(e,n);else{try{u.unsafe?t[e]&&(s=!0):delete t[e]}catch(t){}s?t[e]=n:i.f(t,e,{value:n,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return t}},3193:(t,e,n)=>{var r=n(43068);t.exports=function(t,e,n){for(var i in e)r(t,i,e[i],n);return t}},97210:(t,e,n)=>{var r=n(32022),i=Object.defineProperty;t.exports=function(t,e){try{i(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},39850:(t,e,n)=>{"use strict";var r=n(84160),i=TypeError;t.exports=function(t,e){if(!delete t[e])throw i("Cannot delete property "+r(e)+" of "+r(t))}},12115:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},30805:t=>{var e="object"==typeof document&&document.all,n=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:n}},82985:(t,e,n)=>{var r=n(32022),i=n(51355),o=r.document,a=i(o)&&i(o.createElement);t.exports=function(t){return a?o.createElement(t):{}}},81912:t=>{var e=TypeError;t.exports=function(t){if(t>9007199254740991)throw e("Maximum allowed index exceeded");return t}},66910:t=>{t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},73391:(t,e,n)=>{var r=n(82985)("span").classList,i=r&&r.constructor&&r.constructor.prototype;t.exports=i===Object.prototype?void 0:i},93454:(t,e,n)=>{var r=n(30727).match(/firefox\/(\d+)/i);t.exports=!!r&&+r[1]},85048:(t,e,n)=>{var r=n(5835),i=n(79456);t.exports=!r&&!i&&"object"==typeof window&&"object"==typeof document},5835:t=>{t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},88633:(t,e,n)=>{var r=n(30727);t.exports=/MSIE|Trident/.test(r)},88525:(t,e,n)=>{var r=n(30727),i=n(32022);t.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==i.Pebble},649:(t,e,n)=>{var r=n(30727);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},79456:(t,e,n)=>{var r=n(39523),i=n(32022);t.exports="process"==r(i.process)},52054:(t,e,n)=>{var r=n(30727);t.exports=/web0s(?!.*chrome)/i.test(r)},30727:(t,e,n)=>{var r=n(83155);t.exports=r("navigator","userAgent")||""},80714:(t,e,n)=>{var r,i,o=n(32022),a=n(30727),u=o.process,s=o.Deno,c=u&&u.versions||s&&s.version,d=c&&c.v8;d&&(i=(r=d.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=+r[1]),t.exports=i},10720:(t,e,n)=>{var r=n(30727).match(/AppleWebKit\/(\d+)\./);t.exports=!!r&&+r[1]},26100:t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},54635:(t,e,n)=>{var r=n(32022),i=n(66213).f,o=n(22775),a=n(43068),u=n(97210),s=n(74953),c=n(77987);t.exports=function(t,e){var n,d,l,f,p,h=t.target,y=t.global,m=t.stat;if(n=y?r:m?r[h]||u(h,{}):(r[h]||{}).prototype)for(d in e){if(f=e[d],l=t.dontCallGetSet?(p=i(n,d))&&p.value:n[d],!c(y?d:h+(m?".":"#")+d,t.forced)&&void 0!==l){if(typeof f==typeof l)continue;s(f,l)}(t.sham||l&&l.sham)&&o(f,"sham",!0),a(n,d,f,t)}}},38986:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},26210:(t,e,n)=>{"use strict";n(49636);var r=n(59913),i=n(43068),o=n(83046),a=n(38986),u=n(30191),s=n(22775),c=u("species"),d=RegExp.prototype;t.exports=function(t,e,n,l){var f=u(t),p=!a((function(){var e={};return e[f]=function(){return 7},7!=""[t](e)})),h=p&&!a((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags="",n[f]=/./[f]),n.exec=function(){return e=!0,null},n[f](""),!e}));if(!p||!h||n){var y=r(/./[f]),m=e(f,""[t],(function(t,e,n,i,a){var u=r(t),s=e.exec;return s===o||s===d.exec?p&&!a?{done:!0,value:y(e,n,i)}:{done:!0,value:u(n,e,i)}:{done:!1}}));i(String.prototype,t,m[0]),i(d,f,m[1])}l&&s(d[f],"sham",!0)}},47484:(t,e,n)=>{"use strict";var r=n(65351),i=n(84117),o=n(81912),a=n(80391),u=function(t,e,n,s,c,d,l,f){for(var p,h,y=c,m=0,v=!!l&&a(l,f);m0&&r(p)?(h=i(p),y=u(t,e,p,h,y,d-1)-1):(o(y+1),t[y]=p),y++),m++;return y};t.exports=u},6769:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},10584:(t,e,n)=>{var r=n(74959),i=Function.prototype,o=i.apply,a=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},80391:(t,e,n)=>{var r=n(59913),i=n(86173),o=n(74959),a=r(r.bind);t.exports=function(t,e){return i(t),void 0===e?t:o?a(t,e):function(){return t.apply(e,arguments)}}},74959:(t,e,n)=>{var r=n(38986);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},49425:(t,e,n)=>{var r=n(74959),i=Function.prototype.call;t.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},27765:(t,e,n)=>{var r=n(12115),i=n(98511),o=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,u=i(o,"name"),s=u&&"something"===function(){}.name,c=u&&(!r||r&&a(o,"name").configurable);t.exports={EXISTS:u,PROPER:s,CONFIGURABLE:c}},59913:(t,e,n)=>{var r=n(74959),i=Function.prototype,o=i.bind,a=i.call,u=r&&o.bind(a,a);t.exports=r?function(t){return t&&u(t)}:function(t){return t&&function(){return a.apply(t,arguments)}}},83155:(t,e,n)=>{var r=n(32022),i=n(34028);t.exports=function(t,e){return arguments.length<2?(n=r[t],i(n)?n:void 0):r[t]&&r[t][e];var n}},6897:(t,e,n)=>{var r=n(82814),i=n(34040),o=n(87126),a=n(13766),u=n(30191)("iterator");t.exports=function(t){if(!o(t))return i(t,u)||i(t,"@@iterator")||a[r(t)]}},32057:(t,e,n)=>{var r=n(49425),i=n(86173),o=n(52546),a=n(84160),u=n(6897),s=TypeError;t.exports=function(t,e){var n=arguments.length<2?u(t):e;if(i(n))return o(r(n,t));throw s(a(t)+" is not iterable")}},34040:(t,e,n)=>{var r=n(86173),i=n(87126);t.exports=function(t,e){var n=t[e];return i(n)?void 0:r(n)}},82319:(t,e,n)=>{var r=n(59913),i=n(47137),o=Math.floor,a=r("".charAt),u=r("".replace),s=r("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,r,l,f){var p=n+t.length,h=r.length,y=d;return void 0!==l&&(l=i(l),y=c),u(f,y,(function(i,u){var c;switch(a(u,0)){case"$":return"$";case"&":return t;case"`":return s(e,0,n);case"'":return s(e,p);case"<":c=l[s(u,1,-1)];break;default:var d=+u;if(0===d)return i;if(d>h){var f=o(d/10);return 0===f?i:f<=h?void 0===r[f-1]?a(u,1):r[f-1]+a(u,1):i}c=r[d-1]}return void 0===c?"":c}))}},32022:(t,e,n)=>{var r=function(t){return t&&t.Math==Math&&t};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},98511:(t,e,n)=>{var r=n(59913),i=n(47137),o=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return o(i(t),e)}},17307:t=>{t.exports={}},39361:(t,e,n)=>{var r=n(32022);t.exports=function(t,e){var n=r.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},86419:(t,e,n)=>{var r=n(83155);t.exports=r("document","documentElement")},2159:(t,e,n)=>{var r=n(12115),i=n(38986),o=n(82985);t.exports=!r&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},38108:t=>{var e=Array,n=Math.abs,r=Math.pow,i=Math.floor,o=Math.log,a=Math.LN2;t.exports={pack:function(t,u,s){var c,d,l,f=e(s),p=8*s-u-1,h=(1<>1,m=23===u?r(2,-24)-r(2,-77):0,v=t<0||0===t&&1/t<0?1:0,g=0;for((t=n(t))!=t||t===1/0?(d=t!=t?1:0,c=h):(c=i(o(t)/a),t*(l=r(2,-c))<1&&(c--,l*=2),(t+=c+y>=1?m/l:m*r(2,1-y))*l>=2&&(c++,l/=2),c+y>=h?(d=0,c=h):c+y>=1?(d=(t*l-1)*r(2,u),c+=y):(d=t*r(2,y-1)*r(2,u),c=0));u>=8;)f[g++]=255&d,d/=256,u-=8;for(c=c<0;)f[g++]=255&c,c/=256,p-=8;return f[--g]|=128*v,f},unpack:function(t,e){var n,i=t.length,o=8*i-e-1,a=(1<>1,s=o-7,c=i-1,d=t[c--],l=127&d;for(d>>=7;s>0;)l=256*l+t[c--],s-=8;for(n=l&(1<<-s)-1,l>>=-s,s+=e;s>0;)n=256*n+t[c--],s-=8;if(0===l)l=1-u;else{if(l===a)return n?NaN:d?-1/0:1/0;n+=r(2,e),l-=u}return(d?-1:1)*n*r(2,l-e)}}},94032:(t,e,n)=>{var r=n(59913),i=n(38986),o=n(39523),a=Object,u=r("".split);t.exports=i((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?u(t,""):a(t)}:a},99618:(t,e,n)=>{var r=n(34028),i=n(51355),o=n(25466);t.exports=function(t,e,n){var a,u;return o&&r(a=e.constructor)&&a!==n&&i(u=a.prototype)&&u!==n.prototype&&o(t,u),t}},46169:(t,e,n)=>{var r=n(59913),i=n(34028),o=n(43349),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(t){return a(t)}),t.exports=o.inspectSource},67023:(t,e,n)=>{var r=n(54635),i=n(59913),o=n(17307),a=n(51355),u=n(98511),s=n(43087).f,c=n(92775),d=n(12098),l=n(62713),f=n(60232),p=n(6769),h=!1,y=f("meta"),m=0,v=function(t){s(t,y,{value:{objectID:"O"+m++,weakData:{}}})},g=t.exports={enable:function(){g.enable=function(){},h=!0;var t=c.f,e=i([].splice),n={};n[y]=1,t(n).length&&(c.f=function(n){for(var r=t(n),i=0,o=r.length;i{var r,i,o,a=n(74112),u=n(32022),s=n(59913),c=n(51355),d=n(22775),l=n(98511),f=n(43349),p=n(57186),h=n(17307),y="Object already initialized",m=u.TypeError,v=u.WeakMap;if(a||f.state){var g=f.state||(f.state=new v),_=s(g.get),b=s(g.has),S=s(g.set);r=function(t,e){if(b(g,t))throw m(y);return e.facade=t,S(g,t,e),e},i=function(t){return _(g,t)||{}},o=function(t){return b(g,t)}}else{var w=p("state");h[w]=!0,r=function(t,e){if(l(t,w))throw m(y);return e.facade=t,d(t,w,e),e},i=function(t){return l(t,w)?t[w]:{}},o=function(t){return l(t,w)}}t.exports={set:r,get:i,has:o,enforce:function(t){return o(t)?i(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!c(e)||(n=i(e)).type!==t)throw m("Incompatible receiver, "+t+" required");return n}}}},92882:(t,e,n)=>{var r=n(30191),i=n(13766),o=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||a[o]===t)}},65351:(t,e,n)=>{var r=n(39523);t.exports=Array.isArray||function(t){return"Array"==r(t)}},34028:(t,e,n)=>{var r=n(30805),i=r.all;t.exports=r.IS_HTMLDDA?function(t){return"function"==typeof t||t===i}:function(t){return"function"==typeof t}},78449:(t,e,n)=>{var r=n(59913),i=n(38986),o=n(34028),a=n(82814),u=n(83155),s=n(46169),c=function(){},d=[],l=u("Reflect","construct"),f=/^\s*(?:class|function)\b/,p=r(f.exec),h=!f.exec(c),y=function(t){if(!o(t))return!1;try{return l(c,d,t),!0}catch(t){return!1}},m=function(t){if(!o(t))return!1;switch(a(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return h||!!p(f,s(t))}catch(t){return!0}};m.sham=!0,t.exports=!l||i((function(){var t;return y(y.call)||!y(Object)||!y((function(){t=!0}))||t}))?m:y},77987:(t,e,n)=>{var r=n(38986),i=n(34028),o=/#|\.prototype\./,a=function(t,e){var n=s[u(t)];return n==d||n!=c&&(i(e)?r(e):!!e)},u=a.normalize=function(t){return String(t).replace(o,".").toLowerCase()},s=a.data={},c=a.NATIVE="N",d=a.POLYFILL="P";t.exports=a},87126:t=>{t.exports=function(t){return null==t}},51355:(t,e,n)=>{var r=n(34028),i=n(30805),o=i.all;t.exports=i.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:r(t)||t===o}:function(t){return"object"==typeof t?null!==t:r(t)}},68546:t=>{t.exports=!1},91035:(t,e,n)=>{var r=n(51355),i=n(39523),o=n(30191)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},24505:(t,e,n)=>{var r=n(83155),i=n(34028),o=n(27357),a=n(78590),u=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return i(e)&&o(e.prototype,u(t))}},38640:(t,e,n)=>{var r=n(80391),i=n(49425),o=n(52546),a=n(84160),u=n(92882),s=n(84117),c=n(27357),d=n(32057),l=n(6897),f=n(94681),p=TypeError,h=function(t,e){this.stopped=t,this.result=e},y=h.prototype;t.exports=function(t,e,n){var m,v,g,_,b,S,w,C=n&&n.that,E=!(!n||!n.AS_ENTRIES),I=!(!n||!n.IS_RECORD),P=!(!n||!n.IS_ITERATOR),A=!(!n||!n.INTERRUPTED),O=r(e,C),T=function(t){return m&&f(m,"normal",t),new h(!0,t)},x=function(t){return E?(o(t),A?O(t[0],t[1],T):O(t[0],t[1])):A?O(t,T):O(t)};if(I)m=t.iterator;else if(P)m=t;else{if(!(v=l(t)))throw p(a(t)+" is not iterable");if(u(v)){for(g=0,_=s(t);_>g;g++)if((b=x(t[g]))&&c(y,b))return b;return new h(!1)}m=d(t,v)}for(S=I?t.next:m.next;!(w=i(S,m)).done;){try{b=x(w.value)}catch(t){f(m,"throw",t)}if("object"==typeof b&&b&&c(y,b))return b}return new h(!1)}},94681:(t,e,n)=>{var r=n(49425),i=n(52546),o=n(34040);t.exports=function(t,e,n){var a,u;i(t);try{if(!(a=o(t,"return"))){if("throw"===e)throw n;return n}a=r(a,t)}catch(t){u=!0,a=t}if("throw"===e)throw n;if(u)throw a;return i(a),n}},92480:(t,e,n)=>{"use strict";var r=n(10798).IteratorPrototype,i=n(13250),o=n(71111),a=n(27747),u=n(13766),s=function(){return this};t.exports=function(t,e,n,c){var d=e+" Iterator";return t.prototype=i(r,{next:o(+!c,n)}),a(t,d,!1,!0),u[d]=s,t}},53338:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(68546),a=n(27765),u=n(34028),s=n(92480),c=n(75783),d=n(25466),l=n(27747),f=n(22775),p=n(43068),h=n(30191),y=n(13766),m=n(10798),v=a.PROPER,g=a.CONFIGURABLE,_=m.IteratorPrototype,b=m.BUGGY_SAFARI_ITERATORS,S=h("iterator"),w="keys",C="values",E="entries",I=function(){return this};t.exports=function(t,e,n,a,h,m,P){s(n,e,a);var A,O,T,x=function(t){if(t===h&&D)return D;if(!b&&t in M)return M[t];switch(t){case w:case C:case E:return function(){return new n(this,t)}}return function(){return new n(this)}},R=e+" Iterator",k=!1,M=t.prototype,N=M[S]||M["@@iterator"]||h&&M[h],D=!b&&N||x(h),L="Array"==e&&M.entries||N;if(L&&(A=c(L.call(new t)))!==Object.prototype&&A.next&&(o||c(A)===_||(d?d(A,_):u(A[S])||p(A,S,I)),l(A,R,!0,!0),o&&(y[R]=I)),v&&h==C&&N&&N.name!==C&&(!o&&g?f(M,"name",C):(k=!0,D=function(){return i(N,this)})),h)if(O={values:x(C),keys:m?D:x(w),entries:x(E)},P)for(T in O)(b||k||!(T in M))&&p(M,T,O[T]);else r({target:e,proto:!0,forced:b||k},O);return o&&!P||M[S]===D||p(M,S,D,{name:h}),y[e]=D,O}},10798:(t,e,n)=>{"use strict";var r,i,o,a=n(38986),u=n(34028),s=n(51355),c=n(13250),d=n(75783),l=n(43068),f=n(30191),p=n(68546),h=f("iterator"),y=!1;[].keys&&("next"in(o=[].keys())?(i=d(d(o)))!==Object.prototype&&(r=i):y=!0),!s(r)||a((function(){var t={};return r[h].call(t)!==t}))?r={}:p&&(r=c(r)),u(r[h])||l(r,h,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:y}},13766:t=>{t.exports={}},84117:(t,e,n)=>{var r=n(9375);t.exports=function(t){return r(t.length)}},43608:(t,e,n)=>{var r=n(38986),i=n(34028),o=n(98511),a=n(12115),u=n(27765).CONFIGURABLE,s=n(46169),c=n(78045),d=c.enforce,l=c.get,f=Object.defineProperty,p=a&&!r((function(){return 8!==f((function(){}),"length",{value:8}).length})),h=String(String).split("String"),y=t.exports=function(t,e,n){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!o(t,"name")||u&&t.name!==e)&&(a?f(t,"name",{value:e,configurable:!0}):t.name=e),p&&n&&o(n,"arity")&&t.length!==n.arity&&f(t,"length",{value:n.arity});try{n&&o(n,"constructor")&&n.constructor?a&&f(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var r=d(t);return o(r,"source")||(r.source=h.join("string"==typeof e?e:"")),t};Function.prototype.toString=y((function(){return i(this)&&l(this).source||s(this)}),"toString")},39309:t=>{var e=Math.ceil,n=Math.floor;t.exports=Math.trunc||function(t){var r=+t;return(r>0?n:e)(r)}},76173:(t,e,n)=>{var r,i,o,a,u,s,c,d,l=n(32022),f=n(80391),p=n(66213).f,h=n(16416).set,y=n(649),m=n(88525),v=n(52054),g=n(79456),_=l.MutationObserver||l.WebKitMutationObserver,b=l.document,S=l.process,w=l.Promise,C=p(l,"queueMicrotask"),E=C&&C.value;E||(r=function(){var t,e;for(g&&(t=S.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?a():o=void 0,t}}o=void 0,t&&t.enter()},y||g||v||!_||!b?!m&&w&&w.resolve?((c=w.resolve(void 0)).constructor=w,d=f(c.then,c),a=function(){d(r)}):g?a=function(){S.nextTick(r)}:(h=f(h,l),a=function(){h(r)}):(u=!0,s=b.createTextNode(""),new _(r).observe(s,{characterData:!0}),a=function(){s.data=u=!u})),t.exports=E||function(t){var e={fn:t,next:void 0};o&&(o.next=e),i||(i=e,a()),o=e}},67892:(t,e,n)=>{"use strict";var r=n(86173),i=TypeError,o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw i("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},17911:(t,e,n)=>{var r=n(91035),i=TypeError;t.exports=function(t){if(r(t))throw i("The method doesn't accept regular expressions");return t}},57017:(t,e,n)=>{var r=n(32022),i=n(38986),o=n(59913),a=n(74170),u=n(76109).trim,s=n(60812),c=o("".charAt),d=r.parseFloat,l=r.Symbol,f=l&&l.iterator,p=1/d(s+"-0")!=-1/0||f&&!i((function(){d(Object(f))}));t.exports=p?function(t){var e=u(a(t)),n=d(e);return 0===n&&"-"==c(e,0)?-0:n}:d},84475:(t,e,n)=>{var r=n(32022),i=n(38986),o=n(59913),a=n(74170),u=n(76109).trim,s=n(60812),c=r.parseInt,d=r.Symbol,l=d&&d.iterator,f=/^[+-]?0x/i,p=o(f.exec),h=8!==c(s+"08")||22!==c(s+"0x16")||l&&!i((function(){c(Object(l))}));t.exports=h?function(t,e){var n=u(a(t));return c(n,e>>>0||(p(f,n)?16:10))}:c},86851:(t,e,n)=>{"use strict";var r=n(12115),i=n(59913),o=n(49425),a=n(38986),u=n(95932),s=n(31711),c=n(23659),d=n(47137),l=n(94032),f=Object.assign,p=Object.defineProperty,h=i([].concat);t.exports=!f||a((function(){if(r&&1!==f({b:1},f(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach((function(t){e[t]=t})),7!=f({},t)[n]||u(f({},e)).join("")!=i}))?function(t,e){for(var n=d(t),i=arguments.length,a=1,f=s.f,p=c.f;i>a;)for(var y,m=l(arguments[a++]),v=f?h(u(m),f(m)):u(m),g=v.length,_=0;g>_;)y=v[_++],r&&!o(p,m,y)||(n[y]=m[y]);return n}:f},13250:(t,e,n)=>{var r,i=n(52546),o=n(13330),a=n(26100),u=n(17307),s=n(86419),c=n(82985),d=n(57186),l="prototype",f="script",p=d("IE_PROTO"),h=function(){},y=function(t){return"<"+f+">"+t+""},m=function(t){t.write(y("")),t.close();var e=t.parentWindow.Object;return t=null,e},v=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}var t,e,n;v="undefined"!=typeof document?document.domain&&r?m(r):(e=c("iframe"),n="java"+f+":",e.style.display="none",s.appendChild(e),e.src=String(n),(t=e.contentWindow.document).open(),t.write(y("document.F=Object")),t.close(),t.F):m(r);for(var i=a.length;i--;)delete v[l][a[i]];return v()};u[p]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h[l]=i(t),n=new h,h[l]=null,n[p]=t):n=v(),void 0===e?n:o.f(n,e)}},13330:(t,e,n)=>{var r=n(12115),i=n(71330),o=n(43087),a=n(52546),u=n(58326),s=n(95932);e.f=r&&!i?Object.defineProperties:function(t,e){a(t);for(var n,r=u(e),i=s(e),c=i.length,d=0;c>d;)o.f(t,n=i[d++],r[n]);return t}},43087:(t,e,n)=>{var r=n(12115),i=n(2159),o=n(71330),a=n(52546),u=n(79127),s=TypeError,c=Object.defineProperty,d=Object.getOwnPropertyDescriptor,l="enumerable",f="configurable",p="writable";e.f=r?o?function(t,e,n){if(a(t),e=u(e),a(n),"function"==typeof t&&"prototype"===e&&"value"in n&&p in n&&!n[p]){var r=d(t,e);r&&r[p]&&(t[e]=n.value,n={configurable:f in n?n[f]:r[f],enumerable:l in n?n[l]:r[l],writable:!1})}return c(t,e,n)}:c:function(t,e,n){if(a(t),e=u(e),a(n),i)try{return c(t,e,n)}catch(t){}if("get"in n||"set"in n)throw s("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},66213:(t,e,n)=>{var r=n(12115),i=n(49425),o=n(23659),a=n(71111),u=n(58326),s=n(79127),c=n(98511),d=n(2159),l=Object.getOwnPropertyDescriptor;e.f=r?l:function(t,e){if(t=u(t),e=s(e),d)try{return l(t,e)}catch(t){}if(c(t,e))return a(!i(o.f,t,e),t[e])}},12098:(t,e,n)=>{var r=n(39523),i=n(58326),o=n(92775).f,a=n(42893),u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return u&&"Window"==r(t)?function(t){try{return o(t)}catch(t){return a(u)}}(t):o(i(t))}},92775:(t,e,n)=>{var r=n(7282),i=n(26100).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},31711:(t,e)=>{e.f=Object.getOwnPropertySymbols},75783:(t,e,n)=>{var r=n(98511),i=n(34028),o=n(47137),a=n(57186),u=n(88538),s=a("IE_PROTO"),c=Object,d=c.prototype;t.exports=u?c.getPrototypeOf:function(t){var e=o(t);if(r(e,s))return e[s];var n=e.constructor;return i(n)&&e instanceof n?n.prototype:e instanceof c?d:null}},62713:(t,e,n)=>{var r=n(38986),i=n(51355),o=n(39523),a=n(1743),u=Object.isExtensible,s=r((function(){u(1)}));t.exports=s||a?function(t){return!!i(t)&&(!a||"ArrayBuffer"!=o(t))&&(!u||u(t))}:u},27357:(t,e,n)=>{var r=n(59913);t.exports=r({}.isPrototypeOf)},7282:(t,e,n)=>{var r=n(59913),i=n(98511),o=n(58326),a=n(78035).indexOf,u=n(17307),s=r([].push);t.exports=function(t,e){var n,r=o(t),c=0,d=[];for(n in r)!i(u,n)&&i(r,n)&&s(d,n);for(;e.length>c;)i(r,n=e[c++])&&(~a(d,n)||s(d,n));return d}},95932:(t,e,n)=>{var r=n(7282),i=n(26100);t.exports=Object.keys||function(t){return r(t,i)}},23659:(t,e)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);e.f=i?function(t){var e=r(this,t);return!!e&&e.enumerable}:n},25466:(t,e,n)=>{var r=n(59913),i=n(52546),o=n(41684);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=r(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,r){return i(n),o(r),e?t(n,r):n.__proto__=r,n}}():void 0)},76389:(t,e,n)=>{var r=n(12115),i=n(59913),o=n(95932),a=n(58326),u=i(n(23659).f),s=i([].push),c=function(t){return function(e){for(var n,i=a(e),c=o(i),d=c.length,l=0,f=[];d>l;)n=c[l++],r&&!u(i,n)||s(f,t?[n,i[n]]:i[n]);return f}};t.exports={entries:c(!0),values:c(!1)}},75954:(t,e,n)=>{"use strict";var r=n(77568),i=n(82814);t.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},93126:(t,e,n)=>{var r=n(49425),i=n(34028),o=n(51355),a=TypeError;t.exports=function(t,e){var n,u;if("string"===e&&i(n=t.toString)&&!o(u=r(n,t)))return u;if(i(n=t.valueOf)&&!o(u=r(n,t)))return u;if("string"!==e&&i(n=t.toString)&&!o(u=r(n,t)))return u;throw a("Can't convert object to primitive value")}},91537:(t,e,n)=>{var r=n(83155),i=n(59913),o=n(92775),a=n(31711),u=n(52546),s=i([].concat);t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(u(t)),n=a.f;return n?s(e,n(t)):e}},23034:(t,e,n)=>{var r=n(32022);t.exports=r},25786:t=>{t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},93494:(t,e,n)=>{var r=n(32022),i=n(33183),o=n(34028),a=n(77987),u=n(46169),s=n(30191),c=n(85048),d=n(5835),l=n(68546),f=n(80714),p=i&&i.prototype,h=s("species"),y=!1,m=o(r.PromiseRejectionEvent),v=a("Promise",(function(){var t=u(i),e=t!==String(i);if(!e&&66===f)return!0;if(l&&(!p.catch||!p.finally))return!0;if(!f||f<51||!/native code/.test(t)){var n=new i((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))};if((n.constructor={})[h]=r,!(y=n.then((function(){}))instanceof r))return!0}return!e&&(c||d)&&!m}));t.exports={CONSTRUCTOR:v,REJECTION_EVENT:m,SUBCLASSING:y}},33183:(t,e,n)=>{var r=n(32022);t.exports=r.Promise},39062:(t,e,n)=>{var r=n(52546),i=n(51355),o=n(67892);t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t);return(0,n.resolve)(e),n.promise}},22208:(t,e,n)=>{var r=n(33183),i=n(41269),o=n(93494).CONSTRUCTOR;t.exports=o||!i((function(t){r.all(t).then(void 0,(function(){}))}))},83623:(t,e,n)=>{var r=n(43087).f;t.exports=function(t,e,n){n in t||r(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},97278:t=>{var e=function(){this.head=null,this.tail=null};e.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=e},70468:(t,e,n)=>{var r=n(49425),i=n(52546),o=n(34028),a=n(39523),u=n(83046),s=TypeError;t.exports=function(t,e){var n=t.exec;if(o(n)){var c=r(n,t,e);return null!==c&&i(c),c}if("RegExp"===a(t))return r(u,t,e);throw s("RegExp#exec called on incompatible receiver")}},83046:(t,e,n)=>{"use strict";var r,i,o=n(49425),a=n(59913),u=n(74170),s=n(60333),c=n(13917),d=n(27905),l=n(13250),f=n(78045).get,p=n(45969),h=n(25404),y=d("native-string-replace",String.prototype.replace),m=RegExp.prototype.exec,v=m,g=a("".charAt),_=a("".indexOf),b=a("".replace),S=a("".slice),w=(i=/b*/g,o(m,r=/a/,"a"),o(m,i,"a"),0!==r.lastIndex||0!==i.lastIndex),C=c.BROKEN_CARET,E=void 0!==/()??/.exec("")[1];(w||E||C||p||h)&&(v=function(t){var e,n,r,i,a,c,d,p=this,h=f(p),I=u(t),P=h.raw;if(P)return P.lastIndex=p.lastIndex,e=o(v,P,I),p.lastIndex=P.lastIndex,e;var A=h.groups,O=C&&p.sticky,T=o(s,p),x=p.source,R=0,k=I;if(O&&(T=b(T,"y",""),-1===_(T,"g")&&(T+="g"),k=S(I,p.lastIndex),p.lastIndex>0&&(!p.multiline||p.multiline&&"\n"!==g(I,p.lastIndex-1))&&(x="(?: "+x+")",k=" "+k,R++),n=new RegExp("^(?:"+x+")",T)),E&&(n=new RegExp("^"+x+"$(?!\\s)",T)),w&&(r=p.lastIndex),i=o(m,O?n:p,k),O?i?(i.input=S(i.input,R),i[0]=S(i[0],R),i.index=p.lastIndex,p.lastIndex+=i[0].length):p.lastIndex=0:w&&i&&(p.lastIndex=p.global?i.index+i[0].length:r),E&&i&&i.length>1&&o(y,i[0],n,(function(){for(a=1;a{"use strict";var r=n(52546);t.exports=function(){var t=r(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},79517:(t,e,n)=>{var r=n(49425),i=n(98511),o=n(27357),a=n(60333),u=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in u||i(t,"flags")||!o(u,t)?e:r(a,t)}},13917:(t,e,n)=>{var r=n(38986),i=n(32022).RegExp,o=r((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),a=o||r((function(){return!i("a","y").sticky})),u=o||r((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}));t.exports={BROKEN_CARET:u,MISSED_STICKY:a,UNSUPPORTED_Y:o}},45969:(t,e,n)=>{var r=n(38986),i=n(32022).RegExp;t.exports=r((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},25404:(t,e,n)=>{var r=n(38986),i=n(32022).RegExp;t.exports=r((function(){var t=i("(?b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$c")}))},31591:(t,e,n)=>{var r=n(87126),i=TypeError;t.exports=function(t){if(r(t))throw i("Can't call method on "+t);return t}},60528:t=>{t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},42343:(t,e,n)=>{"use strict";var r=n(83155),i=n(43087),o=n(30191),a=n(12115),u=o("species");t.exports=function(t){var e=r(t),n=i.f;a&&e&&!e[u]&&n(e,u,{configurable:!0,get:function(){return this}})}},27747:(t,e,n)=>{var r=n(43087).f,i=n(98511),o=n(30191)("toStringTag");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!i(t,o)&&r(t,o,{configurable:!0,value:e})}},57186:(t,e,n)=>{var r=n(27905),i=n(60232),o=r("keys");t.exports=function(t){return o[t]||(o[t]=i(t))}},43349:(t,e,n)=>{var r=n(32022),i=n(97210),o="__core-js_shared__",a=r[o]||i(o,{});t.exports=a},27905:(t,e,n)=>{var r=n(68546),i=n(43349);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.25.2",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.25.2/LICENSE",source:"https://github.com/zloirock/core-js"})},33820:(t,e,n)=>{var r=n(52546),i=n(52023),o=n(87126),a=n(30191)("species");t.exports=function(t,e){var n,u=r(t).constructor;return void 0===u||o(n=r(u)[a])?e:i(n)}},9120:(t,e,n)=>{var r=n(38986);t.exports=function(t){return r((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},58402:(t,e,n)=>{var r=n(59913),i=n(75982),o=n(74170),a=n(31591),u=r("".charAt),s=r("".charCodeAt),c=r("".slice),d=function(t){return function(e,n){var r,d,l=o(a(e)),f=i(n),p=l.length;return f<0||f>=p?t?"":void 0:(r=s(l,f))<55296||r>56319||f+1===p||(d=s(l,f+1))<56320||d>57343?t?u(l,f):r:t?c(l,f,f+2):d-56320+(r-55296<<10)+65536}};t.exports={codeAt:d(!1),charAt:d(!0)}},4465:(t,e,n)=>{var r=n(30727);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(r)},59015:(t,e,n)=>{var r=n(59913),i=n(9375),o=n(74170),a=n(48126),u=n(31591),s=r(a),c=r("".slice),d=Math.ceil,l=function(t){return function(e,n,r){var a,l,f=o(u(e)),p=i(n),h=f.length,y=void 0===r?" ":o(r);return p<=h||""==y?f:((l=s(y,d((a=p-h)/y.length))).length>a&&(l=c(l,0,a)),t?f+l:l+f)}};t.exports={start:l(!1),end:l(!0)}},48126:(t,e,n)=>{"use strict";var r=n(75982),i=n(74170),o=n(31591),a=RangeError;t.exports=function(t){var e=i(o(this)),n="",u=r(t);if(u<0||u==1/0)throw a("Wrong number of repetitions");for(;u>0;(u>>>=1)&&(e+=e))1&u&&(n+=e);return n}},9334:(t,e,n)=>{"use strict";var r=n(76109).end,i=n(41017);t.exports=i("trimEnd")?function(){return r(this)}:"".trimEnd},41017:(t,e,n)=>{var r=n(27765).PROPER,i=n(38986),o=n(60812);t.exports=function(t){return i((function(){return!!o[t]()||"​…᠎"!=="​…᠎"[t]()||r&&o[t].name!==t}))}},97746:(t,e,n)=>{"use strict";var r=n(76109).start,i=n(41017);t.exports=i("trimStart")?function(){return r(this)}:"".trimStart},76109:(t,e,n)=>{var r=n(59913),i=n(31591),o=n(74170),a=n(60812),u=r("".replace),s="["+a+"]",c=RegExp("^"+s+s+"*"),d=RegExp(s+s+"*$"),l=function(t){return function(e){var n=o(i(e));return 1&t&&(n=u(n,c,"")),2&t&&(n=u(n,d,"")),n}};t.exports={start:l(1),end:l(2),trim:l(3)}},86263:(t,e,n)=>{var r=n(80714),i=n(38986);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},47498:(t,e,n)=>{var r=n(49425),i=n(83155),o=n(30191),a=n(43068);t.exports=function(){var t=i("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,u=o("toPrimitive");e&&!e[u]&&a(e,u,(function(t){return r(n,this)}),{arity:1})}},55666:(t,e,n)=>{var r=n(86263);t.exports=r&&!!Symbol.for&&!!Symbol.keyFor},16416:(t,e,n)=>{var r,i,o,a,u=n(32022),s=n(10584),c=n(80391),d=n(34028),l=n(98511),f=n(38986),p=n(86419),h=n(23141),y=n(82985),m=n(24246),v=n(649),g=n(79456),_=u.setImmediate,b=u.clearImmediate,S=u.process,w=u.Dispatch,C=u.Function,E=u.MessageChannel,I=u.String,P=0,A={},O="onreadystatechange";try{r=u.location}catch(t){}var T=function(t){if(l(A,t)){var e=A[t];delete A[t],e()}},x=function(t){return function(){T(t)}},R=function(t){T(t.data)},k=function(t){u.postMessage(I(t),r.protocol+"//"+r.host)};_&&b||(_=function(t){m(arguments.length,1);var e=d(t)?t:C(t),n=h(arguments,1);return A[++P]=function(){s(e,void 0,n)},i(P),P},b=function(t){delete A[t]},g?i=function(t){S.nextTick(x(t))}:w&&w.now?i=function(t){w.now(x(t))}:E&&!v?(a=(o=new E).port2,o.port1.onmessage=R,i=c(a.postMessage,a)):u.addEventListener&&d(u.postMessage)&&!u.importScripts&&r&&"file:"!==r.protocol&&!f(k)?(i=k,u.addEventListener("message",R,!1)):i=O in y("script")?function(t){p.appendChild(y("script"))[O]=function(){p.removeChild(this),T(t)}}:function(t){setTimeout(x(t),0)}),t.exports={set:_,clear:b}},10829:(t,e,n)=>{var r=n(59913);t.exports=r(1..valueOf)},86593:(t,e,n)=>{var r=n(75982),i=Math.max,o=Math.min;t.exports=function(t,e){var n=r(t);return n<0?i(n+e,0):o(n,e)}},91173:(t,e,n)=>{var r=n(75982),i=n(9375),o=RangeError;t.exports=function(t){if(void 0===t)return 0;var e=r(t),n=i(e);if(e!==n)throw o("Wrong length or index");return n}},58326:(t,e,n)=>{var r=n(94032),i=n(31591);t.exports=function(t){return r(i(t))}},75982:(t,e,n)=>{var r=n(39309);t.exports=function(t){var e=+t;return e!=e||0===e?0:r(e)}},9375:(t,e,n)=>{var r=n(75982),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},47137:(t,e,n)=>{var r=n(31591),i=Object;t.exports=function(t){return i(r(t))}},99127:(t,e,n)=>{var r=n(49425),i=n(51355),o=n(24505),a=n(34040),u=n(93126),s=n(30191),c=TypeError,d=s("toPrimitive");t.exports=function(t,e){if(!i(t)||o(t))return t;var n,s=a(t,d);if(s){if(void 0===e&&(e="default"),n=r(s,t,e),!i(n)||o(n))return n;throw c("Can't convert object to primitive value")}return void 0===e&&(e="number"),u(t,e)}},79127:(t,e,n)=>{var r=n(99127),i=n(24505);t.exports=function(t){var e=r(t,"string");return i(e)?e:e+""}},77568:(t,e,n)=>{var r={};r[n(30191)("toStringTag")]="z",t.exports="[object z]"===String(r)},74170:(t,e,n)=>{var r=n(82814),i=String;t.exports=function(t){if("Symbol"===r(t))throw TypeError("Cannot convert a Symbol value to a string");return i(t)}},84160:t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},60232:(t,e,n)=>{var r=n(59913),i=0,o=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++i+o,36)}},78590:(t,e,n)=>{var r=n(86263);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},71330:(t,e,n)=>{var r=n(12115),i=n(38986);t.exports=r&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},24246:t=>{var e=TypeError;t.exports=function(t,n){if(t{var r=n(32022),i=n(34028),o=r.WeakMap;t.exports=i(o)&&/native code/.test(String(o))},91165:(t,e,n)=>{var r=n(23034),i=n(98511),o=n(58855),a=n(43087).f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});i(e,t)||a(e,t,{value:o.f(t)})}},58855:(t,e,n)=>{var r=n(30191);e.f=r},30191:(t,e,n)=>{var r=n(32022),i=n(27905),o=n(98511),a=n(60232),u=n(86263),s=n(78590),c=i("wks"),d=r.Symbol,l=d&&d.for,f=s?d:d&&d.withoutSetter||a;t.exports=function(t){if(!o(c,t)||!u&&"string"!=typeof c[t]){var e="Symbol."+t;u&&o(d,t)?c[t]=d[t]:c[t]=s&&l?l(e):f(e)}return c[t]}},60812:t=>{t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},14459:(t,e,n)=>{"use strict";var r=n(54635),i=n(32022),o=n(65140),a=n(42343),u="ArrayBuffer",s=o[u];r({global:!0,constructor:!0,forced:i[u]!==s},{ArrayBuffer:s}),a(u)},75894:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(38986),a=n(65140),u=n(52546),s=n(86593),c=n(9375),d=n(33820),l=a.ArrayBuffer,f=a.DataView,p=f.prototype,h=i(l.prototype.slice),y=i(p.getUint8),m=i(p.setUint8);r({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:o((function(){return!new l(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(h&&void 0===e)return h(u(this),t);for(var n=u(this).byteLength,r=s(t,n),i=s(void 0===e?n:e,n),o=new(d(this,l))(c(i-r)),a=new f(this),p=new f(o),v=0;r{"use strict";var r=n(54635),i=n(38986),o=n(65351),a=n(51355),u=n(47137),s=n(84117),c=n(81912),d=n(19402),l=n(74842),f=n(41665),p=n(30191),h=n(80714),y=p("isConcatSpreadable"),m=h>=51||!i((function(){var t=[];return t[y]=!1,t.concat()[0]!==t})),v=f("concat"),g=function(t){if(!a(t))return!1;var e=t[y];return void 0!==e?!!e:o(t)};r({target:"Array",proto:!0,arity:1,forced:!m||!v},{concat:function(t){var e,n,r,i,o,a=u(this),f=l(a,0),p=0;for(e=-1,r=arguments.length;e{var r=n(54635),i=n(13750),o=n(47512);r({target:"Array",proto:!0},{fill:i}),o("fill")},51725:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).filter;r({target:"Array",proto:!0,forced:!n(41665)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},23143:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).findIndex,o=n(47512),a="findIndex",u=!0;a in[]&&Array(1)[a]((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o(a)},88342:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).find,o=n(47512),a="find",u=!0;a in[]&&Array(1)[a]((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o(a)},25036:(t,e,n)=>{"use strict";var r=n(54635),i=n(47484),o=n(86173),a=n(47137),u=n(84117),s=n(74842);r({target:"Array",proto:!0},{flatMap:function(t){var e,n=a(this),r=u(n);return o(t),(e=s(n,0)).length=i(e,n,n,r,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},95040:(t,e,n)=>{var r=n(54635),i=n(65375);r({target:"Array",stat:!0,forced:!n(41269)((function(t){Array.from(t)}))},{from:i})},5099:(t,e,n)=>{"use strict";var r=n(54635),i=n(78035).includes,o=n(38986),a=n(47512);r({target:"Array",proto:!0,forced:o((function(){return!Array(1).includes()}))},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),a("includes")},6550:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(78035).indexOf,a=n(94694),u=i([].indexOf),s=!!u&&1/u([1],1,-0)<0,c=a("indexOf");r({target:"Array",proto:!0,forced:s||!c},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return s?u(this,t,e)||0:o(this,t,e)}})},38490:(t,e,n)=>{"use strict";var r=n(58326),i=n(47512),o=n(13766),a=n(78045),u=n(43087).f,s=n(53338),c=n(80251),d=n(68546),l=n(12115),f="Array Iterator",p=a.set,h=a.getterFor(f);t.exports=s(Array,"Array",(function(t,e){p(this,{type:f,target:r(t),index:0,kind:e})}),(function(){var t=h(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,c(void 0,!0)):c("keys"==n?r:"values"==n?e[r]:[r,e[r]],!1)}),"values");var y=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!d&&l&&"values"!==y.name)try{u(y,"name",{value:"values"})}catch(t){}},64668:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(94032),a=n(58326),u=n(94694),s=i([].join),c=o!=Object,d=u("join",",");r({target:"Array",proto:!0,forced:c||!d},{join:function(t){return s(a(this),void 0===t?",":t)}})},74803:(t,e,n)=>{var r=n(54635),i=n(44687);r({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},95412:(t,e,n)=>{"use strict";var r=n(54635),i=n(55883).map;r({target:"Array",proto:!0,forced:!n(41665)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},72590:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(65351),a=i([].reverse),u=[1,2];r({target:"Array",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),a(this)}})},16516:(t,e,n)=>{"use strict";var r=n(54635),i=n(65351),o=n(78449),a=n(51355),u=n(86593),s=n(84117),c=n(58326),d=n(19402),l=n(30191),f=n(41665),p=n(23141),h=f("slice"),y=l("species"),m=Array,v=Math.max;r({target:"Array",proto:!0,forced:!h},{slice:function(t,e){var n,r,l,f=c(this),h=s(f),g=u(t,h),_=u(void 0===e?h:e,h);if(i(f)&&(n=f.constructor,(o(n)&&(n===m||i(n.prototype))||a(n)&&null===(n=n[y]))&&(n=void 0),n===m||void 0===n))return p(f,g,_);for(r=new(void 0===n?m:n)(v(_-g,0)),l=0;g<_;g++,l++)g in f&&d(r,l,f[g]);return r.length=l,r}})},2934:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(86173),a=n(47137),u=n(84117),s=n(39850),c=n(74170),d=n(38986),l=n(71929),f=n(94694),p=n(93454),h=n(88633),y=n(80714),m=n(10720),v=[],g=i(v.sort),_=i(v.push),b=d((function(){v.sort(void 0)})),S=d((function(){v.sort(null)})),w=f("sort"),C=!d((function(){if(y)return y<70;if(!(p&&p>3)){if(h)return!0;if(m)return m<603;var t,e,n,r,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)v.push({k:e+r,v:n})}for(v.sort((function(t,e){return e.v-t.v})),r=0;rc(n)?1:-1}}(t)),n=u(i),r=0;r{"use strict";var r=n(54635),i=n(47137),o=n(86593),a=n(75982),u=n(84117),s=n(17761),c=n(81912),d=n(74842),l=n(19402),f=n(39850),p=n(41665)("splice"),h=Math.max,y=Math.min;r({target:"Array",proto:!0,forced:!p},{splice:function(t,e){var n,r,p,m,v,g,_=i(this),b=u(_),S=o(t,b),w=arguments.length;for(0===w?n=r=0:1===w?(n=0,r=b-S):(n=w-2,r=y(h(a(e),0),b-S)),c(b+n-r),p=d(_,r),m=0;mb-r+n;m--)f(_,m-1)}else if(n>r)for(m=b-r;m>S;m--)g=m+n-1,(v=m+r-1)in _?_[g]=_[v]:f(_,g);for(m=0;m{n(47512)("flatMap")},16368:(t,e,n)=>{var r=n(98511),i=n(43068),o=n(68959),a=n(30191)("toPrimitive"),u=Date.prototype;r(u,a)||i(u,a,o)},34745:(t,e,n)=>{var r=n(12115),i=n(27765).EXISTS,o=n(59913),a=n(43087).f,u=Function.prototype,s=o(u.toString),c=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,d=o(c.exec);r&&!i&&a(u,"name",{configurable:!0,get:function(){try{return d(c,s(this))[1]}catch(t){return""}}})},55205:(t,e,n)=>{var r=n(54635),i=n(83155),o=n(10584),a=n(49425),u=n(59913),s=n(38986),c=n(65351),d=n(34028),l=n(51355),f=n(24505),p=n(23141),h=n(86263),y=i("JSON","stringify"),m=u(/./.exec),v=u("".charAt),g=u("".charCodeAt),_=u("".replace),b=u(1..toString),S=/[\uD800-\uDFFF]/g,w=/^[\uD800-\uDBFF]$/,C=/^[\uDC00-\uDFFF]$/,E=!h||s((function(){var t=i("Symbol")();return"[null]"!=y([t])||"{}"!=y({a:t})||"{}"!=y(Object(t))})),I=s((function(){return'"\\udf06\\ud834"'!==y("\udf06\ud834")||'"\\udead"'!==y("\udead")})),P=function(t,e){var n=p(arguments),r=e;if((l(e)||void 0!==t)&&!f(t))return c(e)||(e=function(t,e){if(d(r)&&(e=a(r,this,t,e)),!f(e))return e}),n[1]=e,o(y,null,n)},A=function(t,e,n){var r=v(n,e-1),i=v(n,e+1);return m(w,t)&&!m(C,i)||m(C,t)&&!m(w,r)?"\\u"+b(g(t,0),16):t};y&&r({target:"JSON",stat:!0,arity:3,forced:E||I},{stringify:function(t,e,n){var r=p(arguments),i=o(E?P:y,null,r);return I&&"string"==typeof i?_(i,S,A):i}})},3635:(t,e,n)=>{"use strict";n(69866)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(61961))},34897:(t,e,n)=>{n(3635)},99023:(t,e,n)=>{"use strict";var r=n(12115),i=n(32022),o=n(59913),a=n(77987),u=n(43068),s=n(98511),c=n(99618),d=n(27357),l=n(24505),f=n(99127),p=n(38986),h=n(92775).f,y=n(66213).f,m=n(43087).f,v=n(10829),g=n(76109).trim,_="Number",b=i[_],S=b.prototype,w=i.TypeError,C=o("".slice),E=o("".charCodeAt);if(a(_,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var I,P=function(t){var e=arguments.length<1?0:b(function(t){var e=f(t,"number");return"bigint"==typeof e?e:function(t){var e,n,r,i,o,a,u,s,c=f(t,"number");if(l(c))throw w("Cannot convert a Symbol value to a number");if("string"==typeof c&&c.length>2)if(c=g(c),43===(e=E(c,0))||45===e){if(88===(n=E(c,2))||120===n)return NaN}else if(48===e){switch(E(c,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+c}for(a=(o=C(c,2)).length,u=0;ui)return NaN;return parseInt(o,r)}return+c}(e)}(t)),n=this;return d(S,n)&&p((function(){v(n)}))?c(Object(e),n,P):e},A=r?h(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),O=0;A.length>O;O++)s(b,I=A[O])&&!s(P,I)&&m(P,I,y(b,I));P.prototype=S,S.constructor=P,u(i,_,P,{constructor:!0})}},80226:(t,e,n)=>{n(54635)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},21212:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(75982),a=n(10829),u=n(48126),s=n(38986),c=RangeError,d=String,l=Math.floor,f=i(u),p=i("".slice),h=i(1..toFixed),y=function(t,e,n){return 0===e?n:e%2==1?y(t,e-1,n*t):y(t*t,e/2,n)},m=function(t,e,n){for(var r=-1,i=n;++r<6;)i+=e*t[r],t[r]=i%1e7,i=l(i/1e7)},v=function(t,e){for(var n=6,r=0;--n>=0;)r+=t[n],t[n]=l(r/e),r=r%e*1e7},g=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var r=d(t[e]);n=""===n?r:n+f("0",7-r.length)+r}return n};r({target:"Number",proto:!0,forced:s((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!s((function(){h({})}))},{toFixed:function(t){var e,n,r,i,u=a(this),s=o(t),l=[0,0,0,0,0,0],h="",_="0";if(s<0||s>20)throw c("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return d(u);if(u<0&&(h="-",u=-u),u>1e-21)if(n=(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(u*y(2,69,1))-69)<0?u*y(2,-e,1):u/y(2,e,1),n*=4503599627370496,(e=52-e)>0){for(m(l,0,n),r=s;r>=7;)m(l,1e7,0),r-=7;for(m(l,y(10,r,1),0),r=e-1;r>=23;)v(l,1<<23),r-=23;v(l,1<0?h+((i=_.length)<=s?"0."+f("0",s-i)+_:p(_,0,i-s)+"."+p(_,i-s)):h+_}})},27835:(t,e,n)=>{var r=n(54635),i=n(86851);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},64701:(t,e,n)=>{var r=n(54635),i=n(76389).entries;r({target:"Object",stat:!0},{entries:function(t){return i(t)}})},33409:(t,e,n)=>{var r=n(54635),i=n(6769),o=n(38986),a=n(51355),u=n(67023).onFreeze,s=Object.freeze;r({target:"Object",stat:!0,forced:o((function(){s(1)})),sham:!i},{freeze:function(t){return s&&a(t)?s(u(t)):t}})},19926:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(58326),a=n(66213).f,u=n(12115),s=i((function(){a(1)}));r({target:"Object",stat:!0,forced:!u||s,sham:!u},{getOwnPropertyDescriptor:function(t,e){return a(o(t),e)}})},60678:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(12098).f;r({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:o})},17524:(t,e,n)=>{var r=n(54635),i=n(86263),o=n(38986),a=n(31711),u=n(47137);r({target:"Object",stat:!0,forced:!i||o((function(){a.f(1)}))},{getOwnPropertySymbols:function(t){var e=a.f;return e?e(u(t)):[]}})},71582:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(47137),a=n(75783),u=n(88538);r({target:"Object",stat:!0,forced:i((function(){a(1)})),sham:!u},{getPrototypeOf:function(t){return a(o(t))}})},97814:(t,e,n)=>{var r=n(54635),i=n(38986),o=n(51355),a=n(39523),u=n(1743),s=Object.isFrozen;r({target:"Object",stat:!0,forced:i((function(){s(1)}))||u},{isFrozen:function(t){return!o(t)||!(!u||"ArrayBuffer"!=a(t))||!!s&&s(t)}})},13722:(t,e,n)=>{var r=n(54635),i=n(47137),o=n(95932);r({target:"Object",stat:!0,forced:n(38986)((function(){o(1)}))},{keys:function(t){return o(i(t))}})},28101:(t,e,n)=>{n(54635)({target:"Object",stat:!0},{setPrototypeOf:n(25466)})},40737:(t,e,n)=>{var r=n(77568),i=n(43068),o=n(75954);r||i(Object.prototype,"toString",o,{unsafe:!0})},83681:(t,e,n)=>{var r=n(54635),i=n(57017);r({global:!0,forced:parseFloat!=i},{parseFloat:i})},50633:(t,e,n)=>{var r=n(54635),i=n(84475);r({global:!0,forced:parseInt!=i},{parseInt:i})},47197:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(86173),a=n(67892),u=n(25786),s=n(38640);r({target:"Promise",stat:!0,forced:n(22208)},{all:function(t){var e=this,n=a.f(e),r=n.resolve,c=n.reject,d=u((function(){var n=o(e.resolve),a=[],u=0,d=1;s(t,(function(t){var o=u++,s=!1;d++,i(n,e,t).then((function(t){s||(s=!0,a[o]=t,--d||r(a))}),c)})),--d||r(a)}));return d.error&&c(d.value),n.promise}})},41395:(t,e,n)=>{"use strict";var r=n(54635),i=n(68546),o=n(93494).CONSTRUCTOR,a=n(33183),u=n(83155),s=n(34028),c=n(43068),d=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&s(a)){var l=u("Promise").prototype.catch;d.catch!==l&&c(d,"catch",l,{unsafe:!0})}},59761:(t,e,n)=>{"use strict";var r,i,o,a=n(54635),u=n(68546),s=n(79456),c=n(32022),d=n(49425),l=n(43068),f=n(25466),p=n(27747),h=n(42343),y=n(86173),m=n(34028),v=n(51355),g=n(39837),_=n(33820),b=n(16416).set,S=n(76173),w=n(39361),C=n(25786),E=n(97278),I=n(78045),P=n(33183),A=n(93494),O=n(67892),T="Promise",x=A.CONSTRUCTOR,R=A.REJECTION_EVENT,k=A.SUBCLASSING,M=I.getterFor(T),N=I.set,D=P&&P.prototype,L=P,z=D,j=c.TypeError,U=c.document,F=c.process,q=O.f,B=q,G=!!(U&&U.createEvent&&c.dispatchEvent),V="unhandledrejection",Y=function(t){var e;return!(!v(t)||!m(e=t.then))&&e},H=function(t,e){var n,r,i,o=e.value,a=1==e.state,u=a?t.ok:t.fail,s=t.resolve,c=t.reject,l=t.domain;try{u?(a||(2===e.rejection&&J(e),e.rejection=1),!0===u?n=o:(l&&l.enter(),n=u(o),l&&(l.exit(),i=!0)),n===t.promise?c(j("Promise-chain cycle")):(r=Y(n))?d(r,n,s,c):s(n)):c(o)}catch(t){l&&!i&&l.exit(),c(t)}},W=function(t,e){t.notified||(t.notified=!0,S((function(){for(var n,r=t.reactions;n=r.get();)H(n,t);t.notified=!1,e&&!t.rejection&&Z(t)})))},K=function(t,e,n){var r,i;G?((r=U.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),c.dispatchEvent(r)):r={promise:e,reason:n},!R&&(i=c["on"+t])?i(r):t===V&&w("Unhandled promise rejection",n)},Z=function(t){d(b,c,(function(){var e,n=t.facade,r=t.value;if($(t)&&(e=C((function(){s?F.emit("unhandledRejection",r,n):K(V,n,r)})),t.rejection=s||$(t)?2:1,e.error))throw e.value}))},$=function(t){return 1!==t.rejection&&!t.parent},J=function(t){d(b,c,(function(){var e=t.facade;s?F.emit("rejectionHandled",e):K("rejectionhandled",e,t.value)}))},Q=function(t,e,n){return function(r){t(e,r,n)}},X=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,W(t,!0))},tt=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw j("Promise can't be resolved itself");var r=Y(e);r?S((function(){var n={done:!1};try{d(r,e,Q(tt,n,t),Q(X,n,t))}catch(e){X(n,e,t)}})):(t.value=e,t.state=1,W(t,!1))}catch(e){X({done:!1},e,t)}}};if(x&&(z=(L=function(t){g(this,z),y(t),d(r,this);var e=M(this);try{t(Q(tt,e),Q(X,e))}catch(t){X(e,t)}}).prototype,(r=function(t){N(this,{type:T,done:!1,notified:!1,parent:!1,reactions:new E,rejection:!1,state:0,value:void 0})}).prototype=l(z,"then",(function(t,e){var n=M(this),r=q(_(this,L));return n.parent=!0,r.ok=!m(t)||t,r.fail=m(e)&&e,r.domain=s?F.domain:void 0,0==n.state?n.reactions.add(r):S((function(){H(r,n)})),r.promise})),i=function(){var t=new r,e=M(t);this.promise=t,this.resolve=Q(tt,e),this.reject=Q(X,e)},O.f=q=function(t){return t===L||void 0===t?new i(t):B(t)},!u&&m(P)&&D!==Object.prototype)){o=D.then,k||l(D,"then",(function(t,e){var n=this;return new L((function(t,e){d(o,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete D.constructor}catch(t){}f&&f(D,z)}a({global:!0,constructor:!0,wrap:!0,forced:x},{Promise:L}),p(L,T,!1,!0),h(T)},83823:(t,e,n)=>{n(59761),n(47197),n(41395),n(99790),n(38777),n(79244)},99790:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(86173),a=n(67892),u=n(25786),s=n(38640);r({target:"Promise",stat:!0,forced:n(22208)},{race:function(t){var e=this,n=a.f(e),r=n.reject,c=u((function(){var a=o(e.resolve);s(t,(function(t){i(a,e,t).then(n.resolve,r)}))}));return c.error&&r(c.value),n.promise}})},38777:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425),o=n(67892);r({target:"Promise",stat:!0,forced:n(93494).CONSTRUCTOR},{reject:function(t){var e=o.f(this);return i(e.reject,void 0,t),e.promise}})},79244:(t,e,n)=>{"use strict";var r=n(54635),i=n(83155),o=n(68546),a=n(33183),u=n(93494).CONSTRUCTOR,s=n(39062),c=i("Promise"),d=o&&!u;r({target:"Promise",stat:!0,forced:o||u},{resolve:function(t){return s(d&&this===c?a:this,t)}})},84868:(t,e,n)=>{var r=n(12115),i=n(32022),o=n(59913),a=n(77987),u=n(99618),s=n(22775),c=n(92775).f,d=n(27357),l=n(91035),f=n(74170),p=n(79517),h=n(13917),y=n(83623),m=n(43068),v=n(38986),g=n(98511),_=n(78045).enforce,b=n(42343),S=n(30191),w=n(45969),C=n(25404),E=S("match"),I=i.RegExp,P=I.prototype,A=i.SyntaxError,O=o(P.exec),T=o("".charAt),x=o("".replace),R=o("".indexOf),k=o("".slice),M=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,N=/a/g,D=/a/g,L=new I(N)!==N,z=h.MISSED_STICKY,j=h.UNSUPPORTED_Y;if(a("RegExp",r&&(!L||z||w||C||v((function(){return D[E]=!1,I(N)!=N||I(D)==D||"/a/i"!=I(N,"i")}))))){for(var U=function(t,e){var n,r,i,o,a,c,h=d(P,this),y=l(t),m=void 0===e,v=[],b=t;if(!h&&y&&m&&t.constructor===U)return t;if((y||d(P,t))&&(t=t.source,m&&(e=p(b))),t=void 0===t?"":f(t),e=void 0===e?"":f(e),b=t,w&&"dotAll"in N&&(r=!!e&&R(e,"s")>-1)&&(e=x(e,/s/g,"")),n=e,z&&"sticky"in N&&(i=!!e&&R(e,"y")>-1)&&j&&(e=x(e,/y/g,"")),C&&(o=function(t){for(var e,n=t.length,r=0,i="",o=[],a={},u=!1,s=!1,c=0,d="";r<=n;r++){if("\\"===(e=T(t,r)))e+=T(t,++r);else if("]"===e)u=!1;else if(!u)switch(!0){case"["===e:u=!0;break;case"("===e:O(M,k(t,r+1))&&(r+=2,s=!0),i+=e,c++;continue;case">"===e&&s:if(""===d||g(a,d))throw new A("Invalid capture group name");a[d]=!0,o[o.length]=[d,c],s=!1,d="";continue}s?d+=e:i+=e}return[i,o]}(t),t=o[0],v=o[1]),a=u(I(t,e),h?this:P,U),(r||i||v.length)&&(c=_(a),r&&(c.dotAll=!0,c.raw=U(function(t){for(var e,n=t.length,r=0,i="",o=!1;r<=n;r++)"\\"!==(e=T(t,r))?o||"."!==e?("["===e?o=!0:"]"===e&&(o=!1),i+=e):i+="[\\s\\S]":i+=e+T(t,++r);return i}(t),n)),i&&(c.sticky=!0),v.length&&(c.groups=v)),t!==b)try{s(a,"source",""===b?"(?:)":b)}catch(t){}return a},F=c(I),q=0;F.length>q;)y(U,I,F[q++]);P.constructor=U,U.prototype=P,m(i,"RegExp",U,{constructor:!0})}b("RegExp")},49636:(t,e,n)=>{"use strict";var r=n(54635),i=n(83046);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},26667:(t,e,n)=>{"use strict";var r=n(27765).PROPER,i=n(43068),o=n(52546),a=n(74170),u=n(38986),s=n(79517),c="toString",d=RegExp.prototype[c],l=u((function(){return"/a/b"!=d.call({source:"a",flags:"b"})})),f=r&&d.name!=c;(l||f)&&i(RegExp.prototype,c,(function(){var t=o(this);return"/"+a(t.source)+"/"+a(s(t))}),{unsafe:!0})},1386:(t,e,n)=>{"use strict";n(69866)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(61961))},98351:(t,e,n)=>{n(1386)},51996:(t,e,n)=>{"use strict";var r,i=n(54635),o=n(59913),a=n(66213).f,u=n(9375),s=n(74170),c=n(17911),d=n(31591),l=n(41813),f=n(68546),p=o("".endsWith),h=o("".slice),y=Math.min,m=l("endsWith");i({target:"String",proto:!0,forced:!(!f&&!m&&(r=a(String.prototype,"endsWith"),r&&!r.writable)||m)},{endsWith:function(t){var e=s(d(this));c(t);var n=arguments.length>1?arguments[1]:void 0,r=e.length,i=void 0===n?r:y(u(n),r),o=s(t);return p?p(e,o,i):h(e,i-o.length,i)===o}})},74035:(t,e,n)=>{"use strict";var r=n(54635),i=n(59913),o=n(17911),a=n(31591),u=n(74170),s=n(41813),c=i("".indexOf);r({target:"String",proto:!0,forced:!s("includes")},{includes:function(t){return!!~c(u(a(this)),u(o(t)),arguments.length>1?arguments[1]:void 0)}})},10951:(t,e,n)=>{"use strict";var r=n(58402).charAt,i=n(74170),o=n(78045),a=n(53338),u=n(80251),s="String Iterator",c=o.set,d=o.getterFor(s);a(String,"String",(function(t){c(this,{type:s,string:i(t),index:0})}),(function(){var t,e=d(this),n=e.string,i=e.index;return i>=n.length?u(void 0,!0):(t=r(n,i),e.index+=t.length,u(t,!1))}))},88720:(t,e,n)=>{"use strict";var r=n(54635),i=n(89444);r({target:"String",proto:!0,forced:n(9120)("link")},{link:function(t){return i(this,"a","href",t)}})},15483:(t,e,n)=>{"use strict";var r=n(49425),i=n(26210),o=n(52546),a=n(87126),u=n(9375),s=n(74170),c=n(31591),d=n(34040),l=n(75527),f=n(70468);i("match",(function(t,e,n){return[function(e){var n=c(this),i=a(e)?void 0:d(e,t);return i?r(i,e,n):new RegExp(e)[t](s(n))},function(t){var r=o(this),i=s(t),a=n(e,r,i);if(a.done)return a.value;if(!r.global)return f(r,i);var c=r.unicode;r.lastIndex=0;for(var d,p=[],h=0;null!==(d=f(r,i));){var y=s(d[0]);p[h]=y,""===y&&(r.lastIndex=l(i,u(r.lastIndex),c)),h++}return 0===h?null:p}]}))},40550:(t,e,n)=>{"use strict";var r=n(54635),i=n(59015).end;r({target:"String",proto:!0,forced:n(4465)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},79963:(t,e,n)=>{"use strict";var r=n(54635),i=n(59015).start;r({target:"String",proto:!0,forced:n(4465)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},41267:(t,e,n)=>{n(54635)({target:"String",proto:!0},{repeat:n(48126)})},58443:(t,e,n)=>{"use strict";var r=n(10584),i=n(49425),o=n(59913),a=n(26210),u=n(38986),s=n(52546),c=n(34028),d=n(87126),l=n(75982),f=n(9375),p=n(74170),h=n(31591),y=n(75527),m=n(34040),v=n(82319),g=n(70468),_=n(30191)("replace"),b=Math.max,S=Math.min,w=o([].concat),C=o([].push),E=o("".indexOf),I=o("".slice),P="$0"==="a".replace(/./,"$0"),A=!!/./[_]&&""===/./[_]("a","$0");a("replace",(function(t,e,n){var o=A?"$":"$0";return[function(t,n){var r=h(this),o=d(t)?void 0:m(t,_);return o?i(o,t,r,n):i(e,p(r),t,n)},function(t,i){var a=s(this),u=p(t);if("string"==typeof i&&-1===E(i,o)&&-1===E(i,"$<")){var d=n(e,a,u,i);if(d.done)return d.value}var h=c(i);h||(i=p(i));var m=a.global;if(m){var _=a.unicode;a.lastIndex=0}for(var P=[];;){var A=g(a,u);if(null===A)break;if(C(P,A),!m)break;""===p(A[0])&&(a.lastIndex=y(u,f(a.lastIndex),_))}for(var O,T="",x=0,R=0;R=x&&(T+=I(u,x,M)+j,x=M+k.length)}return T+I(u,x)}]}),!!u((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}))||!P||A)},57347:(t,e,n)=>{"use strict";var r=n(49425),i=n(26210),o=n(52546),a=n(87126),u=n(31591),s=n(60528),c=n(74170),d=n(34040),l=n(70468);i("search",(function(t,e,n){return[function(e){var n=u(this),i=a(e)?void 0:d(e,t);return i?r(i,e,n):new RegExp(e)[t](c(n))},function(t){var r=o(this),i=c(t),a=n(e,r,i);if(a.done)return a.value;var u=r.lastIndex;s(u,0)||(r.lastIndex=0);var d=l(r,i);return s(r.lastIndex,u)||(r.lastIndex=u),null===d?-1:d.index}]}))},34500:(t,e,n)=>{"use strict";var r=n(10584),i=n(49425),o=n(59913),a=n(26210),u=n(52546),s=n(87126),c=n(91035),d=n(31591),l=n(33820),f=n(75527),p=n(9375),h=n(74170),y=n(34040),m=n(42893),v=n(70468),g=n(83046),_=n(13917),b=n(38986),S=_.UNSUPPORTED_Y,w=4294967295,C=Math.min,E=[].push,I=o(/./.exec),P=o(E),A=o("".slice);a("split",(function(t,e,n){var o;return o="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var o=h(d(this)),a=void 0===n?w:n>>>0;if(0===a)return[];if(void 0===t)return[o];if(!c(t))return i(e,o,t,a);for(var u,s,l,f=[],p=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),y=0,v=new RegExp(t.source,p+"g");(u=i(g,v,o))&&!((s=v.lastIndex)>y&&(P(f,A(o,y,u.index)),u.length>1&&u.index=a));)v.lastIndex===u.index&&v.lastIndex++;return y===o.length?!l&&I(v,"")||P(f,""):P(f,A(o,y)),f.length>a?m(f,0,a):f}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i(e,this,t,n)}:e,[function(e,n){var r=d(this),a=s(e)?void 0:y(e,t);return a?i(a,e,r,n):i(o,h(r),e,n)},function(t,r){var i=u(this),a=h(t),s=n(o,i,a,r,o!==e);if(s.done)return s.value;var c=l(i,RegExp),d=i.unicode,y=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(S?"g":"y"),m=new c(S?"^(?:"+i.source+")":i,y),g=void 0===r?w:r>>>0;if(0===g)return[];if(0===a.length)return null===v(m,a)?[a]:[];for(var _=0,b=0,E=[];b{"use strict";var r,i=n(54635),o=n(59913),a=n(66213).f,u=n(9375),s=n(74170),c=n(17911),d=n(31591),l=n(41813),f=n(68546),p=o("".startsWith),h=o("".slice),y=Math.min,m=l("startsWith");i({target:"String",proto:!0,forced:!(!f&&!m&&(r=a(String.prototype,"startsWith"),r&&!r.writable)||m)},{startsWith:function(t){var e=s(d(this));c(t);var n=u(y(arguments.length>1?arguments[1]:void 0,e.length)),r=s(t);return p?p(e,r,n):h(e,n,n+r.length)===r}})},91652:(t,e,n)=>{n(74962);var r=n(54635),i=n(9334);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},86630:(t,e,n)=>{var r=n(54635),i=n(97746);r({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},74962:(t,e,n)=>{var r=n(54635),i=n(9334);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},94064:(t,e,n)=>{n(86630);var r=n(54635),i=n(97746);r({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},25959:(t,e,n)=>{"use strict";var r=n(54635),i=n(76109).trim;r({target:"String",proto:!0,forced:n(41017)("trim")},{trim:function(){return i(this)}})},9190:(t,e,n)=>{n(91165)("asyncIterator")},69106:(t,e,n)=>{"use strict";var r=n(54635),i=n(32022),o=n(49425),a=n(59913),u=n(68546),s=n(12115),c=n(86263),d=n(38986),l=n(98511),f=n(27357),p=n(52546),h=n(58326),y=n(79127),m=n(74170),v=n(71111),g=n(13250),_=n(95932),b=n(92775),S=n(12098),w=n(31711),C=n(66213),E=n(43087),I=n(13330),P=n(23659),A=n(43068),O=n(27905),T=n(57186),x=n(17307),R=n(60232),k=n(30191),M=n(58855),N=n(91165),D=n(47498),L=n(27747),z=n(78045),j=n(55883).forEach,U=T("hidden"),F="Symbol",q="prototype",B=z.set,G=z.getterFor(F),V=Object[q],Y=i.Symbol,H=Y&&Y[q],W=i.TypeError,K=i.QObject,Z=C.f,$=E.f,J=S.f,Q=P.f,X=a([].push),tt=O("symbols"),et=O("op-symbols"),nt=O("wks"),rt=!K||!K[q]||!K[q].findChild,it=s&&d((function(){return 7!=g($({},"a",{get:function(){return $(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=Z(V,e);r&&delete V[e],$(t,e,n),r&&t!==V&&$(V,e,r)}:$,ot=function(t,e){var n=tt[t]=g(H);return B(n,{type:F,tag:t,description:e}),s||(n.description=e),n},at=function(t,e,n){t===V&&at(et,e,n),p(t);var r=y(e);return p(n),l(tt,r)?(n.enumerable?(l(t,U)&&t[U][r]&&(t[U][r]=!1),n=g(n,{enumerable:v(0,!1)})):(l(t,U)||$(t,U,v(1,{})),t[U][r]=!0),it(t,r,n)):$(t,r,n)},ut=function(t,e){p(t);var n=h(e),r=_(n).concat(lt(n));return j(r,(function(e){s&&!o(st,n,e)||at(t,e,n[e])})),t},st=function(t){var e=y(t),n=o(Q,this,e);return!(this===V&&l(tt,e)&&!l(et,e))&&(!(n||!l(this,e)||!l(tt,e)||l(this,U)&&this[U][e])||n)},ct=function(t,e){var n=h(t),r=y(e);if(n!==V||!l(tt,r)||l(et,r)){var i=Z(n,r);return!i||!l(tt,r)||l(n,U)&&n[U][r]||(i.enumerable=!0),i}},dt=function(t){var e=J(h(t)),n=[];return j(e,(function(t){l(tt,t)||l(x,t)||X(n,t)})),n},lt=function(t){var e=t===V,n=J(e?et:h(t)),r=[];return j(n,(function(t){!l(tt,t)||e&&!l(V,t)||X(r,tt[t])})),r};c||(A(H=(Y=function(){if(f(H,this))throw W("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?m(arguments[0]):void 0,e=R(t),n=function(t){this===V&&o(n,et,t),l(this,U)&&l(this[U],e)&&(this[U][e]=!1),it(this,e,v(1,t))};return s&&rt&&it(V,e,{configurable:!0,set:n}),ot(e,t)})[q],"toString",(function(){return G(this).tag})),A(Y,"withoutSetter",(function(t){return ot(R(t),t)})),P.f=st,E.f=at,I.f=ut,C.f=ct,b.f=S.f=dt,w.f=lt,M.f=function(t){return ot(k(t),t)},s&&($(H,"description",{configurable:!0,get:function(){return G(this).description}}),u||A(V,"propertyIsEnumerable",st,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:Y}),j(_(nt),(function(t){N(t)})),r({target:F,stat:!0,forced:!c},{useSetter:function(){rt=!0},useSimple:function(){rt=!1}}),r({target:"Object",stat:!0,forced:!c,sham:!s},{create:function(t,e){return void 0===e?g(t):ut(g(t),e)},defineProperty:at,defineProperties:ut,getOwnPropertyDescriptor:ct}),r({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:dt}),D(),L(Y,F),x[U]=!0},70472:(t,e,n)=>{"use strict";var r=n(54635),i=n(12115),o=n(32022),a=n(59913),u=n(98511),s=n(34028),c=n(27357),d=n(74170),l=n(43087).f,f=n(74953),p=o.Symbol,h=p&&p.prototype;if(i&&s(p)&&(!("description"in h)||void 0!==p().description)){var y={},m=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),e=c(h,this)?new p(t):void 0===t?p():p(t);return""===t&&(y[e]=!0),e};f(m,p),m.prototype=h,h.constructor=m;var v="Symbol(test)"==String(p("test")),g=a(h.valueOf),_=a(h.toString),b=/^Symbol\((.*)\)[^)]+$/,S=a("".replace),w=a("".slice);l(h,"description",{configurable:!0,get:function(){var t=g(this);if(u(y,t))return"";var e=_(t),n=v?w(e,7,-1):S(e,b,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:m})}},83038:(t,e,n)=>{var r=n(54635),i=n(83155),o=n(98511),a=n(74170),u=n(27905),s=n(55666),c=u("string-to-symbol-registry"),d=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!s},{for:function(t){var e=a(t);if(o(c,e))return c[e];var n=i("Symbol")(e);return c[e]=n,d[n]=e,n}})},93270:(t,e,n)=>{n(91165)("iterator")},93942:(t,e,n)=>{n(69106),n(83038),n(84272),n(55205),n(17524)},84272:(t,e,n)=>{var r=n(54635),i=n(98511),o=n(24505),a=n(84160),u=n(27905),s=n(55666),c=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!s},{keyFor:function(t){if(!o(t))throw TypeError(a(t)+" is not a symbol");if(i(c,t))return c[t]}})},8962:(t,e,n)=>{var r=n(91165),i=n(47498);r("toPrimitive"),i()},56019:(t,e,n)=>{"use strict";var r,i=n(32022),o=n(59913),a=n(3193),u=n(67023),s=n(69866),c=n(31858),d=n(51355),l=n(62713),f=n(78045).enforce,p=n(74112),h=!i.ActiveXObject&&"ActiveXObject"in i,y=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},m=s("WeakMap",y,c);if(p&&h){r=c.getConstructor(y,"WeakMap",!0),u.enable();var v=m.prototype,g=o(v.delete),_=o(v.has),b=o(v.get),S=o(v.set);a(v,{delete:function(t){if(d(t)&&!l(t)){var e=f(this);return e.frozen||(e.frozen=new r),g(this,t)||e.frozen.delete(t)}return g(this,t)},has:function(t){if(d(t)&&!l(t)){var e=f(this);return e.frozen||(e.frozen=new r),_(this,t)||e.frozen.has(t)}return _(this,t)},get:function(t){if(d(t)&&!l(t)){var e=f(this);return e.frozen||(e.frozen=new r),_(this,t)?b(this,t):e.frozen.get(t)}return b(this,t)},set:function(t,e){if(d(t)&&!l(t)){var n=f(this);n.frozen||(n.frozen=new r),_(this,t)?S(this,t,e):n.frozen.set(t,e)}else S(this,t,e);return this}})}},5963:(t,e,n)=>{n(56019)},71806:(t,e,n)=>{var r=n(32022),i=n(66910),o=n(73391),a=n(33609),u=n(22775),s=function(t){if(t&&t.forEach!==a)try{u(t,"forEach",a)}catch(e){t.forEach=a}};for(var c in i)i[c]&&s(r[c]&&r[c].prototype);s(o)},5193:(t,e,n)=>{var r=n(32022),i=n(66910),o=n(73391),a=n(38490),u=n(22775),s=n(30191),c=s("iterator"),d=s("toStringTag"),l=a.values,f=function(t,e){if(t){if(t[c]!==l)try{u(t,c,l)}catch(e){t[c]=l}if(t[d]||u(t,d,e),i[e])for(var n in a)if(t[n]!==a[n])try{u(t,n,a[n])}catch(e){t[n]=a[n]}}};for(var p in i)f(r[p]&&r[p].prototype,p);f(o,"DOMTokenList")},72031:(t,e,n)=>{"use strict";var r=n(54635),i=n(49425);r({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};return(()=>{"use strict";n.r(r),n.d(r,{createCheckoutButtonInitializer:()=>Wu,createTimeout:()=>e.createTimeout});var t={};n.r(t),n.d(t,{createApplePayButtonStrategy:()=>au,createBoltButtonStrategy:()=>yu,createPayPalCommerceAlternativeMethodsButtonStrategy:()=>ju,createPayPalCommerceButtonStrategy:()=>ku,createPayPalCommerceCreditButtonStrategy:()=>Nu,createPayPalCommerceVenmoButtonStrategy:()=>Lu,createPaypalExpressButtonStrategy:()=>Hu});var e=n(14121),i=n(13751),o=n(61699),a=n(45346);const u=function(t){function e(e){var n,r,i=this.constructor,o=t.call(this,e||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(e,t),e}(Error);var s={body:{},headers:{},status:0};const c=function(t){function e(e,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,u=e||s,c=u.body,d=u.headers,l=u.status;return(a=t.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=c,a.headers=d,a.status=l,a.errors=o||[],a}return(0,o.__extends)(e,t),e}(u),d=function(t){function e(e){var n=t.call(this,e,{message:"There is a problem processing your payment. Please try again later."})||this;return n.name="PaymentMethodInvalidError",n.type="payment_method_invalid",n}return(0,o.__extends)(e,t),e}(c);n(34745),n(28101);const l=function(t){function e(e){var n,r,i=this.constructor,o=t.call(this,e||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",n=o,r=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,o.__extends)(e,t),e}(Error);var f={body:{},headers:{},status:0};const p=function(t){function e(e,n){var r=void 0===n?{}:n,i=r.message,o=r.errors,a=this,u=e||f,s=u.body,c=u.headers,d=u.status;return(a=t.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",a.type="request",a.body=s,a.headers=c,a.status=d,a.errors=o||[],a}return(0,o.__extends)(e,t),e}(l),h=function(t){function e(e,n){var r=t.call(this,e,{message:n||"An unexpected error has occurred. The checkout process cannot continue as a result."})||this;return r.name="UnrecoverableError",r.type="unrecoverable",r}return(0,o.__extends)(e,t),e}(p);n(93942),n(70472),n(93270),n(38490),n(40737),n(10951),n(34500),n(5193);var y=n(87275);function m(t){return t.reduce((function(t,e){return e?(0,o.__spreadArrays)(t,[e]):t}),[]).join(" ")}function v(t,e){var n=t.body.errors,r=void 0===n?[]:n;return new p(t,{message:g(r)||e,errors:r})}function g(t){if(Array.isArray(t))return t.reduce((function(t,e){return e&&e.message?(0,o.__spreadArrays)(t,[e.message]):t}),[]).join(" ")}n(64668),n(95412);const _=function(t){function e(e){var n=t.call(this,e,{message:"The request has timed out or aborted."})||this;return n.name="TimeoutError",n.type="timeout",n}return(0,o.__extends)(e,t),e}(p);function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}const S=function(){function t(){this._factoryMethods={},this.register("default",(function(t,e){return new p(t,{message:e})})),this.register("internal",(function(t,e){return function(t,e){var n=t.body,r=n.errors,i=void 0===r?[]:r;return new p(t,{message:m(i)||n.detail||n.title||e,errors:i.length?i.map((function(t){return{code:n.type,message:t}})):[{code:n.type,message:n.detail||n.title}]})}(t,e)})),this.register("storefront",(function(t,e){return function(t,e){var n=t.body;return new p(t,{message:e||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(t,e)})),this.register("payment",(function(t,e){return v(t,e)})),this.register("timeout",(function(t){return new _(t)}))}return t.prototype.register=function(t,e){this._factoryMethods[t]=e},t.prototype.createError=function(t,e){return(this._factoryMethods[this._getType(t)]||this._factoryMethods.default)(t,e)},t.prototype._getType=function(t){if(0===t.status)return"timeout";if(this._isStorefrontErrorResponseBody(t.body))return"storefront";if(this._isInternalErrorResponseBody(t.body)){var e=(0,y.last)(t.body.type.split("/"));return e&&this._factoryMethods[e]?e:"internal"}var n=(0,y.last)(t.body&&t.body.errors);return n&&n.code&&this._factoryMethods[n.code]?n.code:"payment"},t.prototype._isStorefrontErrorResponseBody=function(t){var e=t;return!this._isInternalErrorResponseBody(t)&&"string"==typeof e.title&&"string"==typeof e.type&&"number"==typeof e.status&&"string"==typeof e.detail},t.prototype._isInternalErrorResponseBody=function(t){var e=t;return"object"===b(e.errors)&&"string"==typeof e.title&&"string"==typeof e.type&&"number"==typeof e.status},t}();var w,C,E,I,P=n(73531),A=n(63660);function O(t){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},O(t)}function T(t,e){return Array.isArray(t)?t.map((function(t){return T(t,e)})):(0,y.isPlainObject)(t)?(0,y.transform)((0,y.omitBy)(t,e),(function(t,n,r){t[r]=T(n,e)}),{}):t}function x(t,e){return function(t){return t.type===C.ClearError}(e)?T(t,(function(t){return t===e.payload})):t}function R(t){return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},R(t)}function k(t,e,n){return t===e||(t&&e&&"object"===R(t)&&"object"===R(e)?Array.isArray(t)&&Array.isArray(e)?function(t,e,n){if(t.length!==e.length)return!1;for(var r=0,i=t.length;r-1){var i=n[r];return r>0&&(n.splice(r,1),n.unshift(i)),i.value}return Nn}return{get:r,put:function(e,i){r(e)===Nn&&(n.unshift({key:e,value:i}),n.length>t&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(s,d);function f(){var e=l.get(arguments);if(e===Nn){if(e=t.apply(null,arguments),c){var n=l.getEntries().find((function(t){return c(t.value,e)}));n&&(e=n.value)}l.put(arguments,e)}return e}return f.clearCache=function(){return l.clear()},f}function zn(t){return zn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zn(t)}function jn(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r0}})),H=Un(U,(function(t){return function(e){return!(!e||!e.nonce)||t()===Vn||t()===Yn}})),(0,Rn.qe)((function(t,e){return{getPaymentId:z({checkout:t,order:e}),getPaymentIdOrThrow:j({checkout:t,order:e}),getPaymentStatus:U({checkout:t,order:e}),getPaymentStatusOrThrow:F({checkout:t,order:e}),getPaymentToken:q({checkout:t,order:e}),getPaymentTokenOrThrow:B({checkout:t,order:e}),getPaymentRedirectUrl:G({checkout:t,order:e}),getPaymentRedirectUrlOrThrow:V({checkout:t,order:e}),isPaymentDataRequired:Y({checkout:t,order:e}),isPaymentDataSubmitted:H({checkout:t,order:e})}}))),Et=function(){var t=Un((function(t){return t.errors.applyError}),(function(t){return function(){return t}})),e=Un((function(t){return!!t.statuses.isApplying}),(function(t){return function(){return t}}));return(0,Rn.qe)((function(n){return void 0===n&&(n=Kn),{getApplyError:t(n),isApplying:e(n)}}))}(),Pt=function(){var t=Un((function(t){return t.errors.updateError}),(function(t){return function(){return t}})),e=Un((function(t){return!!t.statuses.isUpdating}),(function(t){return function(){return t}}));return(0,Rn.qe)((function(n){return void 0===n&&(n=Sn),{getUpdateError:t(n),isUpdating:e(n)}}))}(),At=(K=Un((function(t){return t.data}),(function(t){return function(){return t}})),Z=Un((function(t){return t.errors.sendError}),(function(t){return function(){return t}})),$=Un((function(t){return!!t.statuses.isSending}),(function(t){return function(){return t}})),(0,Rn.qe)((function(t){return void 0===t&&(t=ln),{getEmail:K(t),getSendError:Z(t),isSending:$(t)}}))),Ot=function(){var t=Un((function(t){return t.data}),(function(t){return function(){return t}})),e=Un((function(t){return t.data}),(function(t){return function(e){return null==t?void 0:t.find((function(t){return t.region===e}))}})),n=Un((function(t){return t.errors.loadError}),(function(t){return function(){return t}})),r=Un((function(t){return t.statuses.isLoading}),(function(t){return function(){return!!t}}));return(0,Rn.qe)((function(i){return void 0===i&&(i=zt),{getExtensions:t(i),getExtensionByRegion:e(i),getLoadError:n(i),isLoading:r(i)}}))}();return function(t,e){void 0===e&&(e={});var n=J(t.billingAddress),r=Q(t.cart),i=tt(t.checkoutButton),o=nt(t.countries),a=rt(t.coupons),u=it(t.customer),s=ot(t.customerStrategies),c=Ot(t.extensions),d=ct(t.formFields),l=at(t.giftCertificates),f=ut(t.instruments),p=wt(t.orderBillingAddress),h=dt(t.paymentMethods),y=lt(t.paymentStrategies),m=ft(t.pickupOptions),v=ht(t.remoteCheckout),g=yt(t.consignments),_=mt(t.shippingCountries),b=vt(t.shippingStrategies),S=Pt(t.subscriptions),w=Et(t.storeCredit),C=At(t.signInEmail),E=gt(t.consignments,r),I=bt(t.checkout,n,r,E,a,u,l),P=St(t.order,p,a),A=Ct(I,P),O={billingAddress:n,cart:r,checkout:I,checkoutButton:i,config:et(t.config,t.formFields),consignments:E,countries:o,coupons:a,customer:u,customerStrategies:s,extensions:c,form:d,giftCertificates:l,instruments:f,order:P,orderBillingAddress:p,payment:A,paymentMethods:h,paymentStrategies:y,pickupOptions:m,remoteCheckout:v,shippingAddress:g,shippingCountries:_,shippingStrategies:b,signInEmail:C,subscriptions:S,storeCredit:w};return e.shouldWarnMutation?function(t){return Object.keys(t).reduce((function(e,n){return e[n]=Bn(t[n]),e}),{})}(O):O}}function $n(t,e){void 0===t&&(t={});var n,r,i=(n=new S,["catalog_only","empty_cart","invalid_order_id","invalid_order_token","missing_order_token","missing_provider_token","missing_shipping_method","order_completion_error","order_could_not_be_finalized_error","order_create_failed","provider_fatal_error","provider_setup_error","stock_too_low"].forEach((function(t){n.register(t,(function(t,e){return new h(t,e)}))})),n.register("invalid_payment_provider",(function(t){return new d(t)})),n.register("payment_config_not_found",(function(t){return new d(t)})),r=n,function(t){return(0,P.D)(t).pipe((0,A.K)((function(t){if(t instanceof Error||t.payload instanceof Error)throw t;if((n=t.payload)&&"object"===O(n)&&["body","headers","status","statusText"].every((function(t){return Object.prototype.hasOwnProperty.call(n,t)}))){var e=t.payload.body&&t.payload.body.detail;throw(0,o.__assign)((0,o.__assign)({},t),{payload:r.createError(t.payload,e)})}var n;throw t})))}),u=Zn();return(0,a.Mg)((0,a.UY)({billingAddress:L,cart:K,checkout:Pn,checkoutButton:rt,config:ct,consignments:je,countries:Zt,coupons:ht,customer:Pt,customerStrategies:kt,extensions:jt,formFields:Vt,giftCertificates:bt,instruments:Oe,orderBillingAddress:se,order:te,payment:de,paymentMethods:ye,paymentStrategies:we,pickupOptions:We,remoteCheckout:Ne,shippingCountries:Xe,shippingStrategies:an,signInEmail:fn,subscriptions:wn,storeCredit:vn}),t,(0,o.__assign)({actionTransformer:i,stateTransformer:function(t){return u(t)}},e))}var Jn=n(64074),Qn=(n(5963),n(7263));function Xn(t,e,n){var r=new WeakMap;function i(t){var n=this;return function(){for(var i,a=[],u=0;u=400&&t.status<500)throw new Cr(t);throw t}))},t.prototype.updateCheckout=function(t,e,n){var r=void 0===n?{}:n,i=r.params,a=(void 0===i?{}:i).include,u=r.timeout,s="/api/storefront/checkout/"+t,c=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.put(s,{params:{include:Sr(wr,a)},body:e,headers:c,timeout:u})},t}();n(16516);const Ir=function(){function t(){}return t.prototype.isEqual=function(t,e){return(0,y.isEqual)(this._normalize(t),this._normalize(e))},t.prototype._normalize=function(t){return{cartAmount:t.cartAmount,currency:t.currency,id:t.id,lineItems:{digitalItems:t.lineItems.digitalItems.slice().sort((function(t,e){return(""+t.productId+t.variantId).localeCompare(""+e.productId+e.variantId)})).map((function(t){return{extendedSalePrice:t.extendedSalePrice,productId:t.productId,quantity:t.quantity,variantId:t.variantId}})),giftCertificates:t.lineItems.giftCertificates.slice().sort((function(t,e){return(""+t.id).localeCompare(""+e.id)})).map((function(t){return{amount:t.amount,recipient:t.recipient}})),physicalItems:t.lineItems.physicalItems.slice().sort((function(t,e){return(""+t.productId+t.variantId).localeCompare(""+e.productId+e.variantId)})).map((function(t){return{extendedSalePrice:t.extendedSalePrice,productId:t.productId,quantity:t.quantity,variantId:t.variantId,giftWrapping:t.giftWrapping}}))}}},t}(),Pr=function(t){function e(e,n){var r=t.call(this,"An update to your shopping cart has been detected and your available shipping costs have been updated.")||this;return r.name="CartChangedError",r.type="cart_changed",r.data={previous:e,updated:n},r}return(0,o.__extends)(e,t),e}(l),Ar=function(){function t(t){this._checkoutRequestSender=t}return t.prototype.validate=function(t,e){var n=this;if(!t)throw new kn(xn.MissingCheckout);return this._checkoutRequestSender.loadCheckout(t.id,e).then((function(e){var r=new Ir;if(!(t.outstandingBalance===e.body.outstandingBalance&&n._compareCoupons(t.coupons,e.body.coupons)&&n._compareGiftCertificates(t.giftCertificates,e.body.giftCertificates)&&r.isEqual(t.cart,e.body.cart)))throw new Pr(n._getComparableCheckout(t),n._getComparableCheckout(e.body))}))},t.prototype._compareCoupons=function(t,e){return(0,y.isEqual)((0,y.map)(t,"code"),(0,y.map)(e,"code"))},t.prototype._compareGiftCertificates=function(t,e){return(0,y.isEqual)((0,y.map)(t,"code"),(0,y.map)(e,"code"))},t.prototype._getComparableCheckout=function(t){var e=t.cart,n=t.coupons,r=t.giftCertificates,i=t.outstandingBalance;return{cart:{cartAmount:e.cartAmount,currency:e.currency,lineItems:e.lineItems},coupons:n,giftCertificates:r,outstandingBalance:i}},t}(),Or=function(){function t(t){this._configRequestSender=t}return t.prototype.loadConfig=function(t){var e=this;return Jn.y.create((function(n){n.next((0,a.PH)(Q.LoadConfigRequested)),e._configRequestSender.loadConfig(t).then((function(t){n.next((0,a.PH)(Q.LoadConfigSucceeded,t.body)),n.complete()})).catch((function(t){n.error((0,a.bR)(Q.LoadConfigFailed,t))}))}))},(0,o.__decorate)([Xn],t.prototype,"loadConfig",null),t}(),Tr=function(){function t(t){this._requestSender=t}return t.prototype.loadConfig=function(t){var e=void 0===t?{}:t,n=e.timeout,r=e.params;return this._requestSender.get("/api/storefront/checkout-settings",{timeout:n,headers:(0,o.__assign)({Accept:nr.JsonV1,"X-API-INTERNAL":rr},ir),params:r}).catch((function(t){if(t.status>=400&&t.status<500)throw new Cr(t);throw t}))},t}();var xr=n(64440);function Rr(t){return Rr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rr(t)}function kr(t){var e=t;return"object"===Rr(e)&&"object"===Rr(e.payload)&&"string"==typeof e.payload.token}const Mr=function(){function t(t,e,n){this._customerRequestSender=t,this._checkoutActionCreator=e,this._spamProtectionActionCreator=n}return t.prototype.createCustomer=function(t,e){var n=this;return function(r){var i=r.getState().config.getStoreConfigOrThrow().checkoutSettings.isStorefrontSpamProtectionEnabled,u=function(i){return(0,P.D)(n._customerRequestSender.createAccount((0,o.__assign)((0,o.__assign)({},t),{token:i}),e)).pipe((0,xr.w)((function(){return(0,sr.z)(n._checkoutActionCreator.loadCurrentCheckout(e)(r),(0,cr.of)((0,a.PH)(gt.CreateCustomerSucceeded)))})))};return(0,sr.z)((0,cr.of)((0,a.PH)(gt.CreateCustomerRequested)),i?(0,P.D)(n._spamProtectionActionCreator.execute()(r)).pipe((0,xr.w)((function(t){var e;return kr(t)?(0,sr.z)((0,cr.of)(t),u(null===(e=t.payload)||void 0===e?void 0:e.token)):(0,cr.of)(t)}))):u()).pipe((0,A.K)((function(t){return pr(gt.CreateCustomerFailed,t)})))}},t.prototype.createAddress=function(t,e){var n=this;return(0,sr.z)((0,cr.of)((0,a.PH)(gt.CreateCustomerAddressRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._customerRequestSender.createAddress(t,e)];case 1:return n=r.sent().body,[2,(0,a.PH)(gt.CreateCustomerAddressSucceeded,n)]}}))}))}))).pipe((0,A.K)((function(t){return pr(gt.CreateCustomerAddressFailed,t)})))},t.prototype.signInCustomer=function(t,e){var n=this;return function(r){return(0,sr.z)((0,cr.of)((0,a.PH)(gt.SignInCustomerRequested)),(0,P.D)(n._customerRequestSender.signInCustomer(t,e)).pipe((0,xr.w)((function(t){var i=t.body;return(0,sr.z)(n._checkoutActionCreator.loadCurrentCheckout(e)(r),(0,cr.of)((0,a.PH)(gt.SignInCustomerSucceeded,i.data)))})))).pipe((0,A.K)((function(t){return pr(gt.SignInCustomerFailed,t)})))}},t.prototype.signOutCustomer=function(t){var e=this;return function(n){return(0,sr.z)((0,cr.of)((0,a.PH)(gt.SignOutCustomerRequested)),(0,P.D)(e._customerRequestSender.signOutCustomer(t)).pipe((0,xr.w)((function(r){var i=r.body;return(0,sr.z)(e._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,cr.of)((0,a.PH)(gt.SignOutCustomerSucceeded,i.data)))})))).pipe((0,A.K)((function(t){return pr(gt.SignOutCustomerFailed,t)})))}},t}(),Nr=function(){function t(t){this._requestSender=t}return t.prototype.createAccount=function(t,e){var n=(void 0===e?{}:e).timeout;return this._requestSender.post("/api/storefront/customer",{timeout:n,headers:ir,body:t})},t.prototype.createAddress=function(t,e){var n=(void 0===e?{}:e).timeout;return this._requestSender.post("/api/storefront/customer-address",{timeout:n,headers:ir,body:t})},t.prototype.signInCustomer=function(t,e){var n=(void 0===e?{}:e).timeout;return this._requestSender.post("/internalapi/v1/checkout/customer",{timeout:n,headers:ir,body:t})},t.prototype.signOutCustomer=function(t){var e=(void 0===t?{}:t).timeout;return this._requestSender.delete("/internalapi/v1/checkout/customer",{timeout:e,headers:ir})},t}(),Dr=function(){function t(t){this._formFieldsRequestSender=t}return t.prototype.loadFormFields=function(t){var e=this;return(0,sr.z)((0,cr.of)((0,a.PH)(Lt.LoadFormFieldsRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(e,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return[4,this._formFieldsRequestSender.loadFields(t)];case 1:return e=n.sent().body,[2,(0,a.PH)(Lt.LoadFormFieldsSucceeded,e)]}}))}))}))).pipe((0,A.K)((function(t){return pr(Lt.LoadFormFieldsFailed,t)})))},(0,o.__decorate)([Xn],t.prototype,"loadFormFields",null),t}(),Lr=function(){function t(t){this._requestSender=t}return t.prototype.loadFields=function(t){var e=(void 0===t?{}:t).timeout;return this._requestSender.get("/api/storefront/form-fields",{timeout:e,headers:(0,o.__assign)({Accept:nr.JsonV1,"X-API-INTERNAL":rr},ir)})},t}();n(95040);const zr=function(t){var e=this,n=new Promise((function(t,n){e.cancel=n}));this.promise=Promise.race([t,n])},jr=function(t){function e(e){var n=t.call(this,e||"Unable to proceed because the required element is unexpectedly detached from the page.")||this;return n.name="UnexpectedDetachmentError",n.type="unexpected_detachment",n}return(0,o.__extends)(e,t),e}(l),Ur=function(){function t(t){this._mutationObserver=t}return t.prototype.ensurePresence=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:n=new zr(e),(r=this._mutationObserver.create((function(e){e.forEach((function(e){0!==Array.from(e.removedNodes).filter((function(e){return t.some((function(t){return e===t||e.contains(t)}))})).length&&n.cancel(new jr)}))}))).observe(document.body,{childList:!0,subtree:!0}),o.label=1;case 1:return o.trys.push([1,3,,4]),[4,n.promise];case 2:return i=o.sent(),r.disconnect(),[2,i];case 3:throw a=o.sent(),r.disconnect(),a;case 4:return[2]}}))}))},t}();var Fr=function(){function t(t){void 0===t&&(t=window),this._window=t}return t.prototype.create=function(t){return new this._window.MutationObserver(t)},t}(),qr=n(55343),Br=n(20239),Gr=n(92160),Vr=n(31407);n(57347);const Yr=function(t){function e(e){var n=t.call(this,e||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(e,t),e}(l);function Hr(t){if(!/^(https?:)?\/\//.test(t))throw new Yr("The provided URL must be absolute.");var e=document.createElement("a");e.href=t;var n=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+(n?":"+n:""),pathname:e.pathname,port:n,protocol:e.protocol,search:e.search}}function Wr(t,e){return t.type===e}const Kr=function(){function t(t,e){this._targetWindow=e,this._targetOrigin="*"===t?"*":Hr(t).origin}return t.prototype.post=function(t,e){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=e&&(0,qr.R)(window,"message").pipe((0,Br.h)((function(t){return t.origin===n._targetOrigin&&Wr(t.data,t.data.type)&&-1!==[e.successType,e.errorType].indexOf(t.data.type)})),(0,Gr.U)((function(t){if(e.errorType===t.data.type)throw t.data;return t.data})),(0,Vr.q)(1)).toPromise();return r.postMessage(t,this._targetOrigin),i}},t.prototype.setTarget=function(t){this._targetWindow=t},t}();n(19926);const Zr=function(t,e,n){return e&&n?$r(0,e,n):function(t){var e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return(0,o.__extends)(e,t),e}(t);return Object.getOwnPropertyNames(t.prototype).forEach((function(n){var r=Object.getOwnPropertyDescriptor(t.prototype,n);r&&"constructor"!==n&&Object.defineProperty(e.prototype,n,$r(t.prototype,n,r))})),e}(t)};function $r(t,e,n){if("function"!=typeof n.value)return n;var r=n.value;return{get:function(){var t=r.bind(this);return Object.defineProperty(this,e,(0,o.__assign)((0,o.__assign)({},n),{value:t})),t},set:function(t){r=t}}}const Jr=function(){function t(t){var e;this._sourceOrigins=[Hr(t).origin,(e=Hr(t),Hr(0===e.hostname.indexOf("www")?e.href:e.href.replace(e.hostname,"www."+e.hostname))).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 n=this._listeners[t];n||(this._listeners[t]=n=[]),-1===n.indexOf(e)&&n.push(e)},t.prototype.removeListener=function(t,e){var n=this._listeners[t];if(n){var r=n.indexOf(e);r>=0&&n.splice(r,1)}},t.prototype.trigger=function(t){var e=this._listeners[t.type];e&&e.forEach((function(e){return e(t)}))},t.prototype._handleMessage=function(t){-1!==this._sourceOrigins.indexOf(t.origin)&&Wr(t.data,t.data.type)&&this.trigger(t.data)},(0,o.__decorate)([Zr],t.prototype,"_handleMessage",null),t}(),Qr=function(t){function e(){var e=t.call(this,"You haven't complete our spam protection challenge. Please try again.")||this;return e.name="SpamProtectionChallengeNotCompletedError",e.type="spam_protection_challenge_not_completed",e}return(0,o.__extends)(e,t),e}(l),Xr=function(t){function e(){var e=t.call(this,"Please complete our human verification challenge and try again.")||this;return e.name="CardingProtectionChallengeNotCompletedError",e.type="carding_protection_challenge_not_completed",e}return(0,o.__extends)(e,t),e}(l),ti=function(t){function e(){var e=t.call(this,"We were not able to verify that you are not a robot. Please try again.")||this;return e.name="CardingProtectionFailedError",e.type="carding_protection_failed",e}return(0,o.__extends)(e,t),e}(l),ei=function(){function t(t){this._googleRecaptcha=t}return t.prototype.handle=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){return"string"==typeof t?[2,this.handleWithRecaptchaSitekey(t,e)]:[2,this.handleWithPaymentHumanVerificationRequestError(t)]}))}))},t.prototype.handleWithPaymentHumanVerificationRequestError=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:if(!this._isPaymentHumanVerificationRequest(t))throw t;return[4,this._initialize(t.body.additional_action_required.data.key)];case 1:return e.sent(),[2,this._performRecaptcha()]}}))}))},t.prototype.handleWithRecaptchaSitekey=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("recaptcha_v2"!==t)throw Error("Human verification method is not supported.");if(!e)throw Error("Recaptcha site key is missing.");return[4,this._initialize(e)];case 1:return n.sent(),[2,this._performRecaptcha()]}}))}))},t.prototype._performRecaptcha=function(){var t=this;return this._googleRecaptcha.execute().pipe((0,Vr.q)(1)).pipe((0,xr.w)((function(e){var n=e.error,r=e.token;return(0,o.__awaiter)(t,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){if(n instanceof Qr)throw new Xr;if(n||!r)throw new ti;return[2,{type:"recaptcha_v2_verification",data:{human_verification_token:r}}]}))}))}))).toPromise()},t.prototype._initialize=function(t){var e="cardingProtectionContainer",n=document.getElementById(e);return n&&n.parentNode&&n.parentNode.removeChild(n),(n=document.createElement("div")).setAttribute("id",e),document.body.appendChild(n),this._googleRecaptcha.load(e,t)},t.prototype._isPaymentHumanVerificationRequest=function(t){var e=t.body||{},n=e.additional_action_required;return"additional_action_required"===e.status&&n&&"recaptcha_v2_verification"===n.type},t}();var ni,ri=n(99357),ii=n(62156),oi=n(5026);!function(t){t[t.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",t[t.CustomerNotInitialized=1]="CustomerNotInitialized",t[t.PaymentNotInitialized=2]="PaymentNotInitialized",t[t.ShippingNotInitialized=3]="ShippingNotInitialized",t[t.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(ni||(ni={}));const ai=function(t){function e(e){var n=t.call(this,function(t){switch(t){case ni.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case ni.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case ni.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case ni.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(e))||this;return n.subtype=e,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(e,t),e}(l),ui=function(t){function e(){var e=t.call(this,"We were not able to complete your spam protection verification. Please try again.")||this;return e.name="SpamProtectionFailedError",e.type="spam_protection_failed",e}return(0,o.__extends)(e,t),e}(l),si=function(t){function e(){var e=t.call(this,"Spam protection is not loaded. Please try again.")||this;return e.name="SpamProtectionNotLoadedError",e.type="spam_protection_failed",e}return(0,o.__extends)(e,t),e}(l),ci=function(){function t(t,e){var n=this;this.googleRecaptchaScriptLoader=t,this.mutationObserverFactory=e,this._memoized=(0,Rn.HP)((function(t,e,r){var i=new ri.xQ;if(!r)throw new Error;return n._widgetId=t.render(r.id,{sitekey:e,size:"invisible",callback:function(){i.next({token:t.getResponse(n._widgetId)}),t.reset(n._widgetId)},"error-callback":function(){i.next({error:new ui})}}),i}),{isEqual:function(t,e){return t===e}})}return t.prototype.load=function(t,e){var n=this;return this.googleRecaptchaScriptLoader.load().then((function(r){r&&(n._event$=n._memoized(r,e,document.getElementById(t)),n._recaptcha=r)}))},t.prototype.execute=function(){var t=this;return(0,dr.P)((function(){var e=t._event$,n=t._recaptcha;if(!e||!n)throw new ai(ni.SpamProtectionNotInitialized);return(0,dr.P)((function(){var t=document.querySelector('iframe[src*="bframe"]');return t?(0,cr.of)(t):(0,fr._)(new si)})).pipe((0,ii.a)((function(t){return t.pipe((0,oi.g)(250),(0,xr.w)((function(t,e){return e<28?(0,cr.of)(t):(0,fr._)(t)})))})),(0,xr.w)((function(r){return t._watchRecaptchaChallengeWindow(e,r),n.execute(t._widgetId),e})),(0,A.K)((function(t){return(0,cr.of)({error:t})})))}))},t.prototype._watchRecaptchaChallengeWindow=function(t,e){var n=e.parentElement;if(!n)throw new si;var r=n.parentElement;if(!r)throw new si;this.mutationObserverFactory.create((function(){"hidden"===r.style.visibility&&t.next({error:new Qr})})).observe(r,{attributes:!0,attributeFilter:["style"]})},t}();n(83823);const di=function(){function t(t,e){void 0===e&&(e=window),this._scriptLoader=t,this._window=e}return t.prototype.load=function(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise},t.prototype._loadScript=function(){var t=this,e="initRecaptcha",n=["onload="+e,"render=explicit"].join("&");return new Promise((function(r,i){t._window[e]=function(){return r(t._window.grecaptcha)},t._scriptLoader.loadScript("//www.google.com/recaptcha/api.js?"+n).catch((function(e){t._loadPromise=void 0,i(e)}))}))},t}();function li(t){return new ci(new di(t),new Fr)}const fi=function(t){function e(e){var n=t.call(this,e||"Unable to proceed due to invalid configuration provided for the hosted payment form.")||this;return n.name="InvalidHostedFormConfigError",n.type="invalid_hosted_form_config",n}return(0,o.__extends)(e,t),e}(l),pi=function(t){function e(e){var n=t.call(this,e||"Unable to proceed due to an unknown error with the hosted payment form.")||this;return n.name="InvalidHostedFormError",n.type="invalid_hosted_form",n}return(0,o.__extends)(e,t),e}(l),hi=function(t){function e(e){var n=t.call(this,(0,o.__spreadArrays)(["Unable to proceed due to invalid user input values"],(0,y.flatMap)((0,y.values)(e),(function(t){return(0,y.map)(t,(function(t){return t.message}))}))).join(". "))||this;return n.errors=e,n.name="InvalidHostedFormValueError",n.type="invalid_hosted_form_value",n}return(0,o.__extends)(e,t),e}(l);var yi,mi;!function(t){t.AttachRequested="HOSTED_FIELD:ATTACH_REQUESTED",t.SubmitRequested="HOSTED_FIELD:SUBMITTED_REQUESTED",t.ValidateRequested="HOSTED_FIELD:VALIDATE_REQUESTED"}(yi||(yi={})),function(t){t.AttachSucceeded="HOSTED_INPUT:ATTACH_SUCCEEDED",t.AttachFailed="HOSTED_INPUT:ATTACH_FAILED",t.BinChanged="HOSTED_INPUT:BIN_CHANGED",t.Blurred="HOSTED_INPUT:BLURRED",t.Changed="HOSTED_INPUT:CHANGED",t.CardTypeChanged="HOSTED_INPUT:CARD_TYPE_CHANGED",t.Entered="HOSTED_INPUT:ENTERED",t.Focused="HOSTED_INPUT:FOCUSED",t.SubmitSucceeded="HOSTED_INPUT:SUBMIT_SUCCEEDED",t.SubmitFailed="HOSTED_INPUT:SUBMIT_FAILED",t.Validated="HOSTED_INPUT:VALIDATED"}(mi||(mi={}));const vi=function(){function t(t,e,n,r,i,o,a,u,s){this._type=t,this._containerId=e,this._placeholder=n,this._accessibilityLabel=r,this._styles=i,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=u,this._cardInstrument=s,this._iframe=document.createElement("iframe"),this._iframe.src="/checkout/payment/hosted-field?version=1.401.0",this._iframe.style.border="none",this._iframe.style.height="100%",this._iframe.style.overflow="hidden",this._iframe.style.width="100%"}return t.prototype.getType=function(){return this._type},t.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e,n=this;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:if(!(t=document.getElementById(this._containerId)))throw new fi("Unable to proceed because the provided container ID is not valid.");return t.appendChild(this._iframe),this._eventListener.listen(),e=(0,qr.R)(this._iframe,"load").pipe((0,xr.w)((function(t){var e=t.target;return(0,o.__awaiter)(n,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(t=e&&e.contentWindow))throw new Error("The content window of the iframe cannot be accessed.");return this._eventPoster.setTarget(t),[4,this._eventPoster.post({type:yi.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:mi.AttachSucceeded,errorType:mi.AttachFailed})];case 1:return n.sent(),[2]}}))}))})),(0,Vr.q)(1)).toPromise(),[4,this._detachmentObserver.ensurePresence([this._iframe],e)];case 1:return r.sent(),[2]}}))}))},t.prototype.detach=function(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())},t.prototype.submitForm=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),n=this._eventPoster.post({type:yi.SubmitRequested,payload:{fields:t,data:e}},{successType:mi.SubmitSucceeded,errorType:mi.SubmitFailed}),[4,this._detachmentObserver.ensurePresence([this._iframe],n)];case 1:return[2,i.sent()];case 2:if(r=i.sent(),this._isSubmitErrorEvent(r)){if("hosted_form_error"===r.payload.error.code)throw new pi(r.payload.error.message);if(r.payload.response)throw v(r.payload.response);throw new Error(r.payload.error.message)}throw r;case 3:return[2]}}))}))},t.prototype.validateForm=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t=this._eventPoster.post({type:yi.ValidateRequested},{successType:mi.Validated}),[4,this._detachmentObserver.ensurePresence([this._iframe],t)];case 1:if(!(e=n.sent().payload).isValid)throw new hi(e.errors);return[2]}}))}))},t.prototype._getFontUrls=function(){var t=this,e="fonts.googleapis.com",n=document.querySelectorAll("link[href*='"+e+"'][rel='stylesheet']");return Array.prototype.slice.call(n).filter((function(t){return Hr(t.href).hostname===e})).filter((function(e){return(0,y.values)(t._styles).map((function(t){return t&&t.fontFamily})).filter((function(t){return"string"==typeof t})).some((function(t){return t.split(/,\s/).some((function(t){return-1!==e.href.indexOf(t.replace(" ","+"))}))}))})).map((function(t){return t.href}))},t.prototype._isSubmitErrorEvent=function(t){return t.type===mi.SubmitFailed},t}(),gi=function(){function t(t,e,n,r,i){var a=this;this._fields=t,this._eventListener=e,this._payloadTransformer=n,this._eventCallbacks=r,this._paymentHumanVerificationHandler=i,this._handleEnter=function(t){var e=t.payload;return(0,o.__awaiter)(a,void 0,void 0,(function(){var t,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.validate()];case 1:return r.sent(),[3,3];case 2:if("InvalidHostedFormValueError"!==(t=r.sent()).name)throw t;return[3,3];case 3:return(void 0===(n=this._eventCallbacks.onEnter)?y.noop:n)(e),[2]}}))}))};var u=this._eventCallbacks,s=u.onBlur,c=void 0===s?y.noop:s,d=u.onCardTypeChange,l=void 0===d?y.noop:d,f=u.onFocus,p=void 0===f?y.noop:f,h=u.onValidate,m=void 0===h?y.noop:h;this._eventListener.addListener(mi.Blurred,(function(t){var e=t.payload;return c(e)})),this._eventListener.addListener(mi.CardTypeChanged,(function(t){var e=t.payload;return l(e)})),this._eventListener.addListener(mi.Focused,(function(t){var e=t.payload;return p(e)})),this._eventListener.addListener(mi.Validated,(function(t){var e=t.payload;return m(e)})),this._eventListener.addListener(mi.Entered,this._handleEnter),this._eventListener.addListener(mi.CardTypeChanged,(function(t){var e=t.payload;return a._cardType=e.cardType})),this._eventListener.addListener(mi.BinChanged,(function(t){var e=t.payload;return a._bin=e.bin}))}return t.prototype.getBin=function(){return this._bin},t.prototype.getCardType=function(){return this._cardType},t.prototype.attach=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return this._eventListener.listen(),t=this._getFirstField(),e=(0,y.without)(this._fields,t),[4,t.attach()];case 1:return n.sent(),[4,Promise.all(e.map((function(t){return t.attach()})))];case 2:return n.sent(),[2]}}))}))},t.prototype.detach=function(){this._eventListener.stopListen(),this._fields.forEach((function(t){t.detach()}))},t.prototype.submit=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._getFirstField().submitForm(this._fields.map((function(t){return t.getType()})),this._payloadTransformer.transform(t,e))];case 1:case 4:return[2,i.sent()];case 2:return n=i.sent(),[4,this._paymentHumanVerificationHandler.handle(n)];case 3:return r=i.sent(),[4,this._getFirstField().submitForm(this._fields.map((function(t){return t.getType()})),this._payloadTransformer.transform(t,r))];case 5:return[2]}}))}))},t.prototype.validate=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){return[2,this._getFirstField().validateForm()]}))}))},t.prototype._getFirstField=function(){var t=this._fields[0];if(!t)throw new fi("Unable to proceed because the payment form has no field defined.");return t},t}();function _i(t){return Boolean(t.instrumentId)}const bi=function(){function t(t){this._store=t}return t.prototype.transform=function(t,e){var n=this._store.getState(),r=n.checkout.getCheckout(),i=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),u=n.order.getOrderMeta(),s=(0,y.omit)(t.paymentData,"ccExpiry","ccName","ccNumber","ccCvv"),c=n.paymentMethods.getPaymentMethod(t.methodId,t.gatewayId),d=n.paymentMethods.getPaymentMethodsMeta(),l=o&&s&&_i(s)?n.payment.getPaymentToken()+", "+o.vaultAccessToken:n.payment.getPaymentToken();if(!l)throw new kn(xn.MissingPaymentToken);return{additionalAction:e,authToken:l,checkout:r,config:i,order:a,orderMeta:u,payment:s,paymentMethod:c,paymentMethodMeta:d}},t}(),Si=function(){function t(t){this._store=t}return t.prototype.create=function(t,e){var n=this,r=Object.keys(e.fields).reduce((function(r,i){var a=e.fields[i];return a?(0,o.__spreadArrays)(r,[new vi(i,a.containerId,a.placeholder||"",a.accessibilityLabel||"",e.styles||{},new Kr(t),new Jr(t),new Ur(new Fr),"instrumentId"in a?n._getCardInstrument(a.instrumentId):void 0)]):r}),[]);return new gi(r,new Jr(t),new bi(this._store),(0,y.pick)(e,"onBlur","onEnter","onFocus","onCardTypeChange","onValidate"),new ei(li((0,ar.VD)())))},t.prototype._getCardInstrument=function(t){var e=(0,this._store.getState().instruments.getCardInstrument)(t);if(!e)throw new kn(xn.MissingPaymentInstrument);return e},t}(),wi=function(t){function e(){var e=t.call(this,"You haven't complete our spam check. Please try again.")||this;return e.name="SpamProtectionNotCompletedError",e.type="spam_protection_not_completed",e}return(0,o.__extends)(e,t),e}(l),Ci=function(){function t(t,e){this._orderRequestSender=t,this._checkoutValidator=e}return t.prototype.loadOrder=function(t,e){var n=this;return new Jn.y((function(r){r.next((0,a.PH)(ut.LoadOrderRequested)),n._orderRequestSender.loadOrder(t,e).then((function(t){r.next((0,a.PH)(ut.LoadOrderSucceeded,t.body)),r.complete()})).catch((function(t){r.error((0,a.bR)(ut.LoadOrderFailed,t))}))}))},t.prototype.loadOrderPayments=function(t,e){var n=this;return new Jn.y((function(r){r.next((0,a.PH)(ut.LoadOrderPaymentsRequested)),n._orderRequestSender.loadOrder(t,e).then((function(t){r.next((0,a.PH)(ut.LoadOrderPaymentsSucceeded,t.body)),r.complete()})).catch((function(t){r.error((0,a.bR)(ut.LoadOrderPaymentsFailed,t))}))}))},t.prototype.loadCurrentOrder=function(t){var e=this;return function(n){return(0,dr.P)((function(){var r=e._getCurrentOrderId(n.getState());if(!r)throw new kn(xn.MissingOrderId);return e.loadOrder(r,t)}))}},t.prototype.submitOrder=function(t,e){var n=this;return function(r){return(0,sr.z)((0,cr.of)((0,a.PH)(ut.SubmitOrderRequested)),(0,dr.P)((function(){var i=r.getState(),u=i.config.getExternalSource(),s=i.config.getVariantIdentificationToken(),c=i.checkout.getCheckout();if(!c)throw new kn(xn.MissingCheckout);if(c.shouldExecuteSpamCheck)throw new wi;return(0,P.D)(n._checkoutValidator.validate(c,e).then((function(){return n._orderRequestSender.submitOrder(n._mapToOrderRequestBody(null!=t?t:{},c.id,c.customerMessage,u),(0,o.__assign)((0,o.__assign)({},e),{headers:{checkoutVariant:s}}))}))).pipe((0,xr.w)((function(t){return(0,sr.z)(n.loadOrder(t.body.data.order.orderId,e),(0,cr.of)((0,a.PH)(ut.SubmitOrderSucceeded,t.body.data,(0,o.__assign)((0,o.__assign)({},t.body.meta),{token:t.headers.token}))))})))})).pipe((0,A.K)((function(t){return pr(ut.SubmitOrderFailed,t)}))))}},t.prototype.finalizeOrder=function(t,e){var n=this;return(0,sr.z)((0,cr.of)((0,a.PH)(ut.FinalizeOrderRequested)),(0,P.D)(this._orderRequestSender.finalizeOrder(t,e)).pipe((0,xr.w)((function(r){return(0,sr.z)(n.loadOrder(t,e),(0,cr.of)((0,a.PH)(ut.FinalizeOrderSucceeded,r.body.data)))})))).pipe((0,A.K)((function(t){return pr(ut.FinalizeOrderFailed,t)})))},t.prototype._getCurrentOrderId=function(t){var e=t.order.getOrder(),n=t.checkout.getCheckout();return e&&e.orderId||n&&n.orderId},t.prototype._mapToOrderRequestBody=function(t,e,n,r){var i=t.payment,a=(0,o.__rest)(t,["payment"]);return i?(0,o.__assign)((0,o.__assign)({},a),{cartId:e,customerMessage:n,externalSource:r,payment:{paymentData:i.paymentData,name:i.methodId,gateway:i.gatewayId}}):(0,o.__assign)((0,o.__assign)({},a),{cartId:e,customerMessage:n,externalSource:r})},t}(),Ei=function(t){function e(e){var n=t.call(this,e||"Your checkout could not be processed because some details have changed. Please review your order and try again.")||this;return n.name="CartConsistencyError",n.type="cart_consistency",n}return(0,o.__extends)(e,t),e}(l),Ii=function(t){function e(e){var n=t.call(this,e||"The tax provider is unavailable.")||this;return n.name="OrderTaxProviderUnavailableError",n.type="tax_provider_unavailable",n}return(0,o.__extends)(e,t),e}(l),Pi=function(){function t(t){this._requestSender=t}return t.prototype.loadOrder=function(t,e){var n=(void 0===e?{}:e).timeout,r="/api/storefront/orders/"+t,i=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.get(r,{params:{include:br(["payments","lineItems.physicalItems.socialMedia","lineItems.physicalItems.options","lineItems.physicalItems.categories","lineItems.digitalItems.socialMedia","lineItems.digitalItems.options","lineItems.digitalItems.categories"])},headers:i,timeout:n})},t.prototype.submitOrder=function(t,e){var n=void 0===e?{}:e,r=n.headers,i=n.timeout;return this._requestSender.post("/internalapi/v1/checkout/order",{body:t,headers:(0,y.omitBy)((0,o.__assign)({"X-Checkout-Variant":r&&r.checkoutVariant},ir),y.isNil),timeout:i}).catch((function(t){if("tax_provider_unavailable"===t.body.type)throw new Ii;if("cart_has_changed"===t.body.type)throw new Ei;throw t}))},t.prototype.finalizeOrder=function(t,e){var n=(void 0===e?{}:e).timeout,r="/internalapi/v1/checkout/order/"+t;return this._requestSender.post(r,{timeout:n,headers:ir})},t}(),Ai=function(){function t(t,e,n,r){var i=this;this._paymentRequestSender=t,this._orderActionCreator=e,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=r,this.initializeOffsitePayment=function(t){var e=t.methodId,n=t.gatewayId,r=t.instrumentId,o=t.target,u=t.promise,s=t.shouldSaveInstrument,c=t.shouldSetAsDefaultInstrument;return function(t){var d;r?d={formattedPayload:{bigpay_token:r}}:s&&(d={formattedPayload:{vault_payment_instrument:s,set_as_default_stored_instrument:c||null}});var l=i._paymentRequestTransformer.transform({gatewayId:n,methodId:e,paymentData:d},t.getState());return(0,sr.z)((0,cr.of)((0,a.PH)(oe.InitializeOffsitePaymentRequested)),Promise.race([i._paymentRequestSender.initializeOffsitePayment(l,o),u].filter(Boolean)).then((function(){return(0,a.PH)(oe.InitializeOffsitePaymentSucceeded)}))).pipe((0,A.K)((function(t){return pr(oe.InitializeOffsitePaymentFailed,t)})))}}}return t.prototype.submitPayment=function(t){var e=this;return function(n){return(0,sr.z)((0,cr.of)((0,a.PH)(oe.SubmitPaymentRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(e,void 0,void 0,(function(){var e,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,5]),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(t,n.getState()))];case 1:case 4:return[2,i.sent()];case 2:return e=i.sent(),[4,this._paymentHumanVerificationHandler.handle(e)];case 3:return r=i.sent(),[4,this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform((0,o.__assign)((0,o.__assign)({},t),{additionalAction:r}),n.getState()))];case 5:return[2]}}))}))})).pipe((0,xr.w)((function(t){var r=t.body;return(0,sr.z)(e._orderActionCreator.loadCurrentOrder()(n),(0,cr.of)((0,a.PH)(oe.SubmitPaymentSucceeded,r)))})))).pipe((0,A.K)((function(t){return pr(oe.SubmitPaymentFailed,t)})))}},t}(),Oi=function(){function t(t){this._client=t}return t.prototype.submitPayment=function(t){var e=this;return new Promise((function(n,r){e._client.submitPayment(t,(function(t,i){t?r(e._transformResponse(t)):n(e._transformResponse(i))}))}))},t.prototype.initializeOffsitePayment=function(t,e){var n=this;return new Promise((function(){n._client.initializeOffsitePayment(t,null,e)}))},t.prototype._transformResponse=function(t){return{headers:t.headers,body:t.data,status:t.status,statusText:t.statusText}},t}();var Ti=n(36438);function xi(t,e){var n;return function(t){return void 0!==t.id}(t)?n=t.id:e&&e.length&&(n=e[0].id),{id:n,firstName:t.firstName,lastName:t.lastName,company:t.company,addressLine1:t.address1,addressLine2:t.address2,city:t.city,province:t.stateOrProvince,provinceCode:t.stateOrProvinceCode,postCode:t.postalCode,country:t.country,countryCode:t.countryCode,phone:t.phone,customFields:t.customFields}}const Ri=function(){function t(t){this._decimalPlaces=t}return t.prototype.toInteger=function(t){return Math.round(t*Math.pow(10,this._decimalPlaces))},t}();var ki,Mi=["per_item_discount","percentage_discount","per_total_discount","shipping_discount","free_shipping"];function Ni(t){return{code:t.code,discount:t.displayName,discountType:Mi.indexOf(t.couponType)}}function Di(t){return{code:t.code,discountedAmount:t.used,remainingBalance:t.remaining,giftCertificate:{balance:t.balance,code:t.code,purchaseDate:t.purchaseDate}}}function Li(t,e,n){return void 0===n&&(n="id"),Object.keys(t).reduce((function(r,i){return(0,o.__spreadArrays)(r,t[i].map((function(t){return"giftCertificates"===i?function(t,e){var n=new Ri(e);return{id:t.id,imageUrl:"",name:t.name,amount:t.amount,amountAfterDiscount:t.amount,discount:0,integerAmount:n.toInteger(t.amount),integerAmountAfterDiscount:n.toInteger(t.amount),integerUnitPrice:n.toInteger(t.amount),integerUnitPriceAfterDiscount:n.toInteger(t.amount),integerDiscount:0,quantity:1,sender:t.sender,recipient:t.recipient,type:"ItemGiftCertificateEntity",attributes:[],variantId:null}}(t,e):function(t,e,n,r){void 0===r&&(r="id");var i=new Ri(n);return{id:t[r],imageUrl:t.imageUrl,amount:t.extendedListPrice,amountAfterDiscount:t.extendedSalePrice,discount:t.discountAmount,integerAmount:i.toInteger(t.extendedListPrice),integerAmountAfterDiscount:i.toInteger(t.extendedSalePrice),integerDiscount:i.toInteger(t.discountAmount),integerUnitPrice:i.toInteger(t.listPrice),integerUnitPriceAfterDiscount:i.toInteger(t.salePrice),downloadsPageUrl:t.downloadPageUrl,name:t.name,quantity:t.quantity,brand:t.brand,sku:t.sku,categoryNames:t.categoryNames,variantId:t.variantId,productId:t.productId,attributes:(t.options||[]).map((function(t){return{name:t.name,value:t.value}})),addedByPromotion:t.addedByPromotion,type:e}}(t,function(t){switch(t){case"physicalItems":return"ItemPhysicalEntity";case"digitalItems":return"ItemDigitalEntity";case"giftCertificates":return"ItemGiftCertificateEntity";default:return""}}(i),e,n)})))}),[])}function zi(t){var e,n,r=t.cart.currency.decimalPlaces,i=new Ri(r);return{id:t.cart.id,items:Li(t.cart.lineItems,r),currency:t.cart.currency.code,coupon:{discountedAmount:(0,y.reduce)(t.cart.coupons,(function(t,e){return t+e.discountedAmount}),0),coupons:t.cart.coupons.map(Ni)},discount:{amount:t.cart.discountAmount,integerAmount:i.toInteger(t.cart.discountAmount)},discountNotifications:(e=t.promotions,n=[],(e||[]).forEach((function(t){(t.banners||[]).forEach((function(t){n.push({placeholders:[],discountType:null,message:"",messageHtml:t.text})}))})),n),giftCertificate:{totalDiscountedAmount:(0,y.reduce)(t.giftCertificates,(function(t,e){return t+e.used}),0),appliedGiftCertificates:(0,y.keyBy)(t.giftCertificates.map(Di),"code")},shipping:{amount:t.shippingCostTotal,integerAmount:i.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(t.shippingCostBeforeDiscount),required:(0,y.some)(t.cart.lineItems.physicalItems,(function(t){return t.isShippingRequired}))},subtotal:{amount:t.subtotal,integerAmount:i.toInteger(t.subtotal)},storeCredit:{amount:t.customer?t.customer.storeCredit:0},taxSubtotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:i.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.grandTotal,integerAmount:i.toInteger(t.grandTotal)}}}!function(t){t.APPLEPAY="applepay",t.AMAZON_PAY_V2="amazonpay",t.BRAINTREE_PAYPAL="braintreepaypal",t.BRAINTREE_VENMO="braintreevenmo",t.BRAINTREE_PAYPAL_CREDIT="braintreepaypalcredit",t.GOOGLEPAY_ADYENV2="googlepayadyenv2",t.GOOGLEPAY_ADYENV3="googlepayadyenv3",t.GOOGLEPAY_AUTHORIZENET="googlepayauthorizenet",t.GOOGLEPAY_BNZ="googlepaybnz",t.GOOGLEPAY_BRAINTREE="googlepaybraintree",t.GOOGLEPAY_CHECKOUTCOM="googlepaycheckoutcom",t.GOOGLEPAY_CYBERSOURCEV2="googlepaycybersourcev2",t.GOOGLEPAY_ORBITAL="googlepayorbital",t.GOOGLEPAY_STRIPE="googlepaystripe",t.GOOGLEPAY_STRIPEUPE="googlepaystripeupe",t.GOOGLEPAY_WORLDPAYACCESS="googlepayworldpayaccess",t.MASTERPASS="masterpass",t.PAYPALEXPRESS="paypalexpress"}(ki||(ki={}));const ji=ki;function Ui(t,e){var n=t.firstName||e.firstName||"",r=t.lastName||e.lastName||"";return{addresses:(t.addresses||[]).map((function(t){return xi(t)})),customerId:t.id,isGuest:t.isGuest,storeCredit:t.storeCredit,email:t.email||e.email||"",firstName:n,lastName:r,name:t.fullName||[n,r].join(" "),customerGroupName:t.customerGroup&&t.customerGroup.name}}const Fi=function(){function t(){}return t.prototype.format=function(t){var e=t.split(new RegExp("\\s*/\\s*")),n=e[0],r=void 0===n?"":n,i=e[1],o=void 0===i?"":i,a=r.slice(0,2),u=4===o.length?o.slice(-2):o?o.slice(0,2):r.slice(2);return t.length<2?r:t.length>3&&!u?a:a+" / "+u},t.prototype.toObject=function(t){var e=t.split(new RegExp("\\s*/\\s*")),n=e[0],r=void 0===n?"":n,i=e[1],o=void 0===i?"":i;return/^\d+$/.test(r)&&/^\d+$/.test(o)?{month:1===r.length?"0"+r:r.slice(0,2),year:2===o.length?"20"+o:o.slice(0,4)}:{month:"",year:""}},t}();var qi=n(67061);const Bi=function(){function t(){}return t.prototype.format=function(t){var e=(0,qi.number)(t).card;if(!e)return t;var n=(0,y.max)((0,qi.creditCardType)(t).map((function(t){return(0,y.max)(t.lengths)}))),r=this.unformat(t).slice(0,n);return e.gaps.filter((function(t){return r.length>t})).reduce((function(t,e,n){return[t.slice(0,e+n),t.slice(e+n)].join(" ")}),r)},t.prototype.unformat=function(t){return(0,qi.number)(t).card?t.replace(new RegExp(" ","g"),""):t},t}();function Gi(t,e){void 0===e&&(e={});var n,r,i=t.currency.decimalPlaces,o=new Ri(i);return{id:t.orderId,items:Li(t.lineItems,t.currency.decimalPlaces,"productId"),orderId:t.orderId,currency:t.currency.code,customerCanBeCreated:t.customerCanBeCreated,payment:Yi(t.payments,e.payment),subtotal:{amount:t.baseAmount,integerAmount:o.toInteger(t.baseAmount)},coupon:{discountedAmount:(0,y.reduce)(t.coupons,(function(t,e){return t+e.discountedAmount}),0),coupons:t.coupons.map(Ni)},discount:{amount:t.discountAmount,integerAmount:o.toInteger(t.discountAmount)},token:e.orderToken,callbackUrl:e.callbackUrl,discountNotifications:[],giftCertificate:(n=t.payments,r=(0,y.filter)(n,{providerId:"giftcertificate"}),{totalDiscountedAmount:(0,y.reduce)(r,(function(t,e){return e.amount+t}),0),appliedGiftCertificates:(0,y.keyBy)(r.map((function(t){return{code:t.detail.code,discountedAmount:t.amount,remainingBalance:t.detail.remaining,giftCertificate:{balance:t.amount+t.detail.remaining,code:t.detail.code,purchaseDate:""}}})),"code")}),socialData:Wi(t),status:t.status,hasDigitalItems:t.hasDigitalItems,isDownloadable:t.isDownloadable,isComplete:t.isComplete,shipping:{amount:t.shippingCostTotal,integerAmount:o.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:o.toInteger(t.shippingCostBeforeDiscount)},storeCredit:{amount:Vi(t.payments)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:o.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:o.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.orderAmount,integerAmount:t.orderAmountAsInteger}}}function Vi(t){var e=(0,y.find)(t,{providerId:"storecredit"});return e?e.amount:0}function Yi(t,e){void 0===e&&(e={});var n,r=(0,y.find)(t,Hi);return r?{id:r.providerId,status:(n=r.detail.step,"PAYMENT_STATUS_"+n),helpText:r.detail.instructions,returnUrl:e.returnUrl}:{}}function Hi(t){return"giftcertificate"!==t.providerId&&"storecredit"!==t.providerId}function Wi(t){var e={};return(0,o.__spreadArrays)(t.lineItems.physicalItems,t.lineItems.digitalItems).forEach((function(t){var n;e[t.id]=(n=t,["fb","tw","gp"].reduce((function(t,e){var r=n.socialMedia&&(0,y.find)(n.socialMedia,(function(t){return t.code===e}));return r?(t[e]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},t):t}),{}))})),e}function Ki(t,e){return{description:t.description,module:t.type,price:t.cost,id:t.id,selected:e,isRecommended:t.isRecommended,imageUrl:t.imageUrl,transitTime:t.transitTime}}n(88720);const Zi=function(){function t(){this._cardExpiryFormatter=new Fi,this._cardNumberFormatter=new Bi}return t.prototype.transform=function(t,e){var n,r=e.billingAddress.getBillingAddress(),i=e.checkout.getCheckout(),a=e.customer.getCustomer(),u=e.order.getOrder(),s=e.paymentMethods.getPaymentMethod(t.methodId,t.gatewayId),c=this._mapShippingAddress(e,s),d=e.consignments.getConsignments(),l=e.consignments.getShippingOption(),f=e.config.getStoreConfig(),p=e.config.getContextConfig(),h=e.instruments.getInstrumentsMeta(),m=e.paymentMethods.getPaymentMethodsMeta(),v=e.order.getOrderMeta(),g=a&&r&&Ui(a,r),_=h&&t.paymentData&&(_i(t.paymentData)||(n=t.paymentData.formattedPayload)&&("string"==typeof n.bigpay_token||Boolean(n.bigpay_token&&n.bigpay_token.token)))?e.payment.getPaymentToken()+", "+h.vaultAccessToken:e.payment.getPaymentToken();if(!_)throw new kn(xn.MissingPaymentToken);return{additionalAction:t.additionalAction,authToken:_,customer:g,billingAddress:r&&xi(r),shippingAddress:c&&xi(c,d),shippingOption:l&&Ki(l,!0),cart:i&&zi(i),order:u&&Gi(u,v),orderMeta:v,payment:t.paymentData,paymentMethod:s&&this._transformPaymentMethod(s),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},m),{geoCountryCode:p&&p.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:(0,y.pick)(f&&f.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},t.prototype.transformWithHostedFormData=function(t,e,n){var r=e.additionalAction,i=e.authToken,a=e.checkout,u=e.config,s=e.order,c=e.orderMeta,d=e.payment,l=void 0===d?{}:d,f=e.paymentMethod,p=e.paymentMethodMeta,h=a&&a.consignments[0],m=h&&h.shippingAddress,v=h&&h.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:f&&this._transformPaymentMethod(f),customer:s&&s.billingAddress&&a&&Ui(a.customer,s.billingAddress),billingAddress:s&&s.billingAddress&&xi(s.billingAddress),shippingAddress:m&&a&&xi(m,a.consignments),shippingOption:v&&Ki(v,!0),cart:a&&zi(a),order:s&&Gi(s,c),orderMeta:c,payment:this._transformHostedInputValues(t,l,n),quoteMeta:{request:(0,o.__assign)((0,o.__assign)({},p),{geoCountryCode:u&&u.context.geoCountryCode})},source:"bigcommerce-checkout-js-sdk",store:u&&(0,y.pick)(u.storeConfig.storeProfile,["storeHash","storeId","storeLanguage","storeName"])}},t.prototype._transformPaymentMethod=function(t){return"multi-option"!==t.method||t.gateway?t.initializationData&&t.initializationData.gateway?(0,o.__assign)((0,o.__assign)({},t),{id:t.initializationData.gateway}):t.id===ji.BRAINTREE_VENMO?(0,o.__assign)((0,o.__assign)({},t),{id:ji.BRAINTREE_PAYPAL}):t:(0,o.__assign)((0,o.__assign)({},t),{gateway:t.id})},t.prototype._transformHostedInputValues=function(t,e,n){return"instrumentId"in e?(0,o.__assign)((0,o.__assign)({},e),{ccCvv:t.cardCodeVerification,ccNumber:t.cardNumberVerification&&this._cardNumberFormatter.unformat(t.cardNumberVerification),hostedFormNonce:n}):(0,o.__assign)((0,o.__assign)({},e),{ccCvv:t.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(t.cardExpiry||""),ccName:t.cardName||"",ccNumber:this._cardNumberFormatter.unformat(t.cardNumber||""),hostedFormNonce:n})},t.prototype._mapShippingAddress=function(t,e){var n,r,i,o;if(e){var a=null===(r=null===(n=e.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,u=null===(o=null===(i=e.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,s=t.consignments.getConsignments(),c=null==s?void 0:s.every((function(t){return t.selectedPickupOption}));if(a&&c&&"none"===u)return}return t.shippingAddress.getShippingAddress()},t}();var $i;function Ji(t){return Ji="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ji(t)}!function(t){t.AvailableShippingOptions="consignments.availableShippingOptions",t.PhysicalItemsCategoryNames="cart.lineItems.physicalItems.categoryNames",t.DigitalItemsCategoryNames="cart.lineItems.digitalItems.categoryNames"}($i||($i={}));const Qi=function(){function t(t,e){this._consignmentRequestSender=t,this._checkoutRequestSender=e}return t.prototype.unassignItemsByAddress=function(t,e){var n=this;return function(r){var i=r.getState();if(!i.checkout.getCheckout())throw new kn(xn.MissingCheckout);var o=n._consignmentHasAddress(t)?t.address:t.shippingAddress,a=i.consignments.getConsignmentByAddress(o);if(!a)throw new Yr("No consignment found for the specified address");var u=n._removeLineItems(t.lineItems,a,i.cart.getCart());return u.length?n.updateConsignment({id:a.id,address:o,lineItems:u},e)(r):n.deleteConsignment(a.id,e)(r)}},t.prototype.assignItemsByAddress=function(t,e){var n=this;return function(r){var i=r.getState(),o=n._consignmentHasAddress(t)?t.address:t.shippingAddress,a=i.consignments.getConsignmentByAddress(o);return n._createOrUpdateConsignment({id:a&&a.id,address:o,lineItems:n._addLineItems(t.lineItems,a,i.cart.getCart())},e)(r)}},t.prototype.selectShippingOption=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState(),u=o.checkout.getCheckout(),s=o.consignments.getConsignments();if(!u)throw new kn(xn.MissingCheckout);if(!s||!s.length)throw new kn(xn.MissingConsignments);var c={id:s[0].id,shippingOptionId:t},d={id:s[0].id};i.next((0,a.PH)(Y.UpdateShippingOptionRequested,void 0,d)),n._consignmentRequestSender.updateConsignment(u.id,c,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.UpdateShippingOptionSucceeded,e,d)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.UpdateShippingOptionFailed,t,d))}))}))}},t.prototype.loadShippingOptions=function(t){var e=this;return function(n){return Jn.y.create((function(r){var i=n.getState().checkout.getCheckout();if(!i)throw new kn(xn.MissingCheckout);r.next((0,a.PH)(Y.LoadShippingOptionsRequested)),e._checkoutRequestSender.loadCheckout(i.id,(0,o.__assign)((0,o.__assign)({},t),{params:{include:[$i.AvailableShippingOptions]}})).then((function(t){var e=t.body;r.next((0,a.PH)(Y.LoadShippingOptionsSucceeded,e)),r.complete()})).catch((function(t){r.error((0,a.bR)(Y.LoadShippingOptionsFailed,t))}))}))}},t.prototype.updateAddress=function(t,e){var n=this;return function(r){var i=n._getUpdateAddressRequestBody(t,r),o=r.getState().consignments.getConsignments();return o&&o.length&&(i.id=o[0].id),n._createOrUpdateConsignment(i,e)(r)}},t.prototype.createConsignments=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new kn(xn.MissingCheckout);i.next((0,a.PH)(Y.CreateConsignmentsRequested)),n._consignmentRequestSender.createConsignments(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.CreateConsignmentsSucceeded,e)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.CreateConsignmentsFailed,t))}))}))}},t.prototype.updateConsignment=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new kn(xn.MissingCheckout);var u={id:t.id};i.next((0,a.PH)(Y.UpdateConsignmentRequested,void 0,u)),n._consignmentRequestSender.updateConsignment(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.UpdateConsignmentSucceeded,e,u)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.UpdateConsignmentFailed,t,u))}))}))}},t.prototype.deleteConsignment=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout(),u={id:t};if(!o||!o.id)throw new kn(xn.MissingCheckout);i.next((0,a.PH)(Y.DeleteConsignmentRequested,void 0,u)),n._consignmentRequestSender.deleteConsignment(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.DeleteConsignmentSucceeded,e,u)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.DeleteConsignmentFailed,t,u))}))}))}},t.prototype.updateShippingOption=function(t,e){var n=this;return function(r){return Jn.y.create((function(i){var o=r.getState().checkout.getCheckout();if(!o||!o.id)throw new kn(xn.MissingCheckout);var u={id:t.id};i.next((0,a.PH)(Y.UpdateShippingOptionRequested,void 0,u)),n._consignmentRequestSender.updateConsignment(o.id,t,e).then((function(t){var e=t.body;i.next((0,a.PH)(Y.UpdateShippingOptionSucceeded,e,u)),i.complete()})).catch((function(t){i.error((0,a.bR)(Y.UpdateShippingOptionFailed,t,u))}))}))}},t.prototype._createOrUpdateConsignment=function(t,e){var n=this;return function(r){var i=r.getState().checkout.getCheckout();if(!i||!i.id)throw new kn(xn.MissingCheckout);return n._isUpdateConsignmentRequest(t)?n.updateConsignment(t,e)(r):n.createConsignments([t],e)(r)}},t.prototype._getUpdateAddressRequestBody=function(t,e){var n=e.getState().cart.getCart();if(!n)throw new kn(xn.MissingCart);var r=n.lineItems,i=r.physicalItems,a=r.customItems,u=void 0===a?[]:a;return{address:t,lineItems:(0,o.__spreadArrays)(i,u).map((function(t){return{itemId:t.id,quantity:t.quantity}}))}},t.prototype._removeLineItems=function(t,e,n){if(!n)throw new kn(xn.MissingCart);return this._hydrateLineItems(e.lineItemIds,n).map((function(e){var n=(0,y.find)(t,(function(t){return t.itemId===e.itemId}));return(0,o.__assign)((0,o.__assign)({},e),{quantity:n?e.quantity-n.quantity:e.quantity})})).filter((function(t){return t.quantity>0}))},t.prototype._addLineItems=function(t,e,n){if(!e)return t;if(!n)throw new kn(xn.MissingCart);return t.concat(this._hydrateLineItems(e.lineItemIds,n)).filter((function(t){return t.quantity>0}))},t.prototype._hydrateLineItems=function(t,e){return t.map((function(t){var n=(0,y.find)(e.lineItems.physicalItems,(function(e){return e.id===t}));return{itemId:t,quantity:n?n.quantity:0}}))},t.prototype._isUpdateConsignmentRequest=function(t){return!!t.id},t.prototype._consignmentHasAddress=function(t){return"object"===Ji(t)&&"address"in t},t}();var Xi=["consignments.availableShippingOptions","cart.lineItems.physicalItems.options","cart.lineItems.digitalItems.options","customer","promotions.banners"];const to=function(){function t(t){this._requestSender=t}return t.prototype.createConsignments=function(t,e,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,u=(void 0===a?{}:a).include,s="/api/storefront/checkouts/"+t+"/consignments",c=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post(s,{body:e,params:{include:Sr(Xi,u)},headers:c,timeout:i})},t.prototype.updateConsignment=function(t,e,n){var r=void 0===n?{}:n,i=r.timeout,a=r.params,u=(void 0===a?{}:a).include,s=e.id,c=(0,o.__rest)(e,["id"]),d="/api/storefront/checkouts/"+t+"/consignments/"+s,l=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.put(d,{body:c,params:{include:Sr(Xi,u)},headers:l,timeout:i})},t.prototype.deleteConsignment=function(t,e,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+t+"/consignments/"+e,a=(0,o.__assign)({Accept:nr.JsonV1},ir),u=br(Xi);return this._requestSender.delete(i,{params:{include:u},headers:a,timeout:r})},t}(),eo=function(){function t(t,e){this._googleRecaptcha=t,this._requestSender=e}return t.prototype.initialize=function(t){var e=this;return function(n){return(0,sr.z)((0,cr.of)((0,a.PH)(bn.InitializeRequested,void 0)),(0,dr.P)((function(){return(0,o.__awaiter)(e,void 0,void 0,(function(){var e,r,i,u,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return e=t?t.containerId:"spamProtectionContainer",t||document.getElementById(e)||((r=document.createElement("div")).setAttribute("id",e),document.body.appendChild(r)),i=n.getState(),u=i.config.getStoreConfigOrThrow(),s=u.checkoutSettings.googleRecaptchaSitekey,[4,this._googleRecaptcha.load(e,s)];case 1:return o.sent(),[2,(0,a.PH)(bn.InitializeSucceeded)]}}))}))}))).pipe((0,A.K)((function(t){return pr(bn.InitializeFailed,t)})))}},t.prototype.verifyCheckoutSpamProtection=function(){var t=this;return function(e){return(0,dr.P)((function(){var n=e.getState().checkout.getCheckout();if(!n)throw new kn(xn.MissingCheckout);return(0,sr.z)((0,cr.of)((0,a.PH)(bn.VerifyCheckoutRequested)),(0,P.D)(t.execute()(e)).pipe((0,xr.w)((function(e){return kr(e)&&e.payload?(0,P.D)(t._requestSender.validate(n.id,e.payload.token)).pipe((0,xr.w)((function(t){var n=t.body;return(0,sr.z)((0,cr.of)(e),(0,cr.of)((0,a.PH)(bn.VerifyCheckoutSucceeded,n)))}))):(0,cr.of)(e)})))).pipe((0,A.K)((function(t){return pr(bn.VerifyCheckoutFailed,t)})))}))}},t.prototype.execute=function(){var t=this;return function(e){return(0,sr.z)((0,cr.of)((0,a.PH)(bn.ExecuteRequested)),t.initialize()(e),t._googleRecaptcha.execute().pipe((0,Vr.q)(1)).pipe((0,xr.w)((function(e){var n=e.error,r=e.token;return(0,o.__awaiter)(t,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){if(n instanceof Qr)throw n;if(n||!r)throw new ui;return[2,(0,a.PH)(bn.ExecuteSucceeded,{token:r})]}))}))})))).pipe((0,A.K)((function(t){return pr(bn.ExecuteFailed,t)})))}},t}(),no=function(){function t(t){this._requestSender=t}return t.prototype.validate=function(t,e,n){var r=(void 0===n?{}:n).timeout,i="/api/storefront/checkouts/"+t+"/spam-protection",a=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post(i,{body:{token:e},headers:a,timeout:r})},t}(),ro=function(){function t(t){this._storeCreditRequestSender=t}return t.prototype.applyStoreCredit=function(t,e){var n=this;return function(r){return(0,sr.z)((0,cr.of)((0,a.PH)(dn.ApplyStoreCreditRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n,i,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=r.getState(),!(i=n.checkout.getCheckout()))throw new kn(xn.MissingCheckout);return[4,t?this._storeCreditRequestSender.applyStoreCredit(i.id,e):this._storeCreditRequestSender.removeStoreCredit(i.id,e)];case 1:return u=o.sent().body,[2,(0,a.PH)(dn.ApplyStoreCreditSucceeded,u)]}}))}))}))).pipe((0,A.K)((function(t){return pr(dn.ApplyStoreCreditFailed,t)})))}},t}(),io=function(){function t(t){this._requestSender=t}return t.prototype.applyStoreCredit=function(t,e){var n=(void 0===e?{}:e).timeout,r="/api/storefront/checkouts/"+t+"/store-credit",i=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:br(wr)}})},t.prototype.removeStoreCredit=function(t,e){var n=(void 0===e?{}:e).timeout,r="/api/storefront/checkouts/"+t+"/store-credit",i=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:br(wr)}})},t}(),oo=function(t){function e(e){var n=t.call(this,e)||this;return n.name="UpdateSubscriptionsError",n.type="update_subscriptions",n}return(0,o.__extends)(e,t),e}(p),ao=function(){function t(t){this._subscriptionsRequestSender=t}return t.prototype.updateSubscriptions=function(t,e){var n=this;return(0,sr.z)((0,cr.of)((0,a.PH)(E.UpdateSubscriptionsRequested)),(0,dr.P)((function(){return(0,o.__awaiter)(n,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._subscriptionsRequestSender.updateSubscriptions(t,e)];case 1:return n=r.sent().body,[2,(0,a.PH)(E.UpdateSubscriptionsSucceeded,n)]}}))}))}))).pipe((0,A.K)((function(t){return pr(E.UpdateSubscriptionsFailed,new oo(t))})))},t}(),uo=function(){function t(t){this._requestSender=t}return t.prototype.updateSubscriptions=function(t,e){var n=(void 0===e?{}:e).timeout,r=(0,o.__assign)({Accept:nr.JsonV1},ir);return this._requestSender.post("/api/storefront/subscriptions",{body:t,headers:r,timeout:n})},t}();function so(t){return so="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},so(t)}var co=(0,y.memoize)((function(t){return Array.isArray(t)?t.map((function(t){return lo(t)})):F(t)?Object.keys(t).reduce((function(e,n){var r;return(0,o.__assign)((0,o.__assign)({},e),((r={})[n]=lo(t[n]),r))}),{}):t}));co.cache=new WeakMap;var lo=function(t){return"object"===so(t)&&null!==t?co(t):t};function fo(t){return function(){for(var e=[],n=0;n55?55:t<25?25:t}function Pa(t){var e=t.billingAddress,n=t.email,r=t.firstName,i=t.lastName,o=t.phone,a=t.shippingAddress,u=e||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==u?void 0:u.line1,address_line_2:null==u?void 0:u.line2,city:null==u?void 0:u.city,state:null==u?void 0:u.state,country_code:null==u?void 0:u.countryCode,postal_code:null==u?void 0:u.postalCode}}function Aa(t){var e=t.email,n=t.phone,r=t.shippingAddress,i=((null==r?void 0:r.recipientName)||"").split(" ");return{email:e,first_name:i[0]||"",last_name:i[1]||"",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}const Oa=function(){function t(t,e,n,r,i,o){this._store=t,this._checkoutActionCreator=e,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return t.prototype.initialize=function(t){var e,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u,s,c,d,l,f,p,h,y,m=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=t.braintreepaypal,i=t.containerId,a=t.methodId,s=(u=r||{}).messagingContainerId,c=u.onError,!a)throw new Yr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Yr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Yr('Unable to initialize payment because "options.braintreepaypal" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(d=this._store.getState(),l=d.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Yr('Unable to initialize payment because "options.braintreepaypal.currencyCode" argument is not provided.');return f=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:d=o.sent(),l=d.paymentMethods.getPaymentMethodOrThrow(a),f=d.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!l.clientToken)throw new kn(xn.MissingPaymentMethod);return p={currency:f,intent:null===(e=l.initializationData)||void 0===e?void 0:e.intent,isCreditEnabled:null===(n=l.initializationData)||void 0===n?void 0:n.isCreditEnabled},h=function(t){m._renderPayPalComponents(t,r,i,a,Boolean(l.config.testMode))},y=function(t){return m._handleError(t,i,s,c)},this._braintreeSDKCreator.initialize(l.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(p,h,y)];case 4:return o.sent(),[2]}}))}))},t.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},t.prototype._renderPayPalComponents=function(t,e,n,r,i){var o=e.messagingContainerId;this._renderPayPalMessages(o),this._renderPayPalButton(t,e,n,r,i)},t.prototype._renderPayPalButton=function(t,e,n,r,i){var o=this,a=e.style,u=e.shouldProcessPayment,s=e.onAuthorizeError,c=this._window.paypal,d=null==c?void 0:c.FUNDING.PAYPAL;if(c&&d){var l=a?Ea(a):{},f=c.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:d,style:l,createOrder:function(){return o._setupPayment(t,e,r)},onApprove:function(e){return o._tokenizePayment(e,t,r,u,s)}});f.isEligible()&&f.render("#"+n)}else this._removeElement(n)},t.prototype._renderPayPalMessages=function(t){var e=t&&Boolean(document.getElementById(t)),n=this._window.paypal;if(n&&e){var r=this._store.getState().cart.getCartOrThrow();n.Messages({amount:r.cartAmount,placement:"cart"}).render("#"+t)}else this._removeElement(t)},t.prototype._setupPayment=function(t,e,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,u,s,c,d,l,f,p,h,y,m,v;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=e.buyNowInitializeOptions,u=e.shippingAddress,s=e.onPaymentError,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:a})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return l=c.customer.getCustomer(),f=c.paymentMethods.getPaymentMethodOrThrow(n),p=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,h=null!==(r=e.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,y=u||(null==l?void 0:l.addresses[0]),m=y?Ca(y):void 0,[4,t.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:m,amount:p,currency:h,offerCredit:!1,intent:null===(i=f.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw v=o.sent(),s&&s(v),v;case 8:return[2]}}))}))},t.prototype._createBuyNowCart=function(t){var e=t.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new kn(xn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._tokenizePayment=function(t,e,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var u,s,c,d,l,f;return(0,o.__generator)(this,(function(p){switch(p.label){case 0:return p.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return u=p.sent().deviceData,[4,e.tokenizePayment(t)];case 2:return s=p.sent(),c=s.details,d=s.nonce,l=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:u,billing_address:JSON.stringify(Pa(c)),shipping_address:JSON.stringify(Aa(c))},l&&{cart_id:l})),[2,s];case 3:throw f=p.sent(),i&&i(f),f;case 4:return[2]}}))}))},t.prototype._handleError=function(t,e,n,r){this._removeElement(e),this._removeElement(n),r&&r(t)},t.prototype._removeElement=function(t){var e=t&&document.getElementById(t);e&&e.remove()},t}();var Ta,xa,Ra,ka,Ma;!function(t){t.HORIZONTAL="horizontal",t.VERTICAL="vertical"}(Ta||(Ta={})),function(t){t.SMALL="small",t.MEDIUM="medium",t.LARGE="large",t.RESPONSIVE="responsive"}(xa||(xa={})),function(t){t.GOLD="gold",t.BLUE="blue",t.SIlVER="silver",t.BLACK="black"}(Ra||(Ra={})),function(t){t.CHECKOUT="checkout",t.PAY="pay",t.BUYNOW="buynow",t.PAYPAL="paypal",t.CREDIT="credit"}(ka||(ka={})),function(t){t.PILL="pill",t.RECT="rect"}(Ma||(Ma={}));const Na=function(){function t(t,e,n,r,i,o){this._store=t,this._checkoutActionCreator=e,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._window=o}return t.prototype.initialize=function(t){var e,n;return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u,s,c,d,l,f,p=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(r=t.braintreepaypalcredit,i=t.containerId,!(a=t.methodId))throw new Yr('Unable to initialize payment because "options.methodId" argument is not provided.');if(!i)throw new Yr('Unable to initialize payment because "options.containerId" argument is not provided.');if(!r)throw new Yr('Unable to initialize payment because "options.braintreepaypalcredit" argument is not provided.');if(!r.buyNowInitializeOptions)return[3,1];if(u=this._store.getState(),s=u.paymentMethods.getPaymentMethodOrThrow(a),!r.currencyCode)throw new Yr('Unable to initialize payment because "options.braintreepaypalcredit.currencyCode" argument is not provided.');return c=r.currencyCode,[3,3];case 1:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 2:u=o.sent(),s=u.paymentMethods.getPaymentMethodOrThrow(a),c=u.cart.getCartOrThrow().currency.code,o.label=3;case 3:if(!s.clientToken)throw new kn(xn.MissingPaymentMethod);return d={currency:c,intent:null===(e=s.initializationData)||void 0===e?void 0:e.intent,isCreditEnabled:null===(n=s.initializationData)||void 0===n?void 0:n.isCreditEnabled},l=function(t){return p._renderPayPalButton(t,r,i,a,Boolean(s.config.testMode))},f=function(t){return p._handleError(t,i,r.onError)},this._braintreeSDKCreator.initialize(s.clientToken),[4,this._braintreeSDKCreator.getPaypalCheckout(d,l,f)];case 4:return o.sent(),[2]}}))}))},t.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},t.prototype._renderPayPalButton=function(t,e,n,r,i){var a=this,u=e.style,s=e.shouldProcessPayment,c=e.onAuthorizeError,d=this._window.paypal,l=!1;if(d){var f=[d.FUNDING.PAYLATER,d.FUNDING.CREDIT],p=u?Ea(u):{};f.forEach((function(u){var f=u===d.FUNDING.CREDIT?(0,o.__assign)({label:ka.CREDIT},p):p;if(!l){var h=d.Buttons({env:i?"sandbox":"production",commit:!1,fundingSource:u,style:f,createOrder:function(){return a._setupPayment(t,e,r)},onApprove:function(e){return a._tokenizePayment(e,t,r,s,c)}});h.isEligible()&&(h.render("#"+n),l=!0)}}))}d&&l||this._removeElement(n)},t.prototype._setupPayment=function(t,e,n){var r,i;return(0,o.__awaiter)(this,void 0,void 0,(function(){var a,u,s,c,d,l,f,p,h,y,m,v;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:a=e.onPaymentError,u=e.shippingAddress,s=e.buyNowInitializeOptions,o.label=1;case 1:return o.trys.push([1,7,,8]),d=this,[4,this._createBuyNowCart({buyNowInitializeOptions:s})];case 2:return d._buyNowCart=o.sent(),this._buyNowCart?(c=this._store.getState(),[3,5]):[3,3];case 3:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 4:c=o.sent(),o.label=5;case 5:return l=c.customer.getCustomer(),f=c.paymentMethods.getPaymentMethodOrThrow(n),p=this._buyNowCart?this._buyNowCart.cartAmount:c.checkout.getCheckoutOrThrow().outstandingBalance,h=null!==(r=e.currencyCode)&&void 0!==r?r:c.config.getStoreConfigOrThrow().currency.code,y=u||(null==l?void 0:l.addresses[0]),m=y?Ca(y):void 0,[4,t.createPayment({flow:"checkout",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:m,amount:p,currency:h,offerCredit:!0,intent:null===(i=f.initializationData)||void 0===i?void 0:i.intent})];case 6:return[2,o.sent()];case 7:throw v=o.sent(),a&&a(v),v;case 8:return[2]}}))}))},t.prototype._createBuyNowCart=function(t){var e=t.buyNowInitializeOptions;return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==e?void 0:e.getBuyNowCartRequestBody))return[3,4];if(!(t=e.getBuyNowCartRequestBody()))throw new kn(xn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(t)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._tokenizePayment=function(t,e,n,r,i){var a;return(0,o.__awaiter)(this,void 0,void 0,(function(){var u,s,c,d,l,f;return(0,o.__generator)(this,(function(p){switch(p.label){case 0:return p.trys.push([0,3,,4]),[4,this._braintreeSDKCreator.getDataCollector({paypal:!0})];case 1:return u=p.sent().deviceData,[4,e.tokenizePayment(t)];case 2:return s=p.sent(),c=s.details,d=s.nonce,l=null===(a=this._buyNowCart)||void 0===a?void 0:a.id,this._formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",provider:n,action:r?"process_payment":"set_external_checkout",nonce:d,device_data:u,billing_address:JSON.stringify(Pa(c)),shipping_address:JSON.stringify(Aa(c))},l&&{cart_id:l})),[2,s];case 3:throw f=p.sent(),i&&i(f),f;case 4:return[2]}}))}))},t.prototype._handleError=function(t,e,n){this._removeElement(e),n&&n(t)},t.prototype._removeElement=function(t){var e=t&&document.getElementById(t);e&&e.remove()},t}();var Da={backgroundColor:"#3D95CE",backgroundPosition:"50% 50%",backgroundSize:"80px auto",backgroundImage:'url("/app/assets/img/payment-providers/venmo-logo-white.svg")',backgroundRepeat:"no-repeat",borderRadius:"4px",cursor:"pointer",transition:"0.2s ease",minHeight:"40px",minWidth:"150px",height:"100%",width:"100%"};const La=function(){function t(t,e,n,r,i){this._store=t,this._paymentMethodActionCreator=e,this._cartRequestSender=n,this._braintreeSDKCreator=r,this._formPoster=i,this._onError=y.noop}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u=this;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.braintreevenmo,n=t.containerId,!(r=t.methodId))throw new Yr('Unable to initialize payment because "options.methodId" argument is not provided.');return[4,this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(r))];case 1:if(i=o.sent(),!(a=i.paymentMethods.getPaymentMethodOrThrow(r)).clientToken)throw new kn(xn.MissingPaymentMethod);if(!n)throw new Yr('Unable to initialize payment because "options.containerId" argument is not provided.');return this._onError=(null==e?void 0:e.onError)||this._handleError,this._braintreeSDKCreator.initialize(a.clientToken),[4,this._braintreeSDKCreator.getVenmoCheckout((function(t){return u._handleInitializationVenmoSuccess(t,n,null==e?void 0:e.buyNowInitializeOptions)}),(function(t){return u._handleInitializationVenmoError(t,n)}))];case 2:return o.sent(),[2]}}))}))},t.prototype.deinitialize=function(){return this._braintreeSDKCreator.teardown(),Promise.resolve()},t.prototype._handleError=function(t){throw new Error(t.message)},t.prototype._handleInitializationVenmoSuccess=function(t,e,n){return this._renderVenmoButton(t,e,n)},t.prototype._handleInitializationVenmoError=function(t,e){return this._removeVenmoContainer(e),this._onError(t)},t.prototype._removeVenmoContainer=function(t){var e=document.getElementById(t);e&&e.remove()},t.prototype._renderVenmoButton=function(t,e,n){var r=this,i=document.getElementById(e);if(!i)throw new Yr("Unable to create wallet button without valid container ID.");i.setAttribute("aria-label","Venmo"),Object.assign(i.style,Da),i.addEventListener("click",(function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var e,r=this;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return i.setAttribute("disabled","true"),[4,this._createBuyNowCart(n)];case 1:return e=a.sent(),t.tokenize&&t.tokenize((function(t,n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return i.removeAttribute("disabled"),t?[2,this._onError(t)]:[4,this._handlePostForm(n,null==e?void 0:e.id)];case 1:return r.sent(),[2]}}))}))})),[2]}}))}))})),i.addEventListener("mouseenter",(function(){i.style.backgroundColor="#0a7fc2"})),i.addEventListener("mouseleave",(function(){i.style.backgroundColor=Da.backgroundColor}))},t.prototype._createBuyNowCart=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new kn(xn.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._handlePostForm=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return[4,this._braintreeSDKCreator.getDataCollector()];case 1:return n=a.sent().deviceData,r=t.nonce,i=t.details,this._formPoster.postForm("/checkout.php",(0,o.__assign)({nonce:r,provider:ji.BRAINTREE_VENMO,payment_type:"paypal",device_data:n,action:"set_external_checkout",billing_address:JSON.stringify(Pa(i)),shipping_address:JSON.stringify(Aa(i))},e&&{cart_id:e})),[2]}}))}))},t}();const za=function(t){function e(e){var n=t.call(this,e||"Invalid arguments have been provided.")||this;return n.name="InvalidArgumentError",n.type="invalid_argument",n}return(0,o.__extends)(e,t),e}(u);var ja;!function(t){t[t.CheckoutButtonNotInitialized=0]="CheckoutButtonNotInitialized",t[t.CustomerNotInitialized=1]="CustomerNotInitialized",t[t.PaymentNotInitialized=2]="PaymentNotInitialized",t[t.ShippingNotInitialized=3]="ShippingNotInitialized",t[t.SpamProtectionNotInitialized=4]="SpamProtectionNotInitialized"}(ja||(ja={}));const Ua=function(t){function e(e){var n=t.call(this,function(t){switch(t){case ja.CustomerNotInitialized:return"Unable to proceed because the customer step of checkout has not been initialized.";case ja.PaymentNotInitialized:return"Unable to proceed because the payment step of checkout has not been initialized.";case ja.ShippingNotInitialized:return"Unable to proceed because the shipping step of checkout has not been initialized.";case ja.SpamProtectionNotInitialized:return"Unable to proceed because the checkout spam protection has not been initialized.";default:return"Unable to proceed because the required component has not been initialized."}}(e))||this;return n.subtype=e,n.name="NotInitializedError",n.type="not_initialized",n}return(0,o.__extends)(e,t),e}(u);var Fa;!function(t){t[t.MissingBillingAddress=0]="MissingBillingAddress",t[t.MissingCart=1]="MissingCart",t[t.MissingCheckout=2]="MissingCheckout",t[t.MissingConsignments=3]="MissingConsignments",t[t.MissingCustomer=4]="MissingCustomer",t[t.MissingCheckoutConfig=5]="MissingCheckoutConfig",t[t.MissingOrder=6]="MissingOrder",t[t.MissingOrderConfig=7]="MissingOrderConfig",t[t.MissingOrderId=8]="MissingOrderId",t[t.MissingPayment=9]="MissingPayment",t[t.MissingPaymentId=10]="MissingPaymentId",t[t.MissingPaymentInstrument=11]="MissingPaymentInstrument",t[t.MissingPaymentMethod=12]="MissingPaymentMethod",t[t.MissingPaymentRedirectUrl=13]="MissingPaymentRedirectUrl",t[t.MissingPaymentStatus=14]="MissingPaymentStatus",t[t.MissingPaymentToken=15]="MissingPaymentToken",t[t.MissingShippingAddress=16]="MissingShippingAddress"}(Fa||(Fa={}));const qa=function(t){function e(e){var n=t.call(this,function(t){switch(t){case Fa.MissingBillingAddress:return"Unable to proceed because billing address data is unavailable.";case Fa.MissingCart:return"Unable to proceed because cart data is unavailable.";case Fa.MissingConsignments:return"Unable to proceed because consignments data is unavailable.";case Fa.MissingCheckout:return"Unable to proceed because checkout data is unavailable.";case Fa.MissingCustomer:return"Unable to proceed because customer data is unavailable.";case Fa.MissingCheckoutConfig:case Fa.MissingOrderConfig:return"Unable to proceed because configuration data is unavailable.";case Fa.MissingOrder:return"Unable to proceed because order data is unavailable.";case Fa.MissingOrderId:return"Unable to proceed because order ID is unavailable or not generated yet.";case Fa.MissingPayment:return"Unable to proceed because payment data is unavailable.";case Fa.MissingPaymentToken:return"Unable to proceed because the token required to submit a payment is missing.";case Fa.MissingPaymentMethod:return"Unable to proceed because payment method data is unavailable or not properly configured.";case Fa.MissingShippingAddress:return"Unable to proceed because shipping address data is unavailable.";default:return"Unable to proceed because the required data is unavailable."}}(e))||this;return n.subtype=e,n.name="MissingDataError",n.type="missing_data",n}return(0,o.__extends)(e,t),e}(u),Ba=function(){function t(t,e,n,r,i){this._store=t,this._formPoster=e,this._checkoutActionCreator=n,this._googlePayPaymentProcessor=r,this._cartRequestSender=i}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.containerId,n=t.methodId,r=t.currencyCode,i=this._getGooglePayOptions(t),a=i.buyNowInitializeOptions,!e||!n)throw new za('Unable to proceed because "containerId" argument is not provided.');if(u=this._store.getState(),s=u.paymentMethods.getPaymentMethod(n),c=((null==s?void 0:s.config)||{}).testMode,this._methodId=n,this._isBuyNowFlow=!!a,!this._isBuyNowFlow)return[3,2];if(!r)throw new za('Unable to initialize payment because "options.currencyCode" argument is not provided.');return d=i.buyNowInitializeOptions,this._googlePayPaymentProcessor.updateBuyNowFlowFlag(this._isBuyNowFlow),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId(),this._getGooglePayClientOptions(r,c,d))];case 1:return o.sent(),[3,5];case 2:return[4,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout())];case 3:return o.sent(),[4,this._googlePayPaymentProcessor.initialize(this._getMethodId())];case 4:o.sent(),o.label=5;case 5:return this._walletButton=this._createSignInButton(e,i,r),[2]}}))}))},t.prototype.deinitialize=function(){return this._walletButton&&this._walletButton.parentNode&&(this._walletButton.parentNode.removeChild(this._walletButton),this._walletButton=void 0),this._googlePayPaymentProcessor.deinitialize()},t.prototype._getGooglePayClientOptions=function(t,e,n){var r=this;return{environment:e?"TEST":"PRODUCTION",paymentDataCallbacks:{onPaymentDataChanged:function(e){var i=e.callbackTrigger;return(0,o.__awaiter)(r,void 0,void 0,(function(){var e,r,a,u,s;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(i!==Wo.INITIALIZE)return[2];o.label=1;case 1:return o.trys.push([1,5,,6]),e=this,[4,this._createBuyNowCart(n)];case 2:return e._buyNowCart=o.sent(),this._buyNowCart?(r=this._buyNowCart,a=r.id,u=r.cartAmount,[4,this._store.dispatch(this._checkoutActionCreator.loadCheckout(a))]):[3,4];case 3:return o.sent(),[2,{newTransactionInfo:{currencyCode:t,totalPrice:String(u),totalPriceStatus:Ko.FINAL}}];case 4:return[3,6];case 5:throw s=o.sent(),new ga(s);case 6:return[2]}}))}))}}}},t.prototype._createSignInButton=function(t,e,n){var r=this,i=document.getElementById(t),o=e.buttonType,a=e.buttonColor;if(!i)throw new za("Unable to create sign-in button without valid container ID.");var u=this._googlePayPaymentProcessor.createButton((function(t){return r._handleWalletButtonClick(t,n)}),o,a);return i.appendChild(u),u},t.prototype._getMethodId=function(){if(!this._methodId)throw new Ua(ja.PaymentNotInitialized);return this._methodId},t.prototype._getGooglePayOptions=function(t){if(t.methodId===ji.GOOGLEPAY_ADYENV2&&t.googlepayadyenv2)return t.googlepayadyenv2;if(t.methodId===ji.GOOGLEPAY_ADYENV3&&t.googlepayadyenv3)return t.googlepayadyenv3;if(t.methodId===ji.GOOGLEPAY_AUTHORIZENET&&t.googlepayauthorizenet)return t.googlepayauthorizenet;if(t.methodId===ji.GOOGLEPAY_BNZ&&t.googlepaybnz)return t.googlepaybnz;if(t.methodId===ji.GOOGLEPAY_BRAINTREE&&t.googlepaybraintree)return t.googlepaybraintree;if(t.methodId===ji.GOOGLEPAY_CHECKOUTCOM&&t.googlepaycheckoutcom)return t.googlepaycheckoutcom;if(t.methodId===ji.GOOGLEPAY_CYBERSOURCEV2&&t.googlepaycybersourcev2)return t.googlepaycybersourcev2;if(t.methodId===ji.GOOGLEPAY_ORBITAL&&t.googlepayorbital)return t.googlepayorbital;if(t.methodId===ji.GOOGLEPAY_STRIPE&&t.googlepaystripe)return t.googlepaystripe;if(t.methodId===ji.GOOGLEPAY_STRIPEUPE&&t.googlepaystripeupe)return t.googlepaystripeupe;if(t.methodId===ji.GOOGLEPAY_WORLDPAYACCESS&&t.googlepayworldpayaccess)return t.googlepayworldpayaccess;throw new za},t.prototype._createBuyNowCart=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if("function"!=typeof(null==t?void 0:t.getBuyNowCartRequestBody))return[3,4];if(!(e=t.getBuyNowCartRequestBody()))throw new qa(Fa.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this._cartRequestSender.createBuyNowCart(e)];case 2:return[2,n.sent().body];case 3:throw n.sent(),new ga;case 4:return[2]}}))}))},t.prototype._handleWalletButtonClick=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:t.preventDefault(),i.label=1;case 1:return i.trys.push([1,7,,8]),this._isBuyNowFlow&&e&&this._googlePayPaymentProcessor.updatePaymentDataRequest({transactionInfo:{currencyCode:e,totalPrice:"0",totalPriceStatus:Ko.ESTIMATED},callbackIntents:[Zo.OFFER]}),[4,this._googlePayPaymentProcessor.displayWallet()];case 2:return n=i.sent(),[4,this._googlePayPaymentProcessor.handleSuccess(n)];case 3:return i.sent(),xo(this._store.getState().cart.getCartOrThrow())>0&&n.shippingAddress?[4,this._googlePayPaymentProcessor.updateShippingAddress(n.shippingAddress)]:[3,5];case 4:i.sent(),i.label=5;case 5:return[4,this._onPaymentSelectComplete()];case 6:return i.sent(),[3,8];case 7:if((r=i.sent())&&"CANCELED"!==r.message)throw r;return[3,8];case 8:return[2]}}))}))},t.prototype._onPaymentSelectComplete=function(){var t,e=null===(t=this._buyNowCart)||void 0===t?void 0:t.id;this._formPoster.postForm("/checkout.php",(0,o.__assign)({headers:(0,o.__assign)({Accept:"text/html","Content-Type":"application/x-www-form-urlencoded"},ir)},e&&{action:"set_external_checkout",provider:this._methodId,cart_id:e}))},(0,o.__decorate)([Zr],t.prototype,"_handleWalletButtonClick",null),t}();var Ga={es:["es_es","es_mx","es_pe","es_co","es_ar","es_cl"],en:["en_us","en_gb","en_ca","en_es","en_fr","en_ie","en_sg","en_au","en_nz","en_my","en_hk","en_th","en_ae","en_sa","en_qa","en_kw","en_za"],pt:["pt_br"],zu:["zu_za"],ar:["ar_sa","ar_ae","ar_qa","ar_kw"],zh:["zh_sg","zh_hk"],ms:["ms_my"],uk:["uk_ua"],sv:["sv_se"],hr:["hr_hr"],pl:["pl_pl"],nl:["nl_be"],it:["it_it"],de:["de_de"],fr:["fr_fr","fr_ca"]};function Va(t){var e=t.replace("-","_").toLowerCase().split("_"),n=e[0],r=n+"_"+e[1],i=Ga[n];return i?i.indexOf(r)>-1?r:i[0]:"en_us"}const Ya=function(){function t(t,e,n,r){this._store=t,this._checkoutActionCreator=e,this._masterpassScriptLoader=n,this._locale=r}return t.prototype.initialize=function(t){var e=this,n=t.containerId,r=t.methodId;if(!n||!r)throw new Yr('Unable to proceed because "containerId" argument is not provided.');return this._methodId=r,this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(t){var n=t.paymentMethods.getPaymentMethod(r);if(!n||!n.initializationData.checkoutId)throw new kn(xn.MissingPaymentMethod);var i={useMasterpassSrc:n.initializationData.isMasterpassSrcEnabled,language:Va(e._locale),testMode:n.config.testMode,checkoutId:n.initializationData.checkoutId};return e._masterpassScriptLoader.load(i)})).then((function(t){e._masterpassClient=t,e._signInButton=e._createSignInButton(n)}))},t.prototype.deinitialize=function(){return this._signInButton&&this._signInButton.parentNode&&(this._signInButton.removeEventListener("click",this._handleWalletButtonClick),this._signInButton.parentNode.removeChild(this._signInButton),this._signInButton=void 0),Promise.resolve()},t.prototype._createSignInButton=function(t){var e=document.getElementById(t),n=this._store.getState(),r=this._methodId?n.paymentMethods.getPaymentMethod(this._methodId):null,i=n.config.getStoreConfig();if(!e)throw new Error("Need a container to place the button");if(!r)throw new kn(xn.MissingPaymentMethod);if(!i)throw new Yr("Unable to retrieve store configuration");var o=document.createElement("input");if(o.type="image",r.initializationData.isMasterpassSrcEnabled){var a=r.config.testMode?"sandbox.":"",u=r.initializationData.checkoutId,s=["locale="+Va(this._locale),"paymentmethod=master,visa,amex,discover","checkoutid="+u];o.src=["https://"+a+"src.mastercard.com/assets/img/btn/src_chk_btn_126x030px.svg",s.join("&")].join("?")}else o.src="https://static.masterpass.com/dyn/img/btn/global/mp_chk_btn_160x037px.svg";return e.appendChild(o),o.addEventListener("click",this._handleWalletButtonClick),o},t.prototype._createMasterpassPayload=function(){var t=this._store.getState(),e=t.checkout.getCheckout(),n=this._methodId?t.paymentMethods.getPaymentMethod(this._methodId):null;if(!e)throw new kn(xn.MissingCheckout);if(!n)throw new kn(xn.MissingPaymentMethod);return{checkoutId:n.initializationData.checkoutId,allowedCardTypes:n.initializationData.allowedCardTypes,amount:e.cart.cartAmount.toString(),currency:e.cart.currency.code,cartId:e.cart.id,callbackUrl:("cart",window.location.origin+"/checkout.php?action=set_external_checkout&provider=masterpass&gateway=stripe&origin=cart")}},t.prototype._handleWalletButtonClick=function(){if(!this._masterpassClient)throw new ai(ni.CheckoutButtonNotInitialized);this._masterpassClient.checkout(this._createMasterpassPayload())},(0,o.__decorate)([Zr],t.prototype,"_handleWalletButtonClick",null),t}(),Ha=function(){function t(t,e,n,r,i){void 0===i&&(i=""),this._store=t,this._checkoutActionCreator=e,this._paypalScriptLoader=n,this._formPoster=r,this._host=i}return t.prototype.initialize=function(t){var e=this,n=t.paypal,r=this._store.getState(),i=this._paymentMethod=r.paymentMethods.getPaymentMethod(t.methodId);if(!n)throw new Yr;if(!i)throw new kn(xn.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then((function(r){var a,u,s;if(!i||!i.config.merchantId)throw new kn(xn.MissingPaymentMethod);var c=i.config.merchantId,d=i.config.testMode?"sandbox":"production",l=((a={})[d]=n.clientId,a),f=r.FUNDING.CREDIT||"credit",p=n.allowCredit?[f]:[],h=n.allowCredit?[]:[f];return r.Button.render({env:d,client:l,commit:n.shouldProcessPayment,funding:{allowed:p,disallowed:h},style:(0,o.__assign)((0,o.__assign)({shape:Ma.RECT},(0,y.pick)(n.style,"layout","color","label","shape","tagline","fundingicons")),{size:"paypalexpress"===i.id&&"small"===(null===(u=n.style)||void 0===u?void 0:u.size)?xa.RESPONSIVE:null===(s=n.style)||void 0===s?void 0:s.size}),payment:function(t,r){return e._setupPayment(c,r,n.onPaymentError)},onAuthorize:function(t,r){return e._tokenizePayment(t,r,n.shouldProcessPayment,n.onAuthorizeError)}},t.containerId)}))},t.prototype.deinitialize=function(){return this._paymentMethod=void 0,Promise.resolve()},t.prototype._setupPayment=function(t,e,n){var r=this;if(!e)throw new ai(ni.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then((function(n){var i=n.cart.getCart(),a=i?i.id:"";return e.request.post(r._host+"/api/storefront/payment/paypalexpress",{merchantId:t,cartId:a},{headers:(0,o.__assign)({"X-API-INTERNAL":rr},ir)})})).then((function(t){return t.id})).catch((function(t){throw n&&n(t),t}))},t.prototype._tokenizePayment=function(t,e,n,r){var i=this;if(!this._paymentMethod)throw new ai(ni.CheckoutButtonNotInitialized);if(!e)throw new ai(ni.CheckoutButtonNotInitialized);if(!t.paymentID||!t.payerID)throw new kn(xn.MissingPayment);var o=this._paymentMethod.id;return e.payment.get(t.paymentID).then((function(e){i._formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:o,action:n?"process_payment":"set_external_checkout",paymentId:t.paymentID,payerId:t.payerID,payerInfo:JSON.stringify(e.payer.payer_info)})}))},t}();function Wa(){try{return"production"}catch(t){return"development"}}n(64701);const Ka=function(){function t(t){this._console=t}return t.prototype.log=function(){for(var t=[],e=0;e0}));a.length>1&&a[0].matches===a[1].matches&&"development"===Wa()&&Ja.warn("The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.");var u=a[0];if(u&&u.token)return u.token;if(this._useFallback){var s=null===(n=o.find((function(t){return t.default})))||void 0===n?void 0:n.token;if(s)return s}throw new Error("Unable to resolve to a registered token with the provided token.")},t}();function Xa(t,e){return Object.assign(t,{resolveIds:e})}const tu=function(t){function e(e){var n=t.call(this,e||"Payment process was cancelled.")||this;return n.name="PaymentMethodCancelledError",n.type="payment_cancelled",n}return(0,o.__extends)(e,t),e}(u);const eu=function(t){function e(e){var n=t.call(this,e||"An unexpected error has occurred during buy now cart creation process. Please try again later.")||this;return n.name="BuyNowCartCreationError",n.type="buy_now_cart_creation_error",n}return(0,o.__extends)(e,t),e}(u);function nu(t){if(!function(t){return"ApplePaySession"in t}(t))throw new Error("Apple pay is not supported")}const ru=function(){function t(){}return t.prototype.create=function(t){return nu(window),new ApplePaySession(1,t)},t}();var iu;!function(t){t.Subtotal="Subtotal",t.Shipping="Shipping"}(iu||(iu={}));const ou=function(){function t(t,e,n){this._requestSender=t,this._paymentIntegrationService=e,this._sessionFactory=n,this._onAuthorizeCallback=y.noop,this._subTotalLabel=iu.Subtotal,this._shippingLabel=iu.Shipping}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.methodId,n=t.containerId,r=t.applepay,nu(window),!e||!r)throw new qa(Fa.MissingPaymentMethod);return i=r.buttonClassName,a=r.onPaymentAuthorize,u=r.buyNowInitializeOptions,s=r.requiresShipping,this._requiresShipping=s,this._buyNowInitializeOptions=u,this._onAuthorizeCallback=a,u?[3,2]:[4,this._paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return[4,this._paymentIntegrationService.loadPaymentMethod(e)];case 3:return o.sent(),c=this._paymentIntegrationService.getState(),this._paymentMethod=c.getPaymentMethodOrThrow(e),[4,this._paymentIntegrationService.verifyCheckoutSpamProtection()];case 4:return o.sent(),this._applePayButton=this._createButton(n,i),this._applePayButton.addEventListener("click",this._handleWalletButtonClick.bind(this)),[2,Promise.resolve()]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype._createButton=function(t,e){void 0===e&&(e="apple-pay-checkout-button");var n=document.getElementById(t);if(!n)throw new za("Unable to create wallet button without valid container ID.");document.body.classList.add("apple-pay-supported");var r=document.createElement("div");return r.setAttribute("class",e),r.setAttribute("role","button"),r.setAttribute("aria-label","Apple Pay button"),n.appendChild(r),r},t.prototype._handleWalletButtonClick=function(t){var e;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,u,s,c,d,l,f,p,h;return(0,o.__generator)(this,(function(o){if(t.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new qa(Fa.MissingPaymentMethod);return this._buyNowInitializeOptions&&"function"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody?(n=this._paymentMethod.initializationData,r=n.countryCode,i=n.currencyCode,a=n.merchantCapabilities,u=n.supportedNetworks,s=n.storeName,p=this._getRequestWithEmptyTotal(r,i,u,a),this._requiresShipping&&(null===(e=p.requiredShippingContactFields)||void 0===e||e.push("postalAddress")),h=this._sessionFactory.create(p),this._handleApplePayEvents(h,this._paymentMethod,s),h.begin()):(c=this._paymentIntegrationService.getState(),d=c.getCartOrThrow(),l=c.getStoreConfigOrThrow(),f=c.getCheckoutOrThrow(),p=this._getBaseRequest(d,f,l,this._paymentMethod),h=this._sessionFactory.create(p),this._handleApplePayEvents(h,this._paymentMethod,l.storeProfile.storeName),h.begin()),[2]}))}))},t.prototype._getRequestWithEmptyTotal=function(t,e,n,r){return{countryCode:t,currencyCode:e,supportedNetworks:n,merchantCapabilities:r,total:{label:"",amount:"0",type:"pending"},requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"]}},t.prototype._getBaseRequest=function(t,e,n,r){var i,o=n.storeProfile,a=o.storeCountryCode,u=o.storeName,s=t.currency,c=s.code,d=s.decimalPlaces,l=r.initializationData,f=l.merchantCapabilities,p=l.supportedNetworks,h=t.lineItems.physicalItems.length>0,y={requiredBillingContactFields:["postalAddress"],requiredShippingContactFields:["email","phone"],countryCode:a,currencyCode:c,merchantCapabilities:f,supportedNetworks:p,lineItems:[],total:h?{label:u,amount:""+e.grandTotal.toFixed(d),type:"pending"}:{label:u,amount:""+e.grandTotal.toFixed(d),type:"final"}};if(h)null===(i=y.requiredShippingContactFields)||void 0===i||i.push("postalAddress");else{var m=[{label:this._subTotalLabel,amount:""+e.subtotal.toFixed(d)}];e.taxes.forEach((function(t){return m.push({label:t.name,amount:""+t.amount.toFixed(d)})})),y.lineItems=m}return y},t.prototype._handleApplePayEvents=function(t,e,n){var r=this;t.onvalidatemerchant=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this._onValidateMerchant(e,n)];case 1:return r=i.sent().body,t.completeMerchantValidation(r),[3,3];case 2:throw i.sent(),new Error("Merchant validation failed");case 3:return[2]}}))}))},this._buyNowInitializeOptions&&!this._requiresShipping&&(t.onpaymentmethodselected=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return[4,this._createBuyNowCart()];case 1:return e.sent(),this._handlePaymentMethodSelected(t),[2]}}))}))}),t.onshippingcontactselected=function(e){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return this._buyNowInitializeOptions&&this._requiresShipping?[4,this._createBuyNowCart()]:[3,2];case 1:r.sent(),r.label=2;case 2:return[4,this._handleShippingContactSelected(t,n,e)];case 3:return r.sent(),[2]}}))}))},t.onshippingmethodselected=function(e){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return[4,this._handleShippingMethodSelected(t,n,e)];case 1:return r.sent(),[2]}}))}))},t.oncancel=function(){return(0,o.__awaiter)(r,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),t="/remote-checkout/"+e.id+"/signout",[4,this._requestSender.get(t)];case 1:return n.sent(),[4,this._paymentIntegrationService.loadCheckout()];case 2:return[2,n.sent()];case 3:throw n.sent(),new tu;case 4:return[2]}}))}))},t.onpaymentauthorized=function(n){return(0,o.__awaiter)(r,void 0,void 0,(function(){return(0,o.__generator)(this,(function(r){return[2,this._onPaymentAuthorized(n,t,e)]}))}))}},t.prototype._createBuyNowCart=function(){var t,e;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(i.trys.push([0,3,,4]),!(n=null===(e=null===(t=this._buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)||void 0===e?void 0:e.call(t)))throw new qa(Fa.MissingCart);return[4,this._paymentIntegrationService.createBuyNowCart(n)];case 1:return r=i.sent(),[4,this._paymentIntegrationService.loadCheckout(r.id)];case 2:return i.sent(),[3,4];case 3:throw i.sent(),new eu;case 4:return[2]}}))}))},t.prototype._handlePaymentMethodSelected=function(t){var e=this._paymentIntegrationService.getState(),n=e.getCartOrThrow(),r=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new qa(Fa.MissingPaymentMethod);var o=this._getBaseRequest(n,i,r,this._paymentMethod);delete o.total.type,t.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})},t.prototype._handleShippingContactSelected=function(t,e,n){var r;return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u,s,c,d,l,f,p,h,y,m;return(0,o.__generator)(this,(function(v){switch(v.label){case 0:i=this._transformContactToAddress(n.shippingContact),v.label=1;case 1:return v.trys.push([1,3,,4]),[4,this._paymentIntegrationService.updateShippingAddress(i)];case 2:return v.sent(),[3,4];case 3:throw v.sent(),t.abort(),new Error("Shipping address update failed");case 4:if(a=this._paymentIntegrationService.getState(),u=a.getCartOrThrow().currency.decimalPlaces,s=a.getCheckoutOrThrow(),c=null===(r=s.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,d=s.consignments[0].availableShippingOptions,l=null==d?void 0:d.find((function(t){return t.id===c})),f=null==d?void 0:d.filter((function(t){return t.id!==c})),p=l?[{label:l.description,amount:""+l.cost.toFixed(u),detail:l.additionalDescription,identifier:l.id}]:[],f&&(0,o.__spreadArrays)(f.filter((function(t){return t.isRecommended})),f.filter((function(t){return!t.isRecommended}))).forEach((function(t){return p.push({label:t.description,amount:""+t.cost.toFixed(u),detail:t.additionalDescription,identifier:t.id})})),!(d instanceof Array))throw new Error("Shipping options not available.");if(0===d.length)return t.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:"pending",label:e,amount:""+s.grandTotal.toFixed(u)},[]),[2];h=d.find((function(t){return t.isRecommended})),y=h?h.id:d[0].id,m=l?l.id:y,v.label=5;case 5:return v.trys.push([5,7,,8]),[4,this._updateShippingOption(m)];case 6:return v.sent(),[3,8];case 7:throw v.sent(),new Error("Shipping options update failed");case 8:return a=this._paymentIntegrationService.getState(),s=a.getCheckoutOrThrow(),t.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:"final",label:e,amount:""+s.grandTotal.toFixed(u)},newLineItems:this._getUpdatedLineItems(s,u)}),[2]}}))}))},t.prototype._handleShippingMethodSelected=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:r=n.shippingMethod.identifier,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,this._updateShippingOption(r)];case 2:return o.sent(),[3,4];case 3:throw o.sent(),t.abort(),new Error("Shipping option selection update failed.");case 4:return i=this._paymentIntegrationService.getState(),a=i.getCartOrThrow().currency.decimalPlaces,u=i.getCheckoutOrThrow(),t.completeShippingMethodSelection({newTotal:{type:"final",label:e,amount:""+u.grandTotal.toFixed(a)},newLineItems:this._getUpdatedLineItems(u,a)}),[2]}}))}))},t.prototype._getUpdatedLineItems=function(t,e){var n=[{label:this._subTotalLabel,amount:""+t.subtotal.toFixed(e)}];return t.taxes.forEach((function(t){return n.push({label:t.name,amount:""+t.amount.toFixed(e)})})),n.push({label:this._shippingLabel,amount:""+t.shippingCostTotal.toFixed(e)}),n},t.prototype._updateShippingOption=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){return[2,this._paymentIntegrationService.selectShippingOption(t)]}))}))},t.prototype._onValidateMerchant=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){return n=["validationUrl="+e.validationURL,"merchantIdentifier="+t.initializationData.merchantId,"displayName="+t.initializationData.storeName,"domainName="+window.location.hostname].join("&"),[2,this._requestSender.post((i=t.initializationData.paymentsUrl,i+"/api/public/v1/payments/applepay/validate_merchant"),{credentials:!1,headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded","X-XSRF-TOKEN":null},body:n})];var i}))}))},t.prototype._onPaymentAuthorized=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u,s,c,d,l,f,p,h,y;return(0,o.__generator)(this,(function(m){switch(m.label){case 0:r=t.payment,i=r.token,a=r.billingContact,u=r.shippingContact,s=this._paymentIntegrationService.getState(),c=s.getCartOrThrow(),d=c.lineItems.physicalItems.length>0,l={methodId:n.id,paymentData:{formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},f=this._transformContactToAddress(a),p=this._transformContactToAddress(u),h=null==u?void 0:u.emailAddress,y=(null==u?void 0:u.phoneNumber)||"",m.label=1;case 1:return m.trys.push([1,7,,8]),[4,this._paymentIntegrationService.updateBillingAddress((0,o.__assign)((0,o.__assign)({},f),{email:h,phone:y}))];case 2:return m.sent(),d?[4,this._paymentIntegrationService.updateShippingAddress(p)]:[3,4];case 3:m.sent(),m.label=4;case 4:return[4,this._paymentIntegrationService.submitOrder({useStoreCredit:!1})];case 5:return m.sent(),[4,this._paymentIntegrationService.submitPayment(l)];case 6:return m.sent(),e.completePayment(ApplePaySession.STATUS_SUCCESS),[2,this._onAuthorizeCallback()];case 7:throw m.sent(),e.completePayment(ApplePaySession.STATUS_FAILURE),new Error("Payment cannot complete");case 8:return[2]}}))}))},t.prototype._transformContactToAddress=function(t){return{firstName:(null==t?void 0:t.givenName)||"",lastName:(null==t?void 0:t.familyName)||"",city:(null==t?void 0:t.locality)||"",company:"",address1:(null==t?void 0:t.addressLines)&&t.addressLines[0]||"",address2:(null==t?void 0:t.addressLines)&&t.addressLines[1]||"",postalCode:(null==t?void 0:t.postalCode)||"",countryCode:(null==t?void 0:t.countryCode)||"",phone:(null==t?void 0:t.phoneNumber)||"",stateOrProvince:(null==t?void 0:t.administrativeArea)||"",stateOrProvinceCode:(null==t?void 0:t.administrativeArea)||"",customFields:[]}},t}(),au=Xa((function(t){var n=t.getState().getHost;return new ou((0,e.createRequestSender)({host:n()}),t,new ru)}),[{id:"applepay"}]);var uu=n(15373);const su=function(t){function e(e){var n=t.call(this,e||"Not implemented.")||this;return n.name="NotImplementedError",n.type="not_implemented",n}return(0,o.__extends)(e,t),e}(u);var cu,du,lu;!function(t){t.SandboxMode="bolt_sandbox",t.StagingMode="bolt_staging",t.DevelopmentMode="bolt_development"}(cu||(cu={})),function(t){t.Small="small",t.Medium="medium",t.Large="large"}(du||(du={})),function(t){t.Pill="pill",t.Rect="rect"}(lu||(lu={}));const fu=function(){function t(t,e,n){void 0===n&&(n=window),this.paymentIntegrationService=t,this.boltScriptLoader=e,this.boltHostWindow=n}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d,l,f,p,h;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.bolt,n=t.containerId,r=t.methodId,a=(i=e||{}).buyNowInitializeOptions,u=i.style,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.bolt" argument is not provided.');if(!Boolean(a))throw new su("Only buy now flow is implemented for Bolt button");if(!(null==a?void 0:a.storefrontApiToken)||"string"!=typeof a.storefrontApiToken)throw new za('Unable to initialize payment because "options.storefrontApiToken" argument is not provided.');return s=this.paymentIntegrationService.getState(),c=s.getPaymentMethodOrThrow(r),d=c.initializationData,l=c.config,p=(f=d||{}).publishableKey,h=f.developerConfig,[4,this.boltScriptLoader.loadBoltClient(p,l.testMode,h,"BigCommerce",a.storefrontApiToken)];case 1:return o.sent(),this.renderButton(n,c,u),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r;"function"==typeof(null===(r=this.boltHostWindow.BoltConnect)||void 0===r?void 0:r.setupProductPageCheckout)&&(this.addButtonContainer(t,e,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())},t.prototype.addButtonContainer=function(t,e,n){var r=document.getElementById(t);if(r){var i=document.createElement("div"),o=document.createElement("object");i.setAttribute("id","product-page-checkout-wrapper"),i.setAttribute("class","bolt-button-wrapper"),i.setAttribute("style","display:none"),i.setAttribute("data-tid","product-page-checkout-wrapper"),o.setAttribute("data",this.getBoltObjectData(e,n)),o.setAttribute("class","bolt-product-checkout-button"),i.append(o),r.innerHTML="",r.append(i)}},t.prototype.getBoltObjectData=function(t,e){var n=t.initializationData,r=t.config,i=n||{},o=i.publishableKey,a=i.developerConfig,u=this.boltScriptLoader.getDomainURL(!!r.testMode,a),s=this.getButtonHeight(null==e?void 0:e.size),c=this.getButtonBorderRadius(null==e?void 0:e.shape,s);return(0,uu.stringifyUrl)({url:"https://"+u+"/v1/checkout_button",query:{publishable_key:o,variant:"ppc",height:s,border_radius:c}})},t.prototype.getButtonHeight=function(t){if(t)switch(t){case du.Small:return 25;case du.Large:return 45;case du.Medium:default:return 40}},t.prototype.getButtonBorderRadius=function(t,e){if(t)switch(t){case lu.Pill:return e?Math.round(e/2):void 0;case lu.Rect:default:return 4}},t}();const pu=function(t){function e(e){var n=t.call(this,e||"Unable to proceed because the client library of a payment method is not loaded or ready to be used.")||this;return n.name="PaymentMethodClientUnavailableError",n.type="payment_method_client_unavailable",n}return(0,o.__extends)(e,t),e}(u),hu=function(){function t(t,e){void 0===e&&(e=window),this.scriptLoader=t,this.boltHostWindow=e}return t.prototype.loadBoltClient=function(t,e,n,r,i){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(this.boltHostWindow.BoltCheckout)return[2,this.boltHostWindow.BoltCheckout];if(!t)throw new za('Unable to initialize payment because "publishableKey" argument is not provided.');return[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!e,n)+"/connect-bigcommerce.js",this.getScriptOptions("bolt-connect",t,r,i))];case 1:return o.sent(),[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!e,n)+"/track.js",this.getScriptOptions("bolt-track",t))];case 2:if(o.sent(),!this.boltHostWindow.BoltCheckout)throw new pu;return[2,this.boltHostWindow.BoltCheckout]}}))}))},t.prototype.loadBoltEmbedded=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return r={async:!0,attributes:{id:"bolt-embedded"}},[4,this.scriptLoader.loadScript("//"+this.getDomainURL(!!e,n)+"/embed.js",r)];case 1:if(i.sent(),!this.boltHostWindow.Bolt)throw new pu;return[2,this.boltHostWindow.Bolt(t)]}}))}))},t.prototype.getDomainURL=function(t,e){if(!t)return"connect.bolt.com";if(e)switch(e.developerMode){case cu.StagingMode:return"connect-staging.bolt.com";case cu.DevelopmentMode:return"connect."+e.developerDomain}return"connect-sandbox.bolt.com"},t.prototype.getScriptOptions=function(t,e,n,r){return{async:!0,attributes:(0,o.__assign)((0,o.__assign)({id:t,"data-publishable-key":e},n&&{"data-shopping-cart-id":n}),r&&{"data-storefront-api-token":r})}},t}(),yu=Xa((function(t){return new fu(t,new hu((0,ar.Vr)()))}),[{id:"bolt"}]);var mu,vu,gu,_u,bu,Su,wu;!function(t){t.BuyNow="BUY_NOW"}(mu||(mu={})),function(t){t.AUTHORIZE="authorize",t.CAPTURE="capture"}(vu||(vu={})),function(t){t.paypal="paypal",t.checkout="checkout",t.buynow="buynow",t.pay="pay",t.installment="installment"}(gu||(gu={})),function(t){t.gold="gold",t.blue="blue",t.silver="silver",t.black="black",t.white="white"}(_u||(_u={})),function(t){t.pill="pill",t.rect="rect"}(bu||(bu={})),function(t){t.OXXO="oxxo"}(Su||(Su={})),function(t){t.Approved="APPROVED",t.Created="CREATED",t.PayerActionRequired="PAYER_ACTION_REQUIRED"}(wu||(wu={}));const Cu=function(){function t(t,e,n,r){this.formPoster=t,this.paymentIntegrationService=e,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=r}return t.prototype.loadPayPalSdk=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:return r=this.paymentIntegrationService.getState(),i=e||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(t),u=this,[4,this.paypalCommerceScriptLoader.getPayPalSDK(a,i,n)];case 1:return u.paypalSdk=o.sent(),[2,this.paypalSdk]}}))}))},t.prototype.getPayPalSdkOrThrow=function(){if(!this.paypalSdk)throw new pu;return this.paypalSdk},t.prototype.createBuyNowCartOrThrow=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:if(!(e=t.getBuyNowCartRequestBody()))throw new qa(Fa.MissingCart);n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this.paymentIntegrationService.createBuyNowCart(e)];case 2:return[2,n.sent()];case 3:throw n.sent(),new eu;case 4:return[2]}}))}))},t.prototype.createOrder=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n=this.paymentIntegrationService.getState().getCartOrThrow().id,[4,this.paypalCommerceRequestSender.createOrder(t,(0,o.__assign)({cartId:n},e))];case 1:return[2,r.sent().orderId]}}))}))},t.prototype.updateOrder=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t,e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:t=this.paymentIntegrationService.getState(),e=t.getCartOrThrow(),n=t.getConsignmentsOrThrow()[0],r.label=1;case 1:return r.trys.push([1,3,,4]),[4,this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:n.availableShippingOptions,cartId:e.id,selectedShippingOption:n.selectedShippingOption})];case 2:return r.sent(),[3,4];case 3:throw r.sent(),new c;case 4:return[2]}}))}))},t.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.paypalCommerceRequestSender.getOrderStatus()];case 1:return[2,t.sent().status];case 2:throw t.sent(),new c;case 3:return[2]}}))}))},t.prototype.tokenizePayment=function(t,e){var n=this.paymentIntegrationService.getState().getCartOrThrow();if(!e)throw new qa(Fa.MissingOrderId);return this.formPoster.postForm("/checkout.php",(0,o.__assign)({payment_type:"paypal",action:"set_external_checkout",provider:t,order_id:e},n.source===mu.BuyNow&&{cart_id:n.id}))},t.prototype.submitPayment=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return n={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:t,paypal_account:{order_id:e}}},[4,this.paymentIntegrationService.submitPayment({methodId:t,paymentData:n})];case 1:return r.sent(),[2]}}))}))},t.prototype.getShippingOptionOrThrow=function(t){var e=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=e.availableShippingOptions||[],r=n.find((function(t){return t.isRecommended})),i=(t?n.find((function(e){return e.id===t})):n.find((function(t){var n;return t.id===(null===(n=e.selectedShippingOption)||void 0===n?void 0:n.id)})))||r||n[0];if(!i)throw new Error("Your order can't be shipped to this address");return i},t.prototype.getAddress=function(t){return{firstName:(null==t?void 0:t.firstName)||"",lastName:(null==t?void 0:t.lastName)||"",email:(null==t?void 0:t.email)||"",phone:"",company:"",address1:(null==t?void 0:t.address1)||"",address2:"",city:(null==t?void 0:t.city)||"",countryCode:(null==t?void 0:t.countryCode)||"",postalCode:(null==t?void 0:t.postalCode)||"",stateOrProvince:"",stateOrProvinceCode:(null==t?void 0:t.stateOrProvinceCode)||"",customFields:[]}},t.prototype.getBillingAddressFromOrderDetails=function(t){var e=t.payer;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1})},t.prototype.getShippingAddressFromOrderDetails=function(t){var e,n,r=t.payer,i=(null===(n=null===(e=t.purchase_units[0])||void 0===e?void 0:e.shipping)||void 0===n?void 0:n.address)||{};return this.getAddress({firstName:r.name.given_name,lastName:r.name.surname,email:r.email_address,address1:i.address_line_1,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})},t.prototype.getValidButtonStyle=function(t){var e=t||{},n=e.color,r=e.height,i=e.label,o=e.shape,a={color:n&&_u[n]?n:void 0,height:this.getValidHeight(r),label:i&&gu[i]?i:void 0,shape:o&&bu[o]?o:void 0};return(0,y.omitBy)(a,y.isNil)},t.prototype.getValidHeight=function(t){return t&&"number"==typeof t?t>55?55:t<25?25:t:40},t.prototype.removeElement=function(t){var e=t&&document.getElementById(t);e&&e.remove()},t}();var Eu,Iu="This API endpoint is for internal use only and may change in the future";!function(t){t.Json="application/json",t.JsonV1="application/vnd.bc.v1+json"}(Eu||(Eu={}));const Pu=Eu;var Au={"X-Checkout-SDK-Version":"1.401.0"};const Ou=function(){function t(t){this.requestSender=t}return t.prototype.createOrder=function(t,e){return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i;return(0,o.__generator)(this,(function(a){switch(a.label){case 0:return n="/api/storefront/payment/"+t,r=e,i=(0,o.__assign)({"X-API-INTERNAL":Iu,"Content-Type":Pu.Json},Au),[4,this.requestSender.post(n,{headers:i,body:r})];case 1:return[2,a.sent().body]}}))}))},t.prototype.updateOrder=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:return e=t,n=(0,o.__assign)({"X-API-INTERNAL":Iu,"Content-Type":Pu.Json},Au),[4,this.requestSender.put("/api/storefront/initialization/paypalcommerce",{headers:n,body:e})];case 1:return[2,r.sent().body]}}))}))},t.prototype.getOrderStatus=function(){return(0,o.__awaiter)(this,void 0,void 0,(function(){var t;return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return t=(0,o.__assign)({"X-API-INTERNAL":Iu,"Content-Type":Pu.Json},Au),[4,this.requestSender.get("/api/storefront/initialization/paypalcommerce",{headers:t})];case 1:return[2,e.sent().body]}}))}))},t}(),Tu=function(){function t(t){this.scriptLoader=t,this.window=window}return t.prototype.getPayPalSDK=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:return this.paypalSdk?[3,2]:(r=this,[4,this.loadPayPalSDK(this.getPayPalSdkScriptConfigOrThrow(t,e,n))]);case 1:r.paypalSdk=i.sent(),i.label=2;case 2:return[2,this.paypalSdk]}}))}))},t.prototype.loadPayPalSDK=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){return(0,o.__generator)(this,(function(e){switch(e.label){case 0:return this.window.paypalLoadScript?[3,2]:[4,this.scriptLoader.loadScript("https://unpkg.com/@paypal/paypal-js@5.0.5/dist/iife/paypal-js.min.js",{async:!0,attributes:{}})];case 1:if(e.sent(),!this.window.paypalLoadScript)throw new pu;e.label=2;case 2:return[4,this.window.paypalLoadScript(t)];case 3:if(e.sent(),!this.window.paypal)throw new pu;return[2,this.window.paypal]}}))}))},t.prototype.getPayPalSdkScriptConfigOrThrow=function(t,e,n){void 0===n&&(n=!0);var r=t.id,i=t.clientToken,a=t.initializationData;if(!(null==a?void 0:a.clientId))throw new qa(Fa.MissingPaymentMethod);var u=a.intent,s=a.clientId,c=a.merchantId,d=a.buyerCountry,l=a.attributionId,f=a.isVenmoEnabled,p=a.isHostedCheckoutEnabled,h=a.isPayPalCreditAvailable,y=a.isDeveloperModeApplicable,m=a.availableAlternativePaymentMethods,v=void 0===m?[]:m,g=a.enabledAlternativePaymentMethods,_=void 0===g?[]:g,b=p||n,S="paypalcommercecreditcards"===r,w=S?["card"]:[],C=S?[]:["card"],E=h?["credit","paylater"]:[],I=h?[]:["credit","paylater"],P=n||!b,A=P&&f?["venmo"]:[],O=P&&f?[]:["venmo"],T=P?_:[],x=P?v.filter((function(t){return!_.includes(t)})):v,R=(0,o.__spreadArrays)(C,I,O,x),k=(0,o.__spreadArrays)(w,E,A,T);return(0,o.__assign)({"client-id":s,"data-partner-attribution-id":l,"data-client-token":i,"merchant-id":c,"enable-funding":k.length>0?k:void 0,"disable-funding":R.length>0?R:void 0,commit:b,components:["buttons","hosted-fields","messages","payment-fields"],currency:e,intent:u},y&&{"buyer-country":d})},t}(),xu=function(t){var n=t.getState().getHost;return new Cu((0,i.createFormPoster)(),t,new Ou((0,e.createRequestSender)({host:n()})),new Tu((0,ar.Vr)()))},Ru=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){var e;return(0,o.__awaiter)(this,void 0,void 0,(function(){var n,r,i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(n=t.paypalcommerce,r=t.containerId,i=t.methodId,a=Boolean(null==n?void 0:n.buyNowInitializeOptions),!i)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!r)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.paypalcommerce" argument is not provided.');if(a&&!n.currencyCode)throw new za('Unable to initialize payment because "options.paypalcommerce.currencyCode" argument is not provided.');if(a&&"function"!=typeof(null===(e=n.buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return a?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return u=a?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(i,u,!1)];case 3:return o.sent(),this.renderButton(r,i,n),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,u=n.onComplete,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommerce")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},l={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},f={onShippingAddressChange:function(t){return r.onShippingAddressChange(t)},onShippingOptionsChange:function(t){return r.onShippingOptionsChange(t)},onApprove:function(t,n){return r.onHostedCheckoutApprove(t,n,e,u)}},p=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:s.FUNDING.PAYPAL,style:this.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&l),c&&f),h=s.Buttons(p);h.isEligible()?h.render("#"+t):this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t.prototype.onHostedCheckoutApprove=function(t,e,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!t.orderID)throw new qa(Fa.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,e.order.get()];case 1:u=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),s=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateBillingAddress(s)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,t.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},t.prototype.onShippingAddressChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:e=this.paypalCommerceIntegrationService.getAddress({city:t.shippingAddress.city,countryCode:t.shippingAddress.country_code,postalCode:t.shippingAddress.postal_code,stateOrProvinceCode:t.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(e)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(e)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},t.prototype.onShippingOptionsChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(t.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(e.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},t}(),ku=Xa((function(t){return new Ru(t,xu(t))}),[{id:"paypalcommerce"}]),Mu=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.paypalcommercecredit,n=t.containerId,r=t.methodId,a=(i=e||{}).buyNowInitializeOptions,u=i.currencyCode,s=i.messagingContainerId,c=!!a,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.paypalcommercecredit" argument is not provided.');if(c&&!u)throw new za('Unable to initialize payment because "options.paypalcommercecredit.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?u:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,e),this.renderMessages(s),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,u=n.onComplete,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),c=(this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData||{}).isHostedCheckoutEnabled,d={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercecredit")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},l={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},f={onShippingAddressChange:function(t){return r.onShippingAddressChange(t)},onShippingOptionsChange:function(t){return r.onShippingOptionsChange(t)},onApprove:function(t,n){return r.onHostedCheckoutApprove(t,n,e,u)}},p=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT],h=!1;p.forEach((function(e){if(!h){var n=(0,o.__assign)((0,o.__assign)((0,o.__assign)({fundingSource:e,style:r.paypalCommerceIntegrationService.getValidButtonStyle(a)},d),i&&l),c&&f),u=s.Buttons(n);u.isEligible()&&(u.render("#"+t),h=!0)}})),h||this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t.prototype.onHostedCheckoutApprove=function(t,e,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!t.orderID)throw new qa(Fa.MissingOrderId);return i=this.paymentIntegrationService.getState(),a=i.getCartOrThrow(),[4,e.order.get()];case 1:u=o.sent(),o.label=2;case 2:return o.trys.push([2,9,,10]),s=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateBillingAddress(s)];case 3:return o.sent(),a.lineItems.physicalItems.length>0?(c=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(u),[4,this.paymentIntegrationService.updateShippingAddress(c)]):[3,6];case 4:return o.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:o.sent(),o.label=6;case 6:return[4,this.paymentIntegrationService.submitOrder({},{params:{methodId:n}})];case 7:return o.sent(),[4,this.paypalCommerceIntegrationService.submitPayment(n,t.orderID)];case 8:return o.sent(),r&&"function"==typeof r&&r(),[2,!0];case 9:throw d=o.sent(),new Error(d);case 10:return[2]}}))}))},t.prototype.onShippingAddressChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:e=this.paypalCommerceIntegrationService.getAddress({city:t.shippingAddress.city,countryCode:t.shippingAddress.country_code,postalCode:t.shippingAddress.postal_code,stateOrProvinceCode:t.shippingAddress.state}),i.label=1;case 1:return i.trys.push([1,6,,7]),[4,this.paymentIntegrationService.updateBillingAddress(e)];case 2:return i.sent(),[4,this.paymentIntegrationService.updateShippingAddress(e)];case 3:return i.sent(),n=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(),[4,this.paymentIntegrationService.selectShippingOption(n.id)];case 4:return i.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 5:return i.sent(),[3,7];case 6:throw r=i.sent(),new Error(r);case 7:return[2]}}))}))},t.prototype.onShippingOptionsChange=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n;return(0,o.__generator)(this,(function(r){switch(r.label){case 0:e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(t.selectedShippingOption.id),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,this.paymentIntegrationService.selectShippingOption(e.id)];case 2:return r.sent(),[4,this.paypalCommerceIntegrationService.updateOrder()];case 3:return r.sent(),[3,5];case 4:throw n=r.sent(),new Error(n);case 5:return[2]}}))}))},t.prototype.renderMessages=function(t){var e=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(t&&document.getElementById(t)){var n={amount:this.paymentIntegrationService.getState().getCartOrThrow().cartAmount,placement:"cart",style:{layout:"text"}};e.Messages(n).render("#"+t)}},t}(),Nu=Xa((function(t){return new Mu(t,xu(t))}),[{id:"paypalcommercecredit"}]),Du=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.paypalcommercevenmo,n=t.containerId,r=t.methodId,a=(i=e||{}).buyNowInitializeOptions,u=i.currencyCode,s=!!a,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.paypalcommercevenmo" argument is not provided.');if(s&&!u)throw new za('Unable to initialize payment because "options.paypalcommercevenmo.currencyCode" argument is not provided.');if(s&&"function"!=typeof(null==a?void 0:a.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return s?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return c=s?u:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,c,!1)];case 3:return o.sent(),this.renderButton(n,r,e),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.buyNowInitializeOptions,a=n.style,u=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=u.FUNDING.VENMO,c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercevenmo")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},d={onClick:function(){return r.handleClick(i)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l=(0,o.__assign)((0,o.__assign)({fundingSource:s,style:this.getValidVenmoButtonStyles(a)},c),i&&d),f=u.Buttons(l);f.isEligible()?f.render("#"+t):this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.getValidVenmoButtonStyles=function(t){var e=this.paypalCommerceIntegrationService.getValidButtonStyle(t);return e.color===_u.gold?(0,o.__assign)((0,o.__assign)({},e),{color:void 0}):e},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t}(),Lu=Xa((function(t){return new Du(t,xu(t))}),[{id:"paypalcommercevenmo"}]),zu=function(){function t(t,e){this.paymentIntegrationService=t,this.paypalCommerceIntegrationService=e}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r,i,a,u,s,c,d;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(e=t.paypalcommercealternativemethods,n=t.containerId,r=t.methodId,a=(i=e||{}).apm,u=i.buyNowInitializeOptions,s=i.currencyCode,c=!!u,!r)throw new za('Unable to initialize payment because "options.methodId" argument is not provided.');if(!n)throw new za('Unable to initialize payment because "options.containerId" argument is not provided.');if(!e)throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods" argument is not provided.');if(!a)throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods.apm" argument is not provided.');if(c&&!s)throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods.currencyCode" argument is not provided.');if(c&&"function"!=typeof(null==u?void 0:u.getBuyNowCartRequestBody))throw new za('Unable to initialize payment because "options.paypalcommercealternativemethods.buyNowInitializeOptions.getBuyNowCartRequestBody" argument is not provided or it is not a function.');return c?[3,2]:[4,this.paymentIntegrationService.loadDefaultCheckout()];case 1:o.sent(),o.label=2;case 2:return d=c?s:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,[4,this.paypalCommerceIntegrationService.loadPayPalSdk(r,d,!1)];case 3:return o.sent(),this.renderButton(n,r,e),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e,n){var r=this,i=n.apm,a=n.buyNowInitializeOptions,u=n.style,s=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();if(!Object.values(s.FUNDING).includes(i))throw new za('Unable to initialize PayPal button because "options.paypalcommercealternativemethods.apm" argument is not valid funding source.');var c={createOrder:function(){return r.paypalCommerceIntegrationService.createOrder("paypalcommercealternativemethod")},onApprove:function(t){var n=t.orderID;return r.paypalCommerceIntegrationService.tokenizePayment(e,n)}},d={onClick:function(){return r.handleClick(a)},onCancel:function(){return r.paymentIntegrationService.loadDefaultCheckout()}},l=(0,o.__assign)((0,o.__assign)({fundingSource:i,style:this.paypalCommerceIntegrationService.getValidButtonStyle(u)},c),a&&d),f=s.Buttons(l);f.isEligible()?f.render("#"+t):this.paypalCommerceIntegrationService.removeElement(t)},t.prototype.handleClick=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return t?[4,this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(t)]:[3,3];case 1:return e=n.sent(),[4,this.paymentIntegrationService.loadCheckout(e.id)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},t}(),ju=Xa((function(t){return new zu(t,xu(t))}),[{id:"paypalcommercealternativemethods"}]);var Uu,Fu,qu,Bu,Gu;!function(t){t.HORIZONTAL="horizontal",t.VERTICAL="vertical"}(Uu||(Uu={})),function(t){t.SMALL="small",t.MEDIUM="medium",t.LARGE="large",t.RESPONSIVE="responsive"}(Fu||(Fu={})),function(t){t.GOLD="gold",t.BLUE="blue",t.SIlVER="silver",t.BLACK="black"}(qu||(qu={})),function(t){t.CHECKOUT="checkout",t.PAY="pay",t.BUYNOW="buynow",t.PAYPAL="paypal",t.CREDIT="credit"}(Bu||(Bu={})),function(t){t.PILL="pill",t.RECT="rect"}(Gu||(Gu={}));const Vu=function(){function t(t,e,n){this.paymentIntegrationService=t,this.paypalExpressScriptLoader=e,this.formPoster=n}return t.prototype.initialize=function(t){return(0,o.__awaiter)(this,void 0,void 0,(function(){var e,n,r;return(0,o.__generator)(this,(function(i){switch(i.label){case 0:if(e=this.paymentIntegrationService.getState(),n=e.getPaymentMethodOrThrow(t.methodId),!t.paypal)throw new za;if(!n.config.merchantId)throw new qa(Fa.MissingPaymentMethod);return[4,this.paypalExpressScriptLoader.loadPaypalSDK(n.config.merchantId)];case 1:return r=i.sent(),this.renderButton(t,r),[2]}}))}))},t.prototype.deinitialize=function(){return Promise.resolve()},t.prototype.renderButton=function(t,e){var n,r=this,i=t.containerId,o=t.methodId,a=t.paypal,u=a.allowCredit,s=a.clientId,c=a.onPaymentError,d=a.shouldProcessPayment,l=a.style,f=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId);if(!f.config.merchantId)throw new qa(Fa.MissingPaymentMethod);var p=f.config.merchantId,h=f.config.testMode?"sandbox":"production",y=((n={})[h]=s,n),m=e.FUNDING.CREDIT||"credit",v=u?[m]:[],g=u?[]:[m];return e.Button.render({env:h,client:y,commit:d,funding:{allowed:v,disallowed:g},style:this.getStyle(l),payment:function(t,e){return r.setupPayment(p,e,c)},onAuthorize:function(t,e){return r.tokenizePayment(t,o,e,d)}},i)},t.prototype.getStyle=function(t){var e=t||{},n=e.color,r=e.fundingicons,i=e.label,o=e.layout,a=e.shape,u=e.size,s=e.tagline;return{color:n,fundingicons:r,label:i,layout:o,shape:a||Gu.RECT,size:"small"===u?Fu.RESPONSIVE:u,tagline:s}},t.prototype.setupPayment=function(t,e,n){return(0,o.__awaiter)(this,void 0,void 0,(function(){var r,i,a,u;return(0,o.__generator)(this,(function(s){switch(s.label){case 0:if(!e)throw new Ua(ja.CheckoutButtonNotInitialized);s.label=1;case 1:return s.trys.push([1,4,,5]),[4,this.paymentIntegrationService.loadDefaultCheckout()];case 2:return r=s.sent(),i=r.getCartOrThrow().id,a=r.getHost()||"",[4,e.request.post(a+"/api/storefront/payment/paypalexpress",{merchantId:t,cartId:i},{headers:(0,o.__assign)({"X-API-INTERNAL":Iu},Au)})];case 3:return[2,s.sent().id];case 4:throw u=s.sent(),n&&n(u),u;case 5:return[2]}}))}))},t.prototype.tokenizePayment=function(t,e,n,r){return(0,o.__awaiter)(this,void 0,void 0,(function(){var i,a,u;return(0,o.__generator)(this,(function(o){switch(o.label){case 0:if(!n)throw new Ua(ja.CheckoutButtonNotInitialized);if(!t.paymentID||!t.payerID)throw new qa(Fa.MissingPayment);return i=this.paymentIntegrationService.getState(),a=i.getPaymentMethodOrThrow(e),[4,n.payment.get(t.paymentID)];case 1:return u=o.sent(),[2,this.formPoster.postForm("/checkout.php",{payment_type:"paypal",provider:a.id,action:r?"process_payment":"set_external_checkout",paymentId:t.paymentID,payerId:t.payerID,payerInfo:JSON.stringify(u.payer.payer_info)})]}}))}))},t}();const Yu=function(){function t(t){this.scriptLoader=t,this.window=window}return t.prototype.loadPaypalSDK=function(t){return void 0===t&&(t=""),(0,o.__awaiter)(this,void 0,void 0,(function(){var e;return(0,o.__generator)(this,(function(n){switch(n.label){case 0:return e=(0,o.__assign)({async:!0,attributes:{"data-merchant-id":t}},t&&{attributes:{"data-merchant-id":t}}),[4,this.scriptLoader.loadScript("//www.paypalobjects.com/api/checkout.min.js",e)];case 1:if(n.sent(),!this.window.paypal)throw new pu;return[2,this.window.paypal]}}))}))},t}(),Hu=Xa((function(t){return new Vu(t,new Yu((0,ar.Vr)()),(0,i.createFormPoster)())}),[{id:"paypalexpress"}]);function Wu(n){var r=null!=n?n:{},o=r.host,a=r.locale,u=void 0===a?"en":a,s=$n(),c=(0,e.createRequestSender)({host:o}),d=(0,i.createFormPoster)({host:o}),l=function(e,n){void 0===n&&(n=t);for(var r=new Qa,i=function(t){if(!function(t){return"resolveIds"in t}(t))return"continue";for(var n=0,i=t.resolveIds;n {\nreturn ","import objectAssign from 'object-assign';\nimport OffsitePaymentInitializer from '../payment/offsite-payment-initializer';\nimport PaymentSubmitter from '../payment/payment-submitter';\nimport ClientTokenGenerator from '../payment/client-token-generator';\nimport StoreRequestSender from '../store/store-request-sender';\nimport DEFAULT_CONFIG from './default-config';\n\nexport default class Client {\n /**\n * @param {Object} config\n * @returns {Client}\n */\n static create(config) {\n const clientConfig = objectAssign({}, DEFAULT_CONFIG, config);\n const offsitePaymentInitializer = OffsitePaymentInitializer.create(clientConfig);\n const paymentSubmitter = PaymentSubmitter.create(clientConfig);\n const clientTokenGenerator = ClientTokenGenerator.create(clientConfig);\n const storeRequestSender = StoreRequestSender.create(clientConfig);\n\n return new Client(\n clientConfig,\n paymentSubmitter,\n offsitePaymentInitializer,\n clientTokenGenerator,\n storeRequestSender,\n );\n }\n\n /**\n * @param {Object} config\n * @param {PaymentSubmitter} paymentSubmitter\n * @param {OffsitePaymentInitializer} offsitePaymentInitializer\n * @param {ClientTokenGenerator} clientTokenGenerator\n * @param {StoreRequestSender} storeRequestSender\n */\n constructor(\n config,\n paymentSubmitter,\n offsitePaymentInitializer,\n clientTokenGenerator,\n storeRequestSender,\n ) {\n /**\n * @private\n * @type {Object}\n */\n this.config = config;\n\n /**\n * @private\n * @type {PaymentSubmitter}\n */\n this.paymentSubmitter = paymentSubmitter;\n\n /**\n * @private\n * @type {OffsitePaymentInitializer}\n */\n this.offsitePaymentInitializer = offsitePaymentInitializer;\n\n /**\n * @private\n * @type {ClientTokenGenerator}\n */\n this.clientTokenGenerator = clientTokenGenerator;\n\n /**\n * @private\n * @type {StoreRequestSender}\n */\n this.storeRequestSender = storeRequestSender;\n }\n\n /**\n * @param {string} host\n * @returns {void}\n */\n setHost(host) {\n this.config.host = host;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @param {Function} [callback]\n * @param {string} target\n * @returns {void}\n */\n initializeOffsitePayment(data, callback, target) {\n this.offsitePaymentInitializer.initializeOffsitePayment(data, callback, target);\n }\n\n /**\n * @param {PaymentRequestData} data\n * @param {Function} [callback]\n * @returns {void}\n */\n submitPayment(data, callback) {\n this.paymentSubmitter.submitPayment(data, callback);\n }\n\n /**\n * @param {PaymentRequestData} data\n * @param {Function} [callback]\n * @returns {void}\n */\n generateClientToken(data, callback) {\n this.clientTokenGenerator.generateClientToken(data, callback);\n }\n\n /**\n * @param {Object} data\n * @param {string} data.storeId\n * @param {string} data.customerId\n * @param {string} data.currencyCode\n * @param {Function} [callback]\n * @return {void}\n */\n loadInstruments(data, callback) {\n this.storeRequestSender.loadInstruments(data, callback);\n }\n\n /**\n * @param {Object} data\n * @param {string} data.storeId\n * @param {string} data.customerId\n * @param {string} data.currencyCode\n * @param {AddressData} data.shippingAddress\n * @param {Function} [callback]\n * @return {void}\n */\n loadInstrumentsWithAddress(data, callback) {\n this.storeRequestSender.loadInstrumentsWithAddress(data, callback);\n }\n\n /**\n * @param {Object} data\n * @param {string} data.storeId\n * @param {string} data.customerId\n * @param {string} data.instrumentId\n * @param {string} data.currencyCode\n * @param {Function} [callback]\n * @return {void}\n */\n deleteShopperInstrument(data, callback) {\n this.storeRequestSender.deleteShopperInstrument(data, callback);\n }\n}\n","const DEFAULT_CONFIG = {\n host: '',\n};\n\nexport default DEFAULT_CONFIG;\n","export const APPLICATION_JSON = 'application/json';\n","import { APPLICATION_JSON } from './content-types';\nimport { GET } from './method-types';\n\nconst DEFAULT_OPTIONS = {\n headers: {\n Accept: APPLICATION_JSON,\n 'Content-Type': APPLICATION_JSON,\n },\n method: GET,\n};\n\nexport default DEFAULT_OPTIONS;\n","export const GET = 'GET';\nexport const POST = 'POST';\nexport const DELETE = 'DELETE';\n","import objectAssign from 'object-assign';\nimport { APPLICATION_JSON } from './content-types';\nimport { includes } from '../utils';\n\nexport default class PayloadTransformer {\n /**\n * @returns {PayloadTransformer}\n */\n static create() {\n return new PayloadTransformer();\n }\n\n /**\n * @param {Object} data\n * @param {string} [contentType = APPLICATION_JSON]\n * @returns {Object}\n */\n toRequest(data, contentType = APPLICATION_JSON) {\n if (data && includes(contentType, APPLICATION_JSON)) {\n return JSON.stringify(data);\n }\n\n return data;\n }\n\n /**\n * @param {XMLHttpRequest} xhr\n * @returns {Object}\n * @property {Object} data\n * @property {number} status\n * @property {string} statusText\n */\n fromResponse(xhr) {\n const headers = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n const contentType = xhr.getResponseHeader('Content-Type');\n const { status, statusText } = xhr;\n\n let data = 'response' in xhr ? xhr.response : xhr.responseText;\n\n if (data && includes(contentType, APPLICATION_JSON)) {\n data = JSON.parse(data);\n }\n\n return {\n data, headers, status, statusText,\n };\n }\n\n /**\n * @private\n * @param {string} rawHeaders\n * @returns {Object}\n */\n parseResponseHeaders(rawHeaders) {\n const lines = rawHeaders ? rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ').split(/\\r?\\n/) : [];\n\n return lines.reduce((headers, line) => {\n const parts = line.split(':');\n const key = (parts.shift() || '').trim();\n\n if (!key) {\n return headers;\n }\n\n return objectAssign({}, headers, {\n [key.toLowerCase()]: parts.join(':').trim(),\n });\n }, {});\n }\n}\n","export default class RequestFactory {\n /**\n * @returns {RequestFactory}\n */\n static create() {\n return new RequestFactory();\n }\n\n /**\n * @param {string} url\n * @param {Object} options\n * @param {Function} [callback]\n * @returns {XMLHttpRequest}\n */\n createRequest(url, options, callback) {\n const xhr = new XMLHttpRequest();\n\n xhr.onerror = () => {\n if (callback) {\n callback(new Error(xhr.statusText));\n }\n };\n\n xhr.onload = () => {\n if (callback) {\n callback();\n }\n };\n\n xhr.open(options.method, url, true);\n this.setOptions(xhr, options);\n\n return xhr;\n }\n\n /**\n * @private\n * @param {XMLHttpRequest} xhr\n * @param {Object} headers\n * @returns {void}\n */\n setHeaders(xhr, headers) {\n const headerKeys = Object.keys(headers);\n\n headerKeys.forEach((key) => {\n const value = headers[key];\n\n xhr.setRequestHeader(key, value);\n });\n }\n\n /**\n * @private\n * @param {XMLHttpRequest} xhr\n * @param {Object} options\n * @returns {void}\n */\n setOptions(xhr, options) {\n xhr.withCredentials = options.withCredentials;\n\n if (options.headers) {\n this.setHeaders(xhr, options.headers);\n }\n }\n}\n","import deepAssign from 'deep-assign';\nimport objectAssign from 'object-assign';\nimport { POST } from './method-types';\nimport DEFAULT_OPTIONS from './default-options';\nimport PayloadTransformer from './payload-transformer';\nimport RequestFactory from './request-factory';\n\nexport default class RequestSender {\n /**\n * @returns {RequestSender}\n */\n static create() {\n const requestFactory = RequestFactory.create();\n const payloadTransformer = PayloadTransformer.create();\n\n return new RequestSender(requestFactory, payloadTransformer);\n }\n\n /**\n * @param {RequestFactory} requestFactory\n * @param {PayloadTransformer} payloadTransformer\n */\n constructor(requestFactory, payloadTransformer) {\n /**\n * @private\n * @type {RequestFactory}\n */\n this.requestFactory = requestFactory;\n\n /**\n * @private\n * @type {PayloadTransformer}\n */\n this.payloadTransformer = payloadTransformer;\n }\n\n /**\n * @param {string} url\n * @param {Object} data\n * @param {Object} [options]\n * @param {Function} [callback]\n * @returns {void}\n */\n sendRequest(url, data, options, callback) {\n const mergedOptions = deepAssign({}, DEFAULT_OPTIONS, options);\n\n const xhr = this.requestFactory.createRequest(url, mergedOptions, (error) => {\n const response = this.payloadTransformer.fromResponse(xhr);\n\n if (!callback) {\n return;\n }\n\n if (error || !this.isSuccessfulRequest(xhr)) {\n callback(response);\n return;\n }\n\n callback(null, response);\n });\n\n const payload = this.payloadTransformer.toRequest(data, mergedOptions.headers['Content-Type']);\n\n xhr.send(payload);\n }\n\n /**\n * @param {string} url\n * @param {Object} data\n * @param {Object} [options]\n * @param {Function} [callback]\n * @returns {void}\n */\n postRequest(url, data, options, callback) {\n const mergedOptions = objectAssign({}, options, {\n method: POST,\n });\n\n this.sendRequest(url, data, mergedOptions, callback);\n }\n\n /**\n * @private\n * @param {XMLHttpRequest} xhr\n * @returns {boolean}\n */\n isSuccessfulRequest(xhr) {\n return xhr.status >= 200 && xhr.status < 300;\n }\n}\n","/**\n * @param {array|string} items\n * @param {array|string} item\n * @returns {boolean}\n */\nexport default function includes(items, item) {\n if (!Array.isArray(items) && typeof items !== 'string') {\n return false;\n }\n\n return items.indexOf(item) !== -1;\n}\n","export { default as includes } from './includes';\nexport { default as isNil } from './is-nil';\nexport { default as isObject } from './is-object';\nexport { default as omitEmptyStringAndNil } from './omit-emptystring-and-nil';\nexport { default as omitNil } from './omit-nil';\nexport { default as omitProperty } from './omit-property';\nexport { default as toNumber } from './to-number';\nexport { default as toSnakeCase } from './to-snake-case';\nexport { default as toString } from './to-string';\n","/**\n * @param {*} value\n * @returns {boolean}\n */\nexport default function isEmptyString(value) {\n return value === '';\n}\n","import isEmptyString from './is-empty-string';\nimport isNil from './is-nil';\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nexport default function isEmptyStringOrNil(value) {\n return isEmptyString(value) || isNil(value);\n}\n","/**\n * @param {*} value\n * @returns {boolean}\n */\nexport default function isNil(value) {\n if (value === null || value === undefined) {\n return true;\n }\n\n return false;\n}\n","/**\n * @param {*} value\n * @returns {boolean}\n */\nexport default function isObject(value) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n","import isEmptyStringOrNil from './is-emptystring-or-nil';\nimport omitProperty from './omit-property';\n\n/**\n * @param {Object} object\n * @returns {Object}\n */\nexport default function omitEmptyStringAndNil(object) {\n return omitProperty(object, isEmptyStringOrNil);\n}\n","import isNil from './is-nil';\nimport omitProperty from './omit-property';\n\n/**\n * @param {Object} object\n * @returns {Object}\n */\nexport default function omitNil(object) {\n return omitProperty(object, isNil);\n}\n","import isObject from './is-object';\n\n/**\n * @param {Object} object\n * @param {Function} predicateFn\n * @returns {Object}\n */\nexport default function omitProperty(object, predicateFn) {\n if (!isObject(object)) {\n return object;\n }\n\n const keys = Object.keys(object);\n\n return keys.reduce((result, key) => {\n const value = object[key];\n\n if (!predicateFn(value)) {\n result[key] = value;\n }\n\n return result;\n }, {});\n}\n","/**\n * @param {*} value\n * @returns {number}\n */\nexport default function toNumber(value) {\n return parseFloat(value) || 0;\n}\n","/**\n * @param {string} string\n * @returns {string}\n */\nexport default function toSnakeCase(string) {\n if (typeof string !== 'string') {\n return string;\n }\n\n return string.replace(/([a-z\\d])([A-Z]+)/g, '$1_$2')\n .replace(/[-\\s]+/g, '_')\n .toLowerCase();\n}\n","/**\n * @param {*} value\n * @returns {string}\n */\nexport default function toString(value) {\n if (typeof value === 'string') {\n return value;\n }\n\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return value.toString();\n }\n\n return '';\n}\n","import Client from './client/client';\n\n/**\n * @param {Object} [config]\n * @returns {Client}\n */\nexport function createClient(config) {\n return Client.create(config);\n}\n","import RequestSender from '../common/http-request/request-sender';\nimport ClientTokenMapper from './v2/payment-mappers/client-token-mapper';\nimport UrlHelper from './url-helper';\n\nexport default class ClientTokenGenerator {\n /**\n * @param {Object} config\n * @returns {PaymentSubmitter}\n */\n static create(config) {\n const urlHelper = UrlHelper.create(config);\n const requestSender = RequestSender.create();\n const clientTokenMapper = ClientTokenMapper.create();\n\n return new ClientTokenGenerator(urlHelper, requestSender, clientTokenMapper);\n }\n\n /**\n * @param {UrlHelper} urlHelper\n * @param {RequestSender} requestSender\n * @param {ClientTokenMapper} clientTokenMapper\n * @returns {void}\n */\n constructor(urlHelper, requestSender, clientTokenMapper) {\n /**\n * @private\n * @type {UrlHelper}\n */\n this.urlHelper = urlHelper;\n\n /**\n * @private\n * @type {RequestSender}\n */\n this.requestSender = requestSender;\n\n /**\n * @private\n * @type {ClientTokenMapper}\n */\n this.clientTokenMapper = clientTokenMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @param {Function} [callback]\n * @returns {void}\n */\n generateClientToken(data, callback) {\n const url = this.urlHelper.getGenerateClientTokenUrl();\n const payload = this.clientTokenMapper.mapToClientToken(data);\n\n this.requestSender.postRequest(url, payload, {}, callback);\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { HOSTED } from './payment-types';\nimport PayloadMapper from './offsite-payment-mappers/payload-mapper';\nimport UrlHelper from './url-helper';\n\nexport default class OffsitePaymentInitializer {\n /**\n * @param {Object} config\n * @returns {OffsitePaymentInitializer}\n */\n static create(config) {\n const urlHelper = UrlHelper.create(config);\n const formPoster = createFormPoster();\n const payloadMapper = PayloadMapper.create();\n\n return new OffsitePaymentInitializer(urlHelper, formPoster, payloadMapper);\n }\n\n /**\n * @param {UrlHelper} urlHelper\n * @param {FormPoster} formPoster\n * @param {PayloadMapper} payloadMapper\n * @returns {void}\n */\n constructor(urlHelper, formPoster, payloadMapper) {\n /**\n * @private\n * @type {UrlHelper}\n */\n this.urlHelper = urlHelper;\n\n /**\n * @private\n * @type {FormPoster}\n */\n this.formPoster = formPoster;\n\n /**\n * @private\n * @type {PayloadMapper}\n */\n this.payloadMapper = payloadMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @param {Function} [callback]\n * @param {string} target\n * @returns {void}\n * @throws {Error}\n */\n initializeOffsitePayment(data, callback, target) {\n const { paymentMethod = {} } = data;\n\n if (paymentMethod.type !== HOSTED) {\n throw new Error(`${paymentMethod.type} is not supported.`);\n }\n\n const payload = this.payloadMapper.mapToPayload(data);\n const url = this.urlHelper.getOffsitePaymentUrl();\n\n this.formPoster.postForm(url, payload, callback, target);\n }\n}\n","import { omitNil, toSnakeCase } from '../../common/utils';\n\nexport default class AddressMapper {\n /**\n * @returns {AddressMapper}\n */\n static create() {\n return new AddressMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToBillingAddress(data) {\n return this.mapToAddress(data, 'billingAddress');\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToShippingAddress(data) {\n return this.mapToAddress(data, 'shippingAddress');\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @param {string} addressKey\n * @returns {Object}\n */\n mapToAddress(data, addressKey) {\n const address = data[addressKey] || {};\n const formattedAddressKey = toSnakeCase(addressKey);\n\n return omitNil({\n [`${formattedAddressKey}_city`]: address.city,\n [`${formattedAddressKey}_company`]: address.company,\n [`${formattedAddressKey}_country_code`]: address.countryCode,\n [`${formattedAddressKey}_country`]: address.country,\n [`${formattedAddressKey}_first_name`]: address.firstName,\n [`${formattedAddressKey}_last_name`]: address.lastName,\n [`${formattedAddressKey}_phone`]: address.phone,\n [`${formattedAddressKey}_state_code`]: address.provinceCode,\n [`${formattedAddressKey}_state`]: address.province,\n [`${formattedAddressKey}_street_1`]: address.addressLine1,\n [`${formattedAddressKey}_street_2`]: address.addressLine2,\n [`${formattedAddressKey}_zip`]: address.postCode,\n });\n }\n}\n","import { omitNil } from '../../common/utils';\n\nexport default class CustomerMapper {\n /**\n * @returns {CustomerMapper}\n */\n static create() {\n return new CustomerMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToCustomer(data) {\n const { customer = {}, quoteMeta = {}, store = {} } = data;\n\n return omitNil({\n customer_browser_info: navigator.userAgent,\n customer_email: customer.email,\n customer_first_name: customer.firstName,\n customer_geo_ip_country_code: quoteMeta.request ? quoteMeta.request.geoCountryCode : null,\n customer_id: customer.customerId,\n customer_last_name: customer.lastName,\n customer_locale: store.storeLanguage,\n customer_name: customer.name,\n customer_phone: customer.phoneNumber,\n customer_reference: customer.email,\n });\n }\n}\n","import { omitNil } from '../../common/utils';\n\nexport default class MetaMapper {\n /**\n * @returns {MetaMapper}\n */\n static create() {\n return new MetaMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToMeta(data) {\n const { source } = data;\n\n return omitNil({\n meta_referrer: document.referrer,\n meta_source: source,\n meta_user_agent: navigator.userAgent,\n });\n }\n}\n","import objectAssign from 'object-assign';\nimport { omitNil, toString } from '../../common/utils';\nimport AddressMapper from './address-mapper';\nimport CustomerMapper from './customer-mapper';\nimport MetaMapper from './meta-mapper';\nimport PaymentMethodIdMapper from '../payment-method-mappers/payment-method-id-mapper';\nimport StoreMapper from './store-mapper';\n\nexport default class PayloadMapper {\n /**\n * @returns {PayloadMapper}\n */\n static create() {\n const addressMapper = AddressMapper.create();\n const customerMapper = CustomerMapper.create();\n const metaMapper = MetaMapper.create();\n const paymentMethodIdMapper = PaymentMethodIdMapper.create();\n const storeMapper = StoreMapper.create();\n\n return new PayloadMapper(addressMapper, customerMapper, metaMapper, paymentMethodIdMapper, storeMapper);\n }\n\n /**\n * @param {AddressMapper} addressMapper\n * @param {CustomerMapper} customerMapper\n * @param {MetaMapper} metaMapper\n * @param {PaymentMethodIdMapper} paymentMethodIdMapper\n * @param {StoreMapper} storeMapper\n * @returns {Object}\n */\n constructor(addressMapper, customerMapper, metaMapper, paymentMethodIdMapper, storeMapper) {\n /**\n * @private\n * @type {AddressMapper}\n */\n this.addressMapper = addressMapper;\n\n /**\n * @private\n * @type {CustomerMapper}\n */\n this.customerMapper = customerMapper;\n\n /**\n * @private\n * @type {MetaMapper}\n */\n this.metaMapper = metaMapper;\n\n /**\n * @private\n * @type {PaymentMethodIdMapper}\n */\n this.paymentMethodIdMapper = paymentMethodIdMapper;\n\n /**\n * @private\n * @type {StoreMapper}\n */\n this.storeMapper = storeMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToPayload(data) {\n const {\n authToken, order = {}, payment = {}, paymentMethod = {},\n } = data;\n\n const payload = objectAssign(\n {\n amount: order.grandTotal ? order.grandTotal.integerAmount : null,\n tax: order.taxTotal ? order.taxTotal.integerAmount : null,\n bc_auth_token: authToken,\n currency: order.currency,\n gateway: this.paymentMethodIdMapper.mapToId(paymentMethod),\n notify_url: order.callbackUrl,\n order_id: order.orderId ? toString(order.orderId) : null,\n page_title: document.title ? document.title : null,\n payment_method_id: paymentMethod.id,\n reference_id: order.orderId ? toString(order.orderId) : null,\n return_url: paymentMethod.returnUrl || (order.payment ? order.payment.returnUrl : null),\n },\n this.addressMapper.mapToBillingAddress(data),\n this.customerMapper.mapToCustomer(data),\n this.metaMapper.mapToMeta(data),\n this.addressMapper.mapToShippingAddress(data),\n this.storeMapper.mapToStore(data),\n );\n\n const { formattedPayload = {} } = payment;\n\n objectAssign(payload, formattedPayload);\n\n return omitNil(payload);\n }\n}\n","import { omitNil, toString } from '../../common/utils';\n\nexport default class StoreMapper {\n /**\n * @returns {StoreMapper}\n */\n static create() {\n return new StoreMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToStore(data) {\n const { store = {} } = data;\n\n return omitNil({\n store_hash: store.storeHash,\n store_id: store.storeId ? toString(store.storeId) : null,\n });\n }\n}\n","export const BRAINTREE = 'braintree';\nexport const BRAINTREE_PAYPAL = 'braintreepaypal';\nexport const BRAINTREE_PAYPAL_CREDIT = 'braintreepaypalcredit';\nexport const BRAINTREE_VISACHECKOUT = 'braintreevisacheckout';\nexport const BRAINTREE_LOCAL_METHODS = 'braintreelocalmethods';\nexport const BRAINTREE_GOOGLEPAY = 'googlepaybraintree';\nexport const BRAINTREE_ACH = 'braintreeach';\n\nexport const PAYPAL_COMMERCE = 'paypalcommerce';\nexport const PAYPAL_COMMERCE_ALTERNATIVE_METHODS = 'paypalcommercealternativemethods';\nexport const PAYPAL_COMMERCE_CREDIT = 'paypalcommercecredit';\nexport const PAYPAL_COMMERCE_CREDIT_CARDS = 'paypalcommercecreditcards';\nexport const PAYPAL_COMMERCE_VENMO = 'paypalcommercevenmo';\n","import { MULTI_OPTION } from '../payment-method-types';\nimport {\n BRAINTREE,\n BRAINTREE_GOOGLEPAY,\n BRAINTREE_PAYPAL,\n BRAINTREE_PAYPAL_CREDIT,\n BRAINTREE_VISACHECKOUT,\n BRAINTREE_LOCAL_METHODS,\n PAYPAL_COMMERCE,\n PAYPAL_COMMERCE_CREDIT,\n PAYPAL_COMMERCE_CREDIT_CARDS,\n PAYPAL_COMMERCE_ALTERNATIVE_METHODS,\n PAYPAL_COMMERCE_VENMO,\n BRAINTREE_ACH,\n} from '../payment-method-ids';\n\n/**\n * @param {string} id\n * @return {Boolean}\n */\nfunction isBraintreePaymentMethod(id) {\n switch (id) {\n case BRAINTREE_PAYPAL:\n case BRAINTREE_PAYPAL_CREDIT:\n case BRAINTREE_VISACHECKOUT:\n case BRAINTREE_GOOGLEPAY:\n case BRAINTREE_ACH:\n case BRAINTREE_LOCAL_METHODS:\n return true;\n default:\n return false;\n }\n}\n\n/**\n * @param {string} id\n * @return {Boolean}\n */\nfunction isPaypalCommercePaymentMethod(id) {\n switch (id) {\n case PAYPAL_COMMERCE_CREDIT:\n case PAYPAL_COMMERCE_CREDIT_CARDS:\n case PAYPAL_COMMERCE_ALTERNATIVE_METHODS:\n case PAYPAL_COMMERCE_VENMO:\n return true;\n default:\n return false;\n }\n}\n\nexport default class PaymentMethodIdMapper {\n /**\n * @returns {PaymentMethodIdMapper}\n */\n static create() {\n return new PaymentMethodIdMapper();\n }\n\n /**\n * @param {PaymentMethod} paymentMethod\n * @returns {string}\n */\n mapToId(paymentMethod) {\n let { id } = paymentMethod;\n\n if (paymentMethod.method === MULTI_OPTION) {\n id = paymentMethod.gateway;\n }\n\n if (isBraintreePaymentMethod(id)) {\n return BRAINTREE;\n }\n\n if (isPaypalCommercePaymentMethod(id)) {\n return PAYPAL_COMMERCE;\n }\n\n return id;\n }\n}\n","export const CREDIT_CARD = 'credit-card';\nexport const MULTI_OPTION = 'multi-option';\nexport const PPSDK_CREDIT_CARD = 'card';\n","import RequestSender from '../common/http-request/request-sender';\nimport { API, SDK } from './payment-types';\nimport PayloadMapper from './v1/payment-mappers/payload-mapper';\nimport PpsdkPayloadMapper from './ppsdk/payment-mappers/ppsdk-payload-mapper';\nimport UrlHelper from './url-helper';\n\nexport default class PaymentSubmitter {\n /**\n * @param {Object} config\n * @returns {PaymentSubmitter}\n */\n static create(config) {\n const urlHelper = UrlHelper.create(config);\n const requestSender = RequestSender.create();\n const payloadMapper = PayloadMapper.create();\n const ppsdkPayloadMapper = PpsdkPayloadMapper.create();\n\n return new PaymentSubmitter(urlHelper, requestSender, payloadMapper, ppsdkPayloadMapper);\n }\n\n /**\n * @param {UrlHelper} urlHelper\n * @param {RequestSender} requestSender\n * @param {PayloadMapper} payloadMapper\n * @param {PpsdkPayloadMapper} ppsdkPayloadMapper\n * @returns {void}\n */\n constructor(urlHelper, requestSender, payloadMapper, ppsdkPayloadMapper) {\n /**\n * @private\n * @type {UrlHelper}\n */\n this.urlHelper = urlHelper;\n\n /**\n * @private\n * @type {RequestSender}\n */\n this.requestSender = requestSender;\n\n /**\n * @private\n * @type {PayloadMapper}\n */\n this.payloadMapper = payloadMapper;\n\n /**\n * @private\n * @type {PpsdkPayloadMapper}\n */\n this.ppsdkPayloadMapper = ppsdkPayloadMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @param {Function} [callback]\n * @returns {void}\n * @throws {Error}\n */\n submitPayment(data, callback) {\n const { paymentMethod = {} } = data;\n\n if (paymentMethod.type !== API && paymentMethod.type !== SDK) {\n throw new Error(`${paymentMethod.type} is not supported.`);\n }\n\n const payload = paymentMethod.type === SDK ? this.ppsdkPayloadMapper.mapToPayload(data) : this.payloadMapper.mapToPayload(data);\n const url = paymentMethod.type === SDK ? this.urlHelper.getPpsdkPaymentUrl() : this.urlHelper.getPaymentUrl();\n const options = {\n headers: this.payloadMapper.mapToHeaders(data),\n };\n\n this.requestSender.postRequest(url, payload, options, callback);\n }\n}\n","export const API = 'PAYMENT_TYPE_API';\nexport const HOSTED = 'PAYMENT_TYPE_HOSTED';\nexport const OFFLINE = 'PAYMENT_TYPE_OFFLINE';\nexport const SDK = 'PAYMENT_TYPE_SDK';\n","import { omitNil, toNumber } from '../../../common/utils';\nimport { PPSDK_CREDIT_CARD } from '../../payment-method-types';\n\nexport default class PpsdkPayloadMapper {\n /**\n * @returns {PayloadMapper}\n */\n static create() {\n return new PpsdkPayloadMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToPayload(data) {\n const { additionalAction, payment = {}, paymentMethod } = data;\n\n return omitNil({\n instrument: {\n expires: {\n month: payment.ccExpiry ? toNumber(payment.ccExpiry.month) : null,\n year: payment.ccExpiry ? toNumber(payment.ccExpiry.year) : null,\n },\n name: payment.ccName,\n number: payment.ccNumber,\n verification_value: payment.ccCvv,\n type: PPSDK_CREDIT_CARD,\n },\n form_nonce: payment.hostedFormNonce,\n payment_method_id: paymentMethod.id,\n human_verification: additionalAction ? {\n id: 'recaptcha_v2_verification',\n parameters: {\n token: additionalAction ? additionalAction.data.human_verification_token : null,\n },\n } : null,\n });\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToHeaders(data) {\n const { authToken } = data;\n\n return omitNil({\n Authorization: authToken,\n });\n }\n}\n","export default class UrlHelper {\n /**\n * @param {Object} config\n * @param {string} config.host\n * @returns {CustomerMapper}\n */\n static create(config) {\n return new UrlHelper(config);\n }\n\n /**\n * @param {Object} config\n * @param {string} config.host\n * @returns {void}\n */\n constructor(config) {\n /**\n * @private\n * @type {Object}\n */\n this.config = config;\n }\n\n /**\n * @private\n * @returns {string}\n */\n get host() {\n return this.config.host;\n }\n\n /**\n * @returns {string}\n */\n getOffsitePaymentUrl() {\n return `${this.host}/pay/initialize`;\n }\n\n /**\n * @returns {string}\n */\n getPaymentUrl() {\n return `${this.host}/api/public/v1/orders/payments`;\n }\n\n /**\n * @returns {string}\n */\n getPpsdkPaymentUrl() {\n return `${this.host}/payments`;\n }\n\n /**\n * @returns {string}\n */\n getGenerateClientTokenUrl() {\n return `${this.host}/api/v2/public/payments/client_tokens`;\n }\n}\n","import { omitNil, toString } from '../../../common/utils';\n\nexport default class CustomerMapper {\n /**\n * @returns {CustomerMapper}\n */\n static create() {\n return new CustomerMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToCustomer(data) {\n const { customer = {}, quoteMeta = {} } = data;\n\n return omitNil({\n customer_group: customer.customerGroupName ? { name: customer.customerGroupName } : null,\n geo_ip_country_code: quoteMeta.request ? quoteMeta.request.geoCountryCode : null,\n id: customer.customerId ? toString(customer.customerId) : null,\n session_token: quoteMeta.request ? quoteMeta.request.sessionHash : null,\n });\n }\n}\n","import { omitEmptyStringAndNil, omitNil, toString } from '../../../common/utils';\n\nexport default class OrderMapper {\n /**\n * @returns {OrderMapper}\n */\n static create() {\n return new OrderMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToOrder(data) {\n const { order = {} } = data;\n\n return omitNil({\n billing_address: this.mapToBillingAddress(data),\n coupons: this.mapToCoupons(data),\n currency: order.currency,\n id: order.orderId ? toString(order.orderId) : null,\n items: this.mapToItems(data),\n shipping: this.mapToShipping(data),\n shipping_address: this.mapToShippingAddress(data),\n token: order.token,\n totals: this.mapToOrderTotals(data),\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToBillingAddress(data) {\n const { customer = {} } = data;\n const address = this.mapToAddress(data, 'billingAddress');\n\n if (customer.email) {\n address.email = customer.email;\n }\n\n return address;\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @return {Shipping[]}\n */\n mapToShipping(data) {\n const { description, transitTime } = data.shippingOption || {};\n\n if (description) {\n return [omitEmptyStringAndNil({\n method: description,\n transit_time: transitTime,\n })];\n }\n\n return [];\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Coupon[]}\n */\n mapToCoupons({ order = {} }) {\n if (order.coupon && order.coupon.coupons) {\n return order.coupon.coupons.map(({ code }) => ({ code }));\n }\n\n return [];\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToShippingAddress(data) {\n return this.mapToAddress(data, 'shippingAddress');\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @param {string} addressKey\n * @returns {Object}\n */\n mapToAddress(data, addressKey) {\n const address = data[addressKey] || {};\n\n return omitEmptyStringAndNil({\n city: address.city,\n company: address.company,\n country_code: address.countryCode,\n country: address.country,\n first_name: address.firstName,\n last_name: address.lastName,\n phone: address.phone,\n state_code: address.provinceCode,\n state: address.province,\n street_1: address.addressLine1,\n street_2: address.addressLine2,\n zip: address.postCode,\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToItems(data) {\n const { cart = { items: [] } } = data;\n\n return cart.items.map((itemData) => omitNil({\n code: itemData.id,\n variant_id: itemData.variantId,\n name: itemData.name,\n price: itemData.integerAmount,\n unit_price: itemData.integerUnitPrice,\n quantity: itemData.quantity,\n sku: itemData.sku,\n }));\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToOrderTotals(data) {\n const { order = {} } = data;\n\n return omitNil({\n grand_total: order.grandTotal ? order.grandTotal.integerAmount : null,\n handling: order.handling ? order.handling.integerAmount : null,\n shipping: order.shipping ? order.shipping.integerAmount : null,\n subtotal: order.subtotal ? order.subtotal.integerAmount : null,\n tax: order.taxTotal ? order.taxTotal.integerAmount : null,\n });\n }\n}\n","import { omitNil } from '../../../common/utils';\nimport CustomerMapper from './customer-mapper';\nimport OrderMapper from './order-mapper';\nimport PaymentMapper from './payment-mapper';\nimport StoreMapper from './store-mapper';\n\nexport default class PayloadMapper {\n /**\n * @returns {PayloadMapper}\n */\n static create() {\n const customerMapper = CustomerMapper.create();\n const orderMapper = OrderMapper.create();\n const paymentMapper = PaymentMapper.create();\n const storeMapper = StoreMapper.create();\n\n return new PayloadMapper(customerMapper, orderMapper, paymentMapper, storeMapper);\n }\n\n /**\n * @param {CustomerMapper} customerMapper\n * @param {OrderMapper} orderMapper\n * @param {PaymentMapper} paymentMapper\n * @param {StoreMapper} storeMapper\n */\n constructor(customerMapper, orderMapper, paymentMapper, storeMapper) {\n /**\n * @private\n * @type {CustomerMapper}\n */\n this.customerMapper = customerMapper;\n\n /**\n * @private\n * @type {OrderMapper}\n */\n this.orderMapper = orderMapper;\n\n /**\n * @private\n * @type {PaymentMapper}\n */\n this.paymentMapper = paymentMapper;\n\n /**\n * @private\n * @type {StoreMapper}\n */\n this.storeMapper = storeMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToPayload(data) {\n const { order = {}, additionalAction } = data;\n\n return omitNil({\n customer: this.customerMapper.mapToCustomer(data),\n notify_url: order.callbackUrl,\n order: this.orderMapper.mapToOrder(data),\n payment: this.paymentMapper.mapToPayment(data),\n store: this.storeMapper.mapToStore(data),\n additional_action: additionalAction,\n });\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToHeaders(data) {\n const { authToken } = data;\n\n return omitNil({\n Authorization: authToken,\n });\n }\n}\n","import objectAssign from 'object-assign';\nimport { omitNil, toNumber } from '../../../common/utils';\n\nimport PaymentMethodIdMapper from '../../payment-method-mappers/payment-method-id-mapper';\n\nexport default class PaymentMapper {\n /**\n * @param {PaymentMethodIdMapper} paymentMethodIdMapper\n * @returns {PaymentMapper}\n */\n static create() {\n const paymentMethodIdMapper = PaymentMethodIdMapper.create();\n\n return new PaymentMapper(paymentMethodIdMapper);\n }\n\n /**\n * @param {PaymentMethodIdMapper} paymentMethodIdMapper\n * @returns {void}\n */\n constructor(paymentMethodIdMapper) {\n /**\n * @private\n * @type {PaymentMethodIdMapper}\n */\n this.paymentMethodIdMapper = paymentMethodIdMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToPayment(data) {\n const {\n order = {},\n orderMeta = {},\n payment = {},\n paymentMethod = {},\n } = data;\n\n const payload = {\n device_info: payment.deviceSessionId ? payment.deviceSessionId : null,\n device: orderMeta.deviceFingerprint ? { fingerprint_id: orderMeta.deviceFingerprint } : null,\n gateway: this.paymentMethodIdMapper.mapToId(paymentMethod),\n notify_url: order.callbackUrl,\n return_url: paymentMethod.returnUrl || (order.payment ? order.payment.returnUrl : null),\n vault_payment_instrument: !payment.instrumentId ? payment.shouldSaveInstrument : null,\n set_as_default_stored_instrument: (payment.instrumentId || payment.shouldSaveInstrument) ? payment.shouldSetAsDefaultInstrument : null,\n };\n\n const { method } = paymentMethod;\n\n if (method) {\n objectAssign(payload, { method });\n }\n\n const nonce = payment.nonce || paymentMethod.nonce;\n\n if (payment.formattedPayload) {\n objectAssign(payload, payment.formattedPayload);\n } else if (payment.instrumentId) {\n objectAssign(payload, {\n bigpay_token: this.mapToBigPayToken(data),\n });\n } else if (nonce) {\n objectAssign(payload, {\n credit_card_token: {\n token: nonce,\n },\n });\n } else if (payment.cryptogramId) {\n objectAssign(payload, {\n credit_card_cryptogram: this.mapToCryptogram(data),\n });\n } else {\n objectAssign(payload, {\n credit_card: this.mapToCreditCard(data),\n });\n }\n\n if (payment.browser_info) {\n objectAssign(payload, {\n browser_info: payment.browser_info,\n });\n }\n\n return omitNil(payload);\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToCreditCard(data) {\n const { payment = {} } = data;\n\n return omitNil({\n account_name: payment.ccName,\n month: payment.ccExpiry ? toNumber(payment.ccExpiry.month) : null,\n number: payment.ccNumber,\n verification_value: payment.ccCvv,\n year: payment.ccExpiry ? toNumber(payment.ccExpiry.year) : null,\n customer_code: payment.ccCustomerCode,\n three_d_secure: payment.threeDSecure,\n hosted_form_nonce: payment.hostedFormNonce,\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @return {Object}\n */\n mapToBigPayToken({ payment }) {\n return omitNil({\n credit_card_number_confirmation: payment.ccNumber,\n token: payment.instrumentId,\n verification_value: payment.ccCvv,\n verification_nonce: payment.nonce,\n three_d_secure: payment.threeDSecure,\n hosted_form_nonce: payment.hostedFormNonce,\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @return {Object}\n */\n mapToCryptogram({ payment }) {\n return omitNil({\n payment_cryptogram: payment.cryptogramId,\n eci: payment.eci,\n xid: payment.transactionId,\n month: payment.ccExpiry ? toNumber(payment.ccExpiry.month) : null,\n number: payment.ccNumber,\n year: payment.ccExpiry ? toNumber(payment.ccExpiry.year) : null,\n account_mask: payment.accountMask,\n });\n }\n}\n","import { omitNil, toString } from '../../../common/utils';\n\nexport default class StoreMapper {\n /**\n * @returns {StoreMapper}\n */\n static create() {\n return new StoreMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToStore(data) {\n const { store = {} } = data;\n\n return omitNil({\n hash: store.storeHash,\n id: store.storeId ? toString(store.storeId) : null,\n name: store.storeName,\n });\n }\n}\n","import { omitNil } from '../../../common/utils';\n\nexport default class CartMapper {\n /**\n * @returns {CartMapper}\n */\n static create() {\n return new CartMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToCart(data) {\n const { cart = {} } = data;\n\n return omitNil({\n currency_code: cart.currency,\n items: this.mapToItems(data),\n totals: this.mapToOrderTotals(data),\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object[]}\n */\n mapToItems(data) {\n const { cart = { items: [] } } = data;\n\n return cart.items.map((itemData) => omitNil({\n discount_amount: itemData.integerDiscount,\n name: itemData.name,\n price: itemData.integerAmount,\n unit_price: itemData.integerUnitPrice,\n quantity: itemData.quantity,\n sku: itemData.sku,\n tax_amount: itemData.integerTax,\n amount: itemData.integerAmountAfterDiscount,\n type: this.mapToType(itemData),\n }));\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToOrderTotals(data) {\n const { cart = {} } = data;\n\n return omitNil({\n discount_total: cart.discount ? cart.discount.integerAmount : null,\n grand_total: cart.grandTotal ? cart.grandTotal.integerAmount : null,\n shipping_total: cart.shipping ? cart.shipping.integerAmount : null,\n subtotal: cart.subtotal ? cart.subtotal.integerAmount : null,\n surcharge_total: cart.handling ? cart.handling.integerAmount : null,\n tax_total: cart.taxTotal ? cart.taxTotal.integerAmount : null,\n });\n }\n\n /**\n * @private\n * @param {Object} itemData\n * @returns {Object}\n */\n mapToType(itemData) {\n const types = {\n ItemPhysicalEntity: 'physical',\n ItemDigitalEntity: 'digital',\n ItemGiftCertificateEntity: 'gift_card',\n };\n\n return types[itemData.type];\n }\n}\n","import { omitNil } from '../../../common/utils';\nimport CartMapper from './cart-mapper';\nimport GatewayMapper from './gateway-mapper';\nimport QuoteMapper from './quote-mapper';\nimport StoreMapper from './store-mapper';\n\nexport default class ClientTokenMapper {\n /**\n * @returns {ClientTokenMapper}\n */\n static create() {\n const cartMapper = CartMapper.create();\n const gatewayMapper = GatewayMapper.create();\n const quoteMapper = QuoteMapper.create();\n const storeMapper = StoreMapper.create();\n\n return new ClientTokenMapper(cartMapper, gatewayMapper, quoteMapper, storeMapper);\n }\n\n /**\n * @param {CartMapper} cartMapper\n * @param {GatewayMapper} gatewayMapper\n * @param {QuoteMapper} quoteMapper\n * @param {StoreMapper} storeMapper\n */\n constructor(cartMapper, gatewayMapper, quoteMapper, storeMapper) {\n /**\n * @private\n * @type {CartMapper}\n */\n this.cartMapper = cartMapper;\n\n /**\n * @private\n * @type {GatewayMapper}\n */\n this.gatewayMapper = gatewayMapper;\n\n /**\n * @private\n * @type {QuoteMapper}\n */\n this.quoteMapper = quoteMapper;\n\n /**\n * @private\n * @type {StoreMapper}\n */\n this.storeMapper = storeMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToClientToken(data) {\n return omitNil({\n cart: this.cartMapper.mapToCart(data),\n gateway: this.gatewayMapper.mapToGateway(data),\n quote: this.quoteMapper.mapToQuote(data),\n store: this.storeMapper.mapToStore(data),\n });\n }\n}\n","import { omitNil } from '../../../common/utils';\nimport PaymentMethodIdMapper from '../../payment-method-mappers/payment-method-id-mapper';\n\nexport default class GatewayMapper {\n /**\n * @returns {GatewayMapper}\n */\n static create() {\n const paymentMethodIdMapper = PaymentMethodIdMapper.create();\n\n return new GatewayMapper(paymentMethodIdMapper);\n }\n\n /**\n * @param {PaymentMethodIdMapper} paymentMethodIdMapper\n * @returns {void}\n */\n constructor(paymentMethodIdMapper) {\n /**\n * @private\n * @type {PaymentMethodIdMapper}\n */\n this.paymentMethodIdMapper = paymentMethodIdMapper;\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToGateway(data) {\n const { paymentMethod = {} } = data;\n\n return omitNil({\n name: this.paymentMethodIdMapper.mapToId(paymentMethod),\n });\n }\n}\n","import { omitNil } from '../../../common/utils';\n\nexport default class QuoteMapper {\n /**\n * @returns {QuoteMapper}\n */\n static create() {\n return new QuoteMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToQuote(data) {\n return omitNil({\n billing_address: this.mapToAddress(data, 'billingAddress'),\n shipping_address: this.mapToAddress(data, 'shippingAddress'),\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @param {string} addressKey\n * @returns {Object}\n */\n mapToAddress(data, addressKey) {\n const { customer = {} } = data;\n const address = data[addressKey] || {};\n\n return omitNil({\n address_line_1: address.addressLine1,\n address_line_2: address.addressLine2,\n city: address.city,\n company: address.company,\n country_code: address.countryCode,\n email: customer.email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone: address.phone,\n postal_code: address.postCode,\n state: address.province,\n });\n }\n}\n","import { omitNil, toNumber } from '../../../common/utils';\n\nexport default class StoreMapper {\n /**\n * @returns {StoreMapper}\n */\n static create() {\n return new StoreMapper();\n }\n\n /**\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToStore(data) {\n return omitNil({\n locale: this.mapToLocale(data),\n store_identity: this.mapToIdentity(data),\n urls: this.mapToUrls(data),\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToLocale(data) {\n const { store = {} } = data;\n\n return omitNil({\n country_code: store.countryCode,\n currency_code: store.currencyCode,\n language_code: store.storeLanguage,\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToIdentity(data) {\n const { store = {} } = data;\n\n return omitNil({\n id: store.storeId ? toNumber(store.storeId) : null,\n name: store.storeName,\n });\n }\n\n /**\n * @private\n * @param {PaymentRequestData} data\n * @returns {Object}\n */\n mapToUrls(data) {\n const { store = {} } = data;\n\n return omitNil({\n cart: store.cartLink,\n checkout: store.checkoutLink,\n confirmation: store.orderConfirmationLink,\n home: store.shopPath,\n });\n }\n}\n","import RequestSender from '../common/http-request/request-sender';\nimport { DELETE, POST } from '../common/http-request/method-types';\nimport UrlHelper from './url-helper';\nimport {\n mapToHeaders,\n mapToTrustedShippingAddressPayload,\n} from './v2/mappers';\n\nexport default class StoreRequestSender {\n /**\n * @param {Object} config\n * @returns {StoreRequestSender}\n */\n static create(config) {\n const urlHelper = UrlHelper.create(config);\n const requestSender = RequestSender.create();\n\n return new StoreRequestSender(urlHelper, requestSender);\n }\n\n /**\n * @param {UrlHelper} urlHelper\n * @param {RequestSender} requestSender\n * @returns {void}\n */\n constructor(urlHelper, requestSender) {\n /**\n * @private\n * @type {UrlHelper}\n */\n this.urlHelper = urlHelper;\n\n /**\n * @private\n * @type {RequestSender}\n */\n this.requestSender = requestSender;\n }\n\n /**\n * @param {Object} data\n * @param {Function} [callback]\n * @return {void}\n */\n loadInstruments(data, callback) {\n const url = this.urlHelper.getInstrumentsUrl(\n data.storeId,\n data.customerId,\n data.currencyCode,\n );\n const options = {\n headers: mapToHeaders(data),\n };\n\n this.requestSender.sendRequest(url, null, options, callback);\n }\n\n /**\n * @param {Object} data\n * @param {Function} [callback]\n * @return {void}\n */\n loadInstrumentsWithAddress(data, callback) {\n const url = this.urlHelper.getTrustedShippingAddressUrl(\n data.storeId,\n data.customerId,\n data.currencyCode,\n );\n const payload = mapToTrustedShippingAddressPayload(data);\n const options = {\n method: POST,\n headers: mapToHeaders(data),\n };\n\n this.requestSender.postRequest(url, payload, options, callback);\n }\n\n /**\n * @param {Object} data\n * @param {Function} [callback]\n * @return {void}\n */\n deleteShopperInstrument(data, callback) {\n const url = this.urlHelper.getInstrumentByIdUrl(\n data.storeId,\n data.customerId,\n data.instrumentId,\n data.currencyCode,\n );\n const options = {\n method: DELETE,\n headers: mapToHeaders(data),\n };\n\n this.requestSender.sendRequest(url, null, options, callback);\n }\n}\n","export default class UrlHelper {\n /**\n * @param {Object} config\n * @param {string} config.host\n * @returns {CustomerMapper}\n */\n static create(config) {\n return new UrlHelper(config);\n }\n\n /**\n * @param {Object} config\n * @param {string} config.host\n * @returns {void}\n */\n constructor(config) {\n /**\n * @private\n * @type {Object}\n */\n this.config = config;\n }\n\n /**\n * @private\n * @returns {string}\n * @throws {Error}\n */\n get host() {\n if (!this.config || !this.config.host) {\n throw new Error('Host URL unavailable or not supplied.');\n }\n\n return this.config.host;\n }\n\n /**\n * @param {number} storeId\n * @param {number} customerId\n * @param {string} currencyCode\n * @returns {string}\n */\n getInstrumentsUrl(storeId, customerId, currencyCode) {\n return `${this.host}/api/v3/stores/${storeId}/shoppers/${customerId}/instruments?currency_code=${currencyCode}`;\n }\n\n /**\n * @param {number} storeId\n * @param {number} customerId\n * @param {string} currencyCode\n * @return {string}\n */\n getTrustedShippingAddressUrl(storeId, customerId, currencyCode) {\n return `${this.host}/api/v3/stores/${storeId}/shoppers/${customerId}/instruments/trusted_shipping_address?currency_code=${currencyCode}`;\n }\n\n /**\n * @param {number} storeId\n * @param {number} customerId\n * @param {number} instrumentId\n * @param {string} currencyCode\n * @returns {string}\n */\n getInstrumentByIdUrl(storeId, customerId, instrumentId, currencyCode) {\n return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments/${instrumentId}?currency_code=${currencyCode}`;\n }\n}\n","import { omitNil } from '../../../common/utils';\n\n/**\n * @param {Object} [data={}]\n * @param {Object} data.billingAddress\n * @param {CreditCard} data.creditCard\n * @param {boolean} data.defaultInstrument\n * @param {string} data.providerName\n * @return {Object}\n */\nexport function mapToInstrumentPayload(data = {}) {\n const {\n providerName,\n defaultInstrument,\n } = data;\n\n const provider = omitNil({ name: providerName });\n\n return omitNil({\n provider,\n credit_card: mapToCreditCard(data),\n billing_address: mapToAddress(data.billingAddress),\n default_instrument: defaultInstrument,\n });\n}\n\n/**\n * @param {Object} [data={}]\n * @param {Object} data.shippingAddress\n * @return {Object}\n */\nexport function mapToTrustedShippingAddressPayload(data = {}) {\n if (Array.isArray(data.shippingAddress)) {\n return omitNil({\n shipping_addresses: data.shippingAddress.map((address) => mapToAddress(address)),\n });\n }\n\n return omitNil({\n shipping_address: mapToAddress(data.shippingAddress),\n });\n}\n\n/**\n * @param {Object} data\n * @param {string} data.authToken\n * @return {Object}\n */\nexport function mapToHeaders({ authToken: Authorization } = {}) {\n return omitNil({\n Authorization,\n });\n}\n\n/**\n * @param {AddressData} address\n * @return {Object}\n */\nfunction mapToAddress(address = {}) {\n const state = mapToState(address.provinceCode, address.province);\n\n return omitNil({\n address_line_1: address.addressLine1,\n address_line_2: address.addressLine2,\n city: address.city,\n company: address.company,\n country_code: address.countryCode,\n email: address.email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone: address.phone,\n postal_code: address.postCode,\n state,\n });\n}\n\n/**\n * @param {string} code\n * @param {string} name\n * @return {Object}\n */\nfunction mapToState(code, name) {\n return omitNil({\n code,\n name,\n });\n}\n\n/**\n * @param {Object} data\n * @param {CreditCard} data.creditCard\n * @return {Object}\n */\nfunction mapToCreditCard({ creditCard = {} }) {\n const threeDSecure = omitNil(creditCard.threeDSecure);\n\n return omitNil({\n cardholder_name: creditCard.cardholderName,\n number: creditCard.number,\n month: creditCard.month,\n year: creditCard.year,\n verification_code: creditCard.verificationCode,\n issue_month: creditCard.issueMonth,\n issue_year: creditCard.issueYear,\n issue_number: creditCard.issueNumber,\n track_data: creditCard.trackData,\n is_manual_entry: creditCard.isManualEntry,\n icc_data: creditCard.iccData,\n fallback_reason: creditCard.fallbackReason,\n is_contactless: creditCard.isContactless,\n encrypted_pin_cryptogram: creditCard.encryptedPinCryptogram,\n encrypted_pin_ksn: creditCard.encryptedPinKsn,\n three_d_secure: threeDSecure,\n });\n}\n","import { assign } from 'lodash';\nimport * as shallowEqual from 'shallowequal';\n\nimport Action from './action';\nimport Reducer from './reducer';\n\nexport default function combineReducers(\n reducers: ReducerMap,\n options?: CombineReducersOptions\n): Reducer {\n const { equalityCheck = shallowEqual } = options || {};\n\n return (state, action) =>\n Object.keys(reducers).reduce((result, key) => {\n const reducer = reducers[key as keyof TState];\n const currentState = state ? state[key as keyof TState] : undefined;\n const newState = reducer(currentState, action);\n\n if (equalityCheck(currentState, newState) && result) {\n return result;\n }\n\n return assign({}, result, { [key]: newState });\n }, state || {} as TState);\n}\n\nexport type ReducerMap = {\n [Key in keyof TState]: Reducer;\n};\n\nexport interface CombineReducersOptions {\n equalityCheck?(valueA: any, valueB: any): boolean;\n}\n","import { curryRight, flowRight } from 'lodash';\nimport * as shallowEqual from 'shallowequal';\n\nimport Action from './action';\nimport Reducer from './reducer';\n\nexport default function composeReducers(\n reducerA: (state: TStateA, action: TAction) => TState,\n reducerB: (state: TState, action: TAction) => TStateA,\n options?: ComposeReducersOptions\n): Reducer;\n\nexport default function composeReducers(\n reducerA: (state: TStateA, action: TAction) => TState,\n reducerB: (state: TStateB, action: TAction) => TStateA,\n reducerC: (state: TState, action: TAction) => TStateB,\n options?: ComposeReducersOptions\n): Reducer;\n\nexport default function composeReducers(\n reducerA: (state: TStateA, action: TAction) => TState,\n reducerB: (state: TStateB, action: TAction) => TStateA,\n reducerC: (state: TStateC, action: TAction) => TStateB,\n reducerD: (state: TState, action: TAction) => TStateC,\n options?: ComposeReducersOptions\n): Reducer;\n\nexport default function composeReducers(\n reducerA: (state: TStateA, action: TAction) => TState,\n reducerB: (state: TStateB, action: TAction) => TStateA,\n reducerC: (state: TStateC, action: TAction) => TStateB,\n reducerD: (state: TStateD, action: TAction) => TStateC,\n reducerE: (state: TState, action: TAction) => TStateD,\n options?: ComposeReducersOptions\n): Reducer;\n\nexport default function composeReducers(\n ...args: any[]\n): Reducer {\n let reducers: Array> = args;\n let options: ComposeReducersOptions = {};\n\n if (typeof args[args.length - 1] === 'object') {\n reducers = args.slice(0, -1);\n options = { ...options, ...args[args.length - 1] };\n }\n\n const { equalityCheck = shallowEqual } = options;\n\n return (state, action) => {\n const newState = flowRight(\n reducers\n .filter(reducer => reducer.length === 2)\n .map(reducer => curryRight(reducer)(action))\n )(state);\n\n return equalityCheck(state, newState) ? state : newState;\n };\n}\n\nexport interface ComposeReducersOptions {\n equalityCheck?(valueA: any, valueB: any): boolean;\n}\n","import { omitBy } from 'lodash';\n\nimport Action from './action';\n\nexport default function createAction(\n type: TType,\n payload?: TPayload,\n meta?: TMeta\n): Action {\n if (typeof type !== 'string' || type === '') {\n throw new Error('`type` must be a string');\n }\n\n return { type, ...omitBy({ payload, meta }, value => value === undefined) };\n}\n","import Action from './action';\nimport combineReducers, { ReducerMap } from './combine-reducers';\nimport DataStore, { DataStoreOptions } from './data-store';\nimport Reducer from './reducer';\n\nexport default function createDataStore(\n reducer: Reducer | ReducerMap,\n initialState?: Partial,\n options?: Partial>\n): DataStore {\n if (typeof reducer === 'function') {\n return new DataStore(reducer, initialState, options);\n }\n\n return new DataStore(\n combineReducers(reducer, { equalityCheck: options && options.equalityCheck }),\n initialState,\n options\n );\n}\n","import Action from './action';\nimport createAction from './create-action';\n\nexport default function createErrorAction(\n type: TType,\n payload?: TPayload,\n meta?: TMeta\n): Action {\n return {\n ...createAction(type, payload, meta),\n error: true,\n };\n}\n","import { merge } from 'lodash';\nimport {\n defer,\n from,\n of,\n throwError,\n BehaviorSubject,\n Observable,\n Subject,\n Subscribable,\n SubscribableOrPromise\n} from 'rxjs';\nimport {\n catchError,\n concatMap,\n distinctUntilChanged,\n filter,\n first,\n map,\n mergeMap,\n scan,\n skip,\n tap,\n} from 'rxjs/operators';\nimport * as shallowEqual from 'shallowequal';\n\nimport Action from './action';\nimport deepFreeze from './deep-freeze';\nimport DispatchableDataStore, { DispatchableAction, DispatchOptions } from './dispatchable-data-store';\nimport isObservableActionLike from './is-observable-action-like';\nimport noopActionTransformer from './noop-action-transformer';\nimport noopStateTransformer from './noop-state-transformer';\nimport ReadableDataStore, { Filter, Subscriber, SubscribeOptions, Unsubscriber } from './readable-data-store';\nimport Reducer from './reducer';\nimport ThunkAction from './thunk-action';\n\nexport default class DataStore implements\n ReadableDataStore, DispatchableDataStore {\n private _reducer: Reducer;\n private _options: DataStoreOptions;\n private _notification$: Subject;\n private _dispatchers: { [key: string]: Dispatcher };\n private _dispatchQueue$: Subject>;\n private _state$: BehaviorSubject;\n private _errors: { [key: string]: Subject };\n\n constructor(\n reducer: Reducer,\n initialState: Partial = {},\n options?: Partial>\n ) {\n this._reducer = reducer;\n this._options = {\n actionTransformer: noopActionTransformer,\n equalityCheck: shallowEqual,\n shouldWarnMutation: true,\n stateTransformer: noopStateTransformer,\n ...options,\n };\n this._state$ = new BehaviorSubject(this._options.stateTransformer(initialState as TState));\n this._notification$ = new Subject();\n this._dispatchers = {};\n this._dispatchQueue$ = new Subject();\n this._errors = {};\n\n this._dispatchQueue$\n .pipe(\n mergeMap(dispatcher$ => dispatcher$.pipe(concatMap(action$ => action$))),\n filter(action => !!action.type),\n scan(\n (states: StateTuple, action: TAction) =>\n this._transformStates(states, action),\n {\n state: initialState as TState,\n transformedState: this._state$.getValue(),\n }\n ),\n distinctUntilChanged(({ state: stateA }, { state: stateB }) =>\n this._options.equalityCheck(stateA, stateB)\n ),\n map(({ transformedState }) => transformedState)\n )\n .subscribe(this._state$);\n\n this.dispatch({ type: 'INIT' } as TAction);\n }\n\n dispatch(\n action: DispatchableAction,\n options?: DispatchOptions\n ): Promise {\n if (isObservableActionLike(action)) {\n return this._dispatchObservableAction(action, options);\n }\n\n if (typeof action === 'function') {\n return this._dispatchThunkAction(action, options);\n }\n\n return this._dispatchAction(action);\n }\n\n getState(): TTransformedState {\n return this._state$.getValue();\n }\n\n notifyState(): void {\n this._notification$.next(this.getState());\n }\n\n subscribe(subscriber: Subscriber, ...filters: Array>): Unsubscriber;\n subscribe(subscriber: Subscriber, options: SubscribeOptions): Unsubscriber;\n subscribe(subscriber: Subscriber, ...args: any[]): Unsubscriber {\n const options: SubscribeOptions = typeof args[0] === 'object' ? args[0] : undefined;\n const filters: Array> = options ? (options.filters || []) : args;\n\n let state$: Observable = this._state$;\n\n if (filters.length > 0) {\n state$ = state$.pipe(\n distinctUntilChanged((stateA, stateB) =>\n filters.every(filterFn =>\n this._options.equalityCheck(filterFn(stateA), filterFn(stateB))\n )\n )\n );\n }\n\n if (options && options.initial === false) {\n state$ = state$.pipe(skip(1));\n }\n\n const subscriptions = [\n state$.subscribe(subscriber),\n this._notification$.subscribe(subscriber),\n ];\n\n return () => subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n\n private _transformStates(\n states: StateTuple,\n action: TAction\n ): StateTuple {\n try {\n const newState = this._options.shouldWarnMutation === false ?\n this._reducer(states.state, action) :\n deepFreeze(this._reducer(states.state, action), {\n equalityCheck: this._options.equalityCheck,\n previousValue: states.state,\n });\n const transformedState = this._options.stateTransformer(newState);\n\n return { state: newState, transformedState };\n } catch (error) {\n this._getDispatchError(action.meta && action.meta.queueId).next(error);\n\n return { state: states.state, transformedState: states.transformedState };\n }\n }\n\n private _dispatchAction(\n action: TDispatchAction\n ): Promise {\n return this._dispatchObservableAction(\n action.error ? throwError(action) : of(action)\n );\n }\n\n private _dispatchObservableAction(\n action$: SubscribableOrPromise,\n options: DispatchOptions = {}\n ): Promise {\n return new Promise((resolve, reject) => {\n const error$ = this._getDispatchError(options.queueId);\n const transformedAction$ = this._options.actionTransformer(\n from(action$).pipe(\n map(action =>\n options.queueId ?\n merge({}, action, { meta: { queueId: options.queueId } }) :\n action\n )\n ) as Subscribable\n );\n\n this._getDispatcher(options.queueId).next(\n from(transformedAction$)\n .pipe(\n map((action, index) => {\n if (index === 0) {\n error$.pipe(first()).subscribe(reject);\n }\n\n if (action.error) {\n reject(action.payload);\n }\n\n return action;\n }),\n catchError(action => {\n reject(action instanceof Error ? action : action.payload);\n\n return of(action);\n }),\n tap({\n complete: () => {\n resolve(this.getState());\n },\n })\n )\n );\n });\n }\n\n private _dispatchThunkAction(\n thunkAction: ThunkAction,\n options: DispatchOptions = {}\n ): Promise {\n return this._dispatchObservableAction(defer(() => thunkAction(this)), options);\n }\n\n private _getDispatcher(queueId: string = 'default'): Dispatcher {\n if (!this._dispatchers[queueId]) {\n this._dispatchers[queueId] = new Subject();\n\n this._dispatchQueue$.next(this._dispatchers[queueId]);\n }\n\n return this._dispatchers[queueId];\n }\n\n private _getDispatchError(queueId: string = 'default'): Subject {\n if (!this._errors[queueId]) {\n this._errors[queueId] = new Subject();\n }\n\n return this._errors[queueId];\n }\n}\n\nexport interface DataStoreOptions {\n shouldWarnMutation: boolean;\n actionTransformer(action: Subscribable): Subscribable;\n equalityCheck(valueA: any, valueB: any): boolean;\n stateTransformer(state: TState): TTransformedState;\n}\n\ninterface StateTuple {\n state: TState;\n transformedState: TTransformedState;\n}\n\ntype Dispatcher = Subject>;\n","import { isPlainObject } from 'lodash';\nimport * as shallowEqual from 'shallowequal';\n\nexport interface DeepFreezeOptions {\n previousValue?: T;\n equalityCheck?(valueA: any, valueB: any): boolean;\n}\n\nexport default function deepFreeze(object: T[], options?: DeepFreezeOptions): ReadonlyArray;\nexport default function deepFreeze(object: T, options?: DeepFreezeOptions): Readonly;\nexport default function deepFreeze(object: T, options?: DeepFreezeOptions): T;\nexport default function deepFreeze(\n object: T[] | T,\n options?: DeepFreezeOptions\n): ReadonlyArray | Readonly | T {\n try {\n const { equalityCheck = shallowEqual, previousValue = null } = options || {};\n\n if (equalityCheck(object, previousValue) && Object.isFrozen(previousValue)) {\n return previousValue as T;\n }\n\n if (Object.isFrozen(object) || (!Array.isArray(object) && !isPlainObject(object))) {\n return object;\n }\n\n if (Array.isArray(object)) {\n return Object.freeze(object.map((value, index) =>\n deepFreeze(value, {\n equalityCheck,\n previousValue: Array.isArray(previousValue) ? previousValue[index] : undefined,\n })\n ));\n }\n\n return Object.freeze(Object.getOwnPropertyNames(object).reduce((result, key) => {\n result[key as keyof T] = deepFreeze(object[key as keyof T], {\n equalityCheck,\n previousValue: previousValue && previousValue.hasOwnProperty(key) ?\n (previousValue as any)[key] :\n undefined,\n });\n\n return result;\n }, {} as T));\n } catch (error) {\n // Browsers that only support ES5 will throw `TypeError` when checking\n // if a primitive value is frozen or trying to freeze a primitive value.\n if (error instanceof TypeError) {\n return object;\n }\n\n throw error;\n }\n}\n","export { default as Action } from './action';\nexport { default as DataStore, DataStoreOptions } from './data-store';\nexport { default as DispatchableDataStore, DispatchableAction, DispatchOptions } from './dispatchable-data-store';\nexport {\n default as ReadableDataStore,\n Filter,\n Subscriber,\n SubscribeOptions,\n Unsubscriber,\n} from './readable-data-store';\nexport { default as Reducer } from './reducer';\nexport { default as ThunkAction } from './thunk-action';\n\nexport { default as combineReducers, ReducerMap } from './combine-reducers';\nexport { default as composeReducers } from './compose-reducers';\nexport { default as createAction } from './create-action';\nexport { default as createDataStore } from './create-data-store';\nexport { default as createErrorAction } from './create-error-action';\nexport { default as deepFreeze } from './deep-freeze';\n","import { Subscribable, SubscribableOrPromise } from 'rxjs';\n\nimport Action from './action';\nimport { DispatchableAction } from './dispatchable-data-store';\n\nexport default function isObservableActionLike(\n action: DispatchableAction\n): action is SubscribableOrPromise {\n return (\n typeof (action as Subscribable).subscribe === 'function' ||\n typeof (action as PromiseLike).then === 'function'\n );\n}\n","import { Subscribable } from 'rxjs';\n\nimport Action from './action';\n\nexport default function noopActionTransformer(\n action: Subscribable\n): Subscribable {\n return action as any as Subscribable;\n}\n","export default function noopStateTransformer(\n state: TState\n): TTransformedState {\n return state as any as TTransformedState;\n}\n","import FormBuilder from './form-builder';\nimport FormPoster from './form-poster';\nimport FormPosterOptions from './form-poster-options';\n\nexport default function createFormPoster(options?: FormPosterOptions): FormPoster {\n const formBuilder = new FormBuilder();\n const formPoster = new FormPoster(formBuilder, options);\n\n return formPoster;\n}\n","export default class FormBuilder {\n build(url: string, data: { [key: string]: any }, target?: string): HTMLFormElement {\n const form = document.createElement('form');\n\n form.style.display = 'none';\n\n form.setAttribute('action', url);\n form.setAttribute('method', 'POST');\n form.setAttribute('target', target || '_top');\n\n Object.keys(data)\n .forEach(key => {\n const value = data[key];\n\n form.appendChild(this._createInput(value, key));\n });\n\n return form;\n }\n\n private _createInput(value: any, key: string): HTMLInputElement {\n const input = document.createElement('input');\n\n input.setAttribute('name', key);\n input.setAttribute('type', 'hidden');\n input.setAttribute('value', value);\n\n return input;\n }\n}\n","import FormBuilder from './form-builder';\nimport FormPosterOptions from './form-poster-options';\nimport { isAbsoluteUrl, joinPaths } from './url-utils';\n\nexport default class FormPoster {\n /**\n * @internal\n */\n constructor(\n private _formBuilder: FormBuilder,\n private _options?: FormPosterOptions\n ) {}\n\n postForm(url: string, data: { [key: string]: any }, callback?: () => void, target?: string): void {\n const form = this._formBuilder.build(this._prependHost(url), data, target);\n\n window.addEventListener('unload', function handleUnload() {\n window.removeEventListener('unload', handleUnload);\n\n if (callback) {\n callback();\n }\n });\n\n // In order to submit the form, the form must be attached to DOM.\n document.body.appendChild(form);\n form.submit();\n document.body.removeChild(form);\n }\n\n private _prependHost(url: string): string {\n if (!this._options || !this._options.host || isAbsoluteUrl(url)) {\n return url;\n }\n\n return joinPaths(this._options.host, url);\n }\n}\n","export function isAbsoluteUrl(url: string): boolean {\n return /^https?:\\/\\//.test(url);\n}\n\nexport function joinPaths(pathA: string, pathB: string): string {\n return `${removeTrailingSlash(pathA)}/${removeLeadingSlash(pathB)}`;\n}\n\nfunction removeTrailingSlash(path: string): string {\n return path.replace(/\\/$/, '');\n}\n\nfunction removeLeadingSlash(path: string): string {\n return path.replace(/^\\//, '');\n}\n","export interface RootCacheKeyMap {\n maps: ChildCacheKeyMap[];\n}\n\nexport interface IntermediateCacheKeyMap {\n maps: ChildCacheKeyMap[];\n parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n usedCount: number;\n value: any;\n}\n\nexport interface TerminalCacheKeyMap extends IntermediateCacheKeyMap {\n cacheKey: string;\n}\n\nexport type ChildCacheKeyMap = IntermediateCacheKeyMap | TerminalCacheKeyMap;\n\nexport function isTerminalCacheKeyMap(map: ChildCacheKeyMap): map is TerminalCacheKeyMap {\n return map.hasOwnProperty('cacheKey');\n}\n\nexport function isRootCacheKeyMap(map: RootCacheKeyMap | ChildCacheKeyMap): map is RootCacheKeyMap {\n return map.hasOwnProperty('parentMap');\n}\n","import { noop } from 'lodash';\nimport shallowEqual from 'shallowequal';\n\nimport {\n isRootCacheKeyMap,\n isTerminalCacheKeyMap,\n ChildCacheKeyMap,\n IntermediateCacheKeyMap,\n RootCacheKeyMap,\n TerminalCacheKeyMap\n} from './cache-key-maps';\n\nexport interface CacheKeyResolverOptions {\n maxSize?: number;\n onExpire?(key: string): void;\n isEqual?(valueA: any, valueB: any): boolean;\n}\n\ninterface ResolveResult {\n index: number;\n parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n map?: TerminalCacheKeyMap;\n}\n\nexport default class CacheKeyResolver {\n private _lastId = 0;\n private _map: RootCacheKeyMap = { maps: [] };\n private _usedMaps: TerminalCacheKeyMap[] = [];\n private _options: Required;\n\n constructor(options?: CacheKeyResolverOptions) {\n this._options = {\n isEqual: shallowEqual,\n maxSize: 0,\n onExpire: noop,\n ...options,\n };\n }\n\n getKey(...args: any[]): string {\n const result = this._resolveMap(...args);\n const { index, parentMap } = result;\n let { map } = result;\n\n if (map && map.cacheKey) {\n map.usedCount++;\n } else {\n map = this._generateMap(parentMap, args.slice(index));\n }\n\n // Keep track of the least used map so we can remove it if the size of\n // the stack exceeds the maximum size.\n this._removeLeastUsedMap(map);\n\n return map.cacheKey;\n }\n\n getUsedCount(...args: any[]): number {\n const { map } = this._resolveMap(...args);\n\n return map ? map.usedCount : 0;\n }\n\n private _resolveMap(...args: any[]): ResolveResult {\n let index = 0;\n let parentMap = this._map;\n\n // Traverse the tree to find the linked list of maps that match the\n // arguments of the call. Each intermediate or terminal map contains a\n // value that could be used to match with the arguments. The last map in\n // the list (the terminal) should contain a cache key. If it can does\n // not exist, we will return a falsy value so that the caller could\n // handle and generate a new cache key.\n while (parentMap.maps.length) {\n let isMatched = false;\n\n for (let mapIndex = 0; mapIndex < parentMap.maps.length; mapIndex++) {\n const map = parentMap.maps[mapIndex];\n\n if (!this._options.isEqual(map.value, args[index])) {\n continue;\n }\n\n // Move the most recently used map to the top of the stack for\n // quicker access\n parentMap.maps.unshift(...parentMap.maps.splice(mapIndex, 1));\n\n if ((args.length === 0 || index === args.length - 1) && isTerminalCacheKeyMap(map)) {\n return { index, map, parentMap };\n }\n\n isMatched = true;\n parentMap = map;\n index++;\n\n break;\n }\n\n if (!isMatched) {\n break;\n }\n }\n\n return { index, parentMap };\n }\n\n private _generateMap(parent: RootCacheKeyMap | IntermediateCacheKeyMap, args: any[]): TerminalCacheKeyMap {\n let index = 0;\n let parentMap = parent;\n let map: IntermediateCacheKeyMap;\n\n do {\n map = {\n maps: [],\n parentMap,\n usedCount: 1,\n value: args[index],\n };\n\n // Continue to build the tree of maps so that it could be resolved\n // next time when the function is called with the same set of\n // arguments.\n parentMap.maps.unshift(map);\n\n parentMap = map;\n index++;\n } while (index < args.length);\n\n const terminalMap = map as TerminalCacheKeyMap;\n\n terminalMap.cacheKey = `${++this._lastId}`;\n\n return terminalMap;\n }\n\n private _removeLeastUsedMap(recentlyUsedMap: TerminalCacheKeyMap): void {\n if (!this._options.maxSize) {\n return;\n }\n\n const index = this._usedMaps.indexOf(recentlyUsedMap);\n\n this._usedMaps.splice(\n index === -1 ? 0 : index,\n index === -1 ? 0 : 1,\n recentlyUsedMap\n );\n\n if (this._usedMaps.length <= this._options.maxSize) {\n return;\n }\n\n const map = this._usedMaps.pop();\n\n if (!map) {\n return;\n }\n\n this._removeMap(map);\n this._options.onExpire(map.cacheKey);\n }\n\n private _removeMap(map: ChildCacheKeyMap): void {\n if (!map.parentMap) {\n return;\n }\n\n map.parentMap.maps.splice(map.parentMap.maps.indexOf(map), 1);\n\n if (isRootCacheKeyMap(map.parentMap)) {\n return;\n }\n\n this._removeMap(map.parentMap);\n }\n}\n","import lodashMemoize from 'lodash.memoize'; // tslint:disable-line:match-default-export-name\nimport shallowEqual from 'shallowequal';\n\nimport CacheKeyResolver from './cache-key-resolver';\nimport { Omit } from './types';\n\nexport interface MemoizeOptions {\n maxSize?: number;\n isEqual?(valueA: any, valueB: any): boolean;\n}\n\nexport default function memoize any>(\n fn: T,\n options?: MemoizeOptions\n) {\n const { maxSize, isEqual } = { maxSize: 0, isEqual: shallowEqual, ...options };\n const cache = new Map();\n const resolver = new CacheKeyResolver({\n isEqual,\n maxSize,\n onExpire: key => cache.delete(key),\n });\n const memoized = lodashMemoize(fn, (...args) => resolver.getKey(...args));\n\n memoized.cache = cache;\n\n return memoized;\n}\n\nexport function memoizeOne any>(\n fn: T,\n options?: Omit\n) {\n return memoize(fn, { ...options, maxSize: 1 });\n}\n","import * as queryString from 'query-string';\nvar DefaultCache = (function () {\n function DefaultCache() {\n this._cache = {};\n }\n DefaultCache.prototype.read = function (url, options) {\n var cacheKey = this.getKey(url, options.params);\n return this._cache[cacheKey] || null;\n };\n DefaultCache.prototype.write = function (url, options, response) {\n var cacheKey = this.getKey(url, options.params);\n this._cache[cacheKey] = response;\n };\n DefaultCache.prototype.getKey = function (url, params) {\n if (params === void 0) { params = {}; }\n if (Object.keys(params).length === 0) {\n return url;\n }\n return url + \"?\" + queryString.stringify(params);\n };\n return DefaultCache;\n}());\nexport { DefaultCache };\n","import * as cookie from 'js-cookie';\nimport PayloadTransformer from './payload-transformer';\nimport RequestFactory from './request-factory';\nimport RequestSender from './request-sender';\nexport default function createRequestSender(options) {\n return new RequestSender(new RequestFactory(), new PayloadTransformer(), cookie, options);\n}\n","import Timeout from './timeout';\nexport default function createTimeout(delay) {\n return new Timeout(delay);\n}\n","export default function isPromise(promise) {\n return !!promise &&\n (typeof promise === 'object' || typeof promise === 'function') &&\n typeof promise.then === 'function';\n}\n","import { __assign } from \"tslib\";\nimport toFormUrlEncoded from './to-form-url-encoded';\nvar JSON_CONTENT_TYPE_REGEXP = /application\\/(\\w+\\+)?json/;\nvar FORM_URLENCODED_CONTENT_TYPE_REGEXP = /application\\/x-www-form-urlencoded/;\nvar PayloadTransformer = (function () {\n function PayloadTransformer() {\n }\n PayloadTransformer.prototype.toRequestBody = function (options) {\n var contentType = options.headers ? this._getHeader(options.headers, 'Content-Type') : '';\n if (options.body) {\n if (JSON_CONTENT_TYPE_REGEXP.test(contentType)) {\n return JSON.stringify(options.body);\n }\n if (FORM_URLENCODED_CONTENT_TYPE_REGEXP.test(contentType)) {\n return toFormUrlEncoded(options.body);\n }\n }\n return options.body;\n };\n PayloadTransformer.prototype.toResponse = function (xhr) {\n var headers = this._parseResponseHeaders(xhr.getAllResponseHeaders());\n var body = this._parseResponseBody('response' in xhr ? xhr.response : xhr.responseText, headers);\n return {\n body: body,\n headers: headers,\n status: xhr.status,\n statusText: xhr.statusText,\n };\n };\n PayloadTransformer.prototype._parseResponseBody = function (body, headers) {\n var contentType = this._getHeader(headers, 'Content-Type');\n if (body && JSON_CONTENT_TYPE_REGEXP.test(contentType)) {\n return JSON.parse(body);\n }\n return body;\n };\n PayloadTransformer.prototype._parseResponseHeaders = function (rawHeaders) {\n var lines = rawHeaders ? rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ').split(/\\r?\\n/) : [];\n return lines.reduce(function (headers, line) {\n var _a;\n var parts = line.split(':');\n var key = (parts.shift() || '').trim();\n if (!key) {\n return headers;\n }\n return __assign(__assign({}, headers), (_a = {}, _a[key.toLowerCase()] = parts.join(':').trim(), _a));\n }, {});\n };\n PayloadTransformer.prototype._getHeader = function (headers, key) {\n if (!headers || !key) {\n return '';\n }\n return headers[key] || headers[key.toLowerCase()] || '';\n };\n return PayloadTransformer;\n}());\nexport default PayloadTransformer;\n","import * as queryString from 'query-string';\nvar RequestFactory = (function () {\n function RequestFactory() {\n }\n RequestFactory.prototype.createRequest = function (url, options) {\n var xhr = new XMLHttpRequest();\n this._configureRequest(xhr, url, options);\n return xhr;\n };\n RequestFactory.prototype._configureRequest = function (xhr, url, options) {\n if (options === void 0) { options = {}; }\n xhr.open(options.method || 'GET', this._formatUrl(url, options.params, options.encodeParams), true);\n if (options.headers) {\n this._configureRequestHeaders(xhr, options.headers);\n }\n if (typeof options.credentials === 'boolean') {\n xhr.withCredentials = options.credentials;\n }\n if (typeof options.timeout === 'number') {\n xhr.timeout = options.timeout;\n }\n };\n RequestFactory.prototype._configureRequestHeaders = function (xhr, headers) {\n Object.keys(headers)\n .filter(function (key) { return headers[key] !== null; })\n .forEach(function (key) {\n xhr.setRequestHeader(key, headers[key]);\n });\n };\n RequestFactory.prototype._formatUrl = function (url, params, encodeParams) {\n if (encodeParams === void 0) { encodeParams = true; }\n if (!params || Object.keys(params).length === 0) {\n return url;\n }\n return url + \"?\" + queryString.stringify(params, { encode: encodeParams });\n };\n return RequestFactory;\n}());\nexport default RequestFactory;\n","import { __assign } from \"tslib\";\nimport merge from 'lodash.merge';\nimport { DefaultCache } from './cache';\nimport isPromise from './is-promise';\nimport Timeout from './timeout';\nvar RequestSender = (function () {\n function RequestSender(_requestFactory, _payloadTransformer, _cookie, _options) {\n if (_options === void 0) { _options = {}; }\n this._requestFactory = _requestFactory;\n this._payloadTransformer = _payloadTransformer;\n this._cookie = _cookie;\n this._options = _options;\n this._cache = this._options.cache || new DefaultCache();\n }\n RequestSender.prototype.sendRequest = function (url, options) {\n var _this = this;\n var requestOptions = this._mergeDefaultOptions(url, options);\n var cachedRequest = this._getCachedRequest(url, requestOptions);\n if (cachedRequest) {\n return Promise.resolve(cachedRequest);\n }\n var request = this._requestFactory.createRequest(this._prependHost(url), requestOptions);\n return new Promise(function (resolve, reject) {\n var requestHandler = function () {\n var response = _this._payloadTransformer.toResponse(request);\n if (response.status >= 200 && response.status < 300) {\n _this._cacheRequest(url, requestOptions, response);\n resolve(response);\n }\n else {\n reject(response);\n }\n };\n request.onload = requestHandler;\n request.onerror = requestHandler;\n request.onabort = requestHandler;\n request.ontimeout = requestHandler;\n if (requestOptions.timeout instanceof Timeout) {\n requestOptions.timeout.onComplete(function () { return request.abort(); });\n requestOptions.timeout.start();\n }\n if (isPromise(requestOptions.timeout)) {\n requestOptions.timeout.then(function () { return request.abort(); });\n }\n request.send(_this._payloadTransformer.toRequestBody(requestOptions));\n });\n };\n RequestSender.prototype.get = function (url, options) {\n return this.sendRequest(url, __assign(__assign({}, options), { method: 'GET' }));\n };\n RequestSender.prototype.post = function (url, options) {\n return this.sendRequest(url, __assign(__assign({}, options), { method: 'POST' }));\n };\n RequestSender.prototype.put = function (url, options) {\n return this.sendRequest(url, __assign(__assign({}, options), { method: 'PUT' }));\n };\n RequestSender.prototype.patch = function (url, options) {\n return this.sendRequest(url, __assign(__assign({}, options), { method: 'PATCH' }));\n };\n RequestSender.prototype.delete = function (url, options) {\n return this.sendRequest(url, __assign(__assign({}, options), { method: 'DELETE' }));\n };\n RequestSender.prototype._mergeDefaultOptions = function (url, options) {\n var defaultOptions = {\n credentials: true,\n encodeParams: true,\n headers: {\n Accept: 'application/json, text/plain, */*',\n },\n method: 'GET',\n };\n var csrfToken = this._cookie.get('XSRF-TOKEN');\n if (csrfToken && defaultOptions.headers && !this._isAssetRequest(url, options)) {\n defaultOptions.headers['X-XSRF-TOKEN'] = csrfToken;\n }\n if (options && options.body && defaultOptions.headers) {\n defaultOptions.headers['Content-Type'] = 'application/json';\n }\n return merge({}, defaultOptions, options);\n };\n RequestSender.prototype._prependHost = function (url) {\n if (!this._options.host || /^https?:\\/\\//.test(url)) {\n return url;\n }\n return this._options.host.replace(/\\/$/, '') + \"/\" + url.replace(/^\\//, '');\n };\n RequestSender.prototype._shouldCacheRequest = function (options) {\n var method = options.method || 'GET';\n return method.toUpperCase() === 'GET' && Boolean(options.cache);\n };\n RequestSender.prototype._getCachedRequest = function (url, options) {\n if (this._shouldCacheRequest(options)) {\n return this._cache.read(url, options);\n }\n return null;\n };\n RequestSender.prototype._cacheRequest = function (url, options, response) {\n if (this._shouldCacheRequest(options)) {\n this._cache.write(url, options, response);\n }\n };\n RequestSender.prototype._isAssetRequest = function (url, options) {\n if (options && options.method && options.method.toUpperCase() !== 'GET') {\n return false;\n }\n return /\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(url.split('?')[0]);\n };\n return RequestSender;\n}());\nexport default RequestSender;\n","var Timeout = (function () {\n function Timeout(_delay) {\n var _this = this;\n this._delay = _delay;\n this._resolve = function () { };\n this._promise = new Promise(function (resolve) {\n _this._resolve = resolve;\n });\n }\n Timeout.prototype.onComplete = function (callback) {\n this._promise.then(callback);\n };\n Timeout.prototype.complete = function () {\n this._resolve();\n if (this._timeoutToken) {\n window.clearTimeout(this._timeoutToken);\n }\n };\n Timeout.prototype.start = function () {\n var _this = this;\n if (this._delay) {\n this._timeoutToken = window.setTimeout(function () { return _this.complete(); }, this._delay);\n }\n };\n return Timeout;\n}());\nexport default Timeout;\n","export default function toFormUrlEncoded(data) {\n if (typeof data !== 'object' || data === null) {\n return data;\n }\n return Object.keys(data)\n .filter(function (key) { return data[key] !== undefined; })\n .map(function (key) {\n var value = data[key];\n if (typeof value === 'string') {\n return key + \"=\" + encodeURIComponent(value);\n }\n return key + \"=\" + encodeURIComponent(JSON.stringify(value) || '');\n })\n .join('&');\n}\n","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\nvar objectAssign = require('object-assign');\nvar decodeComponent = require('decode-uri-component');\n\nfunction encoderForArrayFormat(opts) {\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, index) {\n\t\t\t\treturn value === null ? [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tindex,\n\t\t\t\t\t']'\n\t\t\t\t].join('') : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tencode(index, opts),\n\t\t\t\t\t']=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[]=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(opts) {\n\tvar result;\n\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t} else if (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n\t\t\treturn Number(a) - Number(b);\n\t\t}).map(function (key) {\n\t\t\treturn input[key];\n\t\t});\n\t}\n\n\treturn input;\n}\n\nfunction extract(str) {\n\tvar queryStart = str.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\treturn str.slice(queryStart + 1);\n}\n\nfunction parse(str, opts) {\n\topts = objectAssign({arrayFormat: 'none'}, opts);\n\n\tvar formatter = parserForArrayFormat(opts);\n\n\t// Create an object with no prototype\n\t// https://github.com/sindresorhus/query-string/issues/47\n\tvar ret = Object.create(null);\n\n\tif (typeof str !== 'string') {\n\t\treturn ret;\n\t}\n\n\tstr = str.trim().replace(/^[?#&]/, '');\n\n\tif (!str) {\n\t\treturn ret;\n\t}\n\n\tstr.split('&').forEach(function (param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeComponent(val);\n\n\t\tformatter(decodeComponent(key), val, ret);\n\t});\n\n\treturn Object.keys(ret).sort().reduce(function (result, key) {\n\t\tvar val = ret[key];\n\t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(val);\n\t\t} else {\n\t\t\tresult[key] = val;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = function (obj, opts) {\n\tvar defaults = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none'\n\t};\n\n\topts = objectAssign(defaults, opts);\n\n\tif (opts.sort === false) {\n\t\topts.sort = function () {};\n\t}\n\n\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).sort(opts.sort).map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn encode(key, opts);\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\tvar result = [];\n\n\t\t\tval.slice().forEach(function (val2) {\n\t\t\t\tif (val2 === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresult.push(formatter(key, val2, result.length));\n\t\t\t});\n\n\t\t\treturn result.join('&');\n\t\t}\n\n\t\treturn encode(key, opts) + '=' + encode(val, opts);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\nexports.parseUrl = function (str, opts) {\n\treturn {\n\t\turl: str.split('?')[0] || '',\n\t\tquery: parse(extract(str), opts)\n\t};\n};\n","export default class BrowserSupport {\n canSupportRel(rel: string): boolean {\n const link = document.createElement('link');\n\n return !!(\n link.relList &&\n link.relList.supports &&\n link.relList.supports(rel)\n );\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport BrowserSupport from './browser-support';\nimport ScriptLoader from './script-loader';\n\nexport default function createScriptLoader(): ScriptLoader {\n return new ScriptLoader(\n new BrowserSupport(),\n createRequestSender()\n );\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport BrowserSupport from './browser-support';\nimport StylesheetLoader from './stylesheet-loader';\n\nexport default function createStylesheetLoader(): StylesheetLoader {\n return new StylesheetLoader(\n new BrowserSupport(),\n createRequestSender()\n );\n}\n","import createScriptLoader from './create-script-loader';\nimport ScriptLoader from './script-loader';\n\nlet instance: ScriptLoader;\n\nexport default function getScriptLoader(): ScriptLoader {\n if (!instance) {\n instance = createScriptLoader();\n }\n\n return instance;\n}\n","import createStylesheetLoader from './create-stylesheet-loader';\nimport StylesheetLoader from './stylesheet-loader';\n\nlet instance: StylesheetLoader;\n\nexport default function getStylesheetLoader(): StylesheetLoader {\n if (!instance) {\n instance = createStylesheetLoader();\n }\n\n return instance;\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport BrowserSupport from './browser-support';\n\nexport interface LoadScriptOptions {\n async: boolean;\n attributes: ScriptAttributes;\n}\n\nexport interface PreloadScriptOptions {\n prefetch: boolean;\n}\n\nexport interface ScriptAttributes {\n [key: string]: string;\n}\n\nexport default class ScriptLoader {\n private _scripts: { [key: string]: Promise } = {};\n private _preloadedScripts: { [key: string]: Promise } = {};\n\n /**\n * @internal\n */\n constructor(\n private _browserSupport: BrowserSupport,\n private _requestSender: RequestSender\n ) {}\n\n loadScript(src: string, options?: LoadScriptOptions): Promise {\n if (!this._scripts[src]) {\n this._scripts[src] = new Promise((resolve, reject) => {\n const script = document.createElement('script') as LegacyHTMLScriptElement;\n const { async = false, attributes = {} } = options || {};\n\n Object.keys(attributes)\n .forEach(key => {\n script.setAttribute(key, attributes[key]);\n });\n\n script.onload = () => resolve();\n script.onreadystatechange = () => resolve();\n script.onerror = event => {\n delete this._scripts[src];\n reject(event);\n };\n script.async = async;\n script.src = src;\n\n document.body.appendChild(script);\n });\n }\n\n return this._scripts[src];\n }\n\n loadScripts(urls: string[], options?: LoadScriptOptions): Promise {\n return Promise.all(urls.map(url => this.loadScript(url, options)))\n .then(() => undefined);\n }\n\n preloadScript(url: string, options?: PreloadScriptOptions): Promise {\n if (!this._preloadedScripts[url]) {\n this._preloadedScripts[url] = new Promise((resolve, reject) => {\n const { prefetch = false } = options || {};\n const rel = prefetch ? 'prefetch' : 'preload';\n\n if (this._browserSupport.canSupportRel(rel)) {\n const preloadedScript = document.createElement('link');\n\n preloadedScript.as = 'script';\n preloadedScript.rel = rel;\n preloadedScript.href = url;\n\n preloadedScript.onload = () => {\n resolve();\n };\n\n preloadedScript.onerror = () => {\n delete this._preloadedScripts[url];\n reject();\n };\n\n document.head.appendChild(preloadedScript);\n } else {\n this._requestSender.get(url, {\n credentials: false,\n headers: { Accept: 'application/javascript' },\n })\n .then(() => resolve())\n .catch(reject);\n }\n });\n }\n\n return this._preloadedScripts[url];\n }\n\n preloadScripts(urls: string[], options?: PreloadScriptOptions): Promise {\n return Promise.all(urls.map(url => this.preloadScript(url, options)))\n .then(() => undefined);\n }\n}\n\ninterface LegacyHTMLScriptElement extends HTMLScriptElement {\n // `onreadystatechange` is needed to support legacy IE\n onreadystatechange(this: HTMLElement, event: Event): any;\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport BrowserSupport from './browser-support';\n\nexport interface LoadStylesheetOptions {\n prepend: boolean;\n attributes?: StylesheetAttributes;\n}\n\nexport interface PreloadStylesheetOptions {\n prefetch: boolean;\n}\n\nexport interface StylesheetAttributes {\n [key: string]: string;\n}\n\nexport default class StylesheetLoader {\n private _stylesheets: { [key: string]: Promise } = {};\n private _preloadedStylesheets: { [key: string]: Promise } = {};\n\n /**\n * @internal\n */\n constructor(\n private _browserSupport: BrowserSupport,\n private _requestSender: RequestSender\n ) {}\n\n loadStylesheet(src: string, options?: LoadStylesheetOptions): Promise {\n if (!this._stylesheets[src]) {\n this._stylesheets[src] = new Promise((resolve, reject) => {\n const stylesheet = document.createElement('link');\n const { prepend = false, attributes = {} } = options || {};\n\n Object.keys(attributes)\n .forEach(key => {\n stylesheet.setAttribute(key, attributes[key]);\n });\n\n stylesheet.onload = () => resolve();\n stylesheet.onerror = event => {\n delete this._stylesheets[src];\n reject(event);\n };\n stylesheet.rel = 'stylesheet';\n stylesheet.href = src;\n\n if (prepend && document.head.children[0]) {\n document.head.insertBefore(stylesheet, document.head.children[0]);\n } else {\n document.head.appendChild(stylesheet);\n }\n });\n }\n\n return this._stylesheets[src];\n }\n\n loadStylesheets(urls: string[], options?: LoadStylesheetOptions): Promise {\n return Promise.all(urls.map(url => this.loadStylesheet(url, options)))\n .then(() => undefined);\n }\n\n preloadStylesheet(url: string, options?: PreloadStylesheetOptions): Promise {\n if (!this._preloadedStylesheets[url]) {\n this._preloadedStylesheets[url] = new Promise((resolve, reject) => {\n const { prefetch = false } = options || {};\n const rel = prefetch ? 'prefetch' : 'preload';\n\n if (this._browserSupport.canSupportRel(rel)) {\n const preloadedStylesheet = document.createElement('link');\n\n preloadedStylesheet.as = 'style';\n preloadedStylesheet.rel = prefetch ? 'prefetch' : 'preload';\n preloadedStylesheet.href = url;\n\n preloadedStylesheet.onload = () => {\n resolve();\n };\n\n preloadedStylesheet.onerror = event => {\n delete this._preloadedStylesheets[url];\n reject(event);\n };\n\n document.head.appendChild(preloadedStylesheet);\n } else {\n this._requestSender.get(url, {\n credentials: false,\n headers: { Accept: 'text/css' },\n })\n .then(() => resolve())\n .catch(reject);\n }\n });\n }\n\n return this._preloadedStylesheets[url];\n }\n\n preloadStylesheets(urls: string[], options?: PreloadStylesheetOptions): Promise {\n return Promise.all(urls.map(url => this.preloadStylesheet(url, options)))\n .then(() => undefined);\n }\n}\n","'use strict';\n\nmodule.exports = {\n number: require('./src/card-number'),\n expirationDate: require('./src/expiration-date'),\n expirationMonth: require('./src/expiration-month'),\n expirationYear: require('./src/expiration-year'),\n cvv: require('./src/cvv'),\n postalCode: require('./src/postal-code'),\n creditCardType: require('credit-card-type')\n};\n","'use strict';\n\nvar luhn10 = require('./luhn-10');\nvar getCardTypes = require('credit-card-type');\n\nfunction verification(card, isPotentiallyValid, isValid) {\n return {card: card, isPotentiallyValid: isPotentiallyValid, isValid: isValid};\n}\n\nfunction cardNumber(value, options) {\n var potentialTypes, cardType, isPotentiallyValid, isValid, i, maxLength;\n\n options = options || {};\n\n if (typeof value === 'number') {\n value = String(value);\n }\n\n if (typeof value !== 'string') { return verification(null, false, false); }\n\n value = value.replace(/\\-|\\s/g, '');\n\n if (!/^\\d*$/.test(value)) { return verification(null, false, false); }\n\n potentialTypes = getCardTypes(value);\n\n if (potentialTypes.length === 0) {\n return verification(null, false, false);\n } else if (potentialTypes.length !== 1) {\n return verification(null, true, false);\n }\n\n cardType = potentialTypes[0];\n\n if (options.maxLength && value.length > options.maxLength) {\n return verification(cardType, false, false);\n }\n\n if (cardType.type === getCardTypes.types.UNIONPAY && options.luhnValidateUnionPay !== true) {\n isValid = true;\n } else {\n isValid = luhn10(value);\n }\n\n maxLength = Math.max.apply(null, cardType.lengths);\n if (options.maxLength) {\n maxLength = Math.min(options.maxLength, maxLength);\n }\n\n for (i = 0; i < cardType.lengths.length; i++) {\n if (cardType.lengths[i] === value.length) {\n isPotentiallyValid = value.length < maxLength || isValid;\n\n return verification(cardType, isPotentiallyValid, isValid);\n }\n }\n\n return verification(cardType, value.length < maxLength, false);\n}\n\nmodule.exports = cardNumber;\n","'use strict';\n\nvar DEFAULT_LENGTH = 3;\n\nfunction includes(array, thing) {\n var i = 0;\n\n for (; i < array.length; i++) {\n if (thing === array[i]) { return true; }\n }\n\n return false;\n}\n\nfunction max(array) {\n var maximum = DEFAULT_LENGTH;\n var i = 0;\n\n for (; i < array.length; i++) {\n maximum = array[i] > maximum ? array[i] : maximum;\n }\n\n return maximum;\n}\n\nfunction verification(isValid, isPotentiallyValid) {\n return {isValid: isValid, isPotentiallyValid: isPotentiallyValid};\n}\n\nfunction cvv(value, maxLength) {\n maxLength = maxLength || DEFAULT_LENGTH;\n maxLength = maxLength instanceof Array ? maxLength : [maxLength];\n\n if (typeof value !== 'string') { return verification(false, false); }\n if (!/^\\d*$/.test(value)) { return verification(false, false); }\n if (includes(maxLength, value.length)) { return verification(true, true); }\n if (value.length < Math.min.apply(null, maxLength)) { return verification(false, true); }\n if (value.length > max(maxLength)) { return verification(false, false); }\n\n return verification(true, true);\n}\n\nmodule.exports = cvv;\n","'use strict';\n\nvar parseDate = require('./parse-date');\nvar expirationMonth = require('./expiration-month');\nvar expirationYear = require('./expiration-year');\n\nfunction verification(isValid, isPotentiallyValid, month, year) {\n return {\n isValid: isValid,\n isPotentiallyValid: isPotentiallyValid,\n month: month,\n year: year\n };\n}\n\nfunction expirationDate(value, maxElapsedYear) {\n var date, monthValid, yearValid, isValidForThisYear;\n\n if (typeof value === 'string') {\n value = value.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/, '$1/$2');\n date = parseDate(value);\n } else if (value !== null && typeof value === 'object') {\n date = {\n month: String(value.month),\n year: String(value.year)\n };\n } else {\n return verification(false, false, null, null);\n }\n\n monthValid = expirationMonth(date.month);\n yearValid = expirationYear(date.year, maxElapsedYear);\n\n if (monthValid.isValid) {\n if (yearValid.isCurrentYear) {\n isValidForThisYear = monthValid.isValidForThisYear;\n\n return verification(isValidForThisYear, isValidForThisYear, date.month, date.year);\n }\n\n if (yearValid.isValid) {\n return verification(true, true, date.month, date.year);\n }\n }\n\n if (monthValid.isPotentiallyValid && yearValid.isPotentiallyValid) {\n return verification(false, true, null, null);\n }\n\n return verification(false, false, null, null);\n}\n\nmodule.exports = expirationDate;\n","'use strict';\n\nfunction verification(isValid, isPotentiallyValid, isValidForThisYear) {\n return {\n isValid: isValid,\n isPotentiallyValid: isPotentiallyValid,\n isValidForThisYear: isValidForThisYear || false\n };\n}\n\nfunction expirationMonth(value) {\n var month, result;\n var currentMonth = new Date().getMonth() + 1;\n\n if (typeof value !== 'string') {\n return verification(false, false);\n }\n if (value.replace(/\\s/g, '') === '' || value === '0') {\n return verification(false, true);\n }\n if (!/^\\d*$/.test(value)) {\n return verification(false, false);\n }\n\n month = parseInt(value, 10);\n\n if (isNaN(value)) {\n return verification(false, false);\n }\n\n result = month > 0 && month < 13;\n\n return verification(result, result, result && month >= currentMonth);\n}\n\nmodule.exports = expirationMonth;\n","'use strict';\n\nvar DEFAULT_VALID_NUMBER_OF_YEARS_IN_THE_FUTURE = 19;\n\nfunction verification(isValid, isPotentiallyValid, isCurrentYear) {\n return {\n isValid: isValid,\n isPotentiallyValid: isPotentiallyValid,\n isCurrentYear: isCurrentYear || false\n };\n}\n\nfunction expirationYear(value, maxElapsedYear) {\n var currentFirstTwo, currentYear, firstTwo, len, twoDigitYear, valid, isCurrentYear;\n\n maxElapsedYear = maxElapsedYear || DEFAULT_VALID_NUMBER_OF_YEARS_IN_THE_FUTURE;\n\n if (typeof value !== 'string') {\n return verification(false, false);\n }\n if (value.replace(/\\s/g, '') === '') {\n return verification(false, true);\n }\n if (!/^\\d*$/.test(value)) {\n return verification(false, false);\n }\n\n len = value.length;\n\n if (len < 2) {\n return verification(false, true);\n }\n\n currentYear = new Date().getFullYear();\n\n if (len === 3) {\n // 20x === 20x\n firstTwo = value.slice(0, 2);\n currentFirstTwo = String(currentYear).slice(0, 2);\n\n return verification(false, firstTwo === currentFirstTwo);\n }\n\n if (len > 4) {\n return verification(false, false);\n }\n\n value = parseInt(value, 10);\n twoDigitYear = Number(String(currentYear).substr(2, 2));\n\n if (len === 2) {\n isCurrentYear = twoDigitYear === value;\n valid = value >= twoDigitYear && value <= twoDigitYear + maxElapsedYear;\n } else if (len === 4) {\n isCurrentYear = currentYear === value;\n valid = value >= currentYear && value <= currentYear + maxElapsedYear;\n }\n\n return verification(valid, valid, isCurrentYear);\n}\n\nmodule.exports = expirationYear;\n","'use strict';\n\n// Polyfill taken from .\n\nmodule.exports = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n","/*\n * Luhn algorithm implementation in JavaScript\n * Copyright (c) 2009 Nicholas C. Zakas\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n'use strict';\n\nfunction luhn10(identifier) {\n var sum = 0;\n var alt = false;\n var i = identifier.length - 1;\n var num;\n\n while (i >= 0) {\n num = parseInt(identifier.charAt(i), 10);\n\n if (alt) {\n num *= 2;\n if (num > 9) {\n num = (num % 10) + 1; // eslint-disable-line no-extra-parens\n }\n }\n\n alt = !alt;\n\n sum += num;\n\n i--;\n }\n\n return sum % 10 === 0;\n}\n\nmodule.exports = luhn10;\n","'use strict';\n\nvar expirationYear = require('./expiration-year');\nvar isArray = require('./lib/is-array');\n\nfunction getNumberOfMonthDigitsInDateString(dateString) {\n var firstCharacter = Number(dateString[0]);\n var assumedYear;\n\n /*\n if the first character in the string starts with `0`,\n we know that the month will be 2 digits.\n\n '0122' => {month: '01', year: '22'}\n */\n if (firstCharacter === 0) {\n return 2;\n }\n\n /*\n if the first character in the string starts with\n number greater than 1, it must be a 1 digit month\n\n '322' => {month: '3', year: '22'}\n */\n if (firstCharacter > 1) {\n return 1;\n }\n\n /*\n if the first 2 characters make up a number between\n 13-19, we know that the month portion must be 1\n\n '139' => {month: '1', year: '39'}\n */\n if (firstCharacter === 1 && Number(dateString[1]) > 2) {\n return 1;\n }\n\n /*\n if the first 2 characters make up a number between\n 10-12, we check if the year portion would be considered\n valid if we assumed that the month was 1. If it is\n not potentially valid, we assume the month must have\n 2 digits.\n\n '109' => {month: '10', year: '9'}\n '120' => {month: '1', year: '20'} // when checked in the year 2019\n '120' => {month: '12', year: '0'} // when checked in the year 2021\n */\n if (firstCharacter === 1) {\n assumedYear = dateString.substr(1);\n\n return expirationYear(assumedYear).isPotentiallyValid ? 1 : 2;\n }\n\n /*\n If the length of the value is exactly 5 characters,\n we assume a full year was passed in, meaning the remaining\n single leading digit must be the month value.\n\n '12202' => {month: '1', year: '2202'}\n */\n if (dateString.length === 5) {\n return 1;\n }\n\n /*\n If the length of the value is more than five characters,\n we assume a full year was passed in addition to the month\n and therefore the month portion must be 2 digits.\n\n '112020' => {month: '11', year: '2020'}\n */\n if (dateString.length > 5) {\n return 2;\n }\n\n /*\n By default, the month value is the first value\n */\n return 1;\n}\n\nfunction parseDate(date) {\n var month, numberOfDigitsInMonth;\n\n if (/^\\d{4}-\\d{1,2}$/.test(date)) {\n date = date.split('-').reverse();\n } else if (/\\//.test(date)) {\n date = date.split(/\\s*\\/\\s*/g);\n } else if (/\\s/.test(date)) {\n date = date.split(/ +/g);\n }\n\n if (isArray(date)) {\n return {\n month: date[0] || '',\n year: date.slice(1).join()\n };\n }\n\n numberOfDigitsInMonth = getNumberOfMonthDigitsInDateString(date);\n\n month = date.substr(0, numberOfDigitsInMonth);\n\n return {\n month: month,\n year: date.substr(month.length)\n };\n}\n\nmodule.exports = parseDate;\n","'use strict';\n\nvar DEFAULT_MIN_POSTAL_CODE_LENGTH = 3;\n\nfunction verification(isValid, isPotentiallyValid) {\n return {isValid: isValid, isPotentiallyValid: isPotentiallyValid};\n}\n\nfunction postalCode(value, options) {\n var minLength;\n\n options = options || {};\n\n minLength = options.minLength || DEFAULT_MIN_POSTAL_CODE_LENGTH;\n\n if (typeof value !== 'string') {\n return verification(false, false);\n } else if (value.length < minLength) {\n return verification(false, true);\n }\n\n return verification(true, true);\n}\n\nmodule.exports = postalCode;\n","'use strict';\n\nvar types = require('./lib/card-types');\nvar clone = require('./lib/clone');\nvar findBestMatch = require('./lib/find-best-match');\nvar isValidInputType = require('./lib/is-valid-input-type');\nvar addMatchingCardsToResults = require('./lib/add-matching-cards-to-results');\n\nvar testOrder;\nvar customCards = {};\n\nvar cardNames = {\n VISA: 'visa',\n MASTERCARD: 'mastercard',\n AMERICAN_EXPRESS: 'american-express',\n DINERS_CLUB: 'diners-club',\n DISCOVER: 'discover',\n JCB: 'jcb',\n UNIONPAY: 'unionpay',\n MAESTRO: 'maestro',\n ELO: 'elo',\n MIR: 'mir',\n HIPER: 'hiper',\n HIPERCARD: 'hipercard'\n};\n\nvar ORIGINAL_TEST_ORDER = [\n cardNames.VISA,\n cardNames.MASTERCARD,\n cardNames.AMERICAN_EXPRESS,\n cardNames.DINERS_CLUB,\n cardNames.DISCOVER,\n cardNames.JCB,\n cardNames.UNIONPAY,\n cardNames.MAESTRO,\n cardNames.ELO,\n cardNames.MIR,\n cardNames.HIPER,\n cardNames.HIPERCARD\n];\n\ntestOrder = clone(ORIGINAL_TEST_ORDER);\n\nfunction findType(type) {\n return customCards[type] || types[type];\n}\n\nfunction getAllCardTypes() {\n return testOrder.map(function (type) {\n return clone(findType(type));\n });\n}\n\nfunction getCardPosition(name, ignoreErrorForNotExisting) {\n var position = testOrder.indexOf(name);\n\n if (!ignoreErrorForNotExisting && position === -1) {\n throw new Error('\"' + name + '\" is not a supported card type.');\n }\n\n return position;\n}\n\nfunction creditCardType(cardNumber) {\n var bestMatch;\n var results = [];\n\n if (!isValidInputType(cardNumber)) {\n return [];\n }\n\n if (cardNumber.length === 0) {\n return getAllCardTypes(testOrder);\n }\n\n testOrder.forEach(function (type) {\n var cardConfiguration = findType(type);\n\n addMatchingCardsToResults(cardNumber, cardConfiguration, results);\n });\n\n bestMatch = findBestMatch(results);\n\n if (bestMatch) {\n return [bestMatch];\n }\n\n return results;\n}\n\ncreditCardType.getTypeInfo = function (type) {\n return clone(findType(type));\n};\n\ncreditCardType.removeCard = function (name) {\n var position = getCardPosition(name);\n\n testOrder.splice(position, 1);\n};\n\ncreditCardType.addCard = function (config) {\n var existingCardPosition = getCardPosition(config.type, true);\n\n customCards[config.type] = config;\n\n if (existingCardPosition === -1) {\n testOrder.push(config.type);\n }\n};\n\ncreditCardType.updateCard = function (cardType, updates) {\n var clonedCard;\n var originalObject = customCards[cardType] || types[cardType];\n\n if (!originalObject) {\n throw new Error('\"' + cardType + '\" is not a recognized type. Use `addCard` instead.');\n }\n\n if (updates.type && originalObject.type !== updates.type) {\n throw new Error('Cannot overwrite type parameter.');\n }\n\n clonedCard = clone(originalObject, true);\n\n Object.keys(clonedCard).forEach(function (key) {\n if (updates[key]) {\n clonedCard[key] = updates[key];\n }\n });\n\n customCards[clonedCard.type] = clonedCard;\n};\n\ncreditCardType.changeOrder = function (name, position) {\n var currentPosition = getCardPosition(name);\n\n testOrder.splice(currentPosition, 1);\n testOrder.splice(position, 0, name);\n};\n\ncreditCardType.resetModifications = function () {\n testOrder = clone(ORIGINAL_TEST_ORDER);\n customCards = {};\n};\n\ncreditCardType.types = cardNames;\n\nmodule.exports = creditCardType;\n","'use strict';\n\nvar clone = require('./clone');\nvar matches = require('./matches');\n\nfunction addMatchingCardsToResults(cardNumber, cardConfiguration, results) {\n var i, pattern, patternLength, clonedCardConfiguration;\n\n for (i = 0; i < cardConfiguration.patterns.length; i++) {\n pattern = cardConfiguration.patterns[i];\n\n if (!matches(cardNumber, pattern)) {\n continue;\n }\n\n clonedCardConfiguration = clone(cardConfiguration);\n\n if (Array.isArray(pattern)) {\n patternLength = String(pattern[0]).length;\n } else {\n patternLength = String(pattern).length;\n }\n\n if (cardNumber.length >= patternLength) {\n clonedCardConfiguration.matchStrength = patternLength;\n }\n\n results.push(clonedCardConfiguration);\n break;\n }\n}\n\nmodule.exports = addMatchingCardsToResults;\n","'use strict';\n\nvar cardTypes = {\n visa: {\n niceType: 'Visa',\n type: 'visa',\n patterns: [\n 4\n ],\n gaps: [4, 8, 12],\n lengths: [16, 18, 19],\n code: {\n name: 'CVV',\n size: 3\n }\n },\n mastercard: {\n niceType: 'Mastercard',\n type: 'mastercard',\n patterns: [\n [51, 55],\n [2221, 2229],\n [223, 229],\n [23, 26],\n [270, 271],\n 2720\n ],\n gaps: [4, 8, 12],\n lengths: [16],\n code: {\n name: 'CVC',\n size: 3\n }\n },\n 'american-express': {\n niceType: 'American Express',\n type: 'american-express',\n patterns: [\n 34,\n 37\n ],\n gaps: [4, 10],\n lengths: [15],\n code: {\n name: 'CID',\n size: 4\n }\n },\n 'diners-club': {\n niceType: 'Diners Club',\n type: 'diners-club',\n patterns: [\n [300, 305],\n 36,\n 38,\n 39\n ],\n gaps: [4, 10],\n lengths: [14, 16, 19],\n code: {\n name: 'CVV',\n size: 3\n }\n },\n discover: {\n niceType: 'Discover',\n type: 'discover',\n patterns: [\n 6011,\n [644, 649],\n 65\n ],\n gaps: [4, 8, 12],\n lengths: [16, 19],\n code: {\n name: 'CID',\n size: 3\n }\n },\n jcb: {\n niceType: 'JCB',\n type: 'jcb',\n patterns: [\n 2131,\n 1800,\n [3528, 3589]\n ],\n gaps: [4, 8, 12],\n lengths: [16, 17, 18, 19],\n code: {\n name: 'CVV',\n size: 3\n }\n },\n unionpay: {\n niceType: 'UnionPay',\n type: 'unionpay',\n patterns: [\n 620,\n [624, 626],\n [62100, 62182],\n [62184, 62187],\n [62185, 62197],\n [62200, 62205],\n [622010, 622999],\n 622018,\n [622019, 622999],\n [62207, 62209],\n [622126, 622925],\n [623, 626],\n 6270,\n 6272,\n 6276,\n [627700, 627779],\n [627781, 627799],\n [6282, 6289],\n 6291,\n 6292,\n 810,\n [8110, 8131],\n [8132, 8151],\n [8152, 8163],\n [8164, 8171]\n ],\n gaps: [4, 8, 12],\n lengths: [14, 15, 16, 17, 18, 19],\n code: {\n name: 'CVN',\n size: 3\n }\n },\n maestro: {\n niceType: 'Maestro',\n type: 'maestro',\n patterns: [\n 493698,\n [500000, 506698],\n [506779, 508999],\n [56, 59],\n 63,\n 67,\n 6\n ],\n gaps: [4, 8, 12],\n lengths: [12, 13, 14, 15, 16, 17, 18, 19],\n code: {\n name: 'CVC',\n size: 3\n }\n },\n elo: {\n niceType: 'Elo',\n type: 'elo',\n patterns: [\n 401178,\n 401179,\n 438935,\n 457631,\n 457632,\n 431274,\n 451416,\n 457393,\n 504175,\n [506699, 506778],\n [509000, 509999],\n 627780,\n 636297,\n 636368,\n [650031, 650033],\n [650035, 650051],\n [650405, 650439],\n [650485, 650538],\n [650541, 650598],\n [650700, 650718],\n [650720, 650727],\n [650901, 650978],\n [651652, 651679],\n [655000, 655019],\n [655021, 655058]\n ],\n gaps: [4, 8, 12],\n lengths: [16],\n code: {\n name: 'CVE',\n size: 3\n }\n },\n mir: {\n niceType: 'Mir',\n type: 'mir',\n patterns: [\n [2200, 2204]\n ],\n gaps: [4, 8, 12],\n lengths: [16, 17, 18, 19],\n code: {\n name: 'CVP2',\n size: 3\n }\n },\n hiper: {\n niceType: 'Hiper',\n type: 'hiper',\n patterns: [\n 637095,\n 637568,\n 637599,\n 637609,\n 637612\n ],\n gaps: [4, 8, 12],\n lengths: [16],\n code: {\n name: 'CVC',\n size: 3\n }\n },\n hipercard: {\n niceType: 'Hipercard',\n type: 'hipercard',\n patterns: [\n 606282\n ],\n gaps: [4, 8, 12],\n lengths: [16],\n code: {\n name: 'CVC',\n size: 3\n }\n }\n};\n\nmodule.exports = cardTypes;\n","'use strict';\n\nfunction clone(originalObject) {\n var dupe;\n\n if (!originalObject) { return null; }\n\n dupe = JSON.parse(JSON.stringify(originalObject));\n\n return dupe;\n}\n\nmodule.exports = clone;\n","'use strict';\n\nfunction hasEnoughResultsToDetermineBestMatch(results) {\n var numberOfResultsWithMaxStrengthProperty = results.filter(function (result) {\n return result.matchStrength;\n }).length;\n\n // if all possible results have a maxStrength property\n // that means the card number is sufficiently long\n // enough to determine conclusively what the type is\n return numberOfResultsWithMaxStrengthProperty > 0 &&\n numberOfResultsWithMaxStrengthProperty === results.length;\n}\n\nfunction findBestMatch(results) {\n if (!hasEnoughResultsToDetermineBestMatch(results)) {\n return;\n }\n\n return results.reduce(function (bestMatch, result) { // eslint-disable-line consistent-return\n if (!bestMatch) {\n return result;\n }\n\n // if the current best match pattern is less specific\n // than this result, set the result as the new best match\n if (bestMatch.matchStrength < result.matchStrength) {\n return result;\n }\n\n return bestMatch;\n });\n}\n\nmodule.exports = findBestMatch;\n","'use strict';\n\nfunction isValidInputType(cardNumber) {\n return typeof cardNumber === 'string' || cardNumber instanceof String;\n}\n\nmodule.exports = isValidInputType;\n","'use strict';\n\n// Adapted from https://github.com/polvo-labs/card-type/blob/aaab11f80fa1939bccc8f24905a06ae3cd864356/src/cardType.js#L37-L42\nfunction matchesRange(cardNumber, min, max) {\n var maxLengthToCheck = String(min).length;\n var substr = cardNumber.substr(0, maxLengthToCheck);\n var integerRepresentationOfCardNumber = parseInt(substr, 10);\n\n min = parseInt(String(min).substr(0, substr.length), 10);\n max = parseInt(String(max).substr(0, substr.length), 10);\n\n return integerRepresentationOfCardNumber >= min && integerRepresentationOfCardNumber <= max;\n}\n\nfunction matchesPattern(cardNumber, pattern) {\n pattern = String(pattern);\n\n return pattern.substring(0, cardNumber.length) === cardNumber.substring(0, pattern.length);\n}\n\nfunction matches(cardNumber, pattern) {\n if (Array.isArray(pattern)) {\n return matchesRange(cardNumber, pattern[0], pattern[1]);\n }\n\n return matchesPattern(cardNumber, pattern);\n}\n\nmodule.exports = matches;\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\nvar isObj = require('is-obj');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Sources cannot be null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction assignKey(to, from, key) {\n\tvar val = from[key];\n\n\tif (val === undefined || val === null) {\n\t\treturn;\n\t}\n\n\tif (hasOwnProperty.call(to, key)) {\n\t\tif (to[key] === undefined || to[key] === null) {\n\t\t\tthrow new TypeError('Cannot convert undefined or null to object (' + key + ')');\n\t\t}\n\t}\n\n\tif (!hasOwnProperty.call(to, key) || !isObj(val)) {\n\t\tto[key] = val;\n\t} else {\n\t\tto[key] = assign(Object(to[key]), from[key]);\n\t}\n}\n\nfunction assign(to, from) {\n\tif (to === from) {\n\t\treturn to;\n\t}\n\n\tfrom = Object(from);\n\n\tfor (var key in from) {\n\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\tassignKey(to, from, key);\n\t\t}\n\t}\n\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar symbols = Object.getOwnPropertySymbols(from);\n\n\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\tassignKey(to, from, symbols[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n}\n\nmodule.exports = function deepAssign(target) {\n\ttarget = toObject(target);\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tassign(target, arguments[s]);\n\t}\n\n\treturn target;\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\nmodule.exports = function (x) {\n\tvar type = typeof x;\n\treturn x !== null && (type === 'object' || type === 'function');\n};\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = memoize;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '