@fat-zebra/sdk 1.0.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 (89) hide show
  1. package/.jest/setup-env-vars.js +2 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +6 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/react/VerifyCard.d.ts +10 -0
  6. package/dist/react/VerifyCard.js +22 -0
  7. package/dist/react/VerifyCard.js.map +1 -0
  8. package/dist/react/index.d.ts +2 -0
  9. package/dist/react/index.js +9 -0
  10. package/dist/react/index.js.map +1 -0
  11. package/dist/react/url.d.ts +26 -0
  12. package/dist/react/url.js +63 -0
  13. package/dist/react/url.js.map +1 -0
  14. package/dist/react/useFatZebra.d.ts +12 -0
  15. package/dist/react/useFatZebra.js +148 -0
  16. package/dist/react/useFatZebra.js.map +1 -0
  17. package/dist/sca/cardinal.d.ts +28 -0
  18. package/dist/sca/cardinal.js +110 -0
  19. package/dist/sca/cardinal.js.map +1 -0
  20. package/dist/sca/eci-mappings.d.ts +6 -0
  21. package/dist/sca/eci-mappings.js +63 -0
  22. package/dist/sca/eci-mappings.js.map +1 -0
  23. package/dist/sca/index.d.ts +38 -0
  24. package/dist/sca/index.js +395 -0
  25. package/dist/sca/index.js.map +1 -0
  26. package/dist/sca/scenarios/enrollment.d.ts +15 -0
  27. package/dist/sca/scenarios/enrollment.js +150 -0
  28. package/dist/sca/scenarios/enrollment.js.map +1 -0
  29. package/dist/sca/scenarios/index.d.ts +2 -0
  30. package/dist/sca/scenarios/index.js +8 -0
  31. package/dist/sca/scenarios/index.js.map +1 -0
  32. package/dist/sca/scenarios/validation.d.ts +15 -0
  33. package/dist/sca/scenarios/validation.js +128 -0
  34. package/dist/sca/scenarios/validation.js.map +1 -0
  35. package/dist/sca/types.d.ts +158 -0
  36. package/dist/sca/types.js +57 -0
  37. package/dist/sca/types.js.map +1 -0
  38. package/dist/shared/api-gateway-client.d.ts +17 -0
  39. package/dist/shared/api-gateway-client.js +106 -0
  40. package/dist/shared/api-gateway-client.js.map +1 -0
  41. package/dist/shared/bridge-client.d.ts +2 -0
  42. package/dist/shared/bridge-client.js +24 -0
  43. package/dist/shared/bridge-client.js.map +1 -0
  44. package/dist/shared/constants.d.ts +6 -0
  45. package/dist/shared/constants.js +19 -0
  46. package/dist/shared/constants.js.map +1 -0
  47. package/dist/shared/event-manager.d.ts +28 -0
  48. package/dist/shared/event-manager.js +15 -0
  49. package/dist/shared/event-manager.js.map +1 -0
  50. package/dist/shared/post-message-client.d.ts +47 -0
  51. package/dist/shared/post-message-client.js +107 -0
  52. package/dist/shared/post-message-client.js.map +1 -0
  53. package/dist/shared/types.d.ts +142 -0
  54. package/dist/shared/types.js +41 -0
  55. package/dist/shared/types.js.map +1 -0
  56. package/dist/shared/util.d.ts +6 -0
  57. package/dist/shared/util.js +96 -0
  58. package/dist/shared/util.js.map +1 -0
  59. package/fatzebra-sdk-1.0.0.tgz +0 -0
  60. package/index.js +0 -0
  61. package/jest.config.js +16 -0
  62. package/package.json +33 -0
  63. package/src/index.ts +9 -0
  64. package/src/react/VerifyCard.tsx +36 -0
  65. package/src/react/index.ts +3 -0
  66. package/src/react/url.ts +97 -0
  67. package/src/react/useFatZebra.ts +154 -0
  68. package/src/sca/__tests__/eci-mappings.test.ts +35 -0
  69. package/src/sca/__tests__/index.test.ts +514 -0
  70. package/src/sca/cardinal.ts +136 -0
  71. package/src/sca/eci-mappings.ts +63 -0
  72. package/src/sca/index.ts +329 -0
  73. package/src/sca/scenarios/enrollment.ts +164 -0
  74. package/src/sca/scenarios/index.ts +2 -0
  75. package/src/sca/scenarios/validation.ts +142 -0
  76. package/src/sca/types.ts +206 -0
  77. package/src/shared/api-gateway-client.ts +71 -0
  78. package/src/shared/bridge-client.ts +26 -0
  79. package/src/shared/constants.ts +19 -0
  80. package/src/shared/event-manager.ts +44 -0
  81. package/src/shared/post-message-client.test.ts +73 -0
  82. package/src/shared/post-message-client.ts +125 -0
  83. package/src/shared/types.test.ts +65 -0
  84. package/src/shared/types.ts +182 -0
  85. package/src/shared/util.test.ts +164 -0
  86. package/src/shared/util.ts +98 -0
  87. package/tests/helpers/api-gateway-mock.ts +46 -0
  88. package/tsconfig.json +22 -0
  89. package/yarn-error.log +2374 -0
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validationScenarios = void 0;
4
+ var types_1 = require("../types");
5
+ var validationScenarios = [
6
+ /***************************************************************/
7
+ /********************** 3DS2 scenarios *************************/
8
+ /***************************************************************/
9
+ {
10
+ // Successful Step-Up Authentication
11
+ description: 'Successful Step-Up Authentication',
12
+ threedsVersion: '2',
13
+ reasonCode: '100',
14
+ veresEnrolled: null,
15
+ pares: types_1.PARes.SUCCESS,
16
+ outcome: {
17
+ authenticationType: 'challenge',
18
+ success: true // liability shift
19
+ },
20
+ },
21
+ {
22
+ // Unsuccessful Step-Up Authentication
23
+ description: 'Unsuccessful Step-Up Authentication',
24
+ threedsVersion: '2',
25
+ reasonCode: '476',
26
+ veresEnrolled: null,
27
+ pares: types_1.PARes.CANCELED,
28
+ outcome: {
29
+ authenticationType: 'challenge',
30
+ success: false,
31
+ errorCode: types_1.ScaErrorCode.UNSUCCESSFUL_STEPUP_AUTHENTICATION
32
+ }
33
+ },
34
+ {
35
+ // Unavailable Step-Up Authentication
36
+ description: 'Unavailable Step-Up Authentication',
37
+ threedsVersion: '2',
38
+ reasonCode: '100',
39
+ veresEnrolled: null,
40
+ pares: types_1.PARes.NOT_COMPLETED,
41
+ outcome: {
42
+ authenticationType: 'challenge',
43
+ success: false,
44
+ errorCode: types_1.ScaErrorCode.UNAVAILABLE_STEPUP_AUTHENTICATION
45
+ }
46
+ },
47
+ /***************************************************************/
48
+ /********************** 3DS1 scenarios *************************/
49
+ /***************************************************************/
50
+ {
51
+ // Successful Step-Up Authentication
52
+ description: 'Successful Authentication',
53
+ threedsVersion: '1',
54
+ reasonCode: '100',
55
+ veresEnrolled: null,
56
+ pares: types_1.PARes.SUCCESS,
57
+ outcome: {
58
+ authenticationType: 'challenge',
59
+ success: true // liability shift
60
+ },
61
+ },
62
+ {
63
+ // Incomplete Authentication
64
+ description: 'Incomplete Authentication',
65
+ threedsVersion: '1',
66
+ reasonCode: '100',
67
+ veresEnrolled: null,
68
+ pares: types_1.PARes.NOT_COMPLETED,
69
+ outcome: {
70
+ authenticationType: 'challenge',
71
+ success: false,
72
+ errorCode: types_1.ScaErrorCode.UNAVAILABLE_STEPUP_AUTHENTICATION
73
+ }
74
+ },
75
+ {
76
+ // Attempts Processing
77
+ description: 'Attempts Processing',
78
+ threedsVersion: '1',
79
+ reasonCode: '100',
80
+ veresEnrolled: null,
81
+ pares: types_1.PARes.ATTEMPTED,
82
+ outcome: {
83
+ authenticationType: 'challenge',
84
+ success: true
85
+ }
86
+ },
87
+ {
88
+ // Unsuccessful Authentication
89
+ description: 'Unsuccessful Authentication',
90
+ threedsVersion: '1',
91
+ reasonCode: '476',
92
+ veresEnrolled: null,
93
+ pares: types_1.PARes.CANCELED,
94
+ outcome: {
95
+ authenticationType: 'challenge',
96
+ success: false,
97
+ errorCode: types_1.ScaErrorCode.UNSUCCESSFUL_STEPUP_AUTHENTICATION
98
+ }
99
+ },
100
+ {
101
+ // Successful Authentication But Invalid PARes
102
+ description: 'Successful Authentication But Invalid PARes',
103
+ threedsVersion: '1',
104
+ reasonCode: '476',
105
+ veresEnrolled: null,
106
+ pares: null,
107
+ outcome: {
108
+ authenticationType: 'challenge',
109
+ success: false,
110
+ errorCode: types_1.ScaErrorCode.UNSUCCESSFUL_STEPUP_AUTHENTICATION
111
+ }
112
+ },
113
+ {
114
+ // Authentication Error
115
+ description: 'Authentication Error',
116
+ threedsVersion: '1',
117
+ reasonCode: '476',
118
+ veresEnrolled: null,
119
+ pares: null,
120
+ outcome: {
121
+ authenticationType: 'challenge',
122
+ success: false,
123
+ errorCode: types_1.ScaErrorCode.UNSUCCESSFUL_STEPUP_AUTHENTICATION
124
+ }
125
+ },
126
+ ];
127
+ exports.validationScenarios = validationScenarios;
128
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/sca/scenarios/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ declare enum ScaErrorCode {
2
+ BYPASSED_AUTHENTICATION = "001",
3
+ AUTHENTICATION_NOT_AVAILABLE_ON_LOOKUP = "002",
4
+ UNAVAILABLE_FRICTIONLESS_AUTHENTICATION = "003",
5
+ UNSUCCESSFUL_FRICTIONLESS_AUTHENTICATION = "004",
6
+ REJECTED_FRICTIONLESS_AUTHENTICATION = "005",
7
+ UNSUCCESSFUL_STEPUP_AUTHENTICATION = "006",
8
+ UNAVAILABLE_STEPUP_AUTHENTICATION = "007"
9
+ }
10
+ declare enum ChallengeWindowSize {
11
+ SIZE_250X400 = "01",
12
+ SIZE_390X400 = "02",
13
+ SIZE_500X600 = "03",
14
+ SIZE_600X400 = "04",
15
+ SIZE_FULL_PAGE = "05"
16
+ }
17
+ interface CreateSCASessionRequest {
18
+ amount: number;
19
+ currency: string;
20
+ hide_card_holder: boolean;
21
+ }
22
+ interface CreateSCASessionResponse {
23
+ jwt: string;
24
+ }
25
+ interface ThreedsData {
26
+ cavv: string;
27
+ par: string;
28
+ sli: string;
29
+ xid: string;
30
+ ver: string;
31
+ directoryServerTxnId: string;
32
+ threedsVersion: string;
33
+ }
34
+ interface EnrollSCARequest {
35
+ amount: number;
36
+ card_token: string;
37
+ currency: string;
38
+ reference: string;
39
+ verification: string;
40
+ session_id: string;
41
+ challenge_window_size: ChallengeWindowSize;
42
+ hide_card_holder: boolean;
43
+ customer?: {
44
+ first_name?: string;
45
+ last_name?: string;
46
+ email?: string;
47
+ address?: string;
48
+ city?: string;
49
+ postcode?: string;
50
+ state?: string;
51
+ country?: string;
52
+ };
53
+ }
54
+ interface EnrollSCAResponse {
55
+ aav: string;
56
+ acs_url: string;
57
+ action: {
58
+ proceed: boolean;
59
+ challenge: boolean;
60
+ frictionless: boolean;
61
+ bypass: boolean;
62
+ };
63
+ authentication_path: string;
64
+ authentication_result: string;
65
+ authentication_status_message: string;
66
+ authentication_transaction_id: string;
67
+ card_bin: string;
68
+ card_type_name: string;
69
+ cavv: string;
70
+ commerce_indicator: CommerceIndicator;
71
+ currency: string;
72
+ decision: 'ACCEPT' | 'REJECT' | 'ERROR';
73
+ directory_server_txn_id: string;
74
+ eci: string;
75
+ enrolled: VEResEnrolled;
76
+ pareq: string;
77
+ pares: PARes;
78
+ proxy_pan: string;
79
+ reason_code: string;
80
+ request_id: string;
81
+ request_token: string;
82
+ ucaf_collection_indicator: string;
83
+ version: string;
84
+ xid: string;
85
+ }
86
+ declare enum CommerceIndicator {
87
+ INTERNET = "internet",
88
+ JS_ATTEMPTED = "js_attempted",
89
+ JS_FAILURE = "js_failure",
90
+ SPA = "spa",
91
+ VBV_ATTEMPTED = "vbv_attempted",
92
+ VBV_FAILURE = "vbv_failure"
93
+ }
94
+ declare enum VEResEnrolled {
95
+ ENROLLED = "Y",
96
+ NOT_ENROLLED = "N",
97
+ UNABLE = "U",
98
+ BYPASSED = "B"
99
+ }
100
+ declare enum PARes {
101
+ ATTEMPTED = "A",
102
+ BYPASSED = "B",
103
+ CANCELED = "N",
104
+ REJECTED = "R",
105
+ NOT_COMPLETED = "U",
106
+ SUCCESS = "Y"
107
+ }
108
+ interface ValidateSCARequest {
109
+ amount: number;
110
+ authentication_transaction_id: string;
111
+ card_token: string;
112
+ currency: string;
113
+ pareq: string;
114
+ reference: string;
115
+ }
116
+ interface ValidateSCAResponse {
117
+ aav: string;
118
+ acs_url: string;
119
+ authentication_result: string;
120
+ card_bin: string;
121
+ cavv: string;
122
+ commerce_indicator: CommerceIndicator;
123
+ decision: 'ACCEPT' | 'REJECT' | 'ERROR';
124
+ directory_server_txn_id: string;
125
+ eci: string;
126
+ enrolled: VEResEnrolled;
127
+ pareq: string;
128
+ pares: PARes;
129
+ reason_code: string;
130
+ request_id: string;
131
+ request_token: string;
132
+ ucaf_collection_indicator: string;
133
+ xid: string;
134
+ version: string;
135
+ }
136
+ interface DecodeSCASessionRequest {
137
+ token: string;
138
+ }
139
+ interface DecodeSCASessionResponse {
140
+ amount: number;
141
+ currency_code: string;
142
+ processor_transaction_id: string;
143
+ consumer_session_id: string;
144
+ reference_id: string;
145
+ type: string;
146
+ action_code: string;
147
+ error_number: number;
148
+ error_description: string;
149
+ errors: string[];
150
+ test: boolean;
151
+ }
152
+ interface GetCardRequest {
153
+ card_token: string;
154
+ }
155
+ interface GetCardResponse {
156
+ bin: string;
157
+ }
158
+ export { ScaErrorCode, ChallengeWindowSize, CreateSCASessionRequest, CreateSCASessionResponse, EnrollSCARequest, EnrollSCAResponse, CommerceIndicator, VEResEnrolled, PARes, ValidateSCARequest, ValidateSCAResponse, DecodeSCASessionRequest, DecodeSCASessionResponse, GetCardRequest, GetCardResponse, ThreedsData, };
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PARes = exports.VEResEnrolled = exports.CommerceIndicator = exports.ChallengeWindowSize = exports.ScaErrorCode = void 0;
4
+ var ScaErrorCode;
5
+ (function (ScaErrorCode) {
6
+ ScaErrorCode["BYPASSED_AUTHENTICATION"] = "001";
7
+ ScaErrorCode["AUTHENTICATION_NOT_AVAILABLE_ON_LOOKUP"] = "002";
8
+ ScaErrorCode["UNAVAILABLE_FRICTIONLESS_AUTHENTICATION"] = "003";
9
+ ScaErrorCode["UNSUCCESSFUL_FRICTIONLESS_AUTHENTICATION"] = "004";
10
+ ScaErrorCode["REJECTED_FRICTIONLESS_AUTHENTICATION"] = "005";
11
+ ScaErrorCode["UNSUCCESSFUL_STEPUP_AUTHENTICATION"] = "006";
12
+ ScaErrorCode["UNAVAILABLE_STEPUP_AUTHENTICATION"] = "007";
13
+ })(ScaErrorCode || (exports.ScaErrorCode = ScaErrorCode = {}));
14
+ var ChallengeWindowSize;
15
+ (function (ChallengeWindowSize) {
16
+ ChallengeWindowSize["SIZE_250X400"] = "01";
17
+ ChallengeWindowSize["SIZE_390X400"] = "02";
18
+ ChallengeWindowSize["SIZE_500X600"] = "03";
19
+ ChallengeWindowSize["SIZE_600X400"] = "04";
20
+ ChallengeWindowSize["SIZE_FULL_PAGE"] = "05";
21
+ })(ChallengeWindowSize || (exports.ChallengeWindowSize = ChallengeWindowSize = {}));
22
+ var CommerceIndicator;
23
+ (function (CommerceIndicator) {
24
+ // Card not enrolled, or card type not supported by payer authentication. No liability shift.
25
+ CommerceIndicator["INTERNET"] = "internet";
26
+ // JCB card not enrolled, but attempt to authenticate is recorded. Liability shift.
27
+ CommerceIndicator["JS_ATTEMPTED"] = "js_attempted";
28
+ // You receive this result if JCB’s directory service is not available. No liability shift.
29
+ CommerceIndicator["JS_FAILURE"] = "js_failure";
30
+ // Mastercard card not enrolled. No liability shift.
31
+ CommerceIndicator["SPA"] = "spa";
32
+ // Visa card not enrolled, but attempt to authenticate is recorded. Liability shift.
33
+ CommerceIndicator["VBV_ATTEMPTED"] = "vbv_attempted";
34
+ // For the payment processors Barclays, Streamline, AIBMS, or FDC Germany, you receive this result if Visa’s directory service is not available. No liability shift.
35
+ CommerceIndicator["VBV_FAILURE"] = "vbv_failure";
36
+ })(CommerceIndicator || (exports.CommerceIndicator = CommerceIndicator = {}));
37
+ var VEResEnrolled;
38
+ (function (VEResEnrolled) {
39
+ // Card enrolled. You must authenticate. Liability shift.
40
+ VEResEnrolled["ENROLLED"] = "Y";
41
+ // Card not enrolled. Proceed with authorization
42
+ VEResEnrolled["NOT_ENROLLED"] = "N";
43
+ // Enable to authenticate regardless of the reason. No liability shift.
44
+ VEResEnrolled["UNABLE"] = "U";
45
+ // Authentication was bypassed
46
+ VEResEnrolled["BYPASSED"] = "B";
47
+ })(VEResEnrolled || (exports.VEResEnrolled = VEResEnrolled = {}));
48
+ var PARes;
49
+ (function (PARes) {
50
+ PARes["ATTEMPTED"] = "A";
51
+ PARes["BYPASSED"] = "B";
52
+ PARes["CANCELED"] = "N";
53
+ PARes["REJECTED"] = "R";
54
+ PARes["NOT_COMPLETED"] = "U";
55
+ PARes["SUCCESS"] = "Y";
56
+ })(PARes || (exports.PARes = PARes = {}));
57
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sca/types.ts"],"names":[],"mappings":";;;AAAA,IAAK,YAQJ;AARD,WAAK,YAAY;IACf,+CAA+B,CAAA;IAC/B,8DAA8C,CAAA;IAC9C,+DAA+C,CAAA;IAC/C,gEAAgD,CAAA;IAChD,4DAA4C,CAAA;IAC5C,0DAA0C,CAAA;IAC1C,yDAAyC,CAAA;AAC3C,CAAC,EARI,YAAY,4BAAZ,YAAY,QAQhB;AAED,IAAK,mBAMJ;AAND,WAAK,mBAAmB;IACtB,0CAAmB,CAAA;IACnB,0CAAmB,CAAA;IACnB,0CAAmB,CAAA;IACnB,0CAAmB,CAAA;IACnB,4CAAqB,CAAA;AACvB,CAAC,EANI,mBAAmB,mCAAnB,mBAAmB,QAMvB;AAiFD,IAAK,iBAaJ;AAbD,WAAK,iBAAiB;IACpB,6FAA6F;IAC7F,0CAAqB,CAAA;IACrB,mFAAmF;IACnF,kDAA6B,CAAA;IAC7B,2FAA2F;IAC3F,8CAAyB,CAAA;IACzB,oDAAoD;IACpD,gCAAW,CAAA;IACX,oFAAoF;IACpF,oDAA+B,CAAA;IAC/B,oKAAoK;IACpK,gDAA2B,CAAA;AAC7B,CAAC,EAbI,iBAAiB,iCAAjB,iBAAiB,QAarB;AAED,IAAK,aASJ;AATD,WAAK,aAAa;IAChB,yDAAyD;IACzD,+BAAc,CAAA;IACd,gDAAgD;IAChD,mCAAkB,CAAA;IAClB,uEAAuE;IACvE,6BAAY,CAAA;IACZ,8BAA8B;IAC9B,+BAAc,CAAA;AAChB,CAAC,EATI,aAAa,6BAAb,aAAa,QASjB;AAED,IAAK,KAOJ;AAPD,WAAK,KAAK;IACR,wBAAe,CAAA;IACf,uBAAc,CAAA;IACd,uBAAc,CAAA;IACd,uBAAc,CAAA;IACd,4BAAmB,CAAA;IACnB,sBAAa,CAAA;AACf,CAAC,EAPI,KAAK,qBAAL,KAAK,QAOT"}
@@ -0,0 +1,17 @@
1
+ import { AxiosResponse, AxiosInstance } from "axios";
2
+ import * as sca from "../sca/types";
3
+ export type GatewayClientProps = {
4
+ accessToken: string;
5
+ username: string;
6
+ };
7
+ declare class GatewayClient {
8
+ client: AxiosInstance | null;
9
+ constructor({ accessToken, username }: GatewayClientProps);
10
+ /**************** SCA/3DS2 /****************/
11
+ createSCASession(data: sca.CreateSCASessionRequest): Promise<AxiosResponse>;
12
+ decodeSCASession(data: sca.DecodeSCASessionRequest): Promise<AxiosResponse>;
13
+ enrolSCA(data: sca.EnrollSCARequest): Promise<AxiosResponse>;
14
+ validateSCA(data: sca.ValidateSCARequest): Promise<AxiosResponse>;
15
+ getCard(data: sca.GetCardRequest): Promise<AxiosResponse>;
16
+ }
17
+ export default GatewayClient;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ var constants_1 = require("./constants");
43
+ var axios_1 = __importDefault(require("axios"));
44
+ var util_1 = require("./util");
45
+ var baseUrl = process.env.API_GATEWAY_URL;
46
+ var GatewayClient = /** @class */ (function () {
47
+ function GatewayClient(_a) {
48
+ var accessToken = _a.accessToken, username = _a.username;
49
+ var headers = {};
50
+ headers["Authorization"] = "Bearer ".concat(accessToken);
51
+ headers[constants_1.RequestHeaderSdkVersion] = (0, util_1.getSdkVersionNumber)();
52
+ headers[constants_1.RequestHeaderMerchantUsername] = username;
53
+ this.client = axios_1.default.create({
54
+ baseURL: baseUrl,
55
+ timeout: constants_1.RequestTimeout,
56
+ headers: headers,
57
+ responseType: "json",
58
+ transformResponse: [
59
+ function (response) {
60
+ var _response = typeof response === "string" ? JSON.parse(response) : response;
61
+ return _response.data;
62
+ },
63
+ ],
64
+ });
65
+ }
66
+ /**************** SCA/3DS2 /****************/
67
+ GatewayClient.prototype.createSCASession = function (data) {
68
+ return __awaiter(this, void 0, void 0, function () {
69
+ return __generator(this, function (_a) {
70
+ return [2 /*return*/, this.client.post("/sca/session", data)];
71
+ });
72
+ });
73
+ };
74
+ GatewayClient.prototype.decodeSCASession = function (data) {
75
+ return __awaiter(this, void 0, void 0, function () {
76
+ return __generator(this, function (_a) {
77
+ // return requestBase(`${baseUrl}/sca/decode_session`, 'POST', data)
78
+ return [2 /*return*/, this.client.post("/sca/decode_session", data)];
79
+ });
80
+ });
81
+ };
82
+ GatewayClient.prototype.enrolSCA = function (data) {
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ return __generator(this, function (_a) {
85
+ return [2 /*return*/, this.client.post("/sca/enrollment", data)];
86
+ });
87
+ });
88
+ };
89
+ GatewayClient.prototype.validateSCA = function (data) {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ return __generator(this, function (_a) {
92
+ return [2 /*return*/, this.client.post("/sca/validation", data)];
93
+ });
94
+ });
95
+ };
96
+ GatewayClient.prototype.getCard = function (data) {
97
+ return __awaiter(this, void 0, void 0, function () {
98
+ return __generator(this, function (_a) {
99
+ return [2 /*return*/, this.client.get("/credit_cards/".concat(data.card_token))];
100
+ });
101
+ });
102
+ };
103
+ return GatewayClient;
104
+ }());
105
+ exports.default = GatewayClient;
106
+ //# sourceMappingURL=api-gateway-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-gateway-client.js","sourceRoot":"","sources":["../../src/shared/api-gateway-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAKqB;AACrB,gDAA4D;AAC5D,+BAA6C;AAE7C,IAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAS5C;IAGE,uBAAY,EAA6C;YAA3C,WAAW,iBAAA,EAAE,QAAQ,cAAA;QACjC,IAAM,OAAO,GAA8B,EAAE,CAAC;QAC9C,OAAO,CAAC,eAAe,CAAC,GAAG,iBAAU,WAAW,CAAE,CAAC;QACnD,OAAO,CAAC,mCAAuB,CAAC,GAAG,IAAA,0BAAmB,GAAE,CAAC;QACzD,OAAO,CAAC,yCAA6B,CAAC,GAAG,QAAQ,CAAC;QAElD,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,0BAAc;YACvB,OAAO,SAAA;YACP,YAAY,EAAE,MAAM;YACpB,iBAAiB,EAAE;gBACjB,UAAU,QAAQ;oBAChB,IAAM,SAAS,GACb,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBACjE,OAAO,SAAS,CAAC,IAAI,CAAC;gBACxB,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAEvC,wCAAgB,GAAtB,UACE,IAAiC;;;gBAEjC,sBAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAC;;;KAC/C;IAEK,wCAAgB,GAAtB,UACE,IAAiC;;;gBAEjC,oEAAoE;gBACpE,sBAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAC;;;KACtD;IAEK,gCAAQ,GAAd,UAAe,IAA0B;;;gBACvC,sBAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAC;;;KAClD;IAEK,mCAAW,GAAjB,UAAkB,IAA4B;;;gBAC5C,sBAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAC;;;KAClD;IAEK,+BAAO,GAAb,UAAc,IAAwB;;;gBACpC,sBAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAiB,IAAI,CAAC,UAAU,CAAE,CAAC,EAAC;;;KAC5D;IACH,oBAAC;AAAD,CAAC,AAlDD,IAkDC;AAED,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const load: (url: string) => HTMLIFrameElement;
2
+ export { load };
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.load = void 0;
4
+ var headlessIframeId = 'fz-hl';
5
+ var load = function (url) {
6
+ var existing = document.getElementById(headlessIframeId);
7
+ if (existing) {
8
+ return existing;
9
+ }
10
+ var headless = document.createElement('iframe');
11
+ headless.style.visibility = 'hidden';
12
+ headless.style.position = 'absolute';
13
+ headless.style.left = '0px';
14
+ headless.style.top = '0px';
15
+ headless.style.height = '0px';
16
+ headless.style.width = '0px';
17
+ headless.style.border = 'none';
18
+ headless.setAttribute('src', url);
19
+ headless.setAttribute('id', headlessIframeId);
20
+ document.body.appendChild(headless);
21
+ return headless;
22
+ };
23
+ exports.load = load;
24
+ //# sourceMappingURL=bridge-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-client.js","sourceRoot":"","sources":["../../src/shared/bridge-client.ts"],"names":[],"mappings":";;;AAAA,IAAM,gBAAgB,GAAG,OAAO,CAAA;AAEhC,IAAM,IAAI,GAAG,UAAC,GAAW;IACvB,IAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAE1D,IAAI,QAAQ,EAAE;QACZ,OAAO,QAA6B,CAAA;KACrC;IAED,IAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjD,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAA;IACpC,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAA;IACpC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACjC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAC7C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IACnC,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAGC,oBAAI"}
@@ -0,0 +1,6 @@
1
+ declare const LocalStorageAccessTokenKey = "fz-access-token";
2
+ declare const RequestHeaderSdkVersion = "fz-sdk-version";
3
+ declare const RequestHeaderMerchantUsername = "fz-merchant-username";
4
+ declare const RequestTimeout = 8000;
5
+ declare const LongRequestTimeout = 15000;
6
+ export { LocalStorageAccessTokenKey, RequestHeaderSdkVersion, RequestHeaderMerchantUsername, RequestTimeout, LongRequestTimeout };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LongRequestTimeout = exports.RequestTimeout = exports.RequestHeaderMerchantUsername = exports.RequestHeaderSdkVersion = exports.LocalStorageAccessTokenKey = void 0;
4
+ // Local storage key naming convension:
5
+ // Hypen-separated string with all letters in lower case.
6
+ var LocalStorageAccessTokenKey = 'fz-access-token';
7
+ exports.LocalStorageAccessTokenKey = LocalStorageAccessTokenKey;
8
+ // Request header naming convension:
9
+ // Hyphen-separated string with capitalised 1st letter. Capitalise acronyms
10
+ // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
11
+ var RequestHeaderSdkVersion = 'fz-sdk-version';
12
+ exports.RequestHeaderSdkVersion = RequestHeaderSdkVersion;
13
+ var RequestHeaderMerchantUsername = 'fz-merchant-username';
14
+ exports.RequestHeaderMerchantUsername = RequestHeaderMerchantUsername;
15
+ var RequestTimeout = 8000; // ms
16
+ exports.RequestTimeout = RequestTimeout;
17
+ var LongRequestTimeout = 15000; // ms
18
+ exports.LongRequestTimeout = LongRequestTimeout;
19
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AACvC,yDAAyD;AACzD,IAAM,0BAA0B,GAAG,iBAAiB,CAAA;AAWlD,gEAA0B;AAT5B,oCAAoC;AACpC,2EAA2E;AAC3E,gEAAgE;AAChE,IAAM,uBAAuB,GAAG,gBAAgB,CAAA;AAO9C,0DAAuB;AANzB,IAAM,6BAA6B,GAAG,sBAAsB,CAAA;AAO1D,sEAA6B;AAN/B,IAAM,cAAc,GAAG,IAAI,CAAA,CAAC,KAAK;AAO/B,wCAAc;AANhB,IAAM,kBAAkB,GAAG,KAAK,CAAA,CAAC,KAAK;AAOpC,gDAAkB"}
@@ -0,0 +1,28 @@
1
+ import { PublicEvent } from "./types";
2
+ interface EventData {
3
+ detail: {
4
+ data: any;
5
+ message?: string;
6
+ } | {
7
+ errors: string[];
8
+ };
9
+ }
10
+ interface SuccessEventDetail {
11
+ message: string;
12
+ data: any;
13
+ }
14
+ interface ErrorEventDetail {
15
+ errors: string[];
16
+ data: any;
17
+ }
18
+ interface SuccessEventDetail {
19
+ message: string;
20
+ data: any;
21
+ }
22
+ interface ErrorEventDetail {
23
+ errors: string[];
24
+ data: any;
25
+ }
26
+ declare const emit: (event: PublicEvent, data: SuccessEventDetail | ErrorEventDetail, target?: HTMLElement | Window) => void;
27
+ declare const on: (event: PublicEvent, callback: (e: any) => void, target?: HTMLElement | Window) => void;
28
+ export { EventData, emit, on };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.on = exports.emit = void 0;
4
+ // TODO: CustomEvent requires polyfill for IE.
5
+ var emit = function (event, data, target) {
6
+ if (target === void 0) { target = window; }
7
+ target.dispatchEvent(new CustomEvent(event, { detail: data }));
8
+ };
9
+ exports.emit = emit;
10
+ var on = function (event, callback, target) {
11
+ if (target === void 0) { target = window; }
12
+ target.addEventListener(event, callback);
13
+ };
14
+ exports.on = on;
15
+ //# sourceMappingURL=event-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-manager.js","sourceRoot":"","sources":["../../src/shared/event-manager.ts"],"names":[],"mappings":";;;AA0BA,8CAA8C;AAC9C,IAAM,IAAI,GAAG,UACX,KAAkB,EAClB,IAA2C,EAC3C,MAAqC;IAArC,uBAAA,EAAA,eAAqC;IAErC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAUkB,oBAAI;AARxB,IAAM,EAAE,GAAG,UACT,KAAkB,EAClB,QAA0B,EAC1B,MAAqC;IAArC,uBAAA,EAAA,eAAqC;IAErC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEwB,gBAAE"}
@@ -0,0 +1,47 @@
1
+ interface PostMessage {
2
+ channel: string;
3
+ subject: string;
4
+ data: unknown;
5
+ }
6
+ interface PostMessageLegacy {
7
+ message: string;
8
+ data: {
9
+ [key: string]: string | boolean;
10
+ };
11
+ }
12
+ interface PostMessageClientConfig {
13
+ channel: string;
14
+ target?: HTMLIFrameElement;
15
+ }
16
+ interface EventHandlers {
17
+ [key: string]: (data: any) => void;
18
+ }
19
+ interface CreateCardTokenPostMessageData {
20
+ access_token: string;
21
+ card_holder: string;
22
+ card_number: string;
23
+ card_expiry: string;
24
+ cvv: string;
25
+ }
26
+ interface CreatePurchasePostMessageData {
27
+ access_token: string;
28
+ amount: number;
29
+ card_token: string;
30
+ currency: string;
31
+ extra?: {
32
+ [key: string]: boolean | string;
33
+ };
34
+ hash: string;
35
+ invoice: string;
36
+ test?: boolean;
37
+ }
38
+ declare class PostMessageClient {
39
+ private channel;
40
+ private fzEnv;
41
+ private target;
42
+ constructor(config: PostMessageClientConfig);
43
+ setEventListeners(handlers: EventHandlers): void;
44
+ setEventListenersLegacy(handlers: EventHandlers): void;
45
+ send(message: PostMessage | PostMessageLegacy): void;
46
+ }
47
+ export { CreateCardTokenPostMessageData, CreatePurchasePostMessageData, PostMessage, PostMessageLegacy, PostMessageClient, PostMessageClientConfig, };