hono-party
Version:
Use PartyServer with Hono
48 lines • 1.37 kB
JavaScript
// src/index.ts
import { env } from "hono/adapter";
import { createMiddleware } from "hono/factory";
import { routePartykitRequest } from "partyserver";
function partyserverMiddleware(ctx) {
return createMiddleware(async (c, next) => {
try {
const handler = isWebSocketUpgrade(c) ? handleWebSocketUpgrade : handleHttpRequest;
const response = await handler(c, ctx?.options);
return response === null ? await next() : response;
} catch (error) {
if (ctx?.onError) {
ctx.onError(error);
return next();
}
throw error;
}
});
}
function isWebSocketUpgrade(c) {
return c.req.header("upgrade")?.toLowerCase() === "websocket";
}
function createRequestFromContext(c) {
return new Request(c.req.url, {
method: c.req.method,
headers: c.req.header(),
body: c.req.raw.body
});
}
async function handleWebSocketUpgrade(c, options) {
const req = createRequestFromContext(c);
const response = await routePartykitRequest(req, env(c), options);
if (!response?.webSocket) {
return null;
}
return new Response(null, {
status: 101,
webSocket: response.webSocket
});
}
async function handleHttpRequest(c, options) {
const req = createRequestFromContext(c);
return routePartykitRequest(req, env(c), options);
}
export {
partyserverMiddleware
};
//# sourceMappingURL=index.js.map