anproto personal data server
1import { apds } from './apds.js'
2import { render } from './trender.js'
3
4await apds.start(Deno.args[0] || 'default')
5
6const sockets = new Set()
7
8const handle = async (ws) => {
9 ws.onopen = () => {
10 console.log('Connection opened')
11 }
12
13 ws.onmessage = async (m) => {
14 if (m.data.length === 44) {
15 setTimeout(async () => {
16 try { await render(m.data)} catch (err) { console.log(err)}
17 }, 100)
18 } else {
19 try {
20 await apds.make(m.data)
21 await apds.add(m.data)
22 } catch (err) { console.log(err)}
23 }
24 sockets.forEach(s => s.send(m.data))
25 }
26
27 ws.onclose = () => {
28 console.log('Connection closed')
29 }
30}
31
32Deno.serve(
33 {port: Deno.args[0] || 8080},
34 async (r) => {
35 try {
36 const { socket, response } = Deno.upgradeWebSocket(r)
37 await handle(socket)
38 sockets.add(socket)
39 return response
40 } catch (err) {}
41})