@ledgerhq/live-common 24.0.0 → 24.1.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/lib/__tests__/range.js +8 -0
- package/lib/__tests__/range.js.map +1 -1
- package/lib/api/Ethereum.d.ts +7 -0
- package/lib/api/Ethereum.d.ts.map +1 -1
- package/lib/api/Ethereum.js +29 -1
- package/lib/api/Ethereum.js.map +1 -1
- package/lib/bridge/jsHelpers.d.ts +2 -1
- package/lib/bridge/jsHelpers.d.ts.map +1 -1
- package/lib/bridge/jsHelpers.js +4 -2
- package/lib/bridge/jsHelpers.js.map +1 -1
- package/lib/families/bitcoin/js-synchronisation.d.ts.map +1 -1
- package/lib/families/bitcoin/js-synchronisation.js +2 -173
- package/lib/families/bitcoin/js-synchronisation.js.map +1 -1
- package/lib/families/bitcoin/logic.d.ts +6 -1
- package/lib/families/bitcoin/logic.d.ts.map +1 -1
- package/lib/families/bitcoin/logic.js +186 -1
- package/lib/families/bitcoin/logic.js.map +1 -1
- package/lib/families/bitcoin/xpub.txs.txNoOutput.unit.test.d.ts +2 -0
- package/lib/families/bitcoin/xpub.txs.txNoOutput.unit.test.d.ts.map +1 -0
- package/lib/families/bitcoin/xpub.txs.txNoOutput.unit.test.js +72 -0
- package/lib/families/bitcoin/xpub.txs.txNoOutput.unit.test.js.map +1 -0
- package/lib/families/cosmos/api/Cosmos.d.ts.map +1 -1
- package/lib/families/cosmos/api/Cosmos.js +1 -0
- package/lib/families/cosmos/api/Cosmos.js.map +1 -1
- package/lib/families/cosmos/react.test.js +5 -4
- package/lib/families/cosmos/react.test.js.map +1 -1
- package/lib/families/ethereum/bridge/js.d.ts.map +1 -1
- package/lib/families/ethereum/bridge/js.js +5 -1
- package/lib/families/ethereum/bridge/js.js.map +1 -1
- package/lib/families/ethereum/datasets/ethereum2.d.ts +3 -0
- package/lib/families/ethereum/datasets/ethereum2.d.ts.map +1 -0
- package/lib/families/ethereum/datasets/ethereum2.js +22 -0
- package/lib/families/ethereum/datasets/ethereum2.js.map +1 -0
- package/lib/families/ethereum/synchronisation.d.ts.map +1 -1
- package/lib/families/ethereum/synchronisation.integration.test.js +68 -0
- package/lib/families/ethereum/synchronisation.integration.test.js.map +1 -1
- package/lib/families/ethereum/synchronisation.js +17 -11
- package/lib/families/ethereum/synchronisation.js.map +1 -1
- package/lib/hw/extractOnboardingState.d.ts +26 -0
- package/lib/hw/extractOnboardingState.d.ts.map +1 -0
- package/lib/hw/extractOnboardingState.js +69 -0
- package/lib/hw/extractOnboardingState.js.map +1 -0
- package/lib/hw/extractOnboardingState.test.d.ts +2 -0
- package/lib/hw/extractOnboardingState.test.d.ts.map +1 -0
- package/lib/hw/extractOnboardingState.test.js +182 -0
- package/lib/hw/extractOnboardingState.test.js.map +1 -0
- package/lib/hw/getOnboardingStatePolling.d.ts +20 -0
- package/lib/hw/getOnboardingStatePolling.d.ts.map +1 -0
- package/lib/hw/getOnboardingStatePolling.js +117 -0
- package/lib/hw/getOnboardingStatePolling.js.map +1 -0
- package/lib/hw/getOnboardingStatePolling.test.d.ts +2 -0
- package/lib/hw/getOnboardingStatePolling.test.d.ts.map +1 -0
- package/lib/hw/getOnboardingStatePolling.test.js +224 -0
- package/lib/hw/getOnboardingStatePolling.test.js.map +1 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.d.ts +22 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.d.ts.map +1 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.js +81 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.js.map +1 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.test.d.ts +2 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.test.d.ts.map +1 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.test.js +374 -0
- package/lib/onboarding/hooks/useOnboardingStatePolling.test.js.map +1 -0
- package/lib/operation.d.ts +7 -0
- package/lib/operation.d.ts.map +1 -1
- package/lib/operation.js +15 -1
- package/lib/operation.js.map +1 -1
- package/lib/types/manager.d.ts +5 -0
- package/lib/types/manager.d.ts.map +1 -1
- package/lib/types/manager.js +7 -1
- package/lib/types/manager.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/range.ts +13 -0
- package/src/api/Ethereum.ts +31 -0
- package/src/bridge/jsHelpers.ts +7 -1
- package/src/families/bitcoin/js-synchronisation.ts +3 -172
- package/src/families/bitcoin/logic.ts +169 -0
- package/src/families/bitcoin/xpub.txs.txNoOutput.unit.test.ts +37 -0
- package/src/families/cosmos/api/Cosmos.ts +4 -0
- package/src/families/cosmos/react.test.ts +3 -0
- package/src/families/ethereum/bridge/js.ts +5 -1
- package/src/families/ethereum/datasets/ethereum2.ts +20 -0
- package/src/families/ethereum/synchronisation.integration.test.ts +63 -1
- package/src/families/ethereum/synchronisation.ts +15 -7
- package/src/hw/extractOnboardingState.test.ts +251 -0
- package/src/hw/extractOnboardingState.ts +97 -0
- package/src/hw/getOnboardingStatePolling.test.ts +247 -0
- package/src/hw/getOnboardingStatePolling.ts +153 -0
- package/src/onboarding/hooks/useOnboardingStatePolling.test.ts +304 -0
- package/src/onboarding/hooks/useOnboardingStatePolling.ts +86 -0
- package/src/operation.ts +24 -0
- package/src/types/manager.ts +5 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
20
|
+
};
|
|
21
|
+
exports.__esModule = true;
|
|
22
|
+
exports.isAllowedOnboardingStatePollingError = exports.getOnboardingStatePolling = void 0;
|
|
23
|
+
var rxjs_1 = require("rxjs");
|
|
24
|
+
var operators_1 = require("rxjs/operators");
|
|
25
|
+
var getVersion_1 = __importDefault(require("./getVersion"));
|
|
26
|
+
var deviceAccess_1 = require("./deviceAccess");
|
|
27
|
+
var errors_1 = require("@ledgerhq/errors");
|
|
28
|
+
var extractOnboardingState_1 = require("./extractOnboardingState");
|
|
29
|
+
/**
|
|
30
|
+
* Polls the device onboarding state at a given frequency
|
|
31
|
+
* @param deviceId A device id
|
|
32
|
+
* @param pollingPeriodMs The period in ms after which the device onboarding state is fetched again
|
|
33
|
+
* @param fetchingTimeoutMs The time to wait while fetching for the device onboarding state before throwing an error, in ms
|
|
34
|
+
* @returns An Observable that polls the device onboarding state
|
|
35
|
+
*/
|
|
36
|
+
var getOnboardingStatePolling = function (_a) {
|
|
37
|
+
var deviceId = _a.deviceId, pollingPeriodMs = _a.pollingPeriodMs, _b = _a.fetchingTimeoutMs, fetchingTimeoutMs = _b === void 0 ? pollingPeriodMs : _b;
|
|
38
|
+
var firstRun = true;
|
|
39
|
+
var delayedOnceOnboardingStateObservable = new rxjs_1.Observable(function (subscriber) {
|
|
40
|
+
var delayMs = firstRun ? 0 : pollingPeriodMs;
|
|
41
|
+
firstRun = false;
|
|
42
|
+
var getOnboardingStateOnce = function () {
|
|
43
|
+
var firmwareInfoOrAllowedErrorObservable = (0, deviceAccess_1.withDevice)(deviceId)(function (t) {
|
|
44
|
+
return (0, rxjs_1.from)((0, getVersion_1["default"])(t));
|
|
45
|
+
}).pipe((0, operators_1.timeout)(fetchingTimeoutMs), // Throws a TimeoutError
|
|
46
|
+
(0, operators_1.first)(), (0, operators_1.catchError)(function (error) {
|
|
47
|
+
if ((0, exports.isAllowedOnboardingStatePollingError)(error)) {
|
|
48
|
+
// Pushes the error to the next step to be processed (no retry from the beginning)
|
|
49
|
+
return (0, rxjs_1.of)(error);
|
|
50
|
+
}
|
|
51
|
+
return (0, rxjs_1.throwError)(error);
|
|
52
|
+
}));
|
|
53
|
+
// If an error is catched previously, and this error is "allowed",
|
|
54
|
+
// the value from the observable is not a FirmwareInfo but an Error
|
|
55
|
+
var _a = __read((0, rxjs_1.partition)(firmwareInfoOrAllowedErrorObservable,
|
|
56
|
+
// TS cannot infer correctly the value given to RxJS partition
|
|
57
|
+
function (value) { return Boolean(value === null || value === void 0 ? void 0 : value.flags); }), 2), firmwareInfoObservable = _a[0], allowedErrorObservable = _a[1];
|
|
58
|
+
var onboardingStateFromFirmwareInfoObservable = firmwareInfoObservable.pipe((0, operators_1.map)(function (firmwareInfo) {
|
|
59
|
+
var _a;
|
|
60
|
+
var onboardingState = null;
|
|
61
|
+
try {
|
|
62
|
+
onboardingState = (0, extractOnboardingState_1.extractOnboardingState)(firmwareInfo.flags);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof errors_1.DeviceExtractOnboardingStateError) {
|
|
66
|
+
return {
|
|
67
|
+
onboardingState: null,
|
|
68
|
+
allowedError: error
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return {
|
|
73
|
+
onboardingState: null,
|
|
74
|
+
allowedError: new errors_1.DeviceOnboardingStatePollingError("SyncOnboarding: Unknown error while extracting the onboarding state ".concat((_a = error === null || error === void 0 ? void 0 : error.name) !== null && _a !== void 0 ? _a : error, " ").concat(error === null || error === void 0 ? void 0 : error.message))
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { onboardingState: onboardingState, allowedError: null };
|
|
79
|
+
}));
|
|
80
|
+
// Handles the case of an (allowed) Error value
|
|
81
|
+
var onboardingStateFromAllowedErrorObservable = allowedErrorObservable.pipe((0, operators_1.map)(function (allowedError) {
|
|
82
|
+
return {
|
|
83
|
+
onboardingState: null,
|
|
84
|
+
allowedError: allowedError
|
|
85
|
+
};
|
|
86
|
+
}));
|
|
87
|
+
return (0, rxjs_1.merge)(onboardingStateFromFirmwareInfoObservable, onboardingStateFromAllowedErrorObservable);
|
|
88
|
+
};
|
|
89
|
+
// Delays the fetch of the onboarding state
|
|
90
|
+
setTimeout(function () {
|
|
91
|
+
getOnboardingStateOnce().subscribe({
|
|
92
|
+
next: function (value) {
|
|
93
|
+
subscriber.next(value);
|
|
94
|
+
},
|
|
95
|
+
error: function (error) {
|
|
96
|
+
subscriber.error(error);
|
|
97
|
+
},
|
|
98
|
+
complete: function () { return subscriber.complete(); }
|
|
99
|
+
});
|
|
100
|
+
}, delayMs);
|
|
101
|
+
});
|
|
102
|
+
return delayedOnceOnboardingStateObservable.pipe((0, operators_1.repeat)());
|
|
103
|
+
};
|
|
104
|
+
exports.getOnboardingStatePolling = getOnboardingStatePolling;
|
|
105
|
+
var isAllowedOnboardingStatePollingError = function (error) {
|
|
106
|
+
if (error &&
|
|
107
|
+
// Timeout error is thrown by rxjs's timeout
|
|
108
|
+
(error instanceof rxjs_1.TimeoutError ||
|
|
109
|
+
error instanceof errors_1.DisconnectedDevice ||
|
|
110
|
+
error instanceof errors_1.CantOpenDevice ||
|
|
111
|
+
error instanceof errors_1.TransportStatusError)) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
};
|
|
116
|
+
exports.isAllowedOnboardingStatePollingError = isAllowedOnboardingStatePollingError;
|
|
117
|
+
//# sourceMappingURL=getOnboardingStatePolling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOnboardingStatePolling.js","sourceRoot":"","sources":["../../src/hw/getOnboardingStatePolling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOnboardingStatePolling.test.d.ts","sourceRoot":"","sources":["../../src/hw/getOnboardingStatePolling.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
exports.__esModule = true;
|
|
29
|
+
var getOnboardingStatePolling_1 = require("./getOnboardingStatePolling");
|
|
30
|
+
var rxjs_1 = require("rxjs");
|
|
31
|
+
var rxjsOperators = __importStar(require("rxjs/operators"));
|
|
32
|
+
var devices_1 = require("@ledgerhq/devices");
|
|
33
|
+
var hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport"));
|
|
34
|
+
var errors_1 = require("@ledgerhq/errors");
|
|
35
|
+
var deviceAccess_1 = require("./deviceAccess");
|
|
36
|
+
var getVersion_1 = __importDefault(require("./getVersion"));
|
|
37
|
+
var extractOnboardingState_1 = require("./extractOnboardingState");
|
|
38
|
+
var manager_1 = require("../types/manager");
|
|
39
|
+
jest.mock("./deviceAccess");
|
|
40
|
+
jest.mock("./getVersion");
|
|
41
|
+
jest.mock("./extractOnboardingState");
|
|
42
|
+
jest.mock("@ledgerhq/hw-transport");
|
|
43
|
+
jest.useFakeTimers();
|
|
44
|
+
var aDevice = {
|
|
45
|
+
deviceId: "DEVICE_ID_A",
|
|
46
|
+
deviceName: "DEVICE_NAME_A",
|
|
47
|
+
modelId: devices_1.DeviceModelId.nanoFTS,
|
|
48
|
+
wired: false
|
|
49
|
+
};
|
|
50
|
+
// As extractOnboardingState is mocked, the firmwareInfo
|
|
51
|
+
// returned by getVersion does not matter
|
|
52
|
+
var aFirmwareInfo = {
|
|
53
|
+
isBootloader: false,
|
|
54
|
+
rawVersion: "",
|
|
55
|
+
targetId: 0,
|
|
56
|
+
mcuVersion: "",
|
|
57
|
+
flags: Buffer.from([])
|
|
58
|
+
};
|
|
59
|
+
var pollingPeriodMs = 1000;
|
|
60
|
+
var mockedGetVersion = jest.mocked(getVersion_1["default"]);
|
|
61
|
+
var mockedWithDevice = jest.mocked(deviceAccess_1.withDevice);
|
|
62
|
+
mockedWithDevice.mockReturnValue(function (job) { return (0, rxjs_1.from)(job(new hw_transport_1["default"]())); });
|
|
63
|
+
var mockedExtractOnboardingState = jest.mocked(extractOnboardingState_1.extractOnboardingState);
|
|
64
|
+
describe("getOnboardingStatePolling", function () {
|
|
65
|
+
var anOnboardingState;
|
|
66
|
+
var onboardingStatePollingSubscription;
|
|
67
|
+
beforeEach(function () {
|
|
68
|
+
anOnboardingState = {
|
|
69
|
+
isOnboarded: false,
|
|
70
|
+
isInRecoveryMode: false,
|
|
71
|
+
seedPhraseType: manager_1.SeedPhraseType.TwentyFour,
|
|
72
|
+
currentSeedWordIndex: 0,
|
|
73
|
+
currentOnboardingStep: extractOnboardingState_1.OnboardingStep.NewDevice
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
afterEach(function () {
|
|
77
|
+
mockedGetVersion.mockClear();
|
|
78
|
+
mockedExtractOnboardingState.mockClear();
|
|
79
|
+
jest.clearAllTimers();
|
|
80
|
+
onboardingStatePollingSubscription === null || onboardingStatePollingSubscription === void 0 ? void 0 : onboardingStatePollingSubscription.unsubscribe();
|
|
81
|
+
});
|
|
82
|
+
describe("When a communication error occurs while fetching the device state", function () {
|
|
83
|
+
describe("and when the error is allowed and thrown before the defined timeout", function () {
|
|
84
|
+
it("should update the onboarding state to null and keep track of the allowed error", function (done) {
|
|
85
|
+
mockedGetVersion.mockRejectedValue(new errors_1.DisconnectedDevice("An allowed error"));
|
|
86
|
+
mockedExtractOnboardingState.mockReturnValue(anOnboardingState);
|
|
87
|
+
var device = aDevice;
|
|
88
|
+
(0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
89
|
+
deviceId: device.deviceId,
|
|
90
|
+
pollingPeriodMs: pollingPeriodMs
|
|
91
|
+
}).subscribe({
|
|
92
|
+
next: function (value) {
|
|
93
|
+
expect(value.onboardingState).toBeNull();
|
|
94
|
+
expect(value.allowedError).toBeInstanceOf(errors_1.DisconnectedDevice);
|
|
95
|
+
done();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// The timeout is equal to pollingPeriodMs by default
|
|
99
|
+
jest.advanceTimersByTime(pollingPeriodMs - 1);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe("and when a timeout occurred before the error (or the fetch took too long)", function () {
|
|
103
|
+
it("should update the allowed error value to notify the consumer - default value for the timeout", function (done) {
|
|
104
|
+
mockedGetVersion.mockResolvedValue(aFirmwareInfo);
|
|
105
|
+
mockedExtractOnboardingState.mockReturnValue(anOnboardingState);
|
|
106
|
+
var device = aDevice;
|
|
107
|
+
(0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
108
|
+
deviceId: device.deviceId,
|
|
109
|
+
pollingPeriodMs: pollingPeriodMs
|
|
110
|
+
}).subscribe({
|
|
111
|
+
next: function (value) {
|
|
112
|
+
expect(value.onboardingState).toBeNull();
|
|
113
|
+
expect(value.allowedError).toBeInstanceOf(rxjs_1.TimeoutError);
|
|
114
|
+
done();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// Waits more than the timeout
|
|
118
|
+
jest.advanceTimersByTime(pollingPeriodMs + 1);
|
|
119
|
+
});
|
|
120
|
+
it("should update the allowed error value to notify the consumer - timeout value set by the consumer", function (done) {
|
|
121
|
+
var fetchingTimeoutMs = pollingPeriodMs + 500;
|
|
122
|
+
mockedGetVersion.mockResolvedValue(aFirmwareInfo);
|
|
123
|
+
mockedExtractOnboardingState.mockReturnValue(anOnboardingState);
|
|
124
|
+
var device = aDevice;
|
|
125
|
+
(0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
126
|
+
deviceId: device.deviceId,
|
|
127
|
+
pollingPeriodMs: pollingPeriodMs,
|
|
128
|
+
fetchingTimeoutMs: fetchingTimeoutMs
|
|
129
|
+
}).subscribe({
|
|
130
|
+
next: function (value) {
|
|
131
|
+
expect(value.onboardingState).toBeNull();
|
|
132
|
+
expect(value.allowedError).toBeInstanceOf(rxjs_1.TimeoutError);
|
|
133
|
+
done();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// Waits more than the timeout
|
|
137
|
+
jest.advanceTimersByTime(fetchingTimeoutMs + 1);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe("and when the error is fatal and thrown before the defined timeout", function () {
|
|
141
|
+
it("should notify the consumer that a unallowed error occurred", function (done) {
|
|
142
|
+
mockedGetVersion.mockRejectedValue(new Error("Unknown error"));
|
|
143
|
+
var device = aDevice;
|
|
144
|
+
(0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
145
|
+
deviceId: device.deviceId,
|
|
146
|
+
pollingPeriodMs: pollingPeriodMs
|
|
147
|
+
}).subscribe({
|
|
148
|
+
error: function (error) {
|
|
149
|
+
expect(error).toBeInstanceOf(Error);
|
|
150
|
+
expect(error === null || error === void 0 ? void 0 : error.message).toBe("Unknown error");
|
|
151
|
+
done();
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
jest.advanceTimersByTime(pollingPeriodMs - 1);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe("When the fetched device state is incorrect", function () {
|
|
159
|
+
it("should return a null onboarding state, and keep track of the extract error", function (done) {
|
|
160
|
+
mockedGetVersion.mockResolvedValue(aFirmwareInfo);
|
|
161
|
+
mockedExtractOnboardingState.mockImplementation(function () {
|
|
162
|
+
throw new errors_1.DeviceExtractOnboardingStateError("Some incorrect device info");
|
|
163
|
+
});
|
|
164
|
+
var device = aDevice;
|
|
165
|
+
onboardingStatePollingSubscription = (0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
166
|
+
deviceId: device.deviceId,
|
|
167
|
+
pollingPeriodMs: pollingPeriodMs
|
|
168
|
+
}).subscribe({
|
|
169
|
+
next: function (value) {
|
|
170
|
+
expect(value.onboardingState).toBeNull();
|
|
171
|
+
expect(value.allowedError).toBeInstanceOf(errors_1.DeviceExtractOnboardingStateError);
|
|
172
|
+
done();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
jest.advanceTimersByTime(pollingPeriodMs - 1);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe("When polling returns a correct device state", function () {
|
|
179
|
+
it("should return a correct onboarding state", function (done) {
|
|
180
|
+
mockedGetVersion.mockResolvedValue(aFirmwareInfo);
|
|
181
|
+
mockedExtractOnboardingState.mockReturnValue(anOnboardingState);
|
|
182
|
+
var device = aDevice;
|
|
183
|
+
onboardingStatePollingSubscription = (0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
184
|
+
deviceId: device.deviceId,
|
|
185
|
+
pollingPeriodMs: pollingPeriodMs
|
|
186
|
+
}).subscribe({
|
|
187
|
+
next: function (value) {
|
|
188
|
+
expect(value.allowedError).toBeNull();
|
|
189
|
+
expect(value.onboardingState).toEqual(anOnboardingState);
|
|
190
|
+
done();
|
|
191
|
+
},
|
|
192
|
+
error: function (error) {
|
|
193
|
+
done(error);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
jest.advanceTimersByTime(pollingPeriodMs - 1);
|
|
197
|
+
});
|
|
198
|
+
it("should poll a new onboarding state after the defined period of time", function (done) {
|
|
199
|
+
mockedGetVersion.mockResolvedValue(aFirmwareInfo);
|
|
200
|
+
mockedExtractOnboardingState.mockReturnValue(anOnboardingState);
|
|
201
|
+
var device = aDevice;
|
|
202
|
+
// Did not manage to test that the polling is repeated by using jest's fake timer
|
|
203
|
+
// and advanceTimersByTime method or equivalent.
|
|
204
|
+
// Hacky test: spy on the repeat operator to see if it has been called.
|
|
205
|
+
var spiedRepeat = jest.spyOn(rxjsOperators, "repeat");
|
|
206
|
+
onboardingStatePollingSubscription = (0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
207
|
+
deviceId: device.deviceId,
|
|
208
|
+
pollingPeriodMs: pollingPeriodMs
|
|
209
|
+
}).subscribe({
|
|
210
|
+
next: function (value) {
|
|
211
|
+
expect(value.onboardingState).toEqual(anOnboardingState);
|
|
212
|
+
expect(value.allowedError).toBeNull();
|
|
213
|
+
expect(spiedRepeat).toHaveBeenCalledTimes(1);
|
|
214
|
+
done();
|
|
215
|
+
},
|
|
216
|
+
error: function (error) {
|
|
217
|
+
done(error);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
jest.runOnlyPendingTimers();
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=getOnboardingStatePolling.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOnboardingStatePolling.test.js","sourceRoot":"","sources":["../../src/hw/getOnboardingStatePolling.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Device } from "../../hw/actions/types";
|
|
2
|
+
import type { OnboardingStatePollingResult } from "../../hw/getOnboardingStatePolling";
|
|
3
|
+
export declare type UseOnboardingStatePollingResult = OnboardingStatePollingResult & {
|
|
4
|
+
fatalError: Error | null;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Polls the current device onboarding state, and notify the hook consumer of
|
|
8
|
+
* any allowed errors and fatal errors
|
|
9
|
+
* @param device A Device object
|
|
10
|
+
* @param pollingPeriodMs The period in ms after which the device onboarding state is fetched again
|
|
11
|
+
* @param stopPolling Flag to stop or continue the polling
|
|
12
|
+
* @returns An object containing:
|
|
13
|
+
* - onboardingState: the device state during the onboarding
|
|
14
|
+
* - allowedError: any error that is allowed and does not stop the polling
|
|
15
|
+
* - fatalError: any error that is fatal and stops the polling
|
|
16
|
+
*/
|
|
17
|
+
export declare const useOnboardingStatePolling: ({ device, pollingPeriodMs, stopPolling, }: {
|
|
18
|
+
device: Device | null;
|
|
19
|
+
pollingPeriodMs: number;
|
|
20
|
+
stopPolling?: boolean | undefined;
|
|
21
|
+
}) => UseOnboardingStatePollingResult;
|
|
22
|
+
//# sourceMappingURL=useOnboardingStatePolling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOnboardingStatePolling.d.ts","sourceRoot":"","sources":["../../../src/onboarding/hooks/useOnboardingStatePolling.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAIvF,oBAAY,+BAA+B,GAAG,4BAA4B,GAAG;IAC3E,UAAU,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB;YAK5B,MAAM,GAAG,IAAI;qBACJ,MAAM;;MAErB,+BAqDH,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
exports.__esModule = true;
|
|
19
|
+
exports.useOnboardingStatePolling = void 0;
|
|
20
|
+
var react_1 = require("react");
|
|
21
|
+
var errors_1 = require("@ledgerhq/errors");
|
|
22
|
+
var getOnboardingStatePolling_1 = require("../../hw/getOnboardingStatePolling");
|
|
23
|
+
/**
|
|
24
|
+
* Polls the current device onboarding state, and notify the hook consumer of
|
|
25
|
+
* any allowed errors and fatal errors
|
|
26
|
+
* @param device A Device object
|
|
27
|
+
* @param pollingPeriodMs The period in ms after which the device onboarding state is fetched again
|
|
28
|
+
* @param stopPolling Flag to stop or continue the polling
|
|
29
|
+
* @returns An object containing:
|
|
30
|
+
* - onboardingState: the device state during the onboarding
|
|
31
|
+
* - allowedError: any error that is allowed and does not stop the polling
|
|
32
|
+
* - fatalError: any error that is fatal and stops the polling
|
|
33
|
+
*/
|
|
34
|
+
var useOnboardingStatePolling = function (_a) {
|
|
35
|
+
var device = _a.device, pollingPeriodMs = _a.pollingPeriodMs, _b = _a.stopPolling, stopPolling = _b === void 0 ? false : _b;
|
|
36
|
+
var _c = __read((0, react_1.useState)(null), 2), onboardingState = _c[0], setOnboardingState = _c[1];
|
|
37
|
+
var _d = __read((0, react_1.useState)(null), 2), allowedError = _d[0], setAllowedError = _d[1];
|
|
38
|
+
var _e = __read((0, react_1.useState)(null), 2), fatalError = _e[0], setFatalError = _e[1];
|
|
39
|
+
(0, react_1.useEffect)(function () {
|
|
40
|
+
var onboardingStatePollingSubscription;
|
|
41
|
+
// If stopPolling is updated and set to true, the useEffect hook will call its
|
|
42
|
+
// cleanup function (return) and the polling won't restart with the below condition
|
|
43
|
+
if (device && !stopPolling) {
|
|
44
|
+
onboardingStatePollingSubscription = (0, getOnboardingStatePolling_1.getOnboardingStatePolling)({
|
|
45
|
+
deviceId: device.deviceId,
|
|
46
|
+
pollingPeriodMs: pollingPeriodMs
|
|
47
|
+
}).subscribe({
|
|
48
|
+
next: function (onboardingStatePollingResult) {
|
|
49
|
+
if (onboardingStatePollingResult) {
|
|
50
|
+
setFatalError(null);
|
|
51
|
+
setAllowedError(onboardingStatePollingResult.allowedError);
|
|
52
|
+
// Does not update the onboarding state if an allowed error occurred
|
|
53
|
+
if (!onboardingStatePollingResult.allowedError) {
|
|
54
|
+
setOnboardingState(onboardingStatePollingResult.onboardingState);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
error: function (error) {
|
|
59
|
+
var _a;
|
|
60
|
+
setAllowedError(null);
|
|
61
|
+
setFatalError(error instanceof Error
|
|
62
|
+
? error
|
|
63
|
+
: new errors_1.DeviceOnboardingStatePollingError("Error from: ".concat((_a = error === null || error === void 0 ? void 0 : error.name) !== null && _a !== void 0 ? _a : error, " ").concat(error === null || error === void 0 ? void 0 : error.message)));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return function () {
|
|
68
|
+
onboardingStatePollingSubscription === null || onboardingStatePollingSubscription === void 0 ? void 0 : onboardingStatePollingSubscription.unsubscribe();
|
|
69
|
+
};
|
|
70
|
+
}, [
|
|
71
|
+
device,
|
|
72
|
+
pollingPeriodMs,
|
|
73
|
+
setOnboardingState,
|
|
74
|
+
setAllowedError,
|
|
75
|
+
setFatalError,
|
|
76
|
+
stopPolling,
|
|
77
|
+
]);
|
|
78
|
+
return { onboardingState: onboardingState, allowedError: allowedError, fatalError: fatalError };
|
|
79
|
+
};
|
|
80
|
+
exports.useOnboardingStatePolling = useOnboardingStatePolling;
|
|
81
|
+
//# sourceMappingURL=useOnboardingStatePolling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOnboardingStatePolling.js","sourceRoot":"","sources":["../../../src/onboarding/hooks/useOnboardingStatePolling.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,+BAA4C;AAG5C,2CAAqE;AAGrE,gFAA+E;AAO/E;;;;;;;;;;GAUG;AACI,IAAM,yBAAyB,GAAG,UAAC,EAQzC;QAPC,MAAM,YAAA,EACN,eAAe,qBAAA,EACf,mBAAmB,EAAnB,WAAW,mBAAG,KAAK,KAAA;IAMb,IAAA,KAAA,OACJ,IAAA,gBAAQ,EAAyB,IAAI,CAAC,IAAA,EADjC,eAAe,QAAA,EAAE,kBAAkB,QACF,CAAC;IACnC,IAAA,KAAA,OAAkC,IAAA,gBAAQ,EAAe,IAAI,CAAC,IAAA,EAA7D,YAAY,QAAA,EAAE,eAAe,QAAgC,CAAC;IAC/D,IAAA,KAAA,OAA8B,IAAA,gBAAQ,EAAe,IAAI,CAAC,IAAA,EAAzD,UAAU,QAAA,EAAE,aAAa,QAAgC,CAAC;IAEjE,IAAA,iBAAS,EAAC;QACR,IAAI,kCAAgD,CAAC;QAErD,8EAA8E;QAC9E,mFAAmF;QACnF,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE;YAC1B,kCAAkC,GAAG,IAAA,qDAAyB,EAAC;gBAC7D,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,eAAe,iBAAA;aAChB,CAAC,CAAC,SAAS,CAAC;gBACX,IAAI,EAAE,UAAC,4BAA0D;oBAC/D,IAAI,4BAA4B,EAAE;wBAChC,aAAa,CAAC,IAAI,CAAC,CAAC;wBACpB,eAAe,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;wBAE3D,oEAAoE;wBACpE,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;4BAC9C,kBAAkB,CAAC,4BAA4B,CAAC,eAAe,CAAC,CAAC;yBAClE;qBACF;gBACH,CAAC;gBACD,KAAK,EAAE,UAAC,KAAK;;oBACX,eAAe,CAAC,IAAI,CAAC,CAAC;oBACtB,aAAa,CACX,KAAK,YAAY,KAAK;wBACpB,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,0CAAiC,CACnC,sBAAe,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,KAAK,cAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAE,CACxD,CACN,CAAC;gBACJ,CAAC;aACF,CAAC,CAAC;SACJ;QAED,OAAO;YACL,kCAAkC,aAAlC,kCAAkC,uBAAlC,kCAAkC,CAAE,WAAW,EAAE,CAAC;QACpD,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,MAAM;QACN,eAAe;QACf,kBAAkB;QAClB,eAAe;QACf,aAAa;QACb,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO,EAAE,eAAe,iBAAA,EAAE,YAAY,cAAA,EAAE,UAAU,YAAA,EAAE,CAAC;AACvD,CAAC,CAAC;AA7DW,QAAA,yBAAyB,6BA6DpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOnboardingStatePolling.test.d.ts","sourceRoot":"","sources":["../../../src/onboarding/hooks/useOnboardingStatePolling.test.ts"],"names":[],"mappings":""}
|