@fat-zebra/sdk 2.0.1-beta.10 → 2.0.1-beta.12

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
- requestThreeDSEnabled: () => Promise<boolean>;
16
+ isThreeDSecureEnabled?: boolean;
17
17
  test?: boolean;
18
18
  }
19
19
  interface HppLoadParams {
@@ -54,7 +54,6 @@ declare class Hpp {
54
54
  private headlessPreviouslyLoaded;
55
55
  private iframeLoaded;
56
56
  private isThreeDSecureEnabled;
57
- private requestThreeDSEnabled;
58
57
  private challengeWindowSize;
59
58
  private scaHandler;
60
59
  private crossFrameListenersBound;
package/dist/hpp/hpp.js CHANGED
@@ -30,6 +30,7 @@ const HPP_DEFAULT_OPTIONS = {
30
30
  };
31
31
  class Hpp {
32
32
  constructor(config) {
33
+ var _a;
33
34
  this.isThreeDSecureEnabled = false;
34
35
  this.paymentIntent = config.paymentIntent;
35
36
  this.customer = config.customer;
@@ -41,9 +42,9 @@ class Hpp {
41
42
  this.headlessPreviouslyLoaded = false;
42
43
  this.iframeLoaded = false;
43
44
  this.threeDSecure = config.threeDSecure;
44
- this.requestThreeDSEnabled = config.requestThreeDSEnabled;
45
45
  this.crossFrameListenersBound = false;
46
46
  this.publicEventListenersBound = false;
47
+ this.isThreeDSecureEnabled = (_a = config.isThreeDSecureEnabled) !== null && _a !== void 0 ? _a : false;
47
48
  configureLogger({
48
49
  baseUrl: env[process.env.API_ENV].payNowUrl
49
50
  });
@@ -55,7 +56,6 @@ class Hpp {
55
56
  this.crossFrameListenersBound = true;
56
57
  }
57
58
  if (this.headlessLoaded && this.iframeLoaded) {
58
- this.isThreeDSecureEnabled = yield this.requestThreeDSEnabled();
59
59
  if (!this.publicEventListenersBound && !this.isThreeDSecureEnabled) {
60
60
  this.setPublicEventListeners();
61
61
  this.publicEventListenersBound = true;
@@ -63,7 +63,6 @@ class Hpp {
63
63
  emit(PublicEvent.HPP_READY);
64
64
  }
65
65
  else if (this.headlessPreviouslyLoaded && this.iframeLoaded) {
66
- this.isThreeDSecureEnabled = yield this.requestThreeDSEnabled();
67
66
  // subsequent iframe loads after headless has been previously loaded
68
67
  // this caters for the SPA scenario
69
68
  if (!this.publicEventListenersBound && !this.isThreeDSecureEnabled) {
@@ -136,6 +135,7 @@ class Hpp {
136
135
  return queryString ? `${base}?${searchParams.toString()}` : `${base}`;
137
136
  }
138
137
  setCrossFramesEventListeners() {
138
+ console.log('setCrossFramesEventListeners');
139
139
  const handlers = {};
140
140
  handlers[BridgeEvent.TOKENIZE_CARD_RESPONSE] = (data) => {
141
141
  var _a;
@@ -233,6 +233,7 @@ class Hpp {
233
233
  this.postMessageClient.setEventListeners(handlers);
234
234
  }
235
235
  setPublicEventListeners() {
236
+ console.log('setPublicEventListeners');
236
237
  this.scaHandler = (event) => {
237
238
  if (this.hppOptions.tokenizeOnly)
238
239
  return;
@@ -249,6 +250,7 @@ class Hpp {
249
250
  }
250
251
  }
251
252
  createPurchase(extra = null) {
253
+ console.log('createPurchase');
252
254
  const message = {
253
255
  channel: 'sca',
254
256
  subject: BridgeEvent.CREATE_PAYMENT_REQUEST,
package/dist/main.d.ts CHANGED
@@ -30,19 +30,21 @@ export default class FatZebra {
30
30
  private headless;
31
31
  private threeDSecure;
32
32
  private threeDSecureListenersBound;
33
+ private isThreeDSecureEnabled;
33
34
  private bridgeReady;
35
+ private authReady;
34
36
  constructor(config: FZConfig);
37
+ private setAuthImpl;
35
38
  tokenizeCard(card: Card): void;
36
39
  cardDidTokenize(callback: (data: any) => void): void;
37
- private requestThreeDSEnabled;
40
+ private requestThreeDSecureEnabled;
38
41
  verifyCard(params: VerifyCardParams): Promise<void>;
39
- setThreeDSecureListeners(): void;
40
42
  renderPaymentsPage(params: HppLoadParams): void;
41
43
  renderApplePayButton(params: ApplePayParams): void;
42
44
  renderClickToPay(params: HppClickToPayParams): void;
43
- reportThreeDSecureFetchedOnInit(data: any): void;
44
- reportThreeDSecureFetched(data: any, paymentIntent?: PaymentIntent): void;
45
- reportRequestThreedsEnabledTimeout(paymentIntent?: PaymentIntent): void;
45
+ private setThreeDSecureListeners;
46
+ private reportThreeDSecureFetched;
47
+ private reportRequestThreedsEnabledTimeout;
46
48
  checkout(): void;
47
49
  on(event: PublicEvent, callback: (e: any) => void): void;
48
50
  off(event: PublicEvent, callback: (e: any) => void): void;
package/dist/main.js CHANGED
@@ -30,7 +30,10 @@ import { logMethod } from './logging/logMethod';
30
30
  import ThreeDSecure from './three_d_secure';
31
31
  export default class FatZebra {
32
32
  constructor(config) {
33
+ var _a;
33
34
  this.threeDSecureListenersBound = false;
35
+ this.isThreeDSecureEnabled = false;
36
+ console.log('initialising');
34
37
  setLoggerUsername(config.username);
35
38
  this.fzConfig = config;
36
39
  window.MerchantUsername = config.username;
@@ -38,40 +41,43 @@ export default class FatZebra {
38
41
  username: config.username,
39
42
  environment: process.env.API_ENV,
40
43
  });
41
- this.sca = new Sca({
42
- gatewayClient: this.gatewayClient,
43
- });
44
- this.sca.loadScript();
45
44
  const { el, isExisting } = bridge.load2(process.env.PAYNOW_BRIDGE_URL);
46
45
  this.headless = el;
47
- this.threeDSecure = new ThreeDSecure({
48
- bridge: this.headless,
49
- environment: process.env.API_ENV,
50
- });
51
- // bridgeReady is a single promise created once.
52
- // After it resolves (bridge loaded), every subsequent "await this.bridgeReady"
53
- // returns instantly — there's no re-evaluation.
54
- // So for a SPA where the bridge is already loaded, there's zero overhead.
55
46
  if (isExisting) {
56
- console.log('headless exists');
57
47
  this.bridgeReady = Promise.resolve();
58
- this.setThreeDSecureListeners();
59
48
  }
60
49
  else {
61
50
  this.bridgeReady = new Promise((resolve) => {
62
- this.headless.addEventListener('load', () => {
63
- console.log('headless loaded');
64
- this.setThreeDSecureListeners();
65
- resolve();
66
- });
51
+ this.headless.addEventListener('load', () => resolve());
67
52
  });
68
53
  }
54
+ this.authReady = this.setAuthImpl();
69
55
  const message = {
70
56
  channel: 'sca',
71
57
  subject: BridgeEvent.READY,
72
58
  data: {},
73
59
  };
74
- window.top.postMessage(message, '*');
60
+ (_a = window.top) === null || _a === void 0 ? void 0 : _a.postMessage(message, '*');
61
+ }
62
+ setAuthImpl() {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ console.log('setAuthImpl()');
65
+ yield this.bridgeReady;
66
+ this.isThreeDSecureEnabled = yield this.requestThreeDSecureEnabled(500);
67
+ if (this.isThreeDSecureEnabled) {
68
+ this.threeDSecure = new ThreeDSecure({
69
+ bridge: this.headless,
70
+ environment: process.env.API_ENV,
71
+ });
72
+ this.setThreeDSecureListeners();
73
+ }
74
+ else {
75
+ this.sca = new Sca({
76
+ gatewayClient: this.gatewayClient,
77
+ });
78
+ this.sca.loadScript();
79
+ }
80
+ });
75
81
  }
76
82
  tokenizeCard(card) {
77
83
  const channel = 'sca';
@@ -100,18 +106,9 @@ export default class FatZebra {
100
106
  };
101
107
  postMessageClient.setEventListeners(handlers);
102
108
  }
103
- requestThreeDSEnabled(timeout, paymentIntent) {
109
+ requestThreeDSecureEnabled(timeout, paymentIntent) {
104
110
  return __awaiter(this, void 0, void 0, function* () {
105
111
  console.log('requestThreeDSEnabled');
106
- // If the bridge loads in time, bridgeReady wins and we can continue requesting the flag.
107
- // If not, the timeout resolves the race and we fall through
108
- // — the postMessage is sent to an unready bridge, the response never arrives,
109
- // and the existing window.setTimeout at the bottom fires and resolves false.
110
- // The total worst-case wait is still bounded by timeout.
111
- yield Promise.race([
112
- this.bridgeReady,
113
- new Promise((resolve) => window.setTimeout(resolve, timeout)),
114
- ]);
115
112
  return new Promise((resolve) => {
116
113
  const channel = 'sca';
117
114
  const postMessageClient = new PostMessageClient({
@@ -160,14 +157,14 @@ export default class FatZebra {
160
157
  });
161
158
  return;
162
159
  }
163
- const threeDSEnabled = yield this.requestThreeDSEnabled(1000, params.paymentIntent);
160
+ yield this.authReady;
164
161
  switch (params.paymentMethod.type) {
165
162
  case PaymentMethodType.CARD: {
166
163
  console.log('Verify card (new card)');
167
164
  const card = params.paymentMethod.data;
168
165
  this.cardDidTokenize((data) => __awaiter(this, void 0, void 0, function* () {
169
166
  var _a, _b;
170
- if (threeDSEnabled) {
167
+ if (this.threeDSecure && this.isThreeDSecureEnabled) {
171
168
  this.threeDSecure.run({
172
169
  paymentIntent: params.paymentIntent,
173
170
  cardToken: data.token,
@@ -194,7 +191,7 @@ export default class FatZebra {
194
191
  case PaymentMethodType.CARD_ON_FILE: {
195
192
  console.log('Verify card (card on file)');
196
193
  const cardToken = params.paymentMethod.data.token;
197
- if (threeDSEnabled) {
194
+ if (this.threeDSecure && this.isThreeDSecureEnabled) {
198
195
  this.threeDSecure.run({
199
196
  paymentIntent: params.paymentIntent,
200
197
  cardToken,
@@ -221,21 +218,7 @@ export default class FatZebra {
221
218
  }
222
219
  });
223
220
  }
224
- setThreeDSecureListeners() {
225
- console.log('setThreeDSecureListeners');
226
- if (this.threeDSecureListenersBound)
227
- return;
228
- const channel = 'sca';
229
- const postMessageClient = new PostMessageClient({
230
- channel,
231
- target: this.headless,
232
- });
233
- const handlers = this.threeDSecure.messageHandlers();
234
- postMessageClient.setEventListeners(handlers);
235
- this.threeDSecureListenersBound = true;
236
- }
237
221
  renderPaymentsPage(params) {
238
- var _a;
239
222
  console.log('renderPaymentsPage');
240
223
  const valid = validateHppLoadParams(params);
241
224
  if (!valid) {
@@ -245,20 +228,25 @@ export default class FatZebra {
245
228
  });
246
229
  return;
247
230
  }
248
- if ((_a = window.HPP) === null || _a === void 0 ? void 0 : _a.destroy) {
249
- window.HPP.destroy();
250
- }
251
- window.HPP = new Hpp({
252
- version: params.version,
253
- paymentIntent: params.paymentIntent,
254
- customer: params.customer,
255
- username: this.fzConfig.username,
256
- sca: this.sca,
257
- test: this.fzConfig.test,
258
- threeDSecure: this.threeDSecure,
259
- requestThreeDSEnabled: () => this.requestThreeDSEnabled(1000, params.paymentIntent),
231
+ // chaining here to avoid making renderPaymentsPage async
232
+ // this is ugly but should only be temporary while we need to call requestThreeDSecureEnabled to fetch the flag
233
+ this.authReady.then(() => {
234
+ var _a;
235
+ if ((_a = window.HPP) === null || _a === void 0 ? void 0 : _a.destroy) {
236
+ window.HPP.destroy();
237
+ }
238
+ window.HPP = new Hpp({
239
+ version: params.version,
240
+ paymentIntent: params.paymentIntent,
241
+ customer: params.customer,
242
+ username: this.fzConfig.username,
243
+ sca: this.sca,
244
+ test: this.fzConfig.test,
245
+ threeDSecure: this.threeDSecure,
246
+ isThreeDSecureEnabled: this.isThreeDSecureEnabled,
247
+ });
248
+ window.HPP.load(params);
260
249
  });
261
- window.HPP.load(params);
262
250
  }
263
251
  renderApplePayButton(params) {
264
252
  const valid = validateApplePayLoadParams(params);
@@ -296,14 +284,24 @@ export default class FatZebra {
296
284
  });
297
285
  window.HPP.load(params);
298
286
  }
299
- reportThreeDSecureFetchedOnInit(data) {
300
- console.log("three_d_secure fetched on init", data);
287
+ setThreeDSecureListeners() {
288
+ console.log('setThreeDSecureListeners');
289
+ if (this.threeDSecureListenersBound)
290
+ return;
291
+ const channel = 'sca';
292
+ const postMessageClient = new PostMessageClient({
293
+ channel,
294
+ target: this.headless,
295
+ });
296
+ const handlers = this.threeDSecure.messageHandlers();
297
+ postMessageClient.setEventListeners(handlers);
298
+ this.threeDSecureListenersBound = true;
301
299
  }
302
300
  reportThreeDSecureFetched(data, paymentIntent) {
303
- console.log("three_d_secure fetched", data);
301
+ console.log('three_d_secure fetched', data);
304
302
  }
305
303
  reportRequestThreedsEnabledTimeout(paymentIntent) {
306
- console.log("3DS enabled check timed out");
304
+ console.log('3DS enabled check timed out');
307
305
  }
308
306
  checkout() {
309
307
  window.HPP.purchase();
@@ -321,15 +319,14 @@ export default class FatZebra {
321
319
  __decorate([
322
320
  logMethod({
323
321
  mapArgs: (args) => {
324
- const params = args[0];
325
322
  return [
326
323
  {
327
- payment_intent: params === null || params === void 0 ? void 0 : params.paymentIntent
324
+ payment_intent: args[1]
328
325
  },
329
326
  ];
330
327
  },
331
328
  })
332
- ], FatZebra.prototype, "requestThreeDSEnabled", null);
329
+ ], FatZebra.prototype, "requestThreeDSecureEnabled", null);
333
330
  __decorate([
334
331
  logMethod({
335
332
  mapArgs: (args) => {
@@ -361,22 +358,10 @@ __decorate([
361
358
  __decorate([
362
359
  logMethod({
363
360
  mapArgs: (args) => {
364
- const data = args[0];
365
- return [
366
- {
367
- data
368
- },
369
- ];
370
- },
371
- })
372
- ], FatZebra.prototype, "reportThreeDSecureFetchedOnInit", null);
373
- __decorate([
374
- logMethod({
375
- mapArgs: (args) => {
376
- const data = args[0];
377
361
  return [
378
362
  {
379
- data
363
+ data: args[0],
364
+ payment_intent: args[1]
380
365
  },
381
366
  ];
382
367
  },
@@ -385,10 +370,9 @@ __decorate([
385
370
  __decorate([
386
371
  logMethod({
387
372
  mapArgs: (args) => {
388
- const data = args[0];
389
373
  return [
390
374
  {
391
- data
375
+ payment_intent: args[0]
392
376
  },
393
377
  ];
394
378
  },
package/dist/sca/index.js CHANGED
@@ -1,3 +1,9 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
1
7
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
8
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
9
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -13,6 +19,7 @@ import { CardinalManager, } from './cardinal';
13
19
  import { emit, } from '../shared/event-manager';
14
20
  import env, { Environment } from "../shared/env";
15
21
  import { getEnrollmentResult, getValidationResult, threedsResponseData } from "./utility";
22
+ import { logMethod } from '../logging/logMethod';
16
23
  class Sca {
17
24
  constructor({ gatewayClient, successCallback, failureCallback }) {
18
25
  this.gatewayClient = gatewayClient;
@@ -221,4 +228,42 @@ class Sca {
221
228
  }
222
229
  }
223
230
  }
231
+ __decorate([
232
+ logMethod({
233
+ mapArgs: (args) => {
234
+ return [
235
+ {
236
+ message: args[0],
237
+ data: args[1],
238
+ source: 'sca'
239
+ },
240
+ ];
241
+ },
242
+ })
243
+ ], Sca.prototype, "reportFailure", null);
244
+ __decorate([
245
+ logMethod({
246
+ mapArgs: (args) => {
247
+ return [
248
+ {
249
+ message: args[0],
250
+ data: args[1],
251
+ source: 'sca'
252
+ },
253
+ ];
254
+ },
255
+ })
256
+ ], Sca.prototype, "reportSuccess", null);
257
+ __decorate([
258
+ logMethod({
259
+ mapArgs: (args) => {
260
+ const params = args[0];
261
+ return [
262
+ {
263
+ payment_intent: params.paymentIntent
264
+ },
265
+ ];
266
+ },
267
+ })
268
+ ], Sca.prototype, "run", null);
224
269
  export default Sca;
@@ -198,10 +198,30 @@ class ThreeDSecure {
198
198
  }
199
199
  }
200
200
  __decorate([
201
- logMethod()
201
+ logMethod({
202
+ mapArgs: (args) => {
203
+ return [
204
+ {
205
+ message: args[0],
206
+ data: args[1],
207
+ source: 'three_d_secure'
208
+ },
209
+ ];
210
+ },
211
+ })
202
212
  ], ThreeDSecure.prototype, "reportSuccess", null);
203
213
  __decorate([
204
- logMethod()
214
+ logMethod({
215
+ mapArgs: (args) => {
216
+ return [
217
+ {
218
+ message: args[0],
219
+ data: args[1],
220
+ source: 'three_d_secure'
221
+ },
222
+ ];
223
+ },
224
+ })
205
225
  ], ThreeDSecure.prototype, "reportFailure", null);
206
226
  __decorate([
207
227
  logMethod()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fat-zebra/sdk",
3
- "version": "2.0.1-beta.10",
3
+ "version": "2.0.1-beta.12",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {