Creating a Verification Endpoint

What We Are Doing:

  • Adding an endpoint (e.g., /kyc-authorize) to request a verification QR code from the Verifier.

  • Displaying the verification QR code in the frontend.

  • Using SSE (Server-Sent Events) to receive real-time verification updates.

Why: To trigger the verification process, we need an endpoint that asks the Verifier for a QR code and returns it to the frontend. The user scans it with the DID Wallet, and if verified, the user gets redirected to a protected resource.

Steps: Add to src/routes.ts:

const BASE_URL = process.env.BASE_URL!;
const VERIFIER_CLIENT_SECRET = process.env.VERIFIER_CLIENT_SECRET!;

router.post('/kyc-authorize', async (req: Request, res: Response) => {
    try {
        const response = await fetch(`${BASE_URL}/api/verifier/kyc/v1/authorize-qr-code`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'x-client-secret': VERIFIER_CLIENT_SECRET,
            },
        });
        const data = await response.json();
        res.status(200).json(data);
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Internal server error' });
    }
});

In public/index.html, add a button to start verification:

<button id="kyc-authorize-btn">Authorize with KYC Credential</button>
<script>
  const authorizeBtn = document.getElementById('kyc-authorize-btn');
  authorizeBtn.addEventListener('click', async () => {
    const res = await fetch('/kyc-authorize', { method: 'POST' });
    const data = await res.json();

    const qrRes = await fetch(data.qr_code_url);
    const qrCodeData = await qrRes.json();

    const qrcodeImg = document.getElementById('qrcode');
    qrcodeImg.src = qrCodeData;
    qrcodeImg.style.display = 'block';

    const eventSource = new EventSource(`${window.location.origin}/api/verifier/kyc/v1/connection/${data.state}`);
    eventSource.onmessage = (event) => {
      const result = JSON.parse(event.data);
      if (result.access_token) {
        localStorage.setItem("access_token", result.access_token);
        window.location.href = result.redirect_url;
      }
      eventSource.close();
    };
  });
</script>

With this in place, clicking "Authorize with KYC Credential" initiates the verification flow.

Last updated