@trezor/connect 9.2.3 → 9.2.4-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 (104) hide show
  1. package/CHANGELOG.md +43 -5
  2. package/README.md +1 -1
  3. package/lib/api/applyFlags.d.ts +8 -1
  4. package/lib/api/applyFlags.js +3 -8
  5. package/lib/api/applySettings.d.ts +8 -1
  6. package/lib/api/applySettings.js +3 -8
  7. package/lib/api/backupDevice.d.ts +10 -2
  8. package/lib/api/backupDevice.js +12 -9
  9. package/lib/api/binance/api/binanceGetAddress.d.ts +4 -3
  10. package/lib/api/binance/api/binanceGetAddress.js +8 -22
  11. package/lib/api/binance/api/binanceGetPublicKey.d.ts +4 -2
  12. package/lib/api/binance/api/binanceGetPublicKey.js +6 -18
  13. package/lib/api/cardano/api/cardanoGetAddress.d.ts +4 -3
  14. package/lib/api/cardano/api/cardanoGetAddress.js +8 -22
  15. package/lib/api/cardano/api/cardanoGetPublicKey.d.ts +4 -3
  16. package/lib/api/cardano/api/cardanoGetPublicKey.js +9 -31
  17. package/lib/api/changeLanguage.d.ts +8 -1
  18. package/lib/api/changeLanguage.js +3 -7
  19. package/lib/api/eos/api/eosGetPublicKey.d.ts +4 -2
  20. package/lib/api/eos/api/eosGetPublicKey.js +6 -18
  21. package/lib/api/ethereum/api/ethereumGetAddress.d.ts +4 -3
  22. package/lib/api/ethereum/api/ethereumGetAddress.js +4 -20
  23. package/lib/api/ethereum/api/ethereumGetPublicKey.d.ts +4 -2
  24. package/lib/api/ethereum/api/ethereumGetPublicKey.js +3 -10
  25. package/lib/api/firmware/index.d.ts +2 -0
  26. package/lib/api/firmware/index.js +5 -1
  27. package/lib/api/firmware/parseFirmwareHeaders.d.ts +5 -0
  28. package/lib/api/firmware/parseFirmwareHeaders.js +35 -0
  29. package/lib/api/firmware/uploadFirmware.d.ts +1 -1
  30. package/lib/api/firmware/uploadFirmware.js +9 -1
  31. package/lib/api/getAccountDescriptor.d.ts +5 -3
  32. package/lib/api/getAccountDescriptor.js +8 -21
  33. package/lib/api/getAccountInfo.d.ts +23 -7
  34. package/lib/api/getAccountInfo.js +12 -25
  35. package/lib/api/getAddress.d.ts +4 -3
  36. package/lib/api/getAddress.js +8 -22
  37. package/lib/api/getFeatures.d.ts +1 -0
  38. package/lib/api/getOwnershipId.d.ts +4 -2
  39. package/lib/api/getOwnershipId.js +4 -15
  40. package/lib/api/getOwnershipProof.d.ts +4 -2
  41. package/lib/api/getOwnershipProof.js +4 -15
  42. package/lib/api/getPublicKey.d.ts +5 -4
  43. package/lib/api/getPublicKey.js +12 -35
  44. package/lib/api/index.d.ts +0 -1
  45. package/lib/api/index.js +1 -3
  46. package/lib/api/nem/api/nemGetAddress.d.ts +4 -3
  47. package/lib/api/nem/api/nemGetAddress.js +4 -20
  48. package/lib/api/rebootToBootloader.d.ts +8 -2
  49. package/lib/api/rebootToBootloader.js +3 -10
  50. package/lib/api/recoveryDevice.d.ts +8 -1
  51. package/lib/api/recoveryDevice.js +3 -7
  52. package/lib/api/resetDevice.d.ts +4 -2
  53. package/lib/api/resetDevice.js +3 -10
  54. package/lib/api/ripple/api/rippleGetAddress.d.ts +4 -3
  55. package/lib/api/ripple/api/rippleGetAddress.js +4 -20
  56. package/lib/api/solana/api/solanaGetAddress.d.ts +4 -3
  57. package/lib/api/solana/api/solanaGetAddress.js +7 -28
  58. package/lib/api/solana/api/solanaGetPublicKey.d.ts +4 -3
  59. package/lib/api/solana/api/solanaGetPublicKey.js +7 -27
  60. package/lib/api/stellar/api/stellarGetAddress.d.ts +4 -3
  61. package/lib/api/stellar/api/stellarGetAddress.js +4 -20
  62. package/lib/api/tezos/api/tezosGetAddress.d.ts +4 -3
  63. package/lib/api/tezos/api/tezosGetAddress.js +4 -20
  64. package/lib/api/tezos/api/tezosGetPublicKey.d.ts +4 -2
  65. package/lib/api/tezos/api/tezosGetPublicKey.js +6 -18
  66. package/lib/api/wipeDevice.d.ts +8 -2
  67. package/lib/api/wipeDevice.js +3 -10
  68. package/lib/constants/errors.d.ts +1 -0
  69. package/lib/constants/errors.js +1 -0
  70. package/lib/core/AbstractMethod.d.ts +4 -8
  71. package/lib/core/AbstractMethod.js +6 -28
  72. package/lib/core/index.d.ts +2 -1
  73. package/lib/core/index.js +254 -225
  74. package/lib/core/onCallFirmwareUpdate.d.ts +31 -0
  75. package/lib/core/onCallFirmwareUpdate.js +259 -0
  76. package/lib/data/analyticsInfo.d.ts +2 -2
  77. package/lib/data/analyticsInfo.js +6 -7
  78. package/lib/data/deviceAuthenticityConfig.js +8 -4
  79. package/lib/data/firmwareInfo.js +1 -1
  80. package/lib/data/version.d.ts +1 -1
  81. package/lib/data/version.js +1 -1
  82. package/lib/device/Device.d.ts +1 -1
  83. package/lib/device/Device.js +2 -2
  84. package/lib/device/DeviceCommands.d.ts +2 -14
  85. package/lib/device/DeviceCommands.js +1 -43
  86. package/lib/device/DeviceList.d.ts +1 -1
  87. package/lib/device/DeviceList.js +20 -15
  88. package/lib/events/index.d.ts +1 -0
  89. package/lib/events/ui-request.d.ts +13 -1
  90. package/lib/events/ui-request.js +1 -0
  91. package/lib/index.js +2 -2
  92. package/lib/types/api/backupDevice.d.ts +2 -2
  93. package/lib/types/api/dispose.d.ts +1 -1
  94. package/lib/types/api/firmwareUpdate.d.ts +7 -6
  95. package/lib/types/api/firmwareUpdate.js +1 -3
  96. package/lib/utils/popupPromiseManager.d.ts +8 -0
  97. package/lib/utils/popupPromiseManager.js +21 -0
  98. package/lib/utils/uiPromiseManager.d.ts +38 -0
  99. package/lib/utils/uiPromiseManager.js +47 -0
  100. package/lib/workers/workers-browser.d.ts +3 -1
  101. package/lib/workers/workers-browser.js +2 -2
  102. package/package.json +6 -6
  103. package/lib/api/firmwareUpdate.d.ts +0 -19
  104. package/lib/api/firmwareUpdate.js +0 -78
@@ -38,18 +38,11 @@ class EthereumGetPublicKey extends AbstractMethod_1.AbstractMethod {
38
38
  }
39
39
  return 'Export multiple public keys';
40
40
  }
41
- async confirmation() {
42
- if (this.confirmed)
43
- return true;
44
- await this.getPopupPromise().promise;
45
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
46
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
41
+ get confirmation() {
42
+ return {
47
43
  view: 'export-xpub',
48
44
  label: this.info,
49
- }));
50
- const uiResp = await uiPromise.promise;
51
- this.confirmed = uiResp.payload;
52
- return this.confirmed;
45
+ };
53
46
  }
54
47
  async run() {
55
48
  const responses = [];
@@ -1,5 +1,7 @@
1
1
  export { getBinary } from './getBinary';
2
+ export { getLanguage } from '../../data/getLanguage';
2
3
  export { shouldStripFwHeaders, stripFwHeaders } from './modifyFirmware';
3
4
  export { uploadFirmware } from './uploadFirmware';
4
5
  export { calculateFirmwareHash } from './calculateFirmwareHash';
6
+ export { parseFirmwareHeaders } from './parseFirmwareHeaders';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateFirmwareHash = exports.uploadFirmware = exports.stripFwHeaders = exports.shouldStripFwHeaders = exports.getBinary = void 0;
3
+ exports.parseFirmwareHeaders = exports.calculateFirmwareHash = exports.uploadFirmware = exports.stripFwHeaders = exports.shouldStripFwHeaders = exports.getLanguage = exports.getBinary = void 0;
4
4
  var getBinary_1 = require("./getBinary");
5
5
  Object.defineProperty(exports, "getBinary", { enumerable: true, get: function () { return getBinary_1.getBinary; } });
6
+ var getLanguage_1 = require("../../data/getLanguage");
7
+ Object.defineProperty(exports, "getLanguage", { enumerable: true, get: function () { return getLanguage_1.getLanguage; } });
6
8
  var modifyFirmware_1 = require("./modifyFirmware");
7
9
  Object.defineProperty(exports, "shouldStripFwHeaders", { enumerable: true, get: function () { return modifyFirmware_1.shouldStripFwHeaders; } });
8
10
  Object.defineProperty(exports, "stripFwHeaders", { enumerable: true, get: function () { return modifyFirmware_1.stripFwHeaders; } });
@@ -10,4 +12,6 @@ var uploadFirmware_1 = require("./uploadFirmware");
10
12
  Object.defineProperty(exports, "uploadFirmware", { enumerable: true, get: function () { return uploadFirmware_1.uploadFirmware; } });
11
13
  var calculateFirmwareHash_1 = require("./calculateFirmwareHash");
12
14
  Object.defineProperty(exports, "calculateFirmwareHash", { enumerable: true, get: function () { return calculateFirmwareHash_1.calculateFirmwareHash; } });
15
+ var parseFirmwareHeaders_1 = require("./parseFirmwareHeaders");
16
+ Object.defineProperty(exports, "parseFirmwareHeaders", { enumerable: true, get: function () { return parseFirmwareHeaders_1.parseFirmwareHeaders; } });
13
17
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" />
2
+ export declare const parseFirmwareHeaders: (buff: Buffer) => {
3
+ version: [number, number, number];
4
+ };
5
+ //# sourceMappingURL=parseFirmwareHeaders.d.ts.map
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseFirmwareHeaders = void 0;
4
+ const parseFirmwareHeaders = (buff) => {
5
+ const vendorHeader = buff.subarray(0, 4).toString('utf8');
6
+ let trezorImageHeader = '';
7
+ let restbuff;
8
+ if (vendorHeader === 'TRZV') {
9
+ const vendorHeaderLength = buff.readUInt32LE(4);
10
+ trezorImageHeader = buff
11
+ .subarray(vendorHeaderLength, vendorHeaderLength + 4)
12
+ .toString('utf8');
13
+ restbuff = buff.subarray(vendorHeaderLength + 4);
14
+ }
15
+ else if (vendorHeader === 'TRZR') {
16
+ restbuff = buff.subarray(256 + 4);
17
+ trezorImageHeader = buff.subarray(256, 256 + 4).toString('utf8');
18
+ }
19
+ else {
20
+ restbuff = buff.subarray(4);
21
+ trezorImageHeader = buff.subarray(0, 4).toString('utf8');
22
+ }
23
+ if (trezorImageHeader !== 'TRZF') {
24
+ throw new Error(`unexpected header ${vendorHeader}`);
25
+ }
26
+ const version_major = restbuff.readInt8(12);
27
+ const version_minor = restbuff.readInt8(13);
28
+ const version_patch = restbuff.readInt8(14);
29
+ const version = [version_major, version_minor, version_patch];
30
+ return {
31
+ version,
32
+ };
33
+ };
34
+ exports.parseFirmwareHeaders = parseFirmwareHeaders;
35
+ //# sourceMappingURL=parseFirmwareHeaders.js.map
@@ -2,7 +2,7 @@ import { CoreEventMessage } from '../../events';
2
2
  import { PROTO } from '../../constants';
3
3
  import type { Device } from '../../device/Device';
4
4
  import type { TypedCall } from '../../device/DeviceCommands';
5
- export declare const uploadFirmware: (typedCall: TypedCall, postMessage: (message: CoreEventMessage) => void, device: Device, { payload }: PROTO.FirmwareUpload) => Promise<{
5
+ export declare const uploadFirmware: (typedCall: TypedCall, postMessage: (message: CoreEventMessage) => void, device: Device, { payload }: PROTO.FirmwareUpload) => Promise<import("../../device/DeviceCommands").TypedResponseMessage<"Success"> | {
6
6
  message: string;
7
7
  }>;
8
8
  //# sourceMappingURL=uploadFirmware.d.ts.map
@@ -11,6 +11,7 @@ const postConfirmationMessage = (device) => {
11
11
  const postProgressMessage = (device, progress, postMessage) => {
12
12
  postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_PROGRESS, {
13
13
  device: device.toMessageObject(),
14
+ operation: 'flashing',
14
15
  progress,
15
16
  }));
16
17
  };
@@ -19,8 +20,15 @@ const uploadFirmware = async (typedCall, postMessage, device, { payload }) => {
19
20
  postConfirmationMessage(device);
20
21
  await typedCall('FirmwareErase', 'Success', {});
21
22
  postProgressMessage(device, 0, postMessage);
22
- const { message } = await typedCall('FirmwareUpload', 'Success', {
23
+ let i = 0;
24
+ const progressTimer = setInterval(() => {
25
+ i++;
26
+ postProgressMessage(device, Math.min(i * 2, 99), postMessage);
27
+ }, 300);
28
+ const message = await typedCall('FirmwareUpload', 'Success', {
23
29
  payload,
30
+ }).finally(() => {
31
+ clearInterval(progressTimer);
24
32
  });
25
33
  postProgressMessage(device, 100, postMessage);
26
34
  return message;
@@ -10,9 +10,11 @@ export default class GetAccountDescriptor extends AbstractMethod<'getAccountDesc
10
10
  hasBundle?: boolean;
11
11
  init(): void;
12
12
  get info(): string;
13
- confirmation(): Promise<boolean>;
14
- noBackupConfirmation(allowSuppression?: boolean): Promise<boolean>;
15
- checkFirmwareRange(_isUsingPopup: boolean): Promise<undefined>;
13
+ get confirmation(): {
14
+ view: "export-account-info";
15
+ label: string;
16
+ };
17
+ checkFirmwareRange(): undefined;
16
18
  run(): Promise<GetAccountDescriptorResponse | (GetAccountDescriptorResponse | null)[]>;
17
19
  dispose(): void;
18
20
  }
@@ -37,13 +37,14 @@ class GetAccountDescriptor extends AbstractMethod_1.AbstractMethod {
37
37
  coinInfo,
38
38
  };
39
39
  });
40
+ this.noBackupConfirmationMode = this.params.every(batch => batch.suppressBackupWarning)
41
+ ? 'popup-only'
42
+ : 'always';
40
43
  }
41
44
  get info() {
42
45
  return 'Export account descriptor';
43
46
  }
44
- async confirmation() {
45
- await this.getPopupPromise().promise;
46
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
47
+ get confirmation() {
47
48
  const keys = {};
48
49
  this.params.forEach(b => {
49
50
  if (!keys[b.coinInfo.label]) {
@@ -70,30 +71,16 @@ class GetAccountDescriptor extends AbstractMethod_1.AbstractMethod {
70
71
  str.push('</span>');
71
72
  });
72
73
  });
73
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
74
+ return {
74
75
  view: 'export-account-info',
75
76
  label: `Export descriptor for: ${str.join('')}`,
76
- }));
77
- const uiResp = await uiPromise.promise;
78
- return uiResp.payload;
79
- }
80
- async noBackupConfirmation(allowSuppression) {
81
- if (allowSuppression && this.params.every(batch => batch.suppressBackupWarning)) {
82
- return true;
83
- }
84
- await this.getPopupPromise().promise;
85
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
86
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
87
- view: 'no-backup',
88
- }));
89
- const uiResp = await uiPromise.promise;
90
- return uiResp.payload;
77
+ };
91
78
  }
92
- async checkFirmwareRange(_isUsingPopup) {
79
+ checkFirmwareRange() {
93
80
  const invalid = [];
94
81
  for (let i = 0; i < this.params.length; i++) {
95
82
  this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, this.params[i].coinInfo, AbstractMethod_1.DEFAULT_FIRMWARE_RANGE);
96
- const exception = await super.checkFirmwareRange(false);
83
+ const exception = super.checkFirmwareRange();
97
84
  if (exception) {
98
85
  invalid.push({
99
86
  index: i,
@@ -12,9 +12,19 @@ export default class GetAccountInfo extends AbstractMethod<'getAccountInfo', Req
12
12
  discovery?: Discovery;
13
13
  init(): void;
14
14
  get info(): string;
15
- confirmation(): Promise<boolean>;
16
- noBackupConfirmation(allowSuppression?: boolean): Promise<boolean>;
17
- checkFirmwareRange(isUsingPopup: boolean): Promise<"ui-device_firmware_old" | "ui-device_firmware_unsupported" | "ui-device_firmware_not_compatible" | "ui-device_firmware_not_installed" | undefined>;
15
+ get confirmation(): {
16
+ view: "export-account-info";
17
+ label: string;
18
+ customConfirmButton: {
19
+ label: string;
20
+ className: string;
21
+ };
22
+ } | {
23
+ view: "export-account-info";
24
+ label: string;
25
+ customConfirmButton?: undefined;
26
+ };
27
+ checkFirmwareRange(): "ui-device_firmware_old" | "ui-device_firmware_unsupported" | "ui-device_firmware_not_compatible" | "ui-device_firmware_not_installed" | undefined;
18
28
  run(): Promise<AccountInfo | (AccountInfo | null)[] | {
19
29
  utxo: AccountUtxo[] | undefined;
20
30
  descriptor: string;
@@ -33,7 +43,11 @@ export default class GetAccountInfo extends AbstractMethod<'getAccountInfo', Req
33
43
  };
34
44
  misc?: {
35
45
  nonce?: string | undefined;
36
- erc20Contract?: import("@trezor/blockchain-link-types/lib/common").TokenInfo | undefined;
46
+ contractInfo?: import("@trezor/blockchain-link-types/lib/blockbook-api").ContractInfo | undefined;
47
+ stakingPools?: import("@trezor/blockchain-link-types/lib/blockbook-api").StakingPool[] | undefined;
48
+ addressAliases?: {
49
+ [key: string]: import("@trezor/blockchain-link-types/lib/blockbook-api").AddressAlias;
50
+ } | undefined;
37
51
  sequence?: number | undefined;
38
52
  reserve?: string | undefined;
39
53
  rewards?: string | undefined;
@@ -54,7 +68,6 @@ export default class GetAccountInfo extends AbstractMethod<'getAccountInfo', Req
54
68
  ledger: number;
55
69
  seq: number;
56
70
  } | undefined;
57
- stakingPools?: import("@trezor/blockchain-link-types").StakingPool[] | undefined;
58
71
  path: string;
59
72
  }>;
60
73
  discover(request: Request): Promise<{
@@ -75,7 +88,11 @@ export default class GetAccountInfo extends AbstractMethod<'getAccountInfo', Req
75
88
  };
76
89
  misc?: {
77
90
  nonce?: string | undefined;
78
- erc20Contract?: import("@trezor/blockchain-link-types/lib/common").TokenInfo | undefined;
91
+ contractInfo?: import("@trezor/blockchain-link-types/lib/blockbook-api").ContractInfo | undefined;
92
+ stakingPools?: import("@trezor/blockchain-link-types/lib/blockbook-api").StakingPool[] | undefined;
93
+ addressAliases?: {
94
+ [key: string]: import("@trezor/blockchain-link-types/lib/blockbook-api").AddressAlias;
95
+ } | undefined;
79
96
  sequence?: number | undefined;
80
97
  reserve?: string | undefined;
81
98
  rewards?: string | undefined;
@@ -96,7 +113,6 @@ export default class GetAccountInfo extends AbstractMethod<'getAccountInfo', Req
96
113
  ledger: number;
97
114
  seq: number;
98
115
  } | undefined;
99
- stakingPools?: import("@trezor/blockchain-link-types").StakingPool[] | undefined;
100
116
  path: string;
101
117
  }>;
102
118
  dispose(): void;
@@ -69,22 +69,23 @@ class GetAccountInfo extends AbstractMethod_1.AbstractMethod {
69
69
  });
70
70
  this.useDevice = willUseDevice;
71
71
  this.useUi = willUseDevice;
72
+ this.noBackupConfirmationMode = this.params.every(batch => batch.suppressBackupWarning)
73
+ ? 'popup-only'
74
+ : 'always';
72
75
  }
73
76
  get info() {
74
77
  return 'Export account info';
75
78
  }
76
- async confirmation() {
77
- await this.getPopupPromise().promise;
78
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
79
+ get confirmation() {
79
80
  if (this.params.length === 1 && !this.params[0].path && !this.params[0].descriptor) {
80
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
81
+ return {
81
82
  view: 'export-account-info',
82
83
  label: `Export info for ${this.params[0].coinInfo.label} account of your selection`,
83
84
  customConfirmButton: {
84
85
  label: 'Proceed to account selection',
85
86
  className: 'not-empty-css',
86
87
  },
87
- }));
88
+ };
88
89
  }
89
90
  else {
90
91
  const keys = {};
@@ -113,34 +114,20 @@ class GetAccountInfo extends AbstractMethod_1.AbstractMethod {
113
114
  str.push('</span>');
114
115
  });
115
116
  });
116
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
117
+ return {
117
118
  view: 'export-account-info',
118
119
  label: `Export info for: ${str.join('')}`,
119
- }));
120
- }
121
- const uiResp = await uiPromise.promise;
122
- return uiResp.payload;
123
- }
124
- async noBackupConfirmation(allowSuppression) {
125
- if (allowSuppression && this.params.every(batch => batch.suppressBackupWarning)) {
126
- return true;
120
+ };
127
121
  }
128
- await this.getPopupPromise().promise;
129
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
130
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
131
- view: 'no-backup',
132
- }));
133
- const uiResp = await uiPromise.promise;
134
- return uiResp.payload;
135
122
  }
136
- async checkFirmwareRange(isUsingPopup) {
137
- if (isUsingPopup || this.params.length === 1) {
138
- return super.checkFirmwareRange(isUsingPopup);
123
+ checkFirmwareRange() {
124
+ if (this.params.length === 1) {
125
+ return super.checkFirmwareRange();
139
126
  }
140
127
  const invalid = [];
141
128
  for (let i = 0; i < this.params.length; i++) {
142
129
  this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, this.params[i].coinInfo, AbstractMethod_1.DEFAULT_FIRMWARE_RANGE);
143
- const exception = await super.checkFirmwareRange(false);
130
+ const exception = super.checkFirmwareRange();
144
131
  if (exception) {
145
132
  invalid.push({
146
133
  index: i,
@@ -9,7 +9,6 @@ type Params = PROTO.GetAddress & {
9
9
  export default class GetAddress extends AbstractMethod<'getAddress', Params[]> {
10
10
  hasBundle?: boolean;
11
11
  progress: number;
12
- confirmed?: boolean;
13
12
  init(): void;
14
13
  get info(): string;
15
14
  getButtonRequestData(code: string): {
@@ -17,8 +16,10 @@ export default class GetAddress extends AbstractMethod<'getAddress', Params[]> {
17
16
  serializedPath: string;
18
17
  address: string;
19
18
  } | undefined;
20
- confirmation(): Promise<boolean>;
21
- noBackupConfirmation(): Promise<boolean>;
19
+ get confirmation(): {
20
+ view: "export-address";
21
+ label: string;
22
+ } | undefined;
22
23
  _call({ address_n, show_display, multisig, script_type, coinInfo, unlockPath, chunkify, }: Params): Promise<{
23
24
  path: number[];
24
25
  serializedPath: string;
@@ -15,6 +15,7 @@ class GetAddress extends AbstractMethod_1.AbstractMethod {
15
15
  this.progress = 0;
16
16
  }
17
17
  init() {
18
+ this.noBackupConfirmationMode = 'always';
18
19
  this.requiredPermissions = ['read'];
19
20
  this.hasBundle = !!this.payload.bundle;
20
21
  const payload = !this.payload.bundle
@@ -61,7 +62,6 @@ class GetAddress extends AbstractMethod_1.AbstractMethod {
61
62
  this.params.length === 1 &&
62
63
  typeof this.params[0].address === 'string' &&
63
64
  this.params[0].show_display;
64
- this.confirmed = useEventListener;
65
65
  this.useUi = !useEventListener;
66
66
  }
67
67
  get info() {
@@ -84,27 +84,13 @@ class GetAddress extends AbstractMethod_1.AbstractMethod {
84
84
  };
85
85
  }
86
86
  }
87
- async confirmation() {
88
- if (this.confirmed)
89
- return true;
90
- await this.getPopupPromise().promise;
91
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
92
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
93
- view: 'export-address',
94
- label: this.info,
95
- }));
96
- const uiResp = await uiPromise.promise;
97
- this.confirmed = uiResp.payload;
98
- return this.confirmed;
99
- }
100
- async noBackupConfirmation() {
101
- await this.getPopupPromise().promise;
102
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
103
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
104
- view: 'no-backup',
105
- }));
106
- const uiResp = await uiPromise.promise;
107
- return uiResp.payload;
87
+ get confirmation() {
88
+ return !this.useUi
89
+ ? undefined
90
+ : {
91
+ view: 'export-address',
92
+ label: this.info,
93
+ };
108
94
  }
109
95
  async _call({ address_n, show_display, multisig, script_type, coinInfo, unlockPath, chunkify, }) {
110
96
  const cmd = this.device.getCommands();
@@ -12,6 +12,7 @@ export default class GetFeatures extends AbstractMethod<'getFeatures'> {
12
12
  homescreen_height?: number | undefined;
13
13
  bootloader_locked?: boolean | undefined;
14
14
  language_version_matches?: boolean | undefined;
15
+ unit_packaging?: number | undefined;
15
16
  flags: number | null;
16
17
  language: string | null;
17
18
  label: string | null;
@@ -2,10 +2,12 @@ import { AbstractMethod } from '../core/AbstractMethod';
2
2
  import { PROTO } from '../constants';
3
3
  export default class GetOwnershipId extends AbstractMethod<'getOwnershipId', PROTO.GetOwnershipId[]> {
4
4
  hasBundle?: boolean;
5
- confirmed?: boolean;
6
5
  init(): void;
7
6
  get info(): string;
8
- confirmation(): Promise<boolean>;
7
+ get confirmation(): {
8
+ view: "export-address";
9
+ label: string;
10
+ };
9
11
  run(): Promise<import("../types/api/getOwnershipId").OwnershipId | import("../types/api/getOwnershipId").OwnershipId[]>;
10
12
  }
11
13
  //# sourceMappingURL=getOwnershipId.d.ts.map
@@ -32,22 +32,11 @@ class GetOwnershipId extends AbstractMethod_1.AbstractMethod {
32
32
  get info() {
33
33
  return 'Export ownership id';
34
34
  }
35
- async confirmation() {
36
- if (this.confirmed)
37
- return true;
38
- await this.getPopupPromise().promise;
39
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION, this.device);
40
- let label = this.info;
41
- if (this.params.length > 1) {
42
- label = 'Export multiple ownership proof ids';
43
- }
44
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
35
+ get confirmation() {
36
+ return {
45
37
  view: 'export-address',
46
- label,
47
- }));
48
- const uiResp = await uiPromise.promise;
49
- this.confirmed = uiResp.payload;
50
- return this.confirmed;
38
+ label: this.params.length > 1 ? 'Export multiple ownership proof ids' : this.info,
39
+ };
51
40
  }
52
41
  async run() {
53
42
  const responses = [];
@@ -2,10 +2,12 @@ import { AbstractMethod } from '../core/AbstractMethod';
2
2
  import { PROTO } from '../constants';
3
3
  export default class GetOwnershipProof extends AbstractMethod<'getOwnershipProof', PROTO.GetOwnershipProof[]> {
4
4
  hasBundle?: boolean;
5
- confirmed?: boolean;
6
5
  init(): void;
7
6
  get info(): string;
8
- confirmation(): Promise<boolean>;
7
+ get confirmation(): {
8
+ view: "export-address";
9
+ label: string;
10
+ };
9
11
  run(): Promise<import("../types/api/getOwnershipProof").OwnershipProof | import("../types/api/getOwnershipProof").OwnershipProof[]>;
10
12
  }
11
13
  //# sourceMappingURL=getOwnershipProof.d.ts.map
@@ -38,22 +38,11 @@ class GetOwnershipProof extends AbstractMethod_1.AbstractMethod {
38
38
  get info() {
39
39
  return 'Export ownership proof';
40
40
  }
41
- async confirmation() {
42
- if (this.confirmed)
43
- return true;
44
- await this.getPopupPromise().promise;
45
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION, this.device);
46
- let label = this.info;
47
- if (this.params.length > 1) {
48
- label = 'Export multiple ownership proofs';
49
- }
50
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
41
+ get confirmation() {
42
+ return {
51
43
  view: 'export-address',
52
- label,
53
- }));
54
- const uiResp = await uiPromise.promise;
55
- this.confirmed = uiResp.payload;
56
- return this.confirmed;
44
+ label: this.params.length > 1 ? 'Export multiple ownership proofs' : this.info,
45
+ };
57
46
  }
58
47
  async run() {
59
48
  const responses = [];
@@ -2,17 +2,18 @@ import { AbstractMethod } from '../core/AbstractMethod';
2
2
  import type { BitcoinNetworkInfo } from '../types';
3
3
  import type { PROTO } from '../constants';
4
4
  type Params = PROTO.GetPublicKey & {
5
- coinInfo?: BitcoinNetworkInfo;
5
+ coinInfo: BitcoinNetworkInfo;
6
6
  suppressBackupWarning?: boolean;
7
7
  unlockPath?: PROTO.UnlockPath;
8
8
  };
9
9
  export default class GetPublicKey extends AbstractMethod<'getPublicKey', Params[]> {
10
10
  hasBundle?: boolean;
11
- confirmed?: boolean;
12
11
  init(): void;
13
12
  get info(): string;
14
- confirmation(): Promise<boolean>;
15
- noBackupConfirmation(allowSuppression?: boolean): Promise<boolean>;
13
+ get confirmation(): {
14
+ view: "export-xpub";
15
+ label: string;
16
+ };
16
17
  run(): Promise<{
17
18
  xpubSegwit?: string | undefined;
18
19
  descriptorChecksum?: string | undefined;
@@ -18,6 +18,7 @@ class GetPublicKey extends AbstractMethod_1.AbstractMethod {
18
18
  : this.payload;
19
19
  (0, schema_utils_1.Assert)((0, types_1.Bundle)(getPublicKey_1.GetPublicKey), payload);
20
20
  this.params = payload.bundle.map(batch => {
21
+ var _a;
21
22
  let coinInfo;
22
23
  if (batch.coin) {
23
24
  coinInfo = (0, coinInfo_1.getBitcoinNetwork)(batch.coin);
@@ -27,11 +28,9 @@ class GetPublicKey extends AbstractMethod_1.AbstractMethod {
27
28
  (0, paramsValidator_1.validateCoinPath)(address_n, coinInfo);
28
29
  }
29
30
  else if (!coinInfo) {
30
- coinInfo = (0, coinInfo_1.getBitcoinNetwork)(address_n);
31
- }
32
- if (coinInfo) {
33
- this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, coinInfo, this.firmwareRange);
31
+ coinInfo = (_a = (0, coinInfo_1.getBitcoinNetwork)(address_n)) !== null && _a !== void 0 ? _a : (0, coinInfo_1.getBitcoinNetwork)('btc');
34
32
  }
33
+ this.firmwareRange = (0, paramsValidator_1.getFirmwareRange)(this.name, coinInfo, this.firmwareRange);
35
34
  return {
36
35
  address_n,
37
36
  coin_name: coinInfo === null || coinInfo === void 0 ? void 0 : coinInfo.name,
@@ -44,42 +43,20 @@ class GetPublicKey extends AbstractMethod_1.AbstractMethod {
44
43
  suppress_backup_warning: batch.suppressBackupWarning,
45
44
  };
46
45
  });
46
+ this.noBackupConfirmationMode = this.params.every(batch => batch.suppressBackupWarning || !batch.show_display)
47
+ ? 'popup-only'
48
+ : 'always';
47
49
  }
48
50
  get info() {
49
51
  return 'Export public key';
50
52
  }
51
- async confirmation() {
52
- if (this.confirmed)
53
- return true;
54
- await this.getPopupPromise().promise;
55
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
56
- let label;
57
- if (this.params.length > 1) {
58
- label = 'Export multiple public keys';
59
- }
60
- else {
61
- label = (0, accountUtils_1.getPublicKeyLabel)(this.params[0].address_n, this.params[0].coinInfo);
62
- }
63
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
53
+ get confirmation() {
54
+ return {
64
55
  view: 'export-xpub',
65
- label,
66
- }));
67
- const uiResp = await uiPromise.promise;
68
- this.confirmed = uiResp.payload;
69
- return this.confirmed;
70
- }
71
- async noBackupConfirmation(allowSuppression) {
72
- if (allowSuppression &&
73
- this.params.every(batch => batch.suppressBackupWarning || !batch.show_display)) {
74
- return true;
75
- }
76
- await this.getPopupPromise().promise;
77
- const uiPromise = this.createUiPromise(events_1.UI.RECEIVE_CONFIRMATION);
78
- this.postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
79
- view: 'no-backup',
80
- }));
81
- const uiResp = await uiPromise.promise;
82
- return uiResp.payload;
56
+ label: this.params.length > 1
57
+ ? 'Export multiple public keys'
58
+ : (0, accountUtils_1.getPublicKeyLabel)(this.params[0].address_n, this.params[0].coinInfo),
59
+ };
83
60
  }
84
61
  async run() {
85
62
  const responses = [];
@@ -21,7 +21,6 @@ export { default as changePin } from './changePin';
21
21
  export { default as changeWipeCode } from './changeWipeCode';
22
22
  export { default as cipherKeyValue } from './cipherKeyValue';
23
23
  export { default as composeTransaction } from './composeTransaction';
24
- export { default as firmwareUpdate } from './firmwareUpdate';
25
24
  export { default as getAccountDescriptor } from './getAccountDescriptor';
26
25
  export { default as getAccountInfo } from './getAccountInfo';
27
26
  export { default as getAddress } from './getAddress';
package/lib/api/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.checkFirmwareAuthenticity = exports.wipeDevice = exports.verifyMessage = exports.unlockPath = exports.signTransaction = exports.signMessage = exports.setProxy = exports.setBusy = exports.resetDevice = exports.requestLogin = exports.recoveryDevice = exports.rebootToBootloader = exports.pushTransaction = exports.getSettings = exports.getPublicKey = exports.getOwnershipProof = exports.getOwnershipId = exports.getFirmwareHash = exports.getFeatures = exports.getDeviceState = exports.getCoinInfo = exports.getAddress = exports.getAccountInfo = exports.getAccountDescriptor = exports.firmwareUpdate = exports.composeTransaction = exports.cipherKeyValue = exports.changeWipeCode = exports.changePin = exports.changeLanguage = exports.blockchainUnsubscribeFiatRates = exports.blockchainUnsubscribe = exports.blockchainSubscribeFiatRates = exports.blockchainSubscribe = exports.blockchainSetCustomBackend = exports.blockchainGetTransactions = exports.blockchainGetFiatRatesForTimestamps = exports.blockchainGetCurrentFiatRates = exports.blockchainGetAccountBalanceHistory = exports.blockchainEstimateFee = exports.blockchainDisconnect = exports.backupDevice = exports.showDeviceTutorial = exports.cancelCoinjoinAuthorization = exports.authorizeCoinjoin = exports.authenticateDevice = exports.applySettings = exports.applyFlags = void 0;
6
+ exports.checkFirmwareAuthenticity = exports.wipeDevice = exports.verifyMessage = exports.unlockPath = exports.signTransaction = exports.signMessage = exports.setProxy = exports.setBusy = exports.resetDevice = exports.requestLogin = exports.recoveryDevice = exports.rebootToBootloader = exports.pushTransaction = exports.getSettings = exports.getPublicKey = exports.getOwnershipProof = exports.getOwnershipId = exports.getFirmwareHash = exports.getFeatures = exports.getDeviceState = exports.getCoinInfo = exports.getAddress = exports.getAccountInfo = exports.getAccountDescriptor = exports.composeTransaction = exports.cipherKeyValue = exports.changeWipeCode = exports.changePin = exports.changeLanguage = exports.blockchainUnsubscribeFiatRates = exports.blockchainUnsubscribe = exports.blockchainSubscribeFiatRates = exports.blockchainSubscribe = exports.blockchainSetCustomBackend = exports.blockchainGetTransactions = exports.blockchainGetFiatRatesForTimestamps = exports.blockchainGetCurrentFiatRates = exports.blockchainGetAccountBalanceHistory = exports.blockchainEstimateFee = exports.blockchainDisconnect = exports.backupDevice = exports.showDeviceTutorial = exports.cancelCoinjoinAuthorization = exports.authorizeCoinjoin = exports.authenticateDevice = exports.applySettings = exports.applyFlags = void 0;
7
7
  var applyFlags_1 = require("./applyFlags");
8
8
  Object.defineProperty(exports, "applyFlags", { enumerable: true, get: function () { return __importDefault(applyFlags_1).default; } });
9
9
  var applySettings_1 = require("./applySettings");
@@ -50,8 +50,6 @@ var cipherKeyValue_1 = require("./cipherKeyValue");
50
50
  Object.defineProperty(exports, "cipherKeyValue", { enumerable: true, get: function () { return __importDefault(cipherKeyValue_1).default; } });
51
51
  var composeTransaction_1 = require("./composeTransaction");
52
52
  Object.defineProperty(exports, "composeTransaction", { enumerable: true, get: function () { return __importDefault(composeTransaction_1).default; } });
53
- var firmwareUpdate_1 = require("./firmwareUpdate");
54
- Object.defineProperty(exports, "firmwareUpdate", { enumerable: true, get: function () { return __importDefault(firmwareUpdate_1).default; } });
55
53
  var getAccountDescriptor_1 = require("./getAccountDescriptor");
56
54
  Object.defineProperty(exports, "getAccountDescriptor", { enumerable: true, get: function () { return __importDefault(getAccountDescriptor_1).default; } });
57
55
  var getAccountInfo_1 = require("./getAccountInfo");