From 58248aa02ebfe65f5e0e853f3dca66f60c95eacf Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Tue, 19 Nov 2024 11:03:50 -0300 Subject: [PATCH 1/4] feat: add argument to handle custom description errors on errorCodeToString (#61) * fix: add missing dev dep * feat: add argument to handle custom description errors * feat: add tests --- bun.lockb | Bin 226614 -> 230284 bytes package.json | 1 + src/common.test.ts | 14 +++++++++++++- src/consts.ts | 2 ++ src/errors.ts | 11 ++++++++--- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index 6762f2a2046db2c3d2b6095166ac8b58c6ab730f..0b513642898c4a8c7b0ee79d3b6622a574a7a991 100755 GIT binary patch delta 48970 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

1&0*)HkQH(3Qj2S50b)61!olmG_h95%Gkd% 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 delta 45824 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 diff --git a/package.json b/package.json index 261f2dd..388098a 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "eslint-plugin-tsdoc": "^0.3.0", "eslint-plugin-unused-imports": "^4.0.0", "prettier": "^3.3.2", + "sort-package-json": "^2.10.1", "ts-jest": "^29.1.4", "ts-node": "^10.9.2", "typescript": "^5.4.5" diff --git a/src/common.test.ts b/src/common.test.ts index 450469e..96359d3 100644 --- a/src/common.test.ts +++ b/src/common.test.ts @@ -14,7 +14,7 @@ * limitations under the License. *****************************************************************************/ import { processErrorResponse } from './common' -import { LedgerError } from './consts' +import { LedgerCustomError, LedgerError } from './consts' import { errorCodeToString } from './errors' import { ResponseError } from './responseError' @@ -25,6 +25,18 @@ describe('errorCodeToString', () => { expect(errorCodeToString(knownErrorCode)).toEqual(expectedMessage) }) + it('should return the correct error message for a custom error code', () => { + const knownErrorCode: LedgerCustomError = 0xabcd + const expectedMessage = 'test custom error' + expect(errorCodeToString(knownErrorCode, { 0xabcd: expectedMessage })).toEqual(expectedMessage) + }) + + it('should return the correct error message for a known error code, when a custom error list is passed', () => { + const knownErrorCode: LedgerError = 0x9000 + const expectedMessage = 'No errors' + expect(errorCodeToString(knownErrorCode, { [knownErrorCode]: 'Custom no errors' })).toEqual(expectedMessage) + }) + it('should return "Unknown Return Code" for an unknown error code', () => { const unknownErrorCode: LedgerError = 0x9999 as LedgerError const expectedMessage = 'Unknown Return Code: 0x9999' diff --git a/src/consts.ts b/src/consts.ts index 5ca8a1f..f765378 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -25,6 +25,8 @@ export const PAYLOAD_TYPE: Readonly> = { LAST: 0x02, } +export type LedgerCustomError = number + // Ledger error codes and descriptions sorted by value export enum LedgerError { U2FUnknown = 1, diff --git a/src/errors.ts b/src/errors.ts index 6511c8e..f4c0a2c 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -13,20 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. *****************************************************************************/ -import { ERROR_DESCRIPTION_OVERRIDE, LedgerError } from './consts' +import { ERROR_DESCRIPTION_OVERRIDE, LedgerCustomError, LedgerError } from './consts' /** * Converts a Ledger error code to a human-readable string. * * @param returnCode - The Ledger error code to convert. + * @param customErrorList - Custom error description list to convert error code with. * @returns A string describing the error code. */ -export function errorCodeToString(returnCode: LedgerError): string { +export function errorCodeToString(returnCode: LedgerError, customErrorList?: Record): string { const returnCodeStr = returnCode.toString(16).toUpperCase() let errDescription = `Unknown Return Code: 0x${returnCodeStr}` if (returnCode in ERROR_DESCRIPTION_OVERRIDE) { - errDescription = ERROR_DESCRIPTION_OVERRIDE[returnCode] + return ERROR_DESCRIPTION_OVERRIDE[returnCode] + } + + if (customErrorList && returnCode in customErrorList) { + return customErrorList[returnCode] } return errDescription From a4bf4b1d230d4492027108baa3eb2b25b915b57f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:04:02 -0300 Subject: [PATCH 2/4] Bump @typescript-eslint/parser from 7.18.0 to 8.14.0 (#60) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.18.0 to 8.14.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.14.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 388098a..1e95514 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@types/jest": "29.5.12", "@types/node": "^22.4.1", "@typescript-eslint/eslint-plugin": "^8.1.0", - "@typescript-eslint/parser": "^7.13.0", + "@typescript-eslint/parser": "^8.14.0", "eslint": "^9.4.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard-with-typescript": "^43.0.1", From 1d063de736f76ec42f878a630c1dcbfe5e9dfa51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:04:25 -0300 Subject: [PATCH 3/4] Bump @types/jest from 29.5.12 to 29.5.14 (#56) Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.12 to 29.5.14. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e95514..23e356a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "devDependencies": { "@ledgerhq/hw-transport-mocker": "^6.28.6", "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "@types/jest": "29.5.12", + "@types/jest": "29.5.14", "@types/node": "^22.4.1", "@typescript-eslint/eslint-plugin": "^8.1.0", "@typescript-eslint/parser": "^8.14.0", From 68dd8071a4bd4ea2ad08395379308e40c7ce53cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:04:35 -0300 Subject: [PATCH 4/4] Bump @ledgerhq/hw-transport from 6.31.2 to 6.31.4 (#49) Bumps [@ledgerhq/hw-transport](https://github.com/LedgerHQ/ledger-live) from 6.31.2 to 6.31.4. - [Release notes](https://github.com/LedgerHQ/ledger-live/releases) - [Commits](https://github.com/LedgerHQ/ledger-live/compare/@ledgerhq/hw-transport@6.31.2...@ledgerhq/hw-transport@6.31.4) --- updated-dependencies: - dependency-name: "@ledgerhq/hw-transport" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 23e356a..dab180d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "upgrade": "bunx npm-check-updates -i" }, "dependencies": { - "@ledgerhq/hw-transport": "6.31.2" + "@ledgerhq/hw-transport": "6.31.4" }, "devDependencies": { "@ledgerhq/hw-transport-mocker": "^6.28.6",