···1+# fill in and rename to .env
2+# note these aren't secrets, just config
3+KNOT_DOMAIN = "knot.gracekind.net"
4+OWNER_DID = "did:plc:p572wxnsuoogcrhlfrlizlrb"
5+REPO_NAME = "static-site-example"
···1+import PagesService from "./pages-service.js";
2+import express from "express";
3+import dotenv from "dotenv";
4+5+dotenv.config();
6+7+const pagesService = new PagesService({
8+ domain: process.env.KNOT_DOMAIN,
9+ ownerDid: process.env.OWNER_DID,
10+ repoName: process.env.REPO_NAME,
11+ verbose: process.env.NODE_ENV === "development",
12+});
13+14+// preload to make sure there are no problems with the config
15+await pagesService.loadConfig();
16+17+const app = express();
18+19+app.get("/{*any}", async (req, res) => {
20+ const route = req.path;
21+ const { status, content, contentType } = await pagesService.getPage(route);
22+ res.status(status).set("Content-Type", contentType).send(content);
23+});
24+25+function main() {
26+ const server = app.listen(3000, () => {
27+ console.log("Server is running on port 3000");
28+ });
29+30+ server.on("error", (error) => {
31+ console.error("Server error:", error);
32+ });
33+}
34+35+main();
+30
src/worker.js
···000000000000000000000000000000
···1+import PagesService from "./pages-service.js";
2+3+let pagesService = null;
4+5+// idk how long cloudflare will keep this around.
6+// it would be better to save the config in a KV store
7+// but this is good enough for now
8+function getPagesService(env) {
9+ if (!pagesService) {
10+ pagesService = new PagesService({
11+ domain: env.KNOT_DOMAIN,
12+ ownerDid: env.OWNER_DID,
13+ repoName: env.REPO_NAME,
14+ verbose: env.NODE_ENV === "development",
15+ });
16+ }
17+ return pagesService;
18+}
19+20+export default {
21+ async fetch(request, env, ctx) {
22+ const route = new URL(request.url).pathname;
23+ const pagesService = getPagesService(env);
24+ const { status, content, contentType } = await pagesService.getPage(route);
25+ return new Response(content, {
26+ status,
27+ headers: { "Content-Type": contentType },
28+ });
29+ },
30+};