This project demonstrates how to integrate the Skyflow React JS SDK into a Vite + React application.
- Vite version 6.3.5 or higher
- A Skyflow account (Sign up at Try Skyflow)
- React 17.x or above
npm create vite@latest skyflow-sample -- --template react
cd skyflow-sample
npm installFor TypeScript, use
--template react-tsinstead.
npm install skyflow-react-js- In a browser, navigate to Skyflow Studio.
- Create a vault by clicking Add Vault > Start With a Template > Quickstart vault.
- Once the vault is created, click the gear icon and select Vault Details.
- Note your Vault URL and Vault ID values. You'll need these later.
- In the side navigation click, Access > Service Accounts > Add Service Account.
- For Name, enter "SDK Samples". For Roles, choose Vault Editor.
- Click Create. Your browser downloads a credentials.json file. Keep this file secure. You'll need it for each of the samples.
-
Create a new directory named
bearer-token-generator.mkdir bearer-token-generator -
Navigate to
bearer-token-generatordirectory.cd bearer-token-generator -
Initialize npm
npm init -
Install
skyflow-nodenpm i skyflow-node -
Move the downloaded “credentials.json” file #Create a service account account into the bearer-token-generator directory.
-
Create
index.jsfile -
Open
index.jsfile -
Populate
index.jsfile with below code snippet
const express = require("express");
const app = express();
const cors = require("cors");
const port = 3000;
const {
generateBearerToken,
isExpired
} = require("skyflow-node");
app.use(cors());
let filepath = "credentials.json";
let bearerToken = "";
const getSkyflowBearerToken = () => {
return new Promise(async (resolve, reject) => {
try {
if (!isExpired(bearerToken)) {
resolve(bearerToken);
}
else {
let response = await generateBearerToken(filepath);
bearerToken = response.accessToken;
resolve(bearerToken);
}
} catch (e) {
reject(e);
}
});
}
app.get("/", async (req, res) => {
let bearerToken = await getSkyflowBearerToken();
res.json({"accessToken" : bearerToken});
});
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
})- Start the server
node index.jsServer will start at localhost:3000
-
Create
.envif doesn't exist in project directorytouch .env
-
Update the environment variables:
- Replace
<VAULT_ID>,<VAULT_URL>, and<TOKEN_ENDPOINT_URL>with the actual values.
echo VAULT_ID=<VAULT_ID> VAULT_URL=<VAULT_URL> TOKEN_ENDPOINT_URL=<TOKEN_ENDPOINT_URL> > .env
- Replace
-
Note:
TOKEN_ENDPOINT_URLis the actual endpoint URL which will return the bearer token.
import React from 'react'
import ReactDOM from 'react-dom/client'
import {Env, LogLevel, SkyflowElements} from 'skyflow-react-js'
import App from './App'
const getBearerToken = () => {
return new Promise<string>((resolve, reject) => {
const Http = new XMLHttpRequest();
Http.onreadystatechange = () => {
if (Http.readyState === 4) {
if (Http.status === 200) {
const response = JSON.parse(Http.responseText);
resolve(response.accessToken);
} else {
reject('Error occured');
}
}
};
Http.onerror = () => {
reject('Error occured');
};
const url = process.env.TOKEN_ENDPOINT_URL || ""
Http.open('GET', url)
Http.send()
})
}
const config = {
vaultID: process.env.VAULT_ID || "",
vaultURL: process.env.VAULT_URL || "",
getBearerToken: getBearerToken,
options: {
logLevel: LogLevel.DEBUG,
env: Env.PROD,
},
}
ReactDOM.createRoot(document.getElementById('root')).render(
<SkyflowElements config={config}>
<App />
</SkyflowElements>
)import React from 'react'
import { CardNumberElement, useCollectContainer } from 'skyflow-react-js'
export default function App() {
const container = useCollectContainer()
const handleSubmit = async () => {
try {
const res = await container.collect()
console.log(res)
} catch (err) {
console.error(err)
}
}
return (
<div>
<CardNumberElement
container={container}
table="cards"
column="cardNumber"
label="Card Number"
/>
<button onClick={handleSubmit}>Collect</button>
</div>
)
}đź§· To explore more working examples, refer to the Skyflow React sample here
npm run dev