import { Application, Router } from "@oak/oak"; import { getNotes, getNotesByDid } from "./src/data/db.ts"; import { log } from "./src/log.ts"; const router = new Router(); const PAGINATION = 20; router.get("/", (ctx) => { ctx.response.body = "Hello world"; }); router.get("/notes", (ctx) => { const cursor = ctx.request.url.searchParams.get("cursor") ?? undefined; const limit = Number(ctx.request.url.searchParams.get("limit")) || PAGINATION; ctx.response.body = getNotes(cursor, limit); }); router.get("/:did/notes", (ctx) => { const { did } = ctx.params; const cursor = ctx.request.url.searchParams.get("cursor") ?? undefined; const limit = Number(ctx.request.url.searchParams.get("limit")) || PAGINATION; ctx.response.body = getNotesByDid(did, cursor, limit); }); // router.delete("/:did/:rkey", async (ctx) => { // const { did, rkey } = ctx.params; // let verifiedDid: string; // try { // verifiedDid = await authenticateRequest( // ctx.request.headers.get("Authorization"), // ); // } catch { // ctx.response.status = 401; // ctx.response.body = { error: "Unauthorized" }; // return; // } // if (verifiedDid !== did) { // ctx.response.status = 403; // ctx.response.body = { error: "You can only delete your own notes" }; // return; // } // deleteNote({ did, rkey }); // ctx.response.status = 204; // }) const app = new Application(); app.use(async (ctx, next) => { ctx.response.headers.set("Access-Control-Allow-Origin", "*"); ctx.response.headers.set( "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS", ); ctx.response.headers.set( "Access-Control-Allow-Headers", "Content-Type, Authorization", ); if (ctx.request.method === "OPTIONS") { ctx.response.status = 204; return; } await next(); }); app.use(router.routes()); app.use(router.allowedMethods()); log("[server] listening on port 8080"); app.listen({ port: 8080 });