import type { TestProject } from 'vitest/node' import { KVStorageHttpServer } from '../../src/kv-storage/kv-storage-http-server.js' import { KVStorageInMemory } from '../../src/kv-storage/kv-storage-in-memory.js' import { Ed25519Verifier } from '../../src/utils/request-auth.js' import { serve } from '../kv-storage/node-server.js' declare module 'vitest' { interface ProvidedContext { /** Base URL of the test server. `/open/` and `/signed/` are fresh, isolated stores. */ serverUrl: string } } /** A real HTTP server on another origin than the test page, with one store per `//`. */ export default async function setup(project: TestProject): Promise<() => Promise> { const spaces = new Map() const server = await serve(async (request) => { const [, auth, space] = new URL(request.url).pathname.split('/') const basePath = `/${auth}/${space}` let handler = spaces.get(basePath) if (!handler) { handler = new KVStorageHttpServer(new KVStorageInMemory(), { auth: auth === 'signed' ? { verifiers: [new Ed25519Verifier()] } : 'none', basePath, allowOrigins: '*', }) spaces.set(basePath, handler) } return handler.handle(request) }) project.provide('serverUrl', server.url) return server.close }