// server/crypto/apiTokens.test.ts import { describe, expect, it } from "vitest"; import { generateApiToken, hashApiToken, tokenPrefix, verifyApiToken } from "./apiTokens.js"; const PEPPER = "b".repeat(64); describe("apiTokens", () => { it("génère un token préfixé non trivial", () => { const token = generateApiToken(); expect(token).toMatch(/^su_[A-Za-z0-9_-]{40,}$/); }); it("calcule un préfixe court affichable", () => { expect(tokenPrefix("su_abcdefghijklmnopqrstuvwxyz")).toBe("su_abcdefghi"); }); it("vérifie un token par HMAC sans stocker le token brut", () => { const token = "su_test_token"; const hash = hashApiToken(token, PEPPER); expect(hash).not.toContain(token); expect(verifyApiToken(token, hash, PEPPER)).toBe(true); expect(verifyApiToken("su_other_token", hash, PEPPER)).toBe(false); }); });