Nostr WoT

Passkey e recupero

@nostr-wot/identity/vault offre vault portabili, dati di recupero cifrati e coordinamento tra gestori e relay per app web e native.

terminale
$npm install @nostr-wot/identity@1.0.0 nostr-tools

L’app crea l’account ed esegue la cerimonia nativa. Fornisci identificatore verificato, RP e valori PRF alle funzioni; l’SDK non apre finestre del browser né autorizza domini. Non salvare o registrare la risposta PRF.

typescript
import {
  createPasskeyRecord, openPasskeyRecord, parsePasskeyBackup,
  serializePasskeyBackup, sealPasskeyPayload, withPasskeyVaultKey,
  type VaultPayload, type PasskeyInput, type PasskeyProof,
} from "@nostr-wot/identity/vault";

export function protectAccount(payload: VaultPayload, enrollment: PasskeyInput) {
  const record = createPasskeyRecord(payload, enrollment);
  return { record, recoveryFile: serializePasskeyBackup(record) };
}

export async function readRecoveryFile(file: string, proof: PasskeyProof) {
  let record = parsePasskeyBackup(file);
  const opened = await openPasskeyRecord(record, proof);
  if (opened.cacheKeyMinted) {
    record = await withPasskeyVaultKey(record, proof, key =>
      sealPasskeyPayload(opened.payload, key, record),
    );
  }
  return { record, payload: opened.payload };
}

L’esempio cifra un account esistente e apre un file di recupero. Valida account e chiave pubblica attesa, applica la politica di sostituzione e salva atomicamente. Una nuova chiave cache deve essere ricifrata e salvata prima dell’uso. La classe Vault basata su password non apre record passkey v2.

Adattatori per gestori e relay

saveRecovery e restoreRecovery ricevono RecoveryProvider, RecoveryTransport e un verificatore di firme. Il salvataggio richiede anche la firma dell’autore. Riutilizza le connessioni, verifica la sessione durante le scritture e richiedi consenso per la pubblicazione. Configura gli stessi relay iniziali per registrazione e ripristino; l’SDK non fornisce liste nascoste.

API del pacchetto ed esempi