@evervault/evervault-react-native 1.0.1 → 1.2.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/README.md +34 -39
- package/dist/commonjs/components/3DS/ThreeDSecure.js +34 -0
- package/dist/commonjs/components/3DS/ThreeDSecure.js.map +1 -0
- package/dist/commonjs/components/3DS/ThreeDSecureFrame.js +45 -0
- package/dist/commonjs/components/3DS/ThreeDSecureFrame.js.map +1 -0
- package/dist/commonjs/components/3DS/config.js +9 -0
- package/dist/commonjs/components/3DS/config.js.map +1 -0
- package/dist/commonjs/components/3DS/context.js +9 -0
- package/dist/commonjs/components/3DS/context.js.map +1 -0
- package/dist/commonjs/components/3DS/index.js +20 -0
- package/dist/commonjs/components/3DS/index.js.map +1 -0
- package/dist/commonjs/components/3DS/styles.js +63 -0
- package/dist/commonjs/components/3DS/styles.js.map +1 -0
- package/dist/commonjs/components/3DS/threeDSSession.js +109 -0
- package/dist/commonjs/components/3DS/threeDSSession.js.map +1 -0
- package/dist/commonjs/components/3DS/types.js +2 -0
- package/dist/commonjs/components/3DS/types.js.map +1 -0
- package/dist/commonjs/components/3DS/useThreeDSecure.js +46 -0
- package/dist/commonjs/components/3DS/useThreeDSecure.js.map +1 -0
- package/dist/commonjs/components/Card/Card.js +13 -13
- package/dist/commonjs/components/Card/CardCVC.js +7 -7
- package/dist/commonjs/components/Card/CardExpiry.js +6 -6
- package/dist/commonjs/components/Card/CardHolder.js +5 -5
- package/dist/commonjs/components/Card/CardNumber.js +6 -6
- package/dist/commonjs/components/Card/CardNumber.js.map +1 -1
- package/dist/commonjs/components/Card/context.js +5 -5
- package/dist/commonjs/components/Card/utilities.js +5 -5
- package/dist/commonjs/components/EvervaultProvider.js +62 -0
- package/dist/commonjs/components/EvervaultProvider.js.map +1 -0
- package/dist/commonjs/index.js +21 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/native.js +2 -2
- package/dist/commonjs/sdk.js +10 -3
- package/dist/commonjs/sdk.js.map +1 -1
- package/dist/module/components/3DS/ThreeDSecure.js +28 -0
- package/dist/module/components/3DS/ThreeDSecure.js.map +1 -0
- package/dist/module/components/3DS/ThreeDSecureFrame.js +36 -0
- package/dist/module/components/3DS/ThreeDSecureFrame.js.map +1 -0
- package/dist/module/components/3DS/config.js +3 -0
- package/dist/module/components/3DS/config.js.map +1 -0
- package/dist/module/components/3DS/context.js +3 -0
- package/dist/module/components/3DS/context.js.map +1 -0
- package/dist/module/components/3DS/index.js +3 -0
- package/dist/module/components/3DS/index.js.map +1 -0
- package/dist/module/components/3DS/styles.js +58 -0
- package/dist/module/components/3DS/styles.js.map +1 -0
- package/dist/module/components/3DS/threeDSSession.js +100 -0
- package/dist/module/components/3DS/threeDSSession.js.map +1 -0
- package/dist/module/components/3DS/types.js +2 -0
- package/dist/module/components/3DS/types.js.map +1 -0
- package/dist/module/components/3DS/useThreeDSecure.js +40 -0
- package/dist/module/components/3DS/useThreeDSecure.js.map +1 -0
- package/dist/module/components/Card/Card.js +25 -25
- package/dist/module/components/Card/Card.js.map +1 -1
- package/dist/module/components/Card/CardCVC.js +12 -12
- package/dist/module/components/Card/CardExpiry.js +10 -10
- package/dist/module/components/Card/CardHolder.js +9 -9
- package/dist/module/components/Card/CardNumber.js +11 -11
- package/dist/module/components/Card/CardNumber.js.map +1 -1
- package/dist/module/components/Card/context.js +6 -6
- package/dist/module/components/Card/index.js +1 -1
- package/dist/module/components/Card/utilities.js +6 -6
- package/dist/module/components/EvervaultProvider.js +53 -0
- package/dist/module/components/EvervaultProvider.js.map +1 -0
- package/dist/module/index.js +4 -2
- package/dist/module/index.js.map +1 -1
- package/dist/module/native.js +3 -3
- package/dist/module/sdk.js +13 -5
- package/dist/module/sdk.js.map +1 -1
- package/dist/typescript/src/components/3DS/ThreeDSecure.d.ts +8 -0
- package/dist/typescript/src/components/3DS/ThreeDSecure.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/ThreeDSecureFrame.d.ts +3 -0
- package/dist/typescript/src/components/3DS/ThreeDSecureFrame.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/config.d.ts +3 -0
- package/dist/typescript/src/components/3DS/config.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/context.d.ts +4 -0
- package/dist/typescript/src/components/3DS/context.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/index.d.ts +3 -0
- package/dist/typescript/src/components/3DS/index.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/styles.d.ts +57 -0
- package/dist/typescript/src/components/3DS/styles.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/threeDSSession.d.ts +10 -0
- package/dist/typescript/src/components/3DS/threeDSSession.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/types.d.ts +42 -0
- package/dist/typescript/src/components/3DS/types.d.ts.map +1 -0
- package/dist/typescript/src/components/3DS/useThreeDSecure.d.ts +3 -0
- package/dist/typescript/src/components/3DS/useThreeDSecure.d.ts.map +1 -0
- package/dist/typescript/src/components/Card/Card.d.ts +8 -8
- package/dist/typescript/src/components/Card/Card.d.ts.map +1 -1
- package/dist/typescript/src/components/Card/CardCVC.d.ts +2 -2
- package/dist/typescript/src/components/Card/CardExpiry.d.ts +2 -2
- package/dist/typescript/src/components/Card/CardHolder.d.ts +2 -2
- package/dist/typescript/src/components/Card/CardNumber.d.ts +2 -2
- package/dist/typescript/src/components/Card/context.d.ts +4 -4
- package/dist/typescript/src/components/Card/index.d.ts +1 -1
- package/dist/typescript/src/components/Card/types.d.ts +2 -2
- package/dist/typescript/src/components/Card/types.d.ts.map +1 -1
- package/dist/typescript/src/components/Card/utilities.d.ts +3 -3
- package/dist/typescript/src/components/EvervaultProvider.d.ts +29 -0
- package/dist/typescript/src/components/EvervaultProvider.d.ts.map +1 -0
- package/dist/typescript/src/index.d.ts +5 -3
- package/dist/typescript/src/index.d.ts.map +1 -1
- package/dist/typescript/src/sdk.d.ts +7 -0
- package/dist/typescript/src/sdk.d.ts.map +1 -1
- package/package.json +6 -80
- package/src/components/3DS/ThreeDSecure.tsx +32 -0
- package/src/components/3DS/ThreeDSecureFrame.tsx +39 -0
- package/src/components/3DS/config.ts +2 -0
- package/src/components/3DS/context.tsx +4 -0
- package/src/components/3DS/index.ts +2 -0
- package/src/components/3DS/styles.tsx +63 -0
- package/src/components/3DS/threeDSSession.ts +132 -0
- package/src/components/3DS/types.ts +46 -0
- package/src/components/3DS/useThreeDSecure.tsx +51 -0
- package/src/components/Card/Card.tsx +27 -27
- package/src/components/Card/CardCVC.tsx +13 -13
- package/src/components/Card/CardExpiry.tsx +11 -11
- package/src/components/Card/CardHolder.tsx +10 -10
- package/src/components/Card/CardNumber.tsx +12 -12
- package/src/components/Card/context.tsx +9 -9
- package/src/components/Card/index.ts +1 -1
- package/src/components/Card/types.ts +15 -14
- package/src/components/Card/utilities.ts +8 -8
- package/src/components/EvervaultProvider.tsx +64 -0
- package/src/index.tsx +5 -3
- package/src/native.ts +4 -4
- package/src/sdk.ts +12 -5
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
export interface ThreeDSecureCallbacks {
|
|
4
|
+
onError: (error: Error) => void;
|
|
5
|
+
onFailure: (error: Error) => void;
|
|
6
|
+
onSuccess: () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface ThreeDSecureInitialState {
|
|
9
|
+
session: ThreeDSecureSession | null;
|
|
10
|
+
isVisible: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ThreeDSecureProviderProps {
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
state: ThreeDSecureState;
|
|
15
|
+
}
|
|
16
|
+
export interface ThreeDSecureSession {
|
|
17
|
+
cancel: () => Promise<void>;
|
|
18
|
+
get: () => Promise<ThreeDSecureSessionResponse>;
|
|
19
|
+
sessionId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ThreeDSecureSessionResponse {
|
|
22
|
+
nextAction: {
|
|
23
|
+
creq?: string;
|
|
24
|
+
type: string;
|
|
25
|
+
url?: string;
|
|
26
|
+
};
|
|
27
|
+
status: SessionStatus;
|
|
28
|
+
}
|
|
29
|
+
export interface ThreeDSecureSessionsParams {
|
|
30
|
+
appId: string;
|
|
31
|
+
callbacks: ThreeDSecureCallbacks;
|
|
32
|
+
intervalRef: React.MutableRefObject<NodeJS.Timeout | null>;
|
|
33
|
+
sessionId: string;
|
|
34
|
+
setIsVisible: (show: boolean) => void;
|
|
35
|
+
}
|
|
36
|
+
export interface ThreeDSecureState extends ThreeDSecureInitialState {
|
|
37
|
+
cancel: () => Promise<void>;
|
|
38
|
+
start: (sessionId: string, callbacks: ThreeDSecureCallbacks) => void;
|
|
39
|
+
}
|
|
40
|
+
type SessionStatus = "action-required" | "failure" | "success";
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/3DS/types.ts"],"names":[],"mappings":";;AACA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,qBAAqB,CAAC;IACjC,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACtE;AAED,KAAK,aAAa,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThreeDSecure.d.ts","sourceRoot":"","sources":["../../../../../src/components/3DS/useThreeDSecure.tsx"],"names":[],"mappings":"AAIA,OAAO,EAGL,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,eAAe,QAAO,iBAwClC,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { ReactNode } from
|
|
3
|
-
import type { CardForm, CardConfig, CardPayload } from
|
|
4
|
-
import { CardNumber } from
|
|
5
|
-
import { CardHolder } from
|
|
6
|
-
import { CardExpiry } from
|
|
7
|
-
import { StyleProp, TextInputProps, TextStyle } from
|
|
8
|
-
export interface BaseProps extends Omit<TextInputProps,
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
import type { CardForm, CardConfig, CardPayload } from "./types";
|
|
4
|
+
import { CardNumber } from "./CardNumber";
|
|
5
|
+
import { CardHolder } from "./CardHolder";
|
|
6
|
+
import { CardExpiry } from "./CardExpiry";
|
|
7
|
+
import { StyleProp, TextInputProps, TextStyle } from "react-native";
|
|
8
|
+
export interface BaseProps extends Omit<TextInputProps, "onChange" | "onChangeText" | "inputMode" | "autoComplete" | "value"> {
|
|
9
9
|
}
|
|
10
10
|
export interface CardProps {
|
|
11
11
|
initialValue?: CardForm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/Card.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/Card.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAa,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAQ,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,SACf,SAAQ,IAAI,CACV,cAAc,EACd,UAAU,GAAG,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CACrE;CAAG;AAEN,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,iBAAS,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,SAAS,qBAyF3E;AAED,QAAA,MAAM,aAAa;;;;;CAKjB,CAAC;AAEH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { BaseProps } from
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { BaseProps } from "./Card";
|
|
3
3
|
export interface CardExpiryProps extends BaseProps {
|
|
4
4
|
}
|
|
5
5
|
export declare function CardExpiry(props: CardExpiryProps): React.JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { BaseProps } from
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { BaseProps } from "./Card";
|
|
3
3
|
export interface CardHolderProps extends BaseProps {
|
|
4
4
|
}
|
|
5
5
|
export declare function CardHolder(props: CardHolderProps): React.JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { BaseProps } from
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { BaseProps } from "./Card";
|
|
3
3
|
interface CardNumberProps extends BaseProps {
|
|
4
4
|
}
|
|
5
5
|
export declare function CardNumber(props: CardNumberProps): React.JSX.Element;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { UseFormReturn } from
|
|
2
|
-
import { Dispatch, SetStateAction } from
|
|
3
|
-
import { CardForm, CardField } from
|
|
1
|
+
import { UseFormReturn } from "../useForm";
|
|
2
|
+
import { Dispatch, SetStateAction } from "react";
|
|
3
|
+
import { CardForm, CardField } from "./types";
|
|
4
4
|
type Context<T> = {
|
|
5
5
|
values: CardForm;
|
|
6
|
-
register: UseFormReturn<T>[
|
|
6
|
+
register: UseFormReturn<T>["register"];
|
|
7
7
|
setRegisteredFields: Dispatch<SetStateAction<Set<CardField>>>;
|
|
8
8
|
};
|
|
9
9
|
export declare const removeFieldFromSet: (prev: Set<CardField>, field: CardField) => Set<CardField>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Card, type CardProps } from
|
|
1
|
+
export { Card, type CardProps } from "./Card";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type CardBrandName =
|
|
1
|
+
export type CardBrandName = "american-express" | "visa" | "mastercard" | "discover" | "jcb" | "diners-club" | "unionpay" | "maestro" | "mir" | "elo" | "hipercard" | "hiper" | "szep" | "uatp";
|
|
2
2
|
export interface CardConfig {
|
|
3
3
|
acceptedBrands?: CardBrandName[];
|
|
4
4
|
}
|
|
@@ -8,7 +8,7 @@ export interface CardForm {
|
|
|
8
8
|
cvc: string;
|
|
9
9
|
expiry: string;
|
|
10
10
|
}
|
|
11
|
-
export type CardField =
|
|
11
|
+
export type CardField = "name" | "number" | "expiry" | "cvc";
|
|
12
12
|
export interface CardExpiry {
|
|
13
13
|
month: string | null;
|
|
14
14
|
year: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,MAAM,GACN,YAAY,GACZ,UAAU,GACV,KAAK,GACL,aAAa,GACb,UAAU,GACV,SAAS,GACT,KAAK,GACL,KAAK,GACL,WAAW,GACX,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,EAAE,UAAU,CAAC;QACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,MAAM,GACN,YAAY,GACZ,UAAU,GACV,KAAK,GACL,aAAa,GACb,UAAU,GACV,SAAS,GACT,KAAK,GACL,KAAK,GACL,WAAW,GACX,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,EAAE,UAAU,CAAC;QACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CardNumberValidationResult } from
|
|
2
|
-
import type { CardForm, CardBrandName, CardField, CardPayload } from
|
|
3
|
-
import { UseFormReturn } from
|
|
1
|
+
import { CardNumberValidationResult } from "@evervault/card-validator";
|
|
2
|
+
import type { CardForm, CardBrandName, CardField, CardPayload } from "./types";
|
|
3
|
+
import { UseFormReturn } from "../useForm";
|
|
4
4
|
export declare function changePayload(encrypt: (value: string) => Promise<string>, form: UseFormReturn<CardForm>, fields: CardField[]): Promise<CardPayload>;
|
|
5
5
|
export declare function isComplete(form: UseFormReturn<CardForm>, fields: CardField[]): boolean;
|
|
6
6
|
export declare function isAcceptedBrand(acceptedBrands: CardBrandName[] | undefined, cardNumberValidationResult: CardNumberValidationResult): boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export interface EvervaultContext {
|
|
4
|
+
teamUuid?: string;
|
|
5
|
+
appUuid?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const useEvervault: () => EvervaultContext;
|
|
8
|
+
interface EvervaultProps {
|
|
9
|
+
appId: string;
|
|
10
|
+
teamId: string;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* function App() {
|
|
17
|
+
* return (
|
|
18
|
+
* <EvervaultProvider teamId="team_123" appId="app_123">
|
|
19
|
+
* <Card onChange={(card) => console.log(card)}>
|
|
20
|
+
* <Card.Number />
|
|
21
|
+
* </Card>
|
|
22
|
+
* </EvervaultProvider>
|
|
23
|
+
* );
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
declare const EvervaultProvider: ({ teamId, appId, children }: EvervaultProps) => React.JSX.Element;
|
|
28
|
+
export default EvervaultProvider;
|
|
29
|
+
//# sourceMappingURL=EvervaultProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EvervaultProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/EvervaultProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAC;AACxE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAElD,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,iBAAiB,gCAAiC,cAAc,sBAwBrE,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export { type CardProps, Card } from
|
|
2
|
-
export {
|
|
3
|
-
export
|
|
1
|
+
export { type CardProps, Card } from "./components/Card";
|
|
2
|
+
export { ThreeDSecure, useThreeDSecure } from "./components/3DS";
|
|
3
|
+
export { init, encrypt } from "./sdk";
|
|
4
|
+
export type { CardPayload, CardExpiry, CardBrandName, CardConfig, CardForm, CardField, } from "./components/Card/types";
|
|
5
|
+
export { default as EvervaultProvider } from "./components/EvervaultProvider";
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACtC,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,EACV,QAAQ,EACR,SAAS,GACV,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACtC,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,EACV,QAAQ,EACR,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Deprecated since version 1.1.0. Use `EvervaultProvider` instead.
|
|
3
|
+
* @see `EvervaultProvider` instead
|
|
4
|
+
* ```tsx
|
|
5
|
+
* import { EvervaultProvider } from "@evervault/evervault-react-native";
|
|
6
|
+
* ```
|
|
7
|
+
*/
|
|
1
8
|
export declare function init(teamUuid: string, appUuid: string): Promise<void>;
|
|
2
9
|
export declare function encrypt(data: any): Promise<string>;
|
|
3
10
|
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../src/sdk.ts"],"names":[],"mappings":"AAGA,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3E;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CASxD"}
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../src/sdk.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3E;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CASxD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evervault/evervault-react-native",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Evervault react native sdk",
|
|
5
5
|
"main": "./dist/commonjs/index.js",
|
|
6
6
|
"module": "./dist/module/index.js",
|
|
@@ -45,8 +45,10 @@
|
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
+
"nodemon": "^3.1.4",
|
|
48
49
|
"react-native-masked-text": "^1.13.0",
|
|
49
|
-
"
|
|
50
|
+
"react-native-webview": "^13.12.0",
|
|
51
|
+
"@evervault/card-validator": "1.1.0"
|
|
50
52
|
},
|
|
51
53
|
"devDependencies": {
|
|
52
54
|
"@commitlint/config-conventional": "^17.0.2",
|
|
@@ -77,87 +79,11 @@
|
|
|
77
79
|
"engines": {
|
|
78
80
|
"node": ">= 18.0.0"
|
|
79
81
|
},
|
|
80
|
-
"jest": {
|
|
81
|
-
"preset": "react-native",
|
|
82
|
-
"modulePathIgnorePatterns": [
|
|
83
|
-
"<rootDir>/dist/"
|
|
84
|
-
]
|
|
85
|
-
},
|
|
86
|
-
"commitlint": {
|
|
87
|
-
"extends": [
|
|
88
|
-
"@commitlint/config-conventional"
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
"release-it": {
|
|
92
|
-
"git": {
|
|
93
|
-
"commitMessage": "chore: release ${version}",
|
|
94
|
-
"tagName": "v${version}"
|
|
95
|
-
},
|
|
96
|
-
"npm": {
|
|
97
|
-
"publish": true
|
|
98
|
-
},
|
|
99
|
-
"github": {
|
|
100
|
-
"release": true
|
|
101
|
-
},
|
|
102
|
-
"plugins": {
|
|
103
|
-
"@release-it/conventional-changelog": {
|
|
104
|
-
"preset": "angular"
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
"eslintConfig": {
|
|
109
|
-
"root": true,
|
|
110
|
-
"extends": [
|
|
111
|
-
"@react-native",
|
|
112
|
-
"prettier"
|
|
113
|
-
],
|
|
114
|
-
"rules": {
|
|
115
|
-
"prettier/prettier": [
|
|
116
|
-
"error",
|
|
117
|
-
{
|
|
118
|
-
"quoteProps": "consistent",
|
|
119
|
-
"singleQuote": true,
|
|
120
|
-
"tabWidth": 2,
|
|
121
|
-
"trailingComma": "es5",
|
|
122
|
-
"useTabs": false
|
|
123
|
-
}
|
|
124
|
-
]
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
"eslintIgnore": [
|
|
128
|
-
"node_modules/",
|
|
129
|
-
"dist/"
|
|
130
|
-
],
|
|
131
|
-
"prettier": {
|
|
132
|
-
"quoteProps": "consistent",
|
|
133
|
-
"singleQuote": true,
|
|
134
|
-
"tabWidth": 2,
|
|
135
|
-
"trailingComma": "es5",
|
|
136
|
-
"useTabs": false
|
|
137
|
-
},
|
|
138
|
-
"react-native-builder-bob": {
|
|
139
|
-
"source": "src",
|
|
140
|
-
"output": "dist",
|
|
141
|
-
"typescript": [
|
|
142
|
-
{
|
|
143
|
-
"project": "tsconfig.build.json"
|
|
144
|
-
}
|
|
145
|
-
],
|
|
146
|
-
"targets": [
|
|
147
|
-
"module",
|
|
148
|
-
"commonjs",
|
|
149
|
-
[
|
|
150
|
-
"typescript",
|
|
151
|
-
{
|
|
152
|
-
"project": "tsconfig.build.json"
|
|
153
|
-
}
|
|
154
|
-
]
|
|
155
|
-
]
|
|
156
|
-
},
|
|
157
82
|
"scripts": {
|
|
83
|
+
"dev": "nodemon --watch ./src --exec 'bob build' --ext ts,tsx",
|
|
158
84
|
"build": "bob build",
|
|
159
85
|
"typecheck": "tsc --noEmit",
|
|
160
86
|
"clean": "del-cli android/build dist",
|
|
161
|
-
"
|
|
87
|
+
"format": "prettier --write ."
|
|
162
88
|
}
|
|
163
89
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React, { createContext, useContext } from "react";
|
|
2
|
+
import { ThreeDSecureProviderProps } from "./types";
|
|
3
|
+
import { useEvervault } from "../EvervaultProvider";
|
|
4
|
+
import { ThreeDSecureFrame } from "./ThreeDSecureFrame";
|
|
5
|
+
import { ThreeDSecureContext } from "./context";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const ThreeDSecure = ({ state, children }: ThreeDSecureProviderProps) => {
|
|
9
|
+
const { appUuid } = useEvervault();
|
|
10
|
+
|
|
11
|
+
if (!appUuid) {
|
|
12
|
+
throw new Error("ThreeDSecure must be used within an Evervault Provider");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const { session, isVisible } = state;
|
|
16
|
+
|
|
17
|
+
if (!session) return null;
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<ThreeDSecureContext.Provider value={state}>
|
|
21
|
+
{isVisible && children}
|
|
22
|
+
</ThreeDSecureContext.Provider>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
const ThreeDSecureNamespace = Object.assign(ThreeDSecure, {
|
|
29
|
+
Frame: ThreeDSecureFrame
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export { ThreeDSecureNamespace as ThreeDSecure };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { useContext, useState } from "react";
|
|
2
|
+
import { View, StyleSheet } from "react-native";
|
|
3
|
+
import { useEvervault } from "../EvervaultProvider";
|
|
4
|
+
import WebView from "react-native-webview";
|
|
5
|
+
import { CHALLENGE_DOMAIN_3DS } from "./config";
|
|
6
|
+
import { defaultThreeDSecureFrameStyles as defaultStyles } from "./styles";
|
|
7
|
+
import { ThreeDSecureContext } from "./context";
|
|
8
|
+
|
|
9
|
+
export function ThreeDSecureFrame() {
|
|
10
|
+
const { teamUuid, appUuid } = useEvervault();
|
|
11
|
+
const context = useContext(ThreeDSecureContext);
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
if (!teamUuid || !appUuid) {
|
|
15
|
+
throw new Error('Missing Evervault Team or App Uuid. Make sure the ThreeDSecureFrame is nested within the Evervault Provider');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!context) {
|
|
19
|
+
throw new Error("ThreeDSecure.Frame must be used within an Evervault ThreeDSecure provider component");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const { session } = context;
|
|
23
|
+
|
|
24
|
+
if (!session) {
|
|
25
|
+
return null; // 3DS Session not started yet
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<View style={defaultStyles.threeDSFrame}>
|
|
30
|
+
<WebView
|
|
31
|
+
source={{
|
|
32
|
+
uri: `https://${CHALLENGE_DOMAIN_3DS}/?session=${session.sessionId}&app=${appUuid}&team=${teamUuid}`,
|
|
33
|
+
}}
|
|
34
|
+
containerStyle={defaultStyles.webView}
|
|
35
|
+
overScrollMode="content"
|
|
36
|
+
/>
|
|
37
|
+
</View>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
|
|
3
|
+
const defaultModalStyles = StyleSheet.create({
|
|
4
|
+
modalContainer: {
|
|
5
|
+
flex: 1,
|
|
6
|
+
justifyContent: "flex-end",
|
|
7
|
+
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
|
8
|
+
},
|
|
9
|
+
modalContent: {
|
|
10
|
+
width: "100%",
|
|
11
|
+
height: "95%",
|
|
12
|
+
backgroundColor: "#fff",
|
|
13
|
+
padding: 0,
|
|
14
|
+
justifyContent: "flex-start",
|
|
15
|
+
borderTopLeftRadius: 20,
|
|
16
|
+
borderTopRightRadius: 20,
|
|
17
|
+
},
|
|
18
|
+
titleBar: {
|
|
19
|
+
justifyContent: "center",
|
|
20
|
+
alignItems: "center",
|
|
21
|
+
padding: 10,
|
|
22
|
+
backgroundColor: "#f5f5f5",
|
|
23
|
+
borderBottomWidth: 1,
|
|
24
|
+
borderBottomColor: "#ccc",
|
|
25
|
+
position: "relative",
|
|
26
|
+
width: "100%",
|
|
27
|
+
borderTopLeftRadius: 20,
|
|
28
|
+
borderTopRightRadius: 20,
|
|
29
|
+
},
|
|
30
|
+
titleText: {
|
|
31
|
+
fontSize: 18,
|
|
32
|
+
fontWeight: "bold",
|
|
33
|
+
},
|
|
34
|
+
closeButton: {
|
|
35
|
+
position: "absolute",
|
|
36
|
+
left: 10,
|
|
37
|
+
padding: 10,
|
|
38
|
+
},
|
|
39
|
+
closeButtonText: {
|
|
40
|
+
fontSize: 18,
|
|
41
|
+
fontWeight: "bold",
|
|
42
|
+
color: "black",
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const defaultThreeDSecureFrameStyles = StyleSheet.create({
|
|
47
|
+
threeDSFrame: {
|
|
48
|
+
flex: 1,
|
|
49
|
+
},
|
|
50
|
+
webView: {
|
|
51
|
+
flex: 1,
|
|
52
|
+
},
|
|
53
|
+
spinnerOverlay: {
|
|
54
|
+
flex: 1,
|
|
55
|
+
justifyContent: 'center',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
defaultModalStyles,
|
|
62
|
+
defaultThreeDSecureFrameStyles
|
|
63
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ThreeDSecureCallbacks,
|
|
3
|
+
ThreeDSecureSessionsParams,
|
|
4
|
+
ThreeDSecureSession,
|
|
5
|
+
ThreeDSecureSessionResponse,
|
|
6
|
+
} from "./types";
|
|
7
|
+
import { EV_API_DOMAIN } from "./config";
|
|
8
|
+
|
|
9
|
+
const stopPolling = (
|
|
10
|
+
intervalRef: React.MutableRefObject<NodeJS.Timeout | null>,
|
|
11
|
+
setIsVisible: (show: boolean) => void,
|
|
12
|
+
) => {
|
|
13
|
+
setIsVisible(false);
|
|
14
|
+
clearInterval(intervalRef.current!);
|
|
15
|
+
intervalRef.current = null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const startSession = async (
|
|
19
|
+
session: ThreeDSecureSession,
|
|
20
|
+
callbacks: ThreeDSecureCallbacks,
|
|
21
|
+
intervalRef: React.MutableRefObject<NodeJS.Timeout | null>,
|
|
22
|
+
setIsVisible: (show: boolean) => void
|
|
23
|
+
) => {
|
|
24
|
+
try {
|
|
25
|
+
const sessionState = await session.get();
|
|
26
|
+
|
|
27
|
+
switch (sessionState.status) {
|
|
28
|
+
case "success":
|
|
29
|
+
stopPolling(intervalRef, setIsVisible);
|
|
30
|
+
callbacks.onSuccess();
|
|
31
|
+
break;
|
|
32
|
+
case "failure":
|
|
33
|
+
stopPolling(intervalRef, setIsVisible);
|
|
34
|
+
callbacks.onFailure(new Error("3DS session failed"));
|
|
35
|
+
break;
|
|
36
|
+
case "action-required":
|
|
37
|
+
setIsVisible(true);
|
|
38
|
+
pollSession(session, callbacks, intervalRef, setIsVisible);
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error("Error checking session state", error);
|
|
45
|
+
callbacks.onError(new Error("Failed to check 3DS session state"));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const pollSession = (
|
|
50
|
+
session: ThreeDSecureSession,
|
|
51
|
+
callbacks: ThreeDSecureCallbacks,
|
|
52
|
+
intervalRef: React.MutableRefObject<NodeJS.Timeout | null>,
|
|
53
|
+
setIsVisible: (show: boolean) => void,
|
|
54
|
+
interval: number = 3000
|
|
55
|
+
) => {
|
|
56
|
+
intervalRef.current = setInterval(async () => {
|
|
57
|
+
try {
|
|
58
|
+
const pollResponse: ThreeDSecureSessionResponse = await session.get();
|
|
59
|
+
if (pollResponse.status === "success") {
|
|
60
|
+
stopPolling(intervalRef, setIsVisible);
|
|
61
|
+
callbacks.onSuccess();
|
|
62
|
+
} else if (pollResponse.status === "failure") {
|
|
63
|
+
stopPolling(intervalRef, setIsVisible);
|
|
64
|
+
callbacks.onFailure(new Error("3DS session failed"));
|
|
65
|
+
} else {
|
|
66
|
+
setIsVisible(true);
|
|
67
|
+
}
|
|
68
|
+
} catch (error) {
|
|
69
|
+
stopPolling(intervalRef, setIsVisible);
|
|
70
|
+
console.error("Error polling session", error);
|
|
71
|
+
callbacks.onError(new Error("Error polling 3DS session"));
|
|
72
|
+
}
|
|
73
|
+
}, interval);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export function threeDSecureSession({
|
|
77
|
+
sessionId,
|
|
78
|
+
appId,
|
|
79
|
+
callbacks,
|
|
80
|
+
intervalRef,
|
|
81
|
+
setIsVisible,
|
|
82
|
+
}: ThreeDSecureSessionsParams): ThreeDSecureSession {
|
|
83
|
+
const get = async (): Promise<ThreeDSecureSessionResponse> => {
|
|
84
|
+
try {
|
|
85
|
+
const response = await fetch(
|
|
86
|
+
`https://${EV_API_DOMAIN}/frontend/3ds/browser-sessions/${sessionId}`,
|
|
87
|
+
{
|
|
88
|
+
headers: {
|
|
89
|
+
"x-evervault-app-id": appId,
|
|
90
|
+
},
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const result = (await response.json()) as ThreeDSecureSessionResponse;
|
|
95
|
+
return result;
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error("Error fetching 3DS session status", error);
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const cancel = async (): Promise<void> => {
|
|
103
|
+
try {
|
|
104
|
+
await fetch(
|
|
105
|
+
`https://${EV_API_DOMAIN}/frontend/3ds/browser-sessions/${sessionId}`,
|
|
106
|
+
{
|
|
107
|
+
method: "PATCH",
|
|
108
|
+
headers: {
|
|
109
|
+
"Content-Type": "application/json",
|
|
110
|
+
"x-evervault-app-id": appId,
|
|
111
|
+
},
|
|
112
|
+
body: JSON.stringify({ outcome: "cancelled" }),
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
callbacks.onFailure(new Error("3DS session cancelled by user"));
|
|
117
|
+
setIsVisible(false);
|
|
118
|
+
if (intervalRef.current) {
|
|
119
|
+
clearInterval(intervalRef.current);
|
|
120
|
+
}
|
|
121
|
+
} catch (error) {
|
|
122
|
+
console.error("Error cancelling 3DS session", error);
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
sessionId,
|
|
129
|
+
get,
|
|
130
|
+
cancel,
|
|
131
|
+
} as ThreeDSecureSession;
|
|
132
|
+
}
|