Skip to content

Commit e0cf588

Browse files
authored
throw specific error on decrypt if key not found (#16)
* throw specific error on decrypt key not found * let -> const * convertToError instead of throwing it directly * convert error checks to class member
1 parent 4f43bc2 commit e0cf588

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/Vault.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export class VaultRequestError extends VaultError {
4040
}
4141
}
4242

43+
export class VaultDecryptionKeyNotFoundError extends VaultRequestError {}
44+
4345
export interface VaultRequestOptions {
4446
retryWithTokenRenew?: boolean;
4547
acceptedReturnCodes?: number[];
@@ -172,12 +174,32 @@ export class Vault {
172174
body: res.body,
173175
};
174176
}
175-
throw new VaultRequestError(
177+
const tmpErr = new VaultRequestError(
176178
`Request to ${requestOptions.uri.toString()} failed (Status ${errorResponse.statusCode})`,
177179
errorResponse,
178180
);
181+
182+
throw this.convertToSpecificError(tmpErr);
179183
}
180184

181185
return res.body;
182186
}
187+
188+
private convertToSpecificError(error: VaultRequestError): VaultRequestError {
189+
if (this.checkError(error, 400, "encryption key not found")) {
190+
return new VaultDecryptionKeyNotFoundError(`DecryptionKeyNotFound: ${error.message}`, error.response);
191+
}
192+
return error;
193+
}
194+
195+
private checkError(error: VaultRequestError, expectedCode: number, expectedMsg: string): boolean {
196+
const { statusCode, body } = error.response;
197+
if (expectedCode !== statusCode) {
198+
return false;
199+
}
200+
201+
const errors = body?.errors ?? [];
202+
203+
return errors.some((e) => e.includes(expectedMsg));
204+
}
183205
}

tests/engines/transit.spec.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Vault } from "../../src";
1+
import { Vault, VaultDecryptionKeyNotFoundError } from "../../src";
22
import { TransitVaultClient } from "../../src";
33
import * as util from "util";
44

@@ -133,8 +133,7 @@ describe("Transit Vault Client", () => {
133133
try {
134134
await client.decryptText("unknownkey", encrypted);
135135
} catch (err) {
136-
testLogger(err.response.body.errors);
137-
expect(err.response.statusCode).toEqual(400);
136+
expect(err).toBeInstanceOf(VaultDecryptionKeyNotFoundError);
138137
}
139138
});
140139

@@ -153,8 +152,7 @@ describe("Transit Vault Client", () => {
153152
],
154153
});
155154
} catch (err) {
156-
testLogger(err.response.body.errors);
157-
expect(err.response.statusCode).toEqual(400);
155+
expect(err).toBeInstanceOf(VaultDecryptionKeyNotFoundError);
158156
}
159157
});
160158
});

0 commit comments

Comments
 (0)