Reference

React.js SDK

You can use our React.js SDK to:

  • Encrypt data client-side
  • Collect credit card numbers with Inputs

Quickstart

Install SDK

Our React.js SDK is distributed via npm, and can be installed using your preferred package manager.

claude:~$
# Using npm
npm install @evervault/react
# Using yarn
yarn add @evervault/react

Initialize SDK

Once installed, initialize the React.js SDK with your Team and App ID found in the Evervault Dashboard.

Use the <EvervaultProvider> component as a provider for your app.

1
import { EvervaultProvider } from '@evervault/react';
2
import ChildComponent from '../ChildComponent';
3
export default function App() {
4
return (
5
<EvervaultProvider teamId={'<TEAM_ID>'} appId={'<APP_ID>'}>
6
<ChildComponent />
7
</EvervaultProvider>
8
);
9
}

Encrypt a string

Once you've added the <EvervaultProvider>, you can access the useEvervault() hook in its children. The useEvervault() hook returns an initialized instance of the JavaScript SDK, which includes the encrypt() function. The encrypt() function can can be used to encrypt plaintext data in your application.

1
import { useState } from 'react';
2
import { useEvervault } from '@evervault/react';
3
4
export default functionChildComponent() {
5
const evervault = useEvervault();
6
const [message, setMessage] = useState('');
7
8
const handleSubmit = async (e) => {
9
e.preventDefault();
10
const encryptedMessage = await evervault.encrypt(message);
11
alert(encryptedMessage);
12
};
13
14
return (
15
<form onSubmit={handleSubmit}>
16
<input value={message} onChange={(e) => setMessage(e.target.value)} />
17
<button>Submit</button>
18
</form>
19
);
20
}

Reference

<EvervaultProvider />

The EvervaultProvider component exposes the useEvervault() hook to any nested components.

1
<EvervaultProvider teamId={String} appId={String} />
Props
TeamIdRequiredString

The unique identifier for your Team. It's found in Team Settings.

appIdRequiredString

The unique identifier for your App. It's found in App Settings.


useEvervault()

The useEvervault hook is accessible in children of the EvervaultProvider, and returns an initialized instance of the Evervault JavaScript SDK. One of the functions included in the returned object is encrypt(), which can be passed any plaintext data structure.

1
const evervault = useEvervault();

evervault.encrypt(data)

Encrypts data using Evervault Encryption. Evervault Strings can be used across all of our products. It is accessible on the returned value from the useEvervault() hook. To encrypt data using the React.js SDK, simply pass a String or an Object into the evervault.encrypt() function.

The encrypted data can be passed to your server and stored in your database as normal. It can also be used with any of Evervault’s other services.

1
const evervault = useEvervault();
2
3
const encrypted = await evervault.encrypt("Hello, world!");
Parameters
dataRequiredString | Object

The data to encrypt.


<EvervaultInput />

The <EvervaultInput> component makes it easy to use Evervault Inputs in your React application. Inputs make it easy to collect encrypted cardholder data in a completely PCI-compliant environment.

Evervault Inputs are served within an iFrame retrieved directly from Evervault’s PCI-compliant infrastructure, which can reduce your PCI DSS compliance scope to the simplest form (SAQ A).

Simply include the component in your JSX to get started.

The component also supports themes and custom styles so you can customise how Inputs looks in your UI.

Props
onChangeRequiredFunction

A function that is called whenever the submission changes.

configString | Object

A theme string (supported: default, minimal or material), or a config object for custom styles.

config.themeString

The base styling for Inputs. Currently supports default, minimal and material.

config.heightString

The height of the Evervault Inputs iframe.

config.primaryColorString

The main theme color.

config.labelColorString

The color CSS property applied to the input labels.

config.inputBorderColorString

The border-color CSS property applied to inputs.

config.inputTextColorString

The color CSS property applied to inputs.

config.inputBackgroundColorString

The color CSS property applied to the ::placeholder CSS pseudo-element for inputs.

config.inputBorderRadiusString

The border-radius CSS property applied to inputs.

config.inputHeightString

The height CSS property applied to inputs.

Retrieving card data

There are two ways of accessing encrypted card data once it has been entered.

In each case, a cardData object containing details about the card data your user has entered is returned.

You can see the format of this object below:

1
{
2
"card": {
3
"type": "visa_credit",
4
"number": "ev:encrypted:abc123",
5
"cvc": "ev:encrypted:def456",
6
"expMonth": "01",
7
"expYear": "23"
8
},
9
"isValid": true,
10
"isPotentiallyValid": true,
11
"isEmpty": false,
12
"error": {
13
"type": "invalid_pan",
14
"message": "The credit card number you entered was invalid"
15
}
16
}

Card data can be retrieved in one of the following two ways:

onChange()

This option is best when you are looking to handle the card values in realtime, like displaying validation errors as a user is inputting their card data. The callback function is run every time your user updates the card data.

1
const evervault = new Evervault('<TEAM_ID>', '<APP_ID>');
2
const inputs = evervault.inputs('ev-card-fields');
3
4
const hook = inputs.on('change', async (encryptedCardData) => {
5
console.log(encryptedCardData);
6
});

getData()

This option is best when you are looking to retrieve card data occasionally, like when your form is submitted.

1
const evervault = new Evervault('<TEAM_ID>', '<APP_ID>');
2
const inputs = evervault.inputs('ev-card-fields');
3
4
const encryptedCardData = await inputs.getData();