@ledgerhq/live-network 2.6.8 → 2.7.0
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 +12 -0
- package/README.md +3 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -1
- package/lib/network.d.ts +3 -0
- package/lib/network.d.ts.map +1 -1
- package/lib/network.js +29 -16
- package/lib/network.js.map +1 -1
- package/lib/state.d.ts +15 -0
- package/lib/state.d.ts.map +1 -0
- package/lib/state.js +15 -0
- package/lib/state.js.map +1 -0
- package/lib-es/index.d.ts +3 -0
- package/lib-es/index.d.ts.map +1 -1
- package/lib-es/index.js +2 -0
- package/lib-es/index.js.map +1 -1
- package/lib-es/network.d.ts +3 -0
- package/lib-es/network.d.ts.map +1 -1
- package/lib-es/network.js +28 -16
- package/lib-es/network.js.map +1 -1
- package/lib-es/state.d.ts +15 -0
- package/lib-es/state.d.ts.map +1 -0
- package/lib-es/state.js +12 -0
- package/lib-es/state.js.map +1 -0
- package/package.json +6 -4
- package/src/index.ts +3 -0
- package/src/network.test.ts +25 -26
- package/src/network.ts +29 -16
- package/src/state.ts +28 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ledgerhq/live-network
|
|
2
2
|
|
|
3
|
+
## 2.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#19870](https://github.com/LedgerHQ/ledger-live/pull/19870) [`e7caf31`](https://github.com/LedgerHQ/ledger-live/commit/e7caf310efbbf82aa777a7e86ceafe60f11e7193) Thanks [@gre-ledger](https://github.com/gre-ledger)! - Decouple from `@ledgerhq/live-env` via local state singleton. Network configuration (timeouts, log flags, client version) is now managed via `setNetworkState()` and defaults to the previous env var values. Consumers in the monorepo call `bridgeEnvToNetworkState()` from `@ledgerhq/live-common/network/setup` at boot. External consumers get sensible defaults with no setup required.
|
|
8
|
+
|
|
9
|
+
## 2.7.0-next.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#19870](https://github.com/LedgerHQ/ledger-live/pull/19870) [`e7caf31`](https://github.com/LedgerHQ/ledger-live/commit/e7caf310efbbf82aa777a7e86ceafe60f11e7193) Thanks [@gre-ledger](https://github.com/gre-ledger)! - Decouple from `@ledgerhq/live-env` via local state singleton. Network configuration (timeouts, log flags, client version) is now managed via `setNetworkState()` and defaults to the previous env var values. Consumers in the monorepo call `bridgeEnvToNetworkState()` from `@ledgerhq/live-common/network/setup` at boot. External consumers get sensible defaults with no setup required.
|
|
14
|
+
|
|
3
15
|
## 2.6.8
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# live-network
|
|
2
2
|
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> **Status: STABLE** — Production-ready; API is considered stable.
|
|
5
|
+
|
|
3
6
|
`@ledgerhq/live-network` is the shared network layer for Ledger Live. It wraps the underlying HTTP client with Ledger-specific logging, error normalisation, and request optimisation utilities so all services in the monorepo make network calls consistently.
|
|
4
7
|
|
|
5
8
|
## What it does
|
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,eAAe,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,eAAe,iBAAiB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNetworkState = exports.setNetworkState = void 0;
|
|
3
4
|
const network_1 = require("./network");
|
|
5
|
+
var network_2 = require("./network");
|
|
6
|
+
Object.defineProperty(exports, "setNetworkState", { enumerable: true, get: function () { return network_2.setNetworkState; } });
|
|
7
|
+
var state_1 = require("./state");
|
|
8
|
+
Object.defineProperty(exports, "getNetworkState", { enumerable: true, get: function () { return state_1.getNetworkState; } });
|
|
4
9
|
exports.default = network_1.newImplementation;
|
|
5
10
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA8C;AAC9C,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AACxB,iCAA0C;AAAjC,wGAAA,eAAe,OAAA;AAExB,kBAAe,2BAAiB,CAAC"}
|
package/lib/network.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AxiosPromise, type AxiosResponse, type InternalAxiosRequestConfig, type AxiosError, type AxiosRequestConfig } from "axios";
|
|
2
|
+
import type { NetworkState } from "./state";
|
|
2
3
|
type Metadata = {
|
|
3
4
|
startTime: number;
|
|
4
5
|
};
|
|
@@ -46,5 +47,7 @@ export declare const newImplementation: <T = unknown, U = unknown>(request: Live
|
|
|
46
47
|
* @returns Axios response type
|
|
47
48
|
*/
|
|
48
49
|
declare const implementation: <T = any>(arg: AxiosRequestConfig) => AxiosPromise<T>;
|
|
50
|
+
export declare function setNetworkState(partial: Partial<NetworkState>): void;
|
|
51
|
+
export type { NetworkState };
|
|
49
52
|
export default implementation;
|
|
50
53
|
//# sourceMappingURL=network.d.ts.map
|
package/lib/network.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,KAAK,QAAQ,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACtC,KAAK,0BAA0B,GAAG,0BAA0B,GAAG;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,0BAA0B,KAClC,0BAaF,CAAC;AAEF,KAAK,qBAAqB,GAAG,aAAa,GAAG;IAAE,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAA;CAAE,CAAC;AAEjF,eAAO,MAAM,mBAAmB,GAAI,UAAU,qBAAqB,KAAG,qBAiBrE,CAAC;AAEF,KAAK,mBAAmB,GAAG,aAAa,GAAG;IACzC,MAAM,EAAE,0BAA0B,CAAC;CACpC,CAAC;AACF,KAAK,gBAAgB,GAAG,UAAU,GAAG;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,gBAAgB,KAAG,gBAyC1D,CAAC;AAmEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAU,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAC9D,SAAS,kBAAkB,CAAC,CAAC,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CA6BhC,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,cAAc,GAAI,CAAC,GAAG,GAAG,EAAE,KAAK,kBAAkB,KAAG,YAAY,CAAC,CAAC,CAwBxE,CAAC;AAuBF,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAUpE;AAED,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,eAAe,cAAc,CAAC"}
|
package/lib/network.js
CHANGED
|
@@ -4,13 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.newImplementation = exports.errorInterceptor = exports.responseInterceptor = exports.requestInterceptor = void 0;
|
|
7
|
+
exports.setNetworkState = setNetworkState;
|
|
7
8
|
const axios_1 = __importDefault(require("axios"));
|
|
8
9
|
const errors_1 = require("@ledgerhq/errors");
|
|
9
|
-
const
|
|
10
|
+
const state_1 = require("./state");
|
|
10
11
|
const live_promise_1 = require("@ledgerhq/live-promise");
|
|
11
12
|
const logs_1 = require("@ledgerhq/logs");
|
|
12
13
|
const requestInterceptor = (request) => {
|
|
13
|
-
if (!(0,
|
|
14
|
+
if (!(0, state_1.getNetworkState)().enableNetworkLogs) {
|
|
14
15
|
return request;
|
|
15
16
|
}
|
|
16
17
|
const { baseURL, url, method = "", data } = request;
|
|
@@ -22,7 +23,7 @@ const requestInterceptor = (request) => {
|
|
|
22
23
|
};
|
|
23
24
|
exports.requestInterceptor = requestInterceptor;
|
|
24
25
|
const responseInterceptor = (response) => {
|
|
25
|
-
if (!(0,
|
|
26
|
+
if (!(0, state_1.getNetworkState)().enableNetworkLogs) {
|
|
26
27
|
return response;
|
|
27
28
|
}
|
|
28
29
|
const { baseURL, url, method, metadata } = response.config;
|
|
@@ -61,7 +62,7 @@ const errorInterceptor = (error) => {
|
|
|
61
62
|
else {
|
|
62
63
|
errorToThrow = makeError(`API HTTP ${status} ${url}`, status, url, method);
|
|
63
64
|
}
|
|
64
|
-
(0, logs_1.log)("network-error", `${status} ${method} ${baseURL || ""}${url} (${duration}): ${errorToThrow.message}`, (0,
|
|
65
|
+
(0, logs_1.log)("network-error", `${status} ${method} ${baseURL || ""}${url} (${duration}): ${errorToThrow.message}`, (0, state_1.getNetworkState)().debugHttpResponse ? { data: data } : {});
|
|
65
66
|
throw errorToThrow;
|
|
66
67
|
}
|
|
67
68
|
else if (error.request) {
|
|
@@ -74,10 +75,12 @@ exports.errorInterceptor = errorInterceptor;
|
|
|
74
75
|
axios_1.default.interceptors.request.use(exports.requestInterceptor);
|
|
75
76
|
axios_1.default.interceptors.response.use(exports.responseInterceptor, exports.errorInterceptor);
|
|
76
77
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
78
|
+
* Only enable HTTPS keepAlive on Node.js (excludes React Native / browser) and
|
|
79
|
+
* for non-LLM builds (llm- prefix = Ledger Live Mobile client version).
|
|
79
80
|
*/
|
|
80
|
-
const NETWORK_USE_HTTPS_KEEP_ALIVE =
|
|
81
|
+
const NETWORK_USE_HTTPS_KEEP_ALIVE = typeof process !== "undefined" &&
|
|
82
|
+
process.release?.name === "node" &&
|
|
83
|
+
!(0, state_1.getNetworkState)().ledgerClientVersion?.startsWith("llm-");
|
|
81
84
|
if (NETWORK_USE_HTTPS_KEEP_ALIVE) {
|
|
82
85
|
// the keepAlive is necessary when we make a lot of request in in parallel, especially for bitcoin sync. Otherwise, it may raise "connect ETIMEDOUT" error
|
|
83
86
|
// this should only be needed in Windows as UNIX systems reuse TCP packets by default
|
|
@@ -141,10 +144,10 @@ const newImplementation = async (request) => {
|
|
|
141
144
|
}
|
|
142
145
|
if (request.method === "GET") {
|
|
143
146
|
if (!("timeout" in request)) {
|
|
144
|
-
request.timeout = (0,
|
|
147
|
+
request.timeout = (0, state_1.getNetworkState)().getCallsTimeout;
|
|
145
148
|
}
|
|
146
149
|
response = await (0, live_promise_1.retry)(() => (0, axios_1.default)(request), {
|
|
147
|
-
maxRetry: (0,
|
|
150
|
+
maxRetry: (0, state_1.getNetworkState)().getCallsRetry,
|
|
148
151
|
retryCondition: error => {
|
|
149
152
|
if (error && error.status) {
|
|
150
153
|
// not all status codes are retryable
|
|
@@ -171,10 +174,10 @@ const implementation = (arg) => {
|
|
|
171
174
|
let promise;
|
|
172
175
|
if (arg.method === "GET") {
|
|
173
176
|
if (!("timeout" in arg)) {
|
|
174
|
-
arg.timeout = (0,
|
|
177
|
+
arg.timeout = (0, state_1.getNetworkState)().getCallsTimeout;
|
|
175
178
|
}
|
|
176
179
|
promise = (0, live_promise_1.retry)(() => (0, axios_1.default)(arg), {
|
|
177
|
-
maxRetry: (0,
|
|
180
|
+
maxRetry: (0, state_1.getNetworkState)().getCallsRetry,
|
|
178
181
|
retryCondition: error => {
|
|
179
182
|
if (error && error.status) {
|
|
180
183
|
// A 422 shouldn't be retried without change as explained in this documentation
|
|
@@ -208,11 +211,21 @@ function setAxiosLedgerClientVersionHeader(value) {
|
|
|
208
211
|
}
|
|
209
212
|
}
|
|
210
213
|
}
|
|
211
|
-
setAxiosLedgerClientVersionHeader((0,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
setAxiosLedgerClientVersionHeader((0, state_1.getNetworkState)().ledgerClientVersion);
|
|
215
|
+
function setNetworkState(partial) {
|
|
216
|
+
const state = (0, state_1.getNetworkState)();
|
|
217
|
+
if (partial.enableNetworkLogs !== undefined)
|
|
218
|
+
state.enableNetworkLogs = partial.enableNetworkLogs;
|
|
219
|
+
if (partial.debugHttpResponse !== undefined)
|
|
220
|
+
state.debugHttpResponse = partial.debugHttpResponse;
|
|
221
|
+
if (partial.ledgerClientVersion !== undefined) {
|
|
222
|
+
state.ledgerClientVersion = partial.ledgerClientVersion;
|
|
223
|
+
setAxiosLedgerClientVersionHeader(partial.ledgerClientVersion);
|
|
215
224
|
}
|
|
216
|
-
|
|
225
|
+
if (partial.getCallsTimeout !== undefined)
|
|
226
|
+
state.getCallsTimeout = partial.getCallsTimeout;
|
|
227
|
+
if (partial.getCallsRetry !== undefined)
|
|
228
|
+
state.getCallsRetry = partial.getCallsRetry;
|
|
229
|
+
}
|
|
217
230
|
exports.default = implementation;
|
|
218
231
|
//# sourceMappingURL=network.js.map
|
package/lib/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
package/lib/state.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type NetworkState = {
|
|
2
|
+
enableNetworkLogs: boolean;
|
|
3
|
+
debugHttpResponse: boolean;
|
|
4
|
+
ledgerClientVersion: string;
|
|
5
|
+
getCallsTimeout: number;
|
|
6
|
+
getCallsRetry: number;
|
|
7
|
+
};
|
|
8
|
+
declare global {
|
|
9
|
+
interface GlobalThis {
|
|
10
|
+
__ledgerLiveNetworkState?: NetworkState;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export declare function getNetworkState(): Readonly<NetworkState>;
|
|
14
|
+
export type { NetworkState };
|
|
15
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,wBAAwB,CAAC,EAAE,YAAY,CAAC;KACzC;CACF;AAUD,wBAAgB,eAAe,IAAI,QAAQ,CAAC,YAAY,CAAC,CAGxD;AAED,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/lib/state.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNetworkState = getNetworkState;
|
|
4
|
+
const defaults = {
|
|
5
|
+
enableNetworkLogs: false,
|
|
6
|
+
debugHttpResponse: false,
|
|
7
|
+
ledgerClientVersion: "",
|
|
8
|
+
getCallsTimeout: 60 * 1000,
|
|
9
|
+
getCallsRetry: 2,
|
|
10
|
+
};
|
|
11
|
+
function getNetworkState() {
|
|
12
|
+
globalThis.__ledgerLiveNetworkState ??= { ...defaults };
|
|
13
|
+
return globalThis.__ledgerLiveNetworkState;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=state.js.map
|
package/lib/state.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":";;AAsBA,0CAGC;AAXD,MAAM,QAAQ,GAAiB;IAC7B,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;IACxB,mBAAmB,EAAE,EAAE;IACvB,eAAe,EAAE,EAAE,GAAG,IAAI;IAC1B,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,SAAgB,eAAe;IAC7B,UAAU,CAAC,wBAAwB,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IACxD,OAAO,UAAU,CAAC,wBAAwB,CAAC;AAC7C,CAAC"}
|
package/lib-es/index.d.ts
CHANGED
package/lib-es/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,eAAe,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,eAAe,iBAAiB,CAAC"}
|
package/lib-es/index.js
CHANGED
package/lib-es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,eAAe,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,eAAe,iBAAiB,CAAC"}
|
package/lib-es/network.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AxiosPromise, type AxiosResponse, type InternalAxiosRequestConfig, type AxiosError, type AxiosRequestConfig } from "axios";
|
|
2
|
+
import type { NetworkState } from "./state";
|
|
2
3
|
type Metadata = {
|
|
3
4
|
startTime: number;
|
|
4
5
|
};
|
|
@@ -46,5 +47,7 @@ export declare const newImplementation: <T = unknown, U = unknown>(request: Live
|
|
|
46
47
|
* @returns Axios response type
|
|
47
48
|
*/
|
|
48
49
|
declare const implementation: <T = any>(arg: AxiosRequestConfig) => AxiosPromise<T>;
|
|
50
|
+
export declare function setNetworkState(partial: Partial<NetworkState>): void;
|
|
51
|
+
export type { NetworkState };
|
|
49
52
|
export default implementation;
|
|
50
53
|
//# sourceMappingURL=network.d.ts.map
|
package/lib-es/network.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,KAAK,QAAQ,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACtC,KAAK,0BAA0B,GAAG,0BAA0B,GAAG;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,0BAA0B,KAClC,0BAaF,CAAC;AAEF,KAAK,qBAAqB,GAAG,aAAa,GAAG;IAAE,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAA;CAAE,CAAC;AAEjF,eAAO,MAAM,mBAAmB,GAAI,UAAU,qBAAqB,KAAG,qBAiBrE,CAAC;AAEF,KAAK,mBAAmB,GAAG,aAAa,GAAG;IACzC,MAAM,EAAE,0BAA0B,CAAC;CACpC,CAAC;AACF,KAAK,gBAAgB,GAAG,UAAU,GAAG;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,gBAAgB,KAAG,gBAyC1D,CAAC;AAmEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAU,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAC9D,SAAS,kBAAkB,CAAC,CAAC,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CA6BhC,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,cAAc,GAAI,CAAC,GAAG,GAAG,EAAE,KAAK,kBAAkB,KAAG,YAAY,CAAC,CAAC,CAwBxE,CAAC;AAuBF,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAUpE;AAED,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,eAAe,cAAc,CAAC"}
|
package/lib-es/network.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
2
|
import { LedgerAPI4xx, LedgerAPI5xx, NetworkDown } from "@ledgerhq/errors";
|
|
3
|
-
import {
|
|
3
|
+
import { getNetworkState } from "./state";
|
|
4
4
|
import { retry } from "@ledgerhq/live-promise";
|
|
5
5
|
import { log } from "@ledgerhq/logs";
|
|
6
6
|
export const requestInterceptor = (request) => {
|
|
7
|
-
if (!
|
|
7
|
+
if (!getNetworkState().enableNetworkLogs) {
|
|
8
8
|
return request;
|
|
9
9
|
}
|
|
10
10
|
const { baseURL, url, method = "", data } = request;
|
|
@@ -15,7 +15,7 @@ export const requestInterceptor = (request) => {
|
|
|
15
15
|
return request;
|
|
16
16
|
};
|
|
17
17
|
export const responseInterceptor = (response) => {
|
|
18
|
-
if (!
|
|
18
|
+
if (!getNetworkState().enableNetworkLogs) {
|
|
19
19
|
return response;
|
|
20
20
|
}
|
|
21
21
|
const { baseURL, url, method, metadata } = response.config;
|
|
@@ -53,7 +53,7 @@ export const errorInterceptor = (error) => {
|
|
|
53
53
|
else {
|
|
54
54
|
errorToThrow = makeError(`API HTTP ${status} ${url}`, status, url, method);
|
|
55
55
|
}
|
|
56
|
-
log("network-error", `${status} ${method} ${baseURL || ""}${url} (${duration}): ${errorToThrow.message}`,
|
|
56
|
+
log("network-error", `${status} ${method} ${baseURL || ""}${url} (${duration}): ${errorToThrow.message}`, getNetworkState().debugHttpResponse ? { data: data } : {});
|
|
57
57
|
throw errorToThrow;
|
|
58
58
|
}
|
|
59
59
|
else if (error.request) {
|
|
@@ -65,10 +65,12 @@ export const errorInterceptor = (error) => {
|
|
|
65
65
|
axios.interceptors.request.use(requestInterceptor);
|
|
66
66
|
axios.interceptors.response.use(responseInterceptor, errorInterceptor);
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
68
|
+
* Only enable HTTPS keepAlive on Node.js (excludes React Native / browser) and
|
|
69
|
+
* for non-LLM builds (llm- prefix = Ledger Live Mobile client version).
|
|
70
70
|
*/
|
|
71
|
-
const NETWORK_USE_HTTPS_KEEP_ALIVE =
|
|
71
|
+
const NETWORK_USE_HTTPS_KEEP_ALIVE = typeof process !== "undefined" &&
|
|
72
|
+
process.release?.name === "node" &&
|
|
73
|
+
!getNetworkState().ledgerClientVersion?.startsWith("llm-");
|
|
72
74
|
if (NETWORK_USE_HTTPS_KEEP_ALIVE) {
|
|
73
75
|
// the keepAlive is necessary when we make a lot of request in in parallel, especially for bitcoin sync. Otherwise, it may raise "connect ETIMEDOUT" error
|
|
74
76
|
// this should only be needed in Windows as UNIX systems reuse TCP packets by default
|
|
@@ -132,10 +134,10 @@ export const newImplementation = async (request) => {
|
|
|
132
134
|
}
|
|
133
135
|
if (request.method === "GET") {
|
|
134
136
|
if (!("timeout" in request)) {
|
|
135
|
-
request.timeout =
|
|
137
|
+
request.timeout = getNetworkState().getCallsTimeout;
|
|
136
138
|
}
|
|
137
139
|
response = await retry(() => axios(request), {
|
|
138
|
-
maxRetry:
|
|
140
|
+
maxRetry: getNetworkState().getCallsRetry,
|
|
139
141
|
retryCondition: error => {
|
|
140
142
|
if (error && error.status) {
|
|
141
143
|
// not all status codes are retryable
|
|
@@ -161,10 +163,10 @@ const implementation = (arg) => {
|
|
|
161
163
|
let promise;
|
|
162
164
|
if (arg.method === "GET") {
|
|
163
165
|
if (!("timeout" in arg)) {
|
|
164
|
-
arg.timeout =
|
|
166
|
+
arg.timeout = getNetworkState().getCallsTimeout;
|
|
165
167
|
}
|
|
166
168
|
promise = retry(() => axios(arg), {
|
|
167
|
-
maxRetry:
|
|
169
|
+
maxRetry: getNetworkState().getCallsRetry,
|
|
168
170
|
retryCondition: error => {
|
|
169
171
|
if (error && error.status) {
|
|
170
172
|
// A 422 shouldn't be retried without change as explained in this documentation
|
|
@@ -198,11 +200,21 @@ function setAxiosLedgerClientVersionHeader(value) {
|
|
|
198
200
|
}
|
|
199
201
|
}
|
|
200
202
|
}
|
|
201
|
-
setAxiosLedgerClientVersionHeader(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
setAxiosLedgerClientVersionHeader(getNetworkState().ledgerClientVersion);
|
|
204
|
+
export function setNetworkState(partial) {
|
|
205
|
+
const state = getNetworkState();
|
|
206
|
+
if (partial.enableNetworkLogs !== undefined)
|
|
207
|
+
state.enableNetworkLogs = partial.enableNetworkLogs;
|
|
208
|
+
if (partial.debugHttpResponse !== undefined)
|
|
209
|
+
state.debugHttpResponse = partial.debugHttpResponse;
|
|
210
|
+
if (partial.ledgerClientVersion !== undefined) {
|
|
211
|
+
state.ledgerClientVersion = partial.ledgerClientVersion;
|
|
212
|
+
setAxiosLedgerClientVersionHeader(partial.ledgerClientVersion);
|
|
205
213
|
}
|
|
206
|
-
|
|
214
|
+
if (partial.getCallsTimeout !== undefined)
|
|
215
|
+
state.getCallsTimeout = partial.getCallsTimeout;
|
|
216
|
+
if (partial.getCallsRetry !== undefined)
|
|
217
|
+
state.getCallsRetry = partial.getCallsRetry;
|
|
218
|
+
}
|
|
207
219
|
export default implementation;
|
|
208
220
|
//# sourceMappingURL=network.js.map
|
package/lib-es/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type NetworkState = {
|
|
2
|
+
enableNetworkLogs: boolean;
|
|
3
|
+
debugHttpResponse: boolean;
|
|
4
|
+
ledgerClientVersion: string;
|
|
5
|
+
getCallsTimeout: number;
|
|
6
|
+
getCallsRetry: number;
|
|
7
|
+
};
|
|
8
|
+
declare global {
|
|
9
|
+
interface GlobalThis {
|
|
10
|
+
__ledgerLiveNetworkState?: NetworkState;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export declare function getNetworkState(): Readonly<NetworkState>;
|
|
14
|
+
export type { NetworkState };
|
|
15
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,wBAAwB,CAAC,EAAE,YAAY,CAAC;KACzC;CACF;AAUD,wBAAgB,eAAe,IAAI,QAAQ,CAAC,YAAY,CAAC,CAGxD;AAED,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/lib-es/state.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const defaults = {
|
|
2
|
+
enableNetworkLogs: false,
|
|
3
|
+
debugHttpResponse: false,
|
|
4
|
+
ledgerClientVersion: "",
|
|
5
|
+
getCallsTimeout: 60 * 1000,
|
|
6
|
+
getCallsRetry: 2,
|
|
7
|
+
};
|
|
8
|
+
export function getNetworkState() {
|
|
9
|
+
globalThis.__ledgerLiveNetworkState ??= { ...defaults };
|
|
10
|
+
return globalThis.__ledgerLiveNetworkState;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAcA,MAAM,QAAQ,GAAiB;IAC7B,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;IACxB,mBAAmB,EAAE,EAAE;IACvB,eAAe,EAAE,EAAE,GAAG,IAAI;IAC1B,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,UAAU,eAAe;IAC7B,UAAU,CAAC,wBAAwB,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IACxD,OAAO,UAAU,CAAC,wBAAwB,CAAC;AAC7C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/live-network",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "Ledger Live network and cache utilities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger"
|
|
@@ -67,17 +67,19 @@
|
|
|
67
67
|
},
|
|
68
68
|
"license": "Apache-2.0",
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"axios": "1.13.5",
|
|
71
70
|
"lru-cache": "^7.14.1",
|
|
72
|
-
"@ledgerhq/live-env": "^2.42.0",
|
|
73
|
-
"@ledgerhq/live-promise": "^0.3.0",
|
|
74
71
|
"@ledgerhq/errors": "^6.37.0",
|
|
72
|
+
"@ledgerhq/live-promise": "^0.3.0",
|
|
75
73
|
"@ledgerhq/logs": "^6.17.0"
|
|
76
74
|
},
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"axios": "1.13.5"
|
|
77
|
+
},
|
|
77
78
|
"devDependencies": {
|
|
78
79
|
"@types/invariant": "^2.2.35",
|
|
79
80
|
"@types/jest": "30.0.0",
|
|
80
81
|
"@types/node": "24.12.0",
|
|
82
|
+
"axios": "1.13.5",
|
|
81
83
|
"jest": "30.2.0",
|
|
82
84
|
"@swc/jest": "0.2.39",
|
|
83
85
|
"@swc/core": "1.15.11"
|
package/src/index.ts
CHANGED
package/src/network.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios, { AxiosHeaders } from "axios";
|
|
2
|
-
import {
|
|
3
|
-
import network, { requestInterceptor, responseInterceptor } from "./network";
|
|
2
|
+
import { getNetworkState } from "./state";
|
|
3
|
+
import network, { requestInterceptor, responseInterceptor, setNetworkState } from "./network";
|
|
4
4
|
import * as logs from "@ledgerhq/logs";
|
|
5
5
|
|
|
6
6
|
jest.mock("axios");
|
|
@@ -8,22 +8,21 @@ jest.mock("axios");
|
|
|
8
8
|
const mockedAxios = jest.mocked(axios);
|
|
9
9
|
|
|
10
10
|
describe("network", () => {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const DEFAULT_STATE = {
|
|
12
|
+
enableNetworkLogs: getNetworkState().enableNetworkLogs,
|
|
13
|
+
debugHttpResponse: getNetworkState().debugHttpResponse,
|
|
14
|
+
ledgerClientVersion: getNetworkState().ledgerClientVersion,
|
|
15
|
+
getCallsTimeout: getNetworkState().getCallsTimeout,
|
|
16
|
+
getCallsRetry: getNetworkState().getCallsRetry,
|
|
17
|
+
};
|
|
14
18
|
|
|
15
19
|
afterEach(() => {
|
|
16
|
-
// restore the spy created with spyOn
|
|
17
|
-
jest.restoreAllMocks();
|
|
18
20
|
jest.clearAllMocks();
|
|
19
|
-
|
|
20
|
-
// Restore DEFAULT_ENABLE_NETWORK_LOGS
|
|
21
|
-
setEnv("ENABLE_NETWORK_LOGS", DEFAULT_ENABLE_NETWORK_LOGS);
|
|
22
|
-
setEnv("LEDGER_CLIENT_VERSION", DEFAULT_LEDGER_CLIENT_VERSION);
|
|
21
|
+
setNetworkState(DEFAULT_STATE);
|
|
23
22
|
});
|
|
24
23
|
|
|
25
24
|
describe("requestInterceptor", () => {
|
|
26
|
-
test("should return provided request when
|
|
25
|
+
test("should return provided request unchanged when network logs are disabled", () => {
|
|
27
26
|
const request = {
|
|
28
27
|
baseURL: "baseURL",
|
|
29
28
|
url: "url",
|
|
@@ -34,8 +33,8 @@ describe("network", () => {
|
|
|
34
33
|
expect(req).toEqual(request);
|
|
35
34
|
});
|
|
36
35
|
|
|
37
|
-
test("should
|
|
38
|
-
|
|
36
|
+
test("should attach request metadata when network logs are enabled", () => {
|
|
37
|
+
setNetworkState({ enableNetworkLogs: true });
|
|
39
38
|
|
|
40
39
|
const request = {
|
|
41
40
|
baseURL: "baseURL",
|
|
@@ -50,10 +49,10 @@ describe("network", () => {
|
|
|
50
49
|
});
|
|
51
50
|
});
|
|
52
51
|
|
|
53
|
-
test("should call log when
|
|
52
|
+
test("should call log when network logs are enabled", () => {
|
|
54
53
|
const spy = jest.spyOn(logs, "log");
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
setNetworkState({ enableNetworkLogs: true });
|
|
57
56
|
|
|
58
57
|
const request = {
|
|
59
58
|
baseURL: "baseURL",
|
|
@@ -68,7 +67,7 @@ describe("network", () => {
|
|
|
68
67
|
});
|
|
69
68
|
|
|
70
69
|
describe("responseInterceptor", () => {
|
|
71
|
-
test("should return provided response when
|
|
70
|
+
test("should return provided response unchanged when network logs are disabled", () => {
|
|
72
71
|
const response = {
|
|
73
72
|
config: {
|
|
74
73
|
baseURL: "baseURL",
|
|
@@ -85,8 +84,8 @@ describe("network", () => {
|
|
|
85
84
|
expect(res).toEqual(response);
|
|
86
85
|
});
|
|
87
86
|
|
|
88
|
-
test("should return provided response when
|
|
89
|
-
|
|
87
|
+
test("should return provided response when network logs are enabled", () => {
|
|
88
|
+
setNetworkState({ enableNetworkLogs: true });
|
|
90
89
|
|
|
91
90
|
const response = {
|
|
92
91
|
config: {
|
|
@@ -104,10 +103,10 @@ describe("network", () => {
|
|
|
104
103
|
expect(res).toEqual(response);
|
|
105
104
|
});
|
|
106
105
|
|
|
107
|
-
test("should call log when
|
|
106
|
+
test("should call log when network logs are enabled", () => {
|
|
108
107
|
const spy = jest.spyOn(logs, "log");
|
|
109
108
|
|
|
110
|
-
|
|
109
|
+
setNetworkState({ enableNetworkLogs: true });
|
|
111
110
|
|
|
112
111
|
const response = {
|
|
113
112
|
config: {
|
|
@@ -148,7 +147,7 @@ describe("network", () => {
|
|
|
148
147
|
});
|
|
149
148
|
// eslint-disable-next-line no-empty
|
|
150
149
|
} catch {}
|
|
151
|
-
expect(mockedAxios).toHaveBeenCalledTimes(
|
|
150
|
+
expect(mockedAxios).toHaveBeenCalledTimes(DEFAULT_STATE.getCallsRetry + 1);
|
|
152
151
|
});
|
|
153
152
|
|
|
154
153
|
test("should not retry request when response status is 422", async () => {
|
|
@@ -178,15 +177,15 @@ describe("network", () => {
|
|
|
178
177
|
|
|
179
178
|
describe("ledger client version headers", () => {
|
|
180
179
|
test("should set ledger client version as axios client headers", () => {
|
|
181
|
-
|
|
180
|
+
setNetworkState({ ledgerClientVersion: "wallet-cli/0.1.1" });
|
|
182
181
|
|
|
183
182
|
expect(axios.defaults.headers.common["X-Ledger-Client-Version"]).toBe("wallet-cli/0.1.1");
|
|
184
183
|
expect(axios.defaults.headers.common["User-Agent"]).toBe("wallet-cli/0.1.1");
|
|
185
184
|
});
|
|
186
185
|
|
|
187
|
-
test("should clear ledger client version headers when
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
test("should clear ledger client version headers when ledgerClientVersion is empty", () => {
|
|
187
|
+
setNetworkState({ ledgerClientVersion: "wallet-cli/0.1.1" });
|
|
188
|
+
setNetworkState({ ledgerClientVersion: "" });
|
|
190
189
|
|
|
191
190
|
expect(axios.defaults.headers.common["X-Ledger-Client-Version"]).toBeUndefined();
|
|
192
191
|
expect(axios.defaults.headers.common["User-Agent"]).toBeUndefined();
|
package/src/network.ts
CHANGED
|
@@ -6,7 +6,8 @@ import axios, {
|
|
|
6
6
|
type AxiosRequestConfig,
|
|
7
7
|
} from "axios";
|
|
8
8
|
import { LedgerAPI4xx, LedgerAPI5xx, NetworkDown } from "@ledgerhq/errors";
|
|
9
|
-
import {
|
|
9
|
+
import { getNetworkState } from "./state";
|
|
10
|
+
import type { NetworkState } from "./state";
|
|
10
11
|
import { retry } from "@ledgerhq/live-promise";
|
|
11
12
|
import { log } from "@ledgerhq/logs";
|
|
12
13
|
|
|
@@ -16,7 +17,7 @@ type ExtendedAxiosRequestConfig = InternalAxiosRequestConfig & { metadata?: Meta
|
|
|
16
17
|
export const requestInterceptor = (
|
|
17
18
|
request: ExtendedAxiosRequestConfig,
|
|
18
19
|
): ExtendedAxiosRequestConfig => {
|
|
19
|
-
if (!
|
|
20
|
+
if (!getNetworkState().enableNetworkLogs) {
|
|
20
21
|
return request;
|
|
21
22
|
}
|
|
22
23
|
|
|
@@ -33,7 +34,7 @@ export const requestInterceptor = (
|
|
|
33
34
|
type ExtendedAxiosResponse = AxiosResponse & { config: { metadata?: Metadata } };
|
|
34
35
|
|
|
35
36
|
export const responseInterceptor = (response: ExtendedAxiosResponse): ExtendedAxiosResponse => {
|
|
36
|
-
if (!
|
|
37
|
+
if (!getNetworkState().enableNetworkLogs) {
|
|
37
38
|
return response;
|
|
38
39
|
}
|
|
39
40
|
|
|
@@ -91,7 +92,7 @@ export const errorInterceptor = (error: InterceptedError): InterceptedError => {
|
|
|
91
92
|
log(
|
|
92
93
|
"network-error",
|
|
93
94
|
`${status} ${method} ${baseURL || ""}${url} (${duration}): ${errorToThrow.message}`,
|
|
94
|
-
|
|
95
|
+
getNetworkState().debugHttpResponse ? { data: data } : {},
|
|
95
96
|
);
|
|
96
97
|
throw errorToThrow;
|
|
97
98
|
} else if (error.request) {
|
|
@@ -105,10 +106,13 @@ axios.interceptors.request.use(requestInterceptor);
|
|
|
105
106
|
axios.interceptors.response.use(responseInterceptor, errorInterceptor);
|
|
106
107
|
|
|
107
108
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
109
|
+
* Only enable HTTPS keepAlive on Node.js (excludes React Native / browser) and
|
|
110
|
+
* for non-LLM builds (llm- prefix = Ledger Live Mobile client version).
|
|
110
111
|
*/
|
|
111
|
-
const NETWORK_USE_HTTPS_KEEP_ALIVE =
|
|
112
|
+
const NETWORK_USE_HTTPS_KEEP_ALIVE =
|
|
113
|
+
typeof process !== "undefined" &&
|
|
114
|
+
process.release?.name === "node" &&
|
|
115
|
+
!getNetworkState().ledgerClientVersion?.startsWith("llm-");
|
|
112
116
|
if (NETWORK_USE_HTTPS_KEEP_ALIVE) {
|
|
113
117
|
// the keepAlive is necessary when we make a lot of request in in parallel, especially for bitcoin sync. Otherwise, it may raise "connect ETIMEDOUT" error
|
|
114
118
|
// this should only be needed in Windows as UNIX systems reuse TCP packets by default
|
|
@@ -197,11 +201,11 @@ export const newImplementation = async <T = unknown, U = unknown>(
|
|
|
197
201
|
|
|
198
202
|
if (request.method === "GET") {
|
|
199
203
|
if (!("timeout" in request)) {
|
|
200
|
-
request.timeout =
|
|
204
|
+
request.timeout = getNetworkState().getCallsTimeout;
|
|
201
205
|
}
|
|
202
206
|
|
|
203
207
|
response = await retry(() => axios(request), {
|
|
204
|
-
maxRetry:
|
|
208
|
+
maxRetry: getNetworkState().getCallsRetry,
|
|
205
209
|
retryCondition: error => {
|
|
206
210
|
if (error && error.status) {
|
|
207
211
|
// not all status codes are retryable
|
|
@@ -230,11 +234,11 @@ const implementation = <T = any>(arg: AxiosRequestConfig): AxiosPromise<T> => {
|
|
|
230
234
|
|
|
231
235
|
if (arg.method === "GET") {
|
|
232
236
|
if (!("timeout" in arg)) {
|
|
233
|
-
arg.timeout =
|
|
237
|
+
arg.timeout = getNetworkState().getCallsTimeout;
|
|
234
238
|
}
|
|
235
239
|
|
|
236
240
|
promise = retry(() => axios(arg), {
|
|
237
|
-
maxRetry:
|
|
241
|
+
maxRetry: getNetworkState().getCallsRetry,
|
|
238
242
|
retryCondition: error => {
|
|
239
243
|
if (error && error.status) {
|
|
240
244
|
// A 422 shouldn't be retried without change as explained in this documentation
|
|
@@ -270,11 +274,20 @@ function setAxiosLedgerClientVersionHeader(value: string) {
|
|
|
270
274
|
}
|
|
271
275
|
}
|
|
272
276
|
}
|
|
273
|
-
setAxiosLedgerClientVersionHeader(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
+
setAxiosLedgerClientVersionHeader(getNetworkState().ledgerClientVersion);
|
|
278
|
+
|
|
279
|
+
export function setNetworkState(partial: Partial<NetworkState>): void {
|
|
280
|
+
const state = getNetworkState() as NetworkState;
|
|
281
|
+
if (partial.enableNetworkLogs !== undefined) state.enableNetworkLogs = partial.enableNetworkLogs;
|
|
282
|
+
if (partial.debugHttpResponse !== undefined) state.debugHttpResponse = partial.debugHttpResponse;
|
|
283
|
+
if (partial.ledgerClientVersion !== undefined) {
|
|
284
|
+
state.ledgerClientVersion = partial.ledgerClientVersion;
|
|
285
|
+
setAxiosLedgerClientVersionHeader(partial.ledgerClientVersion);
|
|
277
286
|
}
|
|
278
|
-
|
|
287
|
+
if (partial.getCallsTimeout !== undefined) state.getCallsTimeout = partial.getCallsTimeout;
|
|
288
|
+
if (partial.getCallsRetry !== undefined) state.getCallsRetry = partial.getCallsRetry;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export type { NetworkState };
|
|
279
292
|
|
|
280
293
|
export default implementation;
|
package/src/state.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
type NetworkState = {
|
|
2
|
+
enableNetworkLogs: boolean;
|
|
3
|
+
debugHttpResponse: boolean;
|
|
4
|
+
ledgerClientVersion: string;
|
|
5
|
+
getCallsTimeout: number;
|
|
6
|
+
getCallsRetry: number;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
declare global {
|
|
10
|
+
interface GlobalThis {
|
|
11
|
+
__ledgerLiveNetworkState?: NetworkState;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const defaults: NetworkState = {
|
|
16
|
+
enableNetworkLogs: false,
|
|
17
|
+
debugHttpResponse: false,
|
|
18
|
+
ledgerClientVersion: "",
|
|
19
|
+
getCallsTimeout: 60 * 1000,
|
|
20
|
+
getCallsRetry: 2,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export function getNetworkState(): Readonly<NetworkState> {
|
|
24
|
+
globalThis.__ledgerLiveNetworkState ??= { ...defaults };
|
|
25
|
+
return globalThis.__ledgerLiveNetworkState;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type { NetworkState };
|