@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.
Files changed (127) hide show
  1. package/README.md +34 -39
  2. package/dist/commonjs/components/3DS/ThreeDSecure.js +34 -0
  3. package/dist/commonjs/components/3DS/ThreeDSecure.js.map +1 -0
  4. package/dist/commonjs/components/3DS/ThreeDSecureFrame.js +45 -0
  5. package/dist/commonjs/components/3DS/ThreeDSecureFrame.js.map +1 -0
  6. package/dist/commonjs/components/3DS/config.js +9 -0
  7. package/dist/commonjs/components/3DS/config.js.map +1 -0
  8. package/dist/commonjs/components/3DS/context.js +9 -0
  9. package/dist/commonjs/components/3DS/context.js.map +1 -0
  10. package/dist/commonjs/components/3DS/index.js +20 -0
  11. package/dist/commonjs/components/3DS/index.js.map +1 -0
  12. package/dist/commonjs/components/3DS/styles.js +63 -0
  13. package/dist/commonjs/components/3DS/styles.js.map +1 -0
  14. package/dist/commonjs/components/3DS/threeDSSession.js +109 -0
  15. package/dist/commonjs/components/3DS/threeDSSession.js.map +1 -0
  16. package/dist/commonjs/components/3DS/types.js +2 -0
  17. package/dist/commonjs/components/3DS/types.js.map +1 -0
  18. package/dist/commonjs/components/3DS/useThreeDSecure.js +46 -0
  19. package/dist/commonjs/components/3DS/useThreeDSecure.js.map +1 -0
  20. package/dist/commonjs/components/Card/Card.js +13 -13
  21. package/dist/commonjs/components/Card/CardCVC.js +7 -7
  22. package/dist/commonjs/components/Card/CardExpiry.js +6 -6
  23. package/dist/commonjs/components/Card/CardHolder.js +5 -5
  24. package/dist/commonjs/components/Card/CardNumber.js +6 -6
  25. package/dist/commonjs/components/Card/CardNumber.js.map +1 -1
  26. package/dist/commonjs/components/Card/context.js +5 -5
  27. package/dist/commonjs/components/Card/utilities.js +5 -5
  28. package/dist/commonjs/components/EvervaultProvider.js +62 -0
  29. package/dist/commonjs/components/EvervaultProvider.js.map +1 -0
  30. package/dist/commonjs/index.js +21 -0
  31. package/dist/commonjs/index.js.map +1 -1
  32. package/dist/commonjs/native.js +2 -2
  33. package/dist/commonjs/sdk.js +10 -3
  34. package/dist/commonjs/sdk.js.map +1 -1
  35. package/dist/module/components/3DS/ThreeDSecure.js +28 -0
  36. package/dist/module/components/3DS/ThreeDSecure.js.map +1 -0
  37. package/dist/module/components/3DS/ThreeDSecureFrame.js +36 -0
  38. package/dist/module/components/3DS/ThreeDSecureFrame.js.map +1 -0
  39. package/dist/module/components/3DS/config.js +3 -0
  40. package/dist/module/components/3DS/config.js.map +1 -0
  41. package/dist/module/components/3DS/context.js +3 -0
  42. package/dist/module/components/3DS/context.js.map +1 -0
  43. package/dist/module/components/3DS/index.js +3 -0
  44. package/dist/module/components/3DS/index.js.map +1 -0
  45. package/dist/module/components/3DS/styles.js +58 -0
  46. package/dist/module/components/3DS/styles.js.map +1 -0
  47. package/dist/module/components/3DS/threeDSSession.js +100 -0
  48. package/dist/module/components/3DS/threeDSSession.js.map +1 -0
  49. package/dist/module/components/3DS/types.js +2 -0
  50. package/dist/module/components/3DS/types.js.map +1 -0
  51. package/dist/module/components/3DS/useThreeDSecure.js +40 -0
  52. package/dist/module/components/3DS/useThreeDSecure.js.map +1 -0
  53. package/dist/module/components/Card/Card.js +25 -25
  54. package/dist/module/components/Card/Card.js.map +1 -1
  55. package/dist/module/components/Card/CardCVC.js +12 -12
  56. package/dist/module/components/Card/CardExpiry.js +10 -10
  57. package/dist/module/components/Card/CardHolder.js +9 -9
  58. package/dist/module/components/Card/CardNumber.js +11 -11
  59. package/dist/module/components/Card/CardNumber.js.map +1 -1
  60. package/dist/module/components/Card/context.js +6 -6
  61. package/dist/module/components/Card/index.js +1 -1
  62. package/dist/module/components/Card/utilities.js +6 -6
  63. package/dist/module/components/EvervaultProvider.js +53 -0
  64. package/dist/module/components/EvervaultProvider.js.map +1 -0
  65. package/dist/module/index.js +4 -2
  66. package/dist/module/index.js.map +1 -1
  67. package/dist/module/native.js +3 -3
  68. package/dist/module/sdk.js +13 -5
  69. package/dist/module/sdk.js.map +1 -1
  70. package/dist/typescript/src/components/3DS/ThreeDSecure.d.ts +8 -0
  71. package/dist/typescript/src/components/3DS/ThreeDSecure.d.ts.map +1 -0
  72. package/dist/typescript/src/components/3DS/ThreeDSecureFrame.d.ts +3 -0
  73. package/dist/typescript/src/components/3DS/ThreeDSecureFrame.d.ts.map +1 -0
  74. package/dist/typescript/src/components/3DS/config.d.ts +3 -0
  75. package/dist/typescript/src/components/3DS/config.d.ts.map +1 -0
  76. package/dist/typescript/src/components/3DS/context.d.ts +4 -0
  77. package/dist/typescript/src/components/3DS/context.d.ts.map +1 -0
  78. package/dist/typescript/src/components/3DS/index.d.ts +3 -0
  79. package/dist/typescript/src/components/3DS/index.d.ts.map +1 -0
  80. package/dist/typescript/src/components/3DS/styles.d.ts +57 -0
  81. package/dist/typescript/src/components/3DS/styles.d.ts.map +1 -0
  82. package/dist/typescript/src/components/3DS/threeDSSession.d.ts +10 -0
  83. package/dist/typescript/src/components/3DS/threeDSSession.d.ts.map +1 -0
  84. package/dist/typescript/src/components/3DS/types.d.ts +42 -0
  85. package/dist/typescript/src/components/3DS/types.d.ts.map +1 -0
  86. package/dist/typescript/src/components/3DS/useThreeDSecure.d.ts +3 -0
  87. package/dist/typescript/src/components/3DS/useThreeDSecure.d.ts.map +1 -0
  88. package/dist/typescript/src/components/Card/Card.d.ts +8 -8
  89. package/dist/typescript/src/components/Card/Card.d.ts.map +1 -1
  90. package/dist/typescript/src/components/Card/CardCVC.d.ts +2 -2
  91. package/dist/typescript/src/components/Card/CardExpiry.d.ts +2 -2
  92. package/dist/typescript/src/components/Card/CardHolder.d.ts +2 -2
  93. package/dist/typescript/src/components/Card/CardNumber.d.ts +2 -2
  94. package/dist/typescript/src/components/Card/context.d.ts +4 -4
  95. package/dist/typescript/src/components/Card/index.d.ts +1 -1
  96. package/dist/typescript/src/components/Card/types.d.ts +2 -2
  97. package/dist/typescript/src/components/Card/types.d.ts.map +1 -1
  98. package/dist/typescript/src/components/Card/utilities.d.ts +3 -3
  99. package/dist/typescript/src/components/EvervaultProvider.d.ts +29 -0
  100. package/dist/typescript/src/components/EvervaultProvider.d.ts.map +1 -0
  101. package/dist/typescript/src/index.d.ts +5 -3
  102. package/dist/typescript/src/index.d.ts.map +1 -1
  103. package/dist/typescript/src/sdk.d.ts +7 -0
  104. package/dist/typescript/src/sdk.d.ts.map +1 -1
  105. package/package.json +6 -80
  106. package/src/components/3DS/ThreeDSecure.tsx +32 -0
  107. package/src/components/3DS/ThreeDSecureFrame.tsx +39 -0
  108. package/src/components/3DS/config.ts +2 -0
  109. package/src/components/3DS/context.tsx +4 -0
  110. package/src/components/3DS/index.ts +2 -0
  111. package/src/components/3DS/styles.tsx +63 -0
  112. package/src/components/3DS/threeDSSession.ts +132 -0
  113. package/src/components/3DS/types.ts +46 -0
  114. package/src/components/3DS/useThreeDSecure.tsx +51 -0
  115. package/src/components/Card/Card.tsx +27 -27
  116. package/src/components/Card/CardCVC.tsx +13 -13
  117. package/src/components/Card/CardExpiry.tsx +11 -11
  118. package/src/components/Card/CardHolder.tsx +10 -10
  119. package/src/components/Card/CardNumber.tsx +12 -12
  120. package/src/components/Card/context.tsx +9 -9
  121. package/src/components/Card/index.ts +1 -1
  122. package/src/components/Card/types.ts +15 -14
  123. package/src/components/Card/utilities.ts +8 -8
  124. package/src/components/EvervaultProvider.tsx +64 -0
  125. package/src/index.tsx +5 -3
  126. package/src/native.ts +4 -4
  127. 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,3 @@
