@fedify/h3
Version:
Integrate Fedify with h3
33 lines (32 loc) • 1.2 kB
JavaScript
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 };