@ledgerhq/ledger-key-ring-protocol 0.11.4 → 0.12.0-nightly.20260228025221
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/lib/HWDeviceProvider.js +1 -1
- package/lib/HWDeviceProvider.js.map +1 -1
- package/lib-es/HWDeviceProvider.js +1 -1
- package/lib-es/HWDeviceProvider.js.map +1 -1
- package/package.json +9 -9
- package/src/HWDeviceProvider.ts +1 -1
- package/src/__tests__/unit/HWDeviceProvider.test.ts +99 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @ledgerhq/live-wallet
|
|
2
2
|
|
|
3
|
+
## 0.12.0-nightly.20260228025221
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#14823](https://github.com/LedgerHQ/ledger-live/pull/14823) [`0dbbca3`](https://github.com/LedgerHQ/ledger-live/commit/0dbbca3f0226347b5abc034a066fe4ad89bfe462) Thanks [@thesan](https://github.com/thesan)! - Rename TRUSTCHAIN_WRONG_SEED to SW_BAD_STATE and add alt status message for 0xb007
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`0dbbca3`](https://github.com/LedgerHQ/ledger-live/commit/0dbbca3f0226347b5abc034a066fe4ad89bfe462), [`ec8a2d6`](https://github.com/LedgerHQ/ledger-live/commit/ec8a2d619b85117e2d74c595c6eae5cae6fda433), [`2ca4f6c`](https://github.com/LedgerHQ/ledger-live/commit/2ca4f6c337a29cd81874261c697d74c82a312eee), [`3bb5c2e`](https://github.com/LedgerHQ/ledger-live/commit/3bb5c2e335c05945b1a7bc8c77d19d0ea03156a6), [`b7dec5c`](https://github.com/LedgerHQ/ledger-live/commit/b7dec5c2a41520114593701c82192ff8ae8ce06f), [`5f1c644`](https://github.com/LedgerHQ/ledger-live/commit/5f1c644fd5f757f48618b62e976faac274ced40d)]:
|
|
12
|
+
- @ledgerhq/errors@6.30.0-nightly.20260228025221
|
|
13
|
+
- @ledgerhq/live-env@2.29.0-nightly.20260228025221
|
|
14
|
+
- @ledgerhq/live-network@2.3.0-nightly.20260228025221
|
|
15
|
+
- @ledgerhq/speculos-transport@0.5.5-nightly.20260228025221
|
|
16
|
+
- @ledgerhq/hw-transport@6.32.1-nightly.20260228025221
|
|
17
|
+
- @ledgerhq/hw-ledger-key-ring-protocol@0.7.4-nightly.20260228025221
|
|
18
|
+
- @ledgerhq/hw-transport-mocker@6.31.1-nightly.20260228025221
|
|
19
|
+
|
|
3
20
|
## 0.11.4
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
package/lib/HWDeviceProvider.js
CHANGED
|
@@ -50,7 +50,7 @@ class HWDeviceProvider {
|
|
|
50
50
|
case hw_transport_1.StatusCodes.USER_REFUSED_ON_DEVICE:
|
|
51
51
|
case hw_transport_1.StatusCodes.CONDITIONS_OF_USE_NOT_SATISFIED:
|
|
52
52
|
throw new errors_1.UserRefusedOnDevice();
|
|
53
|
-
case hw_transport_1.StatusCodes.
|
|
53
|
+
case hw_transport_1.StatusCodes.SW_BAD_STATE:
|
|
54
54
|
this.clearJwt();
|
|
55
55
|
throw new errors_2.TrustchainNotAllowed();
|
|
56
56
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HWDeviceProvider.js","sourceRoot":"","sources":["../src/HWDeviceProvider.ts"],"names":[],"mappings":";;;;;;AAAA,+BAA2C;AAC3C,6CAAuD;AAEvD,yDAA2E;AAC3E,uFAAuE;AACvE,gDAA2B;AAC3B,iCAAwC;AAExC,qCAAgD;AAEhD,MAAa,gBAAgB;IAC3B;;;;;;;;;;OAUG;IACK,UAAU,CAAa;IACvB,GAAG,CAAO;IACV,GAAG,CAA4B;IAEvC,YAAY,UAAkB,EAAE,UAAsB;QACpD,IAAI,CAAC,GAAG,GAAG,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAEM,OAAO,CACZ,QAAgB,EAChB,GAA6B,EAC7B,MAAwB,EACxB,SAAqC;QAErC,OAAO,IAAA,qBAAc,EACnB,GAAG,CAAC,EAAE;YACJ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC,EACD,IAAI,CAAC,GAAG,EACR,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC/C,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EACvC,MAAM,CACP,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,GAAmC,EACnC,SAAqC;QAErC,SAAS,EAAE,6BAA6B,EAAE,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,OAAO,MAAM,IAAA,oBAAa,EAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,oCAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,mCAAoB,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,CAAC;YACd,CAAC;YACD,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzB,KAAK,0BAAW,CAAC,sBAAsB,CAAC;gBACxC,KAAK,0BAAW,CAAC,+BAA+B;oBAC9C,MAAM,IAAI,4BAAmB,EAAE,CAAC;gBAElC,KAAK,0BAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"HWDeviceProvider.js","sourceRoot":"","sources":["../src/HWDeviceProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ export class HWDeviceProvider {
|
|
|
44
44
|
case StatusCodes.USER_REFUSED_ON_DEVICE:
|
|
45
45
|
case StatusCodes.CONDITIONS_OF_USE_NOT_SATISFIED:
|
|
46
46
|
throw new UserRefusedOnDevice();
|
|
47
|
-
case StatusCodes.
|
|
47
|
+
case StatusCodes.SW_BAD_STATE:
|
|
48
48
|
this.clearJwt();
|
|
49
49
|
throw new TrustchainNotAllowed();
|
|
50
50
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HWDeviceProvider.js","sourceRoot":"","sources":["../src/HWDeviceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,MAAM,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,OAAO,gBAAgB;IAC3B;;;;;;;;;;OAUG;IACK,UAAU,CAAa;IACvB,GAAG,CAAO;IACV,GAAG,CAA4B;IAEvC,YAAY,UAAkB,EAAE,UAAsB;QACpD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAEM,OAAO,CACZ,QAAgB,EAChB,GAA6B,EAC7B,MAAwB,EACxB,SAAqC;QAErC,OAAO,cAAc,CACnB,GAAG,CAAC,EAAE;YACJ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC,EACD,IAAI,CAAC,GAAG,EACR,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC/C,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EACvC,MAAM,CACP,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,GAAmC,EACnC,SAAqC;QAErC,SAAS,EAAE,6BAA6B,EAAE,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,oBAAoB,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,CAAC;YACd,CAAC;YACD,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzB,KAAK,WAAW,CAAC,sBAAsB,CAAC;gBACxC,KAAK,WAAW,CAAC,+BAA+B;oBAC9C,MAAM,IAAI,mBAAmB,EAAE,CAAC;gBAElC,KAAK,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"HWDeviceProvider.js","sourceRoot":"","sources":["../src/HWDeviceProvider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/ledger-key-ring-protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0-nightly.20260228025221",
|
|
4
4
|
"description": "Ledger Key Ring Protocol layer",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger"
|
|
@@ -57,14 +57,14 @@
|
|
|
57
57
|
"isomorphic-ws": "5.0.0",
|
|
58
58
|
"rxjs": "7.8.2",
|
|
59
59
|
"ws": "8.18.3",
|
|
60
|
-
"@ledgerhq/errors": "6.
|
|
61
|
-
"@ledgerhq/hw-transport": "6.32.
|
|
62
|
-
"@ledgerhq/hw-transport-mocker": "6.31.
|
|
63
|
-
"@ledgerhq/hw-ledger-key-ring-protocol": "0.7.
|
|
64
|
-
"@ledgerhq/live-env": "2.
|
|
65
|
-
"@ledgerhq/live-network": "2.
|
|
60
|
+
"@ledgerhq/errors": "6.30.0-nightly.20260228025221",
|
|
61
|
+
"@ledgerhq/hw-transport": "6.32.1-nightly.20260228025221",
|
|
62
|
+
"@ledgerhq/hw-transport-mocker": "6.31.1-nightly.20260228025221",
|
|
63
|
+
"@ledgerhq/hw-ledger-key-ring-protocol": "0.7.4-nightly.20260228025221",
|
|
64
|
+
"@ledgerhq/live-env": "2.29.0-nightly.20260228025221",
|
|
65
|
+
"@ledgerhq/live-network": "2.3.0-nightly.20260228025221",
|
|
66
66
|
"@ledgerhq/logs": "6.14.0",
|
|
67
|
-
"@ledgerhq/speculos-transport": "0.5.
|
|
67
|
+
"@ledgerhq/speculos-transport": "0.5.5-nightly.20260228025221",
|
|
68
68
|
"@ledgerhq/types-devices": "^6.28.0"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"jest": "30.2.0",
|
|
75
75
|
"msw": "^2.7.3",
|
|
76
76
|
"@swc/jest": "0.2.39",
|
|
77
|
-
"@swc/core": "1.15.
|
|
77
|
+
"@swc/core": "1.15.11",
|
|
78
78
|
"ts-node": "^10.9.2"
|
|
79
79
|
},
|
|
80
80
|
"scripts": {
|
package/src/HWDeviceProvider.ts
CHANGED
|
@@ -65,7 +65,7 @@ export class HWDeviceProvider {
|
|
|
65
65
|
case StatusCodes.CONDITIONS_OF_USE_NOT_SATISFIED:
|
|
66
66
|
throw new UserRefusedOnDevice();
|
|
67
67
|
|
|
68
|
-
case StatusCodes.
|
|
68
|
+
case StatusCodes.SW_BAD_STATE:
|
|
69
69
|
this.clearJwt();
|
|
70
70
|
throw new TrustchainNotAllowed();
|
|
71
71
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { of, throwError } from "rxjs";
|
|
2
|
+
import { UserRefusedOnDevice } from "@ledgerhq/errors";
|
|
3
|
+
import { StatusCodes, TransportStatusError } from "@ledgerhq/hw-transport";
|
|
4
|
+
import { HWDeviceProvider } from "../../HWDeviceProvider";
|
|
5
|
+
import { TrustchainNotAllowed } from "../../errors";
|
|
6
|
+
import { WithDevice } from "../../types";
|
|
7
|
+
|
|
8
|
+
jest.mock("@ledgerhq/hw-ledger-key-ring-protocol", () => ({
|
|
9
|
+
crypto: {},
|
|
10
|
+
device: { apdu: jest.fn() },
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
function failingWithDevice<Err extends Error>(error: Err): WithDevice {
|
|
14
|
+
return (_device: string) => () => throwError(() => error);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function successWithDevice(value: unknown): WithDevice {
|
|
18
|
+
return (_device: string) =>
|
|
19
|
+
<T>() =>
|
|
20
|
+
of(value as T);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe("HWDeviceProvider.withHw", () => {
|
|
24
|
+
const apiBaseURL = "https://test.api";
|
|
25
|
+
const callbacks = {
|
|
26
|
+
onStartRequestUserInteraction: jest.fn(),
|
|
27
|
+
onEndRequestUserInteraction: jest.fn(),
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
jest.clearAllMocks();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("resolves with the job result on success", async () => {
|
|
35
|
+
const withDevice = successWithDevice("ok");
|
|
36
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
37
|
+
const result = await provider.withHw("device-1", async () => "ok", callbacks);
|
|
38
|
+
expect(result).toBe("ok");
|
|
39
|
+
expect(callbacks.onStartRequestUserInteraction).toHaveBeenCalledTimes(1);
|
|
40
|
+
expect(callbacks.onEndRequestUserInteraction).toHaveBeenCalledTimes(1);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("calls onEndRequestUserInteraction even on error", async () => {
|
|
44
|
+
const withDevice = failingWithDevice(new TransportStatusError(StatusCodes.SW_BAD_STATE));
|
|
45
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
46
|
+
await expect(provider.withHw("device-1", async () => "ok", callbacks)).rejects.toThrow();
|
|
47
|
+
expect(callbacks.onStartRequestUserInteraction).toHaveBeenCalledTimes(1);
|
|
48
|
+
expect(callbacks.onEndRequestUserInteraction).toHaveBeenCalledTimes(1);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("throws UserRefusedOnDevice on USER_REFUSED_ON_DEVICE (0x5501)", async () => {
|
|
52
|
+
const withDevice = failingWithDevice(
|
|
53
|
+
new TransportStatusError(StatusCodes.USER_REFUSED_ON_DEVICE),
|
|
54
|
+
);
|
|
55
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
56
|
+
await expect(provider.withHw("device-1", async () => "ok")).rejects.toThrow(
|
|
57
|
+
UserRefusedOnDevice,
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("throws UserRefusedOnDevice on CONDITIONS_OF_USE_NOT_SATISFIED (0x6985)", async () => {
|
|
62
|
+
const withDevice = failingWithDevice(
|
|
63
|
+
new TransportStatusError(StatusCodes.CONDITIONS_OF_USE_NOT_SATISFIED),
|
|
64
|
+
);
|
|
65
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
66
|
+
await expect(provider.withHw("device-1", async () => "ok")).rejects.toThrow(
|
|
67
|
+
UserRefusedOnDevice,
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("throws TrustchainNotAllowed and clears JWT on SW_BAD_STATE (0xB007)", async () => {
|
|
72
|
+
const withDevice = failingWithDevice(new TransportStatusError(StatusCodes.SW_BAD_STATE));
|
|
73
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
74
|
+
const clearJwtSpy = jest.spyOn(provider, "clearJwt");
|
|
75
|
+
await expect(provider.withHw("device-1", async () => "ok")).rejects.toThrow(
|
|
76
|
+
TrustchainNotAllowed,
|
|
77
|
+
);
|
|
78
|
+
expect(clearJwtSpy).toHaveBeenCalledTimes(1);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("rethrows TransportStatusError for unknown status codes", async () => {
|
|
82
|
+
const withDevice = failingWithDevice(new TransportStatusError(StatusCodes.INCORRECT_DATA));
|
|
83
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
84
|
+
await expect(provider.withHw("device-1", async () => "ok")).rejects.toThrow(
|
|
85
|
+
TransportStatusError,
|
|
86
|
+
);
|
|
87
|
+
await expect(provider.withHw("device-1", async () => "ok")).rejects.toMatchObject({
|
|
88
|
+
statusCode: StatusCodes.INCORRECT_DATA,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("rethrows non-TransportStatusError errors as-is", async () => {
|
|
93
|
+
const withDevice = failingWithDevice(new Error("transport disconnected"));
|
|
94
|
+
const provider = new HWDeviceProvider(apiBaseURL, withDevice);
|
|
95
|
+
await expect(provider.withHw("device-1", async () => "ok")).rejects.toThrow(
|
|
96
|
+
"transport disconnected",
|
|
97
|
+
);
|
|
98
|
+
});
|
|
99
|
+
});
|