@fedify/h3
Version:
Integrate Fedify with h3
35 lines (34 loc) • 1.3 kB
JavaScript
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;