1
+ import { ThreeDSecureState } from "./types";
2
+ export declare const useThreeDSecure: () => ThreeDSecureState;
3
+ //# sourceMappingURL=useThreeDSecure.d.ts.map
@@ -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 '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'> {
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,EAAuB,MAAM,OAAO,CAAC;AAGvD,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
+ {"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 'react';
2
- import { BaseProps } from './Card';
1
+ import * as React from "react";
2
+ import { BaseProps } from "./Card";
3
3
  export interface CVCProps extends BaseProps {
4
4
  }
5
5
  export declare const CardCVC: (props: CVCProps) => React.JSX.Element;
@@ -1,5 +1,5 @@
1
- import * as React from 'react';
2
- import { BaseProps } from './Card';
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 'react';
2
- import { BaseProps } from './Card';
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 'react';
2
- import { BaseProps } from './Card';
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 '../useForm';
2
- import { Dispatch, SetStateAction } from 'react';
3
- import { CardForm, CardField } from './types';
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>['register'];
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 './Card';
1
+ export { Card, type CardProps } from "./Card";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- export type CardBrandName = 'american-express' | 'visa' | 'mastercard' | 'discover' | 'jcb' | 'diners-club' | 'unionpay' | 'maestro' | 'mir' | 'elo' | 'hipercard' | 'hiper' | 'szep';
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 = 'name' | 'number' | 'expiry' | 'cvc';
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 '@evervault/card-validator';
2
- import type { CardForm, CardBrandName, CardField, CardPayload } from './types';
3
- import { UseFormReturn } from '../useForm';
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 './components/Card';
2
- export { init, encrypt } from './sdk';
3
- export type { CardPayload, CardExpiry, CardBrandName, CardConfig, CardForm, CardField, } from './components/Card/types';
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.1",
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
- "@evervault/card-validator": "1.0.5"
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
- "release": "release-it"
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,2 @@
1
+ export const EV_API_DOMAIN = process.env.EV_API_DOMAIN || 'api.evervault.com';
2
+ export const CHALLENGE_DOMAIN_3DS = process.env.CHALLENGE_DOMAIN_3DS || 'c713-2a09-bac5-3a69-ebe-00-178-198.ngrok-free.app';
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ import { ThreeDSecureState } from "./types";
3
+
4
+ export const ThreeDSecureContext = createContext<ThreeDSecureState | null>(null);
@@ -0,0 +1,2 @@
1
+ export { ThreeDSecure } from "./ThreeDSecure";
2
+ export { useThreeDSecure } from "./useThreeDSecure";
@@ -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
+ }