Files
claude-status-webhook/src/index.js
tiennm99 877a75b053 fix: normalize double slashes in URL path for webhook routing
Statuspage deactivated our webhook because requests to
//webhook/status/<secret> returned 404 — Hono requires exact path
matches. Added middleware that rewrites consecutive slashes before
routing, preserving POST body via internal re-dispatch.
2026-04-09 08:41:32 +07:00

31 lines
1.1 KiB
JavaScript

import { Hono } from "hono";
import { handleTelegramWebhook } from "./bot-commands.js";
import { handleStatuspageWebhook } from "./statuspage-webhook.js";
import { handleQueue } from "./queue-consumer.js";
import { setupBot } from "./bot-setup.js";
const app = new Hono();
// Normalize double slashes in URL path (e.g. //webhook/... → /webhook/...)
// Statuspage may send webhooks with double slashes; rewrite path so routes match.
app.use("*", async (c, next) => {
const url = new URL(c.req.url);
const normalized = url.pathname.replace(/\/\/+/g, "/");
if (normalized !== url.pathname) {
url.pathname = normalized;
const newReq = new Request(url.toString(), c.req.raw);
return app.fetch(newReq, c.env, c.executionCtx);
}
return next();
});
app.get("/", (c) => c.text("Claude Status Bot is running"));
app.get("/webhook/setup/:secret", (c) => setupBot(c));
app.post("/webhook/telegram", (c) => handleTelegramWebhook(c));
app.post("/webhook/status/:secret", (c) => handleStatuspageWebhook(c));
export default {
fetch: app.fetch,
queue: handleQueue,
};