@trezor/connect 9.6.4 → 9.6.5-beta.1
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 +20 -9
- package/README.md +1 -1
- package/lib/api/authenticateDevice.d.ts +5 -1
- package/lib/api/authenticateDevice.js +31 -12
- package/lib/api/firmware/getBinary.d.ts +3 -3
- package/lib/api/firmware/getBinary.js +2 -2
- package/lib/api/firmware/uploadFirmware.js +5 -0
- package/lib/api/monero/api/index.d.ts +5 -0
- package/lib/api/monero/api/index.js +13 -0
- package/lib/api/monero/api/moneroGetAddress.d.ts +27 -0
- package/lib/api/monero/api/moneroGetAddress.js +96 -0
- package/lib/api/monero/api/moneroGetWatchKey.d.ts +13 -0
- package/lib/api/monero/api/moneroGetWatchKey.js +43 -0
- package/lib/api/monero/api/moneroKeyImageSync.d.ts +16 -0
- package/lib/api/monero/api/moneroKeyImageSync.js +127 -0
- package/lib/api/monero/api/moneroSignTransaction.d.ts +16 -0
- package/lib/api/monero/api/moneroSignTransaction.js +197 -0
- package/lib/constants/errors.d.ts +1 -0
- package/lib/constants/errors.js +1 -0
- package/lib/constants/network.d.ts +1 -1
- package/lib/constants/network.js +1 -0
- package/lib/core/method.native.js +1 -0
- package/lib/core/onCallFirmwareUpdate.d.ts +1 -0
- package/lib/core/onCallFirmwareUpdate.js +12 -10
- package/lib/data/config.js +23 -0
- package/lib/data/connectSettings.js +1 -1
- package/lib/data/version.d.ts +1 -1
- package/lib/data/version.js +1 -1
- package/lib/device/Device.js +8 -1
- package/lib/device/DeviceCurrentSession.d.ts +78 -0
- package/lib/device/thp/pairing.js +1 -1
- package/lib/device/workflow/checkFirmwareHash.js +1 -1
- package/lib/events/transport.d.ts +0 -2
- package/lib/events/transport.js +0 -2
- package/lib/events/ui-request.d.ts +2 -2
- package/lib/factory.js +17 -0
- package/lib/impl/core-in-module.js +8 -2
- package/lib/tsconfig.lib.tsbuildinfo +1 -1
- package/lib/types/api/authenticateDevice.d.ts +19 -19
- package/lib/types/api/authenticateDevice.js +3 -4
- package/lib/types/api/discoverAccounts.d.ts +8 -0
- package/lib/types/api/discoverAccounts.js +2 -0
- package/lib/types/api/index.d.ts +8 -0
- package/lib/types/api/monero/index.d.ts +275 -0
- package/lib/types/api/monero/index.js +170 -0
- package/lib/types/api/moneroGetAddress.d.ts +5 -0
- package/lib/types/api/moneroGetAddress.js +3 -0
- package/lib/types/api/moneroGetWatchKey.d.ts +4 -0
- package/lib/types/api/moneroGetWatchKey.js +3 -0
- package/lib/types/api/moneroKeyImageSync.d.ts +4 -0
- package/lib/types/api/moneroKeyImageSync.js +3 -0
- package/lib/types/api/moneroSignTransaction.d.ts +4 -0
- package/lib/types/api/moneroSignTransaction.js +3 -0
- package/lib/types/firmware.d.ts +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +1 -0
- package/lib/types/settings.d.ts +2 -2
- package/lib/utils/uiPromiseManager.js +5 -0
- package/package.json +14 -13
- package/lib/api/firmware/verifyAuthenticityProof.d.ts +0 -15
- package/lib/api/firmware/verifyAuthenticityProof.js +0 -133
- package/lib/api/firmware/x509certificate.d.ts +0 -88
- package/lib/api/firmware/x509certificate.js +0 -302
- package/lib/data/deviceAuthenticityBlacklist.d.ts +0 -3
- package/lib/data/deviceAuthenticityBlacklist.js +0 -11
- package/lib/data/deviceAuthenticityBlacklistConfig.d.ts +0 -11
- package/lib/data/deviceAuthenticityBlacklistConfig.js +0 -15
- package/lib/data/deviceAuthenticityConfig.d.ts +0 -3
- package/lib/data/deviceAuthenticityConfig.js +0 -47
- package/lib/data/deviceAuthenticityConfigTypes.d.ts +0 -39
- package/lib/data/deviceAuthenticityConfigTypes.js +0 -26
- package/lib/data/transportInfo.d.ts +0 -13
- package/lib/data/transportInfo.js +0 -54
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constants_1 = require("../../../constants");
|
|
4
|
+
const AbstractMethod_1 = require("../../../core/AbstractMethod");
|
|
5
|
+
const coinInfo_1 = require("../../../data/coinInfo");
|
|
6
|
+
const pathUtils_1 = require("../../../utils/pathUtils");
|
|
7
|
+
const paramsValidator_1 = require("../../common/paramsValidator");
|
|
8
|
+
class MoneroSignTransactionMethod extends AbstractMethod_1.AbstractMethod {
|
|
9
|
+
state = {
|
|
10
|
+
hmacs: [],
|
|
11
|
+
vinis: [],
|
|
12
|
+
signatures: [],
|
|
13
|
+
pseudo_outs: [],
|
|
14
|
+
};
|
|
15
|
+
init() {
|
|
16
|
+
this.requiredPermissions = ['read', 'write'];
|
|
17
|
+
this.requiredDeviceCapabilities = ['Capability_Monero'];
|
|
18
|
+
this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, (0, coinInfo_1.getMiscNetwork)('Monero'), this.firmwareRange);
|
|
19
|
+
const { payload } = this;
|
|
20
|
+
const path = (0, pathUtils_1.validatePath)(payload.path, 3);
|
|
21
|
+
const allHardened = path.every(component => (component & pathUtils_1.HD_HARDENED) !== 0);
|
|
22
|
+
if (!allHardened) {
|
|
23
|
+
throw constants_1.ERRORS.TypedError('Method_InvalidParameter', `Monero requires all path components to be hardened. Use m/44'/128'/0' format.`);
|
|
24
|
+
}
|
|
25
|
+
if (payload.inputs.length < 1) {
|
|
26
|
+
throw constants_1.ERRORS.TypedError('Method_InvalidParameter', 'At least one input is required');
|
|
27
|
+
}
|
|
28
|
+
if (payload.tsx_data.outputs.length < 2) {
|
|
29
|
+
throw constants_1.ERRORS.TypedError('Method_InvalidParameter', 'At least 2 outputs are required');
|
|
30
|
+
}
|
|
31
|
+
const rsigData = payload.tsx_data.rsig_data;
|
|
32
|
+
if (rsigData.grouping.length < 1) {
|
|
33
|
+
throw constants_1.ERRORS.TypedError('Method_InvalidParameter', 'Missing required fields in rsig_data');
|
|
34
|
+
}
|
|
35
|
+
if (payload.inputs.length !== payload.tsx_data.num_inputs) {
|
|
36
|
+
throw constants_1.ERRORS.TypedError('Method_InvalidParameter', 'Number of inputs does not match tsx_data.num_inputs');
|
|
37
|
+
}
|
|
38
|
+
const transformedTsxData = {};
|
|
39
|
+
transformedTsxData.num_inputs = payload.tsx_data.num_inputs;
|
|
40
|
+
transformedTsxData.mixin = payload.tsx_data.mixin;
|
|
41
|
+
transformedTsxData.fee = payload.tsx_data.fee;
|
|
42
|
+
transformedTsxData.account = payload.tsx_data.account;
|
|
43
|
+
transformedTsxData.hard_fork = payload.tsx_data.hard_fork;
|
|
44
|
+
transformedTsxData.unlock_time = payload.tsx_data.unlock_time;
|
|
45
|
+
transformedTsxData.minor_indices = payload.tsx_data.minor_indices || [];
|
|
46
|
+
transformedTsxData.integrated_indices = payload.tsx_data.integrated_indices || [];
|
|
47
|
+
transformedTsxData.outputs = payload.tsx_data.outputs;
|
|
48
|
+
transformedTsxData.client_version = 3;
|
|
49
|
+
transformedTsxData.version = 1;
|
|
50
|
+
if (payload.tsx_data.payment_id !== undefined && payload.tsx_data.payment_id !== '') {
|
|
51
|
+
transformedTsxData.payment_id = payload.tsx_data.payment_id;
|
|
52
|
+
}
|
|
53
|
+
if (payload.tsx_data.monero_version !== undefined &&
|
|
54
|
+
payload.tsx_data.monero_version !== '') {
|
|
55
|
+
transformedTsxData.monero_version = payload.tsx_data.monero_version;
|
|
56
|
+
}
|
|
57
|
+
if (payload.tsx_data.chunkify !== undefined) {
|
|
58
|
+
transformedTsxData.chunkify = payload.tsx_data.chunkify;
|
|
59
|
+
}
|
|
60
|
+
if (payload.tsx_data.change_dts) {
|
|
61
|
+
transformedTsxData.change_dts = payload.tsx_data.change_dts;
|
|
62
|
+
}
|
|
63
|
+
transformedTsxData.rsig_data = {
|
|
64
|
+
rsig_type: rsigData.rsig_type,
|
|
65
|
+
bp_version: rsigData.bp_version,
|
|
66
|
+
grouping: rsigData.grouping,
|
|
67
|
+
rsig_parts: rsigData.rsig_parts || [],
|
|
68
|
+
};
|
|
69
|
+
if (rsigData.offload_type !== undefined) {
|
|
70
|
+
transformedTsxData.rsig_data.offload_type = rsigData.offload_type;
|
|
71
|
+
}
|
|
72
|
+
if (rsigData.mask !== undefined && rsigData.mask !== '') {
|
|
73
|
+
transformedTsxData.rsig_data.mask = rsigData.mask;
|
|
74
|
+
}
|
|
75
|
+
if (rsigData.rsig !== undefined && rsigData.rsig !== '') {
|
|
76
|
+
transformedTsxData.rsig_data.rsig = rsigData.rsig;
|
|
77
|
+
}
|
|
78
|
+
const transformedInputs = payload.inputs.map(input => {
|
|
79
|
+
const transformedInput = {};
|
|
80
|
+
transformedInput.amount = input.amount;
|
|
81
|
+
transformedInput.real_output = input.real_output;
|
|
82
|
+
transformedInput.real_output_in_tx_index = input.real_output_in_tx_index;
|
|
83
|
+
transformedInput.rct = input.rct;
|
|
84
|
+
transformedInput.subaddr_minor = input.subaddr_minor;
|
|
85
|
+
transformedInput.real_out_tx_key = input.real_out_tx_key;
|
|
86
|
+
transformedInput.real_out_additional_tx_keys = input.real_out_additional_tx_keys || [];
|
|
87
|
+
transformedInput.outputs = input.outputs;
|
|
88
|
+
transformedInput.mask = input.mask;
|
|
89
|
+
if (input.multisig_kLRki) {
|
|
90
|
+
transformedInput.multisig_kLRki = input.multisig_kLRki;
|
|
91
|
+
}
|
|
92
|
+
return transformedInput;
|
|
93
|
+
});
|
|
94
|
+
this.params = {
|
|
95
|
+
address_n: path,
|
|
96
|
+
network_type: payload.networkType,
|
|
97
|
+
tsx_data: transformedTsxData,
|
|
98
|
+
inputs: transformedInputs,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
get info() {
|
|
102
|
+
return 'Sign Monero transaction';
|
|
103
|
+
}
|
|
104
|
+
async run() {
|
|
105
|
+
const initResponse = await this.device
|
|
106
|
+
.getCommands()
|
|
107
|
+
.typedCall('MoneroTransactionInitRequest', 'MoneroTransactionInitAck', {
|
|
108
|
+
version: 0,
|
|
109
|
+
address_n: this.params.address_n,
|
|
110
|
+
network_type: this.params.network_type,
|
|
111
|
+
tsx_data: this.params.tsx_data,
|
|
112
|
+
});
|
|
113
|
+
this.state.hmacs = initResponse.message.hmacs;
|
|
114
|
+
for (let i = 0; i < this.params.inputs.length; i++) {
|
|
115
|
+
const setInputResponse = await this.device
|
|
116
|
+
.getCommands()
|
|
117
|
+
.typedCall('MoneroTransactionSetInputRequest', 'MoneroTransactionSetInputAck', {
|
|
118
|
+
src_entr: this.params.inputs[i],
|
|
119
|
+
});
|
|
120
|
+
this.state.vinis.push({
|
|
121
|
+
vini: setInputResponse.message.vini,
|
|
122
|
+
vini_hmac: setInputResponse.message.vini_hmac,
|
|
123
|
+
pseudo_out: setInputResponse.message.pseudo_out,
|
|
124
|
+
pseudo_out_hmac: setInputResponse.message.pseudo_out_hmac,
|
|
125
|
+
pseudo_out_alpha: setInputResponse.message.pseudo_out_alpha,
|
|
126
|
+
spend_key: setInputResponse.message.spend_key,
|
|
127
|
+
src_entr: this.params.inputs[i],
|
|
128
|
+
orig_idx: i,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
for (let i = 0; i < this.state.vinis.length; i++) {
|
|
132
|
+
const viniData = this.state.vinis[i];
|
|
133
|
+
await this.device
|
|
134
|
+
.getCommands()
|
|
135
|
+
.typedCall('MoneroTransactionInputViniRequest', 'MoneroTransactionInputViniAck', {
|
|
136
|
+
src_entr: viniData.src_entr,
|
|
137
|
+
vini: viniData.vini,
|
|
138
|
+
vini_hmac: viniData.vini_hmac,
|
|
139
|
+
pseudo_out: viniData.pseudo_out,
|
|
140
|
+
pseudo_out_hmac: viniData.pseudo_out_hmac,
|
|
141
|
+
orig_idx: viniData.orig_idx,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
await this.device
|
|
145
|
+
.getCommands()
|
|
146
|
+
.typedCall('MoneroTransactionAllInputsSetRequest', 'MoneroTransactionAllInputsSetAck', {});
|
|
147
|
+
const outputs = this.params.tsx_data.outputs || [];
|
|
148
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
149
|
+
await this.device
|
|
150
|
+
.getCommands()
|
|
151
|
+
.typedCall('MoneroTransactionSetOutputRequest', 'MoneroTransactionSetOutputAck', {
|
|
152
|
+
dst_entr: outputs[i],
|
|
153
|
+
dst_entr_hmac: this.state.hmacs[i],
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const allOutSetResponse = await this.device
|
|
157
|
+
.getCommands()
|
|
158
|
+
.typedCall('MoneroTransactionAllOutSetRequest', 'MoneroTransactionAllOutSetAck', {});
|
|
159
|
+
this.state.tx_prefix_hash = allOutSetResponse.message.tx_prefix_hash;
|
|
160
|
+
this.state.rv = allOutSetResponse.message.rv;
|
|
161
|
+
for (let i = 0; i < this.state.vinis.length; i++) {
|
|
162
|
+
const viniData = this.state.vinis[i];
|
|
163
|
+
const signResponse = await this.device
|
|
164
|
+
.getCommands()
|
|
165
|
+
.typedCall('MoneroTransactionSignInputRequest', 'MoneroTransactionSignInputAck', {
|
|
166
|
+
src_entr: viniData.src_entr,
|
|
167
|
+
vini: viniData.vini,
|
|
168
|
+
vini_hmac: viniData.vini_hmac,
|
|
169
|
+
pseudo_out: viniData.pseudo_out,
|
|
170
|
+
pseudo_out_hmac: viniData.pseudo_out_hmac,
|
|
171
|
+
pseudo_out_alpha: viniData.pseudo_out_alpha,
|
|
172
|
+
spend_key: viniData.spend_key,
|
|
173
|
+
orig_idx: viniData.orig_idx,
|
|
174
|
+
});
|
|
175
|
+
this.state.signatures.push(signResponse.message.signature);
|
|
176
|
+
if (signResponse.message.pseudo_out) {
|
|
177
|
+
this.state.pseudo_outs.push(signResponse.message.pseudo_out);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const finalResponse = await this.device
|
|
181
|
+
.getCommands()
|
|
182
|
+
.typedCall('MoneroTransactionFinalRequest', 'MoneroTransactionFinalAck', {});
|
|
183
|
+
return {
|
|
184
|
+
signatures: this.state.signatures,
|
|
185
|
+
tx_prefix_hash: this.state.tx_prefix_hash,
|
|
186
|
+
rv: this.state.rv,
|
|
187
|
+
cout_key: finalResponse.message.cout_key,
|
|
188
|
+
salt: finalResponse.message.salt,
|
|
189
|
+
rand_mult: finalResponse.message.rand_mult,
|
|
190
|
+
tx_enc_keys: finalResponse.message.tx_enc_keys,
|
|
191
|
+
opening_key: finalResponse.message.opening_key,
|
|
192
|
+
pseudo_outs: this.state.pseudo_outs,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.default = MoneroSignTransactionMethod;
|
|
197
|
+
//# sourceMappingURL=moneroSignTransaction.js.map
|
|
@@ -44,6 +44,7 @@ export declare const ERROR_CODES: {
|
|
|
44
44
|
readonly Failure_UnknownCode: "Unknown error";
|
|
45
45
|
readonly Failure_EntropyCheck: "";
|
|
46
46
|
readonly Deeplink_VersionMismatch: "Not compatible with current version of the app";
|
|
47
|
+
readonly Browser_LocalNetworkPermissionMissing: "Local network permission is missing. Please allow local network access in browser settings.";
|
|
47
48
|
};
|
|
48
49
|
type TypedErrorCode = keyof typeof ERROR_CODES;
|
|
49
50
|
export type ErrorCode = TypedErrorCode | Messages.FailureType | thp.ThpError['code'];
|
package/lib/constants/errors.js
CHANGED
|
@@ -45,6 +45,7 @@ exports.ERROR_CODES = {
|
|
|
45
45
|
Failure_UnknownCode: 'Unknown error',
|
|
46
46
|
Failure_EntropyCheck: '',
|
|
47
47
|
Deeplink_VersionMismatch: 'Not compatible with current version of the app',
|
|
48
|
+
Browser_LocalNetworkPermissionMissing: 'Local network permission is missing. Please allow local network access in browser settings.',
|
|
48
49
|
};
|
|
49
50
|
class TrezorError extends Error {
|
|
50
51
|
code;
|
|
@@ -11,6 +11,6 @@ export declare const TYPES: {
|
|
|
11
11
|
readonly solana: "Solana";
|
|
12
12
|
};
|
|
13
13
|
export type NetworkType = keyof typeof TYPES;
|
|
14
|
-
export declare const MODULES: readonly ["cardano", "eos", "ethereum", "nem", "ripple", "solana", "stellar", "tezos"];
|
|
14
|
+
export declare const MODULES: readonly ["cardano", "eos", "ethereum", "monero", "nem", "ripple", "solana", "stellar", "tezos"];
|
|
15
15
|
export type ModuleName = (typeof MODULES)[number];
|
|
16
16
|
//# sourceMappingURL=network.d.ts.map
|
package/lib/constants/network.js
CHANGED
|
@@ -9,6 +9,7 @@ const moduleMethods = {
|
|
|
9
9
|
cardano: require('../api/cardano/api'),
|
|
10
10
|
eos: require('../api/eos/api'),
|
|
11
11
|
ethereum: require('../api/ethereum/api'),
|
|
12
|
+
monero: require('../api/monero/api'),
|
|
12
13
|
nem: require('../api/nem/api'),
|
|
13
14
|
ripple: require('../api/ripple/api'),
|
|
14
15
|
solana: require('../api/solana/api'),
|
|
@@ -64,6 +64,7 @@ const waitForReconnectedDevice = async ({ bootloader, method, intermediary }, {
|
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
catch (error) {
|
|
67
|
+
uiPromises.rejectAll(error);
|
|
67
68
|
if (error.code === 'Device_ThpPairingTagInvalid') {
|
|
68
69
|
thpPairingError = true;
|
|
69
70
|
}
|
|
@@ -155,7 +156,7 @@ const getBinaryHelper = async ({ device, params, firmwareType, isIntermediary, l
|
|
|
155
156
|
return Promise.resolve({
|
|
156
157
|
binary: params.binary,
|
|
157
158
|
binaryVersion: (0, firmware_1.parseFirmwareHeaders)(Buffer.from(params.binary)).version,
|
|
158
|
-
|
|
159
|
+
release: undefined,
|
|
159
160
|
});
|
|
160
161
|
}
|
|
161
162
|
if (!device.firmwareReleaseConfigInfo) {
|
|
@@ -175,7 +176,7 @@ const getBinaryHelper = async ({ device, params, firmwareType, isIntermediary, l
|
|
|
175
176
|
firmwareType,
|
|
176
177
|
intermediaryVersion: isIntermediary && intermediary ? intermediary.version : undefined,
|
|
177
178
|
});
|
|
178
|
-
return (0, firmware_1.getBinary)({ baseUrl, path,
|
|
179
|
+
return (0, firmware_1.getBinary)({ baseUrl, path, release });
|
|
179
180
|
};
|
|
180
181
|
const onCallFirmwareUpdate = async ({ params, context, }) => {
|
|
181
182
|
const { deviceList, registerEvents, postMessage, initDevice, log } = context;
|
|
@@ -227,15 +228,14 @@ const onCallFirmwareUpdate = async ({ params, context, }) => {
|
|
|
227
228
|
operation: 'downloading',
|
|
228
229
|
progress: 100,
|
|
229
230
|
}));
|
|
230
|
-
|
|
231
|
-
if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)()) {
|
|
231
|
+
if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && finalBinaryInfo.release) {
|
|
232
232
|
const message = (0, events_1.createUiMessage)(events_1.UI.FIRMWARE_DOWNLOADED, {
|
|
233
233
|
binary: finalBinaryInfo.binary,
|
|
234
234
|
binaryVersion: finalBinaryInfo.binaryVersion,
|
|
235
|
-
releaseVersion: finalBinaryInfo.
|
|
236
|
-
firmwareType
|
|
235
|
+
releaseVersion: finalBinaryInfo.release?.version,
|
|
236
|
+
firmwareType,
|
|
237
|
+
release: finalBinaryInfo.release,
|
|
237
238
|
internalModel: device.features.internal_model,
|
|
238
|
-
release: finalBinaryRelease,
|
|
239
239
|
});
|
|
240
240
|
postMessage(message);
|
|
241
241
|
}
|
|
@@ -308,9 +308,11 @@ const onCallFirmwareUpdate = async ({ params, context, }) => {
|
|
|
308
308
|
if (!bootloaderVersion || !installedVersion) {
|
|
309
309
|
throw constants_1.ERRORS.TypedError('Runtime', 'reconnectedDevice.installedVersion is not set');
|
|
310
310
|
}
|
|
311
|
-
const { binaryVersion,
|
|
311
|
+
const { binaryVersion, release } = finalBinaryInfo;
|
|
312
312
|
const assertBinaryVersion = (0, versionUtils_1.isEqual)(installedVersion, binaryVersion);
|
|
313
|
-
const assertReleaseVersion =
|
|
313
|
+
const assertReleaseVersion = release?.version
|
|
314
|
+
? (0, versionUtils_1.isEqual)(installedVersion, release?.version)
|
|
315
|
+
: true;
|
|
314
316
|
await reconnectedDevice.release();
|
|
315
317
|
log.info('onCallFirmwareUpdate', `firmware updated to version ${installedVersion}`);
|
|
316
318
|
return {
|
|
@@ -318,7 +320,7 @@ const onCallFirmwareUpdate = async ({ params, context, }) => {
|
|
|
318
320
|
bootloaderVersion,
|
|
319
321
|
installedVersion,
|
|
320
322
|
binaryVersion,
|
|
321
|
-
releaseVersion,
|
|
323
|
+
releaseVersion: release?.version,
|
|
322
324
|
};
|
|
323
325
|
};
|
|
324
326
|
exports.onCallFirmwareUpdate = onCallFirmwareUpdate;
|
package/lib/data/config.js
CHANGED
|
@@ -243,6 +243,15 @@ exports.config = {
|
|
|
243
243
|
T3T1: '2.8.0',
|
|
244
244
|
},
|
|
245
245
|
},
|
|
246
|
+
{
|
|
247
|
+
capabilities: ['tropicDeviceAuthentication'],
|
|
248
|
+
min: {
|
|
249
|
+
T2B1: '0',
|
|
250
|
+
T3B1: '0',
|
|
251
|
+
T3T1: '0',
|
|
252
|
+
T3W1: '2.9.3',
|
|
253
|
+
},
|
|
254
|
+
},
|
|
246
255
|
{
|
|
247
256
|
capabilities: ['getFirmwareHash'],
|
|
248
257
|
methods: ['getFirmwareHash'],
|
|
@@ -306,6 +315,20 @@ exports.config = {
|
|
|
306
315
|
T3T1: '2.9.2',
|
|
307
316
|
},
|
|
308
317
|
},
|
|
318
|
+
{
|
|
319
|
+
capabilities: ['monero'],
|
|
320
|
+
methods: [
|
|
321
|
+
'moneroGetAddress',
|
|
322
|
+
'moneroGetWatchKey',
|
|
323
|
+
'moneroKeyImageSync',
|
|
324
|
+
'moneroSignTransaction',
|
|
325
|
+
],
|
|
326
|
+
min: {
|
|
327
|
+
T1B1: '0',
|
|
328
|
+
T2T1: '2.5.3',
|
|
329
|
+
T2B1: '2.5.3',
|
|
330
|
+
},
|
|
331
|
+
},
|
|
309
332
|
],
|
|
310
333
|
};
|
|
311
334
|
//# sourceMappingURL=config.js.map
|
|
@@ -134,7 +134,7 @@ const parseConnectSettings = (input = {}) => {
|
|
|
134
134
|
settings.sharedLogger = input.sharedLogger;
|
|
135
135
|
}
|
|
136
136
|
if (typeof input.coreMode === 'string' &&
|
|
137
|
-
['auto', 'popup', 'iframe', 'suite-desktop'].includes(input.coreMode)) {
|
|
137
|
+
['auto', 'popup', 'iframe', 'suite-desktop', 'suite-web'].includes(input.coreMode)) {
|
|
138
138
|
settings.coreMode = input.coreMode;
|
|
139
139
|
}
|
|
140
140
|
if (typeof input._extendWebextensionLifetime === 'boolean') {
|
package/lib/data/version.d.ts
CHANGED
package/lib/data/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEEPLINK_VERSION = exports.CONTENT_SCRIPT_VERSION = exports.DEFAULT_DOMAIN = exports.DEFAULT_DOMAIN_MAJOR_VER = exports.VERSION = void 0;
|
|
4
|
-
exports.VERSION = '9.6.
|
|
4
|
+
exports.VERSION = '9.6.5-beta.1';
|
|
5
5
|
const versionN = exports.VERSION.split('.').map(s => parseInt(s, 10));
|
|
6
6
|
const isBeta = exports.VERSION.includes('beta');
|
|
7
7
|
exports.DEFAULT_DOMAIN_MAJOR_VER = `https://connect.trezor.io/${versionN[0]}/`;
|
package/lib/device/Device.js
CHANGED
|
@@ -526,7 +526,14 @@ class Device extends utils_1.TypedEmitter {
|
|
|
526
526
|
if (!downloadedBinary) {
|
|
527
527
|
throw constants_1.ERRORS.TypedError('Runtime', 'changeLanguage: translation not found');
|
|
528
528
|
}
|
|
529
|
-
|
|
529
|
+
let dataToSend;
|
|
530
|
+
if (Buffer.isBuffer(downloadedBinary)) {
|
|
531
|
+
dataToSend = new Uint8Array(downloadedBinary).buffer;
|
|
532
|
+
}
|
|
533
|
+
else {
|
|
534
|
+
dataToSend = downloadedBinary;
|
|
535
|
+
}
|
|
536
|
+
return this._uploadTranslationData(dataToSend);
|
|
530
537
|
}
|
|
531
538
|
async _uploadTranslationData(payload) {
|
|
532
539
|
if (payload === null) {
|
|
@@ -709,6 +709,84 @@ export declare class DeviceCurrentSession implements TypedCallProvider {
|
|
|
709
709
|
} | {
|
|
710
710
|
type: "NEMDecryptedMessage";
|
|
711
711
|
message: import("@trezor/protobuf/lib/messages").NEMDecryptedMessage;
|
|
712
|
+
} | {
|
|
713
|
+
type: "MoneroGetAddress";
|
|
714
|
+
message: import("@trezor/protobuf/lib/messages").MoneroGetAddress;
|
|
715
|
+
} | {
|
|
716
|
+
type: "MoneroAddress";
|
|
717
|
+
message: import("@trezor/protobuf/lib/messages").MoneroAddress;
|
|
718
|
+
} | {
|
|
719
|
+
type: "MoneroGetWatchKey";
|
|
720
|
+
message: import("@trezor/protobuf/lib/messages").MoneroGetWatchKey;
|
|
721
|
+
} | {
|
|
722
|
+
type: "MoneroWatchKey";
|
|
723
|
+
message: import("@trezor/protobuf/lib/messages").MoneroWatchKey;
|
|
724
|
+
} | {
|
|
725
|
+
type: "MoneroKeyImageExportInitRequest";
|
|
726
|
+
message: import("@trezor/protobuf/lib/messages").MoneroKeyImageExportInitRequest;
|
|
727
|
+
} | {
|
|
728
|
+
type: "MoneroKeyImageExportInitAck";
|
|
729
|
+
message: import("@trezor/protobuf/lib/messages").MoneroKeyImageExportInitAck;
|
|
730
|
+
} | {
|
|
731
|
+
type: "MoneroKeyImageSyncStepRequest";
|
|
732
|
+
message: import("@trezor/protobuf/lib/messages").MoneroKeyImageSyncStepRequest;
|
|
733
|
+
} | {
|
|
734
|
+
type: "MoneroKeyImageSyncStepAck";
|
|
735
|
+
message: import("@trezor/protobuf/lib/messages").MoneroKeyImageSyncStepAck;
|
|
736
|
+
} | {
|
|
737
|
+
type: "MoneroKeyImageSyncFinalRequest";
|
|
738
|
+
message: import("@trezor/protobuf/lib/messages").MoneroKeyImageSyncFinalRequest;
|
|
739
|
+
} | {
|
|
740
|
+
type: "MoneroKeyImageSyncFinalAck";
|
|
741
|
+
message: import("@trezor/protobuf/lib/messages").MoneroKeyImageSyncFinalAck;
|
|
742
|
+
} | {
|
|
743
|
+
type: "MoneroTransactionInitRequest";
|
|
744
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionInitRequest;
|
|
745
|
+
} | {
|
|
746
|
+
type: "MoneroTransactionInitAck";
|
|
747
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionInitAck;
|
|
748
|
+
} | {
|
|
749
|
+
type: "MoneroTransactionSetInputRequest";
|
|
750
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionSetInputRequest;
|
|
751
|
+
} | {
|
|
752
|
+
type: "MoneroTransactionSetInputAck";
|
|
753
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionSetInputAck;
|
|
754
|
+
} | {
|
|
755
|
+
type: "MoneroTransactionInputViniRequest";
|
|
756
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionInputViniRequest;
|
|
757
|
+
} | {
|
|
758
|
+
type: "MoneroTransactionInputViniAck";
|
|
759
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionInputViniAck;
|
|
760
|
+
} | {
|
|
761
|
+
type: "MoneroTransactionAllInputsSetRequest";
|
|
762
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionAllInputsSetRequest;
|
|
763
|
+
} | {
|
|
764
|
+
type: "MoneroTransactionAllInputsSetAck";
|
|
765
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionAllInputsSetAck;
|
|
766
|
+
} | {
|
|
767
|
+
type: "MoneroTransactionSetOutputRequest";
|
|
768
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionSetOutputRequest;
|
|
769
|
+
} | {
|
|
770
|
+
type: "MoneroTransactionSetOutputAck";
|
|
771
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionSetOutputAck;
|
|
772
|
+
} | {
|
|
773
|
+
type: "MoneroTransactionAllOutSetRequest";
|
|
774
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionAllOutSetRequest;
|
|
775
|
+
} | {
|
|
776
|
+
type: "MoneroTransactionAllOutSetAck";
|
|
777
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionAllOutSetAck;
|
|
778
|
+
} | {
|
|
779
|
+
type: "MoneroTransactionSignInputRequest";
|
|
780
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionSignInputRequest;
|
|
781
|
+
} | {
|
|
782
|
+
type: "MoneroTransactionSignInputAck";
|
|
783
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionSignInputAck;
|
|
784
|
+
} | {
|
|
785
|
+
type: "MoneroTransactionFinalRequest";
|
|
786
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionFinalRequest;
|
|
787
|
+
} | {
|
|
788
|
+
type: "MoneroTransactionFinalAck";
|
|
789
|
+
message: import("@trezor/protobuf/lib/messages").MoneroTransactionFinalAck;
|
|
712
790
|
} | {
|
|
713
791
|
type: "RippleGetAddress";
|
|
714
792
|
message: import("@trezor/protobuf/lib/messages").RippleGetAddress;
|
|
@@ -122,7 +122,7 @@ const waitForPairingTag = async (device) => {
|
|
|
122
122
|
selectedMethod: thpState.pairingMethod,
|
|
123
123
|
nfcData: thpState.nfcData?.toString('hex'),
|
|
124
124
|
};
|
|
125
|
-
device.prompt(
|
|
125
|
+
device.prompt(events_1.DEVICE.THP_PAIRING, { payload }).then(response => {
|
|
126
126
|
if (response.success) {
|
|
127
127
|
dfd.resolve(response.payload);
|
|
128
128
|
}
|
|
@@ -41,7 +41,7 @@ const checkFirmwareHash = async ({ device, logger, }) => {
|
|
|
41
41
|
const firmwareBinary = await (0, firmware_1.getBinaryOptional)({
|
|
42
42
|
baseUrl,
|
|
43
43
|
path,
|
|
44
|
-
|
|
44
|
+
release,
|
|
45
45
|
});
|
|
46
46
|
if (firmwareBinary === null) {
|
|
47
47
|
return createFailResult('check-unsupported');
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Transport } from '@trezor/transport';
|
|
2
2
|
import { TRANSPORT } from '@trezor/transport/lib/constants';
|
|
3
|
-
import { BridgeInfo } from '../data/transportInfo';
|
|
4
3
|
import { UdevInfo } from '../data/udevInfo';
|
|
5
4
|
import { ConnectSettings } from '../types/settings';
|
|
6
5
|
import type { MessageFactoryFn } from '../types/utils';
|
|
@@ -18,7 +17,6 @@ export interface TransportError {
|
|
|
18
17
|
code?: string;
|
|
19
18
|
}
|
|
20
19
|
export interface InstallerInfo {
|
|
21
|
-
bridge?: BridgeInfo;
|
|
22
20
|
udev?: UdevInfo;
|
|
23
21
|
}
|
|
24
22
|
export type TransportEvent = {
|
package/lib/events/transport.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createTransportMessage = exports.TRANSPORT_EVENT = exports.TRANSPORT = void 0;
|
|
4
4
|
const errors_1 = require("../constants/errors");
|
|
5
|
-
const transportInfo_1 = require("../data/transportInfo");
|
|
6
5
|
const udevInfo_1 = require("../data/udevInfo");
|
|
7
6
|
var constants_1 = require("@trezor/transport/lib/constants");
|
|
8
7
|
Object.defineProperty(exports, "TRANSPORT", { enumerable: true, get: function () { return constants_1.TRANSPORT; } });
|
|
@@ -16,7 +15,6 @@ const createTransportMessage = (type, payload) => ({
|
|
|
16
15
|
{
|
|
17
16
|
...payload,
|
|
18
17
|
udev: (0, udevInfo_1.suggestUdevInstaller)(),
|
|
19
|
-
bridge: (0, transportInfo_1.suggestBridgeInstaller)(),
|
|
20
18
|
},
|
|
21
19
|
});
|
|
22
20
|
exports.createTransportMessage = createTransportMessage;
|
|
@@ -183,7 +183,7 @@ export type FirmwareStoreEvent = {
|
|
|
183
183
|
binaryVersion: VersionArray;
|
|
184
184
|
internalModel: DeviceModelInternal;
|
|
185
185
|
release: FirmwareRelease | undefined;
|
|
186
|
-
firmwareType
|
|
186
|
+
firmwareType: FirmwareType;
|
|
187
187
|
releaseVersion?: number[];
|
|
188
188
|
};
|
|
189
189
|
export interface UiRequestFirmwareDownloaded {
|
|
@@ -236,7 +236,7 @@ export interface FirmwareProgress {
|
|
|
236
236
|
type: typeof UI_REQUEST.FIRMWARE_PROGRESS;
|
|
237
237
|
payload: {
|
|
238
238
|
device: Device;
|
|
239
|
-
operation: 'downloading' | 'flashing';
|
|
239
|
+
operation: 'downloading' | 'flashing' | 'start-flashing';
|
|
240
240
|
progress: number;
|
|
241
241
|
};
|
|
242
242
|
}
|
package/lib/factory.js
CHANGED
|
@@ -74,6 +74,23 @@ const factory = ({ eventEmitter, manifest, init, call, setTransports, requestLog
|
|
|
74
74
|
getOwnershipProof: params => call({ ...params, method: 'getOwnershipProof' }),
|
|
75
75
|
getPublicKey: params => call({ ...params, method: 'getPublicKey' }),
|
|
76
76
|
getNonce: params => call({ ...params, method: 'getNonce' }),
|
|
77
|
+
moneroGetAddress: params => call({
|
|
78
|
+
...params,
|
|
79
|
+
method: 'moneroGetAddress',
|
|
80
|
+
useEventListener: eventEmitter.listenerCount(events_1.UI.ADDRESS_VALIDATION) > 0,
|
|
81
|
+
}),
|
|
82
|
+
moneroGetWatchKey: params => call({
|
|
83
|
+
...params,
|
|
84
|
+
method: 'moneroGetWatchKey',
|
|
85
|
+
}),
|
|
86
|
+
moneroKeyImageSync: params => call({
|
|
87
|
+
...params,
|
|
88
|
+
method: 'moneroKeyImageSync',
|
|
89
|
+
}),
|
|
90
|
+
moneroSignTransaction: params => call({
|
|
91
|
+
...params,
|
|
92
|
+
method: 'moneroSignTransaction',
|
|
93
|
+
}),
|
|
77
94
|
nemGetAddress: params => call({
|
|
78
95
|
...params,
|
|
79
96
|
method: 'nemGetAddress',
|
|
@@ -25,9 +25,15 @@ class CoreInModule {
|
|
|
25
25
|
}
|
|
26
26
|
async initCoreManager() {
|
|
27
27
|
const { connectSrc } = this._settings;
|
|
28
|
-
const
|
|
29
|
-
|
|
28
|
+
const connectCorePath = `${connectSrc}js/core.js`;
|
|
29
|
+
const importResult = await Promise.resolve(`${connectCorePath}`).then(s => tslib_1.__importStar(require(s))).catch(_err => {
|
|
30
|
+
this._log.error(`_err: Cannot load "${connectCorePath}"`, _err);
|
|
30
31
|
});
|
|
32
|
+
if (!importResult) {
|
|
33
|
+
this._log.error(`importResult is empty! Cannot load "${connectCorePath}"`);
|
|
34
|
+
throw new Error(`importResult is empty! Cannot load "${connectCorePath}js/core.js"`);
|
|
35
|
+
}
|
|
36
|
+
const { initCoreState, initTransport } = importResult;
|
|
31
37
|
if (!initCoreState)
|
|
32
38
|
return;
|
|
33
39
|
if (initTransport) {
|