A CLI for publishing standard.site documents to ATProto sequoia.pub
standard site lexicon cli publishing
at main 52 lines 1.0 kB view raw
1import { Hono } from "hono"; 2import { cors } from "hono/cors"; 3import { loadEnv } from "./env"; 4import type { Env } from "./env"; 5import { openDatabase } from "./lib/db"; 6import auth from "./routes/auth"; 7import subscribe from "./routes/subscribe"; 8 9const env = loadEnv(); 10 11const db = openDatabase(env.DATABASE_PATH); 12 13type Variables = { env: Env; db: typeof db }; 14 15const app = new Hono<{ Variables: Variables }>(); 16 17// Inject env and db into all routes 18app.use("*", async (c, next) => { 19 c.set("env", env); 20 c.set("db", db); 21 await next(); 22}); 23 24// Health check 25app.get("/api/health", (c) => c.json({ status: "ok" })); 26 27// OAuth routes 28app.route("/oauth", auth); 29 30// Subscribe routes with CORS 31app.use( 32 "/subscribe/*", 33 cors({ 34 origin: (origin) => origin, 35 credentials: true, 36 }), 37); 38app.use( 39 "/subscribe", 40 cors({ 41 origin: (origin) => origin, 42 credentials: true, 43 }), 44); 45app.route("/subscribe", subscribe); 46 47console.log(`Sequoia server listening on port ${env.PORT}`); 48 49export default { 50 port: env.PORT, 51 fetch: app.fetch, 52};