@trezor/connect 9.4.8-beta.2 → 9.5.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.
Files changed (97) hide show
  1. package/CHANGELOG.md +59 -44
  2. package/README.md +1 -1
  3. package/lib/api/authorizeCoinjoin.js +1 -1
  4. package/lib/api/binance/api/binanceGetAddress.js +2 -4
  5. package/lib/api/binance/api/binanceGetPublicKey.js +1 -0
  6. package/lib/api/binance/api/binanceSignTransaction.js +1 -2
  7. package/lib/api/bitcoin/Fees.js +4 -1
  8. package/lib/api/bitcoin/TransactionComposer.js +9 -2
  9. package/lib/api/bitcoin/enhanceSignTx.js +1 -2
  10. package/lib/api/bitcoin/refTx.js +4 -6
  11. package/lib/api/blockchainDisconnect.js +1 -1
  12. package/lib/api/blockchainSubscribe.js +1 -2
  13. package/lib/api/blockchainUnsubscribe.js +1 -2
  14. package/lib/api/cardano/api/cardanoComposeTransaction.js +1 -1
  15. package/lib/api/cardano/api/cardanoGetAddress.js +2 -4
  16. package/lib/api/cardano/api/cardanoGetPublicKey.js +1 -0
  17. package/lib/api/cardano/cardanoAuxiliaryData.js +2 -2
  18. package/lib/api/cardano/cardanoUtils.js +5 -6
  19. package/lib/api/cipherKeyValue.js +1 -0
  20. package/lib/api/common/Discovery.js +16 -1
  21. package/lib/api/common/paramsValidator.js +2 -2
  22. package/lib/api/composeTransaction.js +6 -6
  23. package/lib/api/eos/api/eosGetPublicKey.js +1 -0
  24. package/lib/api/ethereum/api/ethereumGetAddress.js +2 -4
  25. package/lib/api/ethereum/api/ethereumGetPublicKey.js +1 -0
  26. package/lib/api/ethereum/api/ethereumSignMessage.js +1 -2
  27. package/lib/api/ethereum/api/ethereumSignTransaction.js +1 -1
  28. package/lib/api/ethereum/api/ethereumSignTypedData.js +1 -1
  29. package/lib/api/ethereum/ethereumDefinitions.js +2 -2
  30. package/lib/api/ethereum/ethereumSignTx.d.ts +2 -2
  31. package/lib/api/ethereum/ethereumSignTx.js +3 -2
  32. package/lib/api/firmware/verifyAuthenticityProof.js +3 -3
  33. package/lib/api/getAccountDescriptor.js +2 -4
  34. package/lib/api/getAccountInfo.js +4 -5
  35. package/lib/api/getAddress.js +5 -8
  36. package/lib/api/getDeviceState.js +1 -1
  37. package/lib/api/getOwnershipId.js +1 -0
  38. package/lib/api/getOwnershipProof.js +1 -0
  39. package/lib/api/getPublicKey.js +3 -2
  40. package/lib/api/nem/api/nemGetAddress.js +2 -4
  41. package/lib/api/nem/api/nemSignTransaction.js +1 -2
  42. package/lib/api/requestLogin.js +1 -0
  43. package/lib/api/ripple/api/rippleGetAddress.js +2 -4
  44. package/lib/api/signMessage.js +1 -2
  45. package/lib/api/signTransaction.js +6 -8
  46. package/lib/api/solana/additionalInfo.js +2 -3
  47. package/lib/api/solana/api/solanaComposeTransaction.js +2 -3
  48. package/lib/api/solana/api/solanaGetAddress.js +2 -4
  49. package/lib/api/solana/api/solanaGetPublicKey.js +1 -0
  50. package/lib/api/solana/solanaUtils.js +6 -5
  51. package/lib/api/stellar/api/stellarGetAddress.js +2 -4
  52. package/lib/api/tezos/api/tezosGetAddress.js +2 -4
  53. package/lib/api/tezos/api/tezosGetPublicKey.js +1 -0
  54. package/lib/backend/BackendManager.js +11 -16
  55. package/lib/backend/Blockchain.js +10 -4
  56. package/lib/backend/BlockchainLink.js +1 -1
  57. package/lib/constants/errors.js +2 -0
  58. package/lib/core/AbstractMethod.js +30 -5
  59. package/lib/core/index.js +24 -34
  60. package/lib/core/onCallFirmwareUpdate.d.ts +3 -2
  61. package/lib/core/onCallFirmwareUpdate.js +12 -59
  62. package/lib/data/DataManager.js +3 -2
  63. package/lib/data/analyticsInfo.js +10 -11
  64. package/lib/data/connectSettings.js +3 -2
  65. package/lib/data/defaultFeeLevels.js +4 -7
  66. package/lib/data/deviceAuthenticityConfig.js +16 -1
  67. package/lib/data/firmwareInfo.js +5 -6
  68. package/lib/data/version.d.ts +1 -1
  69. package/lib/data/version.js +1 -1
  70. package/lib/device/Device.d.ts +10 -2
  71. package/lib/device/Device.js +65 -56
  72. package/lib/device/DeviceCommands.d.ts +5 -1
  73. package/lib/device/DeviceCommands.js +7 -2
  74. package/lib/device/DeviceList.d.ts +2 -0
  75. package/lib/device/DeviceList.js +44 -24
  76. package/lib/device/StateStorage.js +5 -6
  77. package/lib/device/checkFirmwareRevision.js +11 -6
  78. package/lib/device/prompts.js +4 -7
  79. package/lib/events/call.d.ts +1 -0
  80. package/lib/events/call.js +3 -3
  81. package/lib/impl/core-in-module.js +25 -23
  82. package/lib/impl/dynamic.js +7 -1
  83. package/lib/index.js +9 -12
  84. package/lib/types/api/ethereum/index.d.ts +4 -4
  85. package/lib/types/api/ethereum/index.js +2 -2
  86. package/lib/types/api/firmwareUpdate.d.ts +1 -8
  87. package/lib/utils/assets.js +1 -1
  88. package/lib/utils/assets.native.js +1 -1
  89. package/lib/utils/hdnodeUtils.js +1 -2
  90. package/lib/utils/interactionTimeout.js +2 -2
  91. package/lib/utils/popupPromiseManager.js +2 -2
  92. package/lib/utils/proxy-event-emitter.js +1 -0
  93. package/lib/utils/uiPromiseManager.js +3 -4
  94. package/lib/utils/urlUtils.js +5 -8
  95. package/package.json +14 -14
  96. package/lib/utils/abortablePromise.d.ts +0 -5
  97. package/lib/utils/abortablePromise.js +0 -17
