@gr4vy/secure-fields-react 1.17.0 → 1.19.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/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ # v1.19.0 (Wed Feb 07 2024)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - task: Click to Pay internal docs [#573](https://github.com/gr4vy/secure-fields/pull/573) ([@luca-gr4vy](https://github.com/luca-gr4vy))
6
+ - task: add card form react component [#574](https://github.com/gr4vy/secure-fields/pull/574) ([@luca-gr4vy](https://github.com/luca-gr4vy))
7
+ - task: add click to pay sign in react component [#564](https://github.com/gr4vy/secure-fields/pull/564) ([@luca-gr4vy](https://github.com/luca-gr4vy))
8
+
9
+ #### Authors: 1
10
+
11
+ - Luca Allievi ([@luca-gr4vy](https://github.com/luca-gr4vy))
12
+
13
+ ---
14
+
15
+ # v1.18.0 (Tue Jan 30 2024)
16
+
17
+ #### 🚀 Enhancement
18
+
19
+ - task: add click to pay react component [#558](https://github.com/gr4vy/secure-fields/pull/558) ([@luca-gr4vy](https://github.com/luca-gr4vy))
20
+
21
+ #### Authors: 1
22
+
23
+ - Luca Allievi ([@luca-gr4vy](https://github.com/luca-gr4vy))
24
+
25
+ ---
26
+
1
27
  # v1.15.1 (Thu Dec 07 2023)
2
28
 
3
29
  #### 🐛 Bug Fix
package/README.md CHANGED
@@ -115,3 +115,98 @@ The available secure fields components are `CardNumber`, `ExpiryDate` and `Secur
115
115
  | `onBlur` | Attaches an event handler to the input, listening for the blur event. The data available in the passed callback includes an `id` representing the field type (e.g. `expiryDate`). |
116
116
  | `onFocus` | Attaches an event handler to the input, listening for the focus event. The data available in the passed callback includes an `id` representing the field type (e.g. `expiryDate`). |
117
117
  | `onInput` | Attaches an event handler to the input, listening for the input event. The data available in the passed callback includes an `id` representing the field type (e.g. `expiryDate`) and some useful card validation information, such as the current scheme (e.g. `visa`) and security code label (e.g. `CVV`). |
118
+
119
+ ## Click to Pay
120
+
121
+ Click to Pay is the better way to pay online – featuring advanced payment technology built on secure remote commerce industry standards.
122
+
123
+ ### Prerequisites
124
+
125
+ Follow the instructions for [Click to Pay Merchant Setup](https://docs.gr4vy.com/guides/payments/secure-fields/click-to-pay#merchant-setup).
126
+
127
+ ### Adding Click to Pay
128
+
129
+ Once Secure Fields is configured, you can start adding Click to Pay to your checkout.
130
+
131
+ Firstly, add the `ClickToPay` component to your form so Secure Fields can render Click to Pay. Make sure to pass the required options to it as props.
132
+
133
+ Then, add a sign-in form to let users access their Click to Pay stored cards and wrap it with the `ClickToPaySignIn` component.
134
+
135
+ Additionally, add a checkbox to allow a customer not already enrolled to determine if they want to share their card data with Click to Pay.
136
+
137
+ Finally, ensure card inputs are wrapped with the `CardForm` component.
138
+
139
+ ```js
140
+ import { ClickToPay, ClickToPaySignIn, CardForm } from '@gr4vy/secure-fields-react'
141
+
142
+ ...
143
+
144
+ const { secureFields } = useSecureFields()
145
+
146
+ <ClickToPay
147
+ dpaLocale="en_AU"
148
+ cardBrands={['mastercard', 'visa', 'american-express']}
149
+ email="john@example.com"
150
+ mobileNumber={{
151
+ countryCode: '61',
152
+ phoneNumber: '491570159',
153
+ }}
154
+ consentCheckbox="#click-to-pay-consent-checkbox"
155
+ />
156
+
157
+ <ClickToPaySignIn
158
+ onVisibilityChange={(visible: boolean) => {
159
+ console.log('Sign in UI visibility changed. Visible', visible)
160
+ }}
161
+ >
162
+ <label>Access your Click to Pay stored cards</label>
163
+ <input type="text" className="click-to-pay-email-phone" ref={phoneOrEmailRef} />
164
+ <button
165
+ className="px-4 py-2 text-white bg-blue-500 rounded-md hover:bg-blue-600"
166
+ onClick={() => secureFields?.clickToPay?.signIn({ email: phoneOrEmailRef?.current?.value })}
167
+ >Continue</button>
168
+ </ClickToPaySignIn>
169
+
170
+ <CardForm>
171
+ <label htmlFor="cc-number">Card number</label>
172
+ <CardNumber styles={styles} />
173
+
174
+ <label htmlFor="cc-expiry-date">Expiry date</label>
175
+ <ExpiryDate styles={styles} />
176
+
177
+ <label htmlFor="cc-security-code">Security code</label>
178
+ <SecurityCode styles={styles} />
179
+ </CardForm>
180
+
181
+ <div>
182
+ <input type="checkbox" id="click-to-pay-consent-checkbox" />
183
+ <label htmlFor="click-to-pay-consent-checkbox">Store my card with Click to Pay</label>
184
+ </div>
185
+ ```
186
+
187
+ The `ClickToPay` component accepts the following props:
188
+
189
+ | Prop Name | Description |
190
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------- |
191
+ | `srcDpaId` | DPA Identifier. This is a unique identifier for you Digital Payment Application (DPA), which was generated during onboarding. |
192
+ | `dpaName` | Legal name of registered DPA. |
193
+ | `cardBrands` | List of card schemes the merchant accepts. We currently support `mastercard`, `maestro`, `visa`, `amex`, `discover` |
194
+ | `consentCheckbox` | A reference to the opt-in consent checkbox element. |
195
+ | `learnMoreLink` | A reference to the learn more link element. |
196
+ | `email` | The user email used to access Click to Pay. |
197
+ | `mobileNumber` | The user phone number used to access Click to Pay. Required format is `{ countryCode: string, phoneNumber: string }` |
198
+
199
+ ### Click to Pay Global events
200
+
201
+ The following props can be used on the `SecureFields` component to listen to specific Click to Pay events.
202
+
203
+ | Prop Name | Description |
204
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
205
+ | `onClickToPayInitialized` | An event handler that listens for Click to Pay to be securely initialized. It listens for the [`CLICK_TO_PAY_INITIALIZED`](../secure-fields/README.md#additional-global-events) event and accepts a callback function with a `clickToPay` instance as argument. |
206
+ | `onClickToPayReady` | An event handler that listens for Click to Pay to be ready. It listens for the [`CLICK_TO_PAY_READY`](../secure-fields/README.md#additional-global-events) event and accepts a callback function with an object `{ buyerExists: boolean }`. |
207
+ | `onClickToPaySignOut` | An event handler that listens for users signing out of Click to Pay. It listens for the [`CLICK_TO_PAY_SIGN_OUT`](../secure-fields/README.md#additional-global-events) event and accepts a callback function. |
208
+ | `onClickToPayError` | An event handler that listens for any errors thrown by Click to Pay. It listens for the [`CLICK_TO_PAY_ERROR`](../secure-fields/README.md#additional-global-events) event and accepts a callback function with the error type (one of \| 'RETRIES_EXCEEDED' \| 'CODE_INVALID' \| 'INVALID_CARD' \| 'SIGN_OUT_FAILED' \| 'ACCT_INACCESSIBLE' \| 'UNKNOWN' \| 'USER_NOT_RECOGNIZED'). |
209
+ | `onClickToPayCancel` | An event handler that listens for users closing / cancelling Click to Pay. It listens for the [`CLICK_TO_PAY_CANCEL`](../secure-fields/README.md#additional-global-events) event and accepts a callback function. |
210
+ | `onClickToPayCheckoutWithNewCard` | An event handler that listens for users checking out with a new card. It listens for the [`CLICK_TO_PAY_CHECKOUT_WITH_NEW_CARD`](../secure-fields/README.md#additional-global-events) event and accepts a callback function. |
211
+ | `onClickToPayUnableToLoadDpa` | An event handler that listens for Click to Pay not being able to load the provided DPA. It listens for the [`CLICK_TO_PAY_UNABLE_TO_LOAD_DPA`](../secure-fields/README.md#additional-global-events) event and accepts a callback function. |
212
+ | `onMethodChange` | An event handler that listens for users selecting a different method (either `card` or `click-to-pay`). It listens for the [`METHOD_CHANGE`](../secure-fields/README.md#additional-global-events) event and accepts a callback function with the selected method. |
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { ClickToPayComponentProps } from "../../types";
3
+ export declare const CardForm: ({ children, id: _, style, onVisibilityChange, ...rest }: PropsWithChildren<ClickToPayComponentProps>) => JSX.Element;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.CardForm = void 0;
26
+ var jsx_runtime_1 = require("react/jsx-runtime");
27
+ var secure_fields_1 = require("@gr4vy/secure-fields");
28
+ var react_1 = require("react");
29
+ var use_secure_fields_1 = require("../../hooks/use-secure-fields");
30
+ var CardForm = function (_a) {
31
+ var children = _a.children, _ = _a.id, style = _a.style, onVisibilityChange = _a.onVisibilityChange, rest = __rest(_a, ["children", "id", "style", "onVisibilityChange"]);
32
+ var _b = (0, use_secure_fields_1.useSecureFields)(), clickToPay = _b.clickToPay, secureFields = _b.secureFields;
33
+ (0, react_1.useLayoutEffect)(function () {
34
+ if (!clickToPay)
35
+ return;
36
+ onVisibilityChange &&
37
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_CARD_FORM_VISIBILITY_CHANGE, onVisibilityChange));
38
+ return function () {
39
+ onVisibilityChange &&
40
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_CARD_FORM_VISIBILITY_CHANGE, onVisibilityChange));
41
+ };
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ }, [clickToPay]);
44
+ return ((0, jsx_runtime_1.jsx)("div", __assign({ id: "secure-fields-card-form", style: __assign({ display: 'none' }, style) }, rest, { children: children })));
45
+ };
46
+ exports.CardForm = CardForm;
47
+ //# sourceMappingURL=CardForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardForm.js","sourceRoot":"","sources":["../../../src/components/CardForm/CardForm.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAmD;AACnD,+BAA0D;AAC1D,mEAAyD;AAGlD,IAAM,QAAQ,GAAG,UAAC,EAMqB;IAL5C,IAAA,QAAQ,cAAA,EACJ,CAAC,QAAA,EACL,KAAK,WAAA,EACL,kBAAkB,wBAAA,EACf,IAAI,cALgB,iDAMxB,CADQ;IAED,IAAA,KAA+B,IAAA,mCAAe,GAAE,EAA9C,UAAU,gBAAA,EAAE,YAAY,kBAAsB,CAAA;IAEtD,IAAA,uBAAe,EAAC;QACd,IAAI,CAAC,UAAU;YAAE,OAAM;QAEvB,kBAAkB;aAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,wCAAwC,EAC5D,kBAAkB,CACnB,CAAA,CAAA;QAEH,OAAO;YACL,kBAAkB;iBAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,wCAAwC,EAC5D,kBAAkB,CACnB,CAAA,CAAA;QACL,CAAC,CAAA;QACD,uDAAuD;IACzD,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,OAAO,CACL,yCACE,EAAE,EAAC,yBAAyB,EAC5B,KAAK,aAAI,OAAO,EAAE,MAAM,IAAK,KAAK,KAC9B,IAAI,cAEP,QAAQ,IACL,CACP,CAAA;AACH,CAAC,CAAA;AArCY,QAAA,QAAQ,YAqCpB"}
@@ -0,0 +1 @@
1
+ export { CardForm } from './CardForm';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CardForm = void 0;
4
+ var CardForm_1 = require("./CardForm");
5
+ Object.defineProperty(exports, "CardForm", { enumerable: true, get: function () { return CardForm_1.CardForm; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CardForm/index.ts"],"names":[],"mappings":";;;AAAA,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { ClickToPayOptions } from "../../types";
3
+ export declare const ClickToPay: (options: ClickToPayOptions) => JSX.Element;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ClickToPay = void 0;
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var react_1 = require("react");
17
+ var use_click_to_pay_1 = require("../../hooks/use-click-to-pay");
18
+ var ClickToPay = function (options) {
19
+ var ref = (0, react_1.useRef)(null);
20
+ (0, use_click_to_pay_1.useClickToPay)(__assign({ ref: ref }, options));
21
+ return (0, jsx_runtime_1.jsx)("div", { ref: ref });
22
+ };
23
+ exports.ClickToPay = ClickToPay;
24
+ //# sourceMappingURL=ClickToPay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickToPay.js","sourceRoot":"","sources":["../../../src/components/ClickToPay/ClickToPay.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+BAA8B;AAC9B,iEAAsD;AAG/C,IAAM,UAAU,GAAG,UAAC,OAA0B;IACnD,IAAM,GAAG,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAA;IACxC,IAAA,gCAAa,aAAG,GAAG,KAAA,IAAK,OAAO,EAAG,CAAA;IAClC,OAAO,gCAAK,GAAG,EAAE,GAAG,GAAI,CAAA;AAC1B,CAAC,CAAA;AAJY,QAAA,UAAU,cAItB"}
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { ClickToPayComponentProps } from "../../types";
3
+ export declare const ClickToPaySignIn: ({ children, id: _, style, onVisibilityChange, ...rest }: PropsWithChildren<ClickToPayComponentProps>) => JSX.Element;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.ClickToPaySignIn = void 0;
26
+ var jsx_runtime_1 = require("react/jsx-runtime");
27
+ var secure_fields_1 = require("@gr4vy/secure-fields");
28
+ var react_1 = require("react");
29
+ var use_secure_fields_1 = require("../../hooks/use-secure-fields");
30
+ var ClickToPaySignIn = function (_a) {
31
+ var children = _a.children, _ = _a.id, style = _a.style, onVisibilityChange = _a.onVisibilityChange, rest = __rest(_a, ["children", "id", "style", "onVisibilityChange"]);
32
+ var _b = (0, use_secure_fields_1.useSecureFields)(), clickToPay = _b.clickToPay, secureFields = _b.secureFields;
33
+ (0, react_1.useLayoutEffect)(function () {
34
+ if (!clickToPay)
35
+ return;
36
+ onVisibilityChange &&
37
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_SIGN_IN_VISIBILITY_CHANGE, onVisibilityChange));
38
+ return function () {
39
+ onVisibilityChange &&
40
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_SIGN_IN_VISIBILITY_CHANGE, onVisibilityChange));
41
+ };
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ }, [clickToPay]);
44
+ return ((0, jsx_runtime_1.jsx)("div", __assign({ id: "click-to-pay-sign-in", style: __assign({ display: 'none' }, style) }, rest, { children: children })));
45
+ };
46
+ exports.ClickToPaySignIn = ClickToPaySignIn;
47
+ //# sourceMappingURL=ClickToPaySignIn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickToPaySignIn.js","sourceRoot":"","sources":["../../../src/components/ClickToPay/ClickToPaySignIn.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAmD;AACnD,+BAA0D;AAC1D,mEAAyD;AAGlD,IAAM,gBAAgB,GAAG,UAAC,EAMa;IAL5C,IAAA,QAAQ,cAAA,EACJ,CAAC,QAAA,EACL,KAAK,WAAA,EACL,kBAAkB,wBAAA,EACf,IAAI,cALwB,iDAMhC,CADQ;IAED,IAAA,KAA+B,IAAA,mCAAe,GAAE,EAA9C,UAAU,gBAAA,EAAE,YAAY,kBAAsB,CAAA;IAEtD,IAAA,uBAAe,EAAC;QACd,IAAI,CAAC,UAAU;YAAE,OAAM;QAEvB,kBAAkB;aAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,sCAAsC,EAC1D,kBAAkB,CACnB,CAAA,CAAA;QAEH,OAAO;YACL,kBAAkB;iBAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,sCAAsC,EAC1D,kBAAkB,CACnB,CAAA,CAAA;QACL,CAAC,CAAA;QACD,uDAAuD;IACzD,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,OAAO,CACL,yCACE,EAAE,EAAC,sBAAsB,EACzB,KAAK,aAAI,OAAO,EAAE,MAAM,IAAK,KAAK,KAC9B,IAAI,cAEP,QAAQ,IACL,CACP,CAAA;AACH,CAAC,CAAA;AArCY,QAAA,gBAAgB,oBAqC5B"}
@@ -0,0 +1,2 @@
1
+ export { ClickToPay } from './ClickToPay';
2
+ export { ClickToPaySignIn } from './ClickToPaySignIn';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClickToPaySignIn = exports.ClickToPay = void 0;
4
+ var ClickToPay_1 = require("./ClickToPay");
5
+ Object.defineProperty(exports, "ClickToPay", { enumerable: true, get: function () { return ClickToPay_1.ClickToPay; } });
6
+ var ClickToPaySignIn_1 = require("./ClickToPaySignIn");
7
+ Object.defineProperty(exports, "ClickToPaySignIn", { enumerable: true, get: function () { return ClickToPaySignIn_1.ClickToPaySignIn; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ClickToPay/index.ts"],"names":[],"mappings":";;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,2 @@
1
+ import { ClickToPayOptions } from "../types";
2
+ export declare const useClickToPay: (options: ClickToPayOptions) => import("@gr4vy/secure-fields").ClickToPayInstance;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __rest = (this && this.__rest) || function (s, e) {
50
+ var t = {};
51
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
52
+ t[p] = s[p];
53
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
54
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
55
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
56
+ t[p[i]] = s[p[i]];
57
+ }
58
+ return t;
59
+ };
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ exports.useClickToPay = void 0;
62
+ var react_1 = require("react");
63
+ var use_secure_fields_1 = require("./use-secure-fields");
64
+ var useClickToPay = function (options) {
65
+ var _a = (0, use_secure_fields_1.useSecureFields)(), secureFields = _a.secureFields, clickToPay = _a.clickToPay, setClickToPay = _a.setClickToPay;
66
+ var ref = options.ref, rest = __rest(options, ["ref"]);
67
+ var addField = function () { return __awaiter(void 0, void 0, void 0, function () {
68
+ var _a;
69
+ return __generator(this, function (_b) {
70
+ switch (_b.label) {
71
+ case 0:
72
+ if (!secureFields || !(options === null || options === void 0 ? void 0 : options.ref) || clickToPay) {
73
+ return [2 /*return*/];
74
+ }
75
+ _a = setClickToPay;
76
+ return [4 /*yield*/, secureFields.addClickToPay(ref === null || ref === void 0 ? void 0 : ref.current, __assign(__assign({}, rest), { cardForm: '#secure-fields-card-form', signIn: '#click-to-pay-sign-in' }))];
77
+ case 1:
78
+ _a.apply(void 0, [_b.sent()]);
79
+ return [2 /*return*/];
80
+ }
81
+ });
82
+ }); };
83
+ (0, react_1.useEffect)(function () {
84
+ addField();
85
+ // eslint-disable-next-line react-hooks/exhaustive-deps
86
+ }, [secureFields]);
87
+ return clickToPay;
88
+ };
89
+ exports.useClickToPay = useClickToPay;
90
+ //# sourceMappingURL=use-click-to-pay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-click-to-pay.js","sourceRoot":"","sources":["../../src/hooks/use-click-to-pay.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAiC;AAEjC,yDAAqD;AAE9C,IAAM,aAAa,GAAG,UAAC,OAA0B;IAChD,IAAA,KAA8C,IAAA,mCAAe,GAAE,EAA7D,YAAY,kBAAA,EAAE,UAAU,gBAAA,EAAE,aAAa,mBAAsB,CAAA;IAC7D,IAAA,GAAG,GAAc,OAAO,IAArB,EAAK,IAAI,UAAK,OAAO,EAA1B,OAAgB,CAAF,CAAY;IAEhC,IAAM,QAAQ,GAAG;;;;;oBACf,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAA,IAAI,UAAU,EAAE;wBAChD,sBAAM;qBACP;oBACD,KAAA,aAAa,CAAA;oBACX,qBAAM,YAAY,CAAC,aAAa,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,wBACxC,IAAI,KACP,QAAQ,EAAE,0BAA0B,EACpC,MAAM,EAAE,uBAAuB,IAC/B,EAAA;;oBALJ,kBACE,SAIE,EACH,CAAA;;;;SACF,CAAA;IAED,IAAA,iBAAS,EAAC;QACR,QAAQ,EAAE,CAAA;QACV,uDAAuD;IACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAvBY,QAAA,aAAa,iBAuBzB"}
@@ -1,12 +1,16 @@
1
- import { SecureFields } from '@gr4vy/secure-fields';
2
- import { PropsWithChildren } from 'react';
1
+ import { SecureFields, ClickToPayInstance } from '@gr4vy/secure-fields';
2
+ import { PropsWithChildren, Dispatch } from 'react';
3
3
  import { Config } from "../types";
4
4
  export declare const SecureFieldsContext: import("react").Context<{
5
5
  secureFields: SecureFields;
6
6
  debug: boolean;
7
+ clickToPay?: ClickToPayInstance;
8
+ setClickToPay?: Dispatch<ClickToPayInstance>;
7
9
  }>;
8
10
  export declare const SecureFieldsProvider: ({ children, ...config }: PropsWithChildren<Config>) => JSX.Element;
9
11
  export declare const useSecureFields: () => {
10
12
  secureFields: SecureFields;
11
13
  debug: boolean;
14
+ clickToPay?: ClickToPayInstance;
15
+ setClickToPay?: Dispatch<ClickToPayInstance>;
12
16
  };
@@ -29,8 +29,9 @@ var react_1 = require("react");
29
29
  exports.SecureFieldsContext = (0, react_1.createContext)(null);
30
30
  var SecureFieldsProvider = function (_a) {
31
31
  var children = _a.children, config = __rest(_a, ["children"]);
32
- var sessionId = config.sessionId, debug = config.debug, font = config.font, onReady = config.onReady, onFormChange = config.onFormChange, onCardVaultSuccess = config.onCardVaultSuccess, onCardVaultFailure = config.onCardVaultFailure;
32
+ var sessionId = config.sessionId, debug = config.debug, font = config.font, onReady = config.onReady, onFormChange = config.onFormChange, onCardVaultSuccess = config.onCardVaultSuccess, onCardVaultFailure = config.onCardVaultFailure, onClickToPayInitialized = config.onClickToPayInitialized, onClickToPayReady = config.onClickToPayReady, onClickToPaySignOut = config.onClickToPaySignOut, onClickToPayError = config.onClickToPayError, onClickToPayCancel = config.onClickToPayCancel, onClickToPayCheckoutWithNewCard = config.onClickToPayCheckoutWithNewCard, onClickToPayUnableToLoadDpa = config.onClickToPayUnableToLoadDpa, onMethodChange = config.onMethodChange;
33
33
  var _b = (0, react_1.useState)(), secureFields = _b[0], setSecureFields = _b[1];
34
+ var _c = (0, react_1.useState)(), clickToPay = _c[0], setClickToPay = _c[1];
34
35
  (0, react_1.useEffect)(function () {
35
36
  setSecureFields(new secure_fields_1.SecureFields(config));
36
37
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -46,6 +47,22 @@ var SecureFieldsProvider = function (_a) {
46
47
  (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CARD_VAULT_SUCCESS, onCardVaultSuccess));
47
48
  onCardVaultFailure &&
48
49
  (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CARD_VAULT_FAILURE, onCardVaultFailure));
50
+ onClickToPayInitialized &&
51
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_INITIALIZED, onClickToPayInitialized));
52
+ onClickToPayReady &&
53
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_READY, onClickToPayReady));
54
+ onClickToPaySignOut &&
55
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_SIGN_OUT, onClickToPaySignOut));
56
+ onClickToPayError &&
57
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_ERROR, onClickToPayError));
58
+ onClickToPayCancel &&
59
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_CANCEL, onClickToPayCancel));
60
+ onClickToPayCheckoutWithNewCard &&
61
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_CHECKOUT_WITH_NEW_CARD, onClickToPayCheckoutWithNewCard));
62
+ onClickToPayUnableToLoadDpa &&
63
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_UNABLE_TO_LOAD_DPA, onClickToPayUnableToLoadDpa));
64
+ onMethodChange &&
65
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.addEventListener(secure_fields_1.SecureFields.Events.METHOD_CHANGE, onMethodChange));
49
66
  return function () {
50
67
  onReady &&
51
68
  (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.READY, onReady));
@@ -55,10 +72,26 @@ var SecureFieldsProvider = function (_a) {
55
72
  (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CARD_VAULT_SUCCESS, onCardVaultSuccess));
56
73
  onCardVaultFailure &&
57
74
  (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CARD_VAULT_FAILURE, onCardVaultFailure));
75
+ onClickToPayInitialized &&
76
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_INITIALIZED, onClickToPayInitialized));
77
+ onClickToPayReady &&
78
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_READY, onClickToPayReady));
79
+ onClickToPaySignOut &&
80
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_SIGN_OUT, onClickToPaySignOut));
81
+ onClickToPayError &&
82
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_ERROR, onClickToPayError));
83
+ onClickToPayCancel &&
84
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_CANCEL, onClickToPayCancel));
85
+ onClickToPayCheckoutWithNewCard &&
86
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_CHECKOUT_WITH_NEW_CARD, onClickToPayCheckoutWithNewCard));
87
+ onClickToPayUnableToLoadDpa &&
88
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.CLICK_TO_PAY_UNABLE_TO_LOAD_DPA, onClickToPayUnableToLoadDpa));
89
+ onMethodChange &&
90
+ (secureFields === null || secureFields === void 0 ? void 0 : secureFields.removeEventListener(secure_fields_1.SecureFields.Events.METHOD_CHANGE, onMethodChange));
58
91
  };
59
92
  // eslint-disable-next-line react-hooks/exhaustive-deps
60
93
  }, [secureFields]);
61
- return ((0, jsx_runtime_1.jsx)(exports.SecureFieldsContext.Provider, __assign({ value: { secureFields: secureFields, debug: debug } }, { children: children })));
94
+ return ((0, jsx_runtime_1.jsx)(exports.SecureFieldsContext.Provider, __assign({ value: { secureFields: secureFields, debug: debug, clickToPay: clickToPay, setClickToPay: setClickToPay } }, { children: children })));
62
95
  };
63
96
  exports.SecureFieldsProvider = SecureFieldsProvider;
64
97
  var useSecureFields = function () {
@@ -1 +1 @@
1
- {"version":3,"file":"use-secure-fields.js","sourceRoot":"","sources":["../../src/hooks/use-secure-fields.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAmD;AACnD,+BAOc;AAGD,QAAA,mBAAmB,GAAG,IAAA,qBAAa,EAG7C,IAAI,CAAC,CAAA;AAED,IAAM,oBAAoB,GAAG,UAAC,EAGT;IAF1B,IAAA,QAAQ,cAAA,EACL,MAAM,cAF0B,YAGpC,CADU;IAGP,IAAA,SAAS,GAOP,MAAM,UAPC,EACT,KAAK,GAMH,MAAM,MANH,EACL,IAAI,GAKF,MAAM,KALJ,EACJ,OAAO,GAIL,MAAM,QAJD,EACP,YAAY,GAGV,MAAM,aAHI,EACZ,kBAAkB,GAEhB,MAAM,mBAFU,EAClB,kBAAkB,GAChB,MAAM,mBADU,CACV;IACJ,IAAA,KAAkC,IAAA,gBAAQ,GAAgB,EAAzD,YAAY,QAAA,EAAE,eAAe,QAA4B,CAAA;IAEhE,IAAA,iBAAS,EAAC;QACR,eAAe,CAAC,IAAI,4BAAY,CAAC,MAAM,CAAC,CAAC,CAAA;QACzC,uDAAuD;IACzD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,IAAA,uBAAe,EAAC;QACd,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAE7B,IAAI,KAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC,IAAI,CAAC,CAAA,CAAA;QAEnC,OAAO;aACL,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAAC,4BAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA,CAAA;QACpE,YAAY;aACV,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,WAAW,EAC/B,YAAY,CACb,CAAA,CAAA;QACH,kBAAkB;aAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,kBAAkB,EACtC,kBAAkB,CACnB,CAAA,CAAA;QACH,kBAAkB;aAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,CAC5B,4BAAY,CAAC,MAAM,CAAC,kBAAkB,EACtC,kBAAkB,CACnB,CAAA,CAAA;QAEH,OAAO;YACL,OAAO;iBACL,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,CAAC,4BAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA,CAAA;YACvE,YAAY;iBACV,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,CAC/B,4BAAY,CAAC,MAAM,CAAC,WAAW,EAC/B,YAAY,CACb,CAAA,CAAA;YACH,kBAAkB;iBAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,CAC/B,4BAAY,CAAC,MAAM,CAAC,kBAAkB,EACtC,kBAAkB,CACnB,CAAA,CAAA;YACH,kBAAkB;iBAChB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,CAC/B,4BAAY,CAAC,MAAM,CAAC,kBAAkB,EACtC,kBAAkB,CACnB,CAAA,CAAA;QACL,CAAC,CAAA;QACD,uDAAuD;IACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,OAAO,CACL,uBAAC,2BAAmB,CAAC,QAAQ,aAAC,KAAK,EAAE,EAAE,YAAY,cAAA,EAAE,KAAK,OAAA,EAAE,gBACzD,QAAQ,IACoB,CAChC,CAAA;AACH,CAAC,CAAA;AAtEY,QAAA,oBAAoB,wBAsEhC;AAEM,IAAM,eAAe,GAAG;IAC7B,OAAO,IAAA,kBAAU,EAAC,2BAAmB,CAAC,CAAA;AACxC,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B"}
1
+ {"version":3,"file":"use-secure-fields.js","sourceRoot":"","sources":["../../src/hooks/use-secure-fields.tsx"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ export { CardForm } from "./components/CardForm";
1
2
  export { CardNumber } from "./components/CardNumber";
3
+ export { ClickToPay, ClickToPaySignIn } from "./components/ClickToPay";
2
4
  export { ExpiryDate } from "./components/ExpiryDate";
3
5
  export { SecureFields } from "./components/SecureFields";
4
6
  export { SecurityCode } from "./components/SecurityCode";
package/lib/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSecureInput = exports.useSecureFields = exports.SecurityCode = exports.SecureFields = exports.ExpiryDate = exports.CardNumber = void 0;
3
+ exports.useSecureInput = exports.useSecureFields = exports.SecurityCode = exports.SecureFields = exports.ExpiryDate = exports.ClickToPaySignIn = exports.ClickToPay = exports.CardNumber = exports.CardForm = void 0;
4
+ var CardForm_1 = require("./components/CardForm");
5
+ Object.defineProperty(exports, "CardForm", { enumerable: true, get: function () { return CardForm_1.CardForm; } });
4
6
  var CardNumber_1 = require("./components/CardNumber");
5
7
  Object.defineProperty(exports, "CardNumber", { enumerable: true, get: function () { return CardNumber_1.CardNumber; } });
8
+ var ClickToPay_1 = require("./components/ClickToPay");
9
+ Object.defineProperty(exports, "ClickToPay", { enumerable: true, get: function () { return ClickToPay_1.ClickToPay; } });
10
+ Object.defineProperty(exports, "ClickToPaySignIn", { enumerable: true, get: function () { return ClickToPay_1.ClickToPaySignIn; } });
6
11
  var ExpiryDate_1 = require("./components/ExpiryDate");
7
12
  Object.defineProperty(exports, "ExpiryDate", { enumerable: true, get: function () { return ExpiryDate_1.ExpiryDate; } });
8
13
  var SecureFields_1 = require("./components/SecureFields");
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;AAAA,sDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,sDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,0DAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,0DAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,+DAAyD;AAAhD,oHAAA,eAAe,OAAA;AACxB,6DAAuD;AAA9C,kHAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;AAAA,kDAA8C;AAArC,oGAAA,QAAQ,OAAA;AACjB,sDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,sDAAoE;AAA3D,wGAAA,UAAU,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACrC,sDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,0DAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,0DAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,+DAAyD;AAAhD,oHAAA,eAAe,OAAA;AACxB,6DAAuD;AAA9C,kHAAA,cAAc,OAAA"}
package/lib/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Config as BaseConfig, Field as BaseField, FormChangeEventData } from '@gr4vy/secure-fields';
1
+ import { ClickToPayOptions as BaseClickToPayOptions, ClickToPayInstance, Config as BaseConfig, Field as BaseField, FormChangeEventData } from '@gr4vy/secure-fields';
2
2
  import { MutableRefObject } from 'react';
3
3
  export type CardVaultFailureData = {
4
4
  status: number;
@@ -14,6 +14,18 @@ export type Config = BaseConfig & {
14
14
  onFormChange?: (data: FormChangeEventData) => void;
15
15
  onCardVaultSuccess?: () => void;
16
16
  onCardVaultFailure?: (data: CardVaultFailureData) => void;
17
+ onClickToPayInitialized?: (clickToPay: ClickToPayInstance) => void;
18
+ onClickToPayReady?: (data: {
19
+ buyerExists: boolean;
20
+ }) => void;
21
+ onClickToPaySignOut?: () => void;
22
+ onClickToPayError?: (error: 'RETRIES_EXCEEDED' | 'CODE_INVALID' | 'INVALID_CARD' | 'SIGN_OUT_FAILED' | 'ACCT_INACCESSIBLE' | 'UNKNOWN' | 'USER_NOT_RECOGNIZED') => void;
23
+ onClickToPayCancel?: () => void;
24
+ onClickToPayCheckoutWithNewCard?: () => void;
25
+ onClickToPayUnableToLoadDpa?: () => void;
26
+ onMethodChange?: (data: {
27
+ method: 'card' | 'click-to-pay';
28
+ }) => void;
17
29
  };
18
30
  export type Field = BaseField & {
19
31
  ref?: MutableRefObject<HTMLElement>;
@@ -21,3 +33,9 @@ export type Field = BaseField & {
21
33
  onFocus?: (data: any) => void;
22
34
  onInput?: (data: any) => void;
23
35
  };
36
+ export type ClickToPayOptions = BaseClickToPayOptions & {
37
+ ref?: MutableRefObject<HTMLElement>;
38
+ };
39
+ export type ClickToPayComponentProps = JSX.IntrinsicElements['div'] & {
40
+ onVisibilityChange?: (visible: boolean) => void;
41
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gr4vy/secure-fields-react",
3
- "version": "1.17.0",
3
+ "version": "1.19.0",
4
4
  "description": "Gr4vy-hosted secure fields offering advanced theming, PCI compliance, event handling, and more.",
5
5
  "main": "lib/index",
6
6
  "types": "lib/index",
@@ -25,6 +25,8 @@
25
25
  "lint": "eslint src --ext ts,tsx",
26
26
  "prebuild": "yarn clean",
27
27
  "prepack": "yarn build",
28
+ "serve:watch": "yarn run watch",
29
+ "watch": "tsc -w -p tsconfig.prod.json",
28
30
  "test": "jest --colors",
29
31
  "token": "node ../secure-fields/generate-token"
30
32
  },
@@ -39,7 +41,7 @@
39
41
  "react-dom": ">=17.0.0"
40
42
  },
41
43
  "dependencies": {
42
- "@gr4vy/secure-fields": "^1.17.0"
44
+ "@gr4vy/secure-fields": "^1.19.0"
43
45
  },
44
46
  "devDependencies": {
45
47
  "@testing-library/react-hooks": "^8.0.1",
@@ -51,5 +53,5 @@
51
53
  "publishConfig": {
52
54
  "access": "public"
53
55
  },
54
- "gitHead": "866fb2e4de535d1b8ec7640c797fff5b487d1b8f"
56
+ "gitHead": "cdf0c7f0387ac429092af04f584b97800db3d92f"
55
57
  }