@fat-zebra/sdk 1.5.5 → 1.5.7-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/.idea/fatzebra-js.iml +12 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/prettier.xml +6 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/dist/applepay/applepay.d.ts +22 -7
  6. package/dist/applepay/applepay.js +99 -21
  7. package/dist/applepay/applepaymanager.d.ts +28 -0
  8. package/dist/applepay/applepaymanager.js +115 -0
  9. package/dist/applepay/clients/apple-pay-client.d.ts +9 -5
  10. package/dist/applepay/clients/apple-pay-client.js +10 -4
  11. package/dist/applepay/clients/paynow-client.d.ts +4 -2
  12. package/dist/applepay/clients/paynow-client.js +2 -7
  13. package/dist/applepay/types.d.ts +15 -0
  14. package/dist/applepay/types.js +1 -0
  15. package/dist/click_to_pay/index.d.ts +1 -0
  16. package/dist/click_to_pay/index.js +42 -6
  17. package/dist/click_to_pay/types.d.ts +12 -2
  18. package/dist/fatzebra.css +91 -0
  19. package/dist/hpp/hpp.d.ts +4 -0
  20. package/dist/hpp/hpp.js +26 -5
  21. package/dist/local/fatzebra.js +19684 -0
  22. package/dist/local/fatzebra.js.map +1 -1
  23. package/dist/main.d.ts +2 -0
  24. package/dist/main.js +24 -2
  25. package/dist/production/fatzebra.css +91 -0
  26. package/dist/production/fatzebra.js +2 -0
  27. package/dist/react/ApplePay.d.ts +9 -0
  28. package/dist/react/ApplePay.js +11 -0
  29. package/dist/react/ApplePayButton.d.ts +8 -0
  30. package/dist/react/ApplePayButton.js +18 -0
  31. package/dist/react/{url.d.ts → applePayUrl.d.ts} +2 -2
  32. package/dist/react/applePayUrl.js +19 -0
  33. package/dist/react/index.d.ts +2 -1
  34. package/dist/react/index.js +2 -1
  35. package/dist/react/useFatZebra.js +8 -57
  36. package/dist/react/useMessage.d.ts +10 -0
  37. package/dist/react/useMessage.js +70 -0
  38. package/dist/sandbox/fatzebra.css +91 -0
  39. package/dist/sandbox/fatzebra.js +2 -0
  40. package/dist/sandbox/fatzebra.js.LICENSE.txt +1 -0
  41. package/dist/sca/cardinal.d.ts +2 -11
  42. package/dist/sca/cardinal.js +4 -10
  43. package/dist/sca/index.d.ts +11 -1
  44. package/dist/sca/index.js +3 -38
  45. package/dist/sca/scenarios/enrollment.js +12 -0
  46. package/dist/sca/types/cardinal_types.d.ts +61 -0
  47. package/dist/sca/types/cardinal_types.js +11 -0
  48. package/dist/sca/types.d.ts +4 -1
  49. package/dist/sca/types.js +1 -0
  50. package/dist/sca/utility/index.d.ts +7 -0
  51. package/dist/sca/utility/index.js +39 -0
  52. package/dist/shared/bridge-client.d.ts +5 -1
  53. package/dist/shared/bridge-client.js +19 -1
  54. package/dist/shared/env.development.d.ts +3 -3
  55. package/dist/shared/env.development.js +3 -3
  56. package/dist/shared/envs/local.d.ts +3 -3
  57. package/dist/shared/envs/local.js +3 -3
  58. package/dist/shared/event-manager.d.ts +1 -1
  59. package/dist/shared/post-message-client.d.ts +2 -0
  60. package/dist/shared/post-message-client.js +1 -1
  61. package/dist/shared/types.d.ts +28 -13
  62. package/dist/shared/types.js +11 -1
  63. package/dist/src/applepay/applepaymanager.js +279 -0
  64. package/dist/src/applepay/applepaymanager.js.map +1 -0
  65. package/dist/src/react/ApplePayButton.js +56 -0
  66. package/dist/src/react/ApplePayButton.js.map +1 -0
  67. package/dist/src/react/{url.js → applePayUrl.js} +7 -21
  68. package/dist/src/react/applePayUrl.js.map +1 -0
  69. package/dist/src/react/applePayUrl.test.js +57 -0
  70. package/dist/src/react/applePayUrl.test.js.map +1 -0
  71. package/dist/src/react/useFatZebra.js +7 -56
  72. package/dist/src/react/useFatZebra.js.map +1 -1
  73. package/dist/src/react/useMessage.js +140 -0
  74. package/dist/src/react/useMessage.js.map +1 -0
  75. package/dist/src/react/useMessage.test.js +222 -0
  76. package/dist/src/react/useMessage.test.js.map +1 -0
  77. package/dist/src/validation/validators/apple-pay-load-params-button-validator.js +19 -0
  78. package/dist/src/validation/validators/apple-pay-load-params-button-validator.js.map +1 -0
  79. package/dist/staging/fatzebra.css +91 -0
  80. package/dist/staging/fatzebra.js +19684 -0
  81. package/dist/staging/fatzebra.js.map +1 -0
  82. package/dist/staging/index.html +247 -0
  83. package/dist/validation/schemas/applepay/load-params.json +31 -0
  84. package/dist/validation/schemas/applepay/options.json +115 -0
  85. package/dist/validation/schemas/applepay/payment-intent.json +42 -0
  86. package/dist/validation/schemas/click-to-pay/options.json +33 -3
  87. package/dist/validation/validators/apple-pay-load-params-button-validator.d.ts +3 -0
  88. package/dist/validation/validators/apple-pay-load-params-button-validator.js +12 -0
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/package.json +4 -3
  92. package/tsconfig.json +1 -1
  93. package/dist/paypal/paypal-button.d.ts +0 -31
  94. package/dist/paypal/paypal-button.js +0 -199
  95. package/dist/paypal/paypal-checkout.d.ts +0 -21
  96. package/dist/paypal/paypal-checkout.js +0 -100
  97. package/dist/paypal/types.d.ts +0 -188
  98. package/dist/paypal/types.js +0 -5
  99. package/dist/paypal/validation.d.ts +0 -4
  100. package/dist/paypal/validation.js +0 -65
  101. package/dist/react/url.js +0 -33
  102. package/dist/src/paypal/paypal-button.js +0 -311
  103. package/dist/src/paypal/paypal-button.js.map +0 -1
  104. package/dist/src/paypal/paypal-button.test.js +0 -41
  105. package/dist/src/paypal/paypal-button.test.js.map +0 -1
  106. package/dist/src/paypal/paypal-checkout.js +0 -111
  107. package/dist/src/paypal/paypal-checkout.js.map +0 -1
  108. package/dist/src/paypal/paypal-checkout.test.js +0 -167
  109. package/dist/src/paypal/paypal-checkout.test.js.map +0 -1
  110. package/dist/src/paypal/types.js +0 -9
  111. package/dist/src/paypal/types.js.map +0 -1
  112. package/dist/src/paypal/validation.js +0 -73
  113. package/dist/src/paypal/validation.js.map +0 -1
  114. package/dist/src/react/url.js.map +0 -1
  115. package/dist/src/react/url.test.js +0 -88
  116. package/dist/src/react/url.test.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ import React, { HTMLProps } from "react";
