Simple, single-user event aggregation platform, for use in personal websites and other related places.
event-streaming single-user events event-aggregation
at develop 102 lines 2.5 kB view raw
1// ------------------------------------------------------------ 2// Imports & Initialization 3// ------------------------------------------------------------ 4 5import { Hono } from "hono"; 6import { Service } from "$lib/schemas/Service"; 7import { userAuth } from "$lib/middlewares/userAuth"; 8 9const app = new Hono(); 10 11// ------------------------------------------------------------ 12// Endpoints 13// ------------------------------------------------------------ 14 15app.get("/", userAuth, async (c) => { 16 const services = await Service.find(); 17 18 // Handle service not found 19 if (!services) { 20 return c.json({ message: "No services found" }, 404); 21 } 22 23 // Obfuscate sensitive information (token) 24 for (const service of services) { 25 service.token = "********"; 26 } 27 28 // Omit sensitive information (token) 29 return c.json(services); 30}); 31 32app.post("/", userAuth, async (c) => { 33 const { name, description } = await c.req.json(); 34 35 const token = crypto.getRandomValues(new Uint8Array(32)).toHex(); 36 console.log(token); 37 38 const service = await Service.create({ name, description, token }); 39 40 return c.json(service); 41}); 42 43app.patch("/:id", userAuth, async (c) => { 44 const id = c.req.param("id"); 45 const { name, description } = await c.req.json(); 46 47 const service = await Service.findById(id); 48 49 // Handle service not found 50 if (!service) { 51 return c.json({ message: "Service not found" }, 404); 52 } 53 54 service.name = name; 55 service.description = description; 56 57 await service.save(); 58 59 // Obfuscate sensitive information (token) 60 service.token = "******"; 61 62 return c.json(service); 63}); 64 65app.post("/:id/reset-token", userAuth, async (c) => { 66 const id = c.req.param("id"); 67 68 const service = await Service.findById(id); 69 70 // Handle service not found 71 if (!service) { 72 return c.json({ message: "Service not found" }, 404); 73 } 74 75 const token = crypto.getRandomValues(new Uint8Array(32)).toHex(); 76 service.token = token; 77 78 await service.save(); 79 80 return c.json(service); 81}); 82 83app.delete("/:id", userAuth, async (c) => { 84 const id = c.req.param("id"); 85 86 const service = await Service.findById(id); 87 88 // Handle service not found 89 if (!service) { 90 return c.json({ message: "Service not found" }, 404); 91 } 92 93 await service.deleteOne(); 94 95 return c.json({ message: "Service deleted" }); 96}); 97 98// ------------------------------------------------------------ 99// Exports 100// ------------------------------------------------------------ 101 102export default app;