Nostr WoT

Passkeys et récupération

@nostr-wot/identity/vault fournit des coffres portables, des données de récupération chiffrées et une orchestration fournisseur/relais pour les applications web et natives.

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

Votre application crée le compte et effectue la cérémonie native. Fournissez l’identifiant vérifié, le RP et les valeurs PRF aux fonctions ; le SDK n’ouvre pas de fenêtre navigateur et n’autorise aucun domaine. Ne stockez ni ne journalisez la sortie 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’exemple chiffre un compte existant et ouvre un fichier de récupération. Validez les comptes et la clé publique attendue, appliquez la politique de remplacement et enregistrez le coffre atomiquement. Une nouvelle clé de cache doit être rechiffrée et enregistrée avant utilisation. La classe Vault à mot de passe n’ouvre pas les coffres passkey v2.

Adaptateurs fournisseur et relais

saveRecovery et restoreRecovery reçoivent RecoveryProvider, RecoveryTransport et un vérificateur de signatures. L’enregistrement exige aussi la signature de l’auteur. Réutilisez vos connexions, contrôlez la session lors des écritures et demandez un accord explicite pour les relais. Configurez les mêmes relais de démarrage à l’inscription et à la restauration ; aucune liste cachée n’est fournie.

API du paquet et exemples