2
+ import * as FatZebra from "../shared/types";
3
+ type FrameProps = {
4
+ handlers: FatZebra.Handlers;
5
+ config: FatZebra.PaymentConfig;
6
+ iframeProps?: HTMLProps<HTMLIFrameElement>;
7
+ };
8
+ declare const ApplePay: ({ handlers, config, iframeProps }: FrameProps) => React.JSX.Element;
9
+ export default ApplePay;
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import useFatZebra from "./useFatZebra";
3
+ const ApplePay = ({ handlers, config, iframeProps }) => {
4
+ const { applePayUrl } = useFatZebra({
5
+ config: Object.assign(Object.assign({}, config), { options: Object.assign(Object.assign({}, config.options), { applepay: true }) }),
6
+ handlers: handlers,
7
+ });
8
+ return (React.createElement("div", null,
9
+ React.createElement("iframe", Object.assign({ src: applePayUrl, allow: "payment", "data-test-id": "apple-pay", title: "apple-pay-button" }, iframeProps))));
10
+ };
11
+ export default ApplePay;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import * as FatZebra from "../shared/types";
3
+ type FrameProps = {
4
+ handlers: FatZebra.Handlers;
5
+ config: FatZebra.PaymentConfig;
6
+ };
7
+ declare const ApplePayButton: ({ handlers, config }: FrameProps) => React.JSX.Element;
8
+ export default ApplePayButton;
@@ -0,0 +1,18 @@
1
+ import React, { useEffect } from "react";
2
+ import { ApplePay } from "../applepay";
3
+ import useMessage from "./useMessage";
4
+ const ApplePayButton = ({ handlers, config }) => {
5
+ useMessage({
6
+ paymentIntent: config.paymentIntent,
7
+ handlers: handlers,
8
+ });
9
+ useEffect(() => {
10
+ new ApplePay(config).load({
11
+ containerId: 'applePayButton',
12
+ paymentIntent: config.paymentIntent,
13
+ options: config.options
14
+ });
15
+ }, []);
16
+ return React.createElement("div", { id: "applePayButton", style: { height: '100%', width: '100%' } });
17
+ };
18
+ export default ApplePayButton;
@@ -8,5 +8,5 @@ type RequiredURLValues = {
8
8
  currency: string;
9
9
  };