@@ -8,12 +8,12 @@ export declare const serializeEthereumTx: (tx: EthereumTransactionEIP1559 | Ethe
8
8
  r: `0x${string}`;
9
9
  s: `0x${string}`;
10
10
  }, isLegacy: boolean) => string;
11
- export declare const ethereumSignTx: (typedCall: TypedCall, address_n: number[], to: string, value: string, gas_limit: string, gas_price: string, nonce: string, chain_id: number, chunkify: boolean, data?: string, tx_type?: number, definitions?: MessagesSchema.EthereumDefinitions) => Promise<{
11
+ export declare const ethereumSignTx: (typedCall: TypedCall, address_n: number[], to: string | null, value: string, gas_limit: string, gas_price: string, nonce: string, chain_id: number, chunkify: boolean, data?: string, tx_type?: number, definitions?: MessagesSchema.EthereumDefinitions) => Promise<{
12
12
  v: `0x${string}`;
13
13
  r: `0x${string}`;
14
14
  s: `0x${string}`;
15
15
  }>;
16
- export declare const ethereumSignTxEIP1559: (typedCall: TypedCall, address_n: number[], to: string, value: string, gas_limit: string, max_gas_fee: string, max_priority_fee: string, nonce: string, chain_id: number, chunkify: boolean, data?: string, access_list?: EthereumAccessList[], definitions?: MessagesSchema.EthereumDefinitions) => Promise<{
16
+ export declare const ethereumSignTxEIP1559: (typedCall: TypedCall, address_n: number[], to: string | null, value: string, gas_limit: string, max_gas_fee: string, max_priority_fee: string, nonce: string, chain_id: number, chunkify: boolean, data?: string, access_list?: EthereumAccessList[], definitions?: MessagesSchema.EthereumDefinitions) => Promise<{
17
17
  v: `0x${string}`;
18
18
  r: `0x${string}`;
19
19
  s: `0x${string}`;
@@ -47,6 +47,7 @@ const serializeEthereumTx = (tx, signature, isLegacy) => {
47
47
  const txData = deepHexPrefix({
48
48
  ...tx,
49
49
  ...signature,
50
+ to: tx.to || undefined,
50
51
  type: isLegacy ? 0 : 2,
51
52
  ...(isLegacy
52
53
  ? {
@@ -82,7 +83,7 @@ const ethereumSignTx = async (typedCall, address_n, to, value, gas_limit, gas_pr
82
83
  nonce: stripLeadingZeroes(nonce),
83
84
  gas_price: stripLeadingZeroes(gas_price),
84
85
  gas_limit: stripLeadingZeroes(gas_limit),
85
- to,
86
+ to: to || undefined,
86
87
  value: stripLeadingZeroes(value),
87
88
  definitions,
88
89
  chunkify,
@@ -113,7 +114,7 @@ const ethereumSignTxEIP1559 = async (typedCall, address_n, to, value, gas_limit,
113
114
  max_gas_fee: stripLeadingZeroes(max_gas_fee),
114
115
  max_priority_fee: stripLeadingZeroes(max_priority_fee),
115
116
  gas_limit: stripLeadingZeroes(gas_limit),
116
- to,
117
+ to: to || undefined,
117
118
  value: stripLeadingZeroes(value),
118
119
  data_length: length,
119
120
  data_initial_chunk: first,
@@ -64,12 +64,12 @@ const verifyAuthenticityProof = async ({ certificates, signature, challenge, con
64
64
  });
65
65
  const caPubKey = Buffer.from(caCert.tbsCertificate.subjectPublicKeyInfo.bits.bytes).toString('hex');
66
66
  const rootPubKeys = allowDebugKeys
67
- ? modelConfig.rootPubKeys.concat((debug === null || debug === void 0 ? void 0 : debug.rootPubKeys) || [])
67
+ ? modelConfig.rootPubKeys.concat(debug?.rootPubKeys || [])
68
68
  : modelConfig.rootPubKeys;
69
69
  const isCertSignedByRootPubkey = await Promise.all(rootPubKeys.map(rootPubKey => verifySignature(Buffer.from(rootPubKey, 'hex'), caCert.tbsCertificate.asn1.raw, caCert.signatureValue.bits.bytes)));
70
70
  const rootPubKeyIndex = isCertSignedByRootPubkey.findIndex(valid => !!valid);
71
71
  const rootPubKey = rootPubKeys[rootPubKeyIndex];
72
- const isDebugRootPubKey = debug === null || debug === void 0 ? void 0 : debug.rootPubKeys.includes(rootPubKey);
72
+ const isDebugRootPubKey = debug?.rootPubKeys.includes(rootPubKey);
73
73
  const caCertValidityFrom = caCert.tbsCertificate.validity.from.getTime();
74
74
  if (caCertValidityFrom > new Date().getTime()) {
75
75
  throw new Error(`CA validity from ${caCertValidityFrom} cant't be in the future!`);
@@ -106,7 +106,7 @@ const verifyAuthenticityProof = async ({ certificates, signature, challenge, con
106
106
  const isSignatureValid = await verifySignature(Buffer.from(deviceCert.tbsCertificate.subjectPublicKeyInfo.bits.bytes), prefixedChallenge, (0, x509certificate_1.fixSignature)(Buffer.from(signature, 'hex')));
107
107
  if (rootPubKey && isDeviceCertValid && isSignatureValid) {
108
108
  if ((!isDebugRootPubKey && !caPubKeys.includes(caPubKey)) ||
109
- (isDebugRootPubKey && !(debug === null || debug === void 0 ? void 0 : debug.caPubKeys.includes(caPubKey)))) {
109
+ (isDebugRootPubKey && !debug?.caPubKeys.includes(caPubKey))) {
110
110
  const configExpired = new Date(config.timestamp).getTime() < caCertValidityFrom;
111
111
  return {
112
112
  valid: false,
@@ -11,10 +11,8 @@ const getAccountDescriptor_1 = require("../types/api/getAccountDescriptor");
11
11
  const accountUtils_1 = require("../utils/accountUtils");
12
12
  const pathUtils_1 = require("../utils/pathUtils");
13
13
  class GetAccountDescriptor extends AbstractMethod_1.AbstractMethod {
14
- constructor() {
15
- super(...arguments);
16
- this.disposed = false;
17
- }
14
+ disposed = false;
15
+ hasBundle;
18
16
  init() {
19
17
  this.requiredPermissions = ['read'];
20
18
  this.useDevice = true;
@@ -11,10 +11,9 @@ const paramsValidator_1 = require("./common/paramsValidator");
11
11
  const accountUtils_1 = require("../utils/accountUtils");
12
12
  const pathUtils_1 = require("../utils/pathUtils");
13
13
  class GetAccountInfo extends AbstractMethod_1.AbstractMethod {
14
- constructor() {
15
- super(...arguments);
16
- this.disposed = false;
17
- }
14
+ disposed = false;
15
+ hasBundle;
16
+ discovery;
18
17
  init() {
19
18
  this.requiredPermissions = ['read'];
20
19
  this.useDevice = true;
@@ -283,7 +282,7 @@ class GetAccountInfo extends AbstractMethod_1.AbstractMethod {
283
282
  discovery.stop();
284
283
  const account = discovery.accounts[uiResp.payload];
285
284
  if (!discovery.completed) {
286
- await (0, resolveAfter_1.resolveAfter)(501).promise;
285
+ await (0, resolveAfter_1.resolveAfter)(501);
287
286
  }
288
287
  const info = await blockchain.getAccountInfo({
289
288
  descriptor: account.descriptor,
@@ -10,10 +10,8 @@ const types_1 = require("../types");
10
10
  const getAddress_1 = require("../types/api/getAddress");
11
11
  const pathUtils_1 = require("../utils/pathUtils");
12
12
  class GetAddress extends AbstractMethod_1.AbstractMethod {
13
- constructor() {
14
- super(...arguments);
15
- this.progress = 0;
16
- }
13
+ hasBundle;
14
+ progress = 0;
17
15
  init() {
18
16
  this.noBackupConfirmationMode = 'always';
19
17
  this.requiredPermissions = ['read'];
@@ -21,10 +19,9 @@ class GetAddress extends AbstractMethod_1.AbstractMethod {
21
19
  const payload = !this.payload.bundle
22
20
  ? { ...this.payload, bundle: [this.payload] }
23
21
  : this.payload;
24
- payload === null || payload === void 0 ? void 0 : payload.bundle.forEach(bundleElement => {
25
- var _a, _b;
26
- if (bundleElement.multisig && ((_a = bundleElement.multisig) === null || _a === void 0 ? void 0 : _a.signatures) === undefined) {
27
- bundleElement.multisig.signatures = Array((_b = bundleElement.multisig) === null || _b === void 0 ? void 0 : _b.pubkeys.length).fill('');
22
+ payload?.bundle.forEach(bundleElement => {
23
+ if (bundleElement.multisig && bundleElement.multisig?.signatures === undefined) {
24
+ bundleElement.multisig.signatures = Array(bundleElement.multisig?.pubkeys.length).fill('');
28
25
  }
29
26
  });
30
27
  (0, schema_utils_1.Assert)((0, types_1.Bundle)(getAddress_1.GetAddress), payload);
@@ -8,7 +8,7 @@ class GetDeviceState extends AbstractMethod_1.AbstractMethod {
8
8
  }
9
9
  run() {
10
10
  const state = this.device.getState();
11
- if (!(state === null || state === void 0 ? void 0 : state.staticSessionId)) {
11
+ if (!state?.staticSessionId) {
12
12
  throw constants_1.ERRORS.TypedError('Runtime', 'Device state not set');
13
13
  }
14
14
  return Promise.resolve({ state: state.staticSessionId, _state: state });
@@ -9,6 +9,7 @@ const exports_1 = require("../exports");
9
9
  const getOwnershipId_1 = require("../types/api/getOwnershipId");
10
10
  const pathUtils_1 = require("../utils/pathUtils");
11
11
  class GetOwnershipId extends AbstractMethod_1.AbstractMethod {
12
+ hasBundle;
12
13
  init() {
13
14
  this.requiredPermissions = ['read'];
14
15
  this.hasBundle = !!this.payload.bundle;
@@ -9,6 +9,7 @@ const exports_1 = require("../exports");
9
9
  const getOwnershipProof_1 = require("../types/api/getOwnershipProof");
10
10
  const pathUtils_1 = require("../utils/pathUtils");
11
11
  class GetOwnershipProof extends AbstractMethod_1.AbstractMethod {
12
+ hasBundle;
12
13
  init() {
13
14
  this.requiredPermissions = ['read'];
14
15
  this.hasBundle = !!this.payload.bundle;
@@ -10,6 +10,7 @@ const getPublicKey_1 = require("../types/api/getPublicKey");
10
10
  const accountUtils_1 = require("../utils/accountUtils");
11
11
  const pathUtils_1 = require("../utils/pathUtils");
12
12
  class GetPublicKey extends AbstractMethod_1.AbstractMethod {
13
+ hasBundle;
13
14
  init() {
14
15
  this.requiredPermissions = ['read'];
15
16
  this.hasBundle = !!this.payload.bundle;
@@ -32,7 +33,7 @@ class GetPublicKey extends AbstractMethod_1.AbstractMethod {
32
33
  this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, coinInfo, this.firmwareRange);
33
34
  return {
34
35
  address_n,
35
- coin_name: coinInfo === null || coinInfo === void 0 ? void 0 : coinInfo.name,
36
+ coin_name: coinInfo?.name,
36
37
  show_display: batch.showOnTrezor,
37
38
  script_type: batch.scriptType,
38
39
  ignore_xpub_magic: batch.ignoreXpubMagic,
@@ -62,7 +63,7 @@ class GetPublicKey extends AbstractMethod_1.AbstractMethod {
62
63
  const cmd = this.device.getCommands();
63
64
  for (let i = 0; i < this.params.length; i++) {
64
65
  const { coinInfo, unlockPath, ...batch } = this.params[i];
65
- const coinInfoFallback = coinInfo !== null && coinInfo !== void 0 ? coinInfo : (0, coinInfo_1.getBitcoinNetwork)('btc');
66
+ const coinInfoFallback = coinInfo ?? (0, coinInfo_1.getBitcoinNetwork)('btc');
66
67
  const response = await cmd.getHDNode(batch, { coinInfo: coinInfoFallback, unlockPath });
67
68
  responses.push(response);
68
69
  if (this.hasBundle) {
@@ -13,10 +13,8 @@ const MAINNET = 0x68;
13
13
  const TESTNET = 0x98;
14
14
  const MIJIN = 0x60;
15
15
  class NEMGetAddress extends AbstractMethod_1.AbstractMethod {
16
- constructor() {
17
- super(...arguments);
18
- this.progress = 0;
19
- }
16
+ hasBundle;
17
+ progress = 0;
20
18
  init() {
21
19
  this.noBackupConfirmationMode = 'always';
22
20
  this.requiredPermissions = ['read'];
@@ -10,12 +10,11 @@ const paramsValidator_1 = require("../../common/paramsValidator");
10
10
  const helper = tslib_1.__importStar(require("../nemSignTx"));
11
11
  class NEMSignTransaction extends AbstractMethod_1.AbstractMethod {
12
12
  init() {
13
- var _a;
14
13
  this.requiredPermissions = ['read', 'write'];
15
14
  this.requiredDeviceCapabilities = ['Capability_NEM'];
16
15
  this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, (0, coinInfo_1.getMiscNetwork)('NEM'), this.firmwareRange);
17
16
  const { payload } = this;
18
- if ((_a = payload === null || payload === void 0 ? void 0 : payload.transaction) === null || _a === void 0 ? void 0 : _a.timestamp) {
17
+ if (payload?.transaction?.timestamp) {
19
18
  payload.transaction.timeStamp = payload.transaction.timestamp;
20
19
  }
21
20
  (0, schema_utils_1.AssertWeak)(nem_1.NEMSignTransaction, payload);
@@ -8,6 +8,7 @@ const paramsValidator_1 = require("./common/paramsValidator");
8
8
  const DataManager_1 = require("../data/DataManager");
9
9
  const requestLogin_1 = require("../types/api/requestLogin");
10
10
  class RequestLogin extends AbstractMethod_1.AbstractMethod {
11
+ asyncChallenge;
11
12
  init() {
12
13
  this.requiredPermissions = ['read', 'write'];
13
14
  this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, null, this.firmwareRange);
@@ -10,10 +10,8 @@ const getAddress_1 = require("../../../types/api/getAddress");
10
10
  const pathUtils_1 = require("../../../utils/pathUtils");
11
11
  const paramsValidator_1 = require("../../common/paramsValidator");
12
12
  class RippleGetAddress extends AbstractMethod_1.AbstractMethod {
13
- constructor() {
14
- super(...arguments);
15
- this.progress = 0;
16
- }
13
+ hasBundle;
14
+ progress = 0;
17
15
  init() {
18
16
  this.noBackupConfirmationMode = 'always';
19
17
  this.requiredPermissions = ['read'];
@@ -35,8 +35,7 @@ class SignMessage extends AbstractMethod_1.AbstractMethod {
35
35
  };
36
36
  }
37
37
  get info() {
38
- var _a;
39
- const coinInfo = (0, coinInfo_1.getBitcoinNetwork)((_a = this.payload.coin) !== null && _a !== void 0 ? _a : this.params.address_n);
38
+ const coinInfo = (0, coinInfo_1.getBitcoinNetwork)(this.payload.coin ?? this.params.address_n);
40
39
  return (0, pathUtils_1.getLabel)('Sign #NETWORK message', coinInfo);
41
40
  }
42
41
  async run() {
@@ -10,7 +10,6 @@ const coinInfo_1 = require("../data/coinInfo");
10
10
  const pathUtils_1 = require("../utils/pathUtils");
11
11
  class SignTransaction extends AbstractMethod_1.AbstractMethod {
12
12
  init() {
13
- var _a, _b, _c;
14
13
  this.requiredPermissions = ['read', 'write'];
15
14
  const { payload } = this;
16
15
  (0, paramsValidator_1.validateParams)(payload, [
@@ -51,15 +50,15 @@ class SignTransaction extends AbstractMethod_1.AbstractMethod {
51
50
  this.preauthorized = payload.preauthorized;
52
51
  const inputs = (0, bitcoin_1.validateTrezorInputs)(payload.inputs, coinInfo);
53
52
  const outputs = (0, bitcoin_1.validateTrezorOutputs)(payload.outputs, coinInfo);
54
- if (payload.refTxs && ((_a = payload.account) === null || _a === void 0 ? void 0 : _a.transactions)) {
53
+ if (payload.refTxs && payload.account?.transactions) {
55
54
  console.warn('two sources of referential transactions were passed. payload.refTxs have precedence');
56
55
  }
57
56
  const refTxs = (0, bitcoin_1.validateReferencedTransactions)({
58
- transactions: payload.refTxs || ((_b = payload.account) === null || _b === void 0 ? void 0 : _b.transactions),
57
+ transactions: payload.refTxs || payload.account?.transactions,
59
58
  inputs,
60
59
  outputs,
61
60
  coinInfo,
62
- addresses: (_c = payload.account) === null || _c === void 0 ? void 0 : _c.addresses,
61
+ addresses: payload.account?.addresses,
63
62
  });
64
63
  const outputsWithAmount = outputs.filter(output => typeof output.amount === 'string' &&
65
64
  !Object.prototype.hasOwnProperty.call(output, 'op_return_data'));
@@ -142,7 +141,7 @@ class SignTransaction extends AbstractMethod_1.AbstractMethod {
142
141
  .getTransactionHexes(origTxsIds)
143
142
  .then((0, bitcoin_1.parseTransactionHexes)(coinInfo.network))
144
143
  .then(async (rawOrigTxs) => {
145
- const accountAddresses = addresses !== null && addresses !== void 0 ? addresses : (await this.fetchAddresses(blockchain));
144
+ const accountAddresses = addresses ?? (await this.fetchAddresses(blockchain));
146
145
  if (!accountAddresses)
147
146
  return [];
148
147
  return (0, bitcoin_1.transformOrigTransactions)(rawOrigTxs, coinInfo, inputs, accountAddresses);
@@ -150,10 +149,9 @@ class SignTransaction extends AbstractMethod_1.AbstractMethod {
150
149
  return refTxs.concat(origTxs);
151
150
  }
152
151
  async run() {
153
- var _a;
154
152
  const { device, params } = this;
155
153
  const useLegacySignProcess = !!device.unavailableCapabilities.replaceTransaction;
156
- const refTxs = (_a = params.refTxs) !== null && _a !== void 0 ? _a : (await this.fetchRefTxs(useLegacySignProcess));
154
+ const refTxs = params.refTxs ?? (await this.fetchRefTxs(useLegacySignProcess));
157
155
  if (this.preauthorized) {
158
156
  await device.getCommands().preauthorize(true);
159
157
  }
@@ -176,7 +174,7 @@ class SignTransaction extends AbstractMethod_1.AbstractMethod {
176
174
  else {
177
175
  bitcoinTx = await (0, bitcoin_1.verifyTx)(device.getCommands().getHDNode.bind(device.getCommands()), params.inputs, params.outputs, response.serializedTx, params.coinInfo, params.unlockPath);
178
176
  if (bitcoinTx.hasWitnesses()) {
179
- response.witnesses = bitcoinTx.ins.map((_, i) => { var _a; return (_a = bitcoinTx === null || bitcoinTx === void 0 ? void 0 : bitcoinTx.getWitness(i)) === null || _a === void 0 ? void 0 : _a.toString('hex'); });
177
+ response.witnesses = bitcoinTx.ins.map((_, i) => bitcoinTx?.getWitness(i)?.toString('hex'));
180
178
  }
181
179
  }
182
180
  if (bitcoinTx && params.addresses) {
@@ -4,18 +4,17 @@ exports.transformAdditionalInfo = void 0;
4
4
  const schema_utils_1 = require("@trezor/schema-utils");
5
5
  const solana_1 = require("../../types/api/solana");
6
6
  const transformAdditionalInfo = (additionalInfo) => {
7
- var _a;
8
7
  if (!additionalInfo) {
9
8
  return undefined;
10
9
  }
11
10
  (0, schema_utils_1.Assert)(solana_1.SolanaTxAdditionalInfo, additionalInfo);
12
11
  return {
13
- token_accounts_infos: ((_a = additionalInfo.tokenAccountsInfos) === null || _a === void 0 ? void 0 : _a.map(tokenAccountInfo => ({
12
+ token_accounts_infos: additionalInfo.tokenAccountsInfos?.map(tokenAccountInfo => ({
14
13
  base_address: tokenAccountInfo.baseAddress,
15
14
  token_program: tokenAccountInfo.tokenProgram,
16
15
  token_mint: tokenAccountInfo.tokenMint,
17
16
  token_account: tokenAccountInfo.tokenAccount,
18
- }))) || [],
17
+ })) || [],
19
18
  };
20
19
  };
21
20
  exports.transformAdditionalInfo = transformAdditionalInfo;
@@ -28,7 +28,6 @@ class SolanaComposeTransaction extends AbstractMethod_1.AbstractMethod {
28
28
  return 'Compose Solana transaction';
29
29
  }
30
30
  async run() {
31
- var _a;
32
31
  const backend = await (0, BlockchainLink_1.initBlockchain)(this.params.coinInfo, this.postMessage, this.params.identity);
33
32
  const [recipientAccountOwner, recipientTokenAccounts] = this.params.token
34
33
  ? await (0, solanaUtils_1.fetchAccountOwnerAndTokenInfoForAddress)(backend, this.params.toAddress, this.params.token.mint, this.params.token.program)
@@ -45,14 +44,14 @@ class SolanaComposeTransaction extends AbstractMethod_1.AbstractMethod {
45
44
  recipientTokenAccounts === undefined &&
46
45
  (recipientAccountOwner === solana_1.SYSTEM_PROGRAM_PUBLIC_KEY || recipientAccountOwner == null);
47
46
  const newTokenAccountProgramName = isCreatingAccount
48
- ? (_a = this.params.token) === null || _a === void 0 ? void 0 : _a.program
47
+ ? this.params.token?.program
49
48
  : undefined;
50
49
  return {
51
50
  serializedTx: tx.serialize(),
52
51
  additionalInfo: {
53
52
  isCreatingAccount: !!isCreatingAccount,
54
53
  newTokenAccountProgramName,
55
- tokenAccountInfo: tokenTransferTxAndDestinationAddress === null || tokenTransferTxAndDestinationAddress === void 0 ? void 0 : tokenTransferTxAndDestinationAddress.tokenAccountInfo,
54
+ tokenAccountInfo: tokenTransferTxAndDestinationAddress?.tokenAccountInfo,
56
55
  },
57
56
  };
58
57
  }
@@ -10,10 +10,8 @@ const getAddress_1 = require("../../../types/api/getAddress");
10
10
  const pathUtils_1 = require("../../../utils/pathUtils");
11
11
  const paramsValidator_1 = require("../../common/paramsValidator");
12
12
  class SolanaGetAddress extends AbstractMethod_1.AbstractMethod {
13
- constructor() {
14
- super(...arguments);
15
- this.progress = 0;
16
- }
13
+ hasBundle;
14
+ progress = 0;
17
15
  init() {
18
16
  this.noBackupConfirmationMode = 'always';
19
17
  this.requiredPermissions = ['read'];
@@ -8,6 +8,7 @@ const types_1 = require("../../../types");
8
8
  const pathUtils_1 = require("../../../utils/pathUtils");
9
9
  const paramsValidator_1 = require("../../common/paramsValidator");
10
10
  class SolanaGetPublicKey extends AbstractMethod_1.AbstractMethod {
11
+ hasBundle;
11
12
  init() {
12
13
  this.noBackupConfirmationMode = 'always';
13
14
  this.requiredPermissions = ['read'];
@@ -98,7 +98,7 @@ const buildTransferTransaction = async (fromAddress, toAddress, amountInSol, blo
98
98
  const [{ address, appendTransactionMessageInstruction, createTransactionMessage, lamports, setTransactionMessageLifetimeUsingBlockhash, setTransactionMessageFeePayer, createNoopSigner, }, { getTransferSolInstruction },] = await Promise.all([loadSolanaLib(), loadSolanaSystemProgramLib()]);
99
99
  const message = await (0, ts_belt_1.pipe)(createTransactionMessage({ version: 'legacy' }), m => setTransactionMessageFeePayer(address(fromAddress), m), m => setTransactionMessageLifetimeUsingBlockhash({
100
100
  blockhash: blockhash,
101
- lastValidBlockHeight: BigInt(lastValidBlockHeight !== null && lastValidBlockHeight !== void 0 ? lastValidBlockHeight : '0xFFFFFFFFFFFFFFFF'),
101
+ lastValidBlockHeight: BigInt(lastValidBlockHeight ?? '0xFFFFFFFFFFFFFFFF'),
102
102
  }, m), m => appendTransactionMessageInstruction(getTransferSolInstruction({
103
103
  amount: lamports((0, exports.getLamportsFromSol)(amountInSol)),
104
104
  destination: address(toAddress),
@@ -156,7 +156,7 @@ const buildTokenTransferTransaction = async (fromAddress, toAddress, toAddressOw
156
156
  const { address, appendTransactionMessageInstruction, appendTransactionMessageInstructions, createTransactionMessage, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, } = await loadSolanaLib();
157
157
  let message = await (0, ts_belt_1.pipe)(createTransactionMessage({ version: 'legacy' }), m => setTransactionMessageFeePayer(address(fromAddress), m), m => setTransactionMessageLifetimeUsingBlockhash({
158
158
  blockhash: blockhash,
159
- lastValidBlockHeight: BigInt(lastValidBlockHeight !== null && lastValidBlockHeight !== void 0 ? lastValidBlockHeight : '0xFFFFFFFFFFFFFFFF'),
159
+ lastValidBlockHeight: BigInt(lastValidBlockHeight ?? '0xFFFFFFFFFFFFFFFF'),
160
160
  }, m), m => addPriorityFees(m, priorityFees));
161
161
  const tokenAmount = new bigNumber_1.BigNumber(tokenUiAmount).times(10 ** tokenDecimals);
162
162
  const requiredAccounts = (0, exports.getMinimumRequiredTokenAccountsForTransfer)(fromTokenAccounts, tokenAmount.toString());
@@ -195,7 +195,6 @@ const buildTokenTransferTransaction = async (fromAddress, toAddress, toAddressOw
195
195
  };
196
196
  exports.buildTokenTransferTransaction = buildTokenTransferTransaction;
197
197
  const fetchAccountOwnerAndTokenInfoForAddress = async (blockchain, address, mint, tokenProgram) => {
198
- var _a, _b, _c, _d;
199
198
  let accountOwner;
200
199
  let tokenInfo;
201
200
  const accountInfoResponse = await blockchain.getAccountInfo({
@@ -204,8 +203,10 @@ const fetchAccountOwnerAndTokenInfoForAddress = async (blockchain, address, mint
204
203
  });
205
204
  if (accountInfoResponse) {
206
205
  const associatedTokenAccount = await (0, exports.getAssociatedTokenAccountAddress)(address, mint, tokenProgram);
207
- accountOwner = (_a = accountInfoResponse === null || accountInfoResponse === void 0 ? void 0 : accountInfoResponse.misc) === null || _a === void 0 ? void 0 : _a.owner;
208
- tokenInfo = (_d = (_c = (_b = accountInfoResponse === null || accountInfoResponse === void 0 ? void 0 : accountInfoResponse.tokens) === null || _b === void 0 ? void 0 : _b.find(token => token.contract === mint)) === null || _c === void 0 ? void 0 : _c.accounts) === null || _d === void 0 ? void 0 : _d.find(account => associatedTokenAccount.toString() === account.publicKey);
206
+ accountOwner = accountInfoResponse?.misc?.owner;
207
+ tokenInfo = accountInfoResponse?.tokens
208
+ ?.find(token => token.contract === mint)
209
+ ?.accounts?.find(account => associatedTokenAccount.toString() === account.publicKey);
209
210
  }
210
211
  return [accountOwner, tokenInfo];
211
212
  };
@@ -10,10 +10,8 @@ const getAddress_1 = require("../../../types/api/getAddress");
10
10
  const pathUtils_1 = require("../../../utils/pathUtils");
11
11
  const paramsValidator_1 = require("../../common/paramsValidator");
12
12
  class StellarGetAddress extends AbstractMethod_1.AbstractMethod {
13
- constructor() {
14
- super(...arguments);
15
- this.progress = 0;
16
- }
13
+ hasBundle;
14
+ progress = 0;
17
15
  init() {
18
16
  this.noBackupConfirmationMode = 'always';
19
17
  this.requiredPermissions = ['read'];
@@ -10,10 +10,8 @@ const getAddress_1 = require("../../../types/api/getAddress");
10
10
  const pathUtils_1 = require("../../../utils/pathUtils");
11
11
  const paramsValidator_1 = require("../../common/paramsValidator");
12
12
  class TezosGetAddress extends AbstractMethod_1.AbstractMethod {
13
- constructor() {
14
- super(...arguments);
15
- this.progress = 0;
16
- }
13
+ hasBundle;
14
+ progress = 0;
17
15
  init() {
18
16
  this.noBackupConfirmationMode = 'always';
19
17
  this.requiredPermissions = ['read'];
@@ -8,6 +8,7 @@ const types_1 = require("../../../types");
8
8
  const pathUtils_1 = require("../../../utils/pathUtils");
9
9
  const paramsValidator_1 = require("../../common/paramsValidator");
10
10
  class TezosGetPublicKey extends AbstractMethod_1.AbstractMethod {
11
+ hasBundle;
11
12
  init() {
12
13
  this.requiredPermissions = ['read'];
13
14
  this.requiredDeviceCapabilities = ['Capability_Tezos'];
@@ -7,18 +7,15 @@ const DataManager_1 = require("../data/DataManager");
7
7
  const events_1 = require("../events");
8
8
  const DEFAULT_IDENTITY = 'default';
9
9
  class BackendManager {
10
- constructor() {
11
- this.instances = {};
12
- this.reconnect = {};
13
- this.custom = {};
14
- this.preferred = {};
15
- }
10
+ instances = {};
11
+ reconnect = {};
12
+ custom = {};
13
+ preferred = {};
16
14
  get(shortcut, identity = DEFAULT_IDENTITY) {
17
- var _a;
18
- return (_a = this.instances[`${shortcut}/${identity}`]) !== null && _a !== void 0 ? _a : null;
15
+ return this.instances[`${shortcut}/${identity}`] ?? null;
19
16
  }
20
17
  async getOrConnect({ coinInfo, postMessage, identity }) {
21
- const coinIdentity = `${coinInfo.shortcut}/${identity !== null && identity !== void 0 ? identity : DEFAULT_IDENTITY}`;
18
+ const coinIdentity = `${coinInfo.shortcut}/${identity ?? DEFAULT_IDENTITY}`;
22
19
  let backend = this.instances[coinIdentity];
23
20
  if (!backend) {
24
21
  backend = new Blockchain_1.Blockchain({
@@ -41,7 +38,7 @@ class BackendManager {
41
38
  return backend;
42
39
  }
43
40
  catch (error) {
44
- this.onDisconnect({ coinInfo, postMessage, identity }, reconnect === null || reconnect === void 0 ? void 0 : reconnect.attempts);
41
+ this.onDisconnect({ coinInfo, postMessage, identity }, reconnect?.attempts);
45
42
  throw error;
46
43
  }
47
44
  }
@@ -84,8 +81,7 @@ class BackendManager {
84
81
  this.preferred[shortcut] = url;
85
82
  }
86
83
  onDisconnect({ coinInfo, postMessage, identity }, reconnectAttempt) {
87
- var _a;
88
- const coinIdentity = `${coinInfo.shortcut}/${identity !== null && identity !== void 0 ? identity : DEFAULT_IDENTITY}`;
84
+ const coinIdentity = `${coinInfo.shortcut}/${identity ?? DEFAULT_IDENTITY}`;
89
85
  this.setInstance(coinIdentity, undefined);
90
86
  if (reconnectAttempt === undefined || reconnectAttempt === 4) {
91
87
  this.setPreferred(coinInfo.shortcut, undefined);
@@ -98,21 +94,20 @@ class BackendManager {
98
94
  const handle = setTimeout(() => {
99
95
  this.getOrConnect({ coinInfo, postMessage, identity }).catch(() => { });
100
96
  }, timeout);
101
- clearTimeout((_a = this.reconnect[coinIdentity]) === null || _a === void 0 ? void 0 : _a.handle);
97
+ clearTimeout(this.reconnect[coinIdentity]?.handle);
102
98
  this.reconnect[coinIdentity] = { attempts: reconnectAttempt + 1, handle };
103
99
  postMessage((0, events_1.createBlockchainMessage)(events_1.BLOCKCHAIN.RECONNECTING, { coin: coinInfo, identity, time }));
104
100
  }
105
101
  clearReconnect(coinIdentity) {
106
102
  const reconnect = this.reconnect[coinIdentity];
107
- clearTimeout(reconnect === null || reconnect === void 0 ? void 0 : reconnect.handle);
103
+ clearTimeout(reconnect?.handle);
108
104
  delete this.reconnect[coinIdentity];
109
105
  return reconnect;
110
106
  }
111
107
  patchCoinInfo(coinInfo) {
112
- var _a, _b;
113
108
  const custom = this.custom[coinInfo.shortcut];
114
109
  const preferred = this.preferred[coinInfo.shortcut];
115
- const url = preferred ? [preferred] : (_a = custom === null || custom === void 0 ? void 0 : custom.url) !== null && _a !== void 0 ? _a : (_b = coinInfo.blockchainLink) === null || _b === void 0 ? void 0 : _b.url;
110
+ const url = preferred ? [preferred] : custom?.url ?? coinInfo.blockchainLink?.url;
116
111
  return {
117
112
  ...coinInfo,
118
113
  blockchainLink: {
@@ -29,9 +29,16 @@ const getNormalizedTrezorShortcut = (shortcut) => {
29
29
  return shortcut;
30
30
  };
31
31
  class Blockchain {
32
+ link;
33
+ serverInfo;
34
+ identity;
35
+ coinInfo;
36
+ postMessage;
37
+ feeForBlock = [];
38
+ feeTimestamp = 0;
39
+ onDisconnected;
40
+ initPromise;
32
41
  constructor(options) {
33
- this.feeForBlock = [];
34
- this.feeTimestamp = 0;
35
42
  this.identity = options.identity;
36
43
  this.coinInfo = options.coinInfo;
37
44
  this.postMessage = options.postMessage;
@@ -55,7 +62,6 @@ class Blockchain {
55
62
  });
56
63
  }
57
64
  onError(error) {
58
- var _a;
59
65
  const pendingSubscriptions = this.link.listenerCount('block') ||
60
66
  this.link.listenerCount('notification') ||
61
67
  this.link.listenerCount('fiatRates');
@@ -66,7 +72,7 @@ class Blockchain {
66
72
  error: error.message,
67
73
  code: error.code,
68
74
  }));
69
- (_a = this.onDisconnected) === null || _a === void 0 ? void 0 : _a.call(this, !!pendingSubscriptions);
75
+ this.onDisconnected?.(!!pendingSubscriptions);
70
76
  }
71
77
  async initLink() {
72
78
  let info;
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "Blockchain", { enumerable: true, get: function (
7
7
  const backends = new BackendManager_1.BackendManager();
8
8
  const findBackend = (coin, identity) => backends.get(coin, identity);
9
9
  exports.findBackend = findBackend;
10
- const setCustomBackend = (coinInfo, blockchainLink) => backends.setCustom(coinInfo.shortcut, (blockchainLink === null || blockchainLink === void 0 ? void 0 : blockchainLink.url.length) ? blockchainLink : coinInfo.blockchainLink);
10
+ const setCustomBackend = (coinInfo, blockchainLink) => backends.setCustom(coinInfo.shortcut, blockchainLink?.url.length ? blockchainLink : coinInfo.blockchainLink);
11
11
  exports.setCustomBackend = setCustomBackend;
12
12
  const isBackendSupported = (coinInfo) => backends.isSupported(coinInfo);
13
13
  exports.isBackendSupported = isBackendSupported;
@@ -50,6 +50,8 @@ exports.ERROR_CODES = {
50
50
  Deeplink_VersionMismatch: 'Not compatible with current version of the app',
51
51
  };
52
52
  class TrezorError extends Error {
53
+ code;
54
+ message;
53
55
  constructor(code, message) {
54
56
  super(message);
55
57
  this.code = code;