UNPKG

@paroicms/server

Version:
50 lines 1.79 kB
import { ApiError } from "@paroicms/public-server-lib"; import { platformLogger } from "../context.js"; import { getActiveSiteContext } from "../site-context/site-context.js"; export function createErrorConverterPlugin() { return { async requestDidStart(ctx) { return Promise.resolve({ async didEncounterErrors({ errors }) { const logger = getLogger(getFqdnFromGraphqlPluginContext(ctx)); for (const error of errors) { logger.error("GraphQL error:", error); const { originalError } = error; if (!(originalError instanceof ApiError)) return; error.extensions.code = statusToGraphqlErrorCode(originalError.status); } }, }); }, }; } function statusToGraphqlErrorCode(status) { switch (status) { case 404: return "NOT_FOUND"; case 500: return "INTERNAL_SERVER_ERROR"; case 400: return "BAD_REQUEST"; case 401: return "UNAUTHORIZED"; case 403: return "FORBIDDEN"; case 409: return "CONFLICT"; default: throw new Error(`Unknown graphql error status "${status}"`); } } function getLogger(fqdn) { const siteContext = fqdn ? getActiveSiteContext(fqdn, { returnsUndef: true }) : undefined; return siteContext ? siteContext.logger : platformLogger; } function getFqdnFromGraphqlPluginContext(ctx) { const hostname = ctx.request.http?.headers.get("host"); if (!hostname) return; return hostname.split(":")[0]; } //# sourceMappingURL=error-converter-plugin.js.map