NexeraID Identity SDK
- NexeraID Identity SDK, written in TypeScript.
How to install
npm install @nexeraid/identity-sdk
First steps
- You need to provide NexeraID Team with the Web App domain and a Webhook
- You need to provide NexeraID with the required rules
- NexeraID Team will provide to you with an API_KEY and a RULE_ID
How to use
Server app
const response = await fetch('https://api.nexera.id/kyc/auth/access-token', {
body: JSON.stringify({ address }),
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
method: 'POST'
})
const { accessToken } = await response.json()
const response = await fetch('https://api.nexera.id/compliance/rules/execute', {
body: JSON.stringify({
inputData: input.data,
address: input.address,
policyId: `${POLICY_ID}`,
}),
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
method: 'POST'
})
const validationResult = await response.json()
Web app
Initialize client
const IDENTITY_CLIENT = new IdentityClientV2({
env: "prod"
});
const IDENTITY_CLIENT = new IdentityClientV2();
IDENTITY_CLIENT.onSignMessage(async (data: string) => {
return await signMessageAsync({message: data})
})
IDENTITY_CLIENT.onSendTransaction(async (data) => {
return await walletClient?.sendTransaction({
account: data.accountAddress as Address,
to: data.to as Address,
data: data.data as Address,
value: data.value ? parseEther(data.value) : parseEther("0"),
});
});
const signingMessage = IdentityClientV2.buildSignatureMessage(address)
const signature = await signMessageAsync({message: signingMessage})
const accessToken = getAccessTokenFromYourServer(address)
await IDENTITY_CLIENT.init({
accessToken: kycAuth.accessToken,
signature: kycAuth.signature,
signingMessage: kycAuth.signingMessage,
})
On Chain Verification Integration
const isAllowed = await IDENTITY_CLIENT.isUserAllowedForEntrypoint(userAddress);
IDENTITY_CLIENT.onVerification((isAllowed) => {
setVerified(isAllowed);
});
Transaction Data Authorization Signature
This endpoint is used to retrieve a signature from the Nexera API in order to authorize a contract call gated with our Tx Auth Data Signature feature.
const txAuthInput = {
contractAbi: ExampleGatedNFTMinterABI,
contractAddress: ExampleGatedNFTMinterAddress_polygonAmoy,
functionName: "mintNFTGated",
args: [recipientAddress],
chainId,
blockExpiration,
nonce
};
const signatureResponse: GetTxAuthDataSignatureResponse = await IDENTITY_CLIENT.getTxAuthSignature(txAuthInput);
export const GetTxAuthDataSignatureResponse = z.object({
signature: Signature.optional(),
blockExpiration: z.number().optional(),
isAuthorized: z.boolean(),
});
export type GetTxAuthDataSignatureResponse = z.infer<
typeof GetTxAuthDataSignatureResponse
>;
Third party integrations
Make sure to run the init flow before this.
getStoredCredentials
const credentials = await IDENTITY_CLIENT.getStoredCredentials(
{ type: "getCredentials", data: undefined },
);
Note: the following functions follow the iden3comm standard https://0xpolygonid.github.io/tutorials/wallet/wallet-sdk/polygonid-sdk/iden3comm/overview/
auth handles AuthorizationRequestMessage
:
generates a zk-request for the given inputs and
automatically calls verify endpoint
with zk-proof generated with the wallet
import type { AuthorizationRequestMessage } from "@unblokttechnology/nexera-id-schemas";
const authRequest: AuthorizationRequestMessage = {...}
await IDENTITY_CLIENT.polygonIdRequest(
{ type: "auth", authRequest}
);
credentialRequest ZeroKnowledgeProofRequest
:
generates a zk-request for the given inputs
import type {ZKPRequest} from "@unblokttechnology/nexera-id-schemas";
const zkpRequest: ZKPRequest = {...}
await IDENTITY_CLIENT.polygonIdRequest(
{type: "zkp", zkpRequest: zkpRequest}
);
credentialOffer handles CredentialOffer object in string format:
adds a crdential to the polygon wallet (sent from a third party)
const authRequest:string="{...}"
await IDENTITY_CLIENT.polygonIdRequest(
{ type: "credentialOffer", credentialOfferRequest }
);
Display Verify/management iframe
Make sure to run the init flow before this
IDENTITY_CLIENT.startVerification();
IDENTITY_CLIENT.startManagement();