@dintero/checkout-web-sdk 0.6.0 → 0.6.2
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/.github/workflows/build.yml +14 -15
- package/.github/workflows/release.yml +4 -5
- package/.prettierrc.yml +8 -0
- package/.releaserc.json +7 -9
- package/CHANGELOG.md +11 -9
- package/README.md +39 -25
- package/dist/declarations/src/checkout.d.ts +2 -2
- package/dist/dintero-checkout-web-sdk.cjs.dev.js +105 -97
- package/dist/dintero-checkout-web-sdk.cjs.prod.js +105 -97
- package/dist/dintero-checkout-web-sdk.esm.js +105 -97
- package/dist/dintero-checkout-web-sdk.umd.min.js +1 -1
- package/dist/dintero-checkout-web-sdk.umd.min.js.map +1 -1
- package/package.json +45 -49
- package/patches/vitest+0.34.6.patch +33 -0
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/base.css +0 -224
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/block-navigation.js +0 -79
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/checkout.ts.html +0 -473
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/createIframeAsync.ts.html +0 -263
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/favicon.png +0 -0
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/index.html +0 -216
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/index.ts.html +0 -2366
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/popOut.ts.html +0 -377
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/popOutBackdrop.ts.html +0 -1046
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/popOutButton.ts.html +0 -374
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/prettify.css +0 -1
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/prettify.js +0 -2
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/sort-arrow-sprite.png +0 -0
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/sorter.js +0 -170
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/subscribe.ts.html +0 -632
- package/coverage/Chrome Headless 117.0.5938.92 (Linux x86_64)/html/url.ts.html +0 -284
- package/karma.conf.js +0 -33
|
@@ -2,7 +2,7 @@ import 'native-promise-only';
|
|
|
2
2
|
|
|
3
3
|
var pkg = {
|
|
4
4
|
name: "@dintero/checkout-web-sdk",
|
|
5
|
-
version: "0.6.
|
|
5
|
+
version: "0.6.2",
|
|
6
6
|
description: "Dintero Checkout SDK for web frontends",
|
|
7
7
|
main: "dist/dintero-checkout-web-sdk.cjs.js",
|
|
8
8
|
module: "dist/dintero-checkout-web-sdk.esm.js",
|
|
@@ -13,8 +13,10 @@ var pkg = {
|
|
|
13
13
|
umdName: "dintero"
|
|
14
14
|
},
|
|
15
15
|
scripts: {
|
|
16
|
+
postinstall: "patch -u node_modules/vitest/dist/vendor-node.a7c48fe1.js -i patches/vitest+0.34.6.patch --forward || true",
|
|
16
17
|
build: "preconstruct build",
|
|
17
|
-
|
|
18
|
+
lint: "prettier --cache --log-level warn -c --config .prettierrc.yml .",
|
|
19
|
+
test: "$(yarn bin)/vitest --browser.name=chrome --browser.headless",
|
|
18
20
|
"semantic-release": "semantic-release",
|
|
19
21
|
prepublishOnly: "yarn run build"
|
|
20
22
|
},
|
|
@@ -30,25 +32,19 @@ var pkg = {
|
|
|
30
32
|
url: "https://github.com/Dintero/Dintero.Checkout.Web.SDK/issues"
|
|
31
33
|
},
|
|
32
34
|
devDependencies: {
|
|
33
|
-
"@babel/
|
|
34
|
-
"@babel/preset-typescript": "
|
|
35
|
-
"@preconstruct/cli": "
|
|
36
|
-
"@semantic-release/git": "
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
mocha: "^8.1.1",
|
|
44
|
-
prettier: "^3.0.3",
|
|
45
|
-
puppeteer: "^21.1.0",
|
|
46
|
-
"semantic-release": "^22.0.1",
|
|
47
|
-
sinon: "^15.0.0",
|
|
48
|
-
typescript: "^5.2.2"
|
|
35
|
+
"@babel/core": "7.13.0",
|
|
36
|
+
"@babel/preset-typescript": "7.13.0",
|
|
37
|
+
"@preconstruct/cli": "2.8.1",
|
|
38
|
+
"@semantic-release/git": "10.0.1",
|
|
39
|
+
"@vitest/browser": "0.34.6",
|
|
40
|
+
prettier: "3.0.3",
|
|
41
|
+
"semantic-release": "22.0.5",
|
|
42
|
+
typescript: "5.2.2",
|
|
43
|
+
vitest: "0.34.6",
|
|
44
|
+
webdriverio: "8.16.22"
|
|
49
45
|
},
|
|
50
46
|
dependencies: {
|
|
51
|
-
"native-promise-only": "
|
|
47
|
+
"native-promise-only": "0.8.1"
|
|
52
48
|
}
|
|
53
49
|
};
|
|
54
50
|
|
|
@@ -100,18 +96,18 @@ const getSessionUrl = options => {
|
|
|
100
96
|
throw new Error("Invalid endpoint");
|
|
101
97
|
}
|
|
102
98
|
const params = new URLSearchParams();
|
|
103
|
-
params.append(
|
|
99
|
+
params.append("sdk", pkg.version);
|
|
104
100
|
if (ui) {
|
|
105
|
-
params.append(
|
|
101
|
+
params.append("ui", ui);
|
|
106
102
|
}
|
|
107
103
|
if (language) {
|
|
108
|
-
params.append(
|
|
104
|
+
params.append("language", language);
|
|
109
105
|
}
|
|
110
106
|
if (shouldCallValidateSession) {
|
|
111
|
-
params.append(
|
|
107
|
+
params.append("client_side_validation", "true");
|
|
112
108
|
}
|
|
113
109
|
if (popOut) {
|
|
114
|
-
params.append(
|
|
110
|
+
params.append("role", "pop_out_launcher");
|
|
115
111
|
}
|
|
116
112
|
if (endpoint === "https://checkout.dintero.com") {
|
|
117
113
|
// Default endpoint will redirect via the view endpoint
|
|
@@ -120,28 +116,29 @@ const getSessionUrl = options => {
|
|
|
120
116
|
// When a custom endpoint is set skip the view redirect endpoint since
|
|
121
117
|
// custom endpoints like localhost and PR builds does not support the
|
|
122
118
|
// serverside view flow.
|
|
123
|
-
params.append(
|
|
124
|
-
return `${endpoint}
|
|
119
|
+
params.append("sid", sid);
|
|
120
|
+
return `${padTralingSlash(endpoint)}?${params.toString()}`;
|
|
125
121
|
};
|
|
126
|
-
const padTralingSlash = endpoint => endpoint.endsWith(
|
|
122
|
+
const padTralingSlash = endpoint => endpoint.endsWith("/") ? endpoint : `${endpoint}/`;
|
|
127
123
|
const getPopOutUrl = ({
|
|
128
124
|
sid,
|
|
129
125
|
endpoint,
|
|
130
126
|
language,
|
|
131
127
|
shouldCallValidateSession
|
|
132
128
|
}) => {
|
|
133
|
-
if (shouldCallValidateSession) {
|
|
134
|
-
return `${padTralingSlash(endpoint)}?loader=true`;
|
|
135
|
-
}
|
|
136
129
|
const params = new URLSearchParams();
|
|
137
|
-
params.append(
|
|
138
|
-
params.append(
|
|
139
|
-
params.append(
|
|
140
|
-
params.append(
|
|
130
|
+
params.append("ui", "fullscreen");
|
|
131
|
+
params.append("role", "pop_out_payment");
|
|
132
|
+
params.append("sid", sid);
|
|
133
|
+
params.append("sdk", pkg.version);
|
|
141
134
|
if (language) {
|
|
142
|
-
params.append(
|
|
135
|
+
params.append("language", language);
|
|
136
|
+
}
|
|
137
|
+
if (shouldCallValidateSession) {
|
|
138
|
+
params.append("loader", "true");
|
|
139
|
+
return `${padTralingSlash(endpoint)}?${params.toString()}`;
|
|
143
140
|
}
|
|
144
|
-
return `${endpoint}
|
|
141
|
+
return `${padTralingSlash(endpoint)}?${params.toString()}`;
|
|
145
142
|
};
|
|
146
143
|
|
|
147
144
|
/**
|
|
@@ -368,11 +365,11 @@ const subscribe = options => {
|
|
|
368
365
|
|
|
369
366
|
const getBackdropZIndex = () => {
|
|
370
367
|
// Iterate all DOM items to get current highest element.
|
|
371
|
-
const elements = document.getElementsByTagName(
|
|
368
|
+
const elements = document.getElementsByTagName("*");
|
|
372
369
|
const highest = Array.from(elements).reduce((acc, element) => {
|
|
373
370
|
try {
|
|
374
371
|
const zIndexStr = document.defaultView.getComputedStyle(element, null).getPropertyValue("z-index");
|
|
375
|
-
const zIndex = parseInt(zIndexStr ||
|
|
372
|
+
const zIndex = parseInt(zIndexStr || "0");
|
|
376
373
|
if (!isNaN(zIndex) && zIndex > acc) {
|
|
377
374
|
return zIndex;
|
|
378
375
|
}
|
|
@@ -383,15 +380,15 @@ const getBackdropZIndex = () => {
|
|
|
383
380
|
return acc;
|
|
384
381
|
}, 0);
|
|
385
382
|
if (highest < 9999) {
|
|
386
|
-
return
|
|
383
|
+
return "9999";
|
|
387
384
|
}
|
|
388
385
|
return (highest + 1).toString();
|
|
389
386
|
};
|
|
390
|
-
const STYLE_ID =
|
|
391
|
-
const BACKDROP_ID =
|
|
392
|
-
const BACKDROP_DESCRIPTION =
|
|
393
|
-
const FOCUS_CHECKOUT_BUTTON_ID =
|
|
394
|
-
const CLOSE_BACKDROP_BUTTON_ID =
|
|
387
|
+
const STYLE_ID = "dintero-checkout-sdk-style";
|
|
388
|
+
const BACKDROP_ID = "dintero-checkout-sdk-backdrop";
|
|
389
|
+
const BACKDROP_DESCRIPTION = "dintero-checkout-sdk-backdrop-description";
|
|
390
|
+
const FOCUS_CHECKOUT_BUTTON_ID = "dintero-checkout-sdk-backdrop-focus";
|
|
391
|
+
const CLOSE_BACKDROP_BUTTON_ID = "dintero-checkout-sdk-backdrop-close";
|
|
395
392
|
const wrapPreventDefault = fn => {
|
|
396
393
|
// Creates a wrapped function that will invoke preventDefault() to stop
|
|
397
394
|
// the event from bubbling up the DOM tree.
|
|
@@ -408,8 +405,8 @@ const appendBackdropStyles = () => {
|
|
|
408
405
|
return;
|
|
409
406
|
}
|
|
410
407
|
// Add style to DOM
|
|
411
|
-
const style = document.createElement(
|
|
412
|
-
style.setAttribute(
|
|
408
|
+
const style = document.createElement("style");
|
|
409
|
+
style.setAttribute("id", STYLE_ID);
|
|
413
410
|
style.innerHTML = `
|
|
414
411
|
@keyframes ${BACKDROP_ID}-fade-in {
|
|
415
412
|
from {opacity: 0;}
|
|
@@ -524,7 +521,7 @@ const appendBackdropStyles = () => {
|
|
|
524
521
|
};
|
|
525
522
|
const createBackdropDOM = () => {
|
|
526
523
|
// Dark translucent backdrop element
|
|
527
|
-
const backdrop = document.createElement(
|
|
524
|
+
const backdrop = document.createElement("div");
|
|
528
525
|
backdrop.setAttribute("id", BACKDROP_ID);
|
|
529
526
|
backdrop.setAttribute("role", "dialog");
|
|
530
527
|
backdrop.style.zIndex = getBackdropZIndex();
|
|
@@ -532,7 +529,7 @@ const createBackdropDOM = () => {
|
|
|
532
529
|
};
|
|
533
530
|
const createCloseButtonDOM = label => {
|
|
534
531
|
// Close button for the top right corner
|
|
535
|
-
const button = document.createElement(
|
|
532
|
+
const button = document.createElement("button");
|
|
536
533
|
button.setAttribute("id", CLOSE_BACKDROP_BUTTON_ID);
|
|
537
534
|
button.setAttribute("type", "button");
|
|
538
535
|
button.setAttribute("aria-label", label);
|
|
@@ -556,7 +553,7 @@ const createCloseButtonDOM = label => {
|
|
|
556
553
|
};
|
|
557
554
|
const createDinteroLogoDOM = () => {
|
|
558
555
|
// Close button for the top right corner
|
|
559
|
-
const div = document.createElement(
|
|
556
|
+
const div = document.createElement("div");
|
|
560
557
|
div.innerHTML = `
|
|
561
558
|
<svg width="120px" height="22px" viewBox="0 0 630 111" version="1.1" >
|
|
562
559
|
<g id="Page-1" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
|
|
@@ -569,8 +566,8 @@ const createDinteroLogoDOM = () => {
|
|
|
569
566
|
};
|
|
570
567
|
const createLabelDOM = text => {
|
|
571
568
|
// Text about the pop out
|
|
572
|
-
const p = document.createElement(
|
|
573
|
-
p.setAttribute(
|
|
569
|
+
const p = document.createElement("p");
|
|
570
|
+
p.setAttribute("id", BACKDROP_DESCRIPTION);
|
|
574
571
|
p.innerText = text;
|
|
575
572
|
return p;
|
|
576
573
|
};
|
|
@@ -578,7 +575,7 @@ const createFocusButtonDOM = text => {
|
|
|
578
575
|
// Mock button to give the user a call to action element to click, even
|
|
579
576
|
// though the entire backdrop (except the close button) returns focus to the
|
|
580
577
|
// checkout.
|
|
581
|
-
const button = document.createElement(
|
|
578
|
+
const button = document.createElement("button");
|
|
582
579
|
button.setAttribute("id", FOCUS_CHECKOUT_BUTTON_ID);
|
|
583
580
|
button.setAttribute("type", "button");
|
|
584
581
|
button.innerText = text;
|
|
@@ -588,7 +585,7 @@ const focusTrap = e => {
|
|
|
588
585
|
// Prevent the user focusing outside of the backdrop while it is visible
|
|
589
586
|
const focusButton = document.getElementById(FOCUS_CHECKOUT_BUTTON_ID);
|
|
590
587
|
const closeButton = document.getElementById(CLOSE_BACKDROP_BUTTON_ID);
|
|
591
|
-
if (e.key ===
|
|
588
|
+
if (e.key === "Tab" || e.code === "Tab") {
|
|
592
589
|
if (document.activeElement === focusButton) {
|
|
593
590
|
closeButton.focus();
|
|
594
591
|
e.preventDefault();
|
|
@@ -615,7 +612,7 @@ const createBackdropView = options => {
|
|
|
615
612
|
closeButton.onclick = wrapPreventDefault(options.close);
|
|
616
613
|
|
|
617
614
|
// Add focus trap when backdrop is visible
|
|
618
|
-
document.addEventListener(
|
|
615
|
+
document.addEventListener("keydown", focusTrap);
|
|
619
616
|
|
|
620
617
|
// Append to document
|
|
621
618
|
backdrop.appendChild(closeButton);
|
|
@@ -637,7 +634,7 @@ const setBackdropLabels = event => {
|
|
|
637
634
|
}
|
|
638
635
|
const closeButton = document.getElementById(CLOSE_BACKDROP_BUTTON_ID);
|
|
639
636
|
if (closeButton) {
|
|
640
|
-
closeButton.setAttribute(
|
|
637
|
+
closeButton.setAttribute("aria-label", event.descriptionLabel);
|
|
641
638
|
}
|
|
642
639
|
};
|
|
643
640
|
const createBackdrop = options => {
|
|
@@ -660,7 +657,7 @@ const removeBackdrop = () => {
|
|
|
660
657
|
if (backdrop) {
|
|
661
658
|
document.body.removeChild(backdrop);
|
|
662
659
|
}
|
|
663
|
-
document.removeEventListener(
|
|
660
|
+
document.removeEventListener("keydown", focusTrap);
|
|
664
661
|
} catch (e) {
|
|
665
662
|
// Ignore errors when closing backdrop. If it fails we should not stop
|
|
666
663
|
// the rest of the application from working.
|
|
@@ -678,14 +675,14 @@ const configureButton = (button, {
|
|
|
678
675
|
styles,
|
|
679
676
|
onClick
|
|
680
677
|
}) => {
|
|
681
|
-
button.setAttribute(
|
|
682
|
-
button.setAttribute(
|
|
678
|
+
button.setAttribute("id", OPEN_POP_OUT_BUTTON_ID);
|
|
679
|
+
button.setAttribute("type", "button");
|
|
683
680
|
|
|
684
681
|
// Is clickable
|
|
685
|
-
if (disabled ===
|
|
686
|
-
button.setAttribute(
|
|
682
|
+
if (disabled === "true") {
|
|
683
|
+
button.setAttribute("disabled", disabled);
|
|
687
684
|
} else {
|
|
688
|
-
button.removeAttribute(
|
|
685
|
+
button.removeAttribute("disabled");
|
|
689
686
|
}
|
|
690
687
|
|
|
691
688
|
// Click handler
|
|
@@ -695,14 +692,14 @@ const configureButton = (button, {
|
|
|
695
692
|
event.stopPropagation();
|
|
696
693
|
|
|
697
694
|
// Update look
|
|
698
|
-
button.style.boxShadow =
|
|
695
|
+
button.style.boxShadow = "inset 0 0 10px rgba(34, 84, 65, 0.9)";
|
|
699
696
|
|
|
700
697
|
// Invoke handler
|
|
701
698
|
onClick();
|
|
702
699
|
|
|
703
700
|
// Reset look
|
|
704
701
|
window.setTimeout(() => {
|
|
705
|
-
button.style.boxShadow =
|
|
702
|
+
button.style.boxShadow = "none";
|
|
706
703
|
}, 200);
|
|
707
704
|
};
|
|
708
705
|
|
|
@@ -710,10 +707,10 @@ const configureButton = (button, {
|
|
|
710
707
|
button.innerText = label;
|
|
711
708
|
|
|
712
709
|
// Position
|
|
713
|
-
button.style.position =
|
|
714
|
-
button.style.top = top +
|
|
715
|
-
button.style.left = left +
|
|
716
|
-
button.style.right = right +
|
|
710
|
+
button.style.position = "absolute";
|
|
711
|
+
button.style.top = top + "px";
|
|
712
|
+
button.style.left = left + "px";
|
|
713
|
+
button.style.right = right + "px";
|
|
717
714
|
|
|
718
715
|
// Appearance from checkout
|
|
719
716
|
for (const [key, value] of Object.entries(styles)) {
|
|
@@ -726,7 +723,7 @@ const addPopOutButton = options => {
|
|
|
726
723
|
container
|
|
727
724
|
} = options;
|
|
728
725
|
const exists = document.getElementById(OPEN_POP_OUT_BUTTON_ID);
|
|
729
|
-
const button = exists || document.createElement(
|
|
726
|
+
const button = exists || document.createElement("button");
|
|
730
727
|
configureButton(button, options);
|
|
731
728
|
if (!exists) {
|
|
732
729
|
container.appendChild(button);
|
|
@@ -737,9 +734,9 @@ const setPopOutButtonDisabled = disabled => {
|
|
|
737
734
|
const button = document.getElementById(OPEN_POP_OUT_BUTTON_ID);
|
|
738
735
|
if (button) {
|
|
739
736
|
if (disabled) {
|
|
740
|
-
button.setAttribute(
|
|
737
|
+
button.setAttribute("disabled", disabled.toString());
|
|
741
738
|
} else {
|
|
742
|
-
button.removeAttribute(
|
|
739
|
+
button.removeAttribute("disabled");
|
|
743
740
|
}
|
|
744
741
|
}
|
|
745
742
|
} catch (e) {
|
|
@@ -762,31 +759,42 @@ const removePopOutButton = () => {
|
|
|
762
759
|
const WIDTH = Math.min(480, window.screen.width);
|
|
763
760
|
const HEIGHT = Math.min(840, window.screen.height);
|
|
764
761
|
let popOutWindow;
|
|
765
|
-
const createPopOutWindow = (url, width, height) => {
|
|
762
|
+
const createPopOutWindow = (sid, url, width, height) => {
|
|
766
763
|
return new Promise(resolve => {
|
|
767
764
|
try {
|
|
768
|
-
//
|
|
765
|
+
// Creates a centered pop up window
|
|
769
766
|
const left = window.screenX + (window.outerWidth - width) / 2;
|
|
770
767
|
const top = window.screenY + (window.outerHeight - height) / 2;
|
|
771
768
|
const features = `width=${width},height=${height},left=${left},top=${top},location=no,menubar=no,toolbar=no,status=no`;
|
|
772
|
-
|
|
769
|
+
let popOut;
|
|
770
|
+
let timeout = -1;
|
|
771
|
+
// Set up listener for application loaded message from pop out window
|
|
772
|
+
const handleAppLoaded = event => {
|
|
773
|
+
const correctSource = event.source === popOut;
|
|
774
|
+
const correctOrigin = event.origin === new URL(url).origin;
|
|
775
|
+
const correctMessage = event.data && event.data.type === "AppLoaded";
|
|
776
|
+
const correctContext = event.data.context === "popOut";
|
|
777
|
+
const correctSid = event.data.sid === sid;
|
|
778
|
+
if (correctSource && correctOrigin && correctMessage && correctContext && correctSid) {
|
|
779
|
+
clearTimeout(timeout);
|
|
780
|
+
resolve(popOut);
|
|
781
|
+
window.removeEventListener("message", handleAppLoaded);
|
|
782
|
+
}
|
|
783
|
+
};
|
|
784
|
+
window.addEventListener("message", handleAppLoaded);
|
|
785
|
+
// Open pop out
|
|
786
|
+
popOut = window.open(url, "dintero-checkout", features);
|
|
787
|
+
// Check that pop out was opened
|
|
773
788
|
if (!popOut) {
|
|
774
|
-
console.log(
|
|
789
|
+
console.log("createPopOutWindow no popOut");
|
|
775
790
|
resolve(undefined);
|
|
776
791
|
return;
|
|
777
792
|
}
|
|
778
|
-
|
|
779
|
-
|
|
793
|
+
// Trigger timeout if pop out is not loaded
|
|
794
|
+
timeout = window.setTimeout(() => {
|
|
795
|
+
console.log("createPopOutWindow timeout");
|
|
780
796
|
resolve(undefined);
|
|
781
797
|
}, 3000);
|
|
782
|
-
popOut.addEventListener('load', event => {
|
|
783
|
-
console.log('createPopOutWindow loaded', {
|
|
784
|
-
popOut,
|
|
785
|
-
event
|
|
786
|
-
});
|
|
787
|
-
clearTimeout(timeout);
|
|
788
|
-
resolve(popOut);
|
|
789
|
-
});
|
|
790
798
|
} catch (err) {
|
|
791
799
|
resolve(undefined);
|
|
792
800
|
}
|
|
@@ -802,7 +810,7 @@ const openPopOut = async options => {
|
|
|
802
810
|
|
|
803
811
|
// Open popup window
|
|
804
812
|
const url = getPopOutUrl(options);
|
|
805
|
-
popOutWindow = await createPopOutWindow(url, WIDTH, HEIGHT);
|
|
813
|
+
popOutWindow = await createPopOutWindow(options.sid, url, WIDTH, HEIGHT);
|
|
806
814
|
const focusPopOut = () => {
|
|
807
815
|
if (popOutWindow) {
|
|
808
816
|
popOutWindow.focus();
|
|
@@ -811,7 +819,7 @@ const openPopOut = async options => {
|
|
|
811
819
|
const cleanUpClosed = () => {
|
|
812
820
|
window.clearInterval(intervalId);
|
|
813
821
|
intervalId = -1;
|
|
814
|
-
window.removeEventListener(
|
|
822
|
+
window.removeEventListener("beforeunload", closePopOut);
|
|
815
823
|
popOutWindow = undefined;
|
|
816
824
|
options.onClose();
|
|
817
825
|
if (unsubscribe) {
|
|
@@ -831,7 +839,7 @@ const openPopOut = async options => {
|
|
|
831
839
|
};
|
|
832
840
|
|
|
833
841
|
// Close pop out if current window is closed
|
|
834
|
-
window.addEventListener(
|
|
842
|
+
window.addEventListener("beforeunload", closePopOut);
|
|
835
843
|
|
|
836
844
|
// Check if checkout is still open
|
|
837
845
|
intervalId = window.setInterval(checkIfPopupClosed, 200);
|
|
@@ -871,8 +879,8 @@ const setIframeHeight = (event, checkout) => {
|
|
|
871
879
|
const scrollToIframeTop = (event, checkout) => {
|
|
872
880
|
try {
|
|
873
881
|
checkout.iframe.scrollIntoView({
|
|
874
|
-
block:
|
|
875
|
-
behavior:
|
|
882
|
+
block: "start",
|
|
883
|
+
behavior: "smooth"
|
|
876
884
|
});
|
|
877
885
|
} catch (e) {
|
|
878
886
|
// Ignore error silently bug log it to the console.
|
|
@@ -931,7 +939,7 @@ const createPopOutMessageHandler = (source, checkout) => {
|
|
|
931
939
|
console.error(e);
|
|
932
940
|
}
|
|
933
941
|
} else {
|
|
934
|
-
console.error(
|
|
942
|
+
console.error("Payment Complete event missing href property");
|
|
935
943
|
}
|
|
936
944
|
}
|
|
937
945
|
};
|
|
@@ -939,7 +947,7 @@ const createPopOutMessageHandler = (source, checkout) => {
|
|
|
939
947
|
// Listens to messages from pop out window and routes the events to dedicated handlers
|
|
940
948
|
const messageRouter = event => {
|
|
941
949
|
// Check that we should handle the message
|
|
942
|
-
if (event.source === source && event.data.context ===
|
|
950
|
+
if (event.source === source && event.data.context === "popOut" && event.data.sid === checkout.options.sid) {
|
|
943
951
|
// Check if handler matches incoming event and trigger the handler if so.
|
|
944
952
|
[
|
|
945
953
|
// SDK events for managing the pop out flow.
|
|
@@ -956,11 +964,11 @@ const createPopOutMessageHandler = (source, checkout) => {
|
|
|
956
964
|
}
|
|
957
965
|
};
|
|
958
966
|
// Add messageRouter event listener to the Pop Out
|
|
959
|
-
window.addEventListener(
|
|
967
|
+
window.addEventListener("message", messageRouter);
|
|
960
968
|
|
|
961
969
|
// Return unsubscribe function
|
|
962
970
|
return () => {
|
|
963
|
-
window.removeEventListener(
|
|
971
|
+
window.removeEventListener("message", messageRouter);
|
|
964
972
|
};
|
|
965
973
|
};
|
|
966
974
|
|
|
@@ -1056,7 +1064,7 @@ const handlePopOutButtonClick = async (event, checkout) => {
|
|
|
1056
1064
|
console.error(e);
|
|
1057
1065
|
postValidationResult(checkout.iframe, checkout.options.sid, {
|
|
1058
1066
|
success: false,
|
|
1059
|
-
clientValidationError:
|
|
1067
|
+
clientValidationError: "Validation runtime error"
|
|
1060
1068
|
});
|
|
1061
1069
|
}
|
|
1062
1070
|
}
|
|
@@ -1116,9 +1124,9 @@ const cleanUpPopOut = checkout => {
|
|
|
1116
1124
|
*/
|
|
1117
1125
|
const embed = async options => {
|
|
1118
1126
|
// Create inner container to offset any styling on the container.
|
|
1119
|
-
const innerContainer = document.createElement(
|
|
1120
|
-
innerContainer.style.position =
|
|
1121
|
-
innerContainer.style[
|
|
1127
|
+
const innerContainer = document.createElement("div");
|
|
1128
|
+
innerContainer.style.position = "relative";
|
|
1129
|
+
innerContainer.style["box-sizing"] = "border-box";
|
|
1122
1130
|
const internalOptions = {
|
|
1123
1131
|
endpoint: "https://checkout.dintero.com",
|
|
1124
1132
|
innerContainer: innerContainer,
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
v0.8.1 (c) Kyle Simpson
|
|
4
4
|
MIT License: http://getify.mit-license.org
|
|
5
5
|
*/
|
|
6
|
-
var t,o,i;i=function(){var e,n,t,o=Object.prototype.toString,i="undefined"!=typeof setImmediate?function(e){return setImmediate(e)}:setTimeout;try{Object.defineProperty({},"x",{}),e=function(e,n,t,o){return Object.defineProperty(e,n,{value:t,writable:!0,configurable:!1!==o})}}catch(n){e=function(e,n,t){return e[n]=t,e}}function r(e,o){t.add(e,o),n||(n=i(t.drain))}function s(e){var n,t=typeof e;return null==e||"object"!=t&&"function"!=t||(n=e.then),"function"==typeof n&&n}function a(){for(var e=0;e<this.chain.length;e++)d(this,1===this.state?this.chain[e].success:this.chain[e].failure,this.chain[e]);this.chain.length=0}function d(e,n,t){var o,i;try{!1===n?t.reject(e.msg):(o=!0===n?e.msg:n.call(void 0,e.msg))===t.promise?t.reject(TypeError("Promise-chain cycle")):(i=s(o))?i.call(o,t.resolve,t.reject):t.resolve(o)}catch(e){t.reject(e)}}function c(e){var n,t=this;if(!t.triggered){t.triggered=!0,t.def&&(t=t.def);try{(n=s(e))?r((function(){var o=new u(t);try{n.call(e,(function(){c.apply(o,arguments)}),(function(){l.apply(o,arguments)}))}catch(e){l.call(o,e)}})):(t.msg=e,t.state=1,t.chain.length>0&&r(a,t))}catch(e){l.call(new u(t),e)}}}function l(e){var n=this;n.triggered||(n.triggered=!0,n.def&&(n=n.def),n.msg=e,n.state=2,n.chain.length>0&&r(a,n))}function p(e,n,t,o){for(var i=0;i<n.length;i++)!function(i){e.resolve(n[i]).then((function(e){t(i,e)}),o)}(i)}function u(e){this.def=e,this.triggered=!1}function f(e){this.promise=e,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function h(e){if("function"!=typeof e)throw TypeError("Not a function");if(0!==this.__NPO__)throw TypeError("Not a promise");this.__NPO__=1;var n=new f(this);this.then=function(e,t){var o={success:"function"!=typeof e||e,failure:"function"==typeof t&&t};return o.promise=new this.constructor((function(e,n){if("function"!=typeof e||"function"!=typeof n)throw TypeError("Not a function");o.resolve=e,o.reject=n})),n.chain.push(o),0!==n.state&&r(a,n),o.promise},this.catch=function(e){return this.then(void 0,e)};try{e.call(void 0,(function(e){c.call(n,e)}),(function(e){l.call(n,e)}))}catch(e){l.call(n,e)}}t=function(){var e,t,o;function i(e,n){this.fn=e,this.self=n,this.next=void 0}return{add:function(n,r){o=new i(n,r),t?t.next=o:e=o,t=o,o=void 0},drain:function(){var o=e;for(e=t=n=void 0;o;)o.fn.call(o.self),o=o.next}}}();var m=e({},"constructor",h,!1);return h.prototype=m,e(m,"__NPO__",0,!1),e(h,"resolve",(function(e){return e&&"object"==typeof e&&1===e.__NPO__?e:new this((function(n,t){if("function"!=typeof n||"function"!=typeof t)throw TypeError("Not a function");n(e)}))})),e(h,"reject",(function(e){return new this((function(n,t){if("function"!=typeof n||"function"!=typeof t)throw TypeError("Not a function");t(e)}))})),e(h,"all",(function(e){var n=this;return"[object Array]"!=o.call(e)?n.reject(TypeError("Not an array")):0===e.length?n.resolve([]):new n((function(t,o){if("function"!=typeof t||"function"!=typeof o)throw TypeError("Not a function");var i=e.length,r=Array(i),s=0;p(n,e,(function(e,n){r[e]=n,++s===i&&t(r)}),o)}))})),e(h,"race",(function(e){var n=this;return"[object Array]"!=o.call(e)?n.reject(TypeError("Not an array")):new n((function(t,o){if("function"!=typeof t||"function"!=typeof o)throw TypeError("Not a function");p(n,e,(function(e,n){t(n)}),o)}))})),h},(o=n)[t="Promise"]=o[t]||i(),e.exports&&(e.exports=o[t])}));var t="0.6.0";let o=function(e){return e.SessionNotFound="SessionNotFound",e.SessionLoaded="SessionLoaded",e.SessionUpdated="SessionUpdated",e.SessionCancel="SessionCancel",e.SessionPaymentOnHold="SessionPaymentOnHold",e.SessionPaymentAuthorized="SessionPaymentAuthorized",e.SessionPaymentError="SessionPaymentError",e.SessionLocked="SessionLocked",e.SessionLockFailed="SessionLockFailed",e.ActivePaymentProductType="ActivePaymentProductType",e.ValidateSession="ValidateSession",e}({}),i=function(e){return e.HeightChanged="HeightChanged",e.LanguageChanged="LanguageChanged",e.ScrollToTop="ScrollToTop",e.ShowPopOutButton="ShowPopOutButton",e.HidePopOutButton="HidePopOutButton",e}({});const r=e=>{window.location.assign(e)},s=e=>{const{sid:n,endpoint:o,language:i,ui:r,shouldCallValidateSession:s,popOut:a}=e;if(!o)throw new Error("Invalid endpoint");const d=new URLSearchParams;return d.append("sdk",t),r&&d.append("ui",r),i&&d.append("language",i),s&&d.append("client_side_validation","true"),a&&d.append("role","pop_out_launcher"),"https://checkout.dintero.com"===o?`${o}/v1/view/${n}?${d.toString()}`:(d.append("sid",n),`${o}/?${d.toString()}`)},a=({sid:e,endpoint:n,language:o,shouldCallValidateSession:i})=>{if(i)return`${(e=>e.endsWith("/")?e:`${e}/`)(n)}?loader=true`;const r=new URLSearchParams;return r.append("ui","fullscreen"),r.append("role","pop_out_payment"),r.append("sid",e),r.append("sdk",t),o&&r.append("language",o),`${n}/?${r.toString()}`},d=(e,n,t)=>{e.contentWindow&&e.contentWindow.postMessage({type:"ValidationResult",sid:n,...t},"*")},c=e=>{const{sid:n,endpoint:t,handler:o,eventTypes:i,checkout:r}=e,s=new URL(t),a=e=>{const t=e.origin===s.origin,a=e.source===r.iframe.contentWindow,d=e.data&&e.data.sid===n,c=-1!==i.indexOf(e.data&&e.data.type);t&&a&&d&&c&&(((e,n)=>{n.data.mid&&e&&e.postMessage({ack:n.data.mid},n.origin||"*")})(r.iframe.contentWindow,e),o(e.data,r))};window.addEventListener("message",a,!1);return{unsubscribe:()=>{window.removeEventListener("message",a,!1)}}},l="dintero-checkout-sdk-style",p="dintero-checkout-sdk-backdrop",u="dintero-checkout-sdk-backdrop-description",f="dintero-checkout-sdk-backdrop-focus",h="dintero-checkout-sdk-backdrop-close",m=e=>n=>(n.preventDefault(),n.stopPropagation(),e(),!1),g=()=>{const e=document.createElement("div");return e.setAttribute("id",p),e.setAttribute("role","dialog"),e.style.zIndex=(()=>{const e=document.getElementsByTagName("*"),n=Array.from(e).reduce(((e,n)=>{try{const t=document.defaultView.getComputedStyle(n,null).getPropertyValue("z-index"),o=parseInt(t||"0");if(!isNaN(o)&&o>e)return o}catch(e){console.error(e)}return e}),0);return n<9999?"9999":(n+1).toString()})(),e},y=e=>{const n=document.getElementById(f),t=document.getElementById(h);"Tab"!==e.key&&"Tab"!==e.code||(document.activeElement===n?(t.focus(),e.preventDefault()):(n.focus(),e.preventDefault()))},w=e=>{(()=>{if(document.getElementById(l))return;const e=document.createElement("style");e.setAttribute("id",l),e.innerHTML=`\n @keyframes ${p}-fade-in {\n from {opacity: 0;}\n to {opacity: 1;}\n }\n\n #${p} {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n background-color: rgba(0,0,0,0.9);\n background: radial-gradient(rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.8) 100%);\n cursor: pointer;\n animation: 20ms ease-out ${p}-fade-in;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 20px;\n color: #ffffff;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n font-size: 18px;\n font-weight: 400;\n line-height: normal;\n text-rendering: geometricPrecision;\n margin: 0;\n padding: 0;\n border: 0;\n vertical-align: baseline;\n line-height: normal;\n }\n\n #${p} p {\n padding: 0;\n margin: 0;\n border: 0;\n user-select: none;\n }\n\n #${f} {\n background-color: #efefef !important;\n color: #000000 !important;\n font-size: 16px !important;\n font-weight: 600 !important;\n border-radius: 200px !important;\n margin: 0 !important;\n line-height: normal !important;\n border: none !important;\n padding: 10px 20px !important;\n user-select: none !important;\n cursor: pointer !important;\n }\n #${f}:hover,\n #${f}:focus {\n outline: none !important;\n background-color: #ffffff !important;\n border: none !important;\n color: #000000 !important;\n padding: 10px 20px !important;\n margin: 0 !important;\n }\n #${f}:focus{\n outline-offset: 2px;\n outline: 1px #ffffff solid !important;\n }\n\n #${h} {\n background: transparent !important;\n padding: 0 !important;\n margin: 0 !important;\n border: none !important;\n border-radius: 4px !important;\n height: 24px !important;\n width: 24px !important;\n color: #efefef !important;\n position: absolute !important;\n top: 16px !important;\n right: 24px !important;\n transition: all 200ms ease-out !important;\n cursor: pointer !important;\n }\n\n #${h}:hover,\n #${h}:focus {\n outline: none !important;\n color: #ffffff !important;\n border: none !important;\n background: transparent !important;\n padding: 0 !important;\n margin: 0 !important;\n position: absolute;\n top: 16px;\n right: 24px;\n }\n #${h}:focus{\n outline: 1px #ffffff solid !important;\n }\n\n #${p}:before,\n #${p}:after,\n #${p} > *:before,\n #${p} > *:after {\n content: '';\n content: none;\n }\n `,document.head.appendChild(e)})();const n=g(),t=(e=>{const n=document.createElement("button");return n.setAttribute("id",h),n.setAttribute("type","button"),n.setAttribute("aria-label",e),n.innerHTML='\n <svg\n xmlns="http://www.w3.org/2000/svg"\n width="24"\n height="24"\n viewBox="0 0 24 24"\n fill="none"\n stroke="currentColor"\n stroke-width="2"\n stroke-linecap="round"\n stroke-linejoin="round"\n alt="close icon"\n >\n <line x1="18" y1="6" x2="6" y2="18"></line>\n <line x1="6" y1="6" x2="18" y2="18"></line>\n </svg>',n})(e.event.closeLabel),o=(()=>{const e=document.createElement("div");return e.innerHTML='\n <svg width="120px" height="22px" viewBox="0 0 630 111" version="1.1" >\n <g id="Page-1" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">\n <g id="Dintero" fill="#ffffff" fillRule="nonzero">\n <path d="M376.23,60.48 L376.23,73.54 L454.13,73.54 C456.31,41.55 435.85,23.71 410.61,23.71 C385.37,23.71 367.09,41.77 367.09,66.79 C367.09,92.03 386.02,110.31 411.91,110.31 C433.02,110.31 448.9,97.25 453.25,82.24 L436.5,82.24 C432.37,89.42 423.88,95.51 411.91,95.51 C395.16,95.51 382.75,83.11 382.75,66.79 C382.75,50.69 394.72,38.5 410.6,38.5 C426.48,38.5 438.45,50.68 438.45,66.79 L444.54,60.48 L376.23,60.48 Z M154.29,17.83 L171.7,17.83 L171.7,0.42 L154.29,0.42 L154.29,17.83 Z M120.34,108.13 L191.27,108.13 L191.27,93.77 L120.34,93.77 L120.34,108.13 Z M156.46,40.24 L156.46,108.13 L171.69,108.13 L171.69,45.47 C171.69,32.85 165.82,25.89 151.89,25.89 L120.34,25.89 L120.34,40.25 L156.46,40.25 L156.46,40.24 Z M499.17,25.88 L464.36,25.88 L464.36,40.24 L483.94,40.24 L484.16,108.13 L499.39,108.13 L499.17,62.44 C499.17,48.51 508.53,40.25 521.58,40.25 L535.29,40.25 L535.29,25.89 L524.41,25.89 C509.18,25.89 501.78,31.33 497.65,41.56 L495.47,47 L499.17,47.65 L499.17,25.88 Z M288.76,25.88 L310.52,25.88 L310.52,6.3 L325.75,6.3 L325.75,25.88 L359.69,25.88 L359.69,40.24 L325.75,40.24 L325.75,93.77 L359.69,93.77 L359.69,108.13 L332.49,108.13 C318.56,108.13 310.51,98.99 310.51,86.37 L310.51,40.24 L288.75,40.24 L288.75,25.88 L288.76,25.88 Z M464.35,108.13 L535.28,108.13 L535.28,93.77 L464.35,93.77 L464.35,108.13 Z M108.6,54.17 C108.6,23.06 85.54,0.43 53.77,0.43 L0.9,0.43 L0.9,108.14 L53.77,108.14 C85.53,108.13 108.6,85.5 108.6,54.17 M248.07,23.71 C234.58,23.71 223.92,31.98 220,41.55 L220,25.88 L204.77,25.88 L204.77,108.13 L220,108.13 L220,66.35 C220,53.08 224.79,38.93 243.72,38.93 C259.39,38.93 267.44,48.07 267.44,67.43 L267.44,108.12 L282.67,108.12 L282.67,64.6 C282.67,35.02 265.91,23.71 248.07,23.71 M586.2,110.31 C611.22,110.31 629.72,92.03 629.72,67.01 C629.72,41.99 611.23,23.71 586.2,23.71 C560.96,23.71 542.68,41.99 542.68,67.01 C542.68,92.03 560.96,110.31 586.2,110.31 M586.2,95.51 C570.32,95.51 558.35,83.33 558.35,67.01 C558.35,50.69 570.32,38.51 586.2,38.51 C602.08,38.51 614.05,50.69 614.05,67.01 C614.05,83.33 602.08,95.51 586.2,95.51 M16.99,92.9 L16.99,15.66 L51.8,15.66 C75.3,15.66 92.05,31.98 92.05,54.61 C92.05,76.8 75.3,92.91 51.8,92.91 L16.99,92.91 L16.99,92.9 Z" id="Shape"></path>\n </g>\n </g>\n </svg>',e})(),i=(e=>{const n=document.createElement("p");return n.setAttribute("id",u),n.innerText=e,n})(e.event.descriptionLabel),r=(e=>{const n=document.createElement("button");return n.setAttribute("id",f),n.setAttribute("type","button"),n.innerText=e,n})(e.event.focusLabel);return n.onclick=m(e.focus),r.onclick=m(e.focus),t.onclick=m(e.close),document.addEventListener("keydown",y),n.appendChild(t),n.appendChild(o),n.appendChild(i),n.appendChild(r),document.body.appendChild(n),n.focus(),n},v=()=>{try{const e=document.getElementById(p);e&&document.body.removeChild(e),document.removeEventListener("keydown",y)}catch(e){console.error(e)}},b="dintero-checkout-sdk-launch-pop-out",L=e=>{const{container:n}=e,t=document.getElementById(b),o=t||document.createElement("button");((e,{label:n,disabled:t,top:o,left:i,right:r,styles:s,onClick:a})=>{e.setAttribute("id",b),e.setAttribute("type","button"),"true"===t?e.setAttribute("disabled",t):e.removeAttribute("disabled"),e.onclick=n=>{n.preventDefault(),n.stopPropagation(),e.style.boxShadow="inset 0 0 10px rgba(34, 84, 65, 0.9)",a(),window.setTimeout((()=>{e.style.boxShadow="none"}),200)},e.innerText=n,e.style.position="absolute",e.style.top=o+"px",e.style.left=i+"px",e.style.right=r+"px";for(const[n,t]of Object.entries(s))e.style[n]=t})(o,e),t||n.appendChild(o)},S=()=>{try{const e=document.getElementById(b);e&&e.remove()}catch(e){console.error(e)}},C=Math.min(480,window.screen.width),k=Math.min(840,window.screen.height);let T;const x=async e=>{let n,t=-1;if(T&&!T.closed)return;const o=a(e);T=await((e,n,t)=>new Promise((o=>{try{const i=window.screenX+(window.outerWidth-n)/2,r=window.screenY+(window.outerHeight-t)/2,s=`width=${n},height=${t},left=${i},top=${r},location=no,menubar=no,toolbar=no,status=no`,a=window.open(e,"dintero-checkout",s);if(!a)return console.log("createPopOutWindow no popOut"),void o(void 0);const d=window.setTimeout((()=>{console.log("createPopOutWindow timeout"),o(void 0)}),3e3);a.addEventListener("load",(e=>{console.log("createPopOutWindow loaded",{popOut:a,event:e}),clearTimeout(d),o(a)}))}catch(e){o(void 0)}})))(o,C,k);const i=()=>{window.clearInterval(t),t=-1,window.removeEventListener("beforeunload",r),T=void 0,e.onClose(),n&&n()},r=()=>{T&&T.close(),i()};return window.addEventListener("beforeunload",r),t=window.setInterval((()=>{T&&T.closed&&i()}),200),n=e.onOpen(T),{close:r,focus:()=>{T&&T.focus()},popOutWindow:T}},P=(e,n)=>{j(n),e.href&&r(e.href)},E=(e,n)=>{(e.height||0===e.height)&&n.iframe.setAttribute("style",`width:100%; height:${e.height}px;`)},O=(e,n)=>{try{n.iframe.scrollIntoView({block:"start",behavior:"smooth"})}catch(e){console.error(e)}},A=(e,n)=>{e.language&&(n.language=e.language)},W=(e,n)=>{const t={internalPopOutHandler:!0,eventTypes:[i.LanguageChanged],handler:(e,n)=>{var t,o,i;t=n.iframe,o=n.options.sid,i=e.language,t.contentWindow&&t.contentWindow.postMessage({type:"SetLanguage",sid:o,language:i},"*")}},r={internalPopOutHandler:!0,eventTypes:[o.SessionCancel,o.SessionPaymentOnHold,o.SessionPaymentAuthorized,o.SessionPaymentError],handler:(n,t)=>{if(n.href){S();try{e.close()}catch(e){console.error(e)}}else console.error("Payment Complete event missing href property")}},s=o=>{o.source===e&&"popOut"===o.data.context&&o.data.sid===n.options.sid&&[t,r,...n.handlers].forEach((e=>{e.eventTypes.includes(o.data.type)&&e.handler&&(e=>{try{e()}catch(e){console.error(e)}})((()=>{e.handler(o.data,n)}))}))};return window.addEventListener("message",s),()=>{window.removeEventListener("message",s)}},$=async(e,n)=>{const{close:t,focus:o,popOutWindow:i}=await x({sid:n.options.sid,endpoint:n.options.endpoint,shouldCallValidateSession:Boolean(n.options.onValidateSession),language:e.language,onOpen:e=>W(e,n),onClose:()=>{var e,t;v(),e=n.iframe,t=n.options.sid,e.contentWindow&&e.contentWindow.postMessage({type:"ClosedPopOut",sid:t},"*"),(e=>{try{const n=document.getElementById(b);n&&(e?n.setAttribute("disabled",e.toString()):n.removeAttribute("disabled"))}catch(e){console.error(e)}})(!1),n.popOutWindow=void 0}});return i?(r=n.iframe,s=n.options.sid,r.contentWindow&&r.contentWindow.postMessage({type:"OpenedPopOut",sid:s},"*"),n.popOutWindow=i,(e=>{try{if(document.getElementById(p))return;return w(e)}catch(e){console.error(e)}})({focus:o,close:t,event:e}),!0):(((e,n)=>{e.contentWindow&&e.contentWindow.postMessage({type:"OpenPopOutFailed",sid:n},"*")})(n.iframe,n.options.sid),!1);var r,s},M=async(e,n)=>{if(await $(e,n)&&n.options.onValidateSession){t=n.iframe,i=n.options.sid,t.contentWindow&&t.contentWindow.postMessage({type:"ValidatingPopOut",sid:i},"*");const r=((e,n)=>t=>{d(n.iframe,n.options.sid,t),t.success&&n.popOutWindow?n.popOutWindow.location.href=a({sid:n.options.sid,endpoint:n.options.endpoint,shouldCallValidateSession:!1,language:e.language}):(n.popOutWindow&&n.popOutWindow.close(),console.error(t.clientValidationError))})(e,n);try{n.options.onValidateSession({type:o.ValidateSession,session:n.session,callback:r},n,r)}catch(e){console.error(e),d(n.iframe,n.options.sid,{success:!1,clientValidationError:"Validation runtime error"})}}var t,i},_=(e,n)=>{(e=>e&&e.type===i.ShowPopOutButton)(e)&&(L({container:n.options.innerContainer,label:e.openLabel,top:e.top,left:e.left,right:e.right,styles:e.styles,disabled:e.disabled,onClick:()=>M(e,n)}),(e=>{const n=document.getElementById(f);n&&(n.innerText=e.focusLabel);const t=document.getElementById(u);t&&(t.innerText=e.descriptionLabel);const o=document.getElementById(h);o&&o.setAttribute("aria-label",e.descriptionLabel)})(e))},V=(e,n)=>{e.type===i.HidePopOutButton&&S()},j=e=>{if(S(),v(),e.popOutWindow)try{e.popOutWindow.close()}catch(e){console.error(e)}};e.embed=async e=>{const n=document.createElement("div");n.style.position="relative",n.style["box-sizing"]="border-box";const r={endpoint:"https://checkout.dintero.com",innerContainer:n,...e},{container:a,sid:l,language:p,endpoint:u,onSession:f,onSessionCancel:h,onPayment:m,onPaymentAuthorized:g,onPaymentError:y,onSessionNotFound:w,onSessionLocked:b,onSessionLockFailed:L,onActivePaymentType:S,onValidateSession:C,popOut:k}=r;let T;const x=[];let W=!1;a.appendChild(n);const{iframe:$,initiate:M}=((e,n,t)=>{if(!e||!e.appendChild)throw new Error("Invalid container");const o=document.createElement("iframe");return o.setAttribute("frameborder","0"),o.setAttribute("allowTransparency","true"),o.setAttribute("style","width:100%; height:0;"),o.setAttribute("sandbox","allow-scripts allow-forms allow-same-origin allow-popups allow-popups-to-escape-sandbox"),o.setAttribute("allow","payment"),o.setAttribute("importance","high"),o.setAttribute("src",t),{iframe:o,initiate:async()=>new Promise(((n,t)=>{o.onload=()=>n(),o.onerror=()=>t(),e.appendChild(o)}))}})(n,0,s({sid:l,endpoint:u,language:p,ui:"inline",shouldCallValidateSession:void 0!==C,popOut:k})),B=(e,n,t)=>{if(!T)throw new Error("Unable to create action promise: checkout is undefined");return new Promise(((o,i)=>{const r=[];r.push(c({sid:l,endpoint:u,handler:e=>{r.forEach((e=>e.unsubscribe())),o(e)},eventTypes:[n],checkout:T,source:T.iframe.contentWindow})),r.push(c({sid:l,endpoint:u,handler:()=>{r.forEach((e=>e.unsubscribe())),i(`Received unexpected event: ${t}`)},eventTypes:[t],checkout:T,source:T.iframe.contentWindow})),e()}))},I=()=>B((()=>{((e,n)=>{e.contentWindow&&e.contentWindow.postMessage({type:"RefreshSession",sid:n},"*")})($,l)}),o.SessionUpdated,o.SessionNotFound),N=e=>{d($,l,e)},H=(e,n,i)=>(e,r)=>{if(!W){W=!0,j(r);const s=["sid","merchant_reference","transaction_id","error"].map((n=>[n,e[n]]));e.type!==o.SessionCancel||e.error||s.push(["error","cancelled"]),s.push(["language",r.language]),s.push(["sdk",t]);const a=s.filter((([e,n])=>n)).map((([e,n])=>`${e}=${n}`)).join("&");r.iframe.setAttribute("src",`${n}/embedResult/?${a}`),i(e,r)}},F=[{handler:A,eventTypes:[i.LanguageChanged]},{handler:E,eventTypes:[i.HeightChanged]},{handler:O,eventTypes:[i.ScrollToTop]},{handler:(e,n)=>{n.session=e.session,f&&f(e,n)},eventTypes:[o.SessionLoaded,o.SessionUpdated]},{eventTypes:[o.SessionPaymentOnHold],handler:m?H(0,u,m):P},{eventTypes:[o.SessionPaymentAuthorized],handler:g||m?H(0,u,g||m):P},{handler:h?H(0,u,h):P,eventTypes:[o.SessionCancel]},{handler:y?H(0,u,y):P,eventTypes:[o.SessionPaymentError]},{handler:w,eventTypes:[o.SessionNotFound]},{handler:(e,n)=>{b&&b(e,n,I)},eventTypes:[o.SessionLocked]},{handler:L,eventTypes:[o.SessionLockFailed]},{handler:S,eventTypes:[o.ActivePaymentProductType]},{handler:(e,n)=>{if(C)try{C({...e,callback:N},n,N)}catch(e){console.error(e),N({success:!1,clientValidationError:"Validation runtime error"})}},eventTypes:[o.ValidateSession]},{handler:_,eventTypes:[i.ShowPopOutButton]},{handler:V,eventTypes:[i.HidePopOutButton]}];return T={destroy:()=>{j(T),$&&(r.popOut&&v(),x.forEach((e=>e.unsubscribe())),$.parentElement&&n.removeChild($)),n.parentElement&&a.removeChild(n)},iframe:$,language:p,lockSession:()=>B((()=>{((e,n)=>{e.contentWindow&&e.contentWindow.postMessage({type:"LockSession",sid:n},"*")})($,l)}),o.SessionLocked,o.SessionLockFailed),refreshSession:I,setActivePaymentProductType:e=>{((e,n,t)=>{e.contentWindow&&e.contentWindow.postMessage({type:"SetActivePaymentProductType",sid:n,payment_product_type:t},"*")})($,l,e)},submitValidationResult:N,options:r,handlers:F,session:void 0,popOutWindow:void 0},F.forEach((({handler:e,eventTypes:n})=>{e&&x.push(c({sid:l,endpoint:u,handler:e,eventTypes:n,checkout:T,source:T.iframe.contentWindow}))})),await M(),T},e.redirect=e=>{const{sid:n,language:t,endpoint:o="https://checkout.dintero.com"}=e;r(s({sid:n,endpoint:o,language:t,shouldCallValidateSession:!1}))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
6
|
+
var t,o,i;i=function(){var e,n,t,o=Object.prototype.toString,i="undefined"!=typeof setImmediate?function(e){return setImmediate(e)}:setTimeout;try{Object.defineProperty({},"x",{}),e=function(e,n,t,o){return Object.defineProperty(e,n,{value:t,writable:!0,configurable:!1!==o})}}catch(n){e=function(e,n,t){return e[n]=t,e}}function r(e,o){t.add(e,o),n||(n=i(t.drain))}function s(e){var n,t=typeof e;return null==e||"object"!=t&&"function"!=t||(n=e.then),"function"==typeof n&&n}function a(){for(var e=0;e<this.chain.length;e++)d(this,1===this.state?this.chain[e].success:this.chain[e].failure,this.chain[e]);this.chain.length=0}function d(e,n,t){var o,i;try{!1===n?t.reject(e.msg):(o=!0===n?e.msg:n.call(void 0,e.msg))===t.promise?t.reject(TypeError("Promise-chain cycle")):(i=s(o))?i.call(o,t.resolve,t.reject):t.resolve(o)}catch(e){t.reject(e)}}function c(e){var n,t=this;if(!t.triggered){t.triggered=!0,t.def&&(t=t.def);try{(n=s(e))?r((function(){var o=new u(t);try{n.call(e,(function(){c.apply(o,arguments)}),(function(){l.apply(o,arguments)}))}catch(e){l.call(o,e)}})):(t.msg=e,t.state=1,t.chain.length>0&&r(a,t))}catch(e){l.call(new u(t),e)}}}function l(e){var n=this;n.triggered||(n.triggered=!0,n.def&&(n=n.def),n.msg=e,n.state=2,n.chain.length>0&&r(a,n))}function p(e,n,t,o){for(var i=0;i<n.length;i++)!function(i){e.resolve(n[i]).then((function(e){t(i,e)}),o)}(i)}function u(e){this.def=e,this.triggered=!1}function f(e){this.promise=e,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function h(e){if("function"!=typeof e)throw TypeError("Not a function");if(0!==this.__NPO__)throw TypeError("Not a promise");this.__NPO__=1;var n=new f(this);this.then=function(e,t){var o={success:"function"!=typeof e||e,failure:"function"==typeof t&&t};return o.promise=new this.constructor((function(e,n){if("function"!=typeof e||"function"!=typeof n)throw TypeError("Not a function");o.resolve=e,o.reject=n})),n.chain.push(o),0!==n.state&&r(a,n),o.promise},this.catch=function(e){return this.then(void 0,e)};try{e.call(void 0,(function(e){c.call(n,e)}),(function(e){l.call(n,e)}))}catch(e){l.call(n,e)}}t=function(){var e,t,o;function i(e,n){this.fn=e,this.self=n,this.next=void 0}return{add:function(n,r){o=new i(n,r),t?t.next=o:e=o,t=o,o=void 0},drain:function(){var o=e;for(e=t=n=void 0;o;)o.fn.call(o.self),o=o.next}}}();var m=e({},"constructor",h,!1);return h.prototype=m,e(m,"__NPO__",0,!1),e(h,"resolve",(function(e){return e&&"object"==typeof e&&1===e.__NPO__?e:new this((function(n,t){if("function"!=typeof n||"function"!=typeof t)throw TypeError("Not a function");n(e)}))})),e(h,"reject",(function(e){return new this((function(n,t){if("function"!=typeof n||"function"!=typeof t)throw TypeError("Not a function");t(e)}))})),e(h,"all",(function(e){var n=this;return"[object Array]"!=o.call(e)?n.reject(TypeError("Not an array")):0===e.length?n.resolve([]):new n((function(t,o){if("function"!=typeof t||"function"!=typeof o)throw TypeError("Not a function");var i=e.length,r=Array(i),s=0;p(n,e,(function(e,n){r[e]=n,++s===i&&t(r)}),o)}))})),e(h,"race",(function(e){var n=this;return"[object Array]"!=o.call(e)?n.reject(TypeError("Not an array")):new n((function(t,o){if("function"!=typeof t||"function"!=typeof o)throw TypeError("Not a function");p(n,e,(function(e,n){t(n)}),o)}))})),h},(o=n)[t="Promise"]=o[t]||i(),e.exports&&(e.exports=o[t])}));var t="0.6.2";let o=function(e){return e.SessionNotFound="SessionNotFound",e.SessionLoaded="SessionLoaded",e.SessionUpdated="SessionUpdated",e.SessionCancel="SessionCancel",e.SessionPaymentOnHold="SessionPaymentOnHold",e.SessionPaymentAuthorized="SessionPaymentAuthorized",e.SessionPaymentError="SessionPaymentError",e.SessionLocked="SessionLocked",e.SessionLockFailed="SessionLockFailed",e.ActivePaymentProductType="ActivePaymentProductType",e.ValidateSession="ValidateSession",e}({}),i=function(e){return e.HeightChanged="HeightChanged",e.LanguageChanged="LanguageChanged",e.ScrollToTop="ScrollToTop",e.ShowPopOutButton="ShowPopOutButton",e.HidePopOutButton="HidePopOutButton",e}({});const r=e=>{window.location.assign(e)},s=e=>{const{sid:n,endpoint:o,language:i,ui:r,shouldCallValidateSession:s,popOut:d}=e;if(!o)throw new Error("Invalid endpoint");const c=new URLSearchParams;return c.append("sdk",t),r&&c.append("ui",r),i&&c.append("language",i),s&&c.append("client_side_validation","true"),d&&c.append("role","pop_out_launcher"),"https://checkout.dintero.com"===o?`${o}/v1/view/${n}?${c.toString()}`:(c.append("sid",n),`${a(o)}?${c.toString()}`)},a=e=>e.endsWith("/")?e:`${e}/`,d=({sid:e,endpoint:n,language:o,shouldCallValidateSession:i})=>{const r=new URLSearchParams;return r.append("ui","fullscreen"),r.append("role","pop_out_payment"),r.append("sid",e),r.append("sdk",t),o&&r.append("language",o),i?(r.append("loader","true"),`${a(n)}?${r.toString()}`):`${a(n)}?${r.toString()}`},c=(e,n,t)=>{e.contentWindow&&e.contentWindow.postMessage({type:"ValidationResult",sid:n,...t},"*")},l=e=>{const{sid:n,endpoint:t,handler:o,eventTypes:i,checkout:r}=e,s=new URL(t),a=e=>{const t=e.origin===s.origin,a=e.source===r.iframe.contentWindow,d=e.data&&e.data.sid===n,c=-1!==i.indexOf(e.data&&e.data.type);t&&a&&d&&c&&(((e,n)=>{n.data.mid&&e&&e.postMessage({ack:n.data.mid},n.origin||"*")})(r.iframe.contentWindow,e),o(e.data,r))};window.addEventListener("message",a,!1);return{unsubscribe:()=>{window.removeEventListener("message",a,!1)}}},p="dintero-checkout-sdk-style",u="dintero-checkout-sdk-backdrop",f="dintero-checkout-sdk-backdrop-description",h="dintero-checkout-sdk-backdrop-focus",m="dintero-checkout-sdk-backdrop-close",g=e=>n=>(n.preventDefault(),n.stopPropagation(),e(),!1),y=()=>{const e=document.createElement("div");return e.setAttribute("id",u),e.setAttribute("role","dialog"),e.style.zIndex=(()=>{const e=document.getElementsByTagName("*"),n=Array.from(e).reduce(((e,n)=>{try{const t=document.defaultView.getComputedStyle(n,null).getPropertyValue("z-index"),o=parseInt(t||"0");if(!isNaN(o)&&o>e)return o}catch(e){console.error(e)}return e}),0);return n<9999?"9999":(n+1).toString()})(),e},w=e=>{const n=document.getElementById(h),t=document.getElementById(m);"Tab"!==e.key&&"Tab"!==e.code||(document.activeElement===n?(t.focus(),e.preventDefault()):(n.focus(),e.preventDefault()))},v=e=>{(()=>{if(document.getElementById(p))return;const e=document.createElement("style");e.setAttribute("id",p),e.innerHTML=`\n @keyframes ${u}-fade-in {\n from {opacity: 0;}\n to {opacity: 1;}\n }\n\n #${u} {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n background-color: rgba(0,0,0,0.9);\n background: radial-gradient(rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.8) 100%);\n cursor: pointer;\n animation: 20ms ease-out ${u}-fade-in;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 20px;\n color: #ffffff;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n font-size: 18px;\n font-weight: 400;\n line-height: normal;\n text-rendering: geometricPrecision;\n margin: 0;\n padding: 0;\n border: 0;\n vertical-align: baseline;\n line-height: normal;\n }\n\n #${u} p {\n padding: 0;\n margin: 0;\n border: 0;\n user-select: none;\n }\n\n #${h} {\n background-color: #efefef !important;\n color: #000000 !important;\n font-size: 16px !important;\n font-weight: 600 !important;\n border-radius: 200px !important;\n margin: 0 !important;\n line-height: normal !important;\n border: none !important;\n padding: 10px 20px !important;\n user-select: none !important;\n cursor: pointer !important;\n }\n #${h}:hover,\n #${h}:focus {\n outline: none !important;\n background-color: #ffffff !important;\n border: none !important;\n color: #000000 !important;\n padding: 10px 20px !important;\n margin: 0 !important;\n }\n #${h}:focus{\n outline-offset: 2px;\n outline: 1px #ffffff solid !important;\n }\n\n #${m} {\n background: transparent !important;\n padding: 0 !important;\n margin: 0 !important;\n border: none !important;\n border-radius: 4px !important;\n height: 24px !important;\n width: 24px !important;\n color: #efefef !important;\n position: absolute !important;\n top: 16px !important;\n right: 24px !important;\n transition: all 200ms ease-out !important;\n cursor: pointer !important;\n }\n\n #${m}:hover,\n #${m}:focus {\n outline: none !important;\n color: #ffffff !important;\n border: none !important;\n background: transparent !important;\n padding: 0 !important;\n margin: 0 !important;\n position: absolute;\n top: 16px;\n right: 24px;\n }\n #${m}:focus{\n outline: 1px #ffffff solid !important;\n }\n\n #${u}:before,\n #${u}:after,\n #${u} > *:before,\n #${u} > *:after {\n content: '';\n content: none;\n }\n `,document.head.appendChild(e)})();const n=y(),t=(e=>{const n=document.createElement("button");return n.setAttribute("id",m),n.setAttribute("type","button"),n.setAttribute("aria-label",e),n.innerHTML='\n <svg\n xmlns="http://www.w3.org/2000/svg"\n width="24"\n height="24"\n viewBox="0 0 24 24"\n fill="none"\n stroke="currentColor"\n stroke-width="2"\n stroke-linecap="round"\n stroke-linejoin="round"\n alt="close icon"\n >\n <line x1="18" y1="6" x2="6" y2="18"></line>\n <line x1="6" y1="6" x2="18" y2="18"></line>\n </svg>',n})(e.event.closeLabel),o=(()=>{const e=document.createElement("div");return e.innerHTML='\n <svg width="120px" height="22px" viewBox="0 0 630 111" version="1.1" >\n <g id="Page-1" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">\n <g id="Dintero" fill="#ffffff" fillRule="nonzero">\n <path d="M376.23,60.48 L376.23,73.54 L454.13,73.54 C456.31,41.55 435.85,23.71 410.61,23.71 C385.37,23.71 367.09,41.77 367.09,66.79 C367.09,92.03 386.02,110.31 411.91,110.31 C433.02,110.31 448.9,97.25 453.25,82.24 L436.5,82.24 C432.37,89.42 423.88,95.51 411.91,95.51 C395.16,95.51 382.75,83.11 382.75,66.79 C382.75,50.69 394.72,38.5 410.6,38.5 C426.48,38.5 438.45,50.68 438.45,66.79 L444.54,60.48 L376.23,60.48 Z M154.29,17.83 L171.7,17.83 L171.7,0.42 L154.29,0.42 L154.29,17.83 Z M120.34,108.13 L191.27,108.13 L191.27,93.77 L120.34,93.77 L120.34,108.13 Z M156.46,40.24 L156.46,108.13 L171.69,108.13 L171.69,45.47 C171.69,32.85 165.82,25.89 151.89,25.89 L120.34,25.89 L120.34,40.25 L156.46,40.25 L156.46,40.24 Z M499.17,25.88 L464.36,25.88 L464.36,40.24 L483.94,40.24 L484.16,108.13 L499.39,108.13 L499.17,62.44 C499.17,48.51 508.53,40.25 521.58,40.25 L535.29,40.25 L535.29,25.89 L524.41,25.89 C509.18,25.89 501.78,31.33 497.65,41.56 L495.47,47 L499.17,47.65 L499.17,25.88 Z M288.76,25.88 L310.52,25.88 L310.52,6.3 L325.75,6.3 L325.75,25.88 L359.69,25.88 L359.69,40.24 L325.75,40.24 L325.75,93.77 L359.69,93.77 L359.69,108.13 L332.49,108.13 C318.56,108.13 310.51,98.99 310.51,86.37 L310.51,40.24 L288.75,40.24 L288.75,25.88 L288.76,25.88 Z M464.35,108.13 L535.28,108.13 L535.28,93.77 L464.35,93.77 L464.35,108.13 Z M108.6,54.17 C108.6,23.06 85.54,0.43 53.77,0.43 L0.9,0.43 L0.9,108.14 L53.77,108.14 C85.53,108.13 108.6,85.5 108.6,54.17 M248.07,23.71 C234.58,23.71 223.92,31.98 220,41.55 L220,25.88 L204.77,25.88 L204.77,108.13 L220,108.13 L220,66.35 C220,53.08 224.79,38.93 243.72,38.93 C259.39,38.93 267.44,48.07 267.44,67.43 L267.44,108.12 L282.67,108.12 L282.67,64.6 C282.67,35.02 265.91,23.71 248.07,23.71 M586.2,110.31 C611.22,110.31 629.72,92.03 629.72,67.01 C629.72,41.99 611.23,23.71 586.2,23.71 C560.96,23.71 542.68,41.99 542.68,67.01 C542.68,92.03 560.96,110.31 586.2,110.31 M586.2,95.51 C570.32,95.51 558.35,83.33 558.35,67.01 C558.35,50.69 570.32,38.51 586.2,38.51 C602.08,38.51 614.05,50.69 614.05,67.01 C614.05,83.33 602.08,95.51 586.2,95.51 M16.99,92.9 L16.99,15.66 L51.8,15.66 C75.3,15.66 92.05,31.98 92.05,54.61 C92.05,76.8 75.3,92.91 51.8,92.91 L16.99,92.91 L16.99,92.9 Z" id="Shape"></path>\n </g>\n </g>\n </svg>',e})(),i=(e=>{const n=document.createElement("p");return n.setAttribute("id",f),n.innerText=e,n})(e.event.descriptionLabel),r=(e=>{const n=document.createElement("button");return n.setAttribute("id",h),n.setAttribute("type","button"),n.innerText=e,n})(e.event.focusLabel);return n.onclick=g(e.focus),r.onclick=g(e.focus),t.onclick=g(e.close),document.addEventListener("keydown",w),n.appendChild(t),n.appendChild(o),n.appendChild(i),n.appendChild(r),document.body.appendChild(n),n.focus(),n},b=()=>{try{const e=document.getElementById(u);e&&document.body.removeChild(e),document.removeEventListener("keydown",w)}catch(e){console.error(e)}},L="dintero-checkout-sdk-launch-pop-out",S=e=>{const{container:n}=e,t=document.getElementById(L),o=t||document.createElement("button");((e,{label:n,disabled:t,top:o,left:i,right:r,styles:s,onClick:a})=>{e.setAttribute("id",L),e.setAttribute("type","button"),"true"===t?e.setAttribute("disabled",t):e.removeAttribute("disabled"),e.onclick=n=>{n.preventDefault(),n.stopPropagation(),e.style.boxShadow="inset 0 0 10px rgba(34, 84, 65, 0.9)",a(),window.setTimeout((()=>{e.style.boxShadow="none"}),200)},e.innerText=n,e.style.position="absolute",e.style.top=o+"px",e.style.left=i+"px",e.style.right=r+"px";for(const[n,t]of Object.entries(s))e.style[n]=t})(o,e),t||n.appendChild(o)},C=()=>{try{const e=document.getElementById(L);e&&e.remove()}catch(e){console.error(e)}},k=Math.min(480,window.screen.width),x=Math.min(840,window.screen.height);let T;const E=async e=>{let n,t=-1;if(T&&!T.closed)return;const o=d(e);T=await((e,n,t,o)=>new Promise((i=>{try{const r=window.screenX+(window.outerWidth-t)/2,s=window.screenY+(window.outerHeight-o)/2,a=`width=${t},height=${o},left=${r},top=${s},location=no,menubar=no,toolbar=no,status=no`;let d,c=-1;const l=t=>{const o=t.source===d,r=t.origin===new URL(n).origin,s=t.data&&"AppLoaded"===t.data.type,a="popOut"===t.data.context,p=t.data.sid===e;o&&r&&s&&a&&p&&(clearTimeout(c),i(d),window.removeEventListener("message",l))};if(window.addEventListener("message",l),d=window.open(n,"dintero-checkout",a),!d)return console.log("createPopOutWindow no popOut"),void i(void 0);c=window.setTimeout((()=>{console.log("createPopOutWindow timeout"),i(void 0)}),3e3)}catch(e){i(void 0)}})))(e.sid,o,k,x);const i=()=>{window.clearInterval(t),t=-1,window.removeEventListener("beforeunload",r),T=void 0,e.onClose(),n&&n()},r=()=>{T&&T.close(),i()};return window.addEventListener("beforeunload",r),t=window.setInterval((()=>{T&&T.closed&&i()}),200),n=e.onOpen(T),{close:r,focus:()=>{T&&T.focus()},popOutWindow:T}},P=(e,n)=>{B(n),e.href&&r(e.href)},O=(e,n)=>{(e.height||0===e.height)&&n.iframe.setAttribute("style",`width:100%; height:${e.height}px;`)},A=(e,n)=>{try{n.iframe.scrollIntoView({block:"start",behavior:"smooth"})}catch(e){console.error(e)}},W=(e,n)=>{e.language&&(n.language=e.language)},$=(e,n)=>{const t={internalPopOutHandler:!0,eventTypes:[i.LanguageChanged],handler:(e,n)=>{var t,o,i;t=n.iframe,o=n.options.sid,i=e.language,t.contentWindow&&t.contentWindow.postMessage({type:"SetLanguage",sid:o,language:i},"*")}},r={internalPopOutHandler:!0,eventTypes:[o.SessionCancel,o.SessionPaymentOnHold,o.SessionPaymentAuthorized,o.SessionPaymentError],handler:(n,t)=>{if(n.href){C();try{e.close()}catch(e){console.error(e)}}else console.error("Payment Complete event missing href property")}},s=o=>{o.source===e&&"popOut"===o.data.context&&o.data.sid===n.options.sid&&[t,r,...n.handlers].forEach((e=>{e.eventTypes.includes(o.data.type)&&e.handler&&(e=>{try{e()}catch(e){console.error(e)}})((()=>{e.handler(o.data,n)}))}))};return window.addEventListener("message",s),()=>{window.removeEventListener("message",s)}},M=async(e,n)=>{const{close:t,focus:o,popOutWindow:i}=await E({sid:n.options.sid,endpoint:n.options.endpoint,shouldCallValidateSession:Boolean(n.options.onValidateSession),language:e.language,onOpen:e=>$(e,n),onClose:()=>{var e,t;b(),e=n.iframe,t=n.options.sid,e.contentWindow&&e.contentWindow.postMessage({type:"ClosedPopOut",sid:t},"*"),(e=>{try{const n=document.getElementById(L);n&&(e?n.setAttribute("disabled",e.toString()):n.removeAttribute("disabled"))}catch(e){console.error(e)}})(!1),n.popOutWindow=void 0}});return i?(r=n.iframe,s=n.options.sid,r.contentWindow&&r.contentWindow.postMessage({type:"OpenedPopOut",sid:s},"*"),n.popOutWindow=i,(e=>{try{if(document.getElementById(u))return;return v(e)}catch(e){console.error(e)}})({focus:o,close:t,event:e}),!0):(((e,n)=>{e.contentWindow&&e.contentWindow.postMessage({type:"OpenPopOutFailed",sid:n},"*")})(n.iframe,n.options.sid),!1);var r,s},_=async(e,n)=>{if(await M(e,n)&&n.options.onValidateSession){t=n.iframe,i=n.options.sid,t.contentWindow&&t.contentWindow.postMessage({type:"ValidatingPopOut",sid:i},"*");const r=((e,n)=>t=>{c(n.iframe,n.options.sid,t),t.success&&n.popOutWindow?n.popOutWindow.location.href=d({sid:n.options.sid,endpoint:n.options.endpoint,shouldCallValidateSession:!1,language:e.language}):(n.popOutWindow&&n.popOutWindow.close(),console.error(t.clientValidationError))})(e,n);try{n.options.onValidateSession({type:o.ValidateSession,session:n.session,callback:r},n,r)}catch(e){console.error(e),c(n.iframe,n.options.sid,{success:!1,clientValidationError:"Validation runtime error"})}}var t,i},V=(e,n)=>{(e=>e&&e.type===i.ShowPopOutButton)(e)&&(S({container:n.options.innerContainer,label:e.openLabel,top:e.top,left:e.left,right:e.right,styles:e.styles,disabled:e.disabled,onClick:()=>_(e,n)}),(e=>{const n=document.getElementById(h);n&&(n.innerText=e.focusLabel);const t=document.getElementById(f);t&&(t.innerText=e.descriptionLabel);const o=document.getElementById(m);o&&o.setAttribute("aria-label",e.descriptionLabel)})(e))},j=(e,n)=>{e.type===i.HidePopOutButton&&C()},B=e=>{if(C(),b(),e.popOutWindow)try{e.popOutWindow.close()}catch(e){console.error(e)}};e.embed=async e=>{const n=document.createElement("div");n.style.position="relative",n.style["box-sizing"]="border-box";const r={endpoint:"https://checkout.dintero.com",innerContainer:n,...e},{container:a,sid:d,language:p,endpoint:u,onSession:f,onSessionCancel:h,onPayment:m,onPaymentAuthorized:g,onPaymentError:y,onSessionNotFound:w,onSessionLocked:v,onSessionLockFailed:L,onActivePaymentType:S,onValidateSession:C,popOut:k}=r;let x;const T=[];let E=!1;a.appendChild(n);const{iframe:$,initiate:M}=((e,n,t)=>{if(!e||!e.appendChild)throw new Error("Invalid container");const o=document.createElement("iframe");return o.setAttribute("frameborder","0"),o.setAttribute("allowTransparency","true"),o.setAttribute("style","width:100%; height:0;"),o.setAttribute("sandbox","allow-scripts allow-forms allow-same-origin allow-popups allow-popups-to-escape-sandbox"),o.setAttribute("allow","payment"),o.setAttribute("importance","high"),o.setAttribute("src",t),{iframe:o,initiate:async()=>new Promise(((n,t)=>{o.onload=()=>n(),o.onerror=()=>t(),e.appendChild(o)}))}})(n,0,s({sid:d,endpoint:u,language:p,ui:"inline",shouldCallValidateSession:void 0!==C,popOut:k})),_=(e,n,t)=>{if(!x)throw new Error("Unable to create action promise: checkout is undefined");return new Promise(((o,i)=>{const r=[];r.push(l({sid:d,endpoint:u,handler:e=>{r.forEach((e=>e.unsubscribe())),o(e)},eventTypes:[n],checkout:x,source:x.iframe.contentWindow})),r.push(l({sid:d,endpoint:u,handler:()=>{r.forEach((e=>e.unsubscribe())),i(`Received unexpected event: ${t}`)},eventTypes:[t],checkout:x,source:x.iframe.contentWindow})),e()}))},I=()=>_((()=>{((e,n)=>{e.contentWindow&&e.contentWindow.postMessage({type:"RefreshSession",sid:n},"*")})($,d)}),o.SessionUpdated,o.SessionNotFound),N=e=>{c($,d,e)},H=(e,n,i)=>(e,r)=>{if(!E){E=!0,B(r);const s=["sid","merchant_reference","transaction_id","error"].map((n=>[n,e[n]]));e.type!==o.SessionCancel||e.error||s.push(["error","cancelled"]),s.push(["language",r.language]),s.push(["sdk",t]);const a=s.filter((([e,n])=>n)).map((([e,n])=>`${e}=${n}`)).join("&");r.iframe.setAttribute("src",`${n}/embedResult/?${a}`),i(e,r)}},F=[{handler:W,eventTypes:[i.LanguageChanged]},{handler:O,eventTypes:[i.HeightChanged]},{handler:A,eventTypes:[i.ScrollToTop]},{handler:(e,n)=>{n.session=e.session,f&&f(e,n)},eventTypes:[o.SessionLoaded,o.SessionUpdated]},{eventTypes:[o.SessionPaymentOnHold],handler:m?H(0,u,m):P},{eventTypes:[o.SessionPaymentAuthorized],handler:g||m?H(0,u,g||m):P},{handler:h?H(0,u,h):P,eventTypes:[o.SessionCancel]},{handler:y?H(0,u,y):P,eventTypes:[o.SessionPaymentError]},{handler:w,eventTypes:[o.SessionNotFound]},{handler:(e,n)=>{v&&v(e,n,I)},eventTypes:[o.SessionLocked]},{handler:L,eventTypes:[o.SessionLockFailed]},{handler:S,eventTypes:[o.ActivePaymentProductType]},{handler:(e,n)=>{if(C)try{C({...e,callback:N},n,N)}catch(e){console.error(e),N({success:!1,clientValidationError:"Validation runtime error"})}},eventTypes:[o.ValidateSession]},{handler:V,eventTypes:[i.ShowPopOutButton]},{handler:j,eventTypes:[i.HidePopOutButton]}];return x={destroy:()=>{B(x),$&&(r.popOut&&b(),T.forEach((e=>e.unsubscribe())),$.parentElement&&n.removeChild($)),n.parentElement&&a.removeChild(n)},iframe:$,language:p,lockSession:()=>_((()=>{((e,n)=>{e.contentWindow&&e.contentWindow.postMessage({type:"LockSession",sid:n},"*")})($,d)}),o.SessionLocked,o.SessionLockFailed),refreshSession:I,setActivePaymentProductType:e=>{((e,n,t)=>{e.contentWindow&&e.contentWindow.postMessage({type:"SetActivePaymentProductType",sid:n,payment_product_type:t},"*")})($,d,e)},submitValidationResult:N,options:r,handlers:F,session:void 0,popOutWindow:void 0},F.forEach((({handler:e,eventTypes:n})=>{e&&T.push(l({sid:d,endpoint:u,handler:e,eventTypes:n,checkout:x,source:x.iframe.contentWindow}))})),await M(),x},e.redirect=e=>{const{sid:n,language:t,endpoint:o="https://checkout.dintero.com"}=e;r(s({sid:n,endpoint:o,language:t,shouldCallValidateSession:!1}))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
7
7
|
//# sourceMappingURL=dintero-checkout-web-sdk.umd.min.js.map
|