@ledgerhq/ledger-key-ring-protocol 0.7.1-nightly.20251113102200 → 0.8.0-nightly.20251115023630
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 +9 -5
- package/lib/api.d.ts +1 -1
- package/lib/api.d.ts.map +1 -1
- package/lib/auth.d.ts.map +1 -1
- package/lib/auth.js +17 -2
- package/lib/auth.js.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/types.d.ts.map +1 -1
- package/lib-es/api.d.ts +1 -1
- package/lib-es/api.d.ts.map +1 -1
- package/lib-es/auth.d.ts.map +1 -1
- package/lib-es/auth.js +17 -2
- package/lib-es/auth.js.map +1 -1
- package/lib-es/types.d.ts +1 -1
- package/lib-es/types.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/__tests__/unit/sdk.test.ts +43 -0
- package/src/api.ts +1 -1
- package/src/auth.ts +25 -3
- package/src/types.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
# @ledgerhq/live-wallet
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.8.0-nightly.20251115023630
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#12796](https://github.com/LedgerHQ/ledger-live/pull/12796) [`53deeef`](https://github.com/LedgerHQ/ledger-live/commit/53deeef592b7d566b4e7a636fa34d7ad59dd43ad) Thanks [@thesan](https://github.com/thesan)! - recover from 4xx somehow caused by problematic JWTs
|
|
4
8
|
|
|
5
9
|
### Patch Changes
|
|
6
10
|
|
|
7
11
|
- Updated dependencies [[`c40e9da`](https://github.com/LedgerHQ/ledger-live/commit/c40e9da68452fe9827b9435ff2d162291186be73)]:
|
|
8
|
-
- @ledgerhq/live-env@2.21.0-nightly.
|
|
9
|
-
- @ledgerhq/hw-ledger-key-ring-protocol@0.5.4-nightly.
|
|
10
|
-
- @ledgerhq/live-network@2.1.1-nightly.
|
|
11
|
-
- @ledgerhq/speculos-transport@0.2.15-nightly.
|
|
12
|
+
- @ledgerhq/live-env@2.21.0-nightly.20251115023630
|
|
13
|
+
- @ledgerhq/hw-ledger-key-ring-protocol@0.5.4-nightly.20251115023630
|
|
14
|
+
- @ledgerhq/live-network@2.1.1-nightly.20251115023630
|
|
15
|
+
- @ledgerhq/speculos-transport@0.2.15-nightly.20251115023630
|
|
12
16
|
|
|
13
17
|
## 0.7.0
|
|
14
18
|
|
package/lib/api.d.ts
CHANGED
package/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE;QACF,UAAU,EAAE;YACV,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,MAAM,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,eAAe,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,YAAY,EAAE,MAAM,GAAG;QACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,MAAM,eAAgB,MAAM;sCACa,QAAQ;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;qCAQxC;QAC5C,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,kBAAkB,CAAC;KAC/B,KAAG,QAAQ,GAAG,CAAC;uBAYgB,GAAG,KAAG,QAAQ,GAAG,CAAC;0BAcf,GAAG,KAAG,QAAQ,mBAAmB,CAAC;yBAWnC,GAAG,iBAAiB,MAAM,KAAG,QAAQ,kBAAkB,CAAC;0BAYnF,GAAG,iBACO,MAAM,iBACN,MAAM,KACpB,QAAQ,IAAI,CAAC;oBAYa,GAAG,iBAAiB,MAAM,KAAG,QAAQ,IAAI,CAAC;uBAahE,GAAG,iBACO,MAAM,WACZ,kBAAkB,KAC1B,QAAQ,IAAI,CAAC;4BAWqB,GAAG,iBAAiB,MAAM,KAAG,QAAQ,IAAI,CAAC;uBAUjD,QAAQ,iBAAiB,CAAC;CAoBzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG/C,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7B,UAAU,EAAE,GAAG,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACxB,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,MAAM,GAAE,eAAyB,GAChC,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG/C,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7B,UAAU,EAAE,GAAG,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACxB,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,MAAM,GAAE,eAAyB,GAChC,OAAO,CAAC,CAAC,CAAC,CAuDZ"}
|
package/lib/auth.js
CHANGED
|
@@ -29,7 +29,7 @@ async function genericWithJWT(job, initialJWT, auth, refreshAuth, policy = "cach
|
|
|
29
29
|
: initialJWT;
|
|
30
30
|
return job(jwt).catch(async (e) => {
|
|
31
31
|
// JWT expiration handling: if the function fails, we will recover a valid jwt accordingly to spec. https://ledgerhq.atlassian.net/wiki/spaces/BE/pages/4207083687/TCH+Usage+documentation#JWT-expiration-handling
|
|
32
|
-
const { hasExpired, canBeRefreshed, isNotPermitted, isTrustchainOutdated } = networkCheckJwtExpiration(e);
|
|
32
|
+
const { hasExpired, canBeRefreshed, isNotPermitted, isTrustchainOutdated, isUncaughtClientError, } = networkCheckJwtExpiration(e);
|
|
33
33
|
if (isNotPermitted) {
|
|
34
34
|
throw new errors_2.TrustchainNotAllowed();
|
|
35
35
|
}
|
|
@@ -41,6 +41,11 @@ async function genericWithJWT(job, initialJWT, auth, refreshAuth, policy = "cach
|
|
|
41
41
|
jwt = await (jwt && canBeRefreshed ? refresh(jwt) : auth());
|
|
42
42
|
return job(jwt);
|
|
43
43
|
}
|
|
44
|
+
if (isUncaughtClientError) {
|
|
45
|
+
(0, logs_1.log)("trustchain", "Uncaught client error -> reauthenticating");
|
|
46
|
+
jwt = await auth();
|
|
47
|
+
return job(jwt);
|
|
48
|
+
}
|
|
44
49
|
throw e;
|
|
45
50
|
});
|
|
46
51
|
}
|
|
@@ -50,6 +55,7 @@ function networkCheckJwtExpiration(error) {
|
|
|
50
55
|
let canBeRefreshed = false;
|
|
51
56
|
let isNotPermitted = false;
|
|
52
57
|
let isTrustchainOutdated = false;
|
|
58
|
+
let isUncaughtClientError = false;
|
|
53
59
|
// this assume live-network is used and we adapt to its error's format
|
|
54
60
|
if (error instanceof errors_1.LedgerAPI4xx) {
|
|
55
61
|
if (error.message.includes("JWT is expired")) {
|
|
@@ -62,7 +68,16 @@ function networkCheckJwtExpiration(error) {
|
|
|
62
68
|
else if (error.message.includes("path does not match")) {
|
|
63
69
|
isTrustchainOutdated = true;
|
|
64
70
|
}
|
|
71
|
+
else {
|
|
72
|
+
isUncaughtClientError = true;
|
|
73
|
+
}
|
|
65
74
|
}
|
|
66
|
-
return {
|
|
75
|
+
return {
|
|
76
|
+
hasExpired,
|
|
77
|
+
canBeRefreshed,
|
|
78
|
+
isNotPermitted,
|
|
79
|
+
isTrustchainOutdated,
|
|
80
|
+
isUncaughtClientError,
|
|
81
|
+
};
|
|
67
82
|
}
|
|
68
83
|
//# sourceMappingURL=auth.js.map
|
package/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAChD,yCAAqC;AAErC,qCAAoE;AAE7D,KAAK,UAAU,cAAc,CAClC,GAA6B,EAC7B,UAA2B,EAC3B,IAAwB,EACxB,WAAsC,EACtC,SAA0B,OAAO;IAEjC,SAAS,OAAO,CAAC,GAAQ;QACvB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAChC,IAAA,UAAG,EAAC,YAAY,EAAE,sCAAsC,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,6BAAoB,EAAE,CAAC;YACnC,CAAC;YACD,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,IAAI,2BAAkB,EAAE,CAAC;YACjC,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,IAAI,GAAG,GACL,MAAM,KAAK,UAAU,IAAI,CAAC,UAAU;QAClC,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC;YAC3B,CAAC,CAAC,UAAU,CAAC;IAEnB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QAC9B,kNAAkN;QAClN,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,KACjC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;;OAOG;IACH,oBAAoB,EAAE,CACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,UAAU,EACzB,iBAAiB,EAAE,iBAAiB,KACjC,OAAO,CAAC,CAAC,aAAa,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CAC5D,CAAC;AAEF,oBAAY,oBAAoB;IAC9B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAEE,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;CACxB,GACD;IAEE,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;CACxB,GACD;IAEE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEN;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEpD;;;;OAIG;IACH,QAAQ,CAAC,CAAC,EACR,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3B,MAAM,CAAC,EAAE,eAAe,EACxB,uBAAuB,CAAC,EAAE,OAAO,GAChC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;;OAKG;IACH,qBAAqB,CACnB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,CAAC,EAAE,8BAA8B,EAC1C,KAAK,CAAC,EAAE,UAAU,EAClB,iBAAiB,CAAC,EAAE,UAAU,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE7B;;OAEG;IACH,iBAAiB,CACf,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,UAAU,CACR,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE/B;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,gBAAgB,EACxB,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,SAAS,CACP,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/F;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1E;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/E,aAAa,IAAI,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,6BAA6B,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3C,2BAA2B,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,8BAA+B,SAAQ,yBAAyB;IAC/E,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChE"}
|
package/lib-es/api.d.ts
CHANGED
package/lib-es/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE;QACF,UAAU,EAAE;YACV,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,MAAM,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,eAAe,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,YAAY,EAAE,MAAM,GAAG;QACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,MAAM,eAAgB,MAAM;sCACa,QAAQ;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;qCAQxC;QAC5C,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,kBAAkB,CAAC;KAC/B,KAAG,QAAQ,GAAG,CAAC;uBAYgB,GAAG,KAAG,QAAQ,GAAG,CAAC;0BAcf,GAAG,KAAG,QAAQ,mBAAmB,CAAC;yBAWnC,GAAG,iBAAiB,MAAM,KAAG,QAAQ,kBAAkB,CAAC;0BAYnF,GAAG,iBACO,MAAM,iBACN,MAAM,KACpB,QAAQ,IAAI,CAAC;oBAYa,GAAG,iBAAiB,MAAM,KAAG,QAAQ,IAAI,CAAC;uBAahE,GAAG,iBACO,MAAM,WACZ,kBAAkB,KAC1B,QAAQ,IAAI,CAAC;4BAWqB,GAAG,iBAAiB,MAAM,KAAG,QAAQ,IAAI,CAAC;uBAUjD,QAAQ,iBAAiB,CAAC;CAoBzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/lib-es/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG/C,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7B,UAAU,EAAE,GAAG,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACxB,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,MAAM,GAAE,eAAyB,GAChC,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG/C,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7B,UAAU,EAAE,GAAG,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACxB,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,MAAM,GAAE,eAAyB,GAChC,OAAO,CAAC,CAAC,CAAC,CAuDZ"}
|
package/lib-es/auth.js
CHANGED
|
@@ -26,7 +26,7 @@ export async function genericWithJWT(job, initialJWT, auth, refreshAuth, policy
|
|
|
26
26
|
: initialJWT;
|
|
27
27
|
return job(jwt).catch(async (e) => {
|
|
28
28
|
// JWT expiration handling: if the function fails, we will recover a valid jwt accordingly to spec. https://ledgerhq.atlassian.net/wiki/spaces/BE/pages/4207083687/TCH+Usage+documentation#JWT-expiration-handling
|
|
29
|
-
const { hasExpired, canBeRefreshed, isNotPermitted, isTrustchainOutdated } = networkCheckJwtExpiration(e);
|
|
29
|
+
const { hasExpired, canBeRefreshed, isNotPermitted, isTrustchainOutdated, isUncaughtClientError, } = networkCheckJwtExpiration(e);
|
|
30
30
|
if (isNotPermitted) {
|
|
31
31
|
throw new TrustchainNotAllowed();
|
|
32
32
|
}
|
|
@@ -38,6 +38,11 @@ export async function genericWithJWT(job, initialJWT, auth, refreshAuth, policy
|
|
|
38
38
|
jwt = await (jwt && canBeRefreshed ? refresh(jwt) : auth());
|
|
39
39
|
return job(jwt);
|
|
40
40
|
}
|
|
41
|
+
if (isUncaughtClientError) {
|
|
42
|
+
log("trustchain", "Uncaught client error -> reauthenticating");
|
|
43
|
+
jwt = await auth();
|
|
44
|
+
return job(jwt);
|
|
45
|
+
}
|
|
41
46
|
throw e;
|
|
42
47
|
});
|
|
43
48
|
}
|
|
@@ -46,6 +51,7 @@ function networkCheckJwtExpiration(error) {
|
|
|
46
51
|
let canBeRefreshed = false;
|
|
47
52
|
let isNotPermitted = false;
|
|
48
53
|
let isTrustchainOutdated = false;
|
|
54
|
+
let isUncaughtClientError = false;
|
|
49
55
|
// this assume live-network is used and we adapt to its error's format
|
|
50
56
|
if (error instanceof LedgerAPI4xx) {
|
|
51
57
|
if (error.message.includes("JWT is expired")) {
|
|
@@ -58,7 +64,16 @@ function networkCheckJwtExpiration(error) {
|
|
|
58
64
|
else if (error.message.includes("path does not match")) {
|
|
59
65
|
isTrustchainOutdated = true;
|
|
60
66
|
}
|
|
67
|
+
else {
|
|
68
|
+
isUncaughtClientError = true;
|
|
69
|
+
}
|
|
61
70
|
}
|
|
62
|
-
return {
|
|
71
|
+
return {
|
|
72
|
+
hasExpired,
|
|
73
|
+
canBeRefreshed,
|
|
74
|
+
isNotPermitted,
|
|
75
|
+
isTrustchainOutdated,
|
|
76
|
+
isUncaughtClientError,
|
|
77
|
+
};
|
|
63
78
|
}
|
|
64
79
|
//# sourceMappingURL=auth.js.map
|
package/lib-es/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAA6B,EAC7B,UAA2B,EAC3B,IAAwB,EACxB,WAAsC,EACtC,SAA0B,OAAO;IAEjC,SAAS,OAAO,CAAC,GAAQ;QACvB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAChC,GAAG,CAAC,YAAY,EAAE,sCAAsC,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,oBAAoB,EAAE,CAAC;YACnC,CAAC;YACD,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACjC,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,IAAI,GAAG,GACL,MAAM,KAAK,UAAU,IAAI,CAAC,UAAU;QAClC,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC;YAC3B,CAAC,CAAC,UAAU,CAAC;IAEnB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QAC9B,kNAAkN;QAClN,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/lib-es/types.d.ts
CHANGED
package/lib-es/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.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.8.0-nightly.20251115023630",
|
|
4
4
|
"description": "Ledger Key Ring Protocol layer",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger"
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
"rxjs": "^7.8.1",
|
|
59
59
|
"ws": "8",
|
|
60
60
|
"@ledgerhq/errors": "6.27.0",
|
|
61
|
-
"@ledgerhq/hw-transport-mocker": "6.29.13",
|
|
62
61
|
"@ledgerhq/hw-transport": "6.31.13",
|
|
63
|
-
"@ledgerhq/hw-
|
|
64
|
-
"@ledgerhq/
|
|
65
|
-
"@ledgerhq/live-
|
|
62
|
+
"@ledgerhq/hw-transport-mocker": "6.29.13",
|
|
63
|
+
"@ledgerhq/hw-ledger-key-ring-protocol": "0.5.4-nightly.20251115023630",
|
|
64
|
+
"@ledgerhq/live-env": "2.21.0-nightly.20251115023630",
|
|
65
|
+
"@ledgerhq/live-network": "2.1.1-nightly.20251115023630",
|
|
66
66
|
"@ledgerhq/logs": "6.13.0",
|
|
67
|
-
"@ledgerhq/speculos-transport": "0.2.15-nightly.
|
|
67
|
+
"@ledgerhq/speculos-transport": "0.2.15-nightly.20251115023630",
|
|
68
68
|
"@ledgerhq/types-devices": "^6.27.0"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DefaultBodyType, http, HttpResponse, PathParams, StrictRequest } from "msw";
|
|
2
2
|
import { setupServer } from "msw/node";
|
|
3
|
+
import { LedgerAPI4xx } from "@ledgerhq/errors";
|
|
3
4
|
import {
|
|
4
5
|
CommandBlock,
|
|
5
6
|
crypto,
|
|
@@ -196,6 +197,48 @@ describe("Trustchain SDK", () => {
|
|
|
196
197
|
expect(onTrustchainRotation).toHaveBeenCalledWith(sdk, trustchain, alice);
|
|
197
198
|
expect(afterRotation).toHaveBeenCalledWith(newTrustchain);
|
|
198
199
|
});
|
|
200
|
+
|
|
201
|
+
it("should recover from any 4xx indirectly caused by wrong JWT", async () => {
|
|
202
|
+
const { alice } = MOCK_DATA.members;
|
|
203
|
+
const trustchainId = "TRUSTCHAIN_ID";
|
|
204
|
+
|
|
205
|
+
const trustchain = {
|
|
206
|
+
rootId: trustchainId,
|
|
207
|
+
walletSyncEncryptionKey: "0x123",
|
|
208
|
+
applicationPath: "m/0'/16'/0'",
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const initialJwt = {
|
|
212
|
+
access_token: "INITIAL TOKEN",
|
|
213
|
+
// It should work with `permissions: { [trustchainId]: "m/": ...` as this is the trustchain creator permissions (i.e the device).
|
|
214
|
+
// But at the moment the backend will return a 401 when accessing cloudsync with a root path jwt.
|
|
215
|
+
// Once this is fixed the auth verification of permissions should be updated to accept this case.
|
|
216
|
+
permissions: { [trustchainId]: { "m/0'/16'/0'": "ffffffff" } },
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
apiMocks.getChalenge.mockReturnValue({ json: {}, tlv: MOCK_DATA.challengeTlv });
|
|
220
|
+
|
|
221
|
+
const sdk = new SDK(sdkContext, hwDeviceProviderMock);
|
|
222
|
+
|
|
223
|
+
// Set private state:
|
|
224
|
+
apiMocks.postAuthenticate.mockReturnValueOnce(initialJwt);
|
|
225
|
+
await sdk.withAuth(trustchain, alice, async () => {});
|
|
226
|
+
expect(apiMocks.getChalenge).toHaveBeenCalledTimes(1);
|
|
227
|
+
expect(apiMocks.postAuthenticate).toHaveBeenCalledTimes(1);
|
|
228
|
+
expect(sdk["jwt"]).toEqual({
|
|
229
|
+
accessToken: initialJwt.access_token,
|
|
230
|
+
permissions: initialJwt.permissions,
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
apiMocks.postAuthenticate.mockReturnValueOnce({ ...initialJwt, access_token: "NEW TOKEN" });
|
|
234
|
+
await sdk.withAuth(trustchain, alice, async jwt => {
|
|
235
|
+
if (jwt.accessToken === "NEW TOKEN") return;
|
|
236
|
+
throw new LedgerAPI4xx("Permission denied");
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
expect(apiMocks.getChalenge).toHaveBeenCalledTimes(2);
|
|
240
|
+
expect(apiMocks.postAuthenticate).toHaveBeenCalledTimes(2);
|
|
241
|
+
});
|
|
199
242
|
});
|
|
200
243
|
|
|
201
244
|
const MOCK_DATA = {
|
package/src/api.ts
CHANGED
package/src/auth.ts
CHANGED
|
@@ -37,8 +37,14 @@ export async function genericWithJWT<T>(
|
|
|
37
37
|
|
|
38
38
|
return job(jwt).catch(async e => {
|
|
39
39
|
// JWT expiration handling: if the function fails, we will recover a valid jwt accordingly to spec. https://ledgerhq.atlassian.net/wiki/spaces/BE/pages/4207083687/TCH+Usage+documentation#JWT-expiration-handling
|
|
40
|
-
const {
|
|
41
|
-
|
|
40
|
+
const {
|
|
41
|
+
hasExpired,
|
|
42
|
+
canBeRefreshed,
|
|
43
|
+
isNotPermitted,
|
|
44
|
+
isTrustchainOutdated,
|
|
45
|
+
isUncaughtClientError,
|
|
46
|
+
} = networkCheckJwtExpiration(e);
|
|
47
|
+
|
|
42
48
|
if (isNotPermitted) {
|
|
43
49
|
throw new TrustchainNotAllowed();
|
|
44
50
|
}
|
|
@@ -50,6 +56,12 @@ export async function genericWithJWT<T>(
|
|
|
50
56
|
jwt = await (jwt && canBeRefreshed ? refresh(jwt) : auth());
|
|
51
57
|
return job(jwt);
|
|
52
58
|
}
|
|
59
|
+
if (isUncaughtClientError) {
|
|
60
|
+
log("trustchain", "Uncaught client error -> reauthenticating");
|
|
61
|
+
jwt = await auth();
|
|
62
|
+
return job(jwt);
|
|
63
|
+
}
|
|
64
|
+
|
|
53
65
|
throw e;
|
|
54
66
|
});
|
|
55
67
|
}
|
|
@@ -59,6 +71,7 @@ type JwtExpirationCheck = {
|
|
|
59
71
|
canBeRefreshed: boolean;
|
|
60
72
|
isNotPermitted: boolean;
|
|
61
73
|
isTrustchainOutdated: boolean;
|
|
74
|
+
isUncaughtClientError: boolean;
|
|
62
75
|
};
|
|
63
76
|
|
|
64
77
|
function networkCheckJwtExpiration(error: unknown): JwtExpirationCheck {
|
|
@@ -66,6 +79,7 @@ function networkCheckJwtExpiration(error: unknown): JwtExpirationCheck {
|
|
|
66
79
|
let canBeRefreshed = false;
|
|
67
80
|
let isNotPermitted = false;
|
|
68
81
|
let isTrustchainOutdated = false;
|
|
82
|
+
let isUncaughtClientError = false;
|
|
69
83
|
// this assume live-network is used and we adapt to its error's format
|
|
70
84
|
if (error instanceof LedgerAPI4xx) {
|
|
71
85
|
if (error.message.includes("JWT is expired")) {
|
|
@@ -75,7 +89,15 @@ function networkCheckJwtExpiration(error: unknown): JwtExpirationCheck {
|
|
|
75
89
|
isNotPermitted = true;
|
|
76
90
|
} else if (error.message.includes("path does not match")) {
|
|
77
91
|
isTrustchainOutdated = true;
|
|
92
|
+
} else {
|
|
93
|
+
isUncaughtClientError = true;
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
|
-
return {
|
|
96
|
+
return {
|
|
97
|
+
hasExpired,
|
|
98
|
+
canBeRefreshed,
|
|
99
|
+
isNotPermitted,
|
|
100
|
+
isTrustchainOutdated,
|
|
101
|
+
isUncaughtClientError,
|
|
102
|
+
};
|
|
81
103
|
}
|