@helia/verified-fetch
Version:
A fetch-like API for obtaining verified & trustless IPFS content on the web
36 lines • 1.76 kB
JavaScript
import { badGatewayResponse, gatewayTimeoutResponse, internalServerErrorResponse, notFoundResponse, preconditionFailedResponse } from './responses.js';
export function errorToResponse(resource, err) {
// if a signal abort caused the error, throw the error
if (err.name === 'AbortError') {
throw err;
}
// could not reach an upstream server, bad connection or offline
if (err.code === 'ECONNREFUSED' || err.code === 'ECANCELLED' || err.name === 'DNSQueryFailedError') {
return gatewayTimeoutResponse(resource.toString(), err);
}
// data was not parseable, user may be able to request raw block
if (['NotUnixFSError'].includes(err.name)) {
return badGatewayResponse(resource.toString(), err);
}
// an upstream server didn't respond in time but inside the signal timeout
if (err.code === 'ETIMEOUT' || err.name === 'TimeoutError') {
return gatewayTimeoutResponse(resource.toString(), err);
}
// path was not under DAG root
if (['ERR_NO_PROP', 'ERR_NO_TERMINAL_ELEMENT', 'ERR_NOT_FOUND'].includes(err.code)) {
return notFoundResponse(resource.toString());
}
// path was not under DAG root
if (['DoesNotExistError'].includes(err.name)) {
return notFoundResponse(resource.toString());
}
if (['BlockNotFoundWhileOfflineError'].includes(err.name)) {
return preconditionFailedResponse(resource.toString());
}
if (['RecordNotFoundError', 'LoadBlockFailedError'].includes(err.name)) {
return gatewayTimeoutResponse(resource.toString(), err);
}
// can't tell what went wrong, return a generic error
return internalServerErrorResponse(resource.toString(), err);
}
//# sourceMappingURL=error-to-response.js.map