Simple, single-user event aggregation platform, for use in personal websites and other related places.
event-streaming
single-user
events
event-aggregation
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;