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'; import type { PrekeyServerEvents } from './events.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; events?: PrekeyServerEvents; }): Hono { const store = options.store ?? new MemoryPrekeyStore(); const routesOptions: Parameters[2] = {}; if (options.disableRateLimit !== undefined) { routesOptions.disableRateLimit = options.disableRateLimit; } if (options.events !== undefined) { routesOptions.events = options.events; } return createPrekeyRoutes(store, options.crypto, routesOptions); } export { RateLimiter, MemoryRateLimitStore } from './rate-limit.js'; export type { RateLimitStore, RateLimitConfig } from './rate-limit.js'; export { PrekeyServerEvents, shortHash as serverShortHash } from './events.js'; export type { PrekeyServerEvent, PrekeyServerEventName, PrekeyServerEventMap, PrekeyServerEventListener } from './events.js';