@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.
Files changed (73) hide show
  1. package/CHANGELOG.md +20 -9
  2. package/README.md +1 -1
  3. package/lib/api/authenticateDevice.d.ts +5 -1
  4. package/lib/api/authenticateDevice.js +31 -12
  5. package/lib/api/firmware/getBinary.d.ts +3 -3
  6. package/lib/api/firmware/getBinary.js +2 -2
  7. package/lib/api/firmware/uploadFirmware.js +5 -0
  8. package/lib/api/monero/api/index.d.ts +5 -0
  9. package/lib/api/monero/api/index.js +13 -0
  10. package/lib/api/monero/api/moneroGetAddress.d.ts +27 -0
  11. package/lib/api/monero/api/moneroGetAddress.js +96 -0
  12. package/lib/api/monero/api/moneroGetWatchKey.d.ts +13 -0
  13. package/lib/api/monero/api/moneroGetWatchKey.js +43 -0
  14. package/lib/api/monero/api/moneroKeyImageSync.d.ts +16 -0
  15. package/lib/api/monero/api/moneroKeyImageSync.js +127 -0
  16. package/lib/api/monero/api/moneroSignTransaction.d.ts +16 -0
  17. package/lib/api/monero/api/moneroSignTransaction.js +197 -0
  18. package/lib/constants/errors.d.ts +1 -0
  19. package/lib/constants/errors.js +1 -0
  20. package/lib/constants/network.d.ts +1 -1
  21. package/lib/constants/network.js +1 -0
  22. package/lib/core/method.native.js +1 -0
  23. package/lib/core/onCallFirmwareUpdate.d.ts +1 -0
  24. package/lib/core/onCallFirmwareUpdate.js +12 -10
  25. package/lib/data/config.js +23 -0
  26. package/lib/data/connectSettings.js +1 -1
  27. package/lib/data/version.d.ts +1 -1
  28. package/lib/data/version.js +1 -1
  29. package/lib/device/Device.js +8 -1
  30. package/lib/device/DeviceCurrentSession.d.ts +78 -0
  31. package/lib/device/thp/pairing.js +1 -1
  32. package/lib/device/workflow/checkFirmwareHash.js +1 -1
  33. package/lib/events/transport.d.ts +0 -2
  34. package/lib/events/transport.js +0 -2
  35. package/lib/events/ui-request.d.ts +2 -2
  36. package/lib/factory.js +17 -0
  37. package/lib/impl/core-in-module.js +8 -2
  38. package/lib/tsconfig.lib.tsbuildinfo +1 -1
  39. package/lib/types/api/authenticateDevice.d.ts +19 -19
  40. package/lib/types/api/authenticateDevice.js +3 -4
  41. package/lib/types/api/discoverAccounts.d.ts +8 -0
  42. package/lib/types/api/discoverAccounts.js +2 -0
  43. package/lib/types/api/index.d.ts +8 -0
  44. package/lib/types/api/monero/index.d.ts +275 -0
  45. package/lib/types/api/monero/index.js +170 -0
  46. package/lib/types/api/moneroGetAddress.d.ts +5 -0
  47. package/lib/types/api/moneroGetAddress.js +3 -0
  48. package/lib/types/api/moneroGetWatchKey.d.ts +4 -0
  49. package/lib/types/api/moneroGetWatchKey.js +3 -0
  50. package/lib/types/api/moneroKeyImageSync.d.ts +4 -0
  51. package/lib/types/api/moneroKeyImageSync.js +3 -0
  52. package/lib/types/api/moneroSignTransaction.d.ts +4 -0
  53. package/lib/types/api/moneroSignTransaction.js +3 -0
  54. package/lib/types/firmware.d.ts +1 -1
  55. package/lib/types/index.d.ts +1 -0
  56. package/lib/types/index.js +1 -0
  57. package/lib/types/settings.d.ts +2 -2
  58. package/lib/utils/uiPromiseManager.js +5 -0
  59. package/package.json +14 -13
  60. package/lib/api/firmware/verifyAuthenticityProof.d.ts +0 -15
  61. package/lib/api/firmware/verifyAuthenticityProof.js +0 -133
  62. package/lib/api/firmware/x509certificate.d.ts +0 -88
  63. package/lib/api/firmware/x509certificate.js +0 -302
  64. package/lib/data/deviceAuthenticityBlacklist.d.ts +0 -3
  65. package/lib/data/deviceAuthenticityBlacklist.js +0 -11
  66. package/lib/data/deviceAuthenticityBlacklistConfig.d.ts +0 -11
  67. package/lib/data/deviceAuthenticityBlacklistConfig.js +0 -15
  68. package/lib/data/deviceAuthenticityConfig.d.ts +0 -3
  69. package/lib/data/deviceAuthenticityConfig.js +0 -47
  70. package/lib/data/deviceAuthenticityConfigTypes.d.ts +0 -39
  71. package/lib/data/deviceAuthenticityConfigTypes.js +0 -26
  72. package/lib/data/transportInfo.d.ts +0 -13
  73. 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'];
@@ -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
@@ -17,6 +17,7 @@ exports.MODULES = [
17
17
  'cardano',
18
18
  'eos',
19
19
  'ethereum',
20
+ 'monero',
20
21
  'nem',
21
22
  'ripple',
22
23
  'solana',
@@ -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'),
@@ -14,6 +14,7 @@ type ReconnectContext = {
14
14
  abortSignal: AbortSignal;
15
15
  uiPromises: {
16
16
  create: UiPromiseCreator;
17
+ rejectAll: (e: Error) => void;
17
18
  };
18
19
  };
19
20
  export type Params = {
@@ -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
- releaseVersion: undefined,
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, version });
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
- const finalBinaryRelease = device?.firmwareReleaseConfigInfo?.release;
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.releaseVersion,
236
- firmwareType: device.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, releaseVersion } = finalBinaryInfo;
311
+ const { binaryVersion, release } = finalBinaryInfo;
312
312
  const assertBinaryVersion = (0, versionUtils_1.isEqual)(installedVersion, binaryVersion);
313
- const assertReleaseVersion = releaseVersion ? (0, versionUtils_1.isEqual)(installedVersion, releaseVersion) : true;
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;
@@ -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') {
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "9.6.4";
1
+ export declare const VERSION = "9.6.5-beta.1";
2
2
  export declare const DEFAULT_DOMAIN_MAJOR_VER: string;
3
3
  export declare const DEFAULT_DOMAIN: string;
4
4
  export declare const CONTENT_SCRIPT_VERSION = 1;
@@ -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';
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]}/`;
@@ -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
- return this._uploadTranslationData(downloadedBinary);
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('thp_pairing', { payload }).then(response => {
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
- version: firmwareVersion,
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 = {
@@ -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?: 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 { initCoreState, initTransport } = await Promise.resolve(`${`${connectSrc}js/core.js`}`).then(s => tslib_1.__importStar(require(s))).catch(_err => {
29
- this._log.error('_err', _err);
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) {