npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@canton-vc/adapter-didit

v0.3.0

Published

Didit KYC provider adapter for canton-vc. Wraps the Didit v3 sessions API (POST /v3/session/, GET /v3/session/{id}/decision/) and HMAC-SHA256 webhook signatures behind the vendor-agnostic KycProvider interface.

Readme

@canton-vc/adapter-didit

Reference KycProvider implementation for the Didit KYC vendor.

Install

pnpm add @canton-vc/adapter-didit @canton-vc/kyc-provider

Usage

import { DiditAdapter } from '@canton-vc/adapter-didit';

const kyc = new DiditAdapter({
  apiKey: process.env.DIDIT_API_KEY!,
  webhookSecret: process.env.DIDIT_WEBHOOK_SECRET!,
  kycWorkflowId: process.env.DIDIT_KYC_WORKFLOW_ID!,
  // optional:
  addressWorkflowId: process.env.DIDIT_ADDRESS_WORKFLOW_ID,
  callbackUrl: 'https://your-issuer.com/kyc/callback',
});

// 1. Start a session — redirect the user to session.redirectUrl
const session = await kyc.startSession({ userRef: 'user-123' });

// 2. Pull the decision after callback (or webhook fallback)
const decision = await kyc.fetchDecision(session.sessionId);
// decision.status === 'approved' | 'declined' | 'in_review' | 'pending' | 'expired'

// 3. Verify webhook (in your /webhook/didit handler)
const event = await kyc.verifyWebhook(rawBody, request.headers);
if (event === null) return new Response('invalid', { status: 400 });
// event.type === 'decision' | 'session.expired'

Webhook signature

Didit signs every webhook with HMAC-SHA256 over the canonical JSON of the body, sent in the X-Signature-V2 header. The adapter enforces the signature + a 5-minute drift window on X-Timestamp. Override the drift window via webhookDriftSeconds if your operator policy differs.

Configuration reference

| Field | Required | Default | Purpose | |---|---|---|---| | apiKey | ✅ | — | Didit API key. | | webhookSecret | ✅ | — | Signing secret for webhook HMACs. | | kycWorkflowId | ✅ | — | Workflow id for identity verification. | | addressWorkflowId | | — | Workflow id for proof-of-address sessions. | | callbackUrl | | — | URL Didit redirects the user back to. | | baseUrl | | https://verification.didit.me | API root (override for sandbox). | | webhookDriftSeconds | | 300 | Max allowed X-Timestamp drift. | | requestTimeoutMs | | 10000 | Per-request HTTP timeout. | | fetch | | globalThis.fetch | Override the fetch implementation. | | clock | | Date.now | Override the wall-clock source. |

Implementing another vendor

Look at this adapter, @canton-vc/adapter-sumsub, and the KycProvider interface in @canton-vc/kyc-provider. The two reference adapters cover the two common authentication patterns most KYC vendors use: token-auth with canonical-JSON HMAC (Didit), and per-request HMAC with raw-body digest (Sumsub). Pick whichever matches your target vendor and adapt from there. Open an issue with the vendor name to claim the next adapter.

License

Apache 2.0 — see LICENSE.