import type { Hono } from 'hono'; import type { CryptoProvider } from '@shade/core'; import { createPrekeyRoutes } from './routes.js'; import { MemoryPrekeyStore } from './memory-store.js'; import type { PrekeyStore } from './store.js'; export { createPrekeyRoutes } from './routes.js'; export { MemoryPrekeyStore } from './memory-store.js'; export type { PrekeyStore } from './store.js'; export { verifyPayload, signPayload, canonicalizePayload, validateAddress } from './auth.js'; /** * Create a standalone Shade Prekey Server. * * Requires a CryptoProvider for signature verification on write routes. * * Standalone: * const crypto = new SubtleCryptoProvider(); * const server = createPrekeyServer({ crypto }); * export default { port: 3900, fetch: server.fetch }; * * Embedded in another Hono app: * const app = new Hono(); * app.route('/shade', createPrekeyServer({ crypto })); */ export function createPrekeyServer(options: { crypto: CryptoProvider; store?: PrekeyStore; disableRateLimit?: boolean; }): Hono { const store = options.store ?? new MemoryPrekeyStore(); return createPrekeyRoutes(store, options.crypto, { disableRateLimit: options.disableRateLimit }); } export { RateLimiter, MemoryRateLimitStore } from './rate-limit.js'; export type { RateLimitStore, RateLimitConfig } from './rate-limit.js';