10
10
  type UrlValues = RequiredURLValues & OptionalUrlValues;
11
- declare const generatePaymentURL: (values: UrlValues, environment?: Environment) => string;
12
- export { generatePaymentURL };
11
+ declare const generateApplePayUrl: (values: UrlValues, environment?: Environment) => string;
12
+ export { generateApplePayUrl };
@@ -0,0 +1,19 @@
1
+ import { parseTemplate } from 'url-template';
2
+ import env, { Environment } from "../shared/env";
3
+ const generateApplePayUrl = (values, environment) => {
4
+ const queryParts = [
5
+ "applepay"
6
+ ];
7
+ const environmentConfig = env[environment || Environment.sandbox];
8
+ const urlTemplate = parseTemplate(`${environmentConfig.payNowUrl}/sdk/{merchant}/{reference}/{currency}/{amount}/{verification}{?${queryParts.join(",")}}`);
9
+ const url = urlTemplate.expand({
10
+ merchant: values.merchant,
11
+ reference: values.reference,
12
+ currency: values.currency,
13
+ amount: values.amount,
14
+ verification: values.hash,
15
+ applepay: values.applepay
16
+ });
17
+ return url;
18
+ };
19
+ export { generateApplePayUrl };
@@ -1,4 +1,5 @@
1
1
  import VerifyCard from "./VerifyCard";
2
2
  import VerifyExistingCard from "./VerifyExistingCard";
3
3
  import submitForm from "./submitForm";
4
- export { VerifyCard, VerifyExistingCard, submitForm };
4
+ import ApplePayButton from "./ApplePayButton";
5
+ export { VerifyCard, VerifyExistingCard, submitForm, ApplePayButton };
@@ -1,4 +1,5 @@
1
1
  import VerifyCard from "./VerifyCard";
2
2
  import VerifyExistingCard from "./VerifyExistingCard";
3
3
  import submitForm from "./submitForm";
4
- export { VerifyCard, VerifyExistingCard, submitForm };
4
+ import ApplePayButton from "./ApplePayButton";
5
+ export { VerifyCard, VerifyExistingCard, submitForm, ApplePayButton };
@@ -1,9 +1,10 @@
1
- import { useEffect, useMemo } from "react";
1
+ import { useMemo } from "react";
2
2
  import * as FatZebra from "../shared/types";
3
3
  import { generatePaymentURL } from "./paymentUrl";
4
4
  import Sca from "../sca";
5
5
  import GatewayClient from "../shared/api-gateway-client";
6
6
  import { generateVerifyURL } from "./verifyUrl";
