ipfs / ipfs/js-stores

datastore-s3 throws the wrong error when a file isn't found on s3

Open
#331 1 comment 0 reactions 0 assignees View on GitHub
need/triage
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.