Nostr WoT

Passkeys und Wiederherstellung

@nostr-wot/identity/vault bietet portable Tresore, verschlüsselte Wiederherstellungsdaten und Anbieter-/Relay-Abläufe für Web- und native Apps.

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

Deine App erstellt das Konto und führt den nativen Passkey-Vorgang aus. Übergib geprüfte Kennung, RP und PRF-Werte an die Funktionen; das SDK öffnet keinen Browserdialog und autorisiert keine Domain. Speichere oder protokolliere die PRF-Ausgabe niemals.

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 };
}

Das Beispiel verschlüsselt ein vorhandenes Konto und öffnet eine Wiederherstellungsdatei. Prüfe Konten und erwarteten öffentlichen Schlüssel, beachte die Ersetzungsrichtlinie und speichere atomar. Ein neu erzeugter Cache-Schlüssel muss vor Nutzung erneut verschlüsselt und gespeichert werden. Die passwortbasierte Vault-Klasse öffnet keine v2-Passkey-Tresore.

Anbieter- und Relay-Adapter

saveRecovery und restoreRecovery erhalten RecoveryProvider, RecoveryTransport und einen Signaturprüfer. Speichern benötigt außerdem die Signaturfunktion des Autors. Nutze vorhandene Verbindungen, prüfe die Sitzung bei Schreibvorgängen und verlange Zustimmung zur Veröffentlichung. Verwende dieselben Bootstrap-Relays für Registrierung und Wiederherstellung; das SDK liefert keine versteckte Liste.

Paket-API und Beispiele