7
+ import useMessage from "./useMessage";
7
8
  const useFatZebra = ({ config, handlers, cardToken }) => {
8
9
  const { options, accessToken, paymentIntent, username } = config;
9
10
  const sca = useMemo(() => {
@@ -14,62 +15,12 @@ const useFatZebra = ({ config, handlers, cardToken }) => {
14
15
  scaObj.loadScript();
15
16
  return scaObj;
16
17
  }, [config, username]);
17
- const emit = (event, data) => {
18
- const handler = handlers[event];
19
- if (handler) {
20
- handler(new CustomEvent(event, { detail: data }));
21
- }
22
- };
23
- const handleTokenizeCardResponse = (data) => {
24
- if (data.errors) {
25
- emit(FatZebra.PublicEvent.TOKENIZATION_ERROR, {
26
- message: "Card tokenization failed.",
27
- errors: data.errors,
28
- data: null,
29
- });
30
- return;
31
- }
32
- else {
33
- emit(FatZebra.PublicEvent.TOKENIZATION_SUCCESS, {
34
- message: "Card tokenization success.",
35
- data
36
- });
37
- }
38
- if (options.sca_enabled) {
39
- sca.run({ paymentIntent, bin: data.bin, cardToken: data.token });
40
- }
41
- };
42
- const messageHandler = (event) => {
43
- if (event.data &&
44
- event.data.source &&
45
- event.data.source.includes("react-devtools"))
46
- return;
47
- if (event.data.subject === FatZebra.BridgeEvent.BIN_LOOKUP)
48
- return;
49
- if (event.data.subject === FatZebra.BridgeEvent.FORM_VALIDATION_ERROR) {
50
- emit(FatZebra.PublicEvent.FORM_VALIDATION_ERROR, {
51
- errors: event.data.data,
52
- data: null,
53
- });
54
- return;
55
- }
56
- if (event.data.subject === FatZebra.BridgeEvent.FORM_VALIDATION_SUCCESS) {
57
- emit(FatZebra.PublicEvent.FORM_VALIDATION_SUCCESS, {
58
- errors: event.data.data,
59
- data: null,
60
- });
61
- return;
62
- }
63
- if (event.data.subject === FatZebra.BridgeEvent.TOKENIZE_CARD_RESPONSE) {
64
- handleTokenizeCardResponse(event.data.data);
65
- }
66
- };
67
- useEffect(() => {
68
- window.addEventListener("message", messageHandler);
69
- return () => {
70
- window.removeEventListener("message", messageHandler);
71
- };
72
- }, [paymentIntent]);
18
+ useMessage({
19
+ paymentIntent,
20
+ options,
21
+ handlers,
22
+ sca
23
+ });
73
24
  const payment = paymentIntent.payment;
74
25
  const verifyUrl = generateVerifyURL(Object.assign({ token: cardToken, verification: paymentIntent.verification, merchant: username }, options), config.environment);
75
26
  const paymentUrl = generatePaymentURL(Object.assign({ merchant: username, reference: payment.reference, amount: payment.amount, currency: payment.currency, hash: paymentIntent.verification }, options), config.environment);
@@ -0,0 +1,10 @@
1
+ import * as FatZebra from "../shared/types";
2
+ import Sca from "../sca";
3
+ type UseMessageProps = {
4
+ paymentIntent: FatZebra.PaymentIntent;
5
+ handlers: FatZebra.Handlers;
6
+ options?: FatZebra.OptionalUrlValues;
7
+ sca?: InstanceType<typeof Sca>;
8
+ };
9
+ declare const useMessage: ({ paymentIntent, options, handlers, sca }: UseMessageProps) => void;
10
+ export default useMessage;
@@ -0,0 +1,70 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { useEffect } from 'react';
11
+ import * as FatZebra from "../shared/types";
12
+ const useMessage = ({ paymentIntent, options, handlers, sca }) => {
13
+ const emit = (event, data) => {
14
+ const handler = handlers[event];
15
+ if (handler) {
16
+ handler(new CustomEvent(event, { detail: data }));
17
+ }
18
+ };
19
+ const handleTokenizeCardResponse = (data) => __awaiter(void 0, void 0, void 0, function* () {
20
+ if (data.errors) {
21
+ emit(FatZebra.PublicEvent.TOKENIZATION_ERROR, {
22
+ message: "Card tokenization failed.",
23
+ errors: data.errors,
24
+ data: null,
25
+ });
26
+ return;
27
+ }
28
+ else {
29
+ emit(FatZebra.PublicEvent.TOKENIZATION_SUCCESS, {
30
+ message: "Card tokenization success.",
31
+ data,
32
+ });
33
+ }
34
+ if (options && sca && options.sca_enabled) {
35
+ yield sca.run({ paymentIntent, bin: data.bin, cardToken: data.token });
36
+ }
37
+ });
38
+ const messageHandler = (event) => __awaiter(void 0, void 0, void 0, function* () {
39
+ if (event.data &&
40
+ event.data.source &&
41
+ event.data.source.includes("react-devtools"))
42
+ return;
43
+ if (event.data.subject === FatZebra.BridgeEvent.BIN_LOOKUP)
44
+ return;
45
+ if (event.data.subject === FatZebra.BridgeEvent.FORM_VALIDATION_ERROR) {
46
+ emit(FatZebra.PublicEvent.FORM_VALIDATION_ERROR, {
47
+ errors: event.data.data,
48
+ data: null,
49
+ });
50
+ return;
51
+ }
52
+ if (event.data.subject === FatZebra.BridgeEvent.FORM_VALIDATION_SUCCESS) {
53
+ emit(FatZebra.PublicEvent.FORM_VALIDATION_SUCCESS, {
54
+ errors: event.data.data,
55
+ data: null,
56
+ });
57
+ return;
58
+ }
59
+ if (event.data.subject === FatZebra.BridgeEvent.TOKENIZE_CARD_RESPONSE) {
60
+ yield handleTokenizeCardResponse(event.data.data);
61
+ }
62
+ });
63
+ useEffect(() => {
64
+ window.addEventListener("message", messageHandler);
65
+ return () => {
66
+ window.removeEventListener("message", messageHandler);
67
+ };
68
+ }, [paymentIntent]);
69
+ };
70
+ export default useMessage;
@@ -0,0 +1,91 @@
1
+ .checkout-button-wrapper {
2
+ display: flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+ height: 200px;
6
+ }
7
+
8
+ .iframe-checkout {
9
+ flex: 1;
10
+ border: none;
11
+ width: 100%;
12
+ height: 100%;
13
+ min-height: 0;
14
+ overflow: auto;
15
+ -webkit-overflow-scrolling: touch;
16
+ }
17
+
18
+ .iframe-foreground,
19
+ .iframe-background {
20
+ top: 0;
21
+ left: 0;
22
+ right: 0;
23
+ bottom: 0;
24
+ flex-direction: column;
25
+ }
26
+
27
+ .iframe-foreground,
28
+ .iframe-background {
29
+ position: fixed;
30
+ }
31
+
32
+ .iframe-foreground {
33
+ z-index: -1;
34
+ }
35
+
36
+ .iframe-background {
37
+ background: rgba(0, 0, 0, 0.5);
38
+ }
39
+
40
+ .iframe-foreground {
41
+ flex-grow: 1;
42
+ top: auto;
43
+ width: 100%;
44
+ max-width: 480px;
45
+ height: 80vh;
46
+ background-color: #ffffff;
47
+ border-radius: 25px 25px 0 0;
48
+ }
49
+
50
+ .slide-in .iframe-foreground {
51
+ transform: translateY(100vh);
52
+ transition: transform 0.4s ease, z-index 0.3s ease 0.4s;
53
+ z-index: -1;
54
+ }
55
+
56
+ .slide-in .iframe-background {
57
+ opacity: 0;
58
+ z-index: -1;
59
+ transition: opacity 0.3s ease, z-index 0.3s ease 0.3s;
60
+ }
61
+
62
+ .slide-in.show .iframe-foreground {
63
+ transform: none;
64
+ transition: transform 0.4s ease;
65
+ z-index: 100;
66
+ }
67
+
68
+ .slide-in.show .iframe-background {
69
+ opacity: 1;
70
+ z-index: 0;
71
+ transition: opacity 0.3s ease;
72
+ }
73
+
74
+ @media only screen and (min-width: 480px) {
75
+ .iframe-foreground {
76
+ margin: 0 auto;
77
+ }
78
+ }
79
+
80
+ @media only screen and (min-width: 768px) {
81
+ .iframe-foreground {
82
+ margin: 0;
83
+ width: 400px;
84
+ height: 100vh;
85
+ left: 0;
86
+ }
87
+
88
+ .slide-in .iframe-foreground {
89
+ transform: translateX(-400px);
90
+ }
91
+ }