Static site hosting via tangled
1import EventEmitter from "node:events";
2
3export class KnotEventListener extends EventEmitter {
4 constructor({ knotDomain }) {
5 super();
6 this.knotDomain = knotDomain;
7 }
8
9 async start() {
10 const ws = new WebSocket(`wss://${this.knotDomain}/events`);
11 ws.onmessage = (event) => this.handleMessage(event);
12 return new Promise((resolve) => {
13 ws.onopen = () => {
14 resolve();
15 };
16 });
17 }
18
19 async handleMessage(event) {
20 const data = JSON.parse(event.data);
21 if (data.nsid === "sh.tangled.git.refUpdate") {
22 const event = {
23 details: {
24 ownerDid: data.event.repoDid,
25 repoName: data.event.repoName,
26 },
27 };
28 this.emit("refUpdate", event);
29 }
30 }
31}