datastore-s3 throws the wrong error when a file isn't found on s3
- Dominant language
- TypeScript
- Stars
- 38
- Forks
- 27
- PR merge metrics
- No merged PRs in 30d
Description
When using datastore-s3, calling `helia.pins.add` or `helia.pins.ls` fails with a "NoSuchKey" error
```
err: {
"type": "GetFailedError",
"message": "NoSuchKey: The specified key does not exist.",
```
If a file isn't found a "NotFoundError" is gracefully handled, but a GetFailedError throws. datastore-s3's "get" method currently throws a GetFailedError when a given file isn't found.
This is because the 404 status check doesn't line up with the response from s3 ([this line](https://github.com/ipfs/js-stores/blob/main/packages/datastore-s3/src/index.ts#L162))
Applied the following patch to fix:
```
diff --git a/dist/src/index.js b/dist/src/index.js
index 3dc550c3fa0abaf3c6c1fe7bb7ca4107c824ba3d..88f43d0939f9dbc754097723c0bcab15fdacae88 100644
--- a/dist/src/index.js
+++ b/dist/src/index.js
@@ -113,7 +113,7 @@ export class S3Datastore extends BaseDatastore {
return await toBuffer(data.Body);
}
catch (err) {
- if (err.statusCode === 404) {
+ if (err.statusCode === 404 || err.$metadata.httpStatusCode === 404 || String(err).includes('NoSuchKey')) {
throw new NotFoundError(String(err));
}
throw new GetFailedError(String(err));
```
[datastore-fs error handling for reference](https://github.com/ipfs/js-stores/blob/main/packages/datastore-fs/src/index.ts#L183)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.