@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.
- package/.jest/setup-env-vars.js +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/react/VerifyCard.d.ts +10 -0
- package/dist/react/VerifyCard.js +22 -0
- package/dist/react/VerifyCard.js.map +1 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.js +9 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/url.d.ts +26 -0
- package/dist/react/url.js +63 -0
- package/dist/react/url.js.map +1 -0
- package/dist/react/useFatZebra.d.ts +12 -0
- package/dist/react/useFatZebra.js +148 -0
- package/dist/react/useFatZebra.js.map +1 -0
- package/dist/sca/cardinal.d.ts +28 -0
- package/dist/sca/cardinal.js +110 -0
- package/dist/sca/cardinal.js.map +1 -0
- package/dist/sca/eci-mappings.d.ts +6 -0
- package/dist/sca/eci-mappings.js +63 -0
- package/dist/sca/eci-mappings.js.map +1 -0
- package/dist/sca/index.d.ts +38 -0
- package/dist/sca/index.js +395 -0
- package/dist/sca/index.js.map +1 -0
- package/dist/sca/scenarios/enrollment.d.ts +15 -0
- package/dist/sca/scenarios/enrollment.js +150 -0
- package/dist/sca/scenarios/enrollment.js.map +1 -0
- package/dist/sca/scenarios/index.d.ts +2 -0
- package/dist/sca/scenarios/index.js +8 -0
- package/dist/sca/scenarios/index.js.map +1 -0
- package/dist/sca/scenarios/validation.d.ts +15 -0
- package/dist/sca/scenarios/validation.js +128 -0
- package/dist/sca/scenarios/validation.js.map +1 -0
- package/dist/sca/types.d.ts +158 -0
- package/dist/sca/types.js +57 -0
- package/dist/sca/types.js.map +1 -0
- package/dist/shared/api-gateway-client.d.ts +17 -0
- package/dist/shared/api-gateway-client.js +106 -0
- package/dist/shared/api-gateway-client.js.map +1 -0
- package/dist/shared/bridge-client.d.ts +2 -0
- package/dist/shared/bridge-client.js +24 -0
- package/dist/shared/bridge-client.js.map +1 -0
- package/dist/shared/constants.d.ts +6 -0
- package/dist/shared/constants.js +19 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/event-manager.d.ts +28 -0
- package/dist/shared/event-manager.js +15 -0
- package/dist/shared/event-manager.js.map +1 -0
- package/dist/shared/post-message-client.d.ts +47 -0
- package/dist/shared/post-message-client.js +107 -0
- package/dist/shared/post-message-client.js.map +1 -0
- package/dist/shared/types.d.ts +142 -0
- package/dist/shared/types.js +41 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/util.d.ts +6 -0
- package/dist/shared/util.js +96 -0
- package/dist/shared/util.js.map +1 -0
- package/fatzebra-sdk-1.0.0.tgz +0 -0
- package/index.js +0 -0
- package/jest.config.js +16 -0
- package/package.json +33 -0
- package/src/index.ts +9 -0
- package/src/react/VerifyCard.tsx +36 -0
- package/src/react/index.ts +3 -0
- package/src/react/url.ts +97 -0
- package/src/react/useFatZebra.ts +154 -0
- package/src/sca/__tests__/eci-mappings.test.ts +35 -0
- package/src/sca/__tests__/index.test.ts +514 -0
- package/src/sca/cardinal.ts +136 -0
- package/src/sca/eci-mappings.ts +63 -0
- package/src/sca/index.ts +329 -0
- package/src/sca/scenarios/enrollment.ts +164 -0
- package/src/sca/scenarios/index.ts +2 -0
- package/src/sca/scenarios/validation.ts +142 -0
- package/src/sca/types.ts +206 -0
- package/src/shared/api-gateway-client.ts +71 -0
- package/src/shared/bridge-client.ts +26 -0
- package/src/shared/constants.ts +19 -0
- package/src/shared/event-manager.ts +44 -0
- package/src/shared/post-message-client.test.ts +73 -0
- package/src/shared/post-message-client.ts +125 -0
- package/src/shared/types.test.ts +65 -0
- package/src/shared/types.ts +182 -0
- package/src/shared/util.test.ts +164 -0
- package/src/shared/util.ts +98 -0
- package/tests/helpers/api-gateway-mock.ts +46 -0
- package/tsconfig.json +22 -0
- package/yarn-error.log +2374 -0
|
@@ -0,0 +1,107 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.PostMessageClient = void 0;
|
|
40
|
+
var types_1 = require("../shared/types");
|
|
41
|
+
var domain = process.env.PAYNOW_BASE_URL;
|
|
42
|
+
// NODE_ENV is introduced to PostMessageClient purely for the purpose of bypassing security
|
|
43
|
+
// check on the postMessage event between parent and child frames. Unforunately there is
|
|
44
|
+
// no workaround to override event origin due to lack of support in existing test framework.
|
|
45
|
+
var PostMessageClient = /** @class */ (function () {
|
|
46
|
+
function PostMessageClient(config) {
|
|
47
|
+
this.channel = config.channel;
|
|
48
|
+
this.fzEnv = process.env.NODE_ENV;
|
|
49
|
+
this.target = config.target;
|
|
50
|
+
}
|
|
51
|
+
// Handle event messages that conform to PostMessage format.
|
|
52
|
+
PostMessageClient.prototype.setEventListeners = function (handlers) {
|
|
53
|
+
var _this = this;
|
|
54
|
+
window.addEventListener("message", function (event) { return __awaiter(_this, void 0, void 0, function () {
|
|
55
|
+
var validationEnabled, isChannelValid, isOriginValid, message, subject, handler;
|
|
56
|
+
return __generator(this, function (_a) {
|
|
57
|
+
validationEnabled = ![types_1.NODE_ENV.TEST, types_1.NODE_ENV.LOCALDEV].includes(this.fzEnv);
|
|
58
|
+
isChannelValid = event.data.channel === this.channel;
|
|
59
|
+
isOriginValid = event.origin === domain;
|
|
60
|
+
if (validationEnabled && (!isOriginValid || !isChannelValid)) {
|
|
61
|
+
console.log('[WARNING] unmatched event origin or incorrect message channel');
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
}
|
|
64
|
+
message = event.data;
|
|
65
|
+
subject = message.subject;
|
|
66
|
+
handler = handlers[subject];
|
|
67
|
+
if (handler) {
|
|
68
|
+
handler(message.data);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Do not throw error here as it is possible that the parent frame chooses
|
|
72
|
+
// not to handle certain messages posted from child frame.
|
|
73
|
+
console.log("[WARNING] No handler registered for subject ".concat(subject, ", message ").concat(JSON.stringify(message)));
|
|
74
|
+
}
|
|
75
|
+
return [2 /*return*/];
|
|
76
|
+
});
|
|
77
|
+
}); });
|
|
78
|
+
};
|
|
79
|
+
// Handle event messages that do not conform to PostMessage format.
|
|
80
|
+
PostMessageClient.prototype.setEventListenersLegacy = function (handlers) {
|
|
81
|
+
var _this = this;
|
|
82
|
+
window.addEventListener("message", function (event) {
|
|
83
|
+
var validationEnabled = ![types_1.NODE_ENV.TEST, types_1.NODE_ENV.LOCALDEV].includes(_this.fzEnv);
|
|
84
|
+
var isOriginValid = event.origin === domain;
|
|
85
|
+
if (validationEnabled && !isOriginValid) {
|
|
86
|
+
console.log('[WARNING] unmatched event origin or incorrect message channel');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
var message = event.data;
|
|
90
|
+
var handler = handlers[message.message];
|
|
91
|
+
if (handler) {
|
|
92
|
+
handler(message.data);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Do not throw error here as it is possible that the parent frame chooses
|
|
96
|
+
// not to handle certain messages posted from child frame.
|
|
97
|
+
console.log("[WARNING] no handler registered for message ".concat(message.message));
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
PostMessageClient.prototype.send = function (message) {
|
|
102
|
+
this.target.contentWindow.postMessage(message, domain);
|
|
103
|
+
};
|
|
104
|
+
return PostMessageClient;
|
|
105
|
+
}());
|
|
106
|
+
exports.PostMessageClient = PostMessageClient;
|
|
107
|
+
//# sourceMappingURL=post-message-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-message-client.js","sourceRoot":"","sources":["../../src/shared/post-message-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA0C;AA2C1C,IAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;AAE1C,2FAA2F;AAC3F,wFAAwF;AACxF,4FAA4F;AAE5F;IAKE,2BAAY,MAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAoB,CAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,CAAC;IAED,4DAA4D;IAC5D,6CAAiB,GAAjB,UAAkB,QAAuB;QAAzC,iBAwBC;QAvBC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAM,KAAK;;;gBAEtC,iBAAiB,GAAG,CAAC,CAAC,gBAAQ,CAAC,IAAI,EAAE,gBAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC5E,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAA;gBACpD,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAA;gBAE7C,IAAI,iBAAiB,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,EAAE;oBAC5D,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAA;oBAC5E,sBAAM;iBACP;gBAEK,OAAO,GAAG,KAAK,CAAC,IAAmB,CAAA;gBACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;gBACzB,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAEjC,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;iBACtB;qBAAM;oBACL,0EAA0E;oBAC1E,0DAA0D;oBAC1D,OAAO,CAAC,GAAG,CAAC,sDAA+C,OAAO,uBAAa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAE,CAAC,CAAA;iBAC1G;;;aACF,CAAC,CAAA;IACJ,CAAC;IAED,mEAAmE;IACnE,mDAAuB,GAAvB,UAAwB,QAAuB;QAA/C,iBAsBC;QArBC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,KAAK;YAEvC,IAAM,iBAAiB,GAAG,CAAC,CAAC,gBAAQ,CAAC,IAAI,EAAE,gBAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,CAAA;YAClF,IAAM,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAA;YAE7C,IAAI,iBAAiB,IAAI,CAAC,aAAa,EAAE;gBACvC,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAA;gBAC5E,OAAM;aACP;YAED,IAAM,OAAO,GAAG,KAAK,CAAC,IAAyB,CAAA;YAC/C,IAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAEzC,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;aACtB;iBAAM;gBACL,0EAA0E;gBAC1E,0DAA0D;gBAC1D,OAAO,CAAC,GAAG,CAAC,sDAA+C,OAAO,CAAC,OAAO,CAAE,CAAC,CAAA;aAC9E;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,gCAAI,GAAJ,UAAK,OAAwC;QAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACxD,CAAC;IACH,wBAAC;AAAD,CAAC,AAlED,IAkEC;AAOC,8CAAiB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
declare enum NODE_ENV {
|
|
2
|
+
LOCALDEV = "localdev",
|
|
3
|
+
PRODUCTION = "production",
|
|
4
|
+
SANDBOX = "sandbox",
|
|
5
|
+
STAGING = "staging",
|
|
6
|
+
TEST = "test"
|
|
7
|
+
}
|
|
8
|
+
declare enum PublicEvent {
|
|
9
|
+
FORM_VALIDATION_ERROR = "fz.form_validation.error",
|
|
10
|
+
FORM_VALIDATION_SUCCESS = "fz.form_validation.success",
|
|
11
|
+
VALIDATION_ERROR = "fz.validation.error",
|
|
12
|
+
SCA_SUCCESS = "fz.sca.success",
|
|
13
|
+
SCA_ERROR = "fz.sca.error",
|
|
14
|
+
TOKENIZATION_SUCCESS = "fz.tokenization.success",
|
|
15
|
+
TOKENIZATION_ERROR = "fz.tokenization.error",
|
|
16
|
+
PAYMENT_SUCCESS = "fz.payment.success",
|
|
17
|
+
PAYMENT_ERROR = "fz.payment.error",
|
|
18
|
+
BIN_LOOKUP = "fz.bin.lookup"
|
|
19
|
+
}
|
|
20
|
+
declare enum BridgeEvent {
|
|
21
|
+
TOKENIZE_CARD_REQUEST = "fzi.tc_req",
|
|
22
|
+
TOKENIZE_CARD_RESPONSE = "fzi.tc_res",
|
|
23
|
+
CREATE_PAYMENT_REQUEST = "fzi.cp_req",
|
|
24
|
+
CREATE_PAYMENT_RESPONSE = "fzi.cp_res",
|
|
25
|
+
TRIGGER_PAYNOW_BUTTON = "fzi.pn_btn",
|
|
26
|
+
FORM_VALIDATION_ERROR = "fzi.form_validation_error",
|
|
27
|
+
FORM_VALIDATION_SUCCESS = "fzi.form_validation_success",
|
|
28
|
+
BIN_LOOKUP = "fzi.bin_lookup"
|
|
29
|
+
}
|
|
30
|
+
declare enum PaymentMethodType {
|
|
31
|
+
CARD = "card",
|
|
32
|
+
CARD_ON_FILE = "card_on_file"
|
|
33
|
+
}
|
|
34
|
+
interface Card {
|
|
35
|
+
number: string;
|
|
36
|
+
holder: string;
|
|
37
|
+
expiryMonth: string;
|
|
38
|
+
expiryYear: string;
|
|
39
|
+
cvv: string;
|
|
40
|
+
}
|
|
41
|
+
interface CardOnFile {
|
|
42
|
+
token: string;
|
|
43
|
+
}
|
|
44
|
+
interface Customer {
|
|
45
|
+
firstName?: string;
|
|
46
|
+
lastName?: string;
|
|
47
|
+
email?: string;
|
|
48
|
+
address?: string;
|
|
49
|
+
city?: string;
|
|
50
|
+
postcode?: string;
|
|
51
|
+
state?: string;
|
|
52
|
+
country?: string;
|
|
53
|
+
}
|
|
54
|
+
interface CustomerSnakeCase {
|
|
55
|
+
first_name?: string;
|
|
56
|
+
last_name?: string;
|
|
57
|
+
email?: string;
|
|
58
|
+
address?: string;
|
|
59
|
+
city?: string;
|
|
60
|
+
state?: string;
|
|
61
|
+
postcode?: string;
|
|
62
|
+
country?: string;
|
|
63
|
+
}
|
|
64
|
+
interface Payment {
|
|
65
|
+
amount: number;
|
|
66
|
+
currency: string;
|
|
67
|
+
reference: string;
|
|
68
|
+
hide_card_holder?: boolean;
|
|
69
|
+
}
|
|
70
|
+
interface PaymentIntent {
|
|
71
|
+
payment: Payment;
|
|
72
|
+
verification: string;
|
|
73
|
+
}
|
|
74
|
+
interface PaymentMethod {
|
|
75
|
+
type?: PaymentMethodType;
|
|
76
|
+
data: Card | CardOnFile;
|
|
77
|
+
}
|
|
78
|
+
interface ValidationResult {
|
|
79
|
+
valid: boolean;
|
|
80
|
+
errors: string[];
|
|
81
|
+
}
|
|
82
|
+
type TokenizeCardResponse = {
|
|
83
|
+
bin: string;
|
|
84
|
+
token: string;
|
|
85
|
+
errors?: Array<string>;
|
|
86
|
+
};
|
|
87
|
+
type Callback = (event: any) => void;
|
|
88
|
+
type Handlers = Partial<Record<PublicEvent, Callback>>;
|
|
89
|
+
export type VerificationConfig = {
|
|
90
|
+
accessToken: string;
|
|
91
|
+
paymentIntent: PaymentIntent;
|
|
92
|
+
verification: string;
|
|
93
|
+
options?: Options;
|
|
94
|
+
};
|
|
95
|
+
export type PaymentConfig = {
|
|
96
|
+
accessToken: string;
|
|
97
|
+
payment: PaymentIntent;
|
|
98
|
+
options: Options;
|
|
99
|
+
};
|
|
100
|
+
type Options = Partial<{
|
|
101
|
+
css: string;
|
|
102
|
+
cssSignature: string;
|
|
103
|
+
enableSca: boolean;
|
|
104
|
+
tokenizeOnly: boolean;
|
|
105
|
+
}>;
|
|
106
|
+
export type TransactionPayload = {
|
|
107
|
+
transactionId: string;
|
|
108
|
+
responseCode: string;
|
|
109
|
+
message: string;
|
|
110
|
+
amount: number;
|
|
111
|
+
currency: string;
|
|
112
|
+
reference: string;
|
|
113
|
+
cardNumber: string;
|
|
114
|
+
cardHolder: string;
|
|
115
|
+
cardExpiry: string;
|
|
116
|
+
cardType: string;
|
|
117
|
+
verification: string;
|
|
118
|
+
};
|
|
119
|
+
export type CreatePaymentResponse = {
|
|
120
|
+
transaction_id: TransactionPayload["transactionId"];
|
|
121
|
+
response_code: TransactionPayload["responseCode"];
|
|
122
|
+
message: TransactionPayload["message"];
|
|
123
|
+
amount: TransactionPayload["amount"];
|
|
124
|
+
currency: TransactionPayload["currency"];
|
|
125
|
+
reference: TransactionPayload["reference"];
|
|
126
|
+
card_number: TransactionPayload["cardNumber"];
|
|
127
|
+
card_holder: TransactionPayload["cardHolder"];
|
|
128
|
+
card_expiry: TransactionPayload["cardExpiry"];
|
|
129
|
+
card_type: TransactionPayload["cardType"];
|
|
130
|
+
v: TransactionPayload["verification"];
|
|
131
|
+
errors?: Array<string>;
|
|
132
|
+
};
|
|
133
|
+
declare global {
|
|
134
|
+
interface Window {
|
|
135
|
+
ApplePaySession: any;
|
|
136
|
+
Cardinal: any;
|
|
137
|
+
FatZebra: any;
|
|
138
|
+
HPP: any;
|
|
139
|
+
MerchantUsername: string;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export { BridgeEvent, PublicEvent, NODE_ENV, Card, CardOnFile, Customer, CustomerSnakeCase, Handlers, Payment, PaymentIntent, PaymentMethod, PaymentMethodType, TokenizeCardResponse, ValidationResult };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PaymentMethodType = exports.NODE_ENV = exports.PublicEvent = exports.BridgeEvent = void 0;
|
|
4
|
+
var NODE_ENV;
|
|
5
|
+
(function (NODE_ENV) {
|
|
6
|
+
NODE_ENV["LOCALDEV"] = "localdev";
|
|
7
|
+
NODE_ENV["PRODUCTION"] = "production";
|
|
8
|
+
NODE_ENV["SANDBOX"] = "sandbox";
|
|
9
|
+
NODE_ENV["STAGING"] = "staging";
|
|
10
|
+
NODE_ENV["TEST"] = "test";
|
|
11
|
+
})(NODE_ENV || (exports.NODE_ENV = NODE_ENV = {}));
|
|
12
|
+
var PublicEvent;
|
|
13
|
+
(function (PublicEvent) {
|
|
14
|
+
PublicEvent["FORM_VALIDATION_ERROR"] = "fz.form_validation.error";
|
|
15
|
+
PublicEvent["FORM_VALIDATION_SUCCESS"] = "fz.form_validation.success";
|
|
16
|
+
PublicEvent["VALIDATION_ERROR"] = "fz.validation.error";
|
|
17
|
+
PublicEvent["SCA_SUCCESS"] = "fz.sca.success";
|
|
18
|
+
PublicEvent["SCA_ERROR"] = "fz.sca.error";
|
|
19
|
+
PublicEvent["TOKENIZATION_SUCCESS"] = "fz.tokenization.success";
|
|
20
|
+
PublicEvent["TOKENIZATION_ERROR"] = "fz.tokenization.error";
|
|
21
|
+
PublicEvent["PAYMENT_SUCCESS"] = "fz.payment.success";
|
|
22
|
+
PublicEvent["PAYMENT_ERROR"] = "fz.payment.error";
|
|
23
|
+
PublicEvent["BIN_LOOKUP"] = "fz.bin.lookup";
|
|
24
|
+
})(PublicEvent || (exports.PublicEvent = PublicEvent = {}));
|
|
25
|
+
var BridgeEvent;
|
|
26
|
+
(function (BridgeEvent) {
|
|
27
|
+
BridgeEvent["TOKENIZE_CARD_REQUEST"] = "fzi.tc_req";
|
|
28
|
+
BridgeEvent["TOKENIZE_CARD_RESPONSE"] = "fzi.tc_res";
|
|
29
|
+
BridgeEvent["CREATE_PAYMENT_REQUEST"] = "fzi.cp_req";
|
|
30
|
+
BridgeEvent["CREATE_PAYMENT_RESPONSE"] = "fzi.cp_res";
|
|
31
|
+
BridgeEvent["TRIGGER_PAYNOW_BUTTON"] = "fzi.pn_btn";
|
|
32
|
+
BridgeEvent["FORM_VALIDATION_ERROR"] = "fzi.form_validation_error";
|
|
33
|
+
BridgeEvent["FORM_VALIDATION_SUCCESS"] = "fzi.form_validation_success";
|
|
34
|
+
BridgeEvent["BIN_LOOKUP"] = "fzi.bin_lookup";
|
|
35
|
+
})(BridgeEvent || (exports.BridgeEvent = BridgeEvent = {}));
|
|
36
|
+
var PaymentMethodType;
|
|
37
|
+
(function (PaymentMethodType) {
|
|
38
|
+
PaymentMethodType["CARD"] = "card";
|
|
39
|
+
PaymentMethodType["CARD_ON_FILE"] = "card_on_file";
|
|
40
|
+
})(PaymentMethodType || (exports.PaymentMethodType = PaymentMethodType = {}));
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":";;;AACA,IAAK,QAMJ;AAND,WAAK,QAAQ;IACX,iCAAqB,CAAA;IACrB,qCAAyB,CAAA;IACzB,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;AACf,CAAC,EANI,QAAQ,wBAAR,QAAQ,QAMZ;AAED,IAAK,WAWJ;AAXD,WAAK,WAAW;IACd,iEAAkD,CAAA;IAClD,qEAAsD,CAAA;IACtD,uDAAwC,CAAA;IACxC,6CAA8B,CAAA;IAC9B,yCAA0B,CAAA;IAC1B,+DAAgD,CAAA;IAChD,2DAA4C,CAAA;IAC5C,qDAAsC,CAAA;IACtC,iDAAkC,CAAA;IAClC,2CAA4B,CAAA;AAC9B,CAAC,EAXI,WAAW,2BAAX,WAAW,QAWf;AAED,IAAK,WASJ;AATD,WAAK,WAAW;IACd,mDAAoC,CAAA;IACpC,oDAAqC,CAAA;IACrC,oDAAqC,CAAA;IACrC,qDAAsC,CAAA;IACtC,mDAAoC,CAAA;IACpC,kEAAmD,CAAA;IACnD,sEAAuD,CAAA;IACvD,4CAA6B,CAAA;AAC/B,CAAC,EATI,WAAW,2BAAX,WAAW,QASf;AAED,IAAK,iBAGJ;AAHD,WAAK,iBAAiB;IACpB,kCAAa,CAAA;IACb,kDAA6B,CAAA;AAC/B,CAAC,EAHI,iBAAiB,iCAAjB,iBAAiB,QAGrB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const toCamelCase: (s: string) => string;
|
|
2
|
+
declare const toSnakeCase: (s: string) => string;
|
|
3
|
+
declare const toObjectWithSnakeCaseKeys: (o: any) => any;
|
|
4
|
+
declare const toObjectWithCamelCaseKeys: (o: any) => any;
|
|
5
|
+
declare const getSdkVersionNumber: () => any;
|
|
6
|
+
export { toCamelCase, toSnakeCase, toObjectWithCamelCaseKeys, toObjectWithSnakeCaseKeys, getSdkVersionNumber, };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSdkVersionNumber = exports.toObjectWithSnakeCaseKeys = exports.toObjectWithCamelCaseKeys = exports.toSnakeCase = exports.toCamelCase = void 0;
|
|
4
|
+
var _package = require('../../package.json');
|
|
5
|
+
var toCamelCase = function (s) {
|
|
6
|
+
return s.replace(/_([a-z])/g, function (g) { return g[1].toUpperCase(); });
|
|
7
|
+
};
|
|
8
|
+
exports.toCamelCase = toCamelCase;
|
|
9
|
+
var toSnakeCase = function (s) {
|
|
10
|
+
return s.replace(/[A-Z]/g, function (char) { return "_".concat(char.toLowerCase()); });
|
|
11
|
+
};
|
|
12
|
+
exports.toSnakeCase = toSnakeCase;
|
|
13
|
+
var primitiveTypes = ['string', 'number', 'boolean', 'undefined', 'symbol', 'bigint'];
|
|
14
|
+
var toObjectWithSnakeCaseKeys = function (o) {
|
|
15
|
+
var objectType = typeof o;
|
|
16
|
+
if (primitiveTypes.includes(objectType) || o == null) {
|
|
17
|
+
return o;
|
|
18
|
+
}
|
|
19
|
+
var converted = {};
|
|
20
|
+
var _loop_1 = function (key) {
|
|
21
|
+
switch (typeof o[key]) {
|
|
22
|
+
case 'object':
|
|
23
|
+
if (Array.isArray(o[key])) {
|
|
24
|
+
converted[toSnakeCase(key)] = [];
|
|
25
|
+
Object.keys(o[key]).forEach(function (k) {
|
|
26
|
+
var c = toObjectWithSnakeCaseKeys(o[key][k]);
|
|
27
|
+
converted[toSnakeCase(key)].push(c);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (o[key] == null) {
|
|
32
|
+
converted[toSnakeCase(key)] = o[key];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
converted[toSnakeCase(key)] = toObjectWithSnakeCaseKeys(o[key]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
break;
|
|
39
|
+
case 'string':
|
|
40
|
+
case 'number':
|
|
41
|
+
case 'boolean':
|
|
42
|
+
case 'undefined':
|
|
43
|
+
converted[toSnakeCase(key)] = o[key];
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
for (var key in o) {
|
|
48
|
+
_loop_1(key);
|
|
49
|
+
}
|
|
50
|
+
return converted;
|
|
51
|
+
};
|
|
52
|
+
exports.toObjectWithSnakeCaseKeys = toObjectWithSnakeCaseKeys;
|
|
53
|
+
var toObjectWithCamelCaseKeys = function (o) {
|
|
54
|
+
var objectType = typeof o;
|
|
55
|
+
if (primitiveTypes.includes(objectType) || o == null) {
|
|
56
|
+
return o;
|
|
57
|
+
}
|
|
58
|
+
var converted = {};
|
|
59
|
+
var _loop_2 = function (key) {
|
|
60
|
+
switch (typeof o[key]) {
|
|
61
|
+
case 'object':
|
|
62
|
+
if (Array.isArray(o[key])) {
|
|
63
|
+
converted[toCamelCase(key)] = [];
|
|
64
|
+
Object.keys(o[key]).forEach(function (k) {
|
|
65
|
+
var c = toObjectWithCamelCaseKeys(o[key][k]);
|
|
66
|
+
converted[toCamelCase(key)].push(c);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (o[key] == null) {
|
|
71
|
+
converted[toCamelCase(key)] = o[key];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
converted[toCamelCase(key)] = toObjectWithCamelCaseKeys(o[key]);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
case 'string':
|
|
79
|
+
case 'number':
|
|
80
|
+
case 'boolean':
|
|
81
|
+
case 'undefined':
|
|
82
|
+
converted[toCamelCase(key)] = o[key];
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
for (var key in o) {
|
|
87
|
+
_loop_2(key);
|
|
88
|
+
}
|
|
89
|
+
return converted;
|
|
90
|
+
};
|
|
91
|
+
exports.toObjectWithCamelCaseKeys = toObjectWithCamelCaseKeys;
|
|
92
|
+
var getSdkVersionNumber = function () {
|
|
93
|
+
return _package.version;
|
|
94
|
+
};
|
|
95
|
+
exports.getSdkVersionNumber = getSdkVersionNumber;
|
|
96
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/shared/util.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/index.js
ADDED
|
File without changes
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
roots: [
|
|
3
|
+
"<rootDir>/src",
|
|
4
|
+
],
|
|
5
|
+
setupFiles: [
|
|
6
|
+
"<rootDir>/.jest/setup-env-vars.js",
|
|
7
|
+
"jest-localstorage-mock"
|
|
8
|
+
],
|
|
9
|
+
testMatch: [
|
|
10
|
+
"**/__tests__/**/*.+(ts|tsx|js)",
|
|
11
|
+
"**/?(*.)+(spec|test).+(ts|tsx|js)"
|
|
12
|
+
],
|
|
13
|
+
transform: {
|
|
14
|
+
"^.+\\.(ts|tsx)$": "ts-jest"
|
|
15
|
+
}
|
|
16
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fat-zebra/sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"private": false,
|
|
8
|
+
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "jest --clearCache && jest --passWithNoTests --verbose"
|
|
11
|
+
},
|
|
12
|
+
"author": "",
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@types/jest": "^29.5.3",
|
|
16
|
+
"@types/react": "^18.2.15",
|
|
17
|
+
"@types/react-dom": "^18.2.7",
|
|
18
|
+
"jest": "^29.6.1",
|
|
19
|
+
"jest-environment-jsdom": "^29.6.1",
|
|
20
|
+
"jest-localstorage-mock": "^2.4.26",
|
|
21
|
+
"nock": "^13.3.2",
|
|
22
|
+
"ts-jest": "^29.1.1",
|
|
23
|
+
"typescript": "^5.1.6"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"axios": "^1.4.0",
|
|
27
|
+
"url-template": "^3.1.0"
|
|
28
|
+
},
|
|
29
|
+
"optionalDependencies": {
|
|
30
|
+
"react": "^18.2.0",
|
|
31
|
+
"react-dom": "^18.2.0"
|
|
32
|
+
}
|
|
33
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import useFatZebra from "./useFatZebra";
|
|
3
|
+
import * as FatZebra from "../shared/types";
|
|
4
|
+
|
|
5
|
+
type FrameProps = {
|
|
6
|
+
handlers: FatZebra.Handlers;
|
|
7
|
+
username: string;
|
|
8
|
+
accessToken: string;
|
|
9
|
+
config: FatZebra.VerificationConfig;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const Frame = ({ username, handlers, config }: FrameProps) => {
|
|
13
|
+
const bridgeRef = React.useRef<HTMLIFrameElement>(null);
|
|
14
|
+
|
|
15
|
+
const { url } = useFatZebra({
|
|
16
|
+
username: username,
|
|
17
|
+
config,
|
|
18
|
+
handlers: handlers,
|
|
19
|
+
bridge: bridgeRef,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<div>
|
|
24
|
+
<iframe src={url} width="100%" height="700px" title="verification-form" />
|
|
25
|
+
<iframe
|
|
26
|
+
title="bridge-form"
|
|
27
|
+
src="http://paynow.test:3004/sdk/bridge"
|
|
28
|
+
width="100%"
|
|
29
|
+
height="700px"
|
|
30
|
+
ref={bridgeRef}
|
|
31
|
+
/>
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default Frame;
|
package/src/react/url.ts
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { parseTemplate } from 'url-template';
|
|
2
|
+
type RequiredURLValues = {
|
|
3
|
+
merchant: string;
|
|
4
|
+
hash: string;
|
|
5
|
+
reference: string;
|
|
6
|
+
amount: number;
|
|
7
|
+
currency: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type VerificationURLValues = OptionalURLValues & {
|
|
11
|
+
merchant: string;
|
|
12
|
+
timestamp: string;
|
|
13
|
+
verification: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type OptionalURLValues = Partial<{
|
|
17
|
+
hide_card_holder: string;
|
|
18
|
+
return_path: string
|
|
19
|
+
card_types: Array<string>;
|
|
20
|
+
surcharge_enabled: string;
|
|
21
|
+
sca_enabled: boolean;
|
|
22
|
+
css: string;
|
|
23
|
+
css_signature: string;
|
|
24
|
+
tokenize_only: boolean;
|
|
25
|
+
}>
|
|
26
|
+
|
|
27
|
+
type UrlValues = RequiredURLValues & OptionalURLValues
|
|
28
|
+
|
|
29
|
+
const generatePaymentURL = (values: UrlValues) => {
|
|
30
|
+
const queryParts = [
|
|
31
|
+
"tokenize_only",
|
|
32
|
+
"css",
|
|
33
|
+
"css_signature",
|
|
34
|
+
"iframe",
|
|
35
|
+
"postmessage",
|
|
36
|
+
"hide_card_holder",
|
|
37
|
+
"return_path",
|
|
38
|
+
"card_types",
|
|
39
|
+
"surcharge_enabled",
|
|
40
|
+
"sca_enabled",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
const urlTemplate = parseTemplate(
|
|
44
|
+
`http://paynow.test:3004/sdk/v3/{merchant}/{reference}/{currency}/{amount}/{verification}{?${queryParts.join(",")}}`
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const url = urlTemplate.expand({
|
|
48
|
+
merchant: values.merchant,
|
|
49
|
+
reference: values.reference,
|
|
50
|
+
currency: values.currency,
|
|
51
|
+
amount: values.amount,
|
|
52
|
+
verification: values.hash,
|
|
53
|
+
sca_enabled: values.sca_enabled,
|
|
54
|
+
css: values.css,
|
|
55
|
+
css_signature: values.css_signature,
|
|
56
|
+
iframe: true,
|
|
57
|
+
postmessage: true,
|
|
58
|
+
tokenize_only: values.tokenize_only,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return url;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const generateVerificationURL = (values: VerificationURLValues) => {
|
|
65
|
+
const queryParts = [
|
|
66
|
+
"tokenize_only",
|
|
67
|
+
"css",
|
|
68
|
+
"css_signature",
|
|
69
|
+
"iframe",
|
|
70
|
+
"postmessage",
|
|
71
|
+
"hide_card_holder",
|
|
72
|
+
"return_path",
|
|
73
|
+
"card_types",
|
|
74
|
+
"surcharge_enabled",
|
|
75
|
+
"sca_enabled",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
const urlTemplate = parseTemplate(
|
|
79
|
+
`http://paynow.test:3004/sdk/v3/{merchant}/verification/{timestamp}/{verification}{?${queryParts.join(",")}}`
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
const url = urlTemplate.expand({
|
|
83
|
+
merchant: values.merchant,
|
|
84
|
+
timestamp: values.timestamp,
|
|
85
|
+
verification: values.verification,
|
|
86
|
+
sca_enabled: values.sca_enabled,
|
|
87
|
+
css: values.css,
|
|
88
|
+
css_signature: values.css_signature,
|
|
89
|
+
iframe: true,
|
|
90
|
+
postmessage: true,
|
|
91
|
+
tokenize_only: values.tokenize_only,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
return url;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export { generatePaymentURL, generateVerificationURL };
|