import { NescioClient } from "@nescio/sdk";
const nescio = new NescioClient({ apiKey: process.env.NESCIO_API_KEY });
// 1 · start a verification for a player
const s = await nescio.createVerificationSession();
// → render s.client (a QR) to the player
// 2 · once verified, you get a game-scoped id — no PII
const { subjectId, claims } =
await nescio.getVerificationSession(s.sessionId);
// same human → same subjectId (Sybil-proof),
// unlinkable to any other game you don't control.
claims; // { verified_human, over_18, issuing_country }
🤖
👥
🔁
🪪
1
2
3
// gate ranked play on a verified, unique human
const { status, subjectId, claims } =
await nescio.getVerificationSession(sessionId);
if (status === "verified" && claims.over_18) {
if (bans.has(subjectId)) return deny("banned");
ranked.admit(subjectId); // one human, one seat
}
// subjectId is stable for this player, in THIS game only.
// no name · no email · no document · nothing to breach.