UNPKG

@fedify/h3

Version:

Integrate Fedify with h3

33 lines (32 loc) 1.2 kB
import { defineEventHandler, toWebRequest } from "h3"; //#region src/index.ts /** * Integrates a `Federation` instance with an H3 handler. * @param federation * @param contextDataFactory * @returns */ function integrateFederation(federation, contextDataFactory) { return defineEventHandler({ async handler(event) { const request = toWebRequest(event); const response = await federation.fetch(request, { contextData: await contextDataFactory(event, request) }); if (response.status === 404) return; if (response.status === 406) { event.context["__fedify_response__"] = response; return; } await event.respondWith(response); } }); } /** * An error handler that responds with a 406 Not Acceptable if Fedify * responded with a 406 Not Acceptable and the actual handler responded with * a 404 Not Found. * @param error The error that occurred. * @param event The event that triggered the handler. */ async function onError(error, event) { if ("__fedify_response__" in event.context && event.context["__fedify_response__"].status === 406 && error.statusCode === 404) await event.respondWith(event.context["__fedify_response__"]); } //#endregion export { integrateFederation, onError };