@fat-zebra/sdk 1.5.16-beta.2 → 1.5.16-beta.3

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
@@ -51,6 +51,7 @@ declare class Hpp {
51
51
  private headlessPreviouslyLoaded;
52
52
  private iframeLoaded;
53
53
  private threeDSecureEnabled;
54
+ private challengeWindowSize;
54
55
  private scaHandler;
55
56
  constructor(config: HppModuleConfig);
56
57
  setListenersAndEmitReady(): void;
package/dist/hpp/hpp.js CHANGED
@@ -1,16 +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
- };
7
1
  import * as bridge from '../shared/bridge-client';
8
2
  import { LocalStorageAccessTokenKey } from '../shared/constants';
9
3
  import { emit, off, on } from '../shared/event-manager';
10
4
  import { PostMessageClient } from '../shared/post-message-client';
11
5
  import { BridgeEvent, PublicEvent, } from '../shared/types';
12
6
  import * as util from '../shared/util';
13
- import { logMethod } from "../logging/logMethod";
14
7
  import { setTransactionReference } from "../logging/logger-context";
15
8
  import ThreeDSecure from "../three_d_secure";
16
9
  const HPP_DEFAULT_OPTIONS = {
@@ -45,8 +38,8 @@ class Hpp {
45
38
  // initial headless load
46
39
  this.ThreeDSecure = new ThreeDSecure({
47
40
  bridge: this.headless,
48
- iframe: this.iframe, // to handle loading spinner
49
- environment: process.env.API_ENV
41
+ environment: process.env.API_ENV,
42
+ iframe: this.iframe
50
43
  });
51
44
  this.setCrossFramesEventListeners();
52
45
  this.setPublicEventListeners();
@@ -54,6 +47,11 @@ class Hpp {
54
47
  this.iframe.contentWindow.postMessage(message, '*');
55
48
  }
56
49
  else if (this.headlessPreviouslyLoaded && this.iframeLoaded) {
50
+ this.ThreeDSecure = new ThreeDSecure({
51
+ bridge: this.headless,
52
+ environment: process.env.API_ENV,
53
+ iframe: this.iframe
54
+ });
57
55
  this.iframe.contentWindow.postMessage(message, '*');
58
56
  // subsequent iframe loads after headless has been previously loaded
59
57
  // this caters for the SPA scenario
@@ -61,6 +59,7 @@ class Hpp {
61
59
  }
62
60
  }
63
61
  load(config) {
62
+ this.challengeWindowSize = config.options.challengeWindowSize;
64
63
  setTransactionReference(config.paymentIntent.payment.reference);
65
64
  this.hppOptions = config.options;
66
65
  const { el, isExisting } = bridge.load2(process.env.PAYNOW_BRIDGE_URL);
@@ -114,7 +113,7 @@ class Hpp {
114
113
  setCrossFramesEventListeners() {
115
114
  const handlers = {};
116
115
  handlers[BridgeEvent.TOKENIZE_CARD_RESPONSE] = (data) => {
117
- var _a, _b;
116
+ var _a;
118
117
  if (data.errors) {
119
118
  emit(PublicEvent.TOKENIZATION_ERROR, {
120
119
  message: 'Card tokenization failed.',
@@ -140,8 +139,8 @@ class Hpp {
140
139
  paymentIntent: this.paymentIntent,
141
140
  merchantUsername: this.username,
142
141
  cardToken: this.cardToken,
143
- challengeWindowSize: (_a = this.hppOptions) === null || _a === void 0 ? void 0 : _a.challengeWindowSize,
144
- test: this.test
142
+ test: this.test,
143
+ challengeWindowSize: this.challengeWindowSize
145
144
  });
146
145
  return; // do not continue execution to old 3DS
147
146
  }
@@ -150,7 +149,7 @@ class Hpp {
150
149
  customer: this.customer,
151
150
  paymentIntent: this.paymentIntent,
152
151
  bin: data.bin,
153
- challengeWindowSize: (_b = this.hppOptions) === null || _b === void 0 ? void 0 : _b.challengeWindowSize,
152
+ challengeWindowSize: (_a = this.hppOptions) === null || _a === void 0 ? void 0 : _a.challengeWindowSize,
154
153
  });
155
154
  }
156
155
  else {
@@ -207,7 +206,6 @@ class Hpp {
207
206
  handlers[BridgeEvent.THREE_D_SECURE_ENABLED] = (data) => {
208
207
  this.threeDSecureEnabled = typeof data === "boolean" ? data : false;
209
208
  if (this.threeDSecureEnabled) {
210
- console.log("this is a three_d_secure enabled page: ", this.threeDSecureEnabled);
211
209
  // setPublicEventListeners is set before this feature flag is returned.
212
210
  // we need to therefore unset the scaHandler (for the old implementation or we will get two purchase requests
213
211
  off(PublicEvent.SCA_SUCCESS, this.scaHandler);
@@ -247,7 +245,4 @@ class Hpp {
247
245
  this.headless.contentWindow.postMessage(message, '*');
248
246
  }
249
247
  }
250
- __decorate([
251
- logMethod()
252
- ], Hpp.prototype, "createPurchase", null);
253
248
  export { Hpp, HPP_DEFAULT_OPTIONS, };
@@ -6,6 +6,6 @@ const VerifyCard = ({ handlers, config, iframeProps }) => {
6
6
  handlers: handlers,
7
7
  });
8
8
  return (React.createElement("div", null,
9
- React.createElement("iframe", Object.assign({ src: paymentUrl, "data-test-id": "verify-card", title: "verification-form" }, iframeProps))));
9
+ React.createElement("iframe", Object.assign({ src: paymentUrl, name: 'renderIframe', "data-test-id": "verify-card", title: "verification-form" }, iframeProps))));
10
10
  };
11
11
  export default VerifyCard;
@@ -21,7 +21,8 @@ const useFatZebra = ({ config, handlers, cardToken }) => {
21
21
  paymentIntent,
22
22
  options,
23
23
  handlers,
24
- sca
24
+ sca,
25
+ config
25
26
  });
26
27
  useEffect(() => {
27
28
  logUseFatZebra({
@@ -5,6 +5,7 @@ type UseMessageProps = {
5
5
  handlers: FatZebra.Handlers;
6
6
  options?: FatZebra.OptionalUrlValues;
7
7
  sca?: InstanceType<typeof Sca>;
8
+ config?: FatZebra.PaymentConfig;
8
9
  };
9
- declare const useMessage: ({ paymentIntent, options, handlers, sca }: UseMessageProps) => void;
10
+ declare const useMessage: ({ paymentIntent, options, handlers, sca, config }: UseMessageProps) => void;
10
11
  export default useMessage;
@@ -7,9 +7,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { useEffect } from 'react';
10
+ import { useEffect, useRef, useState } from 'react';
11
11
  import * as FatZebra from "../shared/types";
12
- const useMessage = ({ paymentIntent, options, handlers, sca }) => {
12
+ import ThreeDSecure from "../three_d_secure";
13
+ import * as bridge from "../shared/bridge-client";
14
+ import env, { Environment } from "../shared/env";
15
+ const useMessage = ({ paymentIntent, options, handlers, sca, config }) => {
16
+ const [threeDSecureEnabled, setThreeDSecureEnabled] = useState(false);
17
+ const threeDSecureRef = useRef(null);
18
+ const successCallback = handlers[FatZebra.PublicEvent.SCA_SUCCESS];
19
+ const failureCallback = handlers[FatZebra.PublicEvent.SCA_ERROR];
13
20
  const emit = (event, data) => {
14
21
  const handler = handlers[event];
15
22
  if (handler) {
@@ -31,6 +38,15 @@ const useMessage = ({ paymentIntent, options, handlers, sca }) => {
31
38
  data,
32
39
  });
33
40
  }
41
+ if (options && options.sca_enabled && threeDSecureEnabled) {
42
+ threeDSecureRef.current.run({
43
+ paymentIntent,
44
+ cardToken: data.token,
45
+ merchantUsername: config.username,
46
+ test: config.environment !== Environment.production
47
+ });
48
+ return;
49
+ }
34
50
  if (options && sca && options.sca_enabled) {
35
51
  yield sca.run({ paymentIntent, bin: data.bin, cardToken: data.token });
36
52
  }
@@ -42,6 +58,37 @@ const useMessage = ({ paymentIntent, options, handlers, sca }) => {
42
58
  return;
43
59
  if (event.data.subject === FatZebra.BridgeEvent.BIN_LOOKUP)
44
60
  return;
61
+ if (event.data.subject === FatZebra.BridgeEvent.THREE_D_SECURE_ENABLED) {
62
+ setThreeDSecureEnabled(event.data.data);
63
+ if (event.data.data) {
64
+ const { el } = bridge.load2(env[config.environment].bridgeUrl);
65
+ const headless = el;
66
+ let onMessage;
67
+ headless.onload = () => {
68
+ const iframe = document.querySelector('[name="renderIframe"]');
69
+ const threeDS = new ThreeDSecure({
70
+ successCallback,
71
+ failureCallback,
72
+ bridge: headless,
73
+ environment: config.environment,
74
+ iframe: iframe
75
+ });
76
+ threeDSecureRef.current = threeDS;
77
+ const messages = threeDS.messageHandlers(); // { [subject]: (payload) => void }
78
+ onMessage = (ev) => {
79
+ var _a, _b;
80
+ const subject = (_a = ev === null || ev === void 0 ? void 0 : ev.data) === null || _a === void 0 ? void 0 : _a.subject;
81
+ const payload = (_b = ev === null || ev === void 0 ? void 0 : ev.data) === null || _b === void 0 ? void 0 : _b.data;
82
+ if (!subject)
83
+ return;
84
+ const handler = messages[subject];
85
+ if (handler)
86
+ handler(payload);
87
+ };
88
+ window.addEventListener("message", onMessage);
89
+ };
90
+ }
91
+ }
45
92
  if (event.data.subject === FatZebra.BridgeEvent.FORM_VALIDATION_ERROR) {
46
93
  emit(FatZebra.PublicEvent.FORM_VALIDATION_ERROR, {
47
94
  errors: event.data.data,
@@ -26,7 +26,7 @@ declare class ThreeDSecure {
26
26
  paymentIntent: PaymentIntent;
27
27
  cardToken: string;
28
28
  merchantUsername: string;
29
- challengeWindowSize: ChallengeWindowSize;
29
+ challengeWindowSize?: ChallengeWindowSize;
30
30
  test: boolean;
31
31
  }): void;
32
32
  setupResponse(data: DeviceDataCollectionMessage): void;
@@ -8,7 +8,7 @@ const threeDResponseData = (response) => {
8
8
  sli: toFzSli(response.eci),
9
9
  eci: response.eci,
10
10
  xid: response.xid,
11
- ver: "veres" in response ? response === null || response === void 0 ? void 0 : response.veres : null,
11
+ ver: response === null || response === void 0 ? void 0 : response.veres,
12
12
  directoryServerTxnId: response.directory_server_txn_id,
13
13
  threedsVersion: response.threeds_version,
14
14
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fat-zebra/sdk",
3
- "version": "1.5.16-beta.2",
3
+ "version": "1.5.16-beta.3",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {