mirror of
https://github.com/tiennm99/agentic-inbox.git
synced 2026-05-24 12:25:11 +00:00
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
// Copyright (c) 2026 Cloudflare, Inc.
|
|
// Licensed under the Apache 2.0 license found in the LICENSE file or at:
|
|
// https://opensource.org/licenses/Apache-2.0
|
|
|
|
/**
|
|
* Hono middleware to handle repetitive Mailbox Durable Object instantiation.
|
|
* Checks if the mailbox exists in R2, then instantiates the DO stub
|
|
* and attaches it to the Hono context (`c.var.mailboxStub`).
|
|
*/
|
|
import { createMiddleware } from "hono/factory";
|
|
import type { MailboxDO } from "../durableObject";
|
|
import type { Env } from "../types";
|
|
|
|
export type MailboxContext = {
|
|
Bindings: Env;
|
|
Variables: {
|
|
mailboxStub: DurableObjectStub<MailboxDO>;
|
|
};
|
|
};
|
|
|
|
export const requireMailbox = createMiddleware<MailboxContext>(async (c, next) => {
|
|
const rawId = c.req.param("mailboxId");
|
|
if (!rawId) return c.json({ error: "Mailbox ID required" }, 400);
|
|
const mailboxId = decodeURIComponent(rawId);
|
|
|
|
// Verify mailbox exists
|
|
const key = `mailboxes/${mailboxId}.json`;
|
|
const obj = await c.env.BUCKET.head(key);
|
|
if (!obj) {
|
|
return c.json({ error: "Not found" }, 404);
|
|
}
|
|
|
|
// Instantiate DO stub
|
|
const ns = c.env.MAILBOX;
|
|
const id = ns.idFromName(mailboxId);
|
|
const stub = ns.get(id);
|
|
|
|
c.set("mailboxStub", stub);
|
|
|
|
await next();
|
|
});
|