diff --git a/.changeset/late-pants-rescue.md b/.changeset/late-pants-rescue.md new file mode 100644 index 0000000..8cbcec2 --- /dev/null +++ b/.changeset/late-pants-rescue.md @@ -0,0 +1,5 @@ +--- +"nsite-ts": minor +--- + +Add support for custom 404.html pages diff --git a/src/index.ts b/src/index.ts index c3bbc30..3d25826 100644 --- a/src/index.ts +++ b/src/index.ts @@ -75,22 +75,23 @@ app.use(async (ctx, next) => { } if (pubkey) { + const npub = npubEncode(pubkey); ctx.state.pubkey = pubkey; let relays = await userRelays.get(pubkey); // fetch relays if not in cache if (!relays) { - console.log(`${pubkey}: Fetching relays`); + console.log(`${npub}: Fetching relays`); relays = await getUserOutboxes(pubkey); if (relays) { await userRelays.set(pubkey, relays); - console.log(`${pubkey}: Found ${relays.length} relays`); + console.log(`${npub}: Found ${relays.length} relays`); } else { relays = []; await userServers.set(pubkey, [], 30_000); - console.log(`${pubkey}: Failed to find relays`); + console.log(`${npub}: Failed to find relays`); } } @@ -98,11 +99,17 @@ app.use(async (ctx, next) => { if (relays.length === 0) throw new Error("No nostr relays"); - console.log(`${pubkey}: Searching for ${ctx.path}`); - const blobs = await getNsiteBlobs(pubkey, ctx.path, relays); + console.log(`${npub}: Searching for ${ctx.path}`); + let blobs = await getNsiteBlobs(pubkey, ctx.path, relays); if (blobs.length === 0) { - console.log(`${pubkey}: Found 0 events`); + // fallback to custom 404 page + console.log(`${npub}: Looking for custom 404 page`); + blobs = await getNsiteBlobs(pubkey, "/404.html", relays); + } + + if (blobs.length === 0) { + console.log(`${npub}: Found 0 events`); ctx.status = 404; ctx.body = "Not Found"; return; @@ -112,16 +119,16 @@ app.use(async (ctx, next) => { // fetch blossom servers if not in cache if (!servers) { - console.log(`${pubkey}: Fetching blossom servers`); + console.log(`${npub}: Fetching blossom servers`); servers = await getUserBlossomServers(pubkey, relays); if (servers) { await userServers.set(pubkey, servers); - console.log(`${pubkey}: Found ${servers.length} servers`); + console.log(`${npub}: Found ${servers.length} servers`); } else { servers = []; await userServers.set(pubkey, [], 30_000); - console.log(`${pubkey}: Failed to find servers`); + console.log(`${npub}: Failed to find servers`); } } diff --git a/src/screenshots.ts b/src/screenshots.ts index 48e64a8..3d73e31 100644 --- a/src/screenshots.ts +++ b/src/screenshots.ts @@ -2,6 +2,7 @@ import { nip19 } from "nostr-tools"; import puppeteer, { PuppeteerLaunchOptions } from "puppeteer"; import { join } from "path"; import pfs from "fs/promises"; +import { npubEncode } from "nostr-tools/nip19"; import { NSITE_PORT, SCREENSHOTS_DIR } from "./env.js"; @@ -23,7 +24,7 @@ export async function hasScreenshot(pubkey: string) { } export async function takeScreenshot(pubkey: string) { - console.log(`${pubkey}: Generating screenshot`); + console.log(`${npubEncode(pubkey)}: Generating screenshot`); const opts: PuppeteerLaunchOptions = { args: ["--no-sandbox"], @@ -41,6 +42,6 @@ export async function takeScreenshot(pubkey: string) { export async function removeScreenshot(pubkey: string) { try { await pfs.rm(getScreenshotPath(pubkey)); - console.log(`${pubkey}: Removed screenshot`); + console.log(`${npubEncode(pubkey)}: Removed screenshot`); } catch (error) {} }