Skip to main content

Start an OIDC Credential Provider flow

Discover OIDC credential offer


const discoverResult = await wallet.oidc.discover("openid://discovery?issuer=https://issuer.example.com");

if (discoverResult.isErr()) {
// Handle error from discoverResult.error
return;
}

const { offer } = discoverResult.value;

Create a local subject DID for the credential


const createDidResult = await wallet.did.createDid();

if (createDidResult.isErr()) {
// Handle error from createDidResult.error
return;
}

const { did } = createDidResult.value;

Generate an OpenID authorization url to request the credential


import { Linking } from "react-native";
const genUrlResult = await wallet.oidc.generateAuthorizeUrl({ offer, did });

if (genUrlResult.isErr()) {
// Handle error from genUrlResult.error
return;
}

const { url, codeVerifier, nonce } = genUrlResult.value;
await Linking.openURL(url);

Retrieve the credential on authorization success callback


const retrieveResult = (retrieveCredential = await wallet.oidc.retrieveCredential({
offer,
codeVerifier,
nonce,
code: route.params.code, // code comes from part of the callback url
}));

if (retrieveResult.isErr()) {
// Handle error from retrieveResult.error
return;
}

const { credential } = retrieveResult.value;

Verify a credential


const verifyResult = await wallet.credential.webSemantic.verifyCredential({ credential });

if (verifyResult.isErr()) {
// Handle error from verifyResult.error
return;
}

const { credentialVerified, status } = verifyResult.value;

Find the comprehensive SDK interfaces for these examples and others in the documentation https://github.com/mattrglobal/docs-wallet-sdk.

Get in touch if you wish to find out more about using the Wallet SDK in production.