@flittpayments/js-sdk 2.0.14 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -12
- package/dist/cjs/checkout.js +7 -11
- package/dist/esm/checkout.js +7 -13
- package/dist/umd/checkout.js +1 -1
- package/dist/umd/checkout.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -105,18 +105,6 @@ git clone git@github.com:flittpayments/js-sdk.git
|
|
|
105
105
|
})
|
|
106
106
|
// Visibility event handlers
|
|
107
107
|
paymentButton
|
|
108
|
-
.on('show', () => {
|
|
109
|
-
// Fires immediately when the showing process starts
|
|
110
|
-
})
|
|
111
|
-
.on('shown', () => {
|
|
112
|
-
// Fires after the show transition/animation ends
|
|
113
|
-
})
|
|
114
|
-
.on('hide', () => {
|
|
115
|
-
// Fires immediately when the hiding process starts
|
|
116
|
-
})
|
|
117
|
-
.on('hidden', () => {
|
|
118
|
-
// Fires after the hide transition/animation ends
|
|
119
|
-
})
|
|
120
108
|
// Apple Pay Specific Events
|
|
121
109
|
.on('show:apple', () => {
|
|
122
110
|
// Fires immediately when Apple Pay starts showing
|
package/dist/cjs/checkout.js
CHANGED
|
@@ -2009,6 +2009,9 @@ const PaymentElement = Module.extend({
|
|
|
2009
2009
|
isMounted() {
|
|
2010
2010
|
return this.state.mounted === true;
|
|
2011
2011
|
},
|
|
2012
|
+
isHide() {
|
|
2013
|
+
return this.state.type === 'hide';
|
|
2014
|
+
},
|
|
2012
2015
|
unmount() {
|
|
2013
2016
|
if (this.element.parentNode) {
|
|
2014
2017
|
this.element.parentNode.removeChild(this.element);
|
|
@@ -2027,12 +2030,12 @@ const PaymentElement = Module.extend({
|
|
|
2027
2030
|
return value;
|
|
2028
2031
|
},
|
|
2029
2032
|
getTimeoutValue() {
|
|
2030
|
-
return toArray(
|
|
2033
|
+
return toArray([this.iframe, this.element]).map(transitionDelay).sort().pop();
|
|
2031
2034
|
},
|
|
2032
2035
|
getState(state, transition) {
|
|
2033
2036
|
return this.state.type === (state ? 'show' : 'hide') && this.state.transition === transition;
|
|
2034
2037
|
},
|
|
2035
|
-
triggerState() {
|
|
2038
|
+
triggerState(timeout) {
|
|
2036
2039
|
this.request.trigger(this.state.type, {
|
|
2037
2040
|
transition: this.state.transition,
|
|
2038
2041
|
method: this.params.method
|
|
@@ -2080,12 +2083,13 @@ const PaymentElement = Module.extend({
|
|
|
2080
2083
|
this.state.transition = true;
|
|
2081
2084
|
this.state.type = state;
|
|
2082
2085
|
this.triggerState();
|
|
2083
|
-
this.timeout('afterTransition', this.getTimeoutValue(
|
|
2086
|
+
this.timeout('afterTransition', this.getTimeoutValue());
|
|
2084
2087
|
},
|
|
2085
2088
|
afterTransition() {
|
|
2086
2089
|
this.iframeLoaded.then(function () {
|
|
2087
2090
|
this.state.transition = false;
|
|
2088
2091
|
this.triggerState();
|
|
2092
|
+
if (this.isHide()) this.unmount();
|
|
2089
2093
|
});
|
|
2090
2094
|
}
|
|
2091
2095
|
});
|
|
@@ -2218,19 +2222,11 @@ const PaymentButton = Module.extend({
|
|
|
2218
2222
|
name.push(data.method);
|
|
2219
2223
|
return name.join(':');
|
|
2220
2224
|
},
|
|
2221
|
-
triggerEventComplete(state, data) {
|
|
2222
|
-
const transition = data.transition;
|
|
2223
|
-
const name = this.toggleEventType(state, transition);
|
|
2224
|
-
const check = this.buttons.filter(i => i.isMounted()).every(i => i.getState(state, transition));
|
|
2225
|
-
if (check) this.trigger(name, {});
|
|
2226
|
-
},
|
|
2227
2225
|
onShow(_cx, data) {
|
|
2228
2226
|
this.trigger(this.toggleEventNamespace(true, data), {});
|
|
2229
|
-
this.triggerEventComplete(true, data);
|
|
2230
2227
|
},
|
|
2231
2228
|
onHide(_cx, data) {
|
|
2232
2229
|
this.trigger(this.toggleEventNamespace(false, data), {});
|
|
2233
|
-
this.triggerEventComplete(false, data);
|
|
2234
2230
|
},
|
|
2235
2231
|
onPending(_cx, state) {
|
|
2236
2232
|
this.trigger('pending', state);
|
package/dist/esm/checkout.js
CHANGED
|
@@ -2143,6 +2143,9 @@ const PaymentElement = Module.extend({
|
|
|
2143
2143
|
isMounted() {
|
|
2144
2144
|
return this.state.mounted === true
|
|
2145
2145
|
},
|
|
2146
|
+
isHide() {
|
|
2147
|
+
return this.state.type === 'hide'
|
|
2148
|
+
},
|
|
2146
2149
|
unmount() {
|
|
2147
2150
|
if (this.element.parentNode) {
|
|
2148
2151
|
this.element.parentNode.removeChild(this.element);
|
|
@@ -2161,12 +2164,12 @@ const PaymentElement = Module.extend({
|
|
|
2161
2164
|
return value
|
|
2162
2165
|
},
|
|
2163
2166
|
getTimeoutValue() {
|
|
2164
|
-
return toArray(
|
|
2167
|
+
return toArray([this.iframe, this.element]).map(transitionDelay).sort().pop()
|
|
2165
2168
|
},
|
|
2166
2169
|
getState(state, transition) {
|
|
2167
2170
|
return this.state.type === (state ? 'show' : 'hide') && this.state.transition === transition
|
|
2168
2171
|
},
|
|
2169
|
-
triggerState() {
|
|
2172
|
+
triggerState(timeout) {
|
|
2170
2173
|
this.request.trigger(this.state.type, {
|
|
2171
2174
|
transition: this.state.transition,
|
|
2172
2175
|
method: this.params.method,
|
|
@@ -2214,12 +2217,13 @@ const PaymentElement = Module.extend({
|
|
|
2214
2217
|
this.state.transition = true;
|
|
2215
2218
|
this.state.type = state;
|
|
2216
2219
|
this.triggerState();
|
|
2217
|
-
this.timeout('afterTransition', this.getTimeoutValue(
|
|
2220
|
+
this.timeout('afterTransition', this.getTimeoutValue());
|
|
2218
2221
|
},
|
|
2219
2222
|
afterTransition() {
|
|
2220
2223
|
this.iframeLoaded.then(function () {
|
|
2221
2224
|
this.state.transition = false;
|
|
2222
2225
|
this.triggerState();
|
|
2226
|
+
if (this.isHide()) this.unmount();
|
|
2223
2227
|
});
|
|
2224
2228
|
},
|
|
2225
2229
|
});
|
|
@@ -2359,21 +2363,11 @@ const PaymentButton = Module.extend({
|
|
|
2359
2363
|
name.push(data.method);
|
|
2360
2364
|
return name.join(':')
|
|
2361
2365
|
},
|
|
2362
|
-
triggerEventComplete(state, data) {
|
|
2363
|
-
const transition = data.transition;
|
|
2364
|
-
const name = this.toggleEventType(state, transition);
|
|
2365
|
-
const check = this.buttons
|
|
2366
|
-
.filter((i) => i.isMounted())
|
|
2367
|
-
.every((i) => i.getState(state, transition));
|
|
2368
|
-
if (check) this.trigger(name, {});
|
|
2369
|
-
},
|
|
2370
2366
|
onShow(_cx, data) {
|
|
2371
2367
|
this.trigger(this.toggleEventNamespace(true, data), {});
|
|
2372
|
-
this.triggerEventComplete(true, data);
|
|
2373
2368
|
},
|
|
2374
2369
|
onHide(_cx, data) {
|
|
2375
2370
|
this.trigger(this.toggleEventNamespace(false, data), {});
|
|
2376
|
-
this.triggerEventComplete(false, data);
|
|
2377
2371
|
},
|
|
2378
2372
|
onPending(_cx, state) {
|
|
2379
2373
|
this.trigger('pending', state);
|
package/dist/umd/checkout.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).$checkout=e()}(this,(function(){"use strict";var t={},e={},n=function(e,n){if(!t[e])throw Error(["module is undefined",e].join(" "));return new t[e](n||{})};function i(t,i){return e[t]?e[t]:e[t]=n(t,i)}function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function o(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 i,r,o,s,a=[],u=!0,h=!1;try{if(o=(n=n.call(t)).next,0===e);else for(;!(u=(i=o.call(n)).done)&&(a.push(i.value),a.length!==e);u=!0);}catch(t){h=!0,r=t}finally{try{if(!u&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(h)throw r}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.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)?r(t,e):void 0}}(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 s(t){return s="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},s(t)}i.get=function(t,e){return n(t,e)},i.add=function(e,n){return function(e,n){if(t[e])throw Error(["module already added",e].join(" "));t[e]=n}(e,n),this};var a,u,h=/^\d+$/,l=/([^\[\]]+)|(\[\])/g,c=/([^?#]*)(#.*)?$/,d=/%20/g,p=/\[\]$/,f=/\s([a-zA-Z]+)/,m=function(t){return decodeURIComponent(t.replace(/\+/g," "))},g=function(t){var e=[];return S(t,(function(t){e=e.concat(w(t)?g(t):t)})),e},y=function(t,e,n){w(e)?S(e,(function(i,r){p.test(t)?n(t,i):y(t+"["+(b(e)?r:"")+"]",i,n)})):b(e)?S(e,(function(e,i){y(t+"["+i+"]",e,n)})):n(t,e)},v=function(t){return{}.toString.call(t).match(f)[1].toLowerCase()},b=function(t){return!!t&&"object"===s(t)&&t.constructor===Object},x=function(t){return"function"===v(t)},w=function(t){return"array"===v(t)},P=function(t){return t&&1===t.nodeType},E=function(t){return[].slice.call(t)},C=function(t,e){return t&&t.hasOwnProperty(e)},S=function(t,e,n){for(var i in t)C(t,i)&&e.call(n||null,t[i],i)},_=function(t){for(var e in t)C(t,e)&&(0===t[e].length?(w(t)&&t.splice(e,1),b(t)&&delete t[e]):b(t[e])&&_(t[e]));return t},k=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];return S(n,(function(e){null!==e&&S(e,(function(e,n){b(e)?t[n]=k(t[n]||{},e):t[n]=e}))})),t},A=function(){for(var t=0,e="";t++<36;)e+=51*t&52?(15^t?8^Math.random()*(20^t?16:4):4).toString(16):"-";return e},q=(a=window,C(a,"PaymentRequest")&&x(a.PaymentRequest)&&(u=a.PaymentRequest),function(t,e,n){var i=null;if((e=e||{}).id=A(),n=n||{},u)try{i=new u(t,e,n)}catch(t){i=null}return i}),j=function(){var t,e;return{promise:new Promise((function(n,i){t=n,e=i})),resolve:t,reject:e}},R=function(t){var e=t.methods,n=t.details,i=t.options,r=e.find((function(t){return"https://apple.com/apple-pay"===t.supportedMethods})),o=[],s=[];return i.requestShipping&&s.push("postalAddress"),i.requestPayerName&&o.push("name"),i.requestPayerEmail&&o.push("email"),i.requestPayerPhone&&o.push("phone"),{version:r.data.version,countryCode:r.data.countryCode,supportedNetworks:r.data.supportedNetworks,merchantCapabilities:r.data.merchantCapabilities,merchantIdentifier:r.data.merchantIdentifier,lineItems:r.data.lineItems||n.displayItems,additionalLineItems:r.data.additionalLineItems,recurringPaymentRequest:r.data.recurringPaymentRequest,deferredPaymentRequest:r.data.deferredPaymentRequest,currencyCode:r.data.currencyCode||n.total.amount.currency,total:{label:n.total.label,amount:n.total.amount.value},requiredBillingContactFields:s,requiredShippingContactFields:o}},O=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=Object.keys(n).filter((function(t){return void 0!==n[t]&&null!==n[t]})).map((function(t){return"".concat(encodeURIComponent(t),"=").concat(encodeURIComponent(n[t]))})).join("&"),r=[t,e].join(""),o=~r.indexOf("?")?"&":"?";return i?"".concat(r).concat(o).concat(i):r},M=function(t){var e=t.split(".").reduce((function(t,e){return t&&t.hasOwnProperty(e)?t=t[e]:null}),window);return x(e),e},L=function(t,e){var n=E(document.scripts).filter((function(e){return e.src===t}));if(o(n,1)[0])return Promise.resolve(M(e));var i=j(),r=i.promise,s=i.resolve,a=document.createElement("script");return a.async=!0,a.src=t,a.addEventListener("load",(function(){var n=M(e);console.log("api loading","success",t),s(n)})),a.addEventListener("error",(function(n){var i=M(e);console.log("api loading","error",t),s(i)})),document.head.appendChild(a),r},T=function(t){var e=getComputedStyle(t),n=e.transitionDelay,i=e.transitionDuration;return 1e3*(Number.parseFloat(i)+Number.parseFloat(n))},D=Object.freeze({__proto__:null,PromiseWithResolvers:j,addAttr:function(t,e){if(!1===P(t))return!1;b(e)&&S(e,(function(e,n){t.setAttribute(n,e)}))},addClass:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.shift();if(!1!==P(i)){var r=i.className.trim().split(/\s+/);g(e.map((function(t){return t.trim().split(/\s+/)}))).forEach((function(t){t&&!~r.indexOf(t)&&r.push(t)})),i.className=r.join(" ").trim()}},buildUrl:O,cleanObject:_,createElement:function(t){return document.createElement(t)},cssUnit:function(t,e){return String(t||0).concat(e||"").concat(" !important")},deparam:function(t){var e={};return"?"===t.charAt(0)&&(t=t.slice(1)),t&&c.test(t)&&S(t.split("&"),(function(t){var n=t.split("="),i=m(n.shift()),r=m(n.join("=")),o=e;if(i){for(var s=0,a=(n=i.match(l)).length-1;s<a;s++)o[n[s]]||(o[n[s]]=h.test(n[s+1])||"[]"===n[s+1]?[]:{}),o=o[n[s]];var u=n.pop();"[]"===u?o.push(r):o[u]=r}})),e},extend:k,forEach:S,getAppleSessionConfig:R,getFunction:M,getPath:function(t){var e=t.split("."),n=e.shift(),i=null;return C(window,n)&&(i=window[n],S(e,(function(t){i=C(i,t)?i[t]:null}))),i},getPaymentRequest:q,getStyle:function(t,e,n){return((n=window.getComputedStyle)?n(t):t.currentStyle)[e.replace(/-(\w)/gi,(function(t,e){return e.toUpperCase()}))]},getType:v,hasProp:C,isArguments:function(t){return"arguments"===v(t)},isArray:w,isBoolean:function(t){return"boolean"==typeof t},isDate:function(t){return"date"===v(t)},isElement:P,isError:function(t){return"error"===v(t)},isFunction:x,isNumber:function(t){return"number"===v(t)},isObject:function(t){return"object"===v(t)},isPlainObject:b,isRegexp:function(t){return"regexp"===v(t)},isString:function(t){return"string"===v(t)},jsonParse:function(t,e){try{return JSON.parse(t)}catch(t){return e}},loadExternalApi:L,map:function(t,e,n){var i,r,o=[];for(i in t)C(t,i)&&void 0!==(r=e.call(n||null,t[i],i))&&(o[i]=r);return o},param:function(t){var e=[];return S(t,(function(t,n){y(n,t,(function(t,n){n=null==n?"":n,e.push([encodeURIComponent(t),encodeURIComponent(n)].join("="))}))})),e.join("&").replace(d,"+")},querySelector:function(t,e){return(e||document).querySelector(t)},querySelectorAll:function(t,e){return E((e||document).querySelectorAll(t))},removeAttr:function(t,e){if(!1===P(t))return!1;b(e)&&S(e,(function(e){t.removeAttribute(e)}))},removeClass:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.shift();if(!1!==P(i)){var r=i.className.trim().split(/\s+/);g(e.map((function(t){return t.trim().split(/\s+/)}))).forEach((function(t){if(t){var e=r.indexOf(t);~e&&r.splice(e,1)}})),i.className=r.join(" ").trim()}},removeElement:function(t){t.parentNode.removeChild(t)},stringFormat:function(t,e,n){return(t||"").replace(n||/{(.+?)}/g,(function(t,n){return e[n]||t}))},toArray:E,transitionDelay:T,uuid:A}),z="https://pay.flitt.com",U={gateway:"/latest/checkout-v2/index.html",element:"/latest/checkout-v2/button/element.html"},I="http://secure-redirect.cloudipsp.com/submit/",F={apiVersion:2,apiVersionMinor:0,allowedPaymentMethods:[{type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY","CRYPTOGRAM_3DS"],allowedCardNetworks:["AMEX","DISCOVER","INTERAC","JCB","MASTERCARD","VISA"]}}]},N=[{url:"https://pay.google.com/gp/p/js/pay.js",name:"google",path:"google.payments.api.PaymentsClient",callback:function(t){return!!t&&new t({environment:"TEST"}).isReadyToPay(F).catch((function(t){return console.log(t),!1}))}},{url:"https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js",name:"apple",path:"ApplePaySession",callback:function(t){return!!t&&t.supportsVersion(3)}}],B=["ar","bg","ca","zh","hr","cs","da","nl","en","et","fi","fr","de","el","id","it","ja","ko","ms","no","pl","pt","ru","sr","sk","sl","es","sv","th","tr","uk"],W={width:"1px !important",height:"1px !important",left:"1px !important",bottom:"1px !important",position:"fixed !important",border:"0px !important"},V={border:"none !important",margin:"0 !important",padding:"0 !important",display:"block !important",width:"1px !important","min-width":"100% !important",background:"transparent !important",position:"relative !important",opacity:"0 !important",overflow:"hidden !important",height:"100% !important",outline:"none !important","color-scheme":"light","z-index":"1 !important"},G={tabindex:"-1",scrolling:"no",frameborder:0,allowtransparency:!0,allowpaymentrequest:!0},$={"z-index":"2 !important",position:"absolute !important",border:"none !important",background:"transparent !important",left:"0 !important",top:"0 !important",cursor:"pointer !important",outline:"none !important",width:"100% !important",height:"100% !important"},J={role:"button","aria-pressed":"false"},H={border:"0 !important",margin:"0 !important",padding:"0 !important",display:"block !important",background:"transparent !important","user-select":"none !important",overflow:"hidden !important",position:"relative !important",opacity:"1 !important",height:"0 !important",width:"100% !important",outline:"none !important"},Z="dark",Y={dark:"dark",light:"light",black:"dark",white:"light"},X={ar:"",bg:"",ca:"",zh:"",hr:"",cs:"",da:"",nl:"",en:"Pay with",et:"",es:"Comprar con",el:"",fi:"",fr:"Acheter avec",de:"Zahlen über",id:"",it:"Acquista con",ja:"",ko:"",ms:"",no:"",pl:"Zapłać przez",pt:"",ru:"Оплатить через",sr:"",sk:"Zaplatiť cez",sl:"",sv:"",th:"",tr:"",uk:"Оплатити через"},K=Object.freeze({__proto__:null,ApiEndpoint:U,ApiFrameCss:W,ApiOrigin:z,ButtonColorMap:Y,ButtonContainerCss:H,ButtonCoverAttrs:J,ButtonCoverCss:$,ButtonDefaultColor:Z,ButtonFrameAttrs:G,ButtonFrameCss:V,ButtonLabelMap:X,GoogleBaseRequest:F,GooglePayApi:"https://pay.google.com/gp/p/js/pay.js",GooglePayLanguages:B,PaymentMethodsConfig:N,PaymentRequestDetails:{total:{label:"Total",amount:{currency:"USD",value:"0.00"}}},ProxyUrl:I});function Q(){var t=[],e=[],n=[],i=0,r=void 0,o=null,s=null,a=function(t,e,n){var i=[].concat(n),a=function(t,e){o=e?Array.from(t):[t]},u=function(){var t=i.shift();t&&(void 0!==(s=t.apply(r,o))?s&&s.then?s.then((function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];a(e,!0),u()})):(a(s),u()):u())};r=t,o=e,u()},u={done:function(e){return x(e)&&(this.isResolved()?e.apply(r,o):t.push(e)),this},fail:function(t){return x(t)&&(this.isRejected()?t.apply(r,o):e.push(t)),this},progress:function(t){return x(t)&&(this.isProgress()?t.apply(r,o):n.push(t)),this},always:function(t){return this.done(t).fail(t)},then:function(t,e,n){return x(t)&&this.done(t),x(e)&&this.fail(e),x(n)&&this.progress(e),this},promise:function(t){return null===t?u:(S(u,(function(e,n){t[n]=e})),t)},state:function(){return i},isPending:function(){return 0===i},isRejected:function(){return 2===i},isResolved:function(){return 1===i},isProgress:function(){return 3===i},clear:function(){return this.isPending()&&(t.length=0,e.length=0,n.length=0),this},resolveWith:function(e,n){return this.isPending()&&(i=1,a(e,n,t)),this},rejectWith:function(t,n){return this.isPending()&&(i=2,a(t,n,e)),this},notifyWith:function(t,e){return this.isPending()&&(i=3,a(t,e,n),i=0),this},resolve:function(){return this.resolveWith(this,Array.from(arguments))},reject:function(){return this.rejectWith(this,Array.from(arguments))},notify:function(){return this.notifyWith(this,Array.from(arguments))}};return u}var tt=!1,et=/xyz/.test(function(){return"xyz"}.toString())?/\b_super\b/:/.*/;function nt(){}function it(t,e,n){return function(){var i,r=this._super;return this._super=t[e],i=n.apply(this,arguments),this._super=r,i}}nt.prototype._super=function(){},nt.prototype.instance=function(t){return new this.constructor(t)},nt.prototype.proxy=function(t){return function(t,e){return function(){return e.apply(t,[this].concat(Array.prototype.slice.call(arguments)))}}(this,t="string"==typeof t?this[t]:t)},nt.extend=function t(e){function n(){!tt&&this&&this.init.apply(this,arguments)}return n.prototype=function(t,e){var n,i,r=t.prototype;for(n in tt=!0,i=new t,tt=!1,e)e.hasOwnProperty(n)&&("function"==typeof r[n]&&"function"==typeof e[n]&&et.test(e[n])?i[n]=it(r,n,e[n]):i[n]=e[n]);return i}(this,e),n.prototype.constructor=n,n.extend=t,n};var rt=nt.extend({init:function(){this.events={},this.empty=[]},on:function(t,e){return(this.events[t]=this.events[t]||[]).push(e),this},off:function(t,e){t||(this.events={});for(var n=this.events[t]||this.empty,i=n.length=e?n.length:0;i--;)e===n[i]&&n.splice(i,1);return this},trigger:function(t){for(var e,n=this.events[t]||this.empty,i=n.length>0?n.slice(0,n.length):n,r=0;e=i[r++];)e.apply(e,this.empty.slice.call(arguments,1));return this}}),ot=nt.extend({utils:D,getListener:function(){return this._listener_||(this._listener_=new rt),this._listener_},destroy:function(){this.off()},on:function(t,e){return this.getListener().on(t,e),this},off:function(t,e){return this.getListener().off(t,e),this},proxy:function(t){return this._proxy_cache_||(this._proxy_cache_={}),this.utils.isString(t)?(this._proxy_cache_[t]||(this._proxy_cache_[t]=this._super(t)),this._proxy_cache_[t]):this._super(t)},trigger:function(){return this.getListener().trigger.apply(this.getListener(),arguments),this},each:function(t,e){this.utils.forEach(t,this.proxy(e))},addAttr:function(t,e){if(!this.utils.isElement(t))return!1;this.utils.forEach(e,(function(e,n){t.setAttribute(n,e)}))},addCss:function(t,e){if(!this.utils.isElement(t))return!1;this.utils.forEach(e,(function(e,n){this.addCssProperty(t,n,e)}),this)},addCssProperty:function(t,e,n){var i,r=t.style.cssText.match(new RegExp("(?:[;\\s]|^)("+e.replace("-","\\-")+"\\s*:(.*?)(;|$))"));r?(i=r.index+r[0].indexOf(r[1]),t.style.cssText=t.style.cssText.substring(0,i)+e+": "+n+";"+t.style.cssText.substring(i+r[1].length)):t.style.cssText+=" "+e+": "+n+";"},addEvent:function(t,e,n){if(!t||!e||!n)return!1;n=this.proxy(n),t.addEventListener?t.addEventListener(e,n):t.attachEvent&&t.attachEvent("on"+e,n)},removeEvent:function(t,e,n){if(!t||!e||!n)return!1;n=this.proxy(n),t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&t.detachEvent("on"+e,n)},prepareForm:function(t,e,n,i){var r=this.utils.createElement("form");return this.addAttr(r,{action:t,target:n||"_self",method:i||"POST"}),this.addCss(r,{display:"none"}),this.utils.forEach(e,(function(t,e,n){(n=this.utils.createElement("input")).type="hidden",n.name=e,n.value=t,r.appendChild(n)}),this),r}}),st=ot.extend({ns:"crossDomain",origin:"*",uniqueId:1,signature:null,init:function(t){this.setTarget(t.target),this.setOrigin(t.origin),this.create()},create:function(){this.addEvent(window,"message","router")},setOrigin:function(t){this.origin=t||"*"},setTarget:function(t){return this.target=t,this},getUID:function(){return++this.uniqueId},destroy:function(){this.removeEvent(window,"message","router"),this._super()},router:function(t,e,n){if(this.target!==e.source)return!1;try{n=JSON.parse(e.data)}catch(t){}n&&n.action&&n.data&&this.trigger(n.action,n.data)},send:function(t,e,n,i){if(this.target){n=JSON.stringify({action:t,data:e}),i={targetOrigin:this.origin,delegate:"payment"};try{this.target.postMessage(n,i)}catch(t){this.target.postMessage(n,this.origin,[])}}}}),at=Object.freeze({__proto__:null,acs:function(t){return"\n".concat('\n<style>\n .flitt-modal {\n box-sizing: border-box;\n margin: 100px auto;\n max-width: 680px;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n }\n\n @media (max-width: 850px) {\n .flitt-modal {\n margin: 50px auto;\n }\n }\n\n @media (max-width: 695px) {\n .flitt-modal {\n max-width: 100%;\n margin: 5px;\n }\n }\n\n .flitt-modal-wrapper {\n box-sizing: border-box;\n overflow: auto;\n position: fixed;\n z-index: 99999;\n left: 0;\n bottom: 0;\n top: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n .flitt-modal-header {\n box-sizing: border-box;\n background-color: #fafafa;\n height: 50px;\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n .flitt-modal-close {\n box-sizing: border-box;\n float: right;\n overflow: hidden;\n height: 50px;\n text-decoration: none;\n border-top-right-radius: 5px;\n color: #949494;\n }\n\n .flitt-modal-close:hover, .flitt-modal-close:focus, .flitt-modal-close:active {\n text-decoration: none;\n color: #646464;\n }\n\n .flitt-modal-close:before {\n content: "×";\n font-size: 50px;\n line-height: 50px;\n padding: 0 10px;\n }\n\n .flitt-modal-title {\n box-sizing: border-box;\n border-top-left-radius: 5px;\n line-height: 20px;\n height: 50px;\n padding: 5px 15px;\n font-size: 12px;\n display: table-cell;\n vertical-align: middle;\n }\n .flitt-modal-content {\n box-sizing: border-box;\n border-bottom-left-radius: 5px;\n min-height: 650px;\n }\n .flitt-modal-iframe {\n overflow-x: hidden;\n border: 0;\n display: block;\n width: 100%;\n height: 750px;\n }\n</style>\n','\n<div class="flitt-modal-wrapper">\n <div class="flitt-modal">\n <div class="flitt-modal-header">\n <a href="javascript:void(0)" class="flitt-modal-close"></a>\n <div class="flitt-modal-title">\n ').concat(t.messages.modalHeader,"\n <a href='javascript:void(0)'>").concat(t.messages.modalLinkLabel,'</a>\n </div>\n </div>\n <div class="flitt-modal-content">\n <iframe src="about:blank" class="flitt-modal-iframe" frameborder="0" allowtransparency="true"></iframe>\n </div>\n </div>\n</div>\n')}});var ut=nt.extend({init:function(t){this.view=at[t]||function(t){return function(e){return["template",t,"not found"].join(" ")}}(t)},render:function(t){return this.view(t)}}),ht=ot.extend({init:function(t){this.checkout=t.checkout,this.model=t.model||{},this.messages=t.checkout.params.messages||{},this.template=new ut("acs"),this.body=this.utils.querySelector("body"),this.initModal(),this.initConnector()},initModal:function(){this.name=["modal-iframe",this.getRandomNumber()].join("-"),this.modal=this.utils.createElement("div"),this.modal.innerHTML=this.template.render({model:this.model,messages:this.messages}),this.iframe=this.find(".flitt-modal-iframe"),this.addAttr(this.iframe,{name:this.name,id:this.name}),this.model.send_data?(this.form=this.prepareForm(this.model.url,this.model.send_data,this.name),this.modal.appendChild(this.form)):this.iframe.src=this.model.url,this.addEvent(this.find(".flitt-modal-close"),"click","closeModal"),this.addEvent(this.find(".flitt-modal-title a"),"click","submitForm"),this.initScrollbar(),this.submitToIframe()},submitToIframe:function(){this.modal&&this.body.appendChild(this.modal),this.form&&this.form.submit()},measureScrollbar:function(){var t=document.createElement("div");return t.className="modal-scrollbar-measure",this.body.appendChild(t),this.utils.removeElement(t),t.offsetWidth-t.clientWidth},checkScrollbar:function(){var t,e=window.innerWidth;e||(e=(t=document.documentElement.getBoundingClientRect()).right-Math.abs(t.left)),this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},initScrollbar:function(){this.checkScrollbar(),this.bodyPad=parseInt(this.utils.getStyle(this.body,"padding-right")||0,10),this.originalBodyPad=document.body.style.paddingRight||"",this.originalOverflow=document.body.style.overflow||"",this.bodyIsOverflowing&&this.addCss(this.body,{paddingRight:[this.bodyPad+this.scrollbarWidth,"px"].join(""),overflow:"hidden"})},resetScrollbar:function(){this.addCss(this.body,{paddingRight:this.originalBodyPad?[this.originalBodyPad,"px"].join(""):"",overflow:this.originalOverflow})},getRandomNumber:function(){return Math.round(1e9*Math.random())},find:function(t){return this.utils.querySelector(t,this.modal)},closeModal:function(t,e){e.preventDefault(),this.trigger("close",this.data),this.removeModal()},submitForm:function(t,e){e.preventDefault(),this.trigger("submit",this.data),this.addAttr(this.form,{target:"_blank"}),this.form.submit()},removeModal:function(){this.destroy()},destroy:function(){this.utils.removeElement(this.modal),this.resetScrollbar(),this.connector.destroy(),this._super()},initConnector:function(){this.connector=new st({target:this.iframe.contentWindow}),this.connector.on("response",this.proxy("onResponse"))},onResponse:function(t,e){this.sendResponse(e),this.removeModal()},sendResponse:function(t){this.checkout.connector.send("request",{uid:t.uid,action:"api.checkout.proxy",method:"send",params:t})}}),lt=ot.extend({init:function(t){this.data=t||{},this.create()},create:function(){},eachProps:function(t){var e=t[1]?t[0]:null,n=t[1]?t[1]:t[0];return{list:e?this.alt(e,[]):this.data,callback:n}},each:function(){var t=this.eachProps(arguments);for(var e in t.list)t.list.hasOwnProperty(e)&&t.callback(this.instance(t.list[e]),t.list[e],e)},filter:function(){var t=this.eachProps(arguments);for(var e in t.list)if(t.list.hasOwnProperty(e)){var n=this.instance(t.list[e]);if(t.callback(n,t.list[e],e))return t.list[e]}},find:function(){var t=this.eachProps(arguments);for(var e in t.list)if(t.list.hasOwnProperty(e)){var n=this.instance(t.list[e]);if(t.callback(n,t.list[e],e))return n}return!1},alt:function(t,e){return void 0===(t=this.attr(t))?e:t},attr:function(t,e){for(var n=0,i=this.data,r=(t||"").split("."),o=r.pop(),s=arguments.length;n<r.length;n++)if(i&&i.hasOwnProperty(r[n]))i=i[r[n]];else{if(2!==s)break;i=i[r[n]]={}}return 1===s?i?i[o]:void 0:(2===s&&(i[o]=e),this)},stringify:function(){return JSON.stringify(this.serialize())},serialize:function(){return this.data}}),ct=lt.extend({stringFormat:function(t){var e=this;return(t||"").replace(/{(.+?)}/g,(function(t,n){return e.attr(["order.order_data",n].join("."))||t}))},setConnector:function(t){return this.connector=t,this},setUID:function(t){return this.uid=t,this},getUID:function(){return this.uid},formDataProxy:function(t,e,n,i){location.assign([I,JSON.stringify({url:t,params:e,target:n,method:i})].join("#"))},formDataSubmit:function(t,e,n,i){if(t.match(/^http:/))return this.formDataProxy(t,e,n,i);var r=this.stringFormat(t),o=this.prepareForm(r,e,n,i);this.utils.querySelector("body").appendChild(o),o.submit(),o.parentNode.removeChild(o)},inProgress:function(){return this.attr("order.in_progress")},readyToSubmit:function(){return this.attr("order.ready_to_submit")},waitForResponse:function(){return this.attr("order.pending")},needVerifyCode:function(){return this.attr("order.need_verify_code")},redirectUrl:function(){return!!this.attr("url")&&(this.redirectToUrl(this.attr("url")),!0)},redirectToUrl:function(t){location.assign(t)},submitToMerchant:function(){var t=this.attr("order.ready_to_submit"),e=this.attr("model.url")||this.attr("order.response_url"),n=this.attr("order.method"),i=this.attr("order.action"),r=this.attr("model.send_data")||this.attr("order.order_data");if(t&&e&&r)return"redirect"===i||!0===r.get_without_parameters?this.redirectToUrl(e):this.formDataSubmit(e,r,"_self",n),!0},submitForm:function(){var t=this.attr("method"),e=this.attr("url"),n=this.attr("send_data");return!(!e||!n)&&(this.formDataSubmit(e,n,"_self",t),!0)},sendResponse:function(){var t=this.attr("action");return"submit"===t?this.submitForm():"redirect"===t&&this.redirectUrl()},prepare3dsData:function(){var t={},e=this.attr("submit3ds");return e["3ds"]&&(t.token=this.attr("token"),t.uid=this.getUID(),t.frame=!0,e.send_data.TermUrl&&(e.send_data.TermUrl=[e.send_data.TermUrl,this.utils.param(t)].join("#!!"))),e},waitOn3dsDecline:function(){var t=this.alt("submit3ds.checkout_data",{js_wait_on_3ds_decline:!1,js_wait_on_3ds_decline_duration:0});return t.js_wait_on_3ds_decline?t.js_wait_on_3ds_decline_duration:0},submit3dsForm:function(){this.attr("submit3ds.checkout_data")&&this.connector.trigger("modal",this.prepare3dsData())},supportedMethod:function(t){var e=this.find("methods",(function(e){return e.alt("supportedMethods","").match(t)}));e?this.attr("methods",[e.serialize()]):this.attr("methods",[])}}),dt=ot.extend({defaults:{version:"default",origin:z,endpoint:U,container:"body",messages:{modalHeader:"Now you will be redirected to your bank 3DSecure. If you are not redirected please refer",modalLinkLabel:"link"}},init:function(t){this.initParams(t)},url:function(t,e){return O(this.params.origin,this.params.endpoint[t],{version:this.params.version,origin:location.origin})},extendParams:function(t){return this.utils.extend(this.params,t),this},initParams:function(t){this.iframeDeferred=Q(),this.params=this.utils.extend({},this.defaults),this.extendParams(t),this.setOrigin(this.params.origin)},setOrigin:function(t){return this.utils.isString(t)&&(this.params.origin=t),this},scope:function(t){t=this.proxy(t),this.domReady((function(){this.createFrame(),this.iframeDeferred.isPending()?this.iframeDeferred.done(t):t()}))},domReady:function(t){t=this.proxy(t),"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t):t()},request:function(t,e,n){var i=Q(),r={uid:this.connector.getUID(),action:t,method:e,params:n||{}};return this.connector.send("request",r),this.connector.on(r.uid,this.proxy((function(t,e,n,o){var s=new ct(e);s.setUID(r.uid),s.setConnector(this.connector),o="resolveWith",s.attr("submit3ds")&&(o="notifyWith"),s.attr("error")&&(o="rejectWith"),i[o](this,[s])}))),i},createFrame:function(){if(this.iframe)return this;if(this.iframe=this.utils.createElement("iframe"),this.addAttr(this.iframe,{allowtransparency:!0,frameborder:0,scrolling:"no"}),this.addAttr(this.iframe,{src:this.url("gateway")}),this.addCss(this.iframe,W),this.utils.isElement(this.params.container)&&(this.container=this.params.container),this.utils.isString(this.params.container)&&(this.container=this.utils.querySelector(this.params.container)),!this.container)throw Error('container element not found: document.querySelector("'.concat(this.params.container,'")'));return this.container.firstChild?this.container.insertBefore(this.iframe,this.container.firstChild):this.container.appendChild(this.iframe),this.connector=new st({target:this.iframe.contentWindow,origin:this.params.origin}),this.connector.on("load",this.proxy("onLoadConnector")),this.connector.on("modal",this.proxy("onOpenModal")),this},onOpenModal:function(t,e){this.modal=new ht({checkout:this,model:e}),this.modal.on("close",this.proxy("onCloseModal"))},onCloseModal:function(t,e){this.trigger("modal.close",t,e)},onLoadConnector:function(){this.iframeDeferred.resolve(!0),this.connector.off("load")}}),pt=null,ft=ot.extend({config:{payment_system:"",fallback:!1,methods:[],details:{},options:{}},supported:{fallback:!1,provider:[]},payload:{payment_system:null,provider:[]},params:{},getSupportedMethods:function(){var t=this;return function(){if(pt)return pt;pt=Q();var t=[],e={provider:[]};return S(N,(function(n){t.push(L(n.url,n.path).then(n.callback).then((function(t){t?e.provider.push(n.name):console.log("payment method is not supported",n.name)})))})),Promise.all(t).finally((function(){pt.resolve(e)})),pt}().then((function(e){return t.setSupported(e),e}))},init:function(t){this.params=t||{}},setSupported:function(t){return this.supported=t,this.trigger("supported",t),this},setPayload:function(t){return this.payload=t,this.trigger("payload",t),this},setMerchant:function(t){this.merchant=t},getProviderNames:function(){var t=this;return this.supported.provider.filter((function(e){return!!~t.payload.allowed.indexOf(e)}))},setBeforeCallback:function(t){x(t)&&(this.params.before=t)},setAfterCallback:function(t){x(t)&&(this.params.after=t)},setApi:function(t){return t instanceof dt&&(this.api=t),this},getProviderPayload:function(t){return this.payload.provider[t]||{}},isMethodSupported:function(t){return-1!==this.supported.provider.indexOf(t)},isFallbackMethod:function(t){return"google"===t&&this.supported.fallback},request:function(t,e,n,i,r){var o=this;o.api&&o.api.scope((function(){o.api.request(t,e,n).done(i).fail(r)}))},session:function(t){var e=Q();return this.request("api.checkout.pay","session",t,(function(t){e.resolve(t.serialize())}),(function(t){e.reject(t)})),e},update:function(t){if(!this.isPending())return this.setPending(!0),this.params.data=t,this.defer=Q(),this.request("api.checkout.pay","methods",this.params.data,this.proxy((function(t,e){this.setPending(!1),this.setPayload(e.serialize()),this.defer.resolve(e)})),this.proxy((function(t,e){this.setPending(!1),this.setPayload(e.serialize()),this.trigger("error",e.serialize()),this.defer.reject(e)}))),this.defer},isPending:function(){return!0===this.pendingState},setPending:function(t){this.pendingState!==t&&(this.pendingState=t,this.trigger("pending",t))},before:function(){if(!this.isPending()){this.setPending(!0);var t=Q(),e=this;return t.always((function(){e.setPending(!1)})),this.params.before(t),t}},after:function(t){var e=Q();return this.params.after(e,t),e},withApplePay:function(t,e){var n=R(e),i=new ApplePaySession(n.version,n),r=this.merchant,o=this;i.onvalidatemerchant=function(e){o.session({url:e.validationURL,domain:location.host,merchant_id:r}).done((function(e){try{i.completeMerchantValidation(e.data)}catch(e){t.reject({code:e.code,message:e.message})}}))},i.oncancel=function(){t.reject({code:20,message:"cancel"})},i.onpaymentauthorized=function(e){i.completePayment(ApplePaySession.STATUS_SUCCESS),t.resolve(e.payment)},i.begin()},withGooglePay:function(t,e){var n=e.methods.find((function(t){return"https://google.com/pay"===t.supportedMethods}));new google.payments.api.PaymentsClient({environment:n.data.environment}).loadPaymentData(n.data).then((function(e){t.resolve(e)})).catch((function(e){t.reject({code:e.code,message:e.message})}))},pay:function(t){if(!this.isPending()){this.setPending(!0);var e=this,n=Q(),i=this.getProviderPayload(t);switch(n.always((function(){e.setPending(!1)})),t){case"google":this.withGooglePay(n,i);break;case"apple":this.withApplePay(n,i)}return n.done((function(t){e.trigger("details",{payment_system:e.payload.payment_system,data:t})})).fail((function(t){e.trigger("error",t)}))}}}),mt=ot.extend({defaults:{method:null,appendTo:null,className:"payment-element",origin:z,endpoint:U.element,mode:"plain",color:"black",lang:"en",height:38},init:function(t){this.state={type:"hide",transition:!1,pending:!1,mounted:!1,supported:!1,allowed:!1},this.params={},this.utils.extend(this.params,this.defaults),this.utils.extend(this.params,t),this.initElement()},timeout:function(t,e){return this.timeoutMap=this.timeoutMap||{},clearTimeout(this.timeoutMap[e]),this.timeoutMap[t]=setTimeout(this.proxy(t),e),this},getElementUrl:function(){return[this.params.origin,this.params.endpoint].join("")},getElementOptions:function(){return this.utils.param({method:this.params.method,mode:this.params.mode,style:this.params.style,color:this.params.color,lang:this.params.lang})},initElement:function(){this.element=this.utils.createElement("div"),this.iframe=this.utils.createElement("iframe"),this.iframeLoaded=Q(),this.button=this.utils.createElement("a"),this.addCss(this.element,H),this.addCss(this.button,$),this.addAttr(this.button,J),this.addCss(this.iframe,V),this.addAttr(this.iframe,G),this.addAttr(this.iframe,{src:[this.getElementUrl(),this.getElementOptions()].join("?")}),this.addEvent(this.iframe,"load","onloadConnector"),this.addEvent(this.iframe,"error","errorConnector"),this.addAttr(this.element,{class:this.params.className}),this.element.appendChild(this.iframe),this.element.appendChild(this.button)},errorConnector:function(){this.iframeLoaded.resolveWith(this)},onloadConnector:function(){this.iframeLoaded.resolveWith(this),this.connector=new st({target:this.iframe.contentWindow,origin:this.params.origin})},send:function(t,e){this.connector&&this.connector.send(t,e)},onEvent:function(t,e){if(e.preventDefault(),this.state.pending)return!1;this.send("event",{type:e.type})},onClick:function(){if(this.state.pending)return!1;this.request.before().done(this.proxy("onClickDone")).fail(this.proxy("onClickFail"))},onClickDone:function(){this.request.pay(this.params.method)},onClickFail:function(){},onSupported:function(t,e){this.state.supported=e.provider.includes(this.params.method),this.render()},onPayload:function(t,e){this.state.allowed=e.allowed.includes(this.params.method),this.render()},onPending:function(t,e){this.state.pending=e,this.addCss(this.element,{transition:"height 0.2s ease-out, opacity 0.4s ease-out",pointerEvents:this.state.pending?"none":"",opacity:this.state.pending?"0.5":"1"})},initEvents:function(){this.addEvent(this.button,"mouseenter","onEvent"),this.addEvent(this.button,"mouseleave","onEvent"),this.addEvent(this.button,"blur","onEvent"),this.addEvent(this.button,"focus","onEvent"),this.addEvent(this.button,"click","onClick")},setPaymentRequest:function(t){if(!(t instanceof ft))throw Error("request is not instance of PaymentRequestApi");var e=this.proxy("onSupported"),n=this.proxy("onPayload"),i=this.proxy("onPending");return this.request=t,this.request.off("supported",e).on("supported",e),this.request.off("payload",n).on("payload",n),this.request.off("pending",i).on("pending",i),this},appendTo:function(t){var e=this.utils.querySelector(t);return e&&e.appendChild(this.element),this.initEvents(),this},render:function(){return!1===this.state.supported||!1===this.state.allowed?this.hide():(this.mount(),void this.show())},notMounted:function(){return!1===this.state.mounted},isMounted:function(){return!0===this.state.mounted},unmount:function(){return this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.state.mounted=!1),this},mount:function(){return document.body.contains(this.element)||(this.appendTo(this.params.appendTo),this.state.mounted=!0),this},transitionValue:function(t){return t},getTimeoutValue:function(){return E(arguments).map(T).sort().pop()},getState:function(t,e){return this.state.type===(t?"show":"hide")&&this.state.transition===e},triggerState:function(){this.request.trigger(this.state.type,{transition:this.state.transition,method:this.params.method})},show:function(){if(!this.notMounted())return this.timeout("showCallback",25),this},hide:function(){if(!this.notMounted())return this.timeout("hideCallback",25),this},showCallback:function(){this.addCss(this.element,{transition:this.transitionValue("height 0.2s ease-out"),height:this.utils.cssUnit(this.params.height,"px"),"will-change":"height"}),this.addCss(this.iframe,{transition:this.transitionValue("opacity 0.225s 0.225s ease-out"),opacity:this.utils.cssUnit(1),"will-change":"opacity"}),this.afterCallback("show")},hideCallback:function(){this.addCss(this.element,{transition:this.transitionValue("height 0.225s 0.225s ease-out"),height:this.utils.cssUnit(0,"px"),"will-change":"height"}),this.addCss(this.iframe,{transition:this.transitionValue("opacity 0.225s ease-out"),opacity:this.utils.cssUnit(0),"will-change":"opacity"}),this.afterCallback("hide")},afterCallback:function(t){this.state.type!==t&&(this.state.transition||(this.state.transition=!0,this.state.type=t,this.triggerState(),this.timeout("afterTransition",this.getTimeoutValue(this.iframe,this.element))))},afterTransition:function(){this.iframeLoaded.then((function(){this.state.transition=!1,this.triggerState()}))}}),gt=ot.extend({defaults:{version:"default",origin:z,endpoint:U,methods:["apple","google"],element:null,style:{height:38,mode:"default",type:"long",color:"black"},data:{lang:"en"},before:function(t){t.resolve()},after:function(t,e){t.resolve(e)}},init:function(t){this.elements={},this.supported=!1,this.params={element:t.element,version:t.version||this.defaults.version,methods:t.methods||this.defaults.methods,origin:t.origin||this.defaults.origin,endpoint:this.utils.extend({},this.defaults.endpoint,t.endpoint),style:this.utils.extend({},this.defaults.style,t.style),before:x(t.before)?t.before:this.defaults.before,after:x(t.after)?t.after:this.defaults.after,data:this.utils.extend({},this.defaults.data,t.data)},this.initApi(t.api),this.initPaymentRequestApi(),this.initElements(),this.initData()},initData:function(){var t=this.params.data;t.merchant_id&&(t.currency&&t.amount||t.token)&&this.update()},initApi:function(t){this.api=t instanceof dt?t:new dt({version:this.params.version,origin:this.params.origin,endpoint:this.params.endpoint})},initPaymentRequestApi:function(){this.request=new ft({before:this.params.before,after:this.params.after}),this.request.setApi(this.api),this.request.setMerchant(this.params.data.merchant_id),this.request.on("pending",this.proxy("onPending")),this.request.on("details",this.proxy("onDetails")),this.request.on("error",this.proxy("onError")),this.request.on("show",this.proxy("onShow")),this.request.on("hide",this.proxy("onHide"))},initElements:function(){var t=this,e=this.params.style,n=this.params.data,i=this.params.origin,r=this.params.element,o=this.params.endpoint.element,s=this.request;this.buttons=[],this.container=this.utils.querySelector(this.params.element),this.addCss(this.container,{display:"flex",gap:"1rem","flex-direction":"column"}),S(this.params.methods,(function(a){var u=new mt({origin:i,endpoint:o,method:a,appendTo:r,color:e.color,mode:e.mode,lang:n.lang,height:e.height});u.setPaymentRequest(s),t.buttons.push(u)})),s.getSupportedMethods()},update:function(t){return this.request.update(this.utils.extend(this.params.data,t||{}))},onDetails:function(t,e){var n=this;this.api.scope((function(){n.request.after(n.params.data).done((function(t){n.api.request("api.checkout.form","request",n.utils.extend({},n.params.data,t||{},e)).done(n.proxy("onSuccess")).fail(n.proxy("onError"))}))}))},onSuccess:function(t,e){this.trigger("success",e)},onError:function(t,e){this.trigger("error",e)},toggleEventType:function(t,e){return t?e?"show":"shown":e?"hide":"hidden"},toggleEventNamespace:function(t,e){var n=[];return n.push(this.toggleEventType(t,e.transition)),n.push(e.method),n.join(":")},triggerEventComplete:function(t,e){var n=e.transition,i=this.toggleEventType(t,n);this.buttons.filter((function(t){return t.isMounted()})).every((function(e){return e.getState(t,n)}))&&this.trigger(i,{})},onShow:function(t,e){this.trigger(this.toggleEventNamespace(!0,e),{}),this.triggerEventComplete(!0,e)},onHide:function(t,e){this.trigger(this.toggleEventNamespace(!1,e),{}),this.triggerEventComplete(!1,e)},onPending:function(t,e){this.trigger("pending",e)}}),yt=ot.extend({defaults:{element:null,method:"card",data:{lang:"en"},style:{}},init:function(t){this.initParams(t),this.initEvents()},initParams:function(t){this.params=this.utils.extend({},this.defaults,t),this.element=this.utils.querySelector(this.params.element),this.connector=new st({target:window.parent}),this.payment=new ft({embedded:!0})},extendParams:function(t){this.utils.extend(this.params,{method:t.method,style:t.style,data:t.data,css:t.css})},getGoogleLangSupport:function(t,e){return-1!==B.indexOf(t)?t:e},getButtonColor:function(t){return Y[t]||Z},getGoogleSvg:function(t,e,n){var i={endpoint:"https://www.gstatic.com/instantbuy/svg",color:this.getButtonColor(t),mode:n||"plain",lang:e||"en"},r='url("{endpoint}/{color}/{mode}/{lang}.svg")';return"plain"===n&&(r='url("{endpoint}/{color}_gpay.svg")'),"buy"===n&&(r='url("{endpoint}/{color}/{lang}.svg")'),this.utils.stringFormat(r,i)},getAppleSvg:function(t){var e={color:this.getButtonColor(t)};return this.utils.stringFormat('url("svg/apple-pay-{color}.svg")',e)},getAppleLabel:function(t){return X[t||"en"]},addFrameImage:function(){var t=this.utils.querySelector("iframe",this.element)||this.utils.createElement("iframe"),e=this.params.style||{},n=this.getGoogleLangSupport(this.params.data.lang,"en"),i={buttonColor:e.color||"black",browserLocale:n,buttonSizeMode:"fill"},r=["https://pay.google.com/gp/p/generate_gpay_btn_img",this.utils.param(i)].join("?");this.addAttr(t,{scrolling:"no",frameborder:0,src:r}),this.element.appendChild(t),this.element.classList.remove("short","long")},styleButton:function(){var t=this.element,e=this.params,n=e.method,i=e.style||{},r=e.data.lang||"en",o=e.css||{};t.setAttribute("class",""),t.classList.add("button","pending"),"card"===n&&(n="google"),n&&t.classList.add(n),t.classList.add(r),i.type&&t.classList.add(i.type),i.mode&&t.classList.add(i.mode),i.color&&t.classList.add(i.color),"google"===n&&("short"===i.type&&(i.mode="plain"),"default"===i.mode?this.addFrameImage():o.image=this.getGoogleSvg(i.color,r,i.mode)),"apple"===n&&(o.image=this.getAppleSvg(i.color),o.label=this.getAppleLabel(r,i.mode)),o&&this.utils.forEach(o,(function(e,n){t.style.setProperty(["--",n].join(""),e)}))},initEvents:function(){this.payment.on("details",this.proxy((function(t,e){this.connector.send("details",e),this.connector.send("complete",e)}))),this.payment.on("reload",this.proxy((function(t,e){this.connector.send("reload",e)}))),this.payment.on("error",this.proxy((function(t,e){this.connector.send("error",e)}))),this.connector.on("options",this.proxy((function(t,e){this.extendParams(e),this.styleButton()}))),this.connector.on("pay",this.proxy((function(){if(!this.element.classList.contains("pending"))if("apple"===this.params.method){var t=this.payment.payload||{},e=t.provider.apple||{};this.connector.send("pay",{payment_system:t.payment_system,methods:e.methods,details:e.details,options:e.options})}else this.payment.setSupported({fallback:!1,provider:["google"]}).pay("google")}))),this.connector.on("config",this.proxy((function(t,e){this.payment.setPayload(e=function(t){var e={payment_system:t.payment_system,provider:{},allowed:[]},n=t.methods||[],i=t.details||{},r=t.options||{},o=new RegExp("//([a-z]+)\\.com/");return n.forEach((function(t){var n=o.exec(t.supportedMethods);null!==n&&(e.provider[n[1]]={methods:[t],details:i,options:r})})),e}(e)),e.payment_system&&Object.keys(e.provider).length>0?(this.element.classList.remove("pending"),this.element.classList.add("ready"),this.connector.send("show",{})):this.connector.send("hide",{})}))),this.connector.on("event",this.proxy((function(t,e){"mouseenter"===e.type&&this.element.classList.add("hover"),"mouseleave"===e.type&&this.element.classList.remove("hover"),"focusin"===e.type&&this.element.classList.add("active"),"focusout"===e.type&&this.element.classList.remove("active")})))}}),vt=dt.extend({init:function(t){this.initParams(t),this.initWidget()},initWidget:function(){this.initOptions(this.params.options),this.utils.isString(this.params.element)&&this.initElement(this.params.element)},initOptions:function(){this.utils.isPlainObject(this.params.options)&&(this.params.options=this.params.options||{})},initElement:function(t){},addSelectorEvent:function(t,e,n){return this.each(this.utils.querySelectorAll(t),(function(t,i){this.addEvent(i,e,n)})),this},getRequestParams:function(){return{}},sendRequest:function(t,e){e.defaultPrevented||(e.preventDefault(),this.trigger("request",this.getRequestParams(t)),this.scope((function(){this.request("api.checkout.form","request",this.getRequestParams(t)).done(this.proxy("onSuccess")).fail(this.proxy("onError")).progress(this.proxy("onProgress"))})))},onProgress:function(t,e){this.trigger("progress",e)},onSuccess:function(t,e){e.sendResponse(),e.submitToMerchant(),this.trigger("success",e)},onError:function(t,e){this.trigger("error",e)}}),bt=ot.extend({init:function(t){this.setFormElement(t)},setFormElement:function(t){this.utils.isElement(t)&&(this.form=t)},getData:function(t){var e=this.deparam(this.serializeArray());return!0===t?this.utils.cleanObject(e):e},serializeArray:function(){var t=this.utils.toArray(this.form.elements);return this.utils.map(t,(function(t){if(!t.disabled&&""!==t.name&&(!t.type.match("checkbox|radio")||t.checked))return{name:t.name,value:t.value}}))},serializeAndEncode:function(){return this.utils.map(this.serializeArray(),(function(t){return[t.name,encodeURIComponent(t.value)].join("=")})).join("&")},deparam:function(t){var e,n={},i=/[^\[\]]+|\[\]$/g,r=function(t,e){var i,r=n,o=t.pop(),s=t.length;for(i=0;i<s;i++)r[t[i]]||(r[t[i]]=s===i+1&&"[]"===o?[]:{}),r=r[t[i]];"[]"===o?r.push(e):r[o]=e};for(e in t)t.hasOwnProperty(e)&&r(t[e].name.match(i),t[e].value);return n}}),xt=vt.extend({initElement:function(t){this.addSelectorEvent(t,"submit","sendRequest")},getRequestParams:function(t){return this.utils.extend({},this.params.options,new bt(t).getData())}}),wt=vt.extend({attributes:{},initElement:function(t){this.utils.isPlainObject(this.params.attributes)&&this.utils.extend(this.attributes,this.params.attributes),this.addSelectorEvent(t,"click","sendRequest")},getRequestParams:function(t){return this.utils.extend({},this.params.options,this.getElementData(t))},getElementData:function(t){var e={};return this.utils.forEach(this.attributes,(function(n,i){t.hasAttribute(i)&&(e[n]=t.getAttribute(i))})),e}});return i.add("Api",dt),i.add("Connector",st),i.add("PaymentButton",gt),i.add("PaymentRequestApi",ft),i.add("PaymentElement",mt),i.add("FormWidget",xt),i.add("ButtonWidget",wt),i.Utils=D,i.Config=K,i.Api=dt,i.Module=ot,i.Modal=ht,i.Connector=st,i.Response=ct,i.PaymentRequestApi=ft,i.PaymentContainer=yt,i.PaymentElement=mt,i.PaymentButton=gt,i}));
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).$checkout=e()}(this,(function(){"use strict";var t={},e={},n=function(e,n){if(!t[e])throw Error(["module is undefined",e].join(" "));return new t[e](n||{})};function i(t,i){return e[t]?e[t]:e[t]=n(t,i)}function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function s(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 i,r,s,o,a=[],u=!0,h=!1;try{if(s=(n=n.call(t)).next,0===e);else for(;!(u=(i=s.call(n)).done)&&(a.push(i.value),a.length!==e);u=!0);}catch(t){h=!0,r=t}finally{try{if(!u&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(h)throw r}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.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)?r(t,e):void 0}}(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)}i.get=function(t,e){return n(t,e)},i.add=function(e,n){return function(e,n){if(t[e])throw Error(["module already added",e].join(" "));t[e]=n}(e,n),this};var a,u,h=/^\d+$/,l=/([^\[\]]+)|(\[\])/g,c=/([^?#]*)(#.*)?$/,d=/%20/g,p=/\[\]$/,f=/\s([a-zA-Z]+)/,m=function(t){return decodeURIComponent(t.replace(/\+/g," "))},g=function(t){var e=[];return S(t,(function(t){e=e.concat(w(t)?g(t):t)})),e},y=function(t,e,n){w(e)?S(e,(function(i,r){p.test(t)?n(t,i):y(t+"["+(b(e)?r:"")+"]",i,n)})):b(e)?S(e,(function(e,i){y(t+"["+i+"]",e,n)})):n(t,e)},v=function(t){return{}.toString.call(t).match(f)[1].toLowerCase()},b=function(t){return!!t&&"object"===o(t)&&t.constructor===Object},x=function(t){return"function"===v(t)},w=function(t){return"array"===v(t)},P=function(t){return t&&1===t.nodeType},E=function(t){return[].slice.call(t)},C=function(t,e){return t&&t.hasOwnProperty(e)},S=function(t,e,n){for(var i in t)C(t,i)&&e.call(n||null,t[i],i)},_=function(t){for(var e in t)C(t,e)&&(0===t[e].length?(w(t)&&t.splice(e,1),b(t)&&delete t[e]):b(t[e])&&_(t[e]));return t},k=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];return S(n,(function(e){null!==e&&S(e,(function(e,n){b(e)?t[n]=k(t[n]||{},e):t[n]=e}))})),t},A=function(){for(var t=0,e="";t++<36;)e+=51*t&52?(15^t?8^Math.random()*(20^t?16:4):4).toString(16):"-";return e},q=(a=window,C(a,"PaymentRequest")&&x(a.PaymentRequest)&&(u=a.PaymentRequest),function(t,e,n){var i=null;if((e=e||{}).id=A(),n=n||{},u)try{i=new u(t,e,n)}catch(t){i=null}return i}),j=function(){var t,e;return{promise:new Promise((function(n,i){t=n,e=i})),resolve:t,reject:e}},R=function(t){var e=t.methods,n=t.details,i=t.options,r=e.find((function(t){return"https://apple.com/apple-pay"===t.supportedMethods})),s=[],o=[];return i.requestShipping&&o.push("postalAddress"),i.requestPayerName&&s.push("name"),i.requestPayerEmail&&s.push("email"),i.requestPayerPhone&&s.push("phone"),{version:r.data.version,countryCode:r.data.countryCode,supportedNetworks:r.data.supportedNetworks,merchantCapabilities:r.data.merchantCapabilities,merchantIdentifier:r.data.merchantIdentifier,lineItems:r.data.lineItems||n.displayItems,additionalLineItems:r.data.additionalLineItems,recurringPaymentRequest:r.data.recurringPaymentRequest,deferredPaymentRequest:r.data.deferredPaymentRequest,currencyCode:r.data.currencyCode||n.total.amount.currency,total:{label:n.total.label,amount:n.total.amount.value},requiredBillingContactFields:o,requiredShippingContactFields:s}},O=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=Object.keys(n).filter((function(t){return void 0!==n[t]&&null!==n[t]})).map((function(t){return"".concat(encodeURIComponent(t),"=").concat(encodeURIComponent(n[t]))})).join("&"),r=[t,e].join(""),s=~r.indexOf("?")?"&":"?";return i?"".concat(r).concat(s).concat(i):r},M=function(t){var e=t.split(".").reduce((function(t,e){return t&&t.hasOwnProperty(e)?t=t[e]:null}),window);return x(e),e},L=function(t,e){var n=E(document.scripts).filter((function(e){return e.src===t}));if(s(n,1)[0])return Promise.resolve(M(e));var i=j(),r=i.promise,o=i.resolve,a=document.createElement("script");return a.async=!0,a.src=t,a.addEventListener("load",(function(){var n=M(e);console.log("api loading","success",t),o(n)})),a.addEventListener("error",(function(n){var i=M(e);console.log("api loading","error",t),o(i)})),document.head.appendChild(a),r},D=function(t){var e=getComputedStyle(t),n=e.transitionDelay,i=e.transitionDuration;return 1e3*(Number.parseFloat(i)+Number.parseFloat(n))},T=Object.freeze({__proto__:null,PromiseWithResolvers:j,addAttr:function(t,e){if(!1===P(t))return!1;b(e)&&S(e,(function(e,n){t.setAttribute(n,e)}))},addClass:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.shift();if(!1!==P(i)){var r=i.className.trim().split(/\s+/);g(e.map((function(t){return t.trim().split(/\s+/)}))).forEach((function(t){t&&!~r.indexOf(t)&&r.push(t)})),i.className=r.join(" ").trim()}},buildUrl:O,cleanObject:_,createElement:function(t){return document.createElement(t)},cssUnit:function(t,e){return String(t||0).concat(e||"").concat(" !important")},deparam:function(t){var e={};return"?"===t.charAt(0)&&(t=t.slice(1)),t&&c.test(t)&&S(t.split("&"),(function(t){var n=t.split("="),i=m(n.shift()),r=m(n.join("=")),s=e;if(i){for(var o=0,a=(n=i.match(l)).length-1;o<a;o++)s[n[o]]||(s[n[o]]=h.test(n[o+1])||"[]"===n[o+1]?[]:{}),s=s[n[o]];var u=n.pop();"[]"===u?s.push(r):s[u]=r}})),e},extend:k,forEach:S,getAppleSessionConfig:R,getFunction:M,getPath:function(t){var e=t.split("."),n=e.shift(),i=null;return C(window,n)&&(i=window[n],S(e,(function(t){i=C(i,t)?i[t]:null}))),i},getPaymentRequest:q,getStyle:function(t,e,n){return((n=window.getComputedStyle)?n(t):t.currentStyle)[e.replace(/-(\w)/gi,(function(t,e){return e.toUpperCase()}))]},getType:v,hasProp:C,isArguments:function(t){return"arguments"===v(t)},isArray:w,isBoolean:function(t){return"boolean"==typeof t},isDate:function(t){return"date"===v(t)},isElement:P,isError:function(t){return"error"===v(t)},isFunction:x,isNumber:function(t){return"number"===v(t)},isObject:function(t){return"object"===v(t)},isPlainObject:b,isRegexp:function(t){return"regexp"===v(t)},isString:function(t){return"string"===v(t)},jsonParse:function(t,e){try{return JSON.parse(t)}catch(t){return e}},loadExternalApi:L,map:function(t,e,n){var i,r,s=[];for(i in t)C(t,i)&&void 0!==(r=e.call(n||null,t[i],i))&&(s[i]=r);return s},param:function(t){var e=[];return S(t,(function(t,n){y(n,t,(function(t,n){n=null==n?"":n,e.push([encodeURIComponent(t),encodeURIComponent(n)].join("="))}))})),e.join("&").replace(d,"+")},querySelector:function(t,e){return(e||document).querySelector(t)},querySelectorAll:function(t,e){return E((e||document).querySelectorAll(t))},removeAttr:function(t,e){if(!1===P(t))return!1;b(e)&&S(e,(function(e){t.removeAttribute(e)}))},removeClass:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.shift();if(!1!==P(i)){var r=i.className.trim().split(/\s+/);g(e.map((function(t){return t.trim().split(/\s+/)}))).forEach((function(t){if(t){var e=r.indexOf(t);~e&&r.splice(e,1)}})),i.className=r.join(" ").trim()}},removeElement:function(t){t.parentNode.removeChild(t)},stringFormat:function(t,e,n){return(t||"").replace(n||/{(.+?)}/g,(function(t,n){return e[n]||t}))},toArray:E,transitionDelay:D,uuid:A}),z="https://pay.flitt.com",U={gateway:"/latest/checkout-v2/index.html",element:"/latest/checkout-v2/button/element.html"},I="http://secure-redirect.cloudipsp.com/submit/",F={apiVersion:2,apiVersionMinor:0,allowedPaymentMethods:[{type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY","CRYPTOGRAM_3DS"],allowedCardNetworks:["AMEX","DISCOVER","INTERAC","JCB","MASTERCARD","VISA"]}}]},N=[{url:"https://pay.google.com/gp/p/js/pay.js",name:"google",path:"google.payments.api.PaymentsClient",callback:function(t){return!!t&&new t({environment:"TEST"}).isReadyToPay(F).catch((function(t){return console.log(t),!1}))}},{url:"https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js",name:"apple",path:"ApplePaySession",callback:function(t){return!!t&&t.supportsVersion(3)}}],B=["ar","bg","ca","zh","hr","cs","da","nl","en","et","fi","fr","de","el","id","it","ja","ko","ms","no","pl","pt","ru","sr","sk","sl","es","sv","th","tr","uk"],W={width:"1px !important",height:"1px !important",left:"1px !important",bottom:"1px !important",position:"fixed !important",border:"0px !important"},V={border:"none !important",margin:"0 !important",padding:"0 !important",display:"block !important",width:"1px !important","min-width":"100% !important",background:"transparent !important",position:"relative !important",opacity:"0 !important",overflow:"hidden !important",height:"100% !important",outline:"none !important","color-scheme":"light","z-index":"1 !important"},G={tabindex:"-1",scrolling:"no",frameborder:0,allowtransparency:!0,allowpaymentrequest:!0},H={"z-index":"2 !important",position:"absolute !important",border:"none !important",background:"transparent !important",left:"0 !important",top:"0 !important",cursor:"pointer !important",outline:"none !important",width:"100% !important",height:"100% !important"},$={role:"button","aria-pressed":"false"},J={border:"0 !important",margin:"0 !important",padding:"0 !important",display:"block !important",background:"transparent !important","user-select":"none !important",overflow:"hidden !important",position:"relative !important",opacity:"1 !important",height:"0 !important",width:"100% !important",outline:"none !important"},Z="dark",Y={dark:"dark",light:"light",black:"dark",white:"light"},X={ar:"",bg:"",ca:"",zh:"",hr:"",cs:"",da:"",nl:"",en:"Pay with",et:"",es:"Comprar con",el:"",fi:"",fr:"Acheter avec",de:"Zahlen über",id:"",it:"Acquista con",ja:"",ko:"",ms:"",no:"",pl:"Zapłać przez",pt:"",ru:"Оплатить через",sr:"",sk:"Zaplatiť cez",sl:"",sv:"",th:"",tr:"",uk:"Оплатити через"},K=Object.freeze({__proto__:null,ApiEndpoint:U,ApiFrameCss:W,ApiOrigin:z,ButtonColorMap:Y,ButtonContainerCss:J,ButtonCoverAttrs:$,ButtonCoverCss:H,ButtonDefaultColor:Z,ButtonFrameAttrs:G,ButtonFrameCss:V,ButtonLabelMap:X,GoogleBaseRequest:F,GooglePayApi:"https://pay.google.com/gp/p/js/pay.js",GooglePayLanguages:B,PaymentMethodsConfig:N,PaymentRequestDetails:{total:{label:"Total",amount:{currency:"USD",value:"0.00"}}},ProxyUrl:I});function Q(){var t=[],e=[],n=[],i=0,r=void 0,s=null,o=null,a=function(t,e,n){var i=[].concat(n),a=function(t,e){s=e?Array.from(t):[t]},u=function(){var t=i.shift();t&&(void 0!==(o=t.apply(r,s))?o&&o.then?o.then((function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];a(e,!0),u()})):(a(o),u()):u())};r=t,s=e,u()},u={done:function(e){return x(e)&&(this.isResolved()?e.apply(r,s):t.push(e)),this},fail:function(t){return x(t)&&(this.isRejected()?t.apply(r,s):e.push(t)),this},progress:function(t){return x(t)&&(this.isProgress()?t.apply(r,s):n.push(t)),this},always:function(t){return this.done(t).fail(t)},then:function(t,e,n){return x(t)&&this.done(t),x(e)&&this.fail(e),x(n)&&this.progress(e),this},promise:function(t){return null===t?u:(S(u,(function(e,n){t[n]=e})),t)},state:function(){return i},isPending:function(){return 0===i},isRejected:function(){return 2===i},isResolved:function(){return 1===i},isProgress:function(){return 3===i},clear:function(){return this.isPending()&&(t.length=0,e.length=0,n.length=0),this},resolveWith:function(e,n){return this.isPending()&&(i=1,a(e,n,t)),this},rejectWith:function(t,n){return this.isPending()&&(i=2,a(t,n,e)),this},notifyWith:function(t,e){return this.isPending()&&(i=3,a(t,e,n),i=0),this},resolve:function(){return this.resolveWith(this,Array.from(arguments))},reject:function(){return this.rejectWith(this,Array.from(arguments))},notify:function(){return this.notifyWith(this,Array.from(arguments))}};return u}var tt=!1,et=/xyz/.test(function(){return"xyz"}.toString())?/\b_super\b/:/.*/;function nt(){}function it(t,e,n){return function(){var i,r=this._super;return this._super=t[e],i=n.apply(this,arguments),this._super=r,i}}nt.prototype._super=function(){},nt.prototype.instance=function(t){return new this.constructor(t)},nt.prototype.proxy=function(t){return function(t,e){return function(){return e.apply(t,[this].concat(Array.prototype.slice.call(arguments)))}}(this,t="string"==typeof t?this[t]:t)},nt.extend=function t(e){function n(){!tt&&this&&this.init.apply(this,arguments)}return n.prototype=function(t,e){var n,i,r=t.prototype;for(n in tt=!0,i=new t,tt=!1,e)e.hasOwnProperty(n)&&("function"==typeof r[n]&&"function"==typeof e[n]&&et.test(e[n])?i[n]=it(r,n,e[n]):i[n]=e[n]);return i}(this,e),n.prototype.constructor=n,n.extend=t,n};var rt=nt.extend({init:function(){this.events={},this.empty=[]},on:function(t,e){return(this.events[t]=this.events[t]||[]).push(e),this},off:function(t,e){t||(this.events={});for(var n=this.events[t]||this.empty,i=n.length=e?n.length:0;i--;)e===n[i]&&n.splice(i,1);return this},trigger:function(t){for(var e,n=this.events[t]||this.empty,i=n.length>0?n.slice(0,n.length):n,r=0;e=i[r++];)e.apply(e,this.empty.slice.call(arguments,1));return this}}),st=nt.extend({utils:T,getListener:function(){return this._listener_||(this._listener_=new rt),this._listener_},destroy:function(){this.off()},on:function(t,e){return this.getListener().on(t,e),this},off:function(t,e){return this.getListener().off(t,e),this},proxy:function(t){return this._proxy_cache_||(this._proxy_cache_={}),this.utils.isString(t)?(this._proxy_cache_[t]||(this._proxy_cache_[t]=this._super(t)),this._proxy_cache_[t]):this._super(t)},trigger:function(){return this.getListener().trigger.apply(this.getListener(),arguments),this},each:function(t,e){this.utils.forEach(t,this.proxy(e))},addAttr:function(t,e){if(!this.utils.isElement(t))return!1;this.utils.forEach(e,(function(e,n){t.setAttribute(n,e)}))},addCss:function(t,e){if(!this.utils.isElement(t))return!1;this.utils.forEach(e,(function(e,n){this.addCssProperty(t,n,e)}),this)},addCssProperty:function(t,e,n){var i,r=t.style.cssText.match(new RegExp("(?:[;\\s]|^)("+e.replace("-","\\-")+"\\s*:(.*?)(;|$))"));r?(i=r.index+r[0].indexOf(r[1]),t.style.cssText=t.style.cssText.substring(0,i)+e+": "+n+";"+t.style.cssText.substring(i+r[1].length)):t.style.cssText+=" "+e+": "+n+";"},addEvent:function(t,e,n){if(!t||!e||!n)return!1;n=this.proxy(n),t.addEventListener?t.addEventListener(e,n):t.attachEvent&&t.attachEvent("on"+e,n)},removeEvent:function(t,e,n){if(!t||!e||!n)return!1;n=this.proxy(n),t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&t.detachEvent("on"+e,n)},prepareForm:function(t,e,n,i){var r=this.utils.createElement("form");return this.addAttr(r,{action:t,target:n||"_self",method:i||"POST"}),this.addCss(r,{display:"none"}),this.utils.forEach(e,(function(t,e,n){(n=this.utils.createElement("input")).type="hidden",n.name=e,n.value=t,r.appendChild(n)}),this),r}}),ot=st.extend({ns:"crossDomain",origin:"*",uniqueId:1,signature:null,init:function(t){this.setTarget(t.target),this.setOrigin(t.origin),this.create()},create:function(){this.addEvent(window,"message","router")},setOrigin:function(t){this.origin=t||"*"},setTarget:function(t){return this.target=t,this},getUID:function(){return++this.uniqueId},destroy:function(){this.removeEvent(window,"message","router"),this._super()},router:function(t,e,n){if(this.target!==e.source)return!1;try{n=JSON.parse(e.data)}catch(t){}n&&n.action&&n.data&&this.trigger(n.action,n.data)},send:function(t,e,n,i){if(this.target){n=JSON.stringify({action:t,data:e}),i={targetOrigin:this.origin,delegate:"payment"};try{this.target.postMessage(n,i)}catch(t){this.target.postMessage(n,this.origin,[])}}}}),at=Object.freeze({__proto__:null,acs:function(t){return"\n".concat('\n<style>\n .flitt-modal {\n box-sizing: border-box;\n margin: 100px auto;\n max-width: 680px;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n }\n\n @media (max-width: 850px) {\n .flitt-modal {\n margin: 50px auto;\n }\n }\n\n @media (max-width: 695px) {\n .flitt-modal {\n max-width: 100%;\n margin: 5px;\n }\n }\n\n .flitt-modal-wrapper {\n box-sizing: border-box;\n overflow: auto;\n position: fixed;\n z-index: 99999;\n left: 0;\n bottom: 0;\n top: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n .flitt-modal-header {\n box-sizing: border-box;\n background-color: #fafafa;\n height: 50px;\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n .flitt-modal-close {\n box-sizing: border-box;\n float: right;\n overflow: hidden;\n height: 50px;\n text-decoration: none;\n border-top-right-radius: 5px;\n color: #949494;\n }\n\n .flitt-modal-close:hover, .flitt-modal-close:focus, .flitt-modal-close:active {\n text-decoration: none;\n color: #646464;\n }\n\n .flitt-modal-close:before {\n content: "×";\n font-size: 50px;\n line-height: 50px;\n padding: 0 10px;\n }\n\n .flitt-modal-title {\n box-sizing: border-box;\n border-top-left-radius: 5px;\n line-height: 20px;\n height: 50px;\n padding: 5px 15px;\n font-size: 12px;\n display: table-cell;\n vertical-align: middle;\n }\n .flitt-modal-content {\n box-sizing: border-box;\n border-bottom-left-radius: 5px;\n min-height: 650px;\n }\n .flitt-modal-iframe {\n overflow-x: hidden;\n border: 0;\n display: block;\n width: 100%;\n height: 750px;\n }\n</style>\n','\n<div class="flitt-modal-wrapper">\n <div class="flitt-modal">\n <div class="flitt-modal-header">\n <a href="javascript:void(0)" class="flitt-modal-close"></a>\n <div class="flitt-modal-title">\n ').concat(t.messages.modalHeader,"\n <a href='javascript:void(0)'>").concat(t.messages.modalLinkLabel,'</a>\n </div>\n </div>\n <div class="flitt-modal-content">\n <iframe src="about:blank" class="flitt-modal-iframe" frameborder="0" allowtransparency="true"></iframe>\n </div>\n </div>\n</div>\n')}});var ut=nt.extend({init:function(t){this.view=at[t]||function(t){return function(e){return["template",t,"not found"].join(" ")}}(t)},render:function(t){return this.view(t)}}),ht=st.extend({init:function(t){this.checkout=t.checkout,this.model=t.model||{},this.messages=t.checkout.params.messages||{},this.template=new ut("acs"),this.body=this.utils.querySelector("body"),this.initModal(),this.initConnector()},initModal:function(){this.name=["modal-iframe",this.getRandomNumber()].join("-"),this.modal=this.utils.createElement("div"),this.modal.innerHTML=this.template.render({model:this.model,messages:this.messages}),this.iframe=this.find(".flitt-modal-iframe"),this.addAttr(this.iframe,{name:this.name,id:this.name}),this.model.send_data?(this.form=this.prepareForm(this.model.url,this.model.send_data,this.name),this.modal.appendChild(this.form)):this.iframe.src=this.model.url,this.addEvent(this.find(".flitt-modal-close"),"click","closeModal"),this.addEvent(this.find(".flitt-modal-title a"),"click","submitForm"),this.initScrollbar(),this.submitToIframe()},submitToIframe:function(){this.modal&&this.body.appendChild(this.modal),this.form&&this.form.submit()},measureScrollbar:function(){var t=document.createElement("div");return t.className="modal-scrollbar-measure",this.body.appendChild(t),this.utils.removeElement(t),t.offsetWidth-t.clientWidth},checkScrollbar:function(){var t,e=window.innerWidth;e||(e=(t=document.documentElement.getBoundingClientRect()).right-Math.abs(t.left)),this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},initScrollbar:function(){this.checkScrollbar(),this.bodyPad=parseInt(this.utils.getStyle(this.body,"padding-right")||0,10),this.originalBodyPad=document.body.style.paddingRight||"",this.originalOverflow=document.body.style.overflow||"",this.bodyIsOverflowing&&this.addCss(this.body,{paddingRight:[this.bodyPad+this.scrollbarWidth,"px"].join(""),overflow:"hidden"})},resetScrollbar:function(){this.addCss(this.body,{paddingRight:this.originalBodyPad?[this.originalBodyPad,"px"].join(""):"",overflow:this.originalOverflow})},getRandomNumber:function(){return Math.round(1e9*Math.random())},find:function(t){return this.utils.querySelector(t,this.modal)},closeModal:function(t,e){e.preventDefault(),this.trigger("close",this.data),this.removeModal()},submitForm:function(t,e){e.preventDefault(),this.trigger("submit",this.data),this.addAttr(this.form,{target:"_blank"}),this.form.submit()},removeModal:function(){this.destroy()},destroy:function(){this.utils.removeElement(this.modal),this.resetScrollbar(),this.connector.destroy(),this._super()},initConnector:function(){this.connector=new ot({target:this.iframe.contentWindow}),this.connector.on("response",this.proxy("onResponse"))},onResponse:function(t,e){this.sendResponse(e),this.removeModal()},sendResponse:function(t){this.checkout.connector.send("request",{uid:t.uid,action:"api.checkout.proxy",method:"send",params:t})}}),lt=st.extend({init:function(t){this.data=t||{},this.create()},create:function(){},eachProps:function(t){var e=t[1]?t[0]:null,n=t[1]?t[1]:t[0];return{list:e?this.alt(e,[]):this.data,callback:n}},each:function(){var t=this.eachProps(arguments);for(var e in t.list)t.list.hasOwnProperty(e)&&t.callback(this.instance(t.list[e]),t.list[e],e)},filter:function(){var t=this.eachProps(arguments);for(var e in t.list)if(t.list.hasOwnProperty(e)){var n=this.instance(t.list[e]);if(t.callback(n,t.list[e],e))return t.list[e]}},find:function(){var t=this.eachProps(arguments);for(var e in t.list)if(t.list.hasOwnProperty(e)){var n=this.instance(t.list[e]);if(t.callback(n,t.list[e],e))return n}return!1},alt:function(t,e){return void 0===(t=this.attr(t))?e:t},attr:function(t,e){for(var n=0,i=this.data,r=(t||"").split("."),s=r.pop(),o=arguments.length;n<r.length;n++)if(i&&i.hasOwnProperty(r[n]))i=i[r[n]];else{if(2!==o)break;i=i[r[n]]={}}return 1===o?i?i[s]:void 0:(2===o&&(i[s]=e),this)},stringify:function(){return JSON.stringify(this.serialize())},serialize:function(){return this.data}}),ct=lt.extend({stringFormat:function(t){var e=this;return(t||"").replace(/{(.+?)}/g,(function(t,n){return e.attr(["order.order_data",n].join("."))||t}))},setConnector:function(t){return this.connector=t,this},setUID:function(t){return this.uid=t,this},getUID:function(){return this.uid},formDataProxy:function(t,e,n,i){location.assign([I,JSON.stringify({url:t,params:e,target:n,method:i})].join("#"))},formDataSubmit:function(t,e,n,i){if(t.match(/^http:/))return this.formDataProxy(t,e,n,i);var r=this.stringFormat(t),s=this.prepareForm(r,e,n,i);this.utils.querySelector("body").appendChild(s),s.submit(),s.parentNode.removeChild(s)},inProgress:function(){return this.attr("order.in_progress")},readyToSubmit:function(){return this.attr("order.ready_to_submit")},waitForResponse:function(){return this.attr("order.pending")},needVerifyCode:function(){return this.attr("order.need_verify_code")},redirectUrl:function(){return!!this.attr("url")&&(this.redirectToUrl(this.attr("url")),!0)},redirectToUrl:function(t){location.assign(t)},submitToMerchant:function(){var t=this.attr("order.ready_to_submit"),e=this.attr("model.url")||this.attr("order.response_url"),n=this.attr("order.method"),i=this.attr("order.action"),r=this.attr("model.send_data")||this.attr("order.order_data");if(t&&e&&r)return"redirect"===i||!0===r.get_without_parameters?this.redirectToUrl(e):this.formDataSubmit(e,r,"_self",n),!0},submitForm:function(){var t=this.attr("method"),e=this.attr("url"),n=this.attr("send_data");return!(!e||!n)&&(this.formDataSubmit(e,n,"_self",t),!0)},sendResponse:function(){var t=this.attr("action");return"submit"===t?this.submitForm():"redirect"===t&&this.redirectUrl()},prepare3dsData:function(){var t={},e=this.attr("submit3ds");return e["3ds"]&&(t.token=this.attr("token"),t.uid=this.getUID(),t.frame=!0,e.send_data.TermUrl&&(e.send_data.TermUrl=[e.send_data.TermUrl,this.utils.param(t)].join("#!!"))),e},waitOn3dsDecline:function(){var t=this.alt("submit3ds.checkout_data",{js_wait_on_3ds_decline:!1,js_wait_on_3ds_decline_duration:0});return t.js_wait_on_3ds_decline?t.js_wait_on_3ds_decline_duration:0},submit3dsForm:function(){this.attr("submit3ds.checkout_data")&&this.connector.trigger("modal",this.prepare3dsData())},supportedMethod:function(t){var e=this.find("methods",(function(e){return e.alt("supportedMethods","").match(t)}));e?this.attr("methods",[e.serialize()]):this.attr("methods",[])}}),dt=st.extend({defaults:{version:"default",origin:z,endpoint:U,container:"body",messages:{modalHeader:"Now you will be redirected to your bank 3DSecure. If you are not redirected please refer",modalLinkLabel:"link"}},init:function(t){this.initParams(t)},url:function(t,e){return O(this.params.origin,this.params.endpoint[t],{version:this.params.version,origin:location.origin})},extendParams:function(t){return this.utils.extend(this.params,t),this},initParams:function(t){this.iframeDeferred=Q(),this.params=this.utils.extend({},this.defaults),this.extendParams(t),this.setOrigin(this.params.origin)},setOrigin:function(t){return this.utils.isString(t)&&(this.params.origin=t),this},scope:function(t){t=this.proxy(t),this.domReady((function(){this.createFrame(),this.iframeDeferred.isPending()?this.iframeDeferred.done(t):t()}))},domReady:function(t){t=this.proxy(t),"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t):t()},request:function(t,e,n){var i=Q(),r={uid:this.connector.getUID(),action:t,method:e,params:n||{}};return this.connector.send("request",r),this.connector.on(r.uid,this.proxy((function(t,e,n,s){var o=new ct(e);o.setUID(r.uid),o.setConnector(this.connector),s="resolveWith",o.attr("submit3ds")&&(s="notifyWith"),o.attr("error")&&(s="rejectWith"),i[s](this,[o])}))),i},createFrame:function(){if(this.iframe)return this;if(this.iframe=this.utils.createElement("iframe"),this.addAttr(this.iframe,{allowtransparency:!0,frameborder:0,scrolling:"no"}),this.addAttr(this.iframe,{src:this.url("gateway")}),this.addCss(this.iframe,W),this.utils.isElement(this.params.container)&&(this.container=this.params.container),this.utils.isString(this.params.container)&&(this.container=this.utils.querySelector(this.params.container)),!this.container)throw Error('container element not found: document.querySelector("'.concat(this.params.container,'")'));return this.container.firstChild?this.container.insertBefore(this.iframe,this.container.firstChild):this.container.appendChild(this.iframe),this.connector=new ot({target:this.iframe.contentWindow,origin:this.params.origin}),this.connector.on("load",this.proxy("onLoadConnector")),this.connector.on("modal",this.proxy("onOpenModal")),this},onOpenModal:function(t,e){this.modal=new ht({checkout:this,model:e}),this.modal.on("close",this.proxy("onCloseModal"))},onCloseModal:function(t,e){this.trigger("modal.close",t,e)},onLoadConnector:function(){this.iframeDeferred.resolve(!0),this.connector.off("load")}}),pt=null,ft=st.extend({config:{payment_system:"",fallback:!1,methods:[],details:{},options:{}},supported:{fallback:!1,provider:[]},payload:{payment_system:null,provider:[]},params:{},getSupportedMethods:function(){var t=this;return function(){if(pt)return pt;pt=Q();var t=[],e={provider:[]};return S(N,(function(n){t.push(L(n.url,n.path).then(n.callback).then((function(t){t?e.provider.push(n.name):console.log("payment method is not supported",n.name)})))})),Promise.all(t).finally((function(){pt.resolve(e)})),pt}().then((function(e){return t.setSupported(e),e}))},init:function(t){this.params=t||{}},setSupported:function(t){return this.supported=t,this.trigger("supported",t),this},setPayload:function(t){return this.payload=t,this.trigger("payload",t),this},setMerchant:function(t){this.merchant=t},getProviderNames:function(){var t=this;return this.supported.provider.filter((function(e){return!!~t.payload.allowed.indexOf(e)}))},setBeforeCallback:function(t){x(t)&&(this.params.before=t)},setAfterCallback:function(t){x(t)&&(this.params.after=t)},setApi:function(t){return t instanceof dt&&(this.api=t),this},getProviderPayload:function(t){return this.payload.provider[t]||{}},isMethodSupported:function(t){return-1!==this.supported.provider.indexOf(t)},isFallbackMethod:function(t){return"google"===t&&this.supported.fallback},request:function(t,e,n,i,r){var s=this;s.api&&s.api.scope((function(){s.api.request(t,e,n).done(i).fail(r)}))},session:function(t){var e=Q();return this.request("api.checkout.pay","session",t,(function(t){e.resolve(t.serialize())}),(function(t){e.reject(t)})),e},update:function(t){if(!this.isPending())return this.setPending(!0),this.params.data=t,this.defer=Q(),this.request("api.checkout.pay","methods",this.params.data,this.proxy((function(t,e){this.setPending(!1),this.setPayload(e.serialize()),this.defer.resolve(e)})),this.proxy((function(t,e){this.setPending(!1),this.setPayload(e.serialize()),this.trigger("error",e.serialize()),this.defer.reject(e)}))),this.defer},isPending:function(){return!0===this.pendingState},setPending:function(t){this.pendingState!==t&&(this.pendingState=t,this.trigger("pending",t))},before:function(){if(!this.isPending()){this.setPending(!0);var t=Q(),e=this;return t.always((function(){e.setPending(!1)})),this.params.before(t),t}},after:function(t){var e=Q();return this.params.after(e,t),e},withApplePay:function(t,e){var n=R(e),i=new ApplePaySession(n.version,n),r=this.merchant,s=this;i.onvalidatemerchant=function(e){s.session({url:e.validationURL,domain:location.host,merchant_id:r}).done((function(e){try{i.completeMerchantValidation(e.data)}catch(e){t.reject({code:e.code,message:e.message})}}))},i.oncancel=function(){t.reject({code:20,message:"cancel"})},i.onpaymentauthorized=function(e){i.completePayment(ApplePaySession.STATUS_SUCCESS),t.resolve(e.payment)},i.begin()},withGooglePay:function(t,e){var n=e.methods.find((function(t){return"https://google.com/pay"===t.supportedMethods}));new google.payments.api.PaymentsClient({environment:n.data.environment}).loadPaymentData(n.data).then((function(e){t.resolve(e)})).catch((function(e){t.reject({code:e.code,message:e.message})}))},pay:function(t){if(!this.isPending()){this.setPending(!0);var e=this,n=Q(),i=this.getProviderPayload(t);switch(n.always((function(){e.setPending(!1)})),t){case"google":this.withGooglePay(n,i);break;case"apple":this.withApplePay(n,i)}return n.done((function(t){e.trigger("details",{payment_system:e.payload.payment_system,data:t})})).fail((function(t){e.trigger("error",t)}))}}}),mt=st.extend({defaults:{method:null,appendTo:null,className:"payment-element",origin:z,endpoint:U.element,mode:"plain",color:"black",lang:"en",height:38},init:function(t){this.state={type:"hide",transition:!1,pending:!1,mounted:!1,supported:!1,allowed:!1},this.params={},this.utils.extend(this.params,this.defaults),this.utils.extend(this.params,t),this.initElement()},timeout:function(t,e){return this.timeoutMap=this.timeoutMap||{},clearTimeout(this.timeoutMap[e]),this.timeoutMap[t]=setTimeout(this.proxy(t),e),this},getElementUrl:function(){return[this.params.origin,this.params.endpoint].join("")},getElementOptions:function(){return this.utils.param({method:this.params.method,mode:this.params.mode,style:this.params.style,color:this.params.color,lang:this.params.lang})},initElement:function(){this.element=this.utils.createElement("div"),this.iframe=this.utils.createElement("iframe"),this.iframeLoaded=Q(),this.button=this.utils.createElement("a"),this.addCss(this.element,J),this.addCss(this.button,H),this.addAttr(this.button,$),this.addCss(this.iframe,V),this.addAttr(this.iframe,G),this.addAttr(this.iframe,{src:[this.getElementUrl(),this.getElementOptions()].join("?")}),this.addEvent(this.iframe,"load","onloadConnector"),this.addEvent(this.iframe,"error","errorConnector"),this.addAttr(this.element,{class:this.params.className}),this.element.appendChild(this.iframe),this.element.appendChild(this.button)},errorConnector:function(){this.iframeLoaded.resolveWith(this)},onloadConnector:function(){this.iframeLoaded.resolveWith(this),this.connector=new ot({target:this.iframe.contentWindow,origin:this.params.origin})},send:function(t,e){this.connector&&this.connector.send(t,e)},onEvent:function(t,e){if(e.preventDefault(),this.state.pending)return!1;this.send("event",{type:e.type})},onClick:function(){if(this.state.pending)return!1;this.request.before().done(this.proxy("onClickDone")).fail(this.proxy("onClickFail"))},onClickDone:function(){this.request.pay(this.params.method)},onClickFail:function(){},onSupported:function(t,e){this.state.supported=e.provider.includes(this.params.method),this.render()},onPayload:function(t,e){this.state.allowed=e.allowed.includes(this.params.method),this.render()},onPending:function(t,e){this.state.pending=e,this.addCss(this.element,{transition:"height 0.2s ease-out, opacity 0.4s ease-out",pointerEvents:this.state.pending?"none":"",opacity:this.state.pending?"0.5":"1"})},initEvents:function(){this.addEvent(this.button,"mouseenter","onEvent"),this.addEvent(this.button,"mouseleave","onEvent"),this.addEvent(this.button,"blur","onEvent"),this.addEvent(this.button,"focus","onEvent"),this.addEvent(this.button,"click","onClick")},setPaymentRequest:function(t){if(!(t instanceof ft))throw Error("request is not instance of PaymentRequestApi");var e=this.proxy("onSupported"),n=this.proxy("onPayload"),i=this.proxy("onPending");return this.request=t,this.request.off("supported",e).on("supported",e),this.request.off("payload",n).on("payload",n),this.request.off("pending",i).on("pending",i),this},appendTo:function(t){var e=this.utils.querySelector(t);return e&&e.appendChild(this.element),this.initEvents(),this},render:function(){return!1===this.state.supported||!1===this.state.allowed?this.hide():(this.mount(),void this.show())},notMounted:function(){return!1===this.state.mounted},isMounted:function(){return!0===this.state.mounted},isHide:function(){return"hide"===this.state.type},unmount:function(){return this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.state.mounted=!1),this},mount:function(){return document.body.contains(this.element)||(this.appendTo(this.params.appendTo),this.state.mounted=!0),this},transitionValue:function(t){return t},getTimeoutValue:function(){return E([this.iframe,this.element]).map(D).sort().pop()},getState:function(t,e){return this.state.type===(t?"show":"hide")&&this.state.transition===e},triggerState:function(t){this.request.trigger(this.state.type,{transition:this.state.transition,method:this.params.method})},show:function(){if(!this.notMounted())return this.timeout("showCallback",25),this},hide:function(){if(!this.notMounted())return this.timeout("hideCallback",25),this},showCallback:function(){this.addCss(this.element,{transition:this.transitionValue("height 0.2s ease-out"),height:this.utils.cssUnit(this.params.height,"px"),"will-change":"height"}),this.addCss(this.iframe,{transition:this.transitionValue("opacity 0.225s 0.225s ease-out"),opacity:this.utils.cssUnit(1),"will-change":"opacity"}),this.afterCallback("show")},hideCallback:function(){this.addCss(this.element,{transition:this.transitionValue("height 0.225s 0.225s ease-out"),height:this.utils.cssUnit(0,"px"),"will-change":"height"}),this.addCss(this.iframe,{transition:this.transitionValue("opacity 0.225s ease-out"),opacity:this.utils.cssUnit(0),"will-change":"opacity"}),this.afterCallback("hide")},afterCallback:function(t){this.state.type!==t&&(this.state.transition||(this.state.transition=!0,this.state.type=t,this.triggerState(),this.timeout("afterTransition",this.getTimeoutValue())))},afterTransition:function(){this.iframeLoaded.then((function(){this.state.transition=!1,this.triggerState(),this.isHide()&&this.unmount()}))}}),gt=st.extend({defaults:{version:"default",origin:z,endpoint:U,methods:["apple","google"],element:null,style:{height:38,mode:"default",type:"long",color:"black"},data:{lang:"en"},before:function(t){t.resolve()},after:function(t,e){t.resolve(e)}},init:function(t){this.elements={},this.supported=!1,this.params={element:t.element,version:t.version||this.defaults.version,methods:t.methods||this.defaults.methods,origin:t.origin||this.defaults.origin,endpoint:this.utils.extend({},this.defaults.endpoint,t.endpoint),style:this.utils.extend({},this.defaults.style,t.style),before:x(t.before)?t.before:this.defaults.before,after:x(t.after)?t.after:this.defaults.after,data:this.utils.extend({},this.defaults.data,t.data)},this.initApi(t.api),this.initPaymentRequestApi(),this.initElements(),this.initData()},initData:function(){var t=this.params.data;t.merchant_id&&(t.currency&&t.amount||t.token)&&this.update()},initApi:function(t){this.api=t instanceof dt?t:new dt({version:this.params.version,origin:this.params.origin,endpoint:this.params.endpoint})},initPaymentRequestApi:function(){this.request=new ft({before:this.params.before,after:this.params.after}),this.request.setApi(this.api),this.request.setMerchant(this.params.data.merchant_id),this.request.on("pending",this.proxy("onPending")),this.request.on("details",this.proxy("onDetails")),this.request.on("error",this.proxy("onError")),this.request.on("show",this.proxy("onShow")),this.request.on("hide",this.proxy("onHide"))},initElements:function(){var t=this,e=this.params.style,n=this.params.data,i=this.params.origin,r=this.params.element,s=this.params.endpoint.element,o=this.request;this.buttons=[],this.container=this.utils.querySelector(this.params.element),this.addCss(this.container,{display:"flex",gap:"1rem","flex-direction":"column"}),S(this.params.methods,(function(a){var u=new mt({origin:i,endpoint:s,method:a,appendTo:r,color:e.color,mode:e.mode,lang:n.lang,height:e.height});u.setPaymentRequest(o),t.buttons.push(u)})),o.getSupportedMethods()},update:function(t){return this.request.update(this.utils.extend(this.params.data,t||{}))},onDetails:function(t,e){var n=this;this.api.scope((function(){n.request.after(n.params.data).done((function(t){n.api.request("api.checkout.form","request",n.utils.extend({},n.params.data,t||{},e)).done(n.proxy("onSuccess")).fail(n.proxy("onError"))}))}))},onSuccess:function(t,e){this.trigger("success",e)},onError:function(t,e){this.trigger("error",e)},toggleEventType:function(t,e){return t?e?"show":"shown":e?"hide":"hidden"},toggleEventNamespace:function(t,e){var n=[];return n.push(this.toggleEventType(t,e.transition)),n.push(e.method),n.join(":")},onShow:function(t,e){this.trigger(this.toggleEventNamespace(!0,e),{})},onHide:function(t,e){this.trigger(this.toggleEventNamespace(!1,e),{})},onPending:function(t,e){this.trigger("pending",e)}}),yt=st.extend({defaults:{element:null,method:"card",data:{lang:"en"},style:{}},init:function(t){this.initParams(t),this.initEvents()},initParams:function(t){this.params=this.utils.extend({},this.defaults,t),this.element=this.utils.querySelector(this.params.element),this.connector=new ot({target:window.parent}),this.payment=new ft({embedded:!0})},extendParams:function(t){this.utils.extend(this.params,{method:t.method,style:t.style,data:t.data,css:t.css})},getGoogleLangSupport:function(t,e){return-1!==B.indexOf(t)?t:e},getButtonColor:function(t){return Y[t]||Z},getGoogleSvg:function(t,e,n){var i={endpoint:"https://www.gstatic.com/instantbuy/svg",color:this.getButtonColor(t),mode:n||"plain",lang:e||"en"},r='url("{endpoint}/{color}/{mode}/{lang}.svg")';return"plain"===n&&(r='url("{endpoint}/{color}_gpay.svg")'),"buy"===n&&(r='url("{endpoint}/{color}/{lang}.svg")'),this.utils.stringFormat(r,i)},getAppleSvg:function(t){var e={color:this.getButtonColor(t)};return this.utils.stringFormat('url("svg/apple-pay-{color}.svg")',e)},getAppleLabel:function(t){return X[t||"en"]},addFrameImage:function(){var t=this.utils.querySelector("iframe",this.element)||this.utils.createElement("iframe"),e=this.params.style||{},n=this.getGoogleLangSupport(this.params.data.lang,"en"),i={buttonColor:e.color||"black",browserLocale:n,buttonSizeMode:"fill"},r=["https://pay.google.com/gp/p/generate_gpay_btn_img",this.utils.param(i)].join("?");this.addAttr(t,{scrolling:"no",frameborder:0,src:r}),this.element.appendChild(t),this.element.classList.remove("short","long")},styleButton:function(){var t=this.element,e=this.params,n=e.method,i=e.style||{},r=e.data.lang||"en",s=e.css||{};t.setAttribute("class",""),t.classList.add("button","pending"),"card"===n&&(n="google"),n&&t.classList.add(n),t.classList.add(r),i.type&&t.classList.add(i.type),i.mode&&t.classList.add(i.mode),i.color&&t.classList.add(i.color),"google"===n&&("short"===i.type&&(i.mode="plain"),"default"===i.mode?this.addFrameImage():s.image=this.getGoogleSvg(i.color,r,i.mode)),"apple"===n&&(s.image=this.getAppleSvg(i.color),s.label=this.getAppleLabel(r,i.mode)),s&&this.utils.forEach(s,(function(e,n){t.style.setProperty(["--",n].join(""),e)}))},initEvents:function(){this.payment.on("details",this.proxy((function(t,e){this.connector.send("details",e),this.connector.send("complete",e)}))),this.payment.on("reload",this.proxy((function(t,e){this.connector.send("reload",e)}))),this.payment.on("error",this.proxy((function(t,e){this.connector.send("error",e)}))),this.connector.on("options",this.proxy((function(t,e){this.extendParams(e),this.styleButton()}))),this.connector.on("pay",this.proxy((function(){if(!this.element.classList.contains("pending"))if("apple"===this.params.method){var t=this.payment.payload||{},e=t.provider.apple||{};this.connector.send("pay",{payment_system:t.payment_system,methods:e.methods,details:e.details,options:e.options})}else this.payment.setSupported({fallback:!1,provider:["google"]}).pay("google")}))),this.connector.on("config",this.proxy((function(t,e){this.payment.setPayload(e=function(t){var e={payment_system:t.payment_system,provider:{},allowed:[]},n=t.methods||[],i=t.details||{},r=t.options||{},s=new RegExp("//([a-z]+)\\.com/");return n.forEach((function(t){var n=s.exec(t.supportedMethods);null!==n&&(e.provider[n[1]]={methods:[t],details:i,options:r})})),e}(e)),e.payment_system&&Object.keys(e.provider).length>0?(this.element.classList.remove("pending"),this.element.classList.add("ready"),this.connector.send("show",{})):this.connector.send("hide",{})}))),this.connector.on("event",this.proxy((function(t,e){"mouseenter"===e.type&&this.element.classList.add("hover"),"mouseleave"===e.type&&this.element.classList.remove("hover"),"focusin"===e.type&&this.element.classList.add("active"),"focusout"===e.type&&this.element.classList.remove("active")})))}}),vt=dt.extend({init:function(t){this.initParams(t),this.initWidget()},initWidget:function(){this.initOptions(this.params.options),this.utils.isString(this.params.element)&&this.initElement(this.params.element)},initOptions:function(){this.utils.isPlainObject(this.params.options)&&(this.params.options=this.params.options||{})},initElement:function(t){},addSelectorEvent:function(t,e,n){return this.each(this.utils.querySelectorAll(t),(function(t,i){this.addEvent(i,e,n)})),this},getRequestParams:function(){return{}},sendRequest:function(t,e){e.defaultPrevented||(e.preventDefault(),this.trigger("request",this.getRequestParams(t)),this.scope((function(){this.request("api.checkout.form","request",this.getRequestParams(t)).done(this.proxy("onSuccess")).fail(this.proxy("onError")).progress(this.proxy("onProgress"))})))},onProgress:function(t,e){this.trigger("progress",e)},onSuccess:function(t,e){e.sendResponse(),e.submitToMerchant(),this.trigger("success",e)},onError:function(t,e){this.trigger("error",e)}}),bt=st.extend({init:function(t){this.setFormElement(t)},setFormElement:function(t){this.utils.isElement(t)&&(this.form=t)},getData:function(t){var e=this.deparam(this.serializeArray());return!0===t?this.utils.cleanObject(e):e},serializeArray:function(){var t=this.utils.toArray(this.form.elements);return this.utils.map(t,(function(t){if(!t.disabled&&""!==t.name&&(!t.type.match("checkbox|radio")||t.checked))return{name:t.name,value:t.value}}))},serializeAndEncode:function(){return this.utils.map(this.serializeArray(),(function(t){return[t.name,encodeURIComponent(t.value)].join("=")})).join("&")},deparam:function(t){var e,n={},i=/[^\[\]]+|\[\]$/g,r=function(t,e){var i,r=n,s=t.pop(),o=t.length;for(i=0;i<o;i++)r[t[i]]||(r[t[i]]=o===i+1&&"[]"===s?[]:{}),r=r[t[i]];"[]"===s?r.push(e):r[s]=e};for(e in t)t.hasOwnProperty(e)&&r(t[e].name.match(i),t[e].value);return n}}),xt=vt.extend({initElement:function(t){this.addSelectorEvent(t,"submit","sendRequest")},getRequestParams:function(t){return this.utils.extend({},this.params.options,new bt(t).getData())}}),wt=vt.extend({attributes:{},initElement:function(t){this.utils.isPlainObject(this.params.attributes)&&this.utils.extend(this.attributes,this.params.attributes),this.addSelectorEvent(t,"click","sendRequest")},getRequestParams:function(t){return this.utils.extend({},this.params.options,this.getElementData(t))},getElementData:function(t){var e={};return this.utils.forEach(this.attributes,(function(n,i){t.hasAttribute(i)&&(e[n]=t.getAttribute(i))})),e}});return i.add("Api",dt),i.add("Connector",ot),i.add("PaymentButton",gt),i.add("PaymentRequestApi",ft),i.add("PaymentElement",mt),i.add("FormWidget",xt),i.add("ButtonWidget",wt),i.Utils=T,i.Config=K,i.Api=dt,i.Module=st,i.Modal=ht,i.Connector=ot,i.Response=ct,i.PaymentRequestApi=ft,i.PaymentContainer=yt,i.PaymentElement=mt,i.PaymentButton=gt,i}));
|
|
2
2
|
//# sourceMappingURL=checkout.js.map
|
package/dist/umd/checkout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sources":["../../src/core/component.js","../../src/core/utils.js","../../src/core/config.js","../../src/core/deferred.js","../../src/core/class.js","../../src/core/event.js","../../src/core/module.js","../../src/core/connector.js","../../src/views/template/acs.js","../../src/views/template/acs_styles.js","../../src/core/template.js","../../src/core/modal.js","../../src/core/model.js","../../src/core/response.js","../../src/core/api.js","../../src/core/payment/request.js","../../src/core/payment/element.js","../../src/core/payment/button.js","../../src/core/payment/container.js","../../src/core/widget/index.js","../../src/core/widget/form.js","../../src/core/widget/button.js","../../src/module.js"],"sourcesContent":["/**\n * Modules registry\n * @type {Object<string,any>}\n */\nconst modules = {}\n/**\n * @type {Object<string,any>}\n */\nconst instance = {}\n/**\n * @param {string} name\n * @param {Object} [params]\n * @returns {{}}\n */\nconst newModule = function (name, params) {\n if (!modules[name]) {\n throw Error(['module is undefined', name].join(' '))\n }\n return new modules[name](params || {})\n}\n\nconst addModule = function (name, module) {\n if (modules[name]) {\n throw Error(['module already added', name].join(' '))\n }\n modules[name] = module\n}\n\nexport function Component(name, params) {\n if (instance[name]) return instance[name]\n return (instance[name] = newModule(name, params))\n}\n\nComponent.get = function (name, params) {\n return newModule(name, params)\n}\n\nComponent.add = function (name, module) {\n addModule(name, module)\n return this\n}\n","const digitTest = /^\\d+$/\nconst keyBreaker = /([^\\[\\]]+)|(\\[\\])/g\nconst paramTest = /([^?#]*)(#.*)?$/\nconst r20 = /%20/g\nconst rbracket = /\\[\\]$/\nconst matchSymbol = /\\s([a-zA-Z]+)/\n\nconst prep = (str) => {\n return decodeURIComponent(str.replace(/\\+/g, ' '))\n}\nconst flatten = (array) => {\n let result = []\n forEach(array, (item) => {\n result = result.concat(isArray(item) ? flatten(item) : item)\n })\n return result\n}\n\nconst recursiveParams = (prefix, obj, next) => {\n if (isArray(obj)) {\n forEach(obj, (item, prop) => {\n if (rbracket.test(prefix)) {\n next(prefix, item)\n } else {\n recursiveParams(prefix + '[' + (isPlainObject(obj) ? prop : '') + ']', item, next)\n }\n })\n } else if (isPlainObject(obj)) {\n forEach(obj, (item, prop) => {\n recursiveParams(prefix + '[' + prop + ']', item, next)\n })\n } else {\n next(prefix, obj)\n }\n}\n\nexport const getType = (o) => {\n return {}.toString.call(o).match(matchSymbol)[1].toLowerCase()\n}\nexport const isPlainObject = (o) => {\n return !!o && typeof o === 'object' && o.constructor === Object\n}\n\nexport const isFunction = (o) => {\n return getType(o) === 'function'\n}\n\nexport const isArray = (o) => {\n return getType(o) === 'array'\n}\n\nexport const isBoolean = (o) => {\n return typeof o === 'boolean'\n}\n\nexport const isElement = (o) => {\n return o && o.nodeType === 1\n}\n\nexport const toArray = (o) => {\n return [].slice.call(o)\n}\n\nexport const hasProp = (o, v) => {\n return o && o.hasOwnProperty(v)\n}\n\nexport const forEach = (ob, cb, cx) => {\n for (let p in ob) if (hasProp(ob, p)) cb.call(cx || null, ob[p], p)\n}\n\nexport const cleanObject = (ob) => {\n for (let p in ob) {\n if (hasProp(ob, p)) {\n if (ob[p].length === 0) {\n if (isArray(ob)) ob.splice(p, 1)\n if (isPlainObject(ob)) delete ob[p]\n } else if (isPlainObject(ob[p])) {\n cleanObject(ob[p])\n }\n }\n }\n return ob\n}\n\nexport const extend = (obj, ...args) => {\n forEach(args, function (o) {\n if (o !== null) {\n forEach(o, function (value, key) {\n if (isPlainObject(value)) {\n obj[key] = extend(obj[key] || {}, value)\n } else {\n obj[key] = value\n }\n })\n }\n })\n return obj\n}\n\nexport const uuid = () => {\n let a = 0,\n b = ''\n while (a++ < 36) {\n if ((a * 51) & 52) {\n b += (a ^ 15 ? 8 ^ (Math.random() * (a ^ 20 ? 16 : 4)) : 4).toString(16)\n } else {\n b += '-'\n }\n }\n return b\n}\n\nexport const isObject = (o) => {\n return getType(o) === 'object'\n}\n\nexport const isRegexp = (o) => {\n return getType(o) === 'regexp'\n}\n\nexport const isArguments = (o) => {\n return getType(o) === 'arguments'\n}\n\nexport const isError = (o) => {\n return getType(o) === 'error'\n}\n\nexport const isDate = (o) => {\n return getType(o) === 'date'\n}\n\nexport const isString = (o) => {\n return getType(o) === 'string'\n}\n\nexport const isNumber = (o) => {\n return getType(o) === 'number'\n}\n\nexport const map = (ob, cb, cx) => {\n let p,\n t,\n r = []\n for (p in ob) if (hasProp(ob, p)) if ((t = cb.call(cx || null, ob[p], p)) !== undefined) r[p] = t\n return r\n}\n\nexport const querySelectorAll = (o, p) => {\n return toArray((p || document).querySelectorAll(o))\n}\n\nexport const querySelector = (o, p) => {\n return (p || document).querySelector(o)\n}\n\nexport const deparam = (params) => {\n const data = {}\n if (params.charAt(0) === '?') params = params.slice(1)\n if (params && paramTest.test(params)) {\n forEach(params.split('&'), (pair) => {\n let parts = pair.split('='),\n key = prep(parts.shift()),\n value = prep(parts.join('=')),\n current = data\n if (key) {\n parts = key.match(keyBreaker)\n for (let j = 0, l = parts.length - 1; j < l; j++) {\n if (!current[parts[j]]) {\n current[parts[j]] = digitTest.test(parts[j + 1]) || parts[j + 1] === '[]' ? [] : {}\n }\n current = current[parts[j]]\n }\n const lastPart = parts.pop()\n if (lastPart === '[]') {\n current.push(value)\n } else {\n current[lastPart] = value\n }\n }\n })\n }\n return data\n}\n\nexport const param = (obj) => {\n const result = []\n forEach(obj, (item, prop) => {\n recursiveParams(prop, item, (key, value) => {\n value = value == null ? '' : value\n result.push([encodeURIComponent(key), encodeURIComponent(value)].join('='))\n })\n })\n return result.join('&').replace(r20, '+')\n}\n\nexport const removeElement = (el) => {\n el.parentNode.removeChild(el)\n}\n\nexport const createElement = (tag) => {\n return document.createElement(tag)\n}\n\nexport const addClass = (...args) => {\n const el = args.shift()\n if (isElement(el) === false) return\n const classList = el.className.trim().split(/\\s+/)\n const tokens = flatten(args.map((item) => item.trim().split(/\\s+/)))\n tokens.forEach((token) => {\n if (token && !~classList.indexOf(token)) {\n classList.push(token)\n }\n })\n el.className = classList.join(' ').trim()\n}\n\nexport const removeClass = (...args) => {\n const el = args.shift()\n if (isElement(el) === false) return\n const classList = el.className.trim().split(/\\s+/)\n const tokens = flatten(args.map((item) => item.trim().split(/\\s+/)))\n tokens.forEach((token) => {\n if (token) {\n const index = classList.indexOf(token)\n if (!!~index) {\n classList.splice(index, 1)\n }\n }\n })\n el.className = classList.join(' ').trim()\n}\n\nexport const removeAttr = (el, attrs) => {\n if (isElement(el) === false) return false\n if (isPlainObject(attrs)) {\n forEach(attrs, (value) => {\n el.removeAttribute(value)\n })\n }\n}\n\nexport const addAttr = (el, attrs) => {\n if (isElement(el) === false) return false\n if (isPlainObject(attrs)) {\n forEach(attrs, (value, name) => {\n el.setAttribute(name, value)\n })\n }\n}\n\nexport const getStyle = (el, prop, getComputedStyle) => {\n getComputedStyle = window.getComputedStyle\n return (getComputedStyle ? getComputedStyle(el) : el['currentStyle'])[\n prop.replace(/-(\\w)/gi, function (word, letter) {\n return letter.toUpperCase()\n })\n ]\n}\n\nexport const getPath = (path) => {\n const props = path.split('.')\n const first = props.shift()\n let value = null\n if (hasProp(window, first)) {\n value = window[first]\n forEach(props, (name) => {\n value = hasProp(value, name) ? value[name] : null\n })\n }\n return value\n}\n\nexport const stringFormat = (format, params, expr) => {\n return (format || '').replace(expr || /{(.+?)}/g, (match, prop) => {\n return params[prop] || match\n })\n}\n\nexport const cssUnit = (value, unit) => {\n return String(value || 0)\n .concat(unit || '')\n .concat(' !important')\n}\n/**\n * @function\n * @type {function(*, *, *)}\n */\nexport const getPaymentRequest = ((cx) => {\n let NativePaymentRequest\n if (hasProp(cx, 'PaymentRequest') && isFunction(cx.PaymentRequest)) {\n NativePaymentRequest = cx.PaymentRequest\n }\n return (methods, details, options) => {\n let request = null\n details = details || {}\n details.id = uuid()\n options = options || {}\n if (NativePaymentRequest) {\n try {\n request = new NativePaymentRequest(methods, details, options)\n } catch (e) {\n request = null\n }\n }\n return request\n }\n})(window)\n\nexport const jsonParse = (value, defaults) => {\n try {\n return JSON.parse(value)\n } catch (e) {\n return defaults\n }\n}\n\nexport const PromiseWithResolvers = () => {\n let resolve\n let reject\n const promise = new Promise((promiseResolve, promiseReject) => {\n resolve = promiseResolve\n reject = promiseReject\n })\n return { promise, resolve, reject }\n}\n\n/**\n * @typedef PaymentRequestMethod\n * @property {{[string]:any}} data\n */\n\n/**\n * @typedef PaymentRequestOptions\n * @property {boolean} [requestPayerEmail]\n * @property {boolean} [requestPayerPhone]\n * @property {boolean} [requestPayerName]\n * @property {boolean} [requestShipping]\n */\n\n/**\n * @typedef PaymentRequestConfig\n * @property [PaymentRequestMethod] methods\n * @property {{[string]:any}} options\n */\n\n/**\n * @param {PaymentRequestConfig} config\n */\nexport const getAppleSessionConfig = (config) => {\n const { methods, details, options } = config\n const method = methods.find((item) => item.supportedMethods === 'https://apple.com/apple-pay')\n const requiredShippingContactFields = []\n const requiredBillingContactFields = []\n if (options.requestShipping) requiredBillingContactFields.push('postalAddress')\n if (options.requestPayerName) requiredShippingContactFields.push('name')\n if (options.requestPayerEmail) requiredShippingContactFields.push('email')\n if (options.requestPayerPhone) requiredShippingContactFields.push('phone')\n return {\n version: method.data.version,\n countryCode: method.data.countryCode,\n supportedNetworks: method.data.supportedNetworks,\n merchantCapabilities: method.data.merchantCapabilities,\n merchantIdentifier: method.data.merchantIdentifier,\n lineItems: method.data.lineItems || details.displayItems,\n additionalLineItems: method.data.additionalLineItems,\n recurringPaymentRequest: method.data.recurringPaymentRequest,\n deferredPaymentRequest: method.data.deferredPaymentRequest,\n //\n currencyCode: method.data.currencyCode || details.total.amount.currency,\n total: {\n label: details.total.label,\n amount: details.total.amount.value,\n },\n //\n requiredBillingContactFields,\n requiredShippingContactFields,\n }\n}\n\nexport const buildUrl = (origin, path = '', params = {}) => {\n const query = Object.keys(params)\n .filter(function (key) {\n return params[key] !== undefined && params[key] !== null\n })\n .map(function (key) {\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`\n })\n .join('&')\n const url = [origin, path].join('')\n const separator = !!~url.indexOf('?') ? '&' : '?'\n return query ? `${url}${separator}${query}` : url\n}\n\nexport const getFunction = (path) => {\n const props = path.split('.')\n const value = props.reduce((acc, cur) => {\n if (acc && acc.hasOwnProperty(cur)) {\n acc = acc[cur]\n return acc\n }\n return null\n }, window)\n return isFunction(value) ? value : value\n}\n\nexport const loadExternalApi = (url, path) => {\n const [existScript] = toArray(document.scripts).filter((script) => script.src === url)\n if (existScript) return Promise.resolve(getFunction(path))\n const { promise, resolve } = PromiseWithResolvers()\n const script = document.createElement('script')\n script.async = true\n script.src = url\n script.addEventListener('load', () => {\n const value = getFunction(path)\n console.log('api loading', 'success', url)\n resolve(value)\n })\n script.addEventListener('error', (e) => {\n const value = getFunction(path)\n console.log('api loading', 'error', url)\n resolve(value)\n })\n document.head.appendChild(script)\n return promise\n}\n\nexport const transitionDelay = (el) => {\n let { transitionDelay, transitionDuration } = getComputedStyle(el)\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * 1000\n}\n","export const ApiOrigin = 'https://pay.flitt.com'\n\nexport const ApiEndpoint = {\n gateway: '/latest/checkout-v2/index.html',\n element: '/latest/checkout-v2/button/element.html',\n}\n\nexport const ProxyUrl = 'http://secure-redirect.cloudipsp.com/submit/'\n\nexport const GooglePayApi = 'https://pay.google.com/gp/p/js/pay.js'\n\nexport const GoogleBaseRequest = {\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: ['AMEX', 'DISCOVER', 'INTERAC', 'JCB', 'MASTERCARD', 'VISA'],\n },\n },\n ],\n}\n\nexport const PaymentMethodsConfig = [\n {\n url: 'https://pay.google.com/gp/p/js/pay.js',\n name: 'google',\n path: 'google.payments.api.PaymentsClient',\n callback(PaymentsClient) {\n if (PaymentsClient) {\n return new PaymentsClient({ environment: 'TEST' })\n .isReadyToPay(GoogleBaseRequest)\n .catch((e) => {\n console.log(e)\n return false\n })\n }\n return false\n },\n },\n {\n url: 'https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js',\n name: 'apple',\n path: 'ApplePaySession',\n callback(ApplePaySession) {\n if (ApplePaySession) {\n return ApplePaySession.supportsVersion(3)\n }\n return false\n },\n },\n]\n\nexport const GooglePayLanguages = [\n 'ar',\n 'bg',\n 'ca',\n 'zh',\n 'hr',\n 'cs',\n 'da',\n 'nl',\n 'en',\n 'et',\n 'fi',\n 'fr',\n 'de',\n 'el',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'ms',\n 'no',\n 'pl',\n 'pt',\n 'ru',\n 'sr',\n 'sk',\n 'sl',\n 'es',\n 'sv',\n 'th',\n 'tr',\n 'uk',\n]\n\nexport const PaymentRequestDetails = {\n total: {\n label: 'Total',\n amount: {\n currency: 'USD',\n value: '0.00',\n },\n },\n}\n\nexport const ApiFrameCss = {\n width: '1px !important',\n height: '1px !important',\n left: '1px !important',\n bottom: '1px !important',\n position: 'fixed !important',\n border: '0px !important',\n}\n\nexport const ButtonFrameCss = {\n border: 'none !important',\n margin: '0 !important',\n padding: '0 !important',\n display: 'block !important',\n width: '1px !important',\n 'min-width': '100% !important',\n background: 'transparent !important',\n position: 'relative !important',\n opacity: '0 !important',\n overflow: 'hidden !important',\n height: '100% !important',\n outline: 'none !important',\n 'color-scheme': 'light',\n 'z-index': '1 !important',\n}\n\nexport const ButtonFrameAttrs = {\n tabindex: '-1',\n scrolling: 'no',\n frameborder: 0,\n allowtransparency: true,\n allowpaymentrequest: true,\n}\n\nexport const ButtonCoverCss = {\n 'z-index': '2 !important',\n position: 'absolute !important',\n border: 'none !important',\n background: 'transparent !important',\n left: '0 !important',\n top: '0 !important',\n cursor: 'pointer !important',\n outline: 'none !important',\n width: '100% !important',\n height: '100% !important',\n}\n\nexport const ButtonCoverAttrs = {\n role: 'button',\n 'aria-pressed': 'false',\n}\n\nexport const ButtonContainerCss = {\n border: '0 !important',\n margin: '0 !important',\n padding: '0 !important',\n display: 'block !important',\n background: 'transparent !important',\n 'user-select': 'none !important',\n overflow: 'hidden !important',\n position: 'relative !important',\n opacity: '1 !important',\n height: '0 !important',\n width: '100% !important',\n outline: 'none !important',\n}\n\nexport const ButtonDefaultColor = 'dark'\n\nexport const ButtonColorMap = {\n dark: 'dark',\n light: 'light',\n black: 'dark',\n white: 'light',\n}\n\nexport const ButtonLabelMap = {\n ar: '',\n bg: '',\n ca: '',\n zh: '',\n hr: '',\n cs: '',\n da: '',\n nl: '',\n en: 'Pay with',\n et: '',\n es: 'Comprar con',\n el: '',\n fi: '',\n fr: 'Acheter avec',\n de: 'Zahlen über',\n id: '',\n it: 'Acquista con',\n ja: '',\n ko: '',\n ms: '',\n no: '',\n pl: 'Zapłać przez',\n pt: '',\n ru: 'Оплатить через',\n sr: '',\n sk: 'Zaplatiť cez',\n sl: '',\n sv: '',\n th: '',\n tr: '',\n uk: 'Оплатити через',\n}\n","import { isFunction, forEach } from './utils.js'\n\nconst PENDING = 0\nconst RESOLVED = 1\nconst REJECTED = 2\nconst PROGRESS = 3\n\nexport function Deferred() {\n const resolveCallbacks = []\n const rejectCallbacks = []\n const notifyCallbacks = []\n let status = PENDING\n let resultContext = undefined\n let resultArgs = null\n let chainArgs = null\n const executeCallback = (context, args, callbacks) => {\n const list = [].concat(callbacks)\n const save = (chainArgs, isArgs) => {\n if (isArgs) {\n resultArgs = Array.from(chainArgs)\n } else {\n resultArgs = [chainArgs]\n }\n }\n const execute = () => {\n const item = list.shift()\n if (item) {\n chainArgs = item.apply(resultContext, resultArgs)\n if (chainArgs !== undefined) {\n if (chainArgs && chainArgs.then) {\n chainArgs.then((...chainArgs) => {\n save(chainArgs, true)\n execute()\n })\n } else {\n save(chainArgs)\n execute()\n }\n } else {\n execute()\n }\n }\n }\n resultContext = context\n resultArgs = args\n execute()\n }\n /**\n * @lends Deferred.prototype\n */\n const promise = {\n done(callback) {\n if (isFunction(callback)) {\n if (this.isResolved()) {\n callback.apply(resultContext, resultArgs)\n } else {\n resolveCallbacks.push(callback)\n }\n }\n return this\n },\n fail(callback) {\n if (isFunction(callback)) {\n if (this.isRejected()) {\n callback.apply(resultContext, resultArgs)\n } else {\n rejectCallbacks.push(callback)\n }\n }\n return this\n },\n progress(callback) {\n if (isFunction(callback)) {\n if (this.isProgress()) {\n callback.apply(resultContext, resultArgs)\n } else {\n notifyCallbacks.push(callback)\n }\n }\n return this\n },\n always(callback) {\n return this.done(callback).fail(callback)\n },\n then(resolve, reject, progress) {\n if (isFunction(resolve)) {\n this.done(resolve)\n }\n if (isFunction(reject)) {\n this.fail(reject)\n }\n if (isFunction(progress)) {\n this.progress(reject)\n }\n return this\n },\n promise(object) {\n if (object === null) {\n return promise\n }\n forEach(promise, (item, prop) => {\n object[prop] = item\n })\n return object\n },\n state: function () {\n return status\n },\n isPending() {\n return status === PENDING\n },\n isRejected() {\n return status === REJECTED\n },\n isResolved() {\n return status === RESOLVED\n },\n isProgress() {\n return status === PROGRESS\n },\n clear() {\n if (this.isPending()) {\n resolveCallbacks.length = 0\n rejectCallbacks.length = 0\n notifyCallbacks.length = 0\n }\n return this\n },\n resolveWith(context, args) {\n if (this.isPending()) {\n status = RESOLVED\n executeCallback(context, args, resolveCallbacks)\n }\n return this\n },\n rejectWith(context, args) {\n if (this.isPending()) {\n status = REJECTED\n executeCallback(context, args, rejectCallbacks)\n }\n return this\n },\n notifyWith(context, args) {\n if (this.isPending()) {\n status = PROGRESS\n executeCallback(context, args, notifyCallbacks)\n status = PENDING\n }\n return this\n },\n resolve() {\n return this.resolveWith(this, Array.from(arguments))\n },\n reject() {\n return this.rejectWith(this, Array.from(arguments))\n },\n notify() {\n return this.notifyWith(this, Array.from(arguments))\n },\n }\n return promise\n}\n","let init = false\nconst fnTest = /xyz/.test(\n function () {\n return 'xyz'\n }.toString()\n)\n ? /\\b_super\\b/\n : /.*/\n\nexport function ClassObject() {}\n\nClassObject.prototype._super = function () {}\n\nClassObject.prototype.instance = function (params) {\n return new this.constructor(params)\n}\n\nClassObject.prototype.proxy = function (fn) {\n fn = typeof fn == 'string' ? this[fn] : fn\n return (function (cx, cb) {\n return function () {\n return cb.apply(cx, [this].concat(Array.prototype.slice.call(arguments)))\n }\n })(this, fn)\n}\n\nfunction superMethod(parent, name, method) {\n return function () {\n let temp = this._super,\n result\n this._super = parent[name]\n result = method.apply(this, arguments)\n this._super = temp\n return result\n }\n}\n\nfunction assign(target, instance) {\n let prop,\n proto,\n parent = target.prototype\n init = true\n proto = new target()\n init = false\n for (prop in instance) {\n if (instance.hasOwnProperty(prop)) {\n if (\n typeof parent[prop] == 'function' &&\n typeof instance[prop] == 'function' &&\n fnTest.test(instance[prop])\n ) {\n proto[prop] = superMethod(parent, prop, instance[prop])\n } else {\n proto[prop] = instance[prop]\n }\n }\n }\n return proto\n}\n\nClassObject.extend = function extend(instance) {\n function Class() {\n if (!init && this) this['init'].apply(this, arguments)\n }\n Class.prototype = assign(this, instance)\n Class.prototype.constructor = Class\n Class.extend = extend\n return Class\n}\n","import { ClassObject } from './class.js'\n\nexport const Event = ClassObject.extend({\n init() {\n this.events = {}\n this.empty = []\n },\n on(type, callback) {\n ;(this.events[type] = this.events[type] || []).push(callback)\n return this\n },\n off(type, callback) {\n type || (this.events = {})\n let list = this.events[type] || this.empty,\n i = (list.length = callback ? list.length : 0)\n while (i--) callback === list[i] && list.splice(i, 1)\n return this\n },\n trigger(type) {\n let e = this.events[type] || this.empty,\n list = e.length > 0 ? e.slice(0, e.length) : e,\n i = 0,\n j\n while ((j = list[i++])) j.apply(j, this.empty.slice.call(arguments, 1))\n return this\n },\n})\n","import { ClassObject } from './class.js'\nimport { Event } from './event.js'\nimport * as Utils from './utils.js'\n\nexport const Module = ClassObject.extend({\n utils: Utils,\n getListener() {\n if (!this._listener_) this._listener_ = new Event()\n return this._listener_\n },\n destroy() {\n this.off()\n },\n on(type, callback) {\n this.getListener().on(type, callback)\n return this\n },\n off(type, callback) {\n this.getListener().off(type, callback)\n return this\n },\n proxy(fn) {\n if (!this._proxy_cache_) this._proxy_cache_ = {}\n if (this.utils.isString(fn)) {\n if (!this._proxy_cache_[fn]) {\n this._proxy_cache_[fn] = this._super(fn)\n }\n return this._proxy_cache_[fn]\n }\n return this._super(fn)\n },\n trigger() {\n this.getListener().trigger.apply(this.getListener(), arguments)\n return this\n },\n each(ob, cb) {\n this.utils.forEach(ob, this.proxy(cb))\n },\n addAttr(el, ob) {\n if (!this.utils.isElement(el)) return false\n this.utils.forEach(ob, function (v, k) {\n el.setAttribute(k, v)\n })\n },\n addCss(el, ob) {\n if (!this.utils.isElement(el)) return false\n this.utils.forEach(\n ob,\n function (v, k) {\n this.addCssProperty(el, k, v)\n },\n this\n )\n },\n addCssProperty(el, style, value) {\n let result = el.style.cssText.match(\n new RegExp('(?:[;\\\\s]|^)(' + style.replace('-', '\\\\-') + '\\\\s*:(.*?)(;|$))')\n ),\n idx\n if (result) {\n idx = result.index + result[0].indexOf(result[1])\n el.style.cssText =\n el.style.cssText.substring(0, idx) +\n style +\n ': ' +\n value +\n ';' +\n el.style.cssText.substring(idx + result[1].length)\n } else {\n el.style.cssText += ' ' + style + ': ' + value + ';'\n }\n },\n addEvent(el, ev, cb) {\n if (!el || !ev || !cb) return false\n cb = this.proxy(cb)\n if (el.addEventListener) el.addEventListener(ev, cb)\n else if (el['attachEvent']) el['attachEvent']('on' + ev, cb)\n },\n removeEvent(el, ev, cb) {\n if (!el || !ev || !cb) return false\n cb = this.proxy(cb)\n if (el.removeEventListener) el.removeEventListener(ev, cb, false)\n else if (el['detachEvent']) el['detachEvent']('on' + ev, cb)\n },\n prepareForm(url, data, target, method) {\n const form = this.utils.createElement('form')\n this.addAttr(form, {\n action: url,\n target: target || '_self',\n method: method || 'POST',\n })\n this.addCss(form, {\n display: 'none',\n })\n this.utils.forEach(\n data,\n function (v, k, el) {\n el = this.utils.createElement('input')\n el.type = 'hidden'\n el.name = k\n el.value = v\n form.appendChild(el)\n },\n this\n )\n return form\n },\n})\n","import { Module } from './module.js'\n\nexport const Connector = Module.extend({\n ns: 'crossDomain',\n origin: '*',\n uniqueId: 1,\n signature: null,\n init(params) {\n this.setTarget(params.target)\n this.setOrigin(params.origin)\n this.create()\n },\n create() {\n this.addEvent(window, 'message', 'router')\n },\n setOrigin(origin) {\n this.origin = origin || '*'\n },\n setTarget(target) {\n this.target = target\n return this\n },\n getUID() {\n return ++this.uniqueId\n },\n destroy() {\n this.removeEvent(window, 'message', 'router')\n this._super()\n },\n router(window, ev, response) {\n if (this.target !== ev.source) return false\n try {\n response = JSON.parse(ev.data)\n } catch (e) {}\n if (response && response.action && response.data) {\n this.trigger(response.action, response.data)\n }\n },\n send(action, data, request, options) {\n if (!this.target) {\n return\n }\n request = JSON.stringify({\n action: action,\n data: data,\n })\n options = {\n targetOrigin: this.origin,\n delegate: 'payment',\n }\n try {\n this.target.postMessage(request, options)\n } catch (e) {\n this.target.postMessage(request, this.origin, [])\n }\n },\n})\n","import styles from './acs_styles.js'\n\nexport default (data) => `\n${styles(data)}\n<div class=\"flitt-modal-wrapper\">\n <div class=\"flitt-modal\">\n <div class=\"flitt-modal-header\">\n <a href=\"javascript:void(0)\" class=\"flitt-modal-close\"></a>\n <div class=\"flitt-modal-title\">\n ${data.messages.modalHeader}\n <a href='javascript:void(0)'>${data.messages.modalLinkLabel}</a>\n </div>\n </div>\n <div class=\"flitt-modal-content\">\n <iframe src=\"about:blank\" class=\"flitt-modal-iframe\" frameborder=\"0\" allowtransparency=\"true\"></iframe>\n </div>\n </div>\n</div>\n`\n","export default (data) => `\n<style>\n .flitt-modal {\n box-sizing: border-box;\n margin: 100px auto;\n max-width: 680px;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n }\n\n @media (max-width: 850px) {\n .flitt-modal {\n margin: 50px auto;\n }\n }\n\n @media (max-width: 695px) {\n .flitt-modal {\n max-width: 100%;\n margin: 5px;\n }\n }\n\n .flitt-modal-wrapper {\n box-sizing: border-box;\n overflow: auto;\n position: fixed;\n z-index: 99999;\n left: 0;\n bottom: 0;\n top: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n .flitt-modal-header {\n box-sizing: border-box;\n background-color: #fafafa;\n height: 50px;\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n .flitt-modal-close {\n box-sizing: border-box;\n float: right;\n overflow: hidden;\n height: 50px;\n text-decoration: none;\n border-top-right-radius: 5px;\n color: #949494;\n }\n\n .flitt-modal-close:hover, .flitt-modal-close:focus, .flitt-modal-close:active {\n text-decoration: none;\n color: #646464;\n }\n\n .flitt-modal-close:before {\n content: \"×\";\n font-size: 50px;\n line-height: 50px;\n padding: 0 10px;\n }\n\n .flitt-modal-title {\n box-sizing: border-box;\n border-top-left-radius: 5px;\n line-height: 20px;\n height: 50px;\n padding: 5px 15px;\n font-size: 12px;\n display: table-cell;\n vertical-align: middle;\n }\n .flitt-modal-content {\n box-sizing: border-box;\n border-bottom-left-radius: 5px;\n min-height: 650px;\n }\n .flitt-modal-iframe {\n overflow-x: hidden;\n border: 0;\n display: block;\n width: 100%;\n height: 750px;\n }\n</style>\n`\n","import { ClassObject } from './class.js'\n\nimport * as Views from '../views/index.js'\n\nfunction empty(name) {\n return function (data) {\n return ['template', name, 'not found'].join(' ')\n }\n}\n\nexport const Template = ClassObject.extend({\n init(name) {\n this.view = Views[name] || empty(name)\n },\n render(data) {\n return this.view(data)\n },\n})\n","import { Module } from './module.js'\nimport { Connector } from './connector.js'\nimport { Template } from './template.js'\n\nexport const Modal = Module.extend({\n init(data) {\n this.checkout = data.checkout\n this.model = data.model || {}\n this.messages = data.checkout.params.messages || {}\n this.template = new Template('acs')\n this.body = this.utils.querySelector('body')\n this.initModal()\n this.initConnector()\n },\n initModal() {\n this.name = ['modal-iframe', this.getRandomNumber()].join('-')\n this.modal = this.utils.createElement('div')\n this.modal.innerHTML = this.template.render({\n model: this.model,\n messages: this.messages,\n })\n this.iframe = this.find('.flitt-modal-iframe')\n this.addAttr(this.iframe, { name: this.name, id: this.name })\n if (this.model['send_data']) {\n this.form = this.prepareForm(this.model['url'], this.model['send_data'], this.name)\n this.modal.appendChild(this.form)\n } else {\n this.iframe.src = this.model['url']\n }\n this.addEvent(this.find('.flitt-modal-close'), 'click', 'closeModal')\n this.addEvent(this.find('.flitt-modal-title a'), 'click', 'submitForm')\n this.initScrollbar()\n this.submitToIframe()\n },\n submitToIframe() {\n if (this.modal) {\n this.body.appendChild(this.modal)\n }\n if (this.form) {\n this.form.submit()\n }\n },\n measureScrollbar() {\n const scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.body.appendChild(scrollDiv)\n this.utils.removeElement(scrollDiv)\n return scrollDiv.offsetWidth - scrollDiv.clientWidth\n },\n checkScrollbar() {\n let documentElementRect\n let fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) {\n documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n },\n initScrollbar() {\n this.checkScrollbar()\n this.bodyPad = parseInt(this.utils.getStyle(this.body, 'padding-right') || 0, 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n this.originalOverflow = document.body.style.overflow || ''\n if (this.bodyIsOverflowing) {\n this.addCss(this.body, {\n paddingRight: [this.bodyPad + this.scrollbarWidth, 'px'].join(''),\n overflow: 'hidden',\n })\n }\n },\n resetScrollbar() {\n this.addCss(this.body, {\n paddingRight: this.originalBodyPad ? [this.originalBodyPad, 'px'].join('') : '',\n overflow: this.originalOverflow,\n })\n },\n getRandomNumber() {\n return Math.round(Math.random() * 1000000000)\n },\n find(selector) {\n return this.utils.querySelector(selector, this.modal)\n },\n closeModal(el, ev) {\n ev.preventDefault()\n this.trigger('close', this.data)\n this.removeModal()\n },\n submitForm(el, ev) {\n ev.preventDefault()\n this.trigger('submit', this.data)\n this.addAttr(this.form, {\n target: '_blank',\n })\n this.form.submit()\n },\n removeModal() {\n this.destroy()\n },\n destroy() {\n this.utils.removeElement(this.modal)\n this.resetScrollbar()\n this.connector.destroy()\n this._super()\n },\n initConnector() {\n this.connector = new Connector({ target: this.iframe.contentWindow })\n this.connector.on('response', this.proxy('onResponse'))\n },\n onResponse(ev, data) {\n this.sendResponse(data)\n this.removeModal()\n },\n sendResponse(data) {\n this.checkout.connector.send('request', {\n uid: data.uid,\n action: 'api.checkout.proxy',\n method: 'send',\n params: data,\n })\n },\n})\n","import { Module } from './module.js'\n\nexport const Model = Module.extend({\n init(data) {\n this.data = data || {}\n this.create()\n },\n create() {},\n eachProps(args) {\n const name = args[1] ? args[0] : null\n const callback = args[1] ? args[1] : args[0]\n const list = name ? this.alt(name, []) : this.data\n return {\n list: list,\n callback: callback,\n }\n },\n each() {\n const props = this.eachProps(arguments)\n for (let prop in props.list) {\n if (props.list.hasOwnProperty(prop)) {\n props.callback(this.instance(props.list[prop]), props.list[prop], prop)\n }\n }\n },\n filter() {\n const props = this.eachProps(arguments)\n for (let prop in props.list) {\n if (props.list.hasOwnProperty(prop)) {\n const item = this.instance(props.list[prop])\n if (props.callback(item, props.list[prop], prop)) {\n return props.list[prop]\n }\n }\n }\n },\n find() {\n const props = this.eachProps(arguments)\n for (let prop in props.list) {\n if (props.list.hasOwnProperty(prop)) {\n const item = this.instance(props.list[prop])\n if (props.callback(item, props.list[prop], prop)) {\n return item\n }\n }\n }\n return false\n },\n alt(prop, defaults) {\n prop = this.attr(prop)\n return typeof prop === 'undefined' ? defaults : prop\n },\n attr(key, value) {\n let i = 0,\n data = this.data,\n name = (key || '').split('.'),\n prop = name.pop(),\n len = arguments.length\n for (; i < name.length; i++) {\n if (data && data.hasOwnProperty(name[i])) {\n data = data[name[i]]\n } else {\n if (len === 2) {\n data = data[name[i]] = {}\n } else {\n break\n }\n }\n }\n if (len === 1) {\n return data ? data[prop] : undefined\n }\n if (len === 2) {\n data[prop] = value\n }\n return this\n },\n stringify() {\n return JSON.stringify(this.serialize())\n },\n serialize() {\n return this.data\n },\n})\n","import { Model } from './model.js'\nimport { ProxyUrl } from './config.js'\n\nexport const Response = Model.extend({\n stringFormat(string) {\n const that = this\n return (string || '').replace(/{(.+?)}/g, function (match, prop) {\n return that.attr(['order.order_data', prop].join('.')) || match\n })\n },\n setConnector(connector) {\n this.connector = connector\n return this\n },\n setUID(uid) {\n this.uid = uid\n return this\n },\n getUID() {\n return this.uid\n },\n formDataProxy(url, data, target, method) {\n location.assign(\n [\n ProxyUrl,\n JSON.stringify({\n url: url,\n params: data,\n target: target,\n method: method,\n }),\n ].join('#')\n )\n },\n formDataSubmit(url, data, target, method) {\n if (url.match(/^http:/)) {\n return this.formDataProxy(url, data, target, method)\n }\n const action = this.stringFormat(url)\n const form = this.prepareForm(action, data, target, method)\n const body = this.utils.querySelector('body')\n body.appendChild(form)\n form.submit()\n form.parentNode.removeChild(form)\n },\n inProgress() {\n return this.attr('order.in_progress')\n },\n readyToSubmit() {\n return this.attr('order.ready_to_submit')\n },\n waitForResponse() {\n return this.attr('order.pending')\n },\n needVerifyCode() {\n return this.attr('order.need_verify_code')\n },\n redirectUrl() {\n if (this.attr('url')) {\n this.redirectToUrl(this.attr('url'))\n return true\n }\n return false\n },\n redirectToUrl(url) {\n location.assign(url)\n },\n submitToMerchant() {\n const ready = this.attr('order.ready_to_submit')\n const url = this.attr('model.url') || this.attr('order.response_url')\n const method = this.attr('order.method')\n const action = this.attr('order.action')\n const data = this.attr('model.send_data') || this.attr('order.order_data')\n if (ready && url && data) {\n if (action === 'redirect' || data['get_without_parameters'] === true) {\n this.redirectToUrl(url)\n } else {\n this.formDataSubmit(url, data, '_self', method)\n }\n return true\n }\n },\n submitForm() {\n const method = this.attr('method')\n const url = this.attr('url')\n const data = this.attr('send_data')\n if (url && data) {\n this.formDataSubmit(url, data, '_self', method)\n return true\n }\n return false\n },\n sendResponse() {\n const action = this.attr('action')\n if (action === 'submit') return this.submitForm()\n if (action === 'redirect') return this.redirectUrl()\n return false\n },\n prepare3dsData() {\n const params = {}\n const data = this.attr('submit3ds')\n if (data['3ds']) {\n params.token = this.attr('token')\n params.uid = this.getUID()\n params.frame = true\n if (data['send_data'].TermUrl) {\n data['send_data'].TermUrl = [data['send_data'].TermUrl, this.utils.param(params)].join(\n '#!!'\n )\n }\n }\n return data\n },\n waitOn3dsDecline() {\n const data = this.alt('submit3ds.checkout_data', {\n js_wait_on_3ds_decline: false,\n js_wait_on_3ds_decline_duration: 0,\n })\n return data.js_wait_on_3ds_decline ? data.js_wait_on_3ds_decline_duration : 0\n },\n submit3dsForm() {\n if (this.attr('submit3ds.checkout_data')) {\n this.connector.trigger('modal', this.prepare3dsData())\n }\n },\n supportedMethod(method) {\n const item = this.find('methods', function (item) {\n return item.alt('supportedMethods', '').match(method)\n })\n if (item) {\n this.attr('methods', [item.serialize()])\n } else {\n this.attr('methods', [])\n }\n },\n})\n","import { Deferred } from './deferred.js'\nimport { Module } from './module.js'\nimport { Connector } from './connector.js'\nimport { Modal } from './modal.js'\nimport { Response } from './response.js'\nimport { ApiFrameCss, ApiOrigin, ApiEndpoint } from './config.js'\nimport { buildUrl } from './utils.js'\n\nexport const Api = Module.extend({\n defaults: {\n version: 'default',\n origin: ApiOrigin,\n endpoint: ApiEndpoint,\n container: 'body',\n messages: {\n modalHeader:\n 'Now you will be redirected to your bank 3DSecure. If you are not redirected please refer',\n modalLinkLabel: 'link',\n },\n },\n init(params) {\n this.initParams(params)\n },\n url(type, url) {\n return buildUrl(this.params.origin, this.params.endpoint[type], {\n version: this.params.version,\n origin: location.origin,\n })\n },\n extendParams(params) {\n this.utils.extend(this.params, params)\n return this\n },\n initParams(params) {\n this.iframeDeferred = Deferred()\n this.params = this.utils.extend({}, this.defaults)\n this.extendParams(params)\n this.setOrigin(this.params.origin)\n },\n setOrigin(origin) {\n if (this.utils.isString(origin)) {\n this.params.origin = origin\n }\n return this\n },\n scope(callback) {\n callback = this.proxy(callback)\n this.domReady(function () {\n this.createFrame()\n if (this.iframeDeferred.isPending()) {\n this.iframeDeferred.done(callback)\n } else {\n callback()\n }\n })\n },\n domReady(callback) {\n callback = this.proxy(callback)\n if (document.readyState === 'loading') {\n window.addEventListener('DOMContentLoaded', callback)\n } else {\n callback()\n }\n },\n request(model, method, params) {\n const defer = Deferred()\n const data = {\n uid: this.connector.getUID(),\n action: model,\n method: method,\n params: params || {},\n }\n this.connector.send('request', data)\n this.connector.on(\n data.uid,\n this.proxy(function (ev, response, model, action) {\n const responseModel = new Response(response)\n responseModel.setUID(data.uid)\n responseModel.setConnector(this.connector)\n action = 'resolveWith'\n if (responseModel.attr('submit3ds')) {\n action = 'notifyWith'\n }\n if (responseModel.attr('error')) {\n action = 'rejectWith'\n }\n defer[action](this, [responseModel])\n })\n )\n return defer\n },\n createFrame() {\n if (this.iframe) return this\n this.iframe = this.utils.createElement('iframe')\n this.addAttr(this.iframe, {\n allowtransparency: true,\n frameborder: 0,\n scrolling: 'no',\n })\n this.addAttr(this.iframe, { src: this.url('gateway') })\n this.addCss(this.iframe, ApiFrameCss)\n if (this.utils.isElement(this.params.container)) {\n this.container = this.params.container\n }\n if (this.utils.isString(this.params.container)) {\n this.container = this.utils.querySelector(this.params.container)\n }\n if (this.container) {\n if (this.container.firstChild) {\n this.container.insertBefore(this.iframe, this.container.firstChild)\n } else {\n this.container.appendChild(this.iframe)\n }\n this.connector = new Connector({\n target: this.iframe.contentWindow,\n origin: this.params.origin,\n })\n this.connector.on('load', this.proxy('onLoadConnector'))\n this.connector.on('modal', this.proxy('onOpenModal'))\n } else {\n throw Error(`container element not found: document.querySelector(\"${this.params.container}\")`)\n }\n return this\n },\n onOpenModal(xhr, model) {\n this.modal = new Modal({ checkout: this, model: model })\n this.modal.on('close', this.proxy('onCloseModal'))\n },\n onCloseModal(modal, data) {\n this.trigger('modal.close', modal, data)\n },\n onLoadConnector() {\n this.iframeDeferred.resolve(true)\n this.connector.off('load')\n },\n})\n","import { Module } from '../module.js'\nimport { Api } from '../api.js'\nimport { Deferred } from '../deferred.js'\nimport { forEach, getAppleSessionConfig, isFunction, loadExternalApi } from '../utils.js'\nimport { PaymentMethodsConfig } from '../config.js'\n\nlet supportedMethodsDeferred = null\n\nconst getSupportedMethods = () => {\n if (supportedMethodsDeferred) return supportedMethodsDeferred\n supportedMethodsDeferred = Deferred()\n const promises = []\n const supported = { provider: [] }\n forEach(PaymentMethodsConfig, (method) => {\n promises.push(\n loadExternalApi(method.url, method.path)\n .then(method.callback)\n .then((state) => {\n if (state) {\n supported.provider.push(method.name)\n } else {\n console.log('payment method is not supported', method.name)\n }\n })\n )\n })\n Promise.all(promises).finally(() => {\n supportedMethodsDeferred.resolve(supported)\n })\n return supportedMethodsDeferred\n}\n\nexport const PaymentRequestApi = Module.extend({\n config: {\n payment_system: '',\n fallback: false,\n methods: [],\n details: {},\n options: {},\n },\n supported: {\n fallback: false,\n provider: [],\n },\n payload: {\n payment_system: null,\n provider: [],\n },\n params: {},\n getSupportedMethods() {\n return getSupportedMethods().then((supported) => {\n this.setSupported(supported)\n return supported\n })\n },\n init(params) {\n this.params = params || {}\n },\n setSupported(supported) {\n this.supported = supported\n this.trigger('supported', supported)\n return this\n },\n setPayload(payload) {\n this.payload = payload\n this.trigger('payload', payload)\n return this\n },\n setMerchant(merchant) {\n this.merchant = merchant\n },\n getProviderNames() {\n return this.supported.provider.filter((name) => !!~this.payload.allowed.indexOf(name))\n },\n setBeforeCallback(beforeCallback) {\n if (isFunction(beforeCallback)) {\n this.params.before = beforeCallback\n }\n },\n setAfterCallback(afterCallback) {\n if (isFunction(afterCallback)) {\n this.params.after = afterCallback\n }\n },\n setApi(api) {\n if (api instanceof Api) this.api = api\n return this\n },\n getProviderPayload(method) {\n return this.payload.provider[method] || {}\n },\n isMethodSupported(method) {\n return this.supported.provider.indexOf(method) !== -1\n },\n isFallbackMethod(method) {\n return method === 'google' && this.supported.fallback\n },\n request(model, method, params, success, failure) {\n const context = this\n if (context.api) {\n context.api.scope(function () {\n context.api.request(model, method, params).done(success).fail(failure)\n })\n }\n },\n session(params) {\n const defer = Deferred()\n this.request(\n 'api.checkout.pay',\n 'session',\n params,\n function (model) {\n defer.resolve(model.serialize())\n },\n function (model) {\n defer.reject(model)\n }\n )\n return defer\n },\n update(data) {\n if (this.isPending()) return\n this.setPending(true)\n this.params.data = data\n this.defer = Deferred()\n this.request(\n 'api.checkout.pay',\n 'methods',\n this.params.data,\n this.proxy(function (_cx, model) {\n this.setPending(false)\n this.setPayload(model.serialize())\n this.defer.resolve(model)\n }),\n this.proxy(function (_cx, model) {\n this.setPending(false)\n this.setPayload(model.serialize())\n this.trigger('error', model.serialize())\n this.defer.reject(model)\n })\n )\n return this.defer\n },\n isPending() {\n return this.pendingState === true\n },\n setPending(state) {\n if (this.pendingState !== state) {\n this.pendingState = state\n this.trigger('pending', state)\n }\n },\n before() {\n if (this.isPending()) return\n this.setPending(true)\n const defer = Deferred()\n const context = this\n defer.always(function () {\n context.setPending(false)\n })\n this.params.before(defer)\n return defer\n },\n after(params) {\n const defer = Deferred()\n this.params.after(defer, params)\n return defer\n },\n withApplePay(response, config) {\n const sessionConfig = getAppleSessionConfig(config)\n const request = new ApplePaySession(sessionConfig.version, sessionConfig)\n const merchant = this.merchant\n const context = this\n request.onvalidatemerchant = function (event) {\n context\n .session({\n url: event.validationURL,\n domain: location.host,\n merchant_id: merchant,\n })\n .done((session) => {\n try {\n request.completeMerchantValidation(session.data)\n } catch (error) {\n response.reject({ code: error.code, message: error.message })\n }\n })\n }\n request.oncancel = function () {\n response.reject({ code: 20, message: 'cancel' })\n }\n request.onpaymentauthorized = function (event) {\n request.completePayment(ApplePaySession.STATUS_SUCCESS)\n response.resolve(event.payment)\n }\n request.begin()\n },\n withGooglePay(response, config) {\n const { methods } = config\n const method = methods.find((item) => item.supportedMethods === 'https://google.com/pay')\n const client = new google.payments.api.PaymentsClient({ environment: method.data.environment })\n client\n .loadPaymentData(method.data)\n .then((paymentData) => {\n response.resolve(paymentData)\n })\n .catch((error) => {\n response.reject({ code: error.code, message: error.message })\n })\n },\n pay(method) {\n if (this.isPending()) return\n this.setPending(true)\n const context = this\n const response = Deferred()\n const payload = this.getProviderPayload(method)\n response.always(function () {\n context.setPending(false)\n })\n switch (method) {\n case 'google':\n this.withGooglePay(response, payload)\n break\n case 'apple':\n this.withApplePay(response, payload)\n break\n }\n return response\n .done(function (data) {\n context.trigger('details', {\n payment_system: context.payload.payment_system,\n data,\n })\n })\n .fail(function (error) {\n context.trigger('error', error)\n })\n },\n})\n","import { Module } from '../module.js'\nimport { Connector } from '../connector.js'\nimport {\n ApiOrigin,\n ApiEndpoint,\n ButtonContainerCss,\n ButtonCoverCss,\n ButtonCoverAttrs,\n ButtonFrameCss,\n ButtonFrameAttrs,\n} from '../config.js'\n\nimport { transitionDelay, toArray } from '../utils.js'\n\nimport { PaymentRequestApi } from './request.js'\nimport { Deferred } from '../deferred.js'\n\nexport const PaymentElement = Module.extend({\n defaults: {\n method: null,\n appendTo: null,\n className: 'payment-element',\n origin: ApiOrigin,\n endpoint: ApiEndpoint.element,\n mode: 'plain',\n color: 'black',\n lang: 'en',\n height: 38,\n },\n init(params) {\n this.state = {\n type: 'hide',\n transition: false,\n pending: false,\n mounted: false,\n supported: false,\n allowed: false,\n }\n this.params = {}\n this.utils.extend(this.params, this.defaults)\n this.utils.extend(this.params, params)\n this.initElement()\n },\n timeout(callback, timeout) {\n this.timeoutMap = this.timeoutMap || {}\n clearTimeout(this.timeoutMap[timeout])\n this.timeoutMap[callback] = setTimeout(this.proxy(callback), timeout)\n return this\n },\n getElementUrl() {\n return [this.params.origin, this.params.endpoint].join('')\n },\n getElementOptions() {\n return this.utils.param({\n method: this.params.method,\n mode: this.params.mode,\n style: this.params.style,\n color: this.params.color,\n lang: this.params.lang,\n })\n },\n initElement() {\n this.element = this.utils.createElement('div')\n this.iframe = this.utils.createElement('iframe')\n this.iframeLoaded = Deferred()\n this.button = this.utils.createElement('a')\n this.addCss(this.element, ButtonContainerCss)\n this.addCss(this.button, ButtonCoverCss)\n this.addAttr(this.button, ButtonCoverAttrs)\n this.addCss(this.iframe, ButtonFrameCss)\n this.addAttr(this.iframe, ButtonFrameAttrs)\n this.addAttr(this.iframe, {\n src: [this.getElementUrl(), this.getElementOptions()].join('?'),\n })\n this.addEvent(this.iframe, 'load', 'onloadConnector')\n this.addEvent(this.iframe, 'error', 'errorConnector')\n this.addAttr(this.element, {\n class: this.params.className,\n })\n this.element.appendChild(this.iframe)\n this.element.appendChild(this.button)\n },\n errorConnector() {\n this.iframeLoaded.resolveWith(this)\n },\n onloadConnector() {\n this.iframeLoaded.resolveWith(this)\n this.connector = new Connector({\n target: this.iframe.contentWindow,\n origin: this.params.origin,\n })\n },\n send(action, data) {\n if (this.connector) {\n this.connector.send(action, data)\n }\n },\n onEvent(cx, ev) {\n ev.preventDefault()\n if (this.state.pending) return false\n this.send('event', { type: ev.type })\n },\n onClick() {\n if (this.state.pending) return false\n this.request.before().done(this.proxy('onClickDone')).fail(this.proxy('onClickFail'))\n },\n onClickDone() {\n this.request.pay(this.params.method)\n },\n onClickFail() {},\n onSupported(cx, supported) {\n this.state.supported = supported.provider.includes(this.params.method)\n this.render()\n },\n onPayload(cx, payload) {\n this.state.allowed = payload.allowed.includes(this.params.method)\n this.render()\n },\n onPending(cx, state) {\n this.state.pending = state\n this.addCss(this.element, {\n transition: 'height 0.2s ease-out, opacity 0.4s ease-out',\n pointerEvents: this.state.pending ? 'none' : '',\n opacity: this.state.pending ? '0.5' : '1',\n })\n },\n initEvents() {\n this.addEvent(this.button, 'mouseenter', 'onEvent')\n this.addEvent(this.button, 'mouseleave', 'onEvent')\n this.addEvent(this.button, 'blur', 'onEvent')\n this.addEvent(this.button, 'focus', 'onEvent')\n this.addEvent(this.button, 'click', 'onClick')\n },\n setPaymentRequest(request) {\n if (!(request instanceof PaymentRequestApi))\n throw Error('request is not instance of PaymentRequestApi')\n const onSupported = this.proxy('onSupported')\n const onPayload = this.proxy('onPayload')\n const onPending = this.proxy('onPending')\n this.request = request\n this.request.off('supported', onSupported).on('supported', onSupported)\n this.request.off('payload', onPayload).on('payload', onPayload)\n this.request.off('pending', onPending).on('pending', onPending)\n return this\n },\n appendTo(appendTo) {\n const container = this.utils.querySelector(appendTo)\n if (container) container.appendChild(this.element)\n this.initEvents()\n return this\n },\n render() {\n if (this.state.supported === false) return this.hide()\n if (this.state.allowed === false) return this.hide()\n this.mount()\n this.show()\n },\n notMounted() {\n return this.state.mounted === false\n },\n isMounted() {\n return this.state.mounted === true\n },\n unmount() {\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element)\n this.state.mounted = false\n }\n return this\n },\n mount() {\n if (!document.body.contains(this.element)) {\n this.appendTo(this.params.appendTo)\n this.state.mounted = true\n }\n return this\n },\n transitionValue(value) {\n return value\n },\n getTimeoutValue() {\n return toArray(arguments).map(transitionDelay).sort().pop()\n },\n getState(state, transition) {\n return this.state.type === (state ? 'show' : 'hide') && this.state.transition === transition\n },\n triggerState() {\n this.request.trigger(this.state.type, {\n transition: this.state.transition,\n method: this.params.method,\n })\n },\n show() {\n if (this.notMounted()) return\n this.timeout('showCallback', 25)\n return this\n },\n hide() {\n if (this.notMounted()) return\n this.timeout('hideCallback', 25)\n return this\n },\n showCallback() {\n this.addCss(this.element, {\n transition: this.transitionValue('height 0.2s ease-out'),\n height: this.utils.cssUnit(this.params.height, 'px'),\n 'will-change': 'height',\n })\n this.addCss(this.iframe, {\n transition: this.transitionValue('opacity 0.225s 0.225s ease-out'),\n opacity: this.utils.cssUnit(1),\n 'will-change': 'opacity',\n })\n this.afterCallback('show')\n },\n hideCallback() {\n this.addCss(this.element, {\n transition: this.transitionValue('height 0.225s 0.225s ease-out'),\n height: this.utils.cssUnit(0, 'px'),\n 'will-change': 'height',\n })\n this.addCss(this.iframe, {\n transition: this.transitionValue('opacity 0.225s ease-out'),\n opacity: this.utils.cssUnit(0),\n 'will-change': 'opacity',\n })\n this.afterCallback('hide')\n },\n afterCallback(state) {\n if (this.state.type === state) return\n if (this.state.transition) return\n this.state.transition = true\n this.state.type = state\n this.triggerState()\n this.timeout('afterTransition', this.getTimeoutValue(this.iframe, this.element))\n },\n afterTransition() {\n this.iframeLoaded.then(function () {\n this.state.transition = false\n this.triggerState()\n })\n },\n})\n","import { Module } from '../module.js'\nimport { Api } from '../api.js'\nimport { PaymentRequestApi } from './request.js'\nimport { PaymentElement } from './element.js'\nimport { forEach, isFunction, toArray } from '../utils.js'\nimport { ApiOrigin, ApiEndpoint } from '../config.js'\n\nexport const PaymentButton = Module.extend({\n defaults: {\n version: 'default',\n origin: ApiOrigin,\n endpoint: ApiEndpoint,\n methods: ['apple', 'google'],\n element: null,\n style: {\n height: 38,\n mode: 'default',\n type: 'long',\n color: 'black',\n },\n data: {\n lang: 'en',\n },\n before(defer) {\n defer.resolve()\n },\n after(defer, params) {\n defer.resolve(params)\n },\n },\n init(params) {\n this.elements = {}\n this.supported = false\n this.params = {\n element: params.element,\n version: params.version || this.defaults.version,\n methods: params.methods || this.defaults.methods,\n origin: params.origin || this.defaults.origin,\n endpoint: this.utils.extend({}, this.defaults.endpoint, params.endpoint),\n style: this.utils.extend({}, this.defaults.style, params.style),\n before: isFunction(params.before) ? params.before : this.defaults.before,\n after: isFunction(params.after) ? params.after : this.defaults.after,\n data: this.utils.extend({}, this.defaults.data, params.data),\n }\n this.initApi(params.api)\n this.initPaymentRequestApi()\n this.initElements()\n this.initData()\n },\n initData() {\n const data = this.params.data\n if (!data.merchant_id) return\n if ((!data.currency || !data.amount) && !data.token) return\n this.update()\n },\n initApi(api) {\n if (api instanceof Api) {\n this.api = api\n } else {\n this.api = new Api({\n version: this.params.version,\n origin: this.params.origin,\n endpoint: this.params.endpoint,\n })\n }\n },\n initPaymentRequestApi() {\n this.request = new PaymentRequestApi({\n before: this.params.before,\n after: this.params.after,\n })\n this.request.setApi(this.api)\n this.request.setMerchant(this.params.data.merchant_id)\n this.request.on('pending', this.proxy('onPending'))\n this.request.on('details', this.proxy('onDetails'))\n this.request.on('error', this.proxy('onError'))\n this.request.on('show', this.proxy('onShow'))\n this.request.on('hide', this.proxy('onHide'))\n },\n initElements() {\n const self = this\n const style = this.params.style\n const data = this.params.data\n const origin = this.params.origin\n const appendTo = this.params.element\n const endpoint = this.params.endpoint.element\n const request = this.request\n this.buttons = []\n this.container = this.utils.querySelector(this.params.element)\n this.addCss(this.container, {\n display: 'flex',\n gap: '1rem',\n 'flex-direction': 'column',\n })\n forEach(this.params.methods, function (method) {\n const element = new PaymentElement({\n origin: origin,\n endpoint: endpoint,\n method: method,\n appendTo: appendTo,\n color: style.color,\n mode: style.mode,\n lang: data.lang,\n height: style.height,\n })\n element.setPaymentRequest(request)\n self.buttons.push(element)\n })\n request.getSupportedMethods()\n },\n update(data) {\n return this.request.update(this.utils.extend(this.params.data, data || {}))\n },\n onDetails(_cx, data) {\n this.api.scope(() => {\n this.request.after(this.params.data).done((extendParams) => {\n this.api\n .request(\n 'api.checkout.form',\n 'request',\n this.utils.extend({}, this.params.data, extendParams || {}, data)\n )\n .done(this.proxy('onSuccess'))\n .fail(this.proxy('onError'))\n })\n })\n },\n onSuccess(_cx, data) {\n this.trigger('success', data)\n },\n onError(_cx, data) {\n this.trigger('error', data)\n },\n toggleEventType(state, transition) {\n return state ? (transition ? 'show' : 'shown') : transition ? 'hide' : 'hidden'\n },\n toggleEventNamespace(state, data) {\n const name = []\n name.push(this.toggleEventType(state, data.transition))\n name.push(data.method)\n return name.join(':')\n },\n triggerEventComplete(state, data) {\n const transition = data.transition\n const name = this.toggleEventType(state, transition)\n const check = this.buttons\n .filter((i) => i.isMounted())\n .every((i) => i.getState(state, transition))\n if (check) this.trigger(name, {})\n },\n onShow(_cx, data) {\n this.trigger(this.toggleEventNamespace(true, data), {})\n this.triggerEventComplete(true, data)\n },\n onHide(_cx, data) {\n this.trigger(this.toggleEventNamespace(false, data), {})\n this.triggerEventComplete(false, data)\n },\n onPending(_cx, state) {\n this.trigger('pending', state)\n },\n})\n","import { Module } from '../module.js'\nimport { Connector } from '../connector.js'\nimport { PaymentRequestApi } from './request.js'\n\nimport {\n GooglePayLanguages,\n ButtonColorMap,\n ButtonDefaultColor,\n ButtonLabelMap,\n} from '../config.js'\n\nconst parseConfig = (config) => {\n const data = {\n payment_system: config.payment_system,\n provider: {},\n allowed: [],\n }\n const methods = config.methods || []\n const details = config.details || {}\n const options = config.options || {}\n const regex = new RegExp('//([a-z]+)\\\\.com/')\n methods.forEach(function (item) {\n const match = regex.exec(item.supportedMethods)\n if (match === null) return\n data.provider[match[1]] = {\n methods: [item],\n details: details,\n options: options,\n }\n })\n return data\n}\n\nexport const PaymentContainer = Module.extend({\n defaults: {\n element: null,\n method: 'card',\n data: {\n lang: 'en',\n },\n style: {},\n },\n init(params) {\n this.initParams(params)\n this.initEvents()\n },\n initParams(params) {\n this.params = this.utils.extend({}, this.defaults, params)\n this.element = this.utils.querySelector(this.params.element)\n this.connector = new Connector({\n target: window.parent,\n })\n this.payment = new PaymentRequestApi({\n embedded: true,\n })\n },\n extendParams(params) {\n this.utils.extend(this.params, {\n method: params.method,\n style: params.style,\n data: params.data,\n css: params.css,\n })\n },\n getGoogleLangSupport(lang, defaults) {\n return GooglePayLanguages.indexOf(lang) !== -1 ? lang : defaults\n },\n getButtonColor(color) {\n return ButtonColorMap[color] || ButtonDefaultColor\n },\n getGoogleSvg(color, lang, mode) {\n const params = {\n endpoint: 'https://www.gstatic.com/instantbuy/svg',\n color: this.getButtonColor(color),\n mode: mode || 'plain',\n lang: lang || 'en',\n }\n let format = 'url(\"{endpoint}/{color}/{mode}/{lang}.svg\")'\n if (mode === 'plain') {\n format = 'url(\"{endpoint}/{color}_gpay.svg\")'\n }\n if (mode === 'buy') {\n format = 'url(\"{endpoint}/{color}/{lang}.svg\")'\n }\n return this.utils.stringFormat(format, params)\n },\n getAppleSvg(color) {\n const format = 'url(\"svg/apple-pay-{color}.svg\")'\n const params = {\n color: this.getButtonColor(color),\n }\n return this.utils.stringFormat(format, params)\n },\n getAppleLabel(lang) {\n return ButtonLabelMap[lang || 'en']\n },\n addFrameImage() {\n const frame =\n this.utils.querySelector('iframe', this.element) || this.utils.createElement('iframe')\n const url = 'https://pay.google.com/gp/p/generate_gpay_btn_img'\n const style = this.params.style || {}\n const lang = this.getGoogleLangSupport(this.params.data.lang, 'en')\n const query = {\n buttonColor: style.color || 'black',\n browserLocale: lang,\n buttonSizeMode: 'fill',\n }\n const src = [url, this.utils.param(query)].join('?')\n this.addAttr(frame, {\n scrolling: 'no',\n frameborder: 0,\n src: src,\n })\n this.element.appendChild(frame)\n this.element.classList.remove('short', 'long')\n },\n styleButton() {\n let element = this.element\n let params = this.params\n let method = params.method\n let style = params.style || {}\n let lang = params.data.lang || 'en'\n let css = params.css || {}\n element.setAttribute('class', '')\n element.classList.add('button', 'pending')\n if (method === 'card') method = 'google'\n if (method) {\n element.classList.add(method)\n }\n if (lang) {\n element.classList.add(lang)\n }\n if (style.type) {\n element.classList.add(style.type)\n }\n if (style.mode) {\n element.classList.add(style.mode)\n }\n if (style.color) {\n element.classList.add(style.color)\n }\n if (method === 'google') {\n if (style.type === 'short') {\n style.mode = 'plain'\n }\n if (style.mode === 'default') {\n this.addFrameImage()\n } else {\n css.image = this.getGoogleSvg(style.color, lang, style.mode)\n }\n }\n if (method === 'apple') {\n css.image = this.getAppleSvg(style.color)\n css.label = this.getAppleLabel(lang, style.mode)\n }\n if (css) {\n this.utils.forEach(css, function (value, name) {\n element.style.setProperty(['--', name].join(''), value)\n })\n }\n },\n initEvents() {\n this.payment.on(\n 'details',\n this.proxy(function (cx, data) {\n this.connector.send('details', data)\n this.connector.send('complete', data)\n })\n )\n this.payment.on(\n 'reload',\n this.proxy(function (cx, data) {\n this.connector.send('reload', data)\n })\n )\n this.payment.on(\n 'error',\n this.proxy(function (cx, data) {\n this.connector.send('error', data)\n })\n )\n this.connector.on(\n 'options',\n this.proxy(function (cx, data) {\n this.extendParams(data)\n this.styleButton()\n })\n )\n this.connector.on(\n 'pay',\n this.proxy(function () {\n if (!this.element.classList.contains('pending')) {\n if (this.params.method === 'apple') {\n const payload = this.payment.payload || {}\n const apple = payload.provider['apple'] || {}\n this.connector.send('pay', {\n payment_system: payload.payment_system,\n methods: apple.methods,\n details: apple.details,\n options: apple.options,\n })\n } else {\n this.payment\n .setSupported({\n fallback: false,\n provider: ['google'],\n })\n .pay('google')\n }\n }\n })\n )\n this.connector.on(\n 'config',\n this.proxy(function (cx, data) {\n this.payment.setPayload((data = parseConfig(data)))\n if (data.payment_system && Object.keys(data.provider).length > 0) {\n this.element.classList.remove('pending')\n this.element.classList.add('ready')\n this.connector.send('show', {})\n } else {\n this.connector.send('hide', {})\n }\n })\n )\n this.connector.on(\n 'event',\n this.proxy(function (cx, data) {\n if (data.type === 'mouseenter') {\n this.element.classList.add('hover')\n }\n if (data.type === 'mouseleave') {\n this.element.classList.remove('hover')\n }\n if (data.type === 'focusin') {\n this.element.classList.add('active')\n }\n if (data.type === 'focusout') {\n this.element.classList.remove('active')\n }\n })\n )\n },\n})\n","import { Api } from '../api.js'\n\nexport const Widget = Api.extend({\n init(params) {\n this.initParams(params)\n this.initWidget()\n },\n initWidget() {\n this.initOptions(this.params.options)\n if (this.utils.isString(this.params.element)) {\n this.initElement(this.params.element)\n }\n },\n initOptions() {\n if (this.utils.isPlainObject(this.params.options)) {\n this.params.options = this.params.options || {}\n }\n },\n initElement(el) {},\n addSelectorEvent(el, ev, cb) {\n this.each(this.utils.querySelectorAll(el), function (cx, element) {\n this.addEvent(element, ev, cb)\n })\n return this\n },\n getRequestParams() {\n return {}\n },\n sendRequest(el, ev) {\n if (ev.defaultPrevented) return\n ev.preventDefault()\n this.trigger('request', this.getRequestParams(el))\n this.scope(function () {\n this.request('api.checkout.form', 'request', this.getRequestParams(el))\n .done(this.proxy('onSuccess'))\n .fail(this.proxy('onError'))\n .progress(this.proxy('onProgress'))\n })\n },\n onProgress(cx, model) {\n this.trigger('progress', model)\n },\n onSuccess(cx, model) {\n model.sendResponse()\n model.submitToMerchant()\n this.trigger('success', model)\n },\n onError(cx, model) {\n this.trigger('error', model)\n },\n})\n","import { Module } from '../module.js'\nimport { Widget } from './index.js'\n\nconst FormData = Module.extend({\n init(form) {\n this.setFormElement(form)\n },\n setFormElement(form) {\n if (this.utils.isElement(form)) {\n this.form = form\n }\n },\n getData(filter) {\n const params = this.deparam(this.serializeArray())\n return filter === true ? this.utils.cleanObject(params) : params\n },\n serializeArray() {\n const list = this.utils.toArray(this.form.elements)\n return this.utils.map(list, function (field) {\n if (field.disabled || field.name === '') return\n if (field.type.match('checkbox|radio') && !field.checked) return\n return {\n name: field.name,\n value: field.value,\n }\n })\n },\n serializeAndEncode() {\n return this.utils\n .map(this.serializeArray(), function (field) {\n return [field.name, encodeURIComponent(field.value)].join('=')\n })\n .join('&')\n },\n deparam(obj) {\n let prop,\n result = {}\n const breaker = /[^\\[\\]]+|\\[\\]$/g\n const attr = function (name, value) {\n let i,\n data = result,\n last = name.pop(),\n len = name.length\n for (i = 0; i < len; i++) {\n if (!data[name[i]]) data[name[i]] = len === i + 1 && last === '[]' ? [] : {}\n data = data[name[i]]\n }\n if (last === '[]') {\n data.push(value)\n } else {\n data[last] = value\n }\n }\n for (prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n attr(obj[prop].name.match(breaker), obj[prop].value)\n }\n }\n return result\n },\n})\n\nexport const WidgetForm = Widget.extend({\n initElement(el) {\n this.addSelectorEvent(el, 'submit', 'sendRequest')\n },\n getRequestParams(el) {\n return this.utils.extend({}, this.params.options, new FormData(el).getData())\n },\n})\n","import { Widget } from './index.js'\n\nexport const WidgetButton = Widget.extend({\n attributes: {},\n initElement(el) {\n if (this.utils.isPlainObject(this.params.attributes)) {\n this.utils.extend(this.attributes, this.params.attributes)\n }\n this.addSelectorEvent(el, 'click', 'sendRequest')\n },\n getRequestParams(el) {\n return this.utils.extend({}, this.params.options, this.getElementData(el))\n },\n getElementData(el) {\n const result = {}\n this.utils.forEach(this.attributes, function (value, key) {\n if (el.hasAttribute(key)) {\n result[value] = el.getAttribute(key)\n }\n })\n return result\n },\n})\n","import { Component } from './core/component.js'\n\nimport * as Utils from './core/utils.js'\nimport * as Config from './core/config.js'\n\nimport { Api } from './core/api.js'\nimport { Module } from './core/module.js'\nimport { Connector } from './core/connector.js'\nimport { Response } from './core/response.js'\nimport { PaymentButton } from './core/payment/button.js'\nimport { PaymentRequestApi } from './core/payment/request.js'\nimport { PaymentElement } from './core/payment/element.js'\nimport { PaymentContainer } from './core/payment/container.js'\nimport { WidgetForm } from './core/widget/form.js'\nimport { WidgetButton } from './core/widget/button.js'\nimport { Modal } from './core/modal.js'\n\nComponent.add('Api', Api)\nComponent.add('Connector', Connector)\nComponent.add('PaymentButton', PaymentButton)\nComponent.add('PaymentRequestApi', PaymentRequestApi)\nComponent.add('PaymentElement', PaymentElement)\nComponent.add('FormWidget', WidgetForm)\nComponent.add('ButtonWidget', WidgetButton)\n\nComponent.Utils = Utils\nComponent.Config = Config\nComponent.Api = Api\nComponent.Module = Module\nComponent.Modal = Modal\nComponent.Connector = Connector\nComponent.Response = Response\nComponent.PaymentRequestApi = PaymentRequestApi\nComponent.PaymentContainer = PaymentContainer\nComponent.PaymentElement = PaymentElement\nComponent.PaymentButton = PaymentButton\n\nexport {\n Utils,\n Config,\n Api,\n Module,\n Connector,\n Response,\n PaymentRequestApi,\n PaymentContainer,\n PaymentElement,\n PaymentButton,\n}\n\nexport default Component\n"],"names":["modules","instance","newModule","name","params","Error","join","Component","get","add","module","addModule","this","cx","NativePaymentRequest","digitTest","keyBreaker","paramTest","r20","rbracket","matchSymbol","prep","str","decodeURIComponent","replace","flatten","array","result","forEach","item","concat","isArray","recursiveParams","prefix","obj","next","prop","test","isPlainObject","getType","o","toString","call","match","toLowerCase","_typeof","constructor","Object","isFunction","isElement","nodeType","toArray","slice","hasProp","v","hasOwnProperty","ob","cb","p","cleanObject","length","splice","extend","_len","arguments","args","Array","_key","value","key","uuid","a","b","Math","random","getPaymentRequest","window","PaymentRequest","methods","details","options","request","id","e","PromiseWithResolvers","resolve","reject","promise","Promise","promiseResolve","promiseReject","getAppleSessionConfig","config","method","find","supportedMethods","requiredShippingContactFields","requiredBillingContactFields","requestShipping","push","requestPayerName","requestPayerEmail","requestPayerPhone","version","data","countryCode","supportedNetworks","merchantCapabilities","merchantIdentifier","lineItems","displayItems","additionalLineItems","recurringPaymentRequest","deferredPaymentRequest","currencyCode","total","amount","currency","label","buildUrl","origin","path","undefined","query","keys","filter","map","encodeURIComponent","url","separator","indexOf","getFunction","split","reduce","acc","cur","loadExternalApi","_toArray$filter","document","scripts","script","src","_slicedToArray","_PromiseWithResolvers","createElement","async","addEventListener","console","log","head","appendChild","transitionDelay","el","_getComputedStyle","getComputedStyle","transitionDuration","Number","parseFloat","attrs","setAttribute","_len2","_key2","shift","classList","className","trim","token","tag","unit","String","charAt","pair","parts","current","j","l","lastPart","pop","props","first","word","letter","toUpperCase","defaults","JSON","parse","t","r","querySelector","querySelectorAll","removeAttribute","_len3","_key3","index","parentNode","removeChild","format","expr","ApiOrigin","ApiEndpoint","gateway","element","ProxyUrl","GoogleBaseRequest","apiVersion","apiVersionMinor","allowedPaymentMethods","type","parameters","allowedAuthMethods","allowedCardNetworks","PaymentMethodsConfig","callback","PaymentsClient","environment","isReadyToPay","ApplePaySession","supportsVersion","GooglePayLanguages","ApiFrameCss","width","height","left","bottom","position","border","ButtonFrameCss","margin","padding","display","background","opacity","overflow","outline","ButtonFrameAttrs","tabindex","scrolling","frameborder","allowtransparency","allowpaymentrequest","ButtonCoverCss","top","cursor","ButtonCoverAttrs","role","ButtonContainerCss","ButtonDefaultColor","ButtonColorMap","dark","light","black","white","ButtonLabelMap","ar","bg","ca","zh","hr","cs","da","nl","en","et","es","fi","fr","de","it","ja","ko","ms","no","pl","pt","ru","sr","sk","sl","sv","th","tr","uk","Deferred","resolveCallbacks","rejectCallbacks","notifyCallbacks","status","resultContext","resultArgs","chainArgs","executeCallback","context","callbacks","list","save","isArgs","from","execute","apply","then","done","isResolved","fail","isRejected","progress","isProgress","always","object","state","isPending","clear","resolveWith","rejectWith","notifyWith","notify","init","fnTest","ClassObject","superMethod","parent","temp","_super","prototype","proxy","fn","Class","target","proto","assign","Event","events","empty","on","off","i","trigger","Module","utils","Utils","getListener","_listener_","destroy","_proxy_cache_","isString","each","addAttr","k","addCss","addCssProperty","style","idx","cssText","RegExp","substring","addEvent","ev","removeEvent","removeEventListener","prepareForm","form","action","Connector","ns","uniqueId","signature","setTarget","setOrigin","create","getUID","router","response","source","send","stringify","targetOrigin","delegate","postMessage","messages","modalHeader","modalLinkLabel","Template","view","Views","render","Modal","checkout","model","template","body","initModal","initConnector","getRandomNumber","modal","innerHTML","iframe","initScrollbar","submitToIframe","submit","measureScrollbar","scrollDiv","removeElement","offsetWidth","clientWidth","checkScrollbar","documentElementRect","fullWindowWidth","innerWidth","documentElement","getBoundingClientRect","right","abs","bodyIsOverflowing","scrollbarWidth","bodyPad","parseInt","getStyle","originalBodyPad","paddingRight","originalOverflow","resetScrollbar","round","selector","closeModal","preventDefault","removeModal","submitForm","connector","contentWindow","onResponse","sendResponse","uid","Model","eachProps","alt","attr","len","serialize","Response","stringFormat","string","that","setConnector","setUID","formDataProxy","location","formDataSubmit","inProgress","readyToSubmit","waitForResponse","needVerifyCode","redirectUrl","redirectToUrl","submitToMerchant","ready","prepare3dsData","frame","TermUrl","param","waitOn3dsDecline","js_wait_on_3ds_decline","js_wait_on_3ds_decline_duration","submit3dsForm","supportedMethod","Api","endpoint","container","initParams","extendParams","iframeDeferred","scope","domReady","createFrame","readyState","defer","responseModel","firstChild","insertBefore","onOpenModal","xhr","onCloseModal","onLoadConnector","supportedMethodsDeferred","PaymentRequestApi","payment_system","fallback","supported","provider","payload","getSupportedMethods","_this","promises","all","setSupported","setPayload","setMerchant","merchant","getProviderNames","_this2","allowed","setBeforeCallback","beforeCallback","before","setAfterCallback","afterCallback","after","setApi","api","getProviderPayload","isMethodSupported","isFallbackMethod","success","failure","session","update","setPending","_cx","pendingState","withApplePay","sessionConfig","onvalidatemerchant","event","validationURL","domain","host","merchant_id","completeMerchantValidation","error","code","message","oncancel","onpaymentauthorized","completePayment","STATUS_SUCCESS","payment","begin","withGooglePay","google","payments","loadPaymentData","paymentData","pay","PaymentElement","appendTo","mode","color","lang","transition","pending","mounted","initElement","timeout","timeoutMap","clearTimeout","setTimeout","getElementUrl","getElementOptions","iframeLoaded","button","class","errorConnector","onloadConnector","onEvent","onClick","onClickDone","onClickFail","onSupported","includes","onPayload","onPending","pointerEvents","initEvents","setPaymentRequest","hide","mount","show","notMounted","isMounted","unmount","contains","transitionValue","getTimeoutValue","sort","getState","triggerState","showCallback","cssUnit","hideCallback","afterTransition","PaymentButton","elements","initApi","initPaymentRequestApi","initElements","initData","self","buttons","gap","onDetails","onSuccess","onError","toggleEventType","toggleEventNamespace","triggerEventComplete","every","onShow","onHide","PaymentContainer","embedded","css","getGoogleLangSupport","getButtonColor","getGoogleSvg","getAppleSvg","getAppleLabel","addFrameImage","buttonColor","browserLocale","buttonSizeMode","remove","styleButton","image","setProperty","apple","regex","exec","parseConfig","Widget","initWidget","initOptions","addSelectorEvent","getRequestParams","sendRequest","defaultPrevented","onProgress","FormData","setFormElement","getData","deparam","serializeArray","field","disabled","checked","serializeAndEncode","breaker","last","WidgetForm","WidgetButton","attributes","getElementData","hasAttribute","getAttribute","Config"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkout.js","sources":["../../src/core/component.js","../../src/core/utils.js","../../src/core/config.js","../../src/core/deferred.js","../../src/core/class.js","../../src/core/event.js","../../src/core/module.js","../../src/core/connector.js","../../src/views/template/acs.js","../../src/views/template/acs_styles.js","../../src/core/template.js","../../src/core/modal.js","../../src/core/model.js","../../src/core/response.js","../../src/core/api.js","../../src/core/payment/request.js","../../src/core/payment/element.js","../../src/core/payment/button.js","../../src/core/payment/container.js","../../src/core/widget/index.js","../../src/core/widget/form.js","../../src/core/widget/button.js","../../src/module.js"],"sourcesContent":["/**\n * Modules registry\n * @type {Object<string,any>}\n */\nconst modules = {}\n/**\n * @type {Object<string,any>}\n */\nconst instance = {}\n/**\n * @param {string} name\n * @param {Object} [params]\n * @returns {{}}\n */\nconst newModule = function (name, params) {\n if (!modules[name]) {\n throw Error(['module is undefined', name].join(' '))\n }\n return new modules[name](params || {})\n}\n\nconst addModule = function (name, module) {\n if (modules[name]) {\n throw Error(['module already added', name].join(' '))\n }\n modules[name] = module\n}\n\nexport function Component(name, params) {\n if (instance[name]) return instance[name]\n return (instance[name] = newModule(name, params))\n}\n\nComponent.get = function (name, params) {\n return newModule(name, params)\n}\n\nComponent.add = function (name, module) {\n addModule(name, module)\n return this\n}\n","const digitTest = /^\\d+$/\nconst keyBreaker = /([^\\[\\]]+)|(\\[\\])/g\nconst paramTest = /([^?#]*)(#.*)?$/\nconst r20 = /%20/g\nconst rbracket = /\\[\\]$/\nconst matchSymbol = /\\s([a-zA-Z]+)/\n\nconst prep = (str) => {\n return decodeURIComponent(str.replace(/\\+/g, ' '))\n}\nconst flatten = (array) => {\n let result = []\n forEach(array, (item) => {\n result = result.concat(isArray(item) ? flatten(item) : item)\n })\n return result\n}\n\nconst recursiveParams = (prefix, obj, next) => {\n if (isArray(obj)) {\n forEach(obj, (item, prop) => {\n if (rbracket.test(prefix)) {\n next(prefix, item)\n } else {\n recursiveParams(prefix + '[' + (isPlainObject(obj) ? prop : '') + ']', item, next)\n }\n })\n } else if (isPlainObject(obj)) {\n forEach(obj, (item, prop) => {\n recursiveParams(prefix + '[' + prop + ']', item, next)\n })\n } else {\n next(prefix, obj)\n }\n}\n\nexport const getType = (o) => {\n return {}.toString.call(o).match(matchSymbol)[1].toLowerCase()\n}\nexport const isPlainObject = (o) => {\n return !!o && typeof o === 'object' && o.constructor === Object\n}\n\nexport const isFunction = (o) => {\n return getType(o) === 'function'\n}\n\nexport const isArray = (o) => {\n return getType(o) === 'array'\n}\n\nexport const isBoolean = (o) => {\n return typeof o === 'boolean'\n}\n\nexport const isElement = (o) => {\n return o && o.nodeType === 1\n}\n\nexport const toArray = (o) => {\n return [].slice.call(o)\n}\n\nexport const hasProp = (o, v) => {\n return o && o.hasOwnProperty(v)\n}\n\nexport const forEach = (ob, cb, cx) => {\n for (let p in ob) if (hasProp(ob, p)) cb.call(cx || null, ob[p], p)\n}\n\nexport const cleanObject = (ob) => {\n for (let p in ob) {\n if (hasProp(ob, p)) {\n if (ob[p].length === 0) {\n if (isArray(ob)) ob.splice(p, 1)\n if (isPlainObject(ob)) delete ob[p]\n } else if (isPlainObject(ob[p])) {\n cleanObject(ob[p])\n }\n }\n }\n return ob\n}\n\nexport const extend = (obj, ...args) => {\n forEach(args, function (o) {\n if (o !== null) {\n forEach(o, function (value, key) {\n if (isPlainObject(value)) {\n obj[key] = extend(obj[key] || {}, value)\n } else {\n obj[key] = value\n }\n })\n }\n })\n return obj\n}\n\nexport const uuid = () => {\n let a = 0,\n b = ''\n while (a++ < 36) {\n if ((a * 51) & 52) {\n b += (a ^ 15 ? 8 ^ (Math.random() * (a ^ 20 ? 16 : 4)) : 4).toString(16)\n } else {\n b += '-'\n }\n }\n return b\n}\n\nexport const isObject = (o) => {\n return getType(o) === 'object'\n}\n\nexport const isRegexp = (o) => {\n return getType(o) === 'regexp'\n}\n\nexport const isArguments = (o) => {\n return getType(o) === 'arguments'\n}\n\nexport const isError = (o) => {\n return getType(o) === 'error'\n}\n\nexport const isDate = (o) => {\n return getType(o) === 'date'\n}\n\nexport const isString = (o) => {\n return getType(o) === 'string'\n}\n\nexport const isNumber = (o) => {\n return getType(o) === 'number'\n}\n\nexport const map = (ob, cb, cx) => {\n let p,\n t,\n r = []\n for (p in ob) if (hasProp(ob, p)) if ((t = cb.call(cx || null, ob[p], p)) !== undefined) r[p] = t\n return r\n}\n\nexport const querySelectorAll = (o, p) => {\n return toArray((p || document).querySelectorAll(o))\n}\n\nexport const querySelector = (o, p) => {\n return (p || document).querySelector(o)\n}\n\nexport const deparam = (params) => {\n const data = {}\n if (params.charAt(0) === '?') params = params.slice(1)\n if (params && paramTest.test(params)) {\n forEach(params.split('&'), (pair) => {\n let parts = pair.split('='),\n key = prep(parts.shift()),\n value = prep(parts.join('=')),\n current = data\n if (key) {\n parts = key.match(keyBreaker)\n for (let j = 0, l = parts.length - 1; j < l; j++) {\n if (!current[parts[j]]) {\n current[parts[j]] = digitTest.test(parts[j + 1]) || parts[j + 1] === '[]' ? [] : {}\n }\n current = current[parts[j]]\n }\n const lastPart = parts.pop()\n if (lastPart === '[]') {\n current.push(value)\n } else {\n current[lastPart] = value\n }\n }\n })\n }\n return data\n}\n\nexport const param = (obj) => {\n const result = []\n forEach(obj, (item, prop) => {\n recursiveParams(prop, item, (key, value) => {\n value = value == null ? '' : value\n result.push([encodeURIComponent(key), encodeURIComponent(value)].join('='))\n })\n })\n return result.join('&').replace(r20, '+')\n}\n\nexport const removeElement = (el) => {\n el.parentNode.removeChild(el)\n}\n\nexport const createElement = (tag) => {\n return document.createElement(tag)\n}\n\nexport const addClass = (...args) => {\n const el = args.shift()\n if (isElement(el) === false) return\n const classList = el.className.trim().split(/\\s+/)\n const tokens = flatten(args.map((item) => item.trim().split(/\\s+/)))\n tokens.forEach((token) => {\n if (token && !~classList.indexOf(token)) {\n classList.push(token)\n }\n })\n el.className = classList.join(' ').trim()\n}\n\nexport const removeClass = (...args) => {\n const el = args.shift()\n if (isElement(el) === false) return\n const classList = el.className.trim().split(/\\s+/)\n const tokens = flatten(args.map((item) => item.trim().split(/\\s+/)))\n tokens.forEach((token) => {\n if (token) {\n const index = classList.indexOf(token)\n if (!!~index) {\n classList.splice(index, 1)\n }\n }\n })\n el.className = classList.join(' ').trim()\n}\n\nexport const removeAttr = (el, attrs) => {\n if (isElement(el) === false) return false\n if (isPlainObject(attrs)) {\n forEach(attrs, (value) => {\n el.removeAttribute(value)\n })\n }\n}\n\nexport const addAttr = (el, attrs) => {\n if (isElement(el) === false) return false\n if (isPlainObject(attrs)) {\n forEach(attrs, (value, name) => {\n el.setAttribute(name, value)\n })\n }\n}\n\nexport const getStyle = (el, prop, getComputedStyle) => {\n getComputedStyle = window.getComputedStyle\n return (getComputedStyle ? getComputedStyle(el) : el['currentStyle'])[\n prop.replace(/-(\\w)/gi, function (word, letter) {\n return letter.toUpperCase()\n })\n ]\n}\n\nexport const getPath = (path) => {\n const props = path.split('.')\n const first = props.shift()\n let value = null\n if (hasProp(window, first)) {\n value = window[first]\n forEach(props, (name) => {\n value = hasProp(value, name) ? value[name] : null\n })\n }\n return value\n}\n\nexport const stringFormat = (format, params, expr) => {\n return (format || '').replace(expr || /{(.+?)}/g, (match, prop) => {\n return params[prop] || match\n })\n}\n\nexport const cssUnit = (value, unit) => {\n return String(value || 0)\n .concat(unit || '')\n .concat(' !important')\n}\n/**\n * @function\n * @type {function(*, *, *)}\n */\nexport const getPaymentRequest = ((cx) => {\n let NativePaymentRequest\n if (hasProp(cx, 'PaymentRequest') && isFunction(cx.PaymentRequest)) {\n NativePaymentRequest = cx.PaymentRequest\n }\n return (methods, details, options) => {\n let request = null\n details = details || {}\n details.id = uuid()\n options = options || {}\n if (NativePaymentRequest) {\n try {\n request = new NativePaymentRequest(methods, details, options)\n } catch (e) {\n request = null\n }\n }\n return request\n }\n})(window)\n\nexport const jsonParse = (value, defaults) => {\n try {\n return JSON.parse(value)\n } catch (e) {\n return defaults\n }\n}\n\nexport const PromiseWithResolvers = () => {\n let resolve\n let reject\n const promise = new Promise((promiseResolve, promiseReject) => {\n resolve = promiseResolve\n reject = promiseReject\n })\n return { promise, resolve, reject }\n}\n\n/**\n * @typedef PaymentRequestMethod\n * @property {{[string]:any}} data\n */\n\n/**\n * @typedef PaymentRequestOptions\n * @property {boolean} [requestPayerEmail]\n * @property {boolean} [requestPayerPhone]\n * @property {boolean} [requestPayerName]\n * @property {boolean} [requestShipping]\n */\n\n/**\n * @typedef PaymentRequestConfig\n * @property [PaymentRequestMethod] methods\n * @property {{[string]:any}} options\n */\n\n/**\n * @param {PaymentRequestConfig} config\n */\nexport const getAppleSessionConfig = (config) => {\n const { methods, details, options } = config\n const method = methods.find((item) => item.supportedMethods === 'https://apple.com/apple-pay')\n const requiredShippingContactFields = []\n const requiredBillingContactFields = []\n if (options.requestShipping) requiredBillingContactFields.push('postalAddress')\n if (options.requestPayerName) requiredShippingContactFields.push('name')\n if (options.requestPayerEmail) requiredShippingContactFields.push('email')\n if (options.requestPayerPhone) requiredShippingContactFields.push('phone')\n return {\n version: method.data.version,\n countryCode: method.data.countryCode,\n supportedNetworks: method.data.supportedNetworks,\n merchantCapabilities: method.data.merchantCapabilities,\n merchantIdentifier: method.data.merchantIdentifier,\n lineItems: method.data.lineItems || details.displayItems,\n additionalLineItems: method.data.additionalLineItems,\n recurringPaymentRequest: method.data.recurringPaymentRequest,\n deferredPaymentRequest: method.data.deferredPaymentRequest,\n //\n currencyCode: method.data.currencyCode || details.total.amount.currency,\n total: {\n label: details.total.label,\n amount: details.total.amount.value,\n },\n //\n requiredBillingContactFields,\n requiredShippingContactFields,\n }\n}\n\nexport const buildUrl = (origin, path = '', params = {}) => {\n const query = Object.keys(params)\n .filter(function (key) {\n return params[key] !== undefined && params[key] !== null\n })\n .map(function (key) {\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`\n })\n .join('&')\n const url = [origin, path].join('')\n const separator = !!~url.indexOf('?') ? '&' : '?'\n return query ? `${url}${separator}${query}` : url\n}\n\nexport const getFunction = (path) => {\n const props = path.split('.')\n const value = props.reduce((acc, cur) => {\n if (acc && acc.hasOwnProperty(cur)) {\n acc = acc[cur]\n return acc\n }\n return null\n }, window)\n return isFunction(value) ? value : value\n}\n\nexport const loadExternalApi = (url, path) => {\n const [existScript] = toArray(document.scripts).filter((script) => script.src === url)\n if (existScript) return Promise.resolve(getFunction(path))\n const { promise, resolve } = PromiseWithResolvers()\n const script = document.createElement('script')\n script.async = true\n script.src = url\n script.addEventListener('load', () => {\n const value = getFunction(path)\n console.log('api loading', 'success', url)\n resolve(value)\n })\n script.addEventListener('error', (e) => {\n const value = getFunction(path)\n console.log('api loading', 'error', url)\n resolve(value)\n })\n document.head.appendChild(script)\n return promise\n}\n\nexport const transitionDelay = (el) => {\n let { transitionDelay, transitionDuration } = getComputedStyle(el)\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * 1000\n}\n","export const ApiOrigin = 'https://pay.flitt.com'\n\nexport const ApiEndpoint = {\n gateway: '/latest/checkout-v2/index.html',\n element: '/latest/checkout-v2/button/element.html',\n}\n\nexport const ProxyUrl = 'http://secure-redirect.cloudipsp.com/submit/'\n\nexport const GooglePayApi = 'https://pay.google.com/gp/p/js/pay.js'\n\nexport const GoogleBaseRequest = {\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: ['AMEX', 'DISCOVER', 'INTERAC', 'JCB', 'MASTERCARD', 'VISA'],\n },\n },\n ],\n}\n\nexport const PaymentMethodsConfig = [\n {\n url: 'https://pay.google.com/gp/p/js/pay.js',\n name: 'google',\n path: 'google.payments.api.PaymentsClient',\n callback(PaymentsClient) {\n if (PaymentsClient) {\n return new PaymentsClient({ environment: 'TEST' })\n .isReadyToPay(GoogleBaseRequest)\n .catch((e) => {\n console.log(e)\n return false\n })\n }\n return false\n },\n },\n {\n url: 'https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js',\n name: 'apple',\n path: 'ApplePaySession',\n callback(ApplePaySession) {\n if (ApplePaySession) {\n return ApplePaySession.supportsVersion(3)\n }\n return false\n },\n },\n]\n\nexport const GooglePayLanguages = [\n 'ar',\n 'bg',\n 'ca',\n 'zh',\n 'hr',\n 'cs',\n 'da',\n 'nl',\n 'en',\n 'et',\n 'fi',\n 'fr',\n 'de',\n 'el',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'ms',\n 'no',\n 'pl',\n 'pt',\n 'ru',\n 'sr',\n 'sk',\n 'sl',\n 'es',\n 'sv',\n 'th',\n 'tr',\n 'uk',\n]\n\nexport const PaymentRequestDetails = {\n total: {\n label: 'Total',\n amount: {\n currency: 'USD',\n value: '0.00',\n },\n },\n}\n\nexport const ApiFrameCss = {\n width: '1px !important',\n height: '1px !important',\n left: '1px !important',\n bottom: '1px !important',\n position: 'fixed !important',\n border: '0px !important',\n}\n\nexport const ButtonFrameCss = {\n border: 'none !important',\n margin: '0 !important',\n padding: '0 !important',\n display: 'block !important',\n width: '1px !important',\n 'min-width': '100% !important',\n background: 'transparent !important',\n position: 'relative !important',\n opacity: '0 !important',\n overflow: 'hidden !important',\n height: '100% !important',\n outline: 'none !important',\n 'color-scheme': 'light',\n 'z-index': '1 !important',\n}\n\nexport const ButtonFrameAttrs = {\n tabindex: '-1',\n scrolling: 'no',\n frameborder: 0,\n allowtransparency: true,\n allowpaymentrequest: true,\n}\n\nexport const ButtonCoverCss = {\n 'z-index': '2 !important',\n position: 'absolute !important',\n border: 'none !important',\n background: 'transparent !important',\n left: '0 !important',\n top: '0 !important',\n cursor: 'pointer !important',\n outline: 'none !important',\n width: '100% !important',\n height: '100% !important',\n}\n\nexport const ButtonCoverAttrs = {\n role: 'button',\n 'aria-pressed': 'false',\n}\n\nexport const ButtonContainerCss = {\n border: '0 !important',\n margin: '0 !important',\n padding: '0 !important',\n display: 'block !important',\n background: 'transparent !important',\n 'user-select': 'none !important',\n overflow: 'hidden !important',\n position: 'relative !important',\n opacity: '1 !important',\n height: '0 !important',\n width: '100% !important',\n outline: 'none !important',\n}\n\nexport const ButtonDefaultColor = 'dark'\n\nexport const ButtonColorMap = {\n dark: 'dark',\n light: 'light',\n black: 'dark',\n white: 'light',\n}\n\nexport const ButtonLabelMap = {\n ar: '',\n bg: '',\n ca: '',\n zh: '',\n hr: '',\n cs: '',\n da: '',\n nl: '',\n en: 'Pay with',\n et: '',\n es: 'Comprar con',\n el: '',\n fi: '',\n fr: 'Acheter avec',\n de: 'Zahlen über',\n id: '',\n it: 'Acquista con',\n ja: '',\n ko: '',\n ms: '',\n no: '',\n pl: 'Zapłać przez',\n pt: '',\n ru: 'Оплатить через',\n sr: '',\n sk: 'Zaplatiť cez',\n sl: '',\n sv: '',\n th: '',\n tr: '',\n uk: 'Оплатити через',\n}\n","import { isFunction, forEach } from './utils.js'\n\nconst PENDING = 0\nconst RESOLVED = 1\nconst REJECTED = 2\nconst PROGRESS = 3\n\nexport function Deferred() {\n const resolveCallbacks = []\n const rejectCallbacks = []\n const notifyCallbacks = []\n let status = PENDING\n let resultContext = undefined\n let resultArgs = null\n let chainArgs = null\n const executeCallback = (context, args, callbacks) => {\n const list = [].concat(callbacks)\n const save = (chainArgs, isArgs) => {\n if (isArgs) {\n resultArgs = Array.from(chainArgs)\n } else {\n resultArgs = [chainArgs]\n }\n }\n const execute = () => {\n const item = list.shift()\n if (item) {\n chainArgs = item.apply(resultContext, resultArgs)\n if (chainArgs !== undefined) {\n if (chainArgs && chainArgs.then) {\n chainArgs.then((...chainArgs) => {\n save(chainArgs, true)\n execute()\n })\n } else {\n save(chainArgs)\n execute()\n }\n } else {\n execute()\n }\n }\n }\n resultContext = context\n resultArgs = args\n execute()\n }\n /**\n * @lends Deferred.prototype\n */\n const promise = {\n done(callback) {\n if (isFunction(callback)) {\n if (this.isResolved()) {\n callback.apply(resultContext, resultArgs)\n } else {\n resolveCallbacks.push(callback)\n }\n }\n return this\n },\n fail(callback) {\n if (isFunction(callback)) {\n if (this.isRejected()) {\n callback.apply(resultContext, resultArgs)\n } else {\n rejectCallbacks.push(callback)\n }\n }\n return this\n },\n progress(callback) {\n if (isFunction(callback)) {\n if (this.isProgress()) {\n callback.apply(resultContext, resultArgs)\n } else {\n notifyCallbacks.push(callback)\n }\n }\n return this\n },\n always(callback) {\n return this.done(callback).fail(callback)\n },\n then(resolve, reject, progress) {\n if (isFunction(resolve)) {\n this.done(resolve)\n }\n if (isFunction(reject)) {\n this.fail(reject)\n }\n if (isFunction(progress)) {\n this.progress(reject)\n }\n return this\n },\n promise(object) {\n if (object === null) {\n return promise\n }\n forEach(promise, (item, prop) => {\n object[prop] = item\n })\n return object\n },\n state: function () {\n return status\n },\n isPending() {\n return status === PENDING\n },\n isRejected() {\n return status === REJECTED\n },\n isResolved() {\n return status === RESOLVED\n },\n isProgress() {\n return status === PROGRESS\n },\n clear() {\n if (this.isPending()) {\n resolveCallbacks.length = 0\n rejectCallbacks.length = 0\n notifyCallbacks.length = 0\n }\n return this\n },\n resolveWith(context, args) {\n if (this.isPending()) {\n status = RESOLVED\n executeCallback(context, args, resolveCallbacks)\n }\n return this\n },\n rejectWith(context, args) {\n if (this.isPending()) {\n status = REJECTED\n executeCallback(context, args, rejectCallbacks)\n }\n return this\n },\n notifyWith(context, args) {\n if (this.isPending()) {\n status = PROGRESS\n executeCallback(context, args, notifyCallbacks)\n status = PENDING\n }\n return this\n },\n resolve() {\n return this.resolveWith(this, Array.from(arguments))\n },\n reject() {\n return this.rejectWith(this, Array.from(arguments))\n },\n notify() {\n return this.notifyWith(this, Array.from(arguments))\n },\n }\n return promise\n}\n","let init = false\nconst fnTest = /xyz/.test(\n function () {\n return 'xyz'\n }.toString()\n)\n ? /\\b_super\\b/\n : /.*/\n\nexport function ClassObject() {}\n\nClassObject.prototype._super = function () {}\n\nClassObject.prototype.instance = function (params) {\n return new this.constructor(params)\n}\n\nClassObject.prototype.proxy = function (fn) {\n fn = typeof fn == 'string' ? this[fn] : fn\n return (function (cx, cb) {\n return function () {\n return cb.apply(cx, [this].concat(Array.prototype.slice.call(arguments)))\n }\n })(this, fn)\n}\n\nfunction superMethod(parent, name, method) {\n return function () {\n let temp = this._super,\n result\n this._super = parent[name]\n result = method.apply(this, arguments)\n this._super = temp\n return result\n }\n}\n\nfunction assign(target, instance) {\n let prop,\n proto,\n parent = target.prototype\n init = true\n proto = new target()\n init = false\n for (prop in instance) {\n if (instance.hasOwnProperty(prop)) {\n if (\n typeof parent[prop] == 'function' &&\n typeof instance[prop] == 'function' &&\n fnTest.test(instance[prop])\n ) {\n proto[prop] = superMethod(parent, prop, instance[prop])\n } else {\n proto[prop] = instance[prop]\n }\n }\n }\n return proto\n}\n\nClassObject.extend = function extend(instance) {\n function Class() {\n if (!init && this) this['init'].apply(this, arguments)\n }\n Class.prototype = assign(this, instance)\n Class.prototype.constructor = Class\n Class.extend = extend\n return Class\n}\n","import { ClassObject } from './class.js'\n\nexport const Event = ClassObject.extend({\n init() {\n this.events = {}\n this.empty = []\n },\n on(type, callback) {\n ;(this.events[type] = this.events[type] || []).push(callback)\n return this\n },\n off(type, callback) {\n type || (this.events = {})\n let list = this.events[type] || this.empty,\n i = (list.length = callback ? list.length : 0)\n while (i--) callback === list[i] && list.splice(i, 1)\n return this\n },\n trigger(type) {\n let e = this.events[type] || this.empty,\n list = e.length > 0 ? e.slice(0, e.length) : e,\n i = 0,\n j\n while ((j = list[i++])) j.apply(j, this.empty.slice.call(arguments, 1))\n return this\n },\n})\n","import { ClassObject } from './class.js'\nimport { Event } from './event.js'\nimport * as Utils from './utils.js'\n\nexport const Module = ClassObject.extend({\n utils: Utils,\n getListener() {\n if (!this._listener_) this._listener_ = new Event()\n return this._listener_\n },\n destroy() {\n this.off()\n },\n on(type, callback) {\n this.getListener().on(type, callback)\n return this\n },\n off(type, callback) {\n this.getListener().off(type, callback)\n return this\n },\n proxy(fn) {\n if (!this._proxy_cache_) this._proxy_cache_ = {}\n if (this.utils.isString(fn)) {\n if (!this._proxy_cache_[fn]) {\n this._proxy_cache_[fn] = this._super(fn)\n }\n return this._proxy_cache_[fn]\n }\n return this._super(fn)\n },\n trigger() {\n this.getListener().trigger.apply(this.getListener(), arguments)\n return this\n },\n each(ob, cb) {\n this.utils.forEach(ob, this.proxy(cb))\n },\n addAttr(el, ob) {\n if (!this.utils.isElement(el)) return false\n this.utils.forEach(ob, function (v, k) {\n el.setAttribute(k, v)\n })\n },\n addCss(el, ob) {\n if (!this.utils.isElement(el)) return false\n this.utils.forEach(\n ob,\n function (v, k) {\n this.addCssProperty(el, k, v)\n },\n this\n )\n },\n addCssProperty(el, style, value) {\n let result = el.style.cssText.match(\n new RegExp('(?:[;\\\\s]|^)(' + style.replace('-', '\\\\-') + '\\\\s*:(.*?)(;|$))')\n ),\n idx\n if (result) {\n idx = result.index + result[0].indexOf(result[1])\n el.style.cssText =\n el.style.cssText.substring(0, idx) +\n style +\n ': ' +\n value +\n ';' +\n el.style.cssText.substring(idx + result[1].length)\n } else {\n el.style.cssText += ' ' + style + ': ' + value + ';'\n }\n },\n addEvent(el, ev, cb) {\n if (!el || !ev || !cb) return false\n cb = this.proxy(cb)\n if (el.addEventListener) el.addEventListener(ev, cb)\n else if (el['attachEvent']) el['attachEvent']('on' + ev, cb)\n },\n removeEvent(el, ev, cb) {\n if (!el || !ev || !cb) return false\n cb = this.proxy(cb)\n if (el.removeEventListener) el.removeEventListener(ev, cb, false)\n else if (el['detachEvent']) el['detachEvent']('on' + ev, cb)\n },\n prepareForm(url, data, target, method) {\n const form = this.utils.createElement('form')\n this.addAttr(form, {\n action: url,\n target: target || '_self',\n method: method || 'POST',\n })\n this.addCss(form, {\n display: 'none',\n })\n this.utils.forEach(\n data,\n function (v, k, el) {\n el = this.utils.createElement('input')\n el.type = 'hidden'\n el.name = k\n el.value = v\n form.appendChild(el)\n },\n this\n )\n return form\n },\n})\n","import { Module } from './module.js'\n\nexport const Connector = Module.extend({\n ns: 'crossDomain',\n origin: '*',\n uniqueId: 1,\n signature: null,\n init(params) {\n this.setTarget(params.target)\n this.setOrigin(params.origin)\n this.create()\n },\n create() {\n this.addEvent(window, 'message', 'router')\n },\n setOrigin(origin) {\n this.origin = origin || '*'\n },\n setTarget(target) {\n this.target = target\n return this\n },\n getUID() {\n return ++this.uniqueId\n },\n destroy() {\n this.removeEvent(window, 'message', 'router')\n this._super()\n },\n router(window, ev, response) {\n if (this.target !== ev.source) return false\n try {\n response = JSON.parse(ev.data)\n } catch (e) {}\n if (response && response.action && response.data) {\n this.trigger(response.action, response.data)\n }\n },\n send(action, data, request, options) {\n if (!this.target) {\n return\n }\n request = JSON.stringify({\n action: action,\n data: data,\n })\n options = {\n targetOrigin: this.origin,\n delegate: 'payment',\n }\n try {\n this.target.postMessage(request, options)\n } catch (e) {\n this.target.postMessage(request, this.origin, [])\n }\n },\n})\n","import styles from './acs_styles.js'\n\nexport default (data) => `\n${styles(data)}\n<div class=\"flitt-modal-wrapper\">\n <div class=\"flitt-modal\">\n <div class=\"flitt-modal-header\">\n <a href=\"javascript:void(0)\" class=\"flitt-modal-close\"></a>\n <div class=\"flitt-modal-title\">\n ${data.messages.modalHeader}\n <a href='javascript:void(0)'>${data.messages.modalLinkLabel}</a>\n </div>\n </div>\n <div class=\"flitt-modal-content\">\n <iframe src=\"about:blank\" class=\"flitt-modal-iframe\" frameborder=\"0\" allowtransparency=\"true\"></iframe>\n </div>\n </div>\n</div>\n`\n","export default (data) => `\n<style>\n .flitt-modal {\n box-sizing: border-box;\n margin: 100px auto;\n max-width: 680px;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n }\n\n @media (max-width: 850px) {\n .flitt-modal {\n margin: 50px auto;\n }\n }\n\n @media (max-width: 695px) {\n .flitt-modal {\n max-width: 100%;\n margin: 5px;\n }\n }\n\n .flitt-modal-wrapper {\n box-sizing: border-box;\n overflow: auto;\n position: fixed;\n z-index: 99999;\n left: 0;\n bottom: 0;\n top: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n .flitt-modal-header {\n box-sizing: border-box;\n background-color: #fafafa;\n height: 50px;\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n .flitt-modal-close {\n box-sizing: border-box;\n float: right;\n overflow: hidden;\n height: 50px;\n text-decoration: none;\n border-top-right-radius: 5px;\n color: #949494;\n }\n\n .flitt-modal-close:hover, .flitt-modal-close:focus, .flitt-modal-close:active {\n text-decoration: none;\n color: #646464;\n }\n\n .flitt-modal-close:before {\n content: \"×\";\n font-size: 50px;\n line-height: 50px;\n padding: 0 10px;\n }\n\n .flitt-modal-title {\n box-sizing: border-box;\n border-top-left-radius: 5px;\n line-height: 20px;\n height: 50px;\n padding: 5px 15px;\n font-size: 12px;\n display: table-cell;\n vertical-align: middle;\n }\n .flitt-modal-content {\n box-sizing: border-box;\n border-bottom-left-radius: 5px;\n min-height: 650px;\n }\n .flitt-modal-iframe {\n overflow-x: hidden;\n border: 0;\n display: block;\n width: 100%;\n height: 750px;\n }\n</style>\n`\n","import { ClassObject } from './class.js'\n\nimport * as Views from '../views/index.js'\n\nfunction empty(name) {\n return function (data) {\n return ['template', name, 'not found'].join(' ')\n }\n}\n\nexport const Template = ClassObject.extend({\n init(name) {\n this.view = Views[name] || empty(name)\n },\n render(data) {\n return this.view(data)\n },\n})\n","import { Module } from './module.js'\nimport { Connector } from './connector.js'\nimport { Template } from './template.js'\n\nexport const Modal = Module.extend({\n init(data) {\n this.checkout = data.checkout\n this.model = data.model || {}\n this.messages = data.checkout.params.messages || {}\n this.template = new Template('acs')\n this.body = this.utils.querySelector('body')\n this.initModal()\n this.initConnector()\n },\n initModal() {\n this.name = ['modal-iframe', this.getRandomNumber()].join('-')\n this.modal = this.utils.createElement('div')\n this.modal.innerHTML = this.template.render({\n model: this.model,\n messages: this.messages,\n })\n this.iframe = this.find('.flitt-modal-iframe')\n this.addAttr(this.iframe, { name: this.name, id: this.name })\n if (this.model['send_data']) {\n this.form = this.prepareForm(this.model['url'], this.model['send_data'], this.name)\n this.modal.appendChild(this.form)\n } else {\n this.iframe.src = this.model['url']\n }\n this.addEvent(this.find('.flitt-modal-close'), 'click', 'closeModal')\n this.addEvent(this.find('.flitt-modal-title a'), 'click', 'submitForm')\n this.initScrollbar()\n this.submitToIframe()\n },\n submitToIframe() {\n if (this.modal) {\n this.body.appendChild(this.modal)\n }\n if (this.form) {\n this.form.submit()\n }\n },\n measureScrollbar() {\n const scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.body.appendChild(scrollDiv)\n this.utils.removeElement(scrollDiv)\n return scrollDiv.offsetWidth - scrollDiv.clientWidth\n },\n checkScrollbar() {\n let documentElementRect\n let fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) {\n documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n },\n initScrollbar() {\n this.checkScrollbar()\n this.bodyPad = parseInt(this.utils.getStyle(this.body, 'padding-right') || 0, 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n this.originalOverflow = document.body.style.overflow || ''\n if (this.bodyIsOverflowing) {\n this.addCss(this.body, {\n paddingRight: [this.bodyPad + this.scrollbarWidth, 'px'].join(''),\n overflow: 'hidden',\n })\n }\n },\n resetScrollbar() {\n this.addCss(this.body, {\n paddingRight: this.originalBodyPad ? [this.originalBodyPad, 'px'].join('') : '',\n overflow: this.originalOverflow,\n })\n },\n getRandomNumber() {\n return Math.round(Math.random() * 1000000000)\n },\n find(selector) {\n return this.utils.querySelector(selector, this.modal)\n },\n closeModal(el, ev) {\n ev.preventDefault()\n this.trigger('close', this.data)\n this.removeModal()\n },\n submitForm(el, ev) {\n ev.preventDefault()\n this.trigger('submit', this.data)\n this.addAttr(this.form, {\n target: '_blank',\n })\n this.form.submit()\n },\n removeModal() {\n this.destroy()\n },\n destroy() {\n this.utils.removeElement(this.modal)\n this.resetScrollbar()\n this.connector.destroy()\n this._super()\n },\n initConnector() {\n this.connector = new Connector({ target: this.iframe.contentWindow })\n this.connector.on('response', this.proxy('onResponse'))\n },\n onResponse(ev, data) {\n this.sendResponse(data)\n this.removeModal()\n },\n sendResponse(data) {\n this.checkout.connector.send('request', {\n uid: data.uid,\n action: 'api.checkout.proxy',\n method: 'send',\n params: data,\n })\n },\n})\n","import { Module } from './module.js'\n\nexport const Model = Module.extend({\n init(data) {\n this.data = data || {}\n this.create()\n },\n create() {},\n eachProps(args) {\n const name = args[1] ? args[0] : null\n const callback = args[1] ? args[1] : args[0]\n const list = name ? this.alt(name, []) : this.data\n return {\n list: list,\n callback: callback,\n }\n },\n each() {\n const props = this.eachProps(arguments)\n for (let prop in props.list) {\n if (props.list.hasOwnProperty(prop)) {\n props.callback(this.instance(props.list[prop]), props.list[prop], prop)\n }\n }\n },\n filter() {\n const props = this.eachProps(arguments)\n for (let prop in props.list) {\n if (props.list.hasOwnProperty(prop)) {\n const item = this.instance(props.list[prop])\n if (props.callback(item, props.list[prop], prop)) {\n return props.list[prop]\n }\n }\n }\n },\n find() {\n const props = this.eachProps(arguments)\n for (let prop in props.list) {\n if (props.list.hasOwnProperty(prop)) {\n const item = this.instance(props.list[prop])\n if (props.callback(item, props.list[prop], prop)) {\n return item\n }\n }\n }\n return false\n },\n alt(prop, defaults) {\n prop = this.attr(prop)\n return typeof prop === 'undefined' ? defaults : prop\n },\n attr(key, value) {\n let i = 0,\n data = this.data,\n name = (key || '').split('.'),\n prop = name.pop(),\n len = arguments.length\n for (; i < name.length; i++) {\n if (data && data.hasOwnProperty(name[i])) {\n data = data[name[i]]\n } else {\n if (len === 2) {\n data = data[name[i]] = {}\n } else {\n break\n }\n }\n }\n if (len === 1) {\n return data ? data[prop] : undefined\n }\n if (len === 2) {\n data[prop] = value\n }\n return this\n },\n stringify() {\n return JSON.stringify(this.serialize())\n },\n serialize() {\n return this.data\n },\n})\n","import { Model } from './model.js'\nimport { ProxyUrl } from './config.js'\n\nexport const Response = Model.extend({\n stringFormat(string) {\n const that = this\n return (string || '').replace(/{(.+?)}/g, function (match, prop) {\n return that.attr(['order.order_data', prop].join('.')) || match\n })\n },\n setConnector(connector) {\n this.connector = connector\n return this\n },\n setUID(uid) {\n this.uid = uid\n return this\n },\n getUID() {\n return this.uid\n },\n formDataProxy(url, data, target, method) {\n location.assign(\n [\n ProxyUrl,\n JSON.stringify({\n url: url,\n params: data,\n target: target,\n method: method,\n }),\n ].join('#')\n )\n },\n formDataSubmit(url, data, target, method) {\n if (url.match(/^http:/)) {\n return this.formDataProxy(url, data, target, method)\n }\n const action = this.stringFormat(url)\n const form = this.prepareForm(action, data, target, method)\n const body = this.utils.querySelector('body')\n body.appendChild(form)\n form.submit()\n form.parentNode.removeChild(form)\n },\n inProgress() {\n return this.attr('order.in_progress')\n },\n readyToSubmit() {\n return this.attr('order.ready_to_submit')\n },\n waitForResponse() {\n return this.attr('order.pending')\n },\n needVerifyCode() {\n return this.attr('order.need_verify_code')\n },\n redirectUrl() {\n if (this.attr('url')) {\n this.redirectToUrl(this.attr('url'))\n return true\n }\n return false\n },\n redirectToUrl(url) {\n location.assign(url)\n },\n submitToMerchant() {\n const ready = this.attr('order.ready_to_submit')\n const url = this.attr('model.url') || this.attr('order.response_url')\n const method = this.attr('order.method')\n const action = this.attr('order.action')\n const data = this.attr('model.send_data') || this.attr('order.order_data')\n if (ready && url && data) {\n if (action === 'redirect' || data['get_without_parameters'] === true) {\n this.redirectToUrl(url)\n } else {\n this.formDataSubmit(url, data, '_self', method)\n }\n return true\n }\n },\n submitForm() {\n const method = this.attr('method')\n const url = this.attr('url')\n const data = this.attr('send_data')\n if (url && data) {\n this.formDataSubmit(url, data, '_self', method)\n return true\n }\n return false\n },\n sendResponse() {\n const action = this.attr('action')\n if (action === 'submit') return this.submitForm()\n if (action === 'redirect') return this.redirectUrl()\n return false\n },\n prepare3dsData() {\n const params = {}\n const data = this.attr('submit3ds')\n if (data['3ds']) {\n params.token = this.attr('token')\n params.uid = this.getUID()\n params.frame = true\n if (data['send_data'].TermUrl) {\n data['send_data'].TermUrl = [data['send_data'].TermUrl, this.utils.param(params)].join(\n '#!!'\n )\n }\n }\n return data\n },\n waitOn3dsDecline() {\n const data = this.alt('submit3ds.checkout_data', {\n js_wait_on_3ds_decline: false,\n js_wait_on_3ds_decline_duration: 0,\n })\n return data.js_wait_on_3ds_decline ? data.js_wait_on_3ds_decline_duration : 0\n },\n submit3dsForm() {\n if (this.attr('submit3ds.checkout_data')) {\n this.connector.trigger('modal', this.prepare3dsData())\n }\n },\n supportedMethod(method) {\n const item = this.find('methods', function (item) {\n return item.alt('supportedMethods', '').match(method)\n })\n if (item) {\n this.attr('methods', [item.serialize()])\n } else {\n this.attr('methods', [])\n }\n },\n})\n","import { Deferred } from './deferred.js'\nimport { Module } from './module.js'\nimport { Connector } from './connector.js'\nimport { Modal } from './modal.js'\nimport { Response } from './response.js'\nimport { ApiFrameCss, ApiOrigin, ApiEndpoint } from './config.js'\nimport { buildUrl } from './utils.js'\n\nexport const Api = Module.extend({\n defaults: {\n version: 'default',\n origin: ApiOrigin,\n endpoint: ApiEndpoint,\n container: 'body',\n messages: {\n modalHeader:\n 'Now you will be redirected to your bank 3DSecure. If you are not redirected please refer',\n modalLinkLabel: 'link',\n },\n },\n init(params) {\n this.initParams(params)\n },\n url(type, url) {\n return buildUrl(this.params.origin, this.params.endpoint[type], {\n version: this.params.version,\n origin: location.origin,\n })\n },\n extendParams(params) {\n this.utils.extend(this.params, params)\n return this\n },\n initParams(params) {\n this.iframeDeferred = Deferred()\n this.params = this.utils.extend({}, this.defaults)\n this.extendParams(params)\n this.setOrigin(this.params.origin)\n },\n setOrigin(origin) {\n if (this.utils.isString(origin)) {\n this.params.origin = origin\n }\n return this\n },\n scope(callback) {\n callback = this.proxy(callback)\n this.domReady(function () {\n this.createFrame()\n if (this.iframeDeferred.isPending()) {\n this.iframeDeferred.done(callback)\n } else {\n callback()\n }\n })\n },\n domReady(callback) {\n callback = this.proxy(callback)\n if (document.readyState === 'loading') {\n window.addEventListener('DOMContentLoaded', callback)\n } else {\n callback()\n }\n },\n request(model, method, params) {\n const defer = Deferred()\n const data = {\n uid: this.connector.getUID(),\n action: model,\n method: method,\n params: params || {},\n }\n this.connector.send('request', data)\n this.connector.on(\n data.uid,\n this.proxy(function (ev, response, model, action) {\n const responseModel = new Response(response)\n responseModel.setUID(data.uid)\n responseModel.setConnector(this.connector)\n action = 'resolveWith'\n if (responseModel.attr('submit3ds')) {\n action = 'notifyWith'\n }\n if (responseModel.attr('error')) {\n action = 'rejectWith'\n }\n defer[action](this, [responseModel])\n })\n )\n return defer\n },\n createFrame() {\n if (this.iframe) return this\n this.iframe = this.utils.createElement('iframe')\n this.addAttr(this.iframe, {\n allowtransparency: true,\n frameborder: 0,\n scrolling: 'no',\n })\n this.addAttr(this.iframe, { src: this.url('gateway') })\n this.addCss(this.iframe, ApiFrameCss)\n if (this.utils.isElement(this.params.container)) {\n this.container = this.params.container\n }\n if (this.utils.isString(this.params.container)) {\n this.container = this.utils.querySelector(this.params.container)\n }\n if (this.container) {\n if (this.container.firstChild) {\n this.container.insertBefore(this.iframe, this.container.firstChild)\n } else {\n this.container.appendChild(this.iframe)\n }\n this.connector = new Connector({\n target: this.iframe.contentWindow,\n origin: this.params.origin,\n })\n this.connector.on('load', this.proxy('onLoadConnector'))\n this.connector.on('modal', this.proxy('onOpenModal'))\n } else {\n throw Error(`container element not found: document.querySelector(\"${this.params.container}\")`)\n }\n return this\n },\n onOpenModal(xhr, model) {\n this.modal = new Modal({ checkout: this, model: model })\n this.modal.on('close', this.proxy('onCloseModal'))\n },\n onCloseModal(modal, data) {\n this.trigger('modal.close', modal, data)\n },\n onLoadConnector() {\n this.iframeDeferred.resolve(true)\n this.connector.off('load')\n },\n})\n","import { Module } from '../module.js'\nimport { Api } from '../api.js'\nimport { Deferred } from '../deferred.js'\nimport { forEach, getAppleSessionConfig, isFunction, loadExternalApi } from '../utils.js'\nimport { PaymentMethodsConfig } from '../config.js'\n\nlet supportedMethodsDeferred = null\n\nconst getSupportedMethods = () => {\n if (supportedMethodsDeferred) return supportedMethodsDeferred\n supportedMethodsDeferred = Deferred()\n const promises = []\n const supported = { provider: [] }\n forEach(PaymentMethodsConfig, (method) => {\n promises.push(\n loadExternalApi(method.url, method.path)\n .then(method.callback)\n .then((state) => {\n if (state) {\n supported.provider.push(method.name)\n } else {\n console.log('payment method is not supported', method.name)\n }\n })\n )\n })\n Promise.all(promises).finally(() => {\n supportedMethodsDeferred.resolve(supported)\n })\n return supportedMethodsDeferred\n}\n\nexport const PaymentRequestApi = Module.extend({\n config: {\n payment_system: '',\n fallback: false,\n methods: [],\n details: {},\n options: {},\n },\n supported: {\n fallback: false,\n provider: [],\n },\n payload: {\n payment_system: null,\n provider: [],\n },\n params: {},\n getSupportedMethods() {\n return getSupportedMethods().then((supported) => {\n this.setSupported(supported)\n return supported\n })\n },\n init(params) {\n this.params = params || {}\n },\n setSupported(supported) {\n this.supported = supported\n this.trigger('supported', supported)\n return this\n },\n setPayload(payload) {\n this.payload = payload\n this.trigger('payload', payload)\n return this\n },\n setMerchant(merchant) {\n this.merchant = merchant\n },\n getProviderNames() {\n return this.supported.provider.filter((name) => !!~this.payload.allowed.indexOf(name))\n },\n setBeforeCallback(beforeCallback) {\n if (isFunction(beforeCallback)) {\n this.params.before = beforeCallback\n }\n },\n setAfterCallback(afterCallback) {\n if (isFunction(afterCallback)) {\n this.params.after = afterCallback\n }\n },\n setApi(api) {\n if (api instanceof Api) this.api = api\n return this\n },\n getProviderPayload(method) {\n return this.payload.provider[method] || {}\n },\n isMethodSupported(method) {\n return this.supported.provider.indexOf(method) !== -1\n },\n isFallbackMethod(method) {\n return method === 'google' && this.supported.fallback\n },\n request(model, method, params, success, failure) {\n const context = this\n if (context.api) {\n context.api.scope(function () {\n context.api.request(model, method, params).done(success).fail(failure)\n })\n }\n },\n session(params) {\n const defer = Deferred()\n this.request(\n 'api.checkout.pay',\n 'session',\n params,\n function (model) {\n defer.resolve(model.serialize())\n },\n function (model) {\n defer.reject(model)\n }\n )\n return defer\n },\n update(data) {\n if (this.isPending()) return\n this.setPending(true)\n this.params.data = data\n this.defer = Deferred()\n this.request(\n 'api.checkout.pay',\n 'methods',\n this.params.data,\n this.proxy(function (_cx, model) {\n this.setPending(false)\n this.setPayload(model.serialize())\n this.defer.resolve(model)\n }),\n this.proxy(function (_cx, model) {\n this.setPending(false)\n this.setPayload(model.serialize())\n this.trigger('error', model.serialize())\n this.defer.reject(model)\n })\n )\n return this.defer\n },\n isPending() {\n return this.pendingState === true\n },\n setPending(state) {\n if (this.pendingState !== state) {\n this.pendingState = state\n this.trigger('pending', state)\n }\n },\n before() {\n if (this.isPending()) return\n this.setPending(true)\n const defer = Deferred()\n const context = this\n defer.always(function () {\n context.setPending(false)\n })\n this.params.before(defer)\n return defer\n },\n after(params) {\n const defer = Deferred()\n this.params.after(defer, params)\n return defer\n },\n withApplePay(response, config) {\n const sessionConfig = getAppleSessionConfig(config)\n const request = new ApplePaySession(sessionConfig.version, sessionConfig)\n const merchant = this.merchant\n const context = this\n request.onvalidatemerchant = function (event) {\n context\n .session({\n url: event.validationURL,\n domain: location.host,\n merchant_id: merchant,\n })\n .done((session) => {\n try {\n request.completeMerchantValidation(session.data)\n } catch (error) {\n response.reject({ code: error.code, message: error.message })\n }\n })\n }\n request.oncancel = function () {\n response.reject({ code: 20, message: 'cancel' })\n }\n request.onpaymentauthorized = function (event) {\n request.completePayment(ApplePaySession.STATUS_SUCCESS)\n response.resolve(event.payment)\n }\n request.begin()\n },\n withGooglePay(response, config) {\n const { methods } = config\n const method = methods.find((item) => item.supportedMethods === 'https://google.com/pay')\n const client = new google.payments.api.PaymentsClient({ environment: method.data.environment })\n client\n .loadPaymentData(method.data)\n .then((paymentData) => {\n response.resolve(paymentData)\n })\n .catch((error) => {\n response.reject({ code: error.code, message: error.message })\n })\n },\n pay(method) {\n if (this.isPending()) return\n this.setPending(true)\n const context = this\n const response = Deferred()\n const payload = this.getProviderPayload(method)\n response.always(function () {\n context.setPending(false)\n })\n switch (method) {\n case 'google':\n this.withGooglePay(response, payload)\n break\n case 'apple':\n this.withApplePay(response, payload)\n break\n }\n return response\n .done(function (data) {\n context.trigger('details', {\n payment_system: context.payload.payment_system,\n data,\n })\n })\n .fail(function (error) {\n context.trigger('error', error)\n })\n },\n})\n","import { Module } from '../module.js'\nimport { Connector } from '../connector.js'\nimport {\n ApiOrigin,\n ApiEndpoint,\n ButtonContainerCss,\n ButtonCoverCss,\n ButtonCoverAttrs,\n ButtonFrameCss,\n ButtonFrameAttrs,\n} from '../config.js'\n\nimport { transitionDelay, toArray } from '../utils.js'\n\nimport { PaymentRequestApi } from './request.js'\nimport { Deferred } from '../deferred.js'\n\nexport const PaymentElement = Module.extend({\n defaults: {\n method: null,\n appendTo: null,\n className: 'payment-element',\n origin: ApiOrigin,\n endpoint: ApiEndpoint.element,\n mode: 'plain',\n color: 'black',\n lang: 'en',\n height: 38,\n },\n init(params) {\n this.state = {\n type: 'hide',\n transition: false,\n pending: false,\n mounted: false,\n supported: false,\n allowed: false,\n }\n this.params = {}\n this.utils.extend(this.params, this.defaults)\n this.utils.extend(this.params, params)\n this.initElement()\n },\n timeout(callback, timeout) {\n this.timeoutMap = this.timeoutMap || {}\n clearTimeout(this.timeoutMap[timeout])\n this.timeoutMap[callback] = setTimeout(this.proxy(callback), timeout)\n return this\n },\n getElementUrl() {\n return [this.params.origin, this.params.endpoint].join('')\n },\n getElementOptions() {\n return this.utils.param({\n method: this.params.method,\n mode: this.params.mode,\n style: this.params.style,\n color: this.params.color,\n lang: this.params.lang,\n })\n },\n initElement() {\n this.element = this.utils.createElement('div')\n this.iframe = this.utils.createElement('iframe')\n this.iframeLoaded = Deferred()\n this.button = this.utils.createElement('a')\n this.addCss(this.element, ButtonContainerCss)\n this.addCss(this.button, ButtonCoverCss)\n this.addAttr(this.button, ButtonCoverAttrs)\n this.addCss(this.iframe, ButtonFrameCss)\n this.addAttr(this.iframe, ButtonFrameAttrs)\n this.addAttr(this.iframe, {\n src: [this.getElementUrl(), this.getElementOptions()].join('?'),\n })\n this.addEvent(this.iframe, 'load', 'onloadConnector')\n this.addEvent(this.iframe, 'error', 'errorConnector')\n this.addAttr(this.element, {\n class: this.params.className,\n })\n this.element.appendChild(this.iframe)\n this.element.appendChild(this.button)\n },\n errorConnector() {\n this.iframeLoaded.resolveWith(this)\n },\n onloadConnector() {\n this.iframeLoaded.resolveWith(this)\n this.connector = new Connector({\n target: this.iframe.contentWindow,\n origin: this.params.origin,\n })\n },\n send(action, data) {\n if (this.connector) {\n this.connector.send(action, data)\n }\n },\n onEvent(cx, ev) {\n ev.preventDefault()\n if (this.state.pending) return false\n this.send('event', { type: ev.type })\n },\n onClick() {\n if (this.state.pending) return false\n this.request.before().done(this.proxy('onClickDone')).fail(this.proxy('onClickFail'))\n },\n onClickDone() {\n this.request.pay(this.params.method)\n },\n onClickFail() {},\n onSupported(cx, supported) {\n this.state.supported = supported.provider.includes(this.params.method)\n this.render()\n },\n onPayload(cx, payload) {\n this.state.allowed = payload.allowed.includes(this.params.method)\n this.render()\n },\n onPending(cx, state) {\n this.state.pending = state\n this.addCss(this.element, {\n transition: 'height 0.2s ease-out, opacity 0.4s ease-out',\n pointerEvents: this.state.pending ? 'none' : '',\n opacity: this.state.pending ? '0.5' : '1',\n })\n },\n initEvents() {\n this.addEvent(this.button, 'mouseenter', 'onEvent')\n this.addEvent(this.button, 'mouseleave', 'onEvent')\n this.addEvent(this.button, 'blur', 'onEvent')\n this.addEvent(this.button, 'focus', 'onEvent')\n this.addEvent(this.button, 'click', 'onClick')\n },\n setPaymentRequest(request) {\n if (!(request instanceof PaymentRequestApi))\n throw Error('request is not instance of PaymentRequestApi')\n const onSupported = this.proxy('onSupported')\n const onPayload = this.proxy('onPayload')\n const onPending = this.proxy('onPending')\n this.request = request\n this.request.off('supported', onSupported).on('supported', onSupported)\n this.request.off('payload', onPayload).on('payload', onPayload)\n this.request.off('pending', onPending).on('pending', onPending)\n return this\n },\n appendTo(appendTo) {\n const container = this.utils.querySelector(appendTo)\n if (container) container.appendChild(this.element)\n this.initEvents()\n return this\n },\n render() {\n if (this.state.supported === false) return this.hide()\n if (this.state.allowed === false) return this.hide()\n this.mount()\n this.show()\n },\n notMounted() {\n return this.state.mounted === false\n },\n isMounted() {\n return this.state.mounted === true\n },\n isHide() {\n return this.state.type === 'hide'\n },\n unmount() {\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element)\n this.state.mounted = false\n }\n return this\n },\n mount() {\n if (!document.body.contains(this.element)) {\n this.appendTo(this.params.appendTo)\n this.state.mounted = true\n }\n return this\n },\n transitionValue(value) {\n return value\n },\n getTimeoutValue() {\n return toArray([this.iframe, this.element]).map(transitionDelay).sort().pop()\n },\n getState(state, transition) {\n return this.state.type === (state ? 'show' : 'hide') && this.state.transition === transition\n },\n triggerState(timeout) {\n this.request.trigger(this.state.type, {\n transition: this.state.transition,\n method: this.params.method,\n })\n },\n show() {\n if (this.notMounted()) return\n this.timeout('showCallback', 25)\n return this\n },\n hide() {\n if (this.notMounted()) return\n this.timeout('hideCallback', 25)\n return this\n },\n showCallback() {\n this.addCss(this.element, {\n transition: this.transitionValue('height 0.2s ease-out'),\n height: this.utils.cssUnit(this.params.height, 'px'),\n 'will-change': 'height',\n })\n this.addCss(this.iframe, {\n transition: this.transitionValue('opacity 0.225s 0.225s ease-out'),\n opacity: this.utils.cssUnit(1),\n 'will-change': 'opacity',\n })\n this.afterCallback('show')\n },\n hideCallback() {\n this.addCss(this.element, {\n transition: this.transitionValue('height 0.225s 0.225s ease-out'),\n height: this.utils.cssUnit(0, 'px'),\n 'will-change': 'height',\n })\n this.addCss(this.iframe, {\n transition: this.transitionValue('opacity 0.225s ease-out'),\n opacity: this.utils.cssUnit(0),\n 'will-change': 'opacity',\n })\n this.afterCallback('hide')\n },\n afterCallback(state) {\n if (this.state.type === state) return\n if (this.state.transition) return\n this.state.transition = true\n this.state.type = state\n this.triggerState()\n this.timeout('afterTransition', this.getTimeoutValue())\n },\n afterTransition() {\n this.iframeLoaded.then(function () {\n this.state.transition = false\n this.triggerState()\n if (this.isHide()) this.unmount()\n })\n },\n})\n","import { Module } from '../module.js'\nimport { Api } from '../api.js'\nimport { PaymentRequestApi } from './request.js'\nimport { PaymentElement } from './element.js'\nimport { forEach, isFunction, toArray } from '../utils.js'\nimport { ApiOrigin, ApiEndpoint } from '../config.js'\n\nexport const PaymentButton = Module.extend({\n defaults: {\n version: 'default',\n origin: ApiOrigin,\n endpoint: ApiEndpoint,\n methods: ['apple', 'google'],\n element: null,\n style: {\n height: 38,\n mode: 'default',\n type: 'long',\n color: 'black',\n },\n data: {\n lang: 'en',\n },\n before(defer) {\n defer.resolve()\n },\n after(defer, params) {\n defer.resolve(params)\n },\n },\n init(params) {\n this.elements = {}\n this.supported = false\n this.params = {\n element: params.element,\n version: params.version || this.defaults.version,\n methods: params.methods || this.defaults.methods,\n origin: params.origin || this.defaults.origin,\n endpoint: this.utils.extend({}, this.defaults.endpoint, params.endpoint),\n style: this.utils.extend({}, this.defaults.style, params.style),\n before: isFunction(params.before) ? params.before : this.defaults.before,\n after: isFunction(params.after) ? params.after : this.defaults.after,\n data: this.utils.extend({}, this.defaults.data, params.data),\n }\n this.initApi(params.api)\n this.initPaymentRequestApi()\n this.initElements()\n this.initData()\n },\n initData() {\n const data = this.params.data\n if (!data.merchant_id) return\n if ((!data.currency || !data.amount) && !data.token) return\n this.update()\n },\n initApi(api) {\n if (api instanceof Api) {\n this.api = api\n } else {\n this.api = new Api({\n version: this.params.version,\n origin: this.params.origin,\n endpoint: this.params.endpoint,\n })\n }\n },\n initPaymentRequestApi() {\n this.request = new PaymentRequestApi({\n before: this.params.before,\n after: this.params.after,\n })\n this.request.setApi(this.api)\n this.request.setMerchant(this.params.data.merchant_id)\n this.request.on('pending', this.proxy('onPending'))\n this.request.on('details', this.proxy('onDetails'))\n this.request.on('error', this.proxy('onError'))\n this.request.on('show', this.proxy('onShow'))\n this.request.on('hide', this.proxy('onHide'))\n },\n initElements() {\n const self = this\n const style = this.params.style\n const data = this.params.data\n const origin = this.params.origin\n const appendTo = this.params.element\n const endpoint = this.params.endpoint.element\n const request = this.request\n this.buttons = []\n this.container = this.utils.querySelector(this.params.element)\n this.addCss(this.container, {\n display: 'flex',\n gap: '1rem',\n 'flex-direction': 'column',\n })\n forEach(this.params.methods, function (method) {\n const element = new PaymentElement({\n origin: origin,\n endpoint: endpoint,\n method: method,\n appendTo: appendTo,\n color: style.color,\n mode: style.mode,\n lang: data.lang,\n height: style.height,\n })\n element.setPaymentRequest(request)\n self.buttons.push(element)\n })\n request.getSupportedMethods()\n },\n update(data) {\n return this.request.update(this.utils.extend(this.params.data, data || {}))\n },\n onDetails(_cx, data) {\n this.api.scope(() => {\n this.request.after(this.params.data).done((extendParams) => {\n this.api\n .request(\n 'api.checkout.form',\n 'request',\n this.utils.extend({}, this.params.data, extendParams || {}, data)\n )\n .done(this.proxy('onSuccess'))\n .fail(this.proxy('onError'))\n })\n })\n },\n onSuccess(_cx, data) {\n this.trigger('success', data)\n },\n onError(_cx, data) {\n this.trigger('error', data)\n },\n toggleEventType(state, transition) {\n return state ? (transition ? 'show' : 'shown') : transition ? 'hide' : 'hidden'\n },\n toggleEventNamespace(state, data) {\n const name = []\n name.push(this.toggleEventType(state, data.transition))\n name.push(data.method)\n return name.join(':')\n },\n onShow(_cx, data) {\n this.trigger(this.toggleEventNamespace(true, data), {})\n },\n onHide(_cx, data) {\n this.trigger(this.toggleEventNamespace(false, data), {})\n },\n onPending(_cx, state) {\n this.trigger('pending', state)\n },\n})\n","import { Module } from '../module.js'\nimport { Connector } from '../connector.js'\nimport { PaymentRequestApi } from './request.js'\n\nimport {\n GooglePayLanguages,\n ButtonColorMap,\n ButtonDefaultColor,\n ButtonLabelMap,\n} from '../config.js'\n\nconst parseConfig = (config) => {\n const data = {\n payment_system: config.payment_system,\n provider: {},\n allowed: [],\n }\n const methods = config.methods || []\n const details = config.details || {}\n const options = config.options || {}\n const regex = new RegExp('//([a-z]+)\\\\.com/')\n methods.forEach(function (item) {\n const match = regex.exec(item.supportedMethods)\n if (match === null) return\n data.provider[match[1]] = {\n methods: [item],\n details: details,\n options: options,\n }\n })\n return data\n}\n\nexport const PaymentContainer = Module.extend({\n defaults: {\n element: null,\n method: 'card',\n data: {\n lang: 'en',\n },\n style: {},\n },\n init(params) {\n this.initParams(params)\n this.initEvents()\n },\n initParams(params) {\n this.params = this.utils.extend({}, this.defaults, params)\n this.element = this.utils.querySelector(this.params.element)\n this.connector = new Connector({\n target: window.parent,\n })\n this.payment = new PaymentRequestApi({\n embedded: true,\n })\n },\n extendParams(params) {\n this.utils.extend(this.params, {\n method: params.method,\n style: params.style,\n data: params.data,\n css: params.css,\n })\n },\n getGoogleLangSupport(lang, defaults) {\n return GooglePayLanguages.indexOf(lang) !== -1 ? lang : defaults\n },\n getButtonColor(color) {\n return ButtonColorMap[color] || ButtonDefaultColor\n },\n getGoogleSvg(color, lang, mode) {\n const params = {\n endpoint: 'https://www.gstatic.com/instantbuy/svg',\n color: this.getButtonColor(color),\n mode: mode || 'plain',\n lang: lang || 'en',\n }\n let format = 'url(\"{endpoint}/{color}/{mode}/{lang}.svg\")'\n if (mode === 'plain') {\n format = 'url(\"{endpoint}/{color}_gpay.svg\")'\n }\n if (mode === 'buy') {\n format = 'url(\"{endpoint}/{color}/{lang}.svg\")'\n }\n return this.utils.stringFormat(format, params)\n },\n getAppleSvg(color) {\n const format = 'url(\"svg/apple-pay-{color}.svg\")'\n const params = {\n color: this.getButtonColor(color),\n }\n return this.utils.stringFormat(format, params)\n },\n getAppleLabel(lang) {\n return ButtonLabelMap[lang || 'en']\n },\n addFrameImage() {\n const frame =\n this.utils.querySelector('iframe', this.element) || this.utils.createElement('iframe')\n const url = 'https://pay.google.com/gp/p/generate_gpay_btn_img'\n const style = this.params.style || {}\n const lang = this.getGoogleLangSupport(this.params.data.lang, 'en')\n const query = {\n buttonColor: style.color || 'black',\n browserLocale: lang,\n buttonSizeMode: 'fill',\n }\n const src = [url, this.utils.param(query)].join('?')\n this.addAttr(frame, {\n scrolling: 'no',\n frameborder: 0,\n src: src,\n })\n this.element.appendChild(frame)\n this.element.classList.remove('short', 'long')\n },\n styleButton() {\n let element = this.element\n let params = this.params\n let method = params.method\n let style = params.style || {}\n let lang = params.data.lang || 'en'\n let css = params.css || {}\n element.setAttribute('class', '')\n element.classList.add('button', 'pending')\n if (method === 'card') method = 'google'\n if (method) {\n element.classList.add(method)\n }\n if (lang) {\n element.classList.add(lang)\n }\n if (style.type) {\n element.classList.add(style.type)\n }\n if (style.mode) {\n element.classList.add(style.mode)\n }\n if (style.color) {\n element.classList.add(style.color)\n }\n if (method === 'google') {\n if (style.type === 'short') {\n style.mode = 'plain'\n }\n if (style.mode === 'default') {\n this.addFrameImage()\n } else {\n css.image = this.getGoogleSvg(style.color, lang, style.mode)\n }\n }\n if (method === 'apple') {\n css.image = this.getAppleSvg(style.color)\n css.label = this.getAppleLabel(lang, style.mode)\n }\n if (css) {\n this.utils.forEach(css, function (value, name) {\n element.style.setProperty(['--', name].join(''), value)\n })\n }\n },\n initEvents() {\n this.payment.on(\n 'details',\n this.proxy(function (cx, data) {\n this.connector.send('details', data)\n this.connector.send('complete', data)\n })\n )\n this.payment.on(\n 'reload',\n this.proxy(function (cx, data) {\n this.connector.send('reload', data)\n })\n )\n this.payment.on(\n 'error',\n this.proxy(function (cx, data) {\n this.connector.send('error', data)\n })\n )\n this.connector.on(\n 'options',\n this.proxy(function (cx, data) {\n this.extendParams(data)\n this.styleButton()\n })\n )\n this.connector.on(\n 'pay',\n this.proxy(function () {\n if (!this.element.classList.contains('pending')) {\n if (this.params.method === 'apple') {\n const payload = this.payment.payload || {}\n const apple = payload.provider['apple'] || {}\n this.connector.send('pay', {\n payment_system: payload.payment_system,\n methods: apple.methods,\n details: apple.details,\n options: apple.options,\n })\n } else {\n this.payment\n .setSupported({\n fallback: false,\n provider: ['google'],\n })\n .pay('google')\n }\n }\n })\n )\n this.connector.on(\n 'config',\n this.proxy(function (cx, data) {\n this.payment.setPayload((data = parseConfig(data)))\n if (data.payment_system && Object.keys(data.provider).length > 0) {\n this.element.classList.remove('pending')\n this.element.classList.add('ready')\n this.connector.send('show', {})\n } else {\n this.connector.send('hide', {})\n }\n })\n )\n this.connector.on(\n 'event',\n this.proxy(function (cx, data) {\n if (data.type === 'mouseenter') {\n this.element.classList.add('hover')\n }\n if (data.type === 'mouseleave') {\n this.element.classList.remove('hover')\n }\n if (data.type === 'focusin') {\n this.element.classList.add('active')\n }\n if (data.type === 'focusout') {\n this.element.classList.remove('active')\n }\n })\n )\n },\n})\n","import { Api } from '../api.js'\n\nexport const Widget = Api.extend({\n init(params) {\n this.initParams(params)\n this.initWidget()\n },\n initWidget() {\n this.initOptions(this.params.options)\n if (this.utils.isString(this.params.element)) {\n this.initElement(this.params.element)\n }\n },\n initOptions() {\n if (this.utils.isPlainObject(this.params.options)) {\n this.params.options = this.params.options || {}\n }\n },\n initElement(el) {},\n addSelectorEvent(el, ev, cb) {\n this.each(this.utils.querySelectorAll(el), function (cx, element) {\n this.addEvent(element, ev, cb)\n })\n return this\n },\n getRequestParams() {\n return {}\n },\n sendRequest(el, ev) {\n if (ev.defaultPrevented) return\n ev.preventDefault()\n this.trigger('request', this.getRequestParams(el))\n this.scope(function () {\n this.request('api.checkout.form', 'request', this.getRequestParams(el))\n .done(this.proxy('onSuccess'))\n .fail(this.proxy('onError'))\n .progress(this.proxy('onProgress'))\n })\n },\n onProgress(cx, model) {\n this.trigger('progress', model)\n },\n onSuccess(cx, model) {\n model.sendResponse()\n model.submitToMerchant()\n this.trigger('success', model)\n },\n onError(cx, model) {\n this.trigger('error', model)\n },\n})\n","import { Module } from '../module.js'\nimport { Widget } from './index.js'\n\nconst FormData = Module.extend({\n init(form) {\n this.setFormElement(form)\n },\n setFormElement(form) {\n if (this.utils.isElement(form)) {\n this.form = form\n }\n },\n getData(filter) {\n const params = this.deparam(this.serializeArray())\n return filter === true ? this.utils.cleanObject(params) : params\n },\n serializeArray() {\n const list = this.utils.toArray(this.form.elements)\n return this.utils.map(list, function (field) {\n if (field.disabled || field.name === '') return\n if (field.type.match('checkbox|radio') && !field.checked) return\n return {\n name: field.name,\n value: field.value,\n }\n })\n },\n serializeAndEncode() {\n return this.utils\n .map(this.serializeArray(), function (field) {\n return [field.name, encodeURIComponent(field.value)].join('=')\n })\n .join('&')\n },\n deparam(obj) {\n let prop,\n result = {}\n const breaker = /[^\\[\\]]+|\\[\\]$/g\n const attr = function (name, value) {\n let i,\n data = result,\n last = name.pop(),\n len = name.length\n for (i = 0; i < len; i++) {\n if (!data[name[i]]) data[name[i]] = len === i + 1 && last === '[]' ? [] : {}\n data = data[name[i]]\n }\n if (last === '[]') {\n data.push(value)\n } else {\n data[last] = value\n }\n }\n for (prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n attr(obj[prop].name.match(breaker), obj[prop].value)\n }\n }\n return result\n },\n})\n\nexport const WidgetForm = Widget.extend({\n initElement(el) {\n this.addSelectorEvent(el, 'submit', 'sendRequest')\n },\n getRequestParams(el) {\n return this.utils.extend({}, this.params.options, new FormData(el).getData())\n },\n})\n","import { Widget } from './index.js'\n\nexport const WidgetButton = Widget.extend({\n attributes: {},\n initElement(el) {\n if (this.utils.isPlainObject(this.params.attributes)) {\n this.utils.extend(this.attributes, this.params.attributes)\n }\n this.addSelectorEvent(el, 'click', 'sendRequest')\n },\n getRequestParams(el) {\n return this.utils.extend({}, this.params.options, this.getElementData(el))\n },\n getElementData(el) {\n const result = {}\n this.utils.forEach(this.attributes, function (value, key) {\n if (el.hasAttribute(key)) {\n result[value] = el.getAttribute(key)\n }\n })\n return result\n },\n})\n","import { Component } from './core/component.js'\n\nimport * as Utils from './core/utils.js'\nimport * as Config from './core/config.js'\n\nimport { Api } from './core/api.js'\nimport { Module } from './core/module.js'\nimport { Connector } from './core/connector.js'\nimport { Response } from './core/response.js'\nimport { PaymentButton } from './core/payment/button.js'\nimport { PaymentRequestApi } from './core/payment/request.js'\nimport { PaymentElement } from './core/payment/element.js'\nimport { PaymentContainer } from './core/payment/container.js'\nimport { WidgetForm } from './core/widget/form.js'\nimport { WidgetButton } from './core/widget/button.js'\nimport { Modal } from './core/modal.js'\n\nComponent.add('Api', Api)\nComponent.add('Connector', Connector)\nComponent.add('PaymentButton', PaymentButton)\nComponent.add('PaymentRequestApi', PaymentRequestApi)\nComponent.add('PaymentElement', PaymentElement)\nComponent.add('FormWidget', WidgetForm)\nComponent.add('ButtonWidget', WidgetButton)\n\nComponent.Utils = Utils\nComponent.Config = Config\nComponent.Api = Api\nComponent.Module = Module\nComponent.Modal = Modal\nComponent.Connector = Connector\nComponent.Response = Response\nComponent.PaymentRequestApi = PaymentRequestApi\nComponent.PaymentContainer = PaymentContainer\nComponent.PaymentElement = PaymentElement\nComponent.PaymentButton = PaymentButton\n\nexport {\n Utils,\n Config,\n Api,\n Module,\n Connector,\n Response,\n PaymentRequestApi,\n PaymentContainer,\n PaymentElement,\n PaymentButton,\n}\n\nexport default Component\n"],"names":["modules","instance","newModule","name","params","Error","join","Component","get","add","module","addModule","this","cx","NativePaymentRequest","digitTest","keyBreaker","paramTest","r20","rbracket","matchSymbol","prep","str","decodeURIComponent","replace","flatten","array","result","forEach","item","concat","isArray","recursiveParams","prefix","obj","next","prop","test","isPlainObject","getType","o","toString","call","match","toLowerCase","_typeof","constructor","Object","isFunction","isElement","nodeType","toArray","slice","hasProp","v","hasOwnProperty","ob","cb","p","cleanObject","length","splice","extend","_len","arguments","args","Array","_key","value","key","uuid","a","b","Math","random","getPaymentRequest","window","PaymentRequest","methods","details","options","request","id","e","PromiseWithResolvers","resolve","reject","promise","Promise","promiseResolve","promiseReject","getAppleSessionConfig","config","method","find","supportedMethods","requiredShippingContactFields","requiredBillingContactFields","requestShipping","push","requestPayerName","requestPayerEmail","requestPayerPhone","version","data","countryCode","supportedNetworks","merchantCapabilities","merchantIdentifier","lineItems","displayItems","additionalLineItems","recurringPaymentRequest","deferredPaymentRequest","currencyCode","total","amount","currency","label","buildUrl","origin","path","undefined","query","keys","filter","map","encodeURIComponent","url","separator","indexOf","getFunction","split","reduce","acc","cur","loadExternalApi","_toArray$filter","document","scripts","script","src","_slicedToArray","_PromiseWithResolvers","createElement","async","addEventListener","console","log","head","appendChild","transitionDelay","el","_getComputedStyle","getComputedStyle","transitionDuration","Number","parseFloat","attrs","setAttribute","_len2","_key2","shift","classList","className","trim","token","tag","unit","String","charAt","pair","parts","current","j","l","lastPart","pop","props","first","word","letter","toUpperCase","defaults","JSON","parse","t","r","querySelector","querySelectorAll","removeAttribute","_len3","_key3","index","parentNode","removeChild","format","expr","ApiOrigin","ApiEndpoint","gateway","element","ProxyUrl","GoogleBaseRequest","apiVersion","apiVersionMinor","allowedPaymentMethods","type","parameters","allowedAuthMethods","allowedCardNetworks","PaymentMethodsConfig","callback","PaymentsClient","environment","isReadyToPay","ApplePaySession","supportsVersion","GooglePayLanguages","ApiFrameCss","width","height","left","bottom","position","border","ButtonFrameCss","margin","padding","display","background","opacity","overflow","outline","ButtonFrameAttrs","tabindex","scrolling","frameborder","allowtransparency","allowpaymentrequest","ButtonCoverCss","top","cursor","ButtonCoverAttrs","role","ButtonContainerCss","ButtonDefaultColor","ButtonColorMap","dark","light","black","white","ButtonLabelMap","ar","bg","ca","zh","hr","cs","da","nl","en","et","es","fi","fr","de","it","ja","ko","ms","no","pl","pt","ru","sr","sk","sl","sv","th","tr","uk","Deferred","resolveCallbacks","rejectCallbacks","notifyCallbacks","status","resultContext","resultArgs","chainArgs","executeCallback","context","callbacks","list","save","isArgs","from","execute","apply","then","done","isResolved","fail","isRejected","progress","isProgress","always","object","state","isPending","clear","resolveWith","rejectWith","notifyWith","notify","init","fnTest","ClassObject","superMethod","parent","temp","_super","prototype","proxy","fn","Class","target","proto","assign","Event","events","empty","on","off","i","trigger","Module","utils","Utils","getListener","_listener_","destroy","_proxy_cache_","isString","each","addAttr","k","addCss","addCssProperty","style","idx","cssText","RegExp","substring","addEvent","ev","removeEvent","removeEventListener","prepareForm","form","action","Connector","ns","uniqueId","signature","setTarget","setOrigin","create","getUID","router","response","source","send","stringify","targetOrigin","delegate","postMessage","messages","modalHeader","modalLinkLabel","Template","view","Views","render","Modal","checkout","model","template","body","initModal","initConnector","getRandomNumber","modal","innerHTML","iframe","initScrollbar","submitToIframe","submit","measureScrollbar","scrollDiv","removeElement","offsetWidth","clientWidth","checkScrollbar","documentElementRect","fullWindowWidth","innerWidth","documentElement","getBoundingClientRect","right","abs","bodyIsOverflowing","scrollbarWidth","bodyPad","parseInt","getStyle","originalBodyPad","paddingRight","originalOverflow","resetScrollbar","round","selector","closeModal","preventDefault","removeModal","submitForm","connector","contentWindow","onResponse","sendResponse","uid","Model","eachProps","alt","attr","len","serialize","Response","stringFormat","string","that","setConnector","setUID","formDataProxy","location","formDataSubmit","inProgress","readyToSubmit","waitForResponse","needVerifyCode","redirectUrl","redirectToUrl","submitToMerchant","ready","prepare3dsData","frame","TermUrl","param","waitOn3dsDecline","js_wait_on_3ds_decline","js_wait_on_3ds_decline_duration","submit3dsForm","supportedMethod","Api","endpoint","container","initParams","extendParams","iframeDeferred","scope","domReady","createFrame","readyState","defer","responseModel","firstChild","insertBefore","onOpenModal","xhr","onCloseModal","onLoadConnector","supportedMethodsDeferred","PaymentRequestApi","payment_system","fallback","supported","provider","payload","getSupportedMethods","_this","promises","all","setSupported","setPayload","setMerchant","merchant","getProviderNames","_this2","allowed","setBeforeCallback","beforeCallback","before","setAfterCallback","afterCallback","after","setApi","api","getProviderPayload","isMethodSupported","isFallbackMethod","success","failure","session","update","setPending","_cx","pendingState","withApplePay","sessionConfig","onvalidatemerchant","event","validationURL","domain","host","merchant_id","completeMerchantValidation","error","code","message","oncancel","onpaymentauthorized","completePayment","STATUS_SUCCESS","payment","begin","withGooglePay","google","payments","loadPaymentData","paymentData","pay","PaymentElement","appendTo","mode","color","lang","transition","pending","mounted","initElement","timeout","timeoutMap","clearTimeout","setTimeout","getElementUrl","getElementOptions","iframeLoaded","button","class","errorConnector","onloadConnector","onEvent","onClick","onClickDone","onClickFail","onSupported","includes","onPayload","onPending","pointerEvents","initEvents","setPaymentRequest","hide","mount","show","notMounted","isMounted","isHide","unmount","contains","transitionValue","getTimeoutValue","sort","getState","triggerState","showCallback","cssUnit","hideCallback","afterTransition","PaymentButton","elements","initApi","initPaymentRequestApi","initElements","initData","self","buttons","gap","onDetails","onSuccess","onError","toggleEventType","toggleEventNamespace","onShow","onHide","PaymentContainer","embedded","css","getGoogleLangSupport","getButtonColor","getGoogleSvg","getAppleSvg","getAppleLabel","addFrameImage","buttonColor","browserLocale","buttonSizeMode","remove","styleButton","image","setProperty","apple","regex","exec","parseConfig","Widget","initWidget","initOptions","addSelectorEvent","getRequestParams","sendRequest","defaultPrevented","onProgress","FormData","setFormElement","getData","deparam","serializeArray","field","disabled","checked","serializeAndEncode","breaker","last","WidgetForm","WidgetButton","attributes","getElementData","hasAttribute","getAttribute","Config"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Flitt JavaScript SDK",
|
|
4
4
|
"homepage": "https://github.com/flittpayments/js-sdk",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "2.0.
|
|
6
|
+
"version": "2.0.15",
|
|
7
7
|
"main": "dist/cjs/checkout.js",
|
|
8
8
|
"module": "dist/esm/checkout.js",
|
|
9
9
|
"unpkg": "dist/umd/checkout.js",
|