@fat-zebra/sdk 2.0.1-beta.4 → 2.0.1-beta.7
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/dist/hpp/hpp.d.ts +3 -2
- package/dist/hpp/hpp.js +36 -22
- package/dist/main.d.ts +4 -2
- package/dist/main.js +104 -36
- package/dist/sca/index.js +1 -0
- package/dist/three_d_secure/index.js +1 -0
- package/package.json +2 -2
package/dist/hpp/hpp.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ interface HppModuleConfig {
|
|
|
13
13
|
username: string;
|
|
14
14
|
sca: Sca;
|
|
15
15
|
threeDSecure: ThreeDSecure;
|
|
16
|
-
|
|
16
|
+
requestThreeDSEnabled: () => Promise<boolean>;
|
|
17
17
|
test?: boolean;
|
|
18
18
|
}
|
|
19
19
|
interface HppLoadParams {
|
|
@@ -54,12 +54,13 @@ declare class Hpp {
|
|
|
54
54
|
private headlessPreviouslyLoaded;
|
|
55
55
|
private iframeLoaded;
|
|
56
56
|
private isThreeDSecureEnabled;
|
|
57
|
+
private requestThreeDSEnabled;
|
|
57
58
|
private challengeWindowSize;
|
|
58
59
|
private scaHandler;
|
|
59
60
|
private crossFrameListenersBound;
|
|
60
61
|
private publicEventListenersBound;
|
|
61
62
|
constructor(config: HppModuleConfig);
|
|
62
|
-
setListenersAndEmitReady(): void
|
|
63
|
+
setListenersAndEmitReady(): Promise<void>;
|
|
63
64
|
load(config: HppLoadParams): void;
|
|
64
65
|
purchase(): void;
|
|
65
66
|
getPayNowUrl(options?: {
|
package/dist/hpp/hpp.js
CHANGED
|
@@ -4,6 +4,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
7
16
|
import * as bridge from '../shared/bridge-client';
|
|
8
17
|
import { LocalStorageAccessTokenKey } from '../shared/constants';
|
|
9
18
|
import { emit, off, on } from '../shared/event-manager';
|
|
@@ -21,6 +30,7 @@ const HPP_DEFAULT_OPTIONS = {
|
|
|
21
30
|
};
|
|
22
31
|
class Hpp {
|
|
23
32
|
constructor(config) {
|
|
33
|
+
this.isThreeDSecureEnabled = false;
|
|
24
34
|
this.paymentIntent = config.paymentIntent;
|
|
25
35
|
this.customer = config.customer;
|
|
26
36
|
this.username = config.username;
|
|
@@ -31,7 +41,7 @@ class Hpp {
|
|
|
31
41
|
this.headlessPreviouslyLoaded = false;
|
|
32
42
|
this.iframeLoaded = false;
|
|
33
43
|
this.threeDSecure = config.threeDSecure;
|
|
34
|
-
this.
|
|
44
|
+
this.requestThreeDSEnabled = config.requestThreeDSEnabled;
|
|
35
45
|
this.crossFrameListenersBound = false;
|
|
36
46
|
this.publicEventListenersBound = false;
|
|
37
47
|
configureLogger({
|
|
@@ -39,26 +49,30 @@ class Hpp {
|
|
|
39
49
|
});
|
|
40
50
|
}
|
|
41
51
|
setListenersAndEmitReady() {
|
|
42
|
-
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (this.headlessLoaded && this.iframeLoaded) {
|
|
47
|
-
if (!this.publicEventListenersBound && !this.isThreeDSecureEnabled()) {
|
|
48
|
-
this.setPublicEventListeners();
|
|
49
|
-
this.publicEventListenersBound = true;
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
if (!this.crossFrameListenersBound) {
|
|
54
|
+
this.setCrossFramesEventListeners();
|
|
55
|
+
this.crossFrameListenersBound = true;
|
|
50
56
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.publicEventListenersBound = true;
|
|
57
|
+
if (this.headlessLoaded && this.iframeLoaded) {
|
|
58
|
+
this.isThreeDSecureEnabled = yield this.requestThreeDSEnabled();
|
|
59
|
+
if (!this.publicEventListenersBound && !this.isThreeDSecureEnabled) {
|
|
60
|
+
this.setPublicEventListeners();
|
|
61
|
+
this.publicEventListenersBound = true;
|
|
62
|
+
}
|
|
63
|
+
emit(PublicEvent.HPP_READY);
|
|
59
64
|
}
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
else if (this.headlessPreviouslyLoaded && this.iframeLoaded) {
|
|
66
|
+
this.isThreeDSecureEnabled = yield this.requestThreeDSEnabled();
|
|
67
|
+
// subsequent iframe loads after headless has been previously loaded
|
|
68
|
+
// this caters for the SPA scenario
|
|
69
|
+
if (!this.publicEventListenersBound && !this.isThreeDSecureEnabled) {
|
|
70
|
+
this.setPublicEventListeners();
|
|
71
|
+
this.publicEventListenersBound = true;
|
|
72
|
+
}
|
|
73
|
+
emit(PublicEvent.HPP_READY);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
62
76
|
}
|
|
63
77
|
load(config) {
|
|
64
78
|
var _a;
|
|
@@ -74,10 +88,10 @@ class Hpp {
|
|
|
74
88
|
channel: 'sca',
|
|
75
89
|
target: this.iframe
|
|
76
90
|
});
|
|
77
|
-
this.headless.
|
|
91
|
+
this.headless.addEventListener('load', () => {
|
|
78
92
|
this.headlessLoaded = true;
|
|
79
93
|
this.setListenersAndEmitReady();
|
|
80
|
-
};
|
|
94
|
+
});
|
|
81
95
|
this.iframe.onload = () => {
|
|
82
96
|
this.iframeLoaded = true;
|
|
83
97
|
this.setListenersAndEmitReady();
|
|
@@ -145,7 +159,7 @@ class Hpp {
|
|
|
145
159
|
if (this.hppOptions.tokenizeOnly)
|
|
146
160
|
return;
|
|
147
161
|
if (this.hppOptions.enableSca) {
|
|
148
|
-
if (this.isThreeDSecureEnabled
|
|
162
|
+
if (this.isThreeDSecureEnabled) {
|
|
149
163
|
this.threeDSecure.run({
|
|
150
164
|
paymentIntent: this.paymentIntent,
|
|
151
165
|
merchantUsername: this.username,
|
package/dist/main.d.ts
CHANGED
|
@@ -29,7 +29,6 @@ export default class FatZebra {
|
|
|
29
29
|
private gatewayClient;
|
|
30
30
|
private headless;
|
|
31
31
|
private threeDSecure;
|
|
32
|
-
private threeDSEnabled;
|
|
33
32
|
private threeDSecureListenersBound;
|
|
34
33
|
constructor(config: FZConfig);
|
|
35
34
|
tokenizeCard(card: Card): void;
|
|
@@ -37,9 +36,12 @@ export default class FatZebra {
|
|
|
37
36
|
private requestThreeDSEnabled;
|
|
38
37
|
verifyCard(params: VerifyCardParams): Promise<void>;
|
|
39
38
|
setThreeDSecureListeners(): void;
|
|
40
|
-
renderPaymentsPage(params: HppLoadParams):
|
|
39
|
+
renderPaymentsPage(params: HppLoadParams): void;
|
|
41
40
|
renderApplePayButton(params: ApplePayParams): void;
|
|
42
41
|
renderClickToPay(params: HppClickToPayParams): void;
|
|
42
|
+
reportThreeDSecureFetchedOnInit(data: any): void;
|
|
43
|
+
reportThreeDSecureFetched(data: any, paymentIntent?: PaymentIntent): void;
|
|
44
|
+
reportRequestThreedsEnabledTimeout(paymentIntent?: PaymentIntent): void;
|
|
43
45
|
checkout(): void;
|
|
44
46
|
on(event: PublicEvent, callback: (e: any) => void): void;
|
|
45
47
|
off(event: PublicEvent, callback: (e: any) => void): void;
|
package/dist/main.js
CHANGED
|
@@ -30,7 +30,6 @@ import { logMethod } from './logging/logMethod';
|
|
|
30
30
|
import ThreeDSecure from './three_d_secure';
|
|
31
31
|
export default class FatZebra {
|
|
32
32
|
constructor(config) {
|
|
33
|
-
this.threeDSEnabled = false;
|
|
34
33
|
this.threeDSecureListenersBound = false;
|
|
35
34
|
setLoggerUsername(config.username);
|
|
36
35
|
this.fzConfig = config;
|
|
@@ -53,9 +52,9 @@ export default class FatZebra {
|
|
|
53
52
|
this.setThreeDSecureListeners();
|
|
54
53
|
}
|
|
55
54
|
else {
|
|
56
|
-
this.headless.
|
|
55
|
+
this.headless.addEventListener('load', () => {
|
|
57
56
|
this.setThreeDSecureListeners();
|
|
58
|
-
};
|
|
57
|
+
});
|
|
59
58
|
}
|
|
60
59
|
const message = {
|
|
61
60
|
channel: 'sca',
|
|
@@ -91,9 +90,9 @@ export default class FatZebra {
|
|
|
91
90
|
};
|
|
92
91
|
postMessageClient.setEventListeners(handlers);
|
|
93
92
|
}
|
|
94
|
-
requestThreeDSEnabled() {
|
|
93
|
+
requestThreeDSEnabled(paymentIntent) {
|
|
94
|
+
console.log('requestThreeDSEnabled');
|
|
95
95
|
return new Promise((resolve) => {
|
|
96
|
-
var _a;
|
|
97
96
|
const channel = 'sca';
|
|
98
97
|
const postMessageClient = new PostMessageClient({
|
|
99
98
|
channel,
|
|
@@ -103,8 +102,8 @@ export default class FatZebra {
|
|
|
103
102
|
postMessageClient.setEventListeners({
|
|
104
103
|
[BridgeEvent.THREE_D_SECURE_ENABLED]: (data) => {
|
|
105
104
|
const enabled = typeof data === 'boolean' ? data : false;
|
|
106
|
-
this.threeDSEnabled = enabled;
|
|
107
105
|
if (!resolved) {
|
|
106
|
+
this.reportThreeDSecureFetched(data, paymentIntent);
|
|
108
107
|
resolved = true;
|
|
109
108
|
resolve(enabled);
|
|
110
109
|
}
|
|
@@ -118,13 +117,14 @@ export default class FatZebra {
|
|
|
118
117
|
access_token: window.localStorage.getItem(LocalStorageAccessTokenKey),
|
|
119
118
|
},
|
|
120
119
|
};
|
|
121
|
-
|
|
120
|
+
postMessageClient.send(message);
|
|
122
121
|
window.setTimeout(() => {
|
|
123
122
|
if (!resolved) {
|
|
123
|
+
this.reportRequestThreedsEnabledTimeout(paymentIntent);
|
|
124
124
|
resolved = true;
|
|
125
125
|
resolve(false);
|
|
126
126
|
}
|
|
127
|
-
},
|
|
127
|
+
}, 1000);
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
130
|
verifyCard(params) {
|
|
@@ -138,9 +138,10 @@ export default class FatZebra {
|
|
|
138
138
|
});
|
|
139
139
|
return;
|
|
140
140
|
}
|
|
141
|
-
const threeDSEnabled = yield this.requestThreeDSEnabled();
|
|
141
|
+
const threeDSEnabled = yield this.requestThreeDSEnabled(params.paymentIntent);
|
|
142
142
|
switch (params.paymentMethod.type) {
|
|
143
143
|
case PaymentMethodType.CARD: {
|
|
144
|
+
console.log('Verify card (new card)');
|
|
144
145
|
const card = params.paymentMethod.data;
|
|
145
146
|
this.cardDidTokenize((data) => __awaiter(this, void 0, void 0, function* () {
|
|
146
147
|
var _a, _b;
|
|
@@ -169,6 +170,7 @@ export default class FatZebra {
|
|
|
169
170
|
break;
|
|
170
171
|
}
|
|
171
172
|
case PaymentMethodType.CARD_ON_FILE: {
|
|
173
|
+
console.log('Verify card (card on file)');
|
|
172
174
|
const cardToken = params.paymentMethod.data.token;
|
|
173
175
|
if (threeDSEnabled) {
|
|
174
176
|
this.threeDSecure.run({
|
|
@@ -198,6 +200,7 @@ export default class FatZebra {
|
|
|
198
200
|
});
|
|
199
201
|
}
|
|
200
202
|
setThreeDSecureListeners() {
|
|
203
|
+
console.log('setThreeDSecureListeners');
|
|
201
204
|
if (this.threeDSecureListenersBound)
|
|
202
205
|
return;
|
|
203
206
|
this.threeDSecureListenersBound = true;
|
|
@@ -207,38 +210,33 @@ export default class FatZebra {
|
|
|
207
210
|
target: this.headless,
|
|
208
211
|
});
|
|
209
212
|
const handlers = this.threeDSecure.messageHandlers();
|
|
210
|
-
handlers[BridgeEvent.THREE_D_SECURE_ENABLED] = (data) => {
|
|
211
|
-
this.threeDSEnabled = typeof data === 'boolean' ? data : false;
|
|
212
|
-
};
|
|
213
213
|
postMessageClient.setEventListeners(handlers);
|
|
214
214
|
}
|
|
215
215
|
renderPaymentsPage(params) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
});
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
yield this.requestThreeDSEnabled();
|
|
227
|
-
if ((_a = window.HPP) === null || _a === void 0 ? void 0 : _a.destroy) {
|
|
228
|
-
window.HPP.destroy();
|
|
229
|
-
}
|
|
230
|
-
window.HPP = new Hpp({
|
|
231
|
-
version: params.version,
|
|
232
|
-
paymentIntent: params.paymentIntent,
|
|
233
|
-
customer: params.customer,
|
|
234
|
-
username: this.fzConfig.username,
|
|
235
|
-
sca: this.sca,
|
|
236
|
-
test: this.fzConfig.test,
|
|
237
|
-
threeDSecure: this.threeDSecure,
|
|
238
|
-
isThreeDSecureEnabled: () => this.threeDSEnabled,
|
|
216
|
+
var _a;
|
|
217
|
+
console.log('renderPaymentsPage');
|
|
218
|
+
const valid = validateHppLoadParams(params);
|
|
219
|
+
if (!valid) {
|
|
220
|
+
emit(PublicEvent.VALIDATION_ERROR, {
|
|
221
|
+
errors: toHumanizedErrors(validateHppLoadParams.errors),
|
|
222
|
+
data: null,
|
|
239
223
|
});
|
|
240
|
-
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if ((_a = window.HPP) === null || _a === void 0 ? void 0 : _a.destroy) {
|
|
227
|
+
window.HPP.destroy();
|
|
228
|
+
}
|
|
229
|
+
window.HPP = new Hpp({
|
|
230
|
+
version: params.version,
|
|
231
|
+
paymentIntent: params.paymentIntent,
|
|
232
|
+
customer: params.customer,
|
|
233
|
+
username: this.fzConfig.username,
|
|
234
|
+
sca: this.sca,
|
|
235
|
+
test: this.fzConfig.test,
|
|
236
|
+
threeDSecure: this.threeDSecure,
|
|
237
|
+
requestThreeDSEnabled: () => this.requestThreeDSEnabled(),
|
|
241
238
|
});
|
|
239
|
+
window.HPP.load(params);
|
|
242
240
|
}
|
|
243
241
|
renderApplePayButton(params) {
|
|
244
242
|
const valid = validateApplePayLoadParams(params);
|
|
@@ -276,6 +274,15 @@ export default class FatZebra {
|
|
|
276
274
|
});
|
|
277
275
|
window.HPP.load(params);
|
|
278
276
|
}
|
|
277
|
+
reportThreeDSecureFetchedOnInit(data) {
|
|
278
|
+
console.log("three_d_secure fetched on init", data);
|
|
279
|
+
}
|
|
280
|
+
reportThreeDSecureFetched(data, paymentIntent) {
|
|
281
|
+
console.log("three_d_secure fetched", data);
|
|
282
|
+
}
|
|
283
|
+
reportRequestThreedsEnabledTimeout(paymentIntent) {
|
|
284
|
+
console.log("3DS enabled check timed out");
|
|
285
|
+
}
|
|
279
286
|
checkout() {
|
|
280
287
|
window.HPP.purchase();
|
|
281
288
|
}
|
|
@@ -289,6 +296,18 @@ export default class FatZebra {
|
|
|
289
296
|
onOnce(event, callback);
|
|
290
297
|
}
|
|
291
298
|
}
|
|
299
|
+
__decorate([
|
|
300
|
+
logMethod({
|
|
301
|
+
mapArgs: (args) => {
|
|
302
|
+
const params = args[0];
|
|
303
|
+
return [
|
|
304
|
+
{
|
|
305
|
+
payment_intent: params === null || params === void 0 ? void 0 : params.paymentIntent
|
|
306
|
+
},
|
|
307
|
+
];
|
|
308
|
+
},
|
|
309
|
+
})
|
|
310
|
+
], FatZebra.prototype, "requestThreeDSEnabled", null);
|
|
292
311
|
__decorate([
|
|
293
312
|
logMethod({
|
|
294
313
|
mapArgs: (args) => {
|
|
@@ -304,4 +323,53 @@ __decorate([
|
|
|
304
323
|
},
|
|
305
324
|
})
|
|
306
325
|
], FatZebra.prototype, "verifyCard", null);
|
|
326
|
+
__decorate([
|
|
327
|
+
logMethod({
|
|
328
|
+
mapArgs: (args) => {
|
|
329
|
+
const params = args[0];
|
|
330
|
+
return [
|
|
331
|
+
{
|
|
332
|
+
payment_intent: params.paymentIntent,
|
|
333
|
+
version: params.version
|
|
334
|
+
},
|
|
335
|
+
];
|
|
336
|
+
},
|
|
337
|
+
})
|
|
338
|
+
], FatZebra.prototype, "renderPaymentsPage", null);
|
|
339
|
+
__decorate([
|
|
340
|
+
logMethod({
|
|
341
|
+
mapArgs: (args) => {
|
|
342
|
+
const data = args[0];
|
|
343
|
+
return [
|
|
344
|
+
{
|
|
345
|
+
data
|
|
346
|
+
},
|
|
347
|
+
];
|
|
348
|
+
},
|
|
349
|
+
})
|
|
350
|
+
], FatZebra.prototype, "reportThreeDSecureFetchedOnInit", null);
|
|
351
|
+
__decorate([
|
|
352
|
+
logMethod({
|
|
353
|
+
mapArgs: (args) => {
|
|
354
|
+
const data = args[0];
|
|
355
|
+
return [
|
|
356
|
+
{
|
|
357
|
+
data
|
|
358
|
+
},
|
|
359
|
+
];
|
|
360
|
+
},
|
|
361
|
+
})
|
|
362
|
+
], FatZebra.prototype, "reportThreeDSecureFetched", null);
|
|
363
|
+
__decorate([
|
|
364
|
+
logMethod({
|
|
365
|
+
mapArgs: (args) => {
|
|
366
|
+
const data = args[0];
|
|
367
|
+
return [
|
|
368
|
+
{
|
|
369
|
+
data
|
|
370
|
+
},
|
|
371
|
+
];
|
|
372
|
+
},
|
|
373
|
+
})
|
|
374
|
+
], FatZebra.prototype, "reportRequestThreedsEnabledTimeout", null);
|
|
307
375
|
export { FatZebra, };
|
package/dist/sca/index.js
CHANGED
|
@@ -28,6 +28,7 @@ class ThreeDSecure {
|
|
|
28
28
|
this.listenDeviceCollectionReady();
|
|
29
29
|
}
|
|
30
30
|
run({ paymentIntent, cardToken, merchantUsername, challengeWindowSize, test, tokenizeOnly, iframe }) {
|
|
31
|
+
console.log('Running 3DS (ThreeDSecure)');
|
|
31
32
|
this.iframe = iframe;
|
|
32
33
|
this.tokenizeOnly = tokenizeOnly;
|
|
33
34
|
this.setLoading();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fat-zebra/sdk",
|
|
3
|
-
"version": "2.0.1-beta.
|
|
3
|
+
"version": "2.0.1-beta.7",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"ajv": "^8.17.1",
|
|
64
64
|
"ajv-formats": "^3.0.1",
|
|
65
65
|
"ajv-keywords": "^5.1.0",
|
|
66
|
-
"axios": "1.
|
|
66
|
+
"axios": "1.16.0",
|
|
67
67
|
"custom-event-polyfill": "^1.0.7",
|
|
68
68
|
"glob": "^13.0.6",
|
|
69
69
|
"ts-polyfill": "^3.8.2",
|