@fat-zebra/sdk 1.0.1 → 1.0.3

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 (75) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +2 -5
  3. package/dist/react/VerifyCard.js +11 -17
  4. package/dist/react/index.js +2 -8
  5. package/dist/react/url.js +10 -14
  6. package/dist/react/useFatZebra.js +23 -63
  7. package/dist/sca/cardinal.d.ts +2 -1
  8. package/dist/sca/cardinal.js +22 -61
  9. package/dist/sca/eci-mappings.js +4 -8
  10. package/dist/sca/index.js +182 -296
  11. package/dist/sca/scenarios/enrollment.d.ts +2 -1
  12. package/dist/sca/scenarios/enrollment.js +25 -28
  13. package/dist/sca/scenarios/index.d.ts +4 -2
  14. package/dist/sca/scenarios/index.js +2 -7
  15. package/dist/sca/scenarios/validation.d.ts +2 -1
  16. package/dist/sca/scenarios/validation.js +16 -19
  17. package/dist/sca/types.d.ts +2 -1
  18. package/dist/sca/types.js +6 -8
  19. package/dist/shared/api-gateway-client.js +37 -81
  20. package/dist/shared/bridge-client.js +5 -8
  21. package/dist/shared/constants.js +6 -13
  22. package/dist/shared/event-manager.d.ts +2 -1
  23. package/dist/shared/event-manager.js +3 -9
  24. package/dist/shared/post-message-client.d.ts +2 -1
  25. package/dist/shared/post-message-client.js +38 -75
  26. package/dist/shared/types.d.ts +2 -1
  27. package/dist/shared/types.js +5 -7
  28. package/dist/shared/util.js +18 -31
  29. package/fat-zebra-sdk-1.0.2.tgz +0 -0
  30. package/package.json +2 -2
  31. package/tsconfig.json +6 -4
  32. package/dist/index.js.map +0 -1
  33. package/dist/react/VerifyCard.js.map +0 -1
  34. package/dist/react/index.js.map +0 -1
  35. package/dist/react/url.js.map +0 -1
  36. package/dist/react/useFatZebra.js.map +0 -1
  37. package/dist/sca/cardinal.js.map +0 -1
  38. package/dist/sca/eci-mappings.js.map +0 -1
  39. package/dist/sca/index.js.map +0 -1
  40. package/dist/sca/scenarios/enrollment.js.map +0 -1
  41. package/dist/sca/scenarios/index.js.map +0 -1
  42. package/dist/sca/scenarios/validation.js.map +0 -1
  43. package/dist/sca/types.js.map +0 -1
  44. package/dist/shared/api-gateway-client.js.map +0 -1
  45. package/dist/shared/bridge-client.js.map +0 -1
  46. package/dist/shared/constants.js.map +0 -1
  47. package/dist/shared/event-manager.js.map +0 -1
  48. package/dist/shared/post-message-client.js.map +0 -1
  49. package/dist/shared/types.js.map +0 -1
  50. package/dist/shared/util.js.map +0 -1
  51. package/src/index.ts +0 -9
  52. package/src/react/VerifyCard.tsx +0 -36
  53. package/src/react/index.ts +0 -3
  54. package/src/react/url.ts +0 -97
  55. package/src/react/useFatZebra.ts +0 -154
  56. package/src/sca/__tests__/eci-mappings.test.ts +0 -35
  57. package/src/sca/__tests__/index.test.ts +0 -514
  58. package/src/sca/cardinal.ts +0 -136
  59. package/src/sca/eci-mappings.ts +0 -63
  60. package/src/sca/index.ts +0 -329
  61. package/src/sca/scenarios/enrollment.ts +0 -164
  62. package/src/sca/scenarios/index.ts +0 -2
  63. package/src/sca/scenarios/validation.ts +0 -142
  64. package/src/sca/types.ts +0 -206
  65. package/src/shared/api-gateway-client.ts +0 -71
  66. package/src/shared/bridge-client.ts +0 -26
  67. package/src/shared/constants.ts +0 -19
  68. package/src/shared/event-manager.ts +0 -44
  69. package/src/shared/post-message-client.test.ts +0 -73
  70. package/src/shared/post-message-client.ts +0 -125
  71. package/src/shared/types.test.ts +0 -65
  72. package/src/shared/types.ts +0 -182
  73. package/src/shared/util.test.ts +0 -164
  74. package/src/shared/util.ts +0 -98
  75. package/tests/helpers/api-gateway-mock.ts +0 -46
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import { Payment, PaymentIntent, VerificationConfig, Handlers, PublicEvent } from "../src/shared/types";
2
- export { Payment, PaymentIntent, VerificationConfig, Handlers, PublicEvent, };
2
+ export { type Payment, type PaymentIntent, type VerificationConfig, type Handlers, PublicEvent, };
package/dist/index.js CHANGED
@@ -1,5 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PublicEvent = void 0;
4
- var types_1 = require("../src/shared/types");
5
- Object.defineProperty(exports, "PublicEvent", { enumerable: true, get: function () { return types_1.PublicEvent; } });
1
+ import { PublicEvent } from "../src/shared/types";
2
+ export { PublicEvent, };
@@ -1,21 +1,15 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var react_1 = __importDefault(require("react"));
7
- var useFatZebra_1 = __importDefault(require("./useFatZebra"));
8
- var Frame = function (_a) {
9
- var username = _a.username, handlers = _a.handlers, config = _a.config;
10
- var bridgeRef = react_1.default.useRef(null);
11
- var url = (0, useFatZebra_1.default)({
1
+ import React from "react";
2
+ import useFatZebra from "./useFatZebra";
3
+ const Frame = ({ username, handlers, config }) => {
4
+ const bridgeRef = React.useRef(null);
5
+ const { url } = useFatZebra({
12
6
  username: username,
13
- config: config,
7
+ config,
14
8
  handlers: handlers,
15
9
  bridge: bridgeRef,
16
- }).url;
17
- return (react_1.default.createElement("div", null,
18
- react_1.default.createElement("iframe", { src: url, width: "100%", height: "700px", title: "verification-form" }),
19
- react_1.default.createElement("iframe", { title: "bridge-form", src: "http://paynow.test:3004/sdk/bridge", width: "100%", height: "700px", ref: bridgeRef })));
10
+ });
11
+ return (React.createElement("div", null,
12
+ React.createElement("iframe", { src: url, width: "100%", height: "700px", title: "verification-form" }),
13
+ React.createElement("iframe", { title: "bridge-form", src: "http://paynow.test:3004/sdk/bridge", width: "100%", height: "700px", ref: bridgeRef })));
20
14
  };
21
- exports.default = Frame;
15
+ export default Frame;
@@ -1,8 +1,2 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.VerifyCard = void 0;
7
- var VerifyCard_1 = __importDefault(require("./VerifyCard"));
8
- exports.VerifyCard = VerifyCard_1.default;
1
+ import VerifyCard from "./VerifyCard";
2
+ export { VerifyCard };
package/dist/react/url.js CHANGED
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateVerificationURL = exports.generatePaymentURL = void 0;
4
- var url_template_1 = require("url-template");
5
- var generatePaymentURL = function (values) {
6
- var queryParts = [
1
+ import { parseTemplate } from 'url-template';
2
+ const generatePaymentURL = (values) => {
3
+ const queryParts = [
7
4
  "tokenize_only",
8
5
  "css",
9
6
  "css_signature",
@@ -15,8 +12,8 @@ var generatePaymentURL = function (values) {
15
12
  "surcharge_enabled",
16
13
  "sca_enabled",
17
14
  ];
18
- var urlTemplate = (0, url_template_1.parseTemplate)("http://paynow.test:3004/sdk/v3/{merchant}/{reference}/{currency}/{amount}/{verification}{?".concat(queryParts.join(","), "}"));
19
- var url = urlTemplate.expand({
15
+ const urlTemplate = parseTemplate(`http://paynow.test:3004/sdk/v3/{merchant}/{reference}/{currency}/{amount}/{verification}{?${queryParts.join(",")}}`);
16
+ const url = urlTemplate.expand({
20
17
  merchant: values.merchant,
21
18
  reference: values.reference,
22
19
  currency: values.currency,
@@ -31,9 +28,8 @@ var generatePaymentURL = function (values) {
31
28
  });
32
29
  return url;
33
30
  };
34
- exports.generatePaymentURL = generatePaymentURL;
35
- var generateVerificationURL = function (values) {
36
- var queryParts = [
31
+ const generateVerificationURL = (values) => {
32
+ const queryParts = [
37
33
  "tokenize_only",
38
34
  "css",
39
35
  "css_signature",
@@ -45,8 +41,8 @@ var generateVerificationURL = function (values) {
45
41
  "surcharge_enabled",
46
42
  "sca_enabled",
47
43
  ];
48
- var urlTemplate = (0, url_template_1.parseTemplate)("http://paynow.test:3004/sdk/v3/{merchant}/verification/{timestamp}/{verification}{?".concat(queryParts.join(","), "}"));
49
- var url = urlTemplate.expand({
44
+ const urlTemplate = parseTemplate(`http://paynow.test:3004/sdk/v3/{merchant}/verification/{timestamp}/{verification}{?${queryParts.join(",")}}`);
45
+ const url = urlTemplate.expand({
50
46
  merchant: values.merchant,
51
47
  timestamp: values.timestamp,
52
48
  verification: values.verification,
@@ -59,4 +55,4 @@ var generateVerificationURL = function (values) {
59
55
  });
60
56
  return url;
61
57
  };
62
- exports.generateVerificationURL = generateVerificationURL;
58
+ export { generatePaymentURL, generateVerificationURL };
@@ -1,62 +1,22 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
- var __importDefault = (this && this.__importDefault) || function (mod) {
37
- return (mod && mod.__esModule) ? mod : { "default": mod };
38
- };
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- var react_1 = require("react");
41
- var FatZebra = __importStar(require("../shared/types"));
42
- var url_1 = require("./url");
43
- var sca_1 = __importDefault(require("../sca"));
44
- var api_gateway_client_1 = __importDefault(require("../shared/api-gateway-client"));
45
- var useFatZebra = function (_a) {
46
- var username = _a.username, config = _a.config, handlers = _a.handlers, bridge = _a.bridge;
47
- var options = config.options, accessToken = config.accessToken, paymentIntent = config.paymentIntent, verification = config.verification;
48
- var sca = (0, react_1.useMemo)(function () {
49
- var gatewayClient = new api_gateway_client_1.default({ accessToken: accessToken, username: username });
50
- return new sca_1.default({ gatewayClient: gatewayClient });
1
+ import { useEffect, useMemo } from "react";
2
+ import * as FatZebra from "../shared/types";
3
+ import { generatePaymentURL } from "./url";
4
+ import Sca from "../sca";
5
+ import GatewayClient from "../shared/api-gateway-client";
6
+ const useFatZebra = ({ username, config, handlers, bridge }) => {
7
+ const { options, accessToken, paymentIntent, verification } = config;
8
+ const sca = useMemo(() => {
9
+ const gatewayClient = new GatewayClient({ accessToken, username });
10
+ return new Sca({ gatewayClient });
51
11
  }, [config, username]);
52
- var emit = function (event, data) {
53
- var handler = handlers[event];
12
+ const emit = (event, data) => {
13
+ const handler = handlers[event];
54
14
  if (handler) {
55
15
  handler(new CustomEvent(event, { detail: data }));
56
16
  }
57
17
  };
58
- var handleCreatePaymentResponse = function (data) {
59
- var transactionPayload = {
18
+ const handleCreatePaymentResponse = (data) => {
19
+ const transactionPayload = {
60
20
  transactionId: data.transaction_id,
61
21
  responseCode: data.response_code,
62
22
  message: data.message,
@@ -83,7 +43,7 @@ var useFatZebra = function (_a) {
83
43
  });
84
44
  }
85
45
  };
86
- var handleTokenizeCardResponse = function (data) {
46
+ const handleTokenizeCardResponse = (data) => {
87
47
  if (data.errors) {
88
48
  emit(FatZebra.PublicEvent.TOKENIZATION_ERROR, {
89
49
  message: "Card tokenization failed.",
@@ -103,10 +63,10 @@ var useFatZebra = function (_a) {
103
63
  if (options.tokenizeOnly)
104
64
  return;
105
65
  if (options.enableSca) {
106
- sca.run({ paymentIntent: paymentIntent, bin: data.bin, cardToken: data.token });
66
+ sca.run({ paymentIntent, bin: data.bin, cardToken: data.token });
107
67
  }
108
68
  };
109
- var messageHandler = function (event) {
69
+ const messageHandler = (event) => {
110
70
  if (event.data &&
111
71
  event.data.source &&
112
72
  event.data.source.includes("react-devtools"))
@@ -134,14 +94,14 @@ var useFatZebra = function (_a) {
134
94
  handleTokenizeCardResponse(event.data.data);
135
95
  }
136
96
  };
137
- (0, react_1.useEffect)(function () {
97
+ useEffect(() => {
138
98
  window.addEventListener("message", messageHandler);
139
- return function () {
99
+ return () => {
140
100
  window.removeEventListener("message", messageHandler);
141
101
  };
142
102
  }, []);
143
- var payment = paymentIntent.payment;
144
- var url = (0, url_1.generatePaymentURL)(__assign(__assign({}, options), { merchant: username, reference: payment.reference, amount: payment.amount, currency: payment.currency, hash: verification }));
145
- return { url: url };
103
+ const payment = paymentIntent.payment;
104
+ const url = generatePaymentURL(Object.assign(Object.assign({}, options), { merchant: username, reference: payment.reference, amount: payment.amount, currency: payment.currency, hash: verification }));
105
+ return { url };
146
106
  };
147
- exports.default = useFatZebra;
107
+ export default useFatZebra;
@@ -25,4 +25,5 @@ export default class CardinalManager {
25
25
  processBin(bin: string): Promise<any>;
26
26
  continue(acsUrl: string, pareq: string, transactionId: string): void;
27
27
  }
28
- export { CardinalManager, PaymentValidatedDTO, };
28
+ export { CardinalManager };
29
+ export type { PaymentValidatedDTO };
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,35 +7,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
8
  });
10
9
  };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.CardinalManager = void 0;
40
10
  var CardinalWorkflow;
41
11
  (function (CardinalWorkflow) {
42
12
  CardinalWorkflow["CCA"] = "cca";
@@ -47,53 +17,46 @@ var CardinalPaymentEvent;
47
17
  CardinalPaymentEvent["SETUP_COMPLETE"] = "payments.setupComplete";
48
18
  CardinalPaymentEvent["VALIDATED"] = "payments.validated";
49
19
  })(CardinalPaymentEvent || (CardinalPaymentEvent = {}));
50
- var defaultConfig = {
20
+ const defaultConfig = {
51
21
  timeout: 8000,
52
22
  maxRequestRetries: 3,
53
23
  logging: {
54
24
  level: 'on'
55
25
  }
56
26
  };
57
- var CardinalManager = /** @class */ (function () {
58
- function CardinalManager(config) {
27
+ export default class CardinalManager {
28
+ constructor(config) {
59
29
  window.Cardinal.configure((config ? config : defaultConfig));
60
30
  }
61
- CardinalManager.prototype.setup = function (jwt) {
62
- window.Cardinal.setup(CardinalWorkflow.INIT, { jwt: jwt });
63
- };
64
- CardinalManager.prototype.onPaymentValidated = function (handler) {
65
- window.Cardinal.on('payments.validated', function (data, jwt) {
31
+ setup(jwt) {
32
+ window.Cardinal.setup(CardinalWorkflow.INIT, { jwt });
33
+ }
34
+ onPaymentValidated(handler) {
35
+ window.Cardinal.on('payments.validated', (data, jwt) => {
66
36
  if (data.ErrorDescription.toLowerCase() === 'success') {
67
37
  handler({
68
38
  processorTransactionId: data.Payment.ProcessorTransactionId,
69
- jwt: jwt
39
+ jwt
70
40
  }, null);
71
41
  }
72
42
  else {
73
43
  handler(null, data.ErrorDescription);
74
44
  }
75
45
  });
76
- };
77
- CardinalManager.prototype.onPaymentSetupComplete = function () {
78
- return new Promise(function (resolve, reject) {
79
- window.Cardinal.on(CardinalPaymentEvent.SETUP_COMPLETE, function (data) {
46
+ }
47
+ onPaymentSetupComplete() {
48
+ return new Promise((resolve, reject) => {
49
+ window.Cardinal.on(CardinalPaymentEvent.SETUP_COMPLETE, (data) => {
80
50
  resolve(data);
81
51
  });
82
52
  });
83
- };
84
- CardinalManager.prototype.processBin = function (bin) {
85
- return __awaiter(this, void 0, void 0, function () {
86
- return __generator(this, function (_a) {
87
- switch (_a.label) {
88
- case 0: return [4 /*yield*/, window.Cardinal.trigger('bin.process', bin)];
89
- case 1:
90
- _a.sent();
91
- return [2 /*return*/];
92
- }
93
- });
53
+ }
54
+ processBin(bin) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ yield window.Cardinal.trigger('bin.process', bin);
94
57
  });
95
- };
96
- CardinalManager.prototype.continue = function (acsUrl, pareq, transactionId) {
58
+ }
59
+ continue(acsUrl, pareq, transactionId) {
97
60
  window.Cardinal.continue(CardinalWorkflow.CCA, {
98
61
  AcsUrl: acsUrl,
99
62
  Payload: pareq
@@ -102,8 +65,6 @@ var CardinalManager = /** @class */ (function () {
102
65
  TransactionId: transactionId
103
66
  }
104
67
  });
105
- };
106
- return CardinalManager;
107
- }());
108
- exports.CardinalManager = CardinalManager;
109
- exports.default = CardinalManager;
68
+ }
69
+ }
70
+ export { CardinalManager };
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toFzSli = exports.eciMappings = void 0;
4
1
  // FatZebra only supports SLI 05, 06, 07 & 09.
5
2
  // https://docs.fatzebra.com/docs/3d-secure
6
3
  // Cardinal returns ECI(or SLI for MC) in the range of 01~07
7
4
  // https://cardinaldocs.atlassian.net/wiki/spaces/CCen/pages/903577725/EMV+3DS+2.0+Test+Cases
8
- var eciMappings = [
5
+ const eciMappings = [
9
6
  {
10
7
  // Cards: Mastercard, CB Mastercard
11
8
  // Test Case 2: Failed Frictionless Authentication
@@ -54,9 +51,8 @@ var eciMappings = [
54
51
  fatzebraSli: '07',
55
52
  },
56
53
  ];
57
- exports.eciMappings = eciMappings;
58
- var toFzSli = function (vendorEci) {
59
- var matched = eciMappings.find(function (item) { return item.vendorEci == vendorEci; });
54
+ const toFzSli = (vendorEci) => {
55
+ const matched = eciMappings.find((item) => item.vendorEci == vendorEci);
60
56
  return matched ? matched.fatzebraSli : vendorEci;
61
57
  };
62
- exports.toFzSli = toFzSli;
58
+ export { eciMappings, toFzSli, };