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 console.log("Knot event listener connected to:", this.knotDomain);
15 resolve();
16 };
17 });
18 }
19
20 async handleMessage(event) {
21 const data = JSON.parse(event.data);
22 if (data.nsid === "sh.tangled.git.refUpdate") {
23 const event = {
24 details: {
25 ownerDid: data.event.repoDid,
26 repoName: data.event.repoName,
27 },
28 };
29 this.emit("refUpdate", event);
30 }
31 }
32}