UNPKG

@fedify/h3

Version:

Integrate Fedify with h3

35 lines (34 loc) 1.3 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); let h3 = require("h3"); //#region src/index.ts /** * Integrates a `Federation` instance with an H3 handler. * @param federation * @param contextDataFactory * @returns */ function integrateFederation(federation, contextDataFactory) { return (0, h3.defineEventHandler)({ async handler(event) { const request = (0, h3.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 exports.integrateFederation = integrateFederation; exports.onError = onError;