1import { describe, it, expect } from "vitest";2import { newEvent, newKey, now, RELAY_URL, sockets } from "./helpers.ts";34const connect = sockets();56describe("NIP-42 AUTH", () => {7 it("refuses bad challenges, wrong relays, stale timestamps, wrong kinds; accepts several keys", async () => {8 const sk = newKey();9 const c = await connect();10 const bad = (tags: string[][], ts = now(), kind = 22242) => newEvent(sk, kind, "", tags, ts);11 let e = bad([["relay", RELAY_URL], ["challenge", "nope"]]);12 c.send("AUTH", e);13 expect(await c.expectOK(e.id, false)).toMatch(/challenge/);14 e = bad([["relay", "wss://elsewhere.example"], ["challenge", c.challenge]]);15 c.send("AUTH", e);16 expect(await c.expectOK(e.id, false)).toMatch(/relay/);17 e = bad([["relay", RELAY_URL], ["challenge", c.challenge]], now() - 3600);18 c.send("AUTH", e);19 expect(await c.expectOK(e.id, false)).toMatch(/time/);20 e = bad([["relay", RELAY_URL], ["challenge", c.challenge]], now(), 1);21 c.send("AUTH", e);22 await c.expectOK(e.id, false);23 // kind 22242 sent as a plain EVENT is never accepted.24 const asEvent = newEvent(sk, 22242, "", [["relay", RELAY_URL], ["challenge", c.challenge]]);25 c.send("EVENT", asEvent);26 expect(await c.expectOK(asEvent.id, false)).toMatch(/^(blocked|invalid):/);27 await c.auth(sk);28 await c.auth(newKey());29 });30});