@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 CHANGED
@@ -13,7 +13,7 @@ interface HppModuleConfig {
13
13
  username: string;
14
14
  sca: Sca;
15
15
  threeDSecure: ThreeDSecure;
16
- isThreeDSecureEnabled: () => boolean;
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.isThreeDSecureEnabled = config.isThreeDSecureEnabled;
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
- if (!this.crossFrameListenersBound) {
43
- this.setCrossFramesEventListeners();
44
- this.crossFrameListenersBound = true;
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
- emit(PublicEvent.HPP_READY);
52
- }
53
- else if (this.headlessPreviouslyLoaded && this.iframeLoaded) {
54
- // subsequent iframe loads after headless has been previously loaded
55
- // this caters for the SPA scenario
56
- if (!this.publicEventListenersBound && !this.isThreeDSecureEnabled()) {
57
- this.setPublicEventListeners();
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
- emit(PublicEvent.HPP_READY);
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.onload = () => {
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): Promise<void>;
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.onload = () => {
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
- (_a = this.headless.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, '*');
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
- }, 5000);
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
- return __awaiter(this, void 0, void 0, function* () {
217
- var _a;
218
- const valid = validateHppLoadParams(params);
219
- if (!valid) {
220
- emit(PublicEvent.VALIDATION_ERROR, {
221
- errors: toHumanizedErrors(validateHppLoadParams.errors),
222
- data: null,
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
- window.HPP.load(params);
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
@@ -58,6 +58,7 @@ class Sca {
58
58
  }
59
59
  run(config) {
60
60
  return __awaiter(this, void 0, void 0, function* () {
61
+ console.log('Running 3DS (SCA)');
61
62
  try {
62
63
  if (!this._cardinal) {
63
64
  this._cardinal = new CardinalManager();
@@ -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.4",
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.15.0",
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",