@onekeyfe/hd-web-sdk 0.0.6 → 0.0.9

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.
@@ -4023,12 +4023,12 @@ __webpack_unused_export__ = ({
4023
4023
  value: true
4024
4024
  });
4025
4025
 
4026
+ var semver = __webpack_require__(7699);
4027
+
4026
4028
  var hdTransport = __webpack_require__(7495);
4027
4029
 
4028
4030
  var axios = __webpack_require__(9644);
4029
4031
 
4030
- var semver = __webpack_require__(7699);
4031
-
4032
4032
  var BigNumber = __webpack_require__(6391);
4033
4033
 
4034
4034
  function _interopDefaultLegacy(e) {
@@ -4037,10 +4037,10 @@ function _interopDefaultLegacy(e) {
4037
4037
  };
4038
4038
  }
4039
4039
 
4040
- var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
4041
-
4042
4040
  var semver__default = /*#__PURE__*/_interopDefaultLegacy(semver);
4043
4041
 
4042
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
4043
+
4044
4044
  var BigNumber__default = /*#__PURE__*/_interopDefaultLegacy(BigNumber);
4045
4045
 
4046
4046
  const inject = ({
@@ -4084,6 +4084,10 @@ const inject = ({
4084
4084
  checkTransportRelease: () => call({
4085
4085
  method: 'checkTransportRelease'
4086
4086
  }),
4087
+ cipherKeyValue: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4088
+ connectId,
4089
+ method: 'cipherKeyValue'
4090
+ })),
4087
4091
  deviceBackup: connectId => call({
4088
4092
  connectId,
4089
4093
  method: 'deviceBackup'
@@ -4187,6 +4191,30 @@ const inject = ({
4187
4191
  starcoinVerifyMessage: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4188
4192
  connectId,
4189
4193
  method: 'starcoinVerifyMessage'
4194
+ })),
4195
+ nemGetAddress: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4196
+ connectId,
4197
+ method: 'nemGetAddress'
4198
+ })),
4199
+ nemSignTransaction: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4200
+ connectId,
4201
+ method: 'nemSignTransaction'
4202
+ })),
4203
+ solGetAddress: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4204
+ connectId,
4205
+ method: 'solGetAddress'
4206
+ })),
4207
+ solSignTransaction: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4208
+ connectId,
4209
+ method: 'solSignTransaction'
4210
+ })),
4211
+ stellarGetAddress: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4212
+ connectId,
4213
+ method: 'stellarGetAddress'
4214
+ })),
4215
+ stellarSignTransaction: (connectId, params) => call(Object.assign(Object.assign({}, params), {
4216
+ connectId,
4217
+ method: 'stellarSignTransaction'
4190
4218
  }))
4191
4219
  };
4192
4220
  return api;
@@ -4207,6 +4235,17 @@ PERFORMANCE OF THIS SOFTWARE.
4207
4235
  ***************************************************************************** */
4208
4236
 
4209
4237
 
4238
+ function __rest(s, e) {
4239
+ var t = {};
4240
+
4241
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4242
+
4243
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4244
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
4245
+ }
4246
+ return t;
4247
+ }
4248
+
4210
4249
  function __awaiter(thisArg, _arguments, P, generator) {
4211
4250
  function adopt(value) {
4212
4251
  return value instanceof P ? value : new P(function (resolve) {
@@ -4998,6 +5037,18 @@ function create(arg, data) {
4998
5037
  };
4999
5038
  }
5000
5039
 
5040
+ const getDeviceModel = features => {
5041
+ if (!features || typeof features !== 'object') {
5042
+ return 'model_mini';
5043
+ }
5044
+
5045
+ if (features.model === '1') {
5046
+ return 'model_mini';
5047
+ }
5048
+
5049
+ return 'model_touch';
5050
+ };
5051
+
5001
5052
  const getDeviceType = features => {
5002
5053
  if (!features || typeof features !== 'object' || !features.serial_no) {
5003
5054
  return 'classic';
@@ -5006,6 +5057,24 @@ const getDeviceType = features => {
5006
5057
  const serialNo = features.serial_no;
5007
5058
  const miniFlag = serialNo.slice(0, 2);
5008
5059
  if (miniFlag.toLowerCase() === 'mi') return 'mini';
5060
+ if (miniFlag.toLowerCase() === 'tc') return 'touch';
5061
+ return 'classic';
5062
+ };
5063
+
5064
+ const getDeviceTypeByBleName = name => {
5065
+ if (!name) return 'classic';
5066
+ if (name.startsWith('MI')) return 'mini';
5067
+ if (name.startsWith('T')) return 'touch';
5068
+ return 'classic';
5069
+ };
5070
+
5071
+ const getDeviceTypeByDeviceId = deviceId => {
5072
+ if (!deviceId) {
5073
+ return 'classic';
5074
+ }
5075
+
5076
+ const miniFlag = deviceId.slice(0, 2);
5077
+ if (miniFlag.toLowerCase() === 'mi') return 'mini';
5009
5078
  return 'classic';
5010
5079
  };
5011
5080
 
@@ -5030,6 +5099,8 @@ const getDeviceLabel = features => {
5030
5099
  };
5031
5100
 
5032
5101
  const getDeviceFirmwareVersion = features => {
5102
+ if (!features) return [0, 0, 0];
5103
+
5033
5104
  if (features.onekey_version) {
5034
5105
  return features.onekey_version.split('.');
5035
5106
  }
@@ -14295,7 +14366,7 @@ const UI_REQUEST = {
14295
14366
  NOT_USE_ONEKEY_DEVICE: 'ui-device_please_use_onekey_device'
14296
14367
  };
14297
14368
  const VERSION = '1.0.0-alpha.1';
14298
- const DEFAULT_DOMAIN = `https://localhost:8088/`;
14369
+ const DEFAULT_DOMAIN = `https://hardware-sdk.onekey.so/`;
14299
14370
  const DEFAULT_PRIORITY = 2;
14300
14371
  const initialSettings = {
14301
14372
  configSrc: './data/config.json',
@@ -14811,6 +14882,10 @@ class BaseMethod {
14811
14882
  this.requireDeviceMode = [];
14812
14883
  }
14813
14884
 
14885
+ getVersionRange() {
14886
+ return {};
14887
+ }
14888
+
14814
14889
  setDevice(device) {
14815
14890
  this.device = device;
14816
14891
  this.connectId = device.originalDescriptor.path;
@@ -14837,10 +14912,14 @@ class SearchDevices extends BaseMethod {
14837
14912
  const env = DataManager.getSettings('env');
14838
14913
 
14839
14914
  if (env === 'react-native') {
14840
- return devicesDescriptor.map(device => Object.assign(Object.assign({}, device), {
14841
- connectId: device.id,
14842
- deviceType: 'classic'
14843
- }));
14915
+ return devicesDescriptor.map(device => {
14916
+ var _a;
14917
+
14918
+ return Object.assign(Object.assign({}, device), {
14919
+ connectId: device.id,
14920
+ deviceType: getDeviceTypeByBleName((_a = device.name) !== null && _a !== void 0 ? _a : '')
14921
+ });
14922
+ });
14844
14923
  }
14845
14924
 
14846
14925
  const devices = [];
@@ -14931,7 +15010,6 @@ const formatAnyHex = value => {
14931
15010
  return modifyValues(value, value => formatAnyHex(value));
14932
15011
  }
14933
15012
 
14934
- console.log('unexpected value', value);
14935
15013
  return value;
14936
15014
  };
14937
15015
 
@@ -15000,6 +15078,79 @@ const validateParams = (values, fields) => {
15000
15078
  });
15001
15079
  };
15002
15080
 
15081
+ class CipherKeyValue extends BaseMethod {
15082
+ constructor() {
15083
+ super(...arguments);
15084
+ this.hasBundle = false;
15085
+ }
15086
+
15087
+ init() {
15088
+ var _a;
15089
+
15090
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
15091
+ this.hasBundle = !!((_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle);
15092
+ const payload = this.hasBundle ? this.payload : {
15093
+ bundle: [this.payload]
15094
+ };
15095
+ validateParams(payload, [{
15096
+ name: 'bundle',
15097
+ type: 'array'
15098
+ }]);
15099
+ this.params = [];
15100
+ payload.bundle.forEach(batch => {
15101
+ const addressN = validatePath(batch.path);
15102
+ validateParams(batch, [{
15103
+ name: 'path',
15104
+ required: true
15105
+ }, {
15106
+ name: 'key',
15107
+ type: 'string'
15108
+ }, {
15109
+ name: 'value',
15110
+ type: 'hexString'
15111
+ }, {
15112
+ name: 'encrypt',
15113
+ type: 'boolean'
15114
+ }, {
15115
+ name: 'askOnEncrypt',
15116
+ type: 'boolean'
15117
+ }, {
15118
+ name: 'askOnDecrypt',
15119
+ type: 'boolean'
15120
+ }, {
15121
+ name: 'iv',
15122
+ type: 'hexString'
15123
+ }]);
15124
+ this.params.push({
15125
+ address_n: addressN,
15126
+ key: batch.key,
15127
+ value: formatAnyHex(batch.value),
15128
+ encrypt: batch.encrypt,
15129
+ ask_on_encrypt: batch.askOnEncrypt,
15130
+ ask_on_decrypt: batch.askOnDecrypt,
15131
+ iv: formatAnyHex(batch.iv)
15132
+ });
15133
+ });
15134
+ }
15135
+
15136
+ run() {
15137
+ return __awaiter(this, void 0, void 0, function* () {
15138
+ const responses = [];
15139
+
15140
+ for (let i = 0; i < this.params.length; i++) {
15141
+ const param = this.params[i];
15142
+ const res = yield this.device.commands.typedCall('CipherKeyValue', 'CipheredKeyValue', Object.assign({}, param));
15143
+ responses.push(Object.assign({
15144
+ path: serializedPath(param.address_n)
15145
+ }, res.message));
15146
+ }
15147
+
15148
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
15149
+ });
15150
+ }
15151
+
15152
+ }
15153
+
15003
15154
  var bitcoin = [{
15004
15155
  name: "Bitcoin",
15005
15156
  label: "BTC",
@@ -16165,6 +16316,17 @@ class DeviceFlags extends BaseMethod {
16165
16316
  class DeviceRebootToBootloader extends BaseMethod {
16166
16317
  init() {}
16167
16318
 
16319
+ getVersionRange() {
16320
+ return {
16321
+ classic: {
16322
+ min: '2.1.11'
16323
+ },
16324
+ mini: {
16325
+ min: '2.1.11'
16326
+ }
16327
+ };
16328
+ }
16329
+
16168
16330
  run() {
16169
16331
  return __awaiter(this, void 0, void 0, function* () {
16170
16332
  const res = yield this.device.commands.typedCall('RebootToBootloader', 'Success');
@@ -16509,7 +16671,7 @@ class EVMSignMessage$2 extends BaseMethod {
16509
16671
 
16510
16672
  }
16511
16673
 
16512
- class EVMSignMessageEIP712$1 extends BaseMethod {
16674
+ class EVMSignMessageEIP712 extends BaseMethod {
16513
16675
  init() {
16514
16676
  this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
16515
16677
  validateParams(this.payload, [{
@@ -16537,6 +16699,14 @@ class EVMSignMessageEIP712$1 extends BaseMethod {
16537
16699
  };
16538
16700
  }
16539
16701
 
16702
+ getVersionRange() {
16703
+ return {
16704
+ model_mini: {
16705
+ min: '2.1.9'
16706
+ }
16707
+ };
16708
+ }
16709
+
16540
16710
  run() {
16541
16711
  return __awaiter(this, void 0, void 0, function* () {
16542
16712
  const res = yield this.device.commands.typedCall('EthereumSignMessageEIP712', 'EthereumMessageSignature', Object.assign({}, this.params));
@@ -16734,6 +16904,22 @@ class EVMSignTransaction extends BaseMethod {
16734
16904
  this.formattedTx = formatAnyHex(tx);
16735
16905
  }
16736
16906
 
16907
+ getVersionRange() {
16908
+ if (this.isEIP1559) {
16909
+ return {
16910
+ model_mini: {
16911
+ min: '2.1.11'
16912
+ }
16913
+ };
16914
+ }
16915
+
16916
+ return {
16917
+ model_mini: {
16918
+ min: '1.0.0'
16919
+ }
16920
+ };
16921
+ }
16922
+
16737
16923
  run() {
16738
16924
  return __awaiter(this, void 0, void 0, function* () {
16739
16925
  const {
@@ -16748,7 +16934,7 @@ class EVMSignTransaction extends BaseMethod {
16748
16934
 
16749
16935
  }
16750
16936
 
16751
- class EVMSignMessageEIP712 extends BaseMethod {
16937
+ class EVMSignTypedData extends BaseMethod {
16752
16938
  init() {
16753
16939
  this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
16754
16940
  validateParams(this.payload, [{
@@ -16756,12 +16942,10 @@ class EVMSignMessageEIP712 extends BaseMethod {
16756
16942
  required: true
16757
16943
  }, {
16758
16944
  name: 'metamaskV4Compat',
16759
- type: 'boolean',
16760
- required: true
16945
+ type: 'boolean'
16761
16946
  }, {
16762
16947
  name: 'data',
16763
- type: 'object',
16764
- required: true
16948
+ type: 'object'
16765
16949
  }, {
16766
16950
  name: 'domainHash',
16767
16951
  type: 'hexString'
@@ -16788,12 +16972,35 @@ class EVMSignMessageEIP712 extends BaseMethod {
16788
16972
 
16789
16973
  if (messageHash) {
16790
16974
  this.params.messageHash = formatAnyHex(messageHash);
16791
- } else if (!data.primaryType || data.primaryType !== 'EIP712Domain') {
16975
+ } else if (!!data && (!data.primaryType || data.primaryType !== 'EIP712Domain')) {
16792
16976
  throw TypedError('Method_InvalidParameter', 'message_hash should only be empty when data.primaryType=EIP712Domain');
16793
16977
  }
16794
16978
  }
16795
16979
  }
16796
16980
 
16981
+ getVersionRange() {
16982
+ return {
16983
+ model_mini: {
16984
+ min: '2.1.9'
16985
+ }
16986
+ };
16987
+ }
16988
+
16989
+ supportSignTyped() {
16990
+ const deviceType = getDeviceType(this.device.features);
16991
+
16992
+ if (deviceType === 'classic' || deviceType === 'mini') {
16993
+ const currentVersion = getDeviceFirmwareVersion(this.device.features).join('.');
16994
+ const supportSignTypedVersion = '2.2.0';
16995
+
16996
+ if (semver__default["default"].lt(currentVersion, supportSignTypedVersion)) {
16997
+ return false;
16998
+ }
16999
+ }
17000
+
17001
+ return true;
17002
+ }
17003
+
16797
17004
  run() {
16798
17005
  return __awaiter(this, void 0, void 0, function* () {
16799
17006
  if (!this.device.features) {
@@ -16803,25 +17010,38 @@ class EVMSignMessageEIP712 extends BaseMethod {
16803
17010
  const {
16804
17011
  addressN
16805
17012
  } = this.params;
17013
+ const deviceType = getDeviceType(this.device.features);
16806
17014
 
16807
- if (this.device.features.model === '1') {
17015
+ if (deviceType === 'classic' || deviceType === 'mini') {
16808
17016
  validateParams(this.params, [{
16809
17017
  name: 'domainHash',
16810
17018
  type: 'hexString',
16811
17019
  required: true
16812
17020
  }, {
16813
17021
  name: 'messageHash',
16814
- type: 'hexString'
17022
+ type: 'hexString',
17023
+ required: true
16815
17024
  }]);
16816
17025
  const {
16817
17026
  domainHash,
16818
17027
  messageHash
16819
17028
  } = this.params;
16820
- const response = yield this.device.commands.typedCall('EthereumSignTypedHash', 'EthereumTypedDataSignature', {
16821
- address_n: addressN,
16822
- domain_separator_hash: domainHash !== null && domainHash !== void 0 ? domainHash : '',
16823
- message_hash: messageHash
16824
- });
17029
+ let response;
17030
+
17031
+ if (this.supportSignTyped()) {
17032
+ response = yield this.device.commands.typedCall('EthereumSignTypedHash', 'EthereumTypedDataSignature', {
17033
+ address_n: addressN,
17034
+ domain_separator_hash: domainHash !== null && domainHash !== void 0 ? domainHash : '',
17035
+ message_hash: messageHash
17036
+ });
17037
+ } else {
17038
+ response = yield this.device.commands.typedCall('EthereumSignMessageEIP712', 'EthereumMessageSignature', {
17039
+ address_n: addressN,
17040
+ domain_hash: domainHash !== null && domainHash !== void 0 ? domainHash : '',
17041
+ message_hash: messageHash !== null && messageHash !== void 0 ? messageHash : ''
17042
+ });
17043
+ }
17044
+
16825
17045
  return Promise.resolve(response.message);
16826
17046
  }
16827
17047
 
@@ -17079,64 +17299,794 @@ class EVMSignMessage extends BaseMethod {
17079
17299
 
17080
17300
  }
17081
17301
 
17082
- var ApiMethods = /*#__PURE__*/Object.freeze({
17083
- __proto__: null,
17084
- searchDevices: SearchDevices,
17085
- getFeatures: GetFeatures,
17086
- btcGetAddress: BTCGetAddress,
17087
- btcGetPublicKey: BTCGetPublicKey,
17088
- btcSignMessage: BTCSignMessage,
17089
- btcSignTransaction: BTCSignTransaction,
17090
- btcVerifyMessage: BTCVerifyMessage,
17091
- checkFirmwareRelease: CheckFirmwareRelease,
17092
- checkBLEFirmwareRelease: CheckBLEFirmwareRelease,
17093
- checkTransportRelease: CheckTransportRelease,
17094
- deviceBackup: DeviceBackup,
17095
- deviceChangePin: DeviceChangePin,
17096
- deviceFlags: DeviceFlags,
17097
- deviceRebootToBootloader: DeviceRebootToBootloader,
17098
- deviceRecovery: DeviceRecovery,
17099
- deviceReset: DeviceReset,
17100
- deviceSettings: DeviceSettings,
17101
- deviceUpdateReboot: DeviceUpdateReboot,
17102
- deviceWipe: DeviceWipe,
17103
- evmGetAddress: EvmGetAddress,
17104
- evmGetPublicKey: EVMGetPublicKey,
17105
- evmSignMessage: EVMSignMessage$2,
17106
- evmSignMessageEIP712: EVMSignMessageEIP712$1,
17107
- evmSignTransaction: EVMSignTransaction,
17108
- evmSignTypedData: EVMSignMessageEIP712,
17109
- evmVerifyMessage: EVMSignMessage$1,
17110
- starcoinGetAddress: StarcoinGetAddress,
17111
- starcoinGetPublicKey: StarcoinGetPublicKey,
17112
- starcoinSignMessage: StarcoinSignMessage,
17113
- starcoinSignTransaction: StarcoinSignTransaction,
17114
- starcoinVerifyMessage: EVMSignMessage
17115
- });
17302
+ const MAINNET = 0x68;
17116
17303
 
17117
- function findMethod(message) {
17118
- const {
17119
- method
17120
- } = message.payload;
17304
+ class NEMGetAddress extends BaseMethod {
17305
+ constructor() {
17306
+ super(...arguments);
17307
+ this.hasBundle = false;
17308
+ }
17121
17309
 
17122
- if (typeof method !== 'string') {
17123
- throw TypedError('Method_InvalidParameter', 'Method is not set');
17310
+ init() {
17311
+ var _a;
17312
+
17313
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
17314
+ this.hasBundle = !!((_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle);
17315
+ const payload = this.hasBundle ? this.payload : {
17316
+ bundle: [this.payload]
17317
+ };
17318
+ validateParams(payload, [{
17319
+ name: 'bundle',
17320
+ type: 'array'
17321
+ }]);
17322
+ this.params = [];
17323
+ payload.bundle.forEach(batch => {
17324
+ var _a;
17325
+
17326
+ const addressN = validatePath(batch.path, 3);
17327
+ validateParams(batch, [{
17328
+ name: 'path',
17329
+ required: true
17330
+ }, {
17331
+ name: 'network',
17332
+ type: 'number'
17333
+ }, {
17334
+ name: 'showOnOneKey',
17335
+ type: 'boolean'
17336
+ }]);
17337
+ const showOnOneKey = (_a = batch.showOnOneKey) !== null && _a !== void 0 ? _a : true;
17338
+ this.params.push({
17339
+ address_n: addressN,
17340
+ network: batch.network || MAINNET,
17341
+ show_display: showOnOneKey
17342
+ });
17343
+ });
17124
17344
  }
17125
17345
 
17126
- const MethodConstructor = ApiMethods[method];
17346
+ run() {
17347
+ return __awaiter(this, void 0, void 0, function* () {
17348
+ const responses = [];
17127
17349
 
17128
- if (MethodConstructor) {
17129
- return new MethodConstructor(message);
17350
+ for (let i = 0; i < this.params.length; i++) {
17351
+ const param = this.params[i];
17352
+ const res = yield this.device.commands.typedCall('NEMGetAddress', 'NEMAddress', Object.assign({}, param));
17353
+ responses.push(Object.assign({
17354
+ path: serializedPath(param.address_n)
17355
+ }, res.message));
17356
+ }
17357
+
17358
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
17359
+ });
17130
17360
  }
17131
17361
 
17132
- throw TypedError('Method_InvalidParameter', `Method ${method} is not set`);
17133
17362
  }
17134
17363
 
17135
- const resolveAfter = (msec, value) => new Promise(resolve => {
17136
- setTimeout(resolve, msec, value);
17137
- });
17364
+ const NEM_TRANSFER = 0x0101;
17365
+ const NEM_COSIGNING = 0x0102;
17366
+ const NEM_IMPORTANCE_TRANSFER = 0x0801;
17367
+ const NEM_AGGREGATE_MODIFICATION = 0x1001;
17368
+ const NEM_MULTISIG_SIGNATURE = 0x1002;
17369
+ const NEM_MULTISIG = 0x1004;
17370
+ const NEM_PROVISION_NAMESPACE = 0x2001;
17371
+ const NEM_MOSAIC_CREATION = 0x4001;
17372
+ const NEM_SUPPLY_CHANGE = 0x4002;
17138
17373
 
17139
- const Log$1 = initLog('DeviceConnector');
17374
+ class NEMSignTransaction extends BaseMethod {
17375
+ constructor() {
17376
+ super(...arguments);
17377
+ this.NEM_MOSAIC_LEVY_TYPES = {
17378
+ 1: 'MosaicLevy_Absolute',
17379
+ 2: 'MosaicLevy_Percentile'
17380
+ };
17381
+ this.NEM_SUPPLY_CHANGE_TYPES = {
17382
+ 1: 'SupplyChange_Increase',
17383
+ 2: 'SupplyChange_Decrease'
17384
+ };
17385
+ this.NEM_AGGREGATE_MODIFICATION_TYPES = {
17386
+ 1: 'CosignatoryModification_Add',
17387
+ 2: 'CosignatoryModification_Delete'
17388
+ };
17389
+ this.NEM_IMPORTANCE_TRANSFER_MODES = {
17390
+ 1: 'ImportanceTransfer_Activate',
17391
+ 2: 'ImportanceTransfer_Deactivate'
17392
+ };
17393
+
17394
+ this.getCommon = (tx, address_n) => {
17395
+ var _a;
17396
+
17397
+ return {
17398
+ address_n,
17399
+ network: tx.version >> 24 & 0xff,
17400
+ timestamp: tx.timeStamp,
17401
+ fee: tx.fee,
17402
+ deadline: (_a = tx.deadline) !== null && _a !== void 0 ? _a : 0,
17403
+ signer: address_n ? undefined : tx.signer
17404
+ };
17405
+ };
17406
+
17407
+ this.transferMessage = tx => {
17408
+ const mosaics = tx.mosaics ? tx.mosaics.map(mosaic => ({
17409
+ namespace: mosaic.mosaicId.namespaceId,
17410
+ mosaic: mosaic.mosaicId.name,
17411
+ quantity: mosaic.quantity
17412
+ })) : undefined;
17413
+ return {
17414
+ recipient: tx.recipient,
17415
+ amount: tx.amount,
17416
+ payload: tx.message ? tx.message.payload : undefined,
17417
+ public_key: tx.message && tx.message.type === 0x02 ? tx.message.publicKey : undefined,
17418
+ mosaics
17419
+ };
17420
+ };
17421
+
17422
+ this.importanceTransferMessage = tx => ({
17423
+ mode: this.NEM_IMPORTANCE_TRANSFER_MODES[tx.importanceTransfer.mode],
17424
+ public_key: tx.importanceTransfer.publicKey
17425
+ });
17426
+
17427
+ this.aggregateModificationMessage = tx => {
17428
+ const modifications = tx.modifications ? tx.modifications.map(modification => ({
17429
+ type: this.NEM_AGGREGATE_MODIFICATION_TYPES[modification.modificationType],
17430
+ public_key: modification.cosignatoryAccount
17431
+ })) : undefined;
17432
+ return {
17433
+ modifications,
17434
+ relative_change: tx.minCosignatories.relativeChange
17435
+ };
17436
+ };
17437
+
17438
+ this.provisionNamespaceMessage = tx => {
17439
+ var _a, _b, _c;
17440
+
17441
+ return {
17442
+ namespace: (_a = tx.newPart) !== null && _a !== void 0 ? _a : '',
17443
+ parent: tx.parent || undefined,
17444
+ sink: (_b = tx.rentalFeeSink) !== null && _b !== void 0 ? _b : '',
17445
+ fee: (_c = tx.rentalFee) !== null && _c !== void 0 ? _c : 0
17446
+ };
17447
+ };
17448
+
17449
+ this.mosaicCreationMessage = tx => {
17450
+ var _a, _b;
17451
+
17452
+ const {
17453
+ levy
17454
+ } = tx.mosaicDefinition;
17455
+ const definition = {
17456
+ namespace: tx.mosaicDefinition.id.namespaceId,
17457
+ mosaic: tx.mosaicDefinition.id.name,
17458
+ levy: levy && levy.type ? this.NEM_MOSAIC_LEVY_TYPES[levy.type] : undefined,
17459
+ fee: levy && levy.fee,
17460
+ levy_address: levy && levy.recipient,
17461
+ levy_namespace: levy && levy.mosaicId && levy.mosaicId.namespaceId,
17462
+ levy_mosaic: levy && levy.mosaicId && levy.mosaicId.name,
17463
+ description: tx.mosaicDefinition.description
17464
+ };
17465
+ const {
17466
+ properties
17467
+ } = tx.mosaicDefinition;
17468
+
17469
+ if (Array.isArray(properties)) {
17470
+ properties.forEach(property => {
17471
+ const {
17472
+ name,
17473
+ value
17474
+ } = property;
17475
+
17476
+ switch (name) {
17477
+ case 'divisibility':
17478
+ definition.divisibility = parseInt(value);
17479
+ break;
17480
+
17481
+ case 'initialSupply':
17482
+ definition.supply = parseInt(value);
17483
+ break;
17484
+
17485
+ case 'supplyMutable':
17486
+ definition.mutable_supply = value === 'true';
17487
+ break;
17488
+
17489
+ case 'transferable':
17490
+ definition.transferable = value === 'true';
17491
+ break;
17492
+ }
17493
+ });
17494
+ }
17495
+
17496
+ return {
17497
+ definition,
17498
+ sink: (_a = tx.creationFeeSink) !== null && _a !== void 0 ? _a : '',
17499
+ fee: (_b = tx.creationFee) !== null && _b !== void 0 ? _b : 0
17500
+ };
17501
+ };
17502
+
17503
+ this.supplyChangeMessage = tx => {
17504
+ var _a;
17505
+
17506
+ return {
17507
+ namespace: tx.mosaicId.namespaceId,
17508
+ mosaic: tx.mosaicId.name,
17509
+ type: this.NEM_SUPPLY_CHANGE_TYPES[tx.supplyType],
17510
+ delta: (_a = tx.delta) !== null && _a !== void 0 ? _a : 0
17511
+ };
17512
+ };
17513
+
17514
+ this.parseTx = (tx, address_n) => {
17515
+ let transaction = tx;
17516
+ const message = {
17517
+ transaction: this.getCommon(tx, address_n),
17518
+ transfer: undefined,
17519
+ importance_transfer: undefined,
17520
+ aggregate_modification: undefined,
17521
+ provision_namespace: undefined,
17522
+ mosaic_creation: undefined,
17523
+ supply_change: undefined
17524
+ };
17525
+
17526
+ if (tx.type === NEM_COSIGNING || tx.type === NEM_MULTISIG || tx.type === NEM_MULTISIG_SIGNATURE) {
17527
+ message.cosigning = tx.type === NEM_COSIGNING || tx.type === NEM_MULTISIG_SIGNATURE;
17528
+ transaction = tx.otherTrans;
17529
+ message.multisig = this.getCommon(transaction);
17530
+ }
17531
+
17532
+ switch (transaction.type) {
17533
+ case NEM_TRANSFER:
17534
+ message.transfer = this.transferMessage(transaction);
17535
+ break;
17536
+
17537
+ case NEM_IMPORTANCE_TRANSFER:
17538
+ message.importance_transfer = this.importanceTransferMessage(transaction);
17539
+ break;
17540
+
17541
+ case NEM_AGGREGATE_MODIFICATION:
17542
+ message.aggregate_modification = this.aggregateModificationMessage(transaction);
17543
+ break;
17544
+
17545
+ case NEM_PROVISION_NAMESPACE:
17546
+ message.provision_namespace = this.provisionNamespaceMessage(transaction);
17547
+ break;
17548
+
17549
+ case NEM_MOSAIC_CREATION:
17550
+ message.mosaic_creation = this.mosaicCreationMessage(transaction);
17551
+ break;
17552
+
17553
+ case NEM_SUPPLY_CHANGE:
17554
+ message.supply_change = this.supplyChangeMessage(transaction);
17555
+ break;
17556
+
17557
+ default:
17558
+ throw TypedError('Method_InvalidParameter', 'Unknown transaction type');
17559
+ }
17560
+
17561
+ return message;
17562
+ };
17563
+ }
17564
+
17565
+ init() {
17566
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
17567
+ validateParams(this.payload, [{
17568
+ name: 'path',
17569
+ required: true
17570
+ }, {
17571
+ name: 'transaction',
17572
+ type: 'object',
17573
+ required: true
17574
+ }]);
17575
+ const {
17576
+ path,
17577
+ transaction
17578
+ } = this.payload;
17579
+ const addressN = validatePath(path, 3);
17580
+ this.params = this.parseTx(transaction, addressN);
17581
+ }
17582
+
17583
+ run() {
17584
+ return __awaiter(this, void 0, void 0, function* () {
17585
+ const res = yield this.device.commands.typedCall('NEMSignTx', 'NEMSignedTx', Object.assign({}, this.params));
17586
+ return Promise.resolve(res);
17587
+ });
17588
+ }
17589
+
17590
+ }
17591
+
17592
+ class SolGetAddress extends BaseMethod {
17593
+ constructor() {
17594
+ super(...arguments);
17595
+ this.hasBundle = false;
17596
+ }
17597
+
17598
+ init() {
17599
+ var _a;
17600
+
17601
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
17602
+ this.hasBundle = !!((_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle);
17603
+ const payload = this.hasBundle ? this.payload : {
17604
+ bundle: [this.payload]
17605
+ };
17606
+ validateParams(payload, [{
17607
+ name: 'bundle',
17608
+ type: 'array'
17609
+ }]);
17610
+ this.params = [];
17611
+ payload.bundle.forEach(batch => {
17612
+ var _a;
17613
+
17614
+ const addressN = validatePath(batch.path, 3);
17615
+ validateParams(batch, [{
17616
+ name: 'path',
17617
+ required: true
17618
+ }, {
17619
+ name: 'showOnOneKey',
17620
+ type: 'boolean'
17621
+ }]);
17622
+ const showOnOneKey = (_a = batch.showOnOneKey) !== null && _a !== void 0 ? _a : true;
17623
+ this.params.push({
17624
+ address_n: addressN,
17625
+ show_display: showOnOneKey
17626
+ });
17627
+ });
17628
+ }
17629
+
17630
+ run() {
17631
+ return __awaiter(this, void 0, void 0, function* () {
17632
+ const responses = [];
17633
+
17634
+ for (let i = 0; i < this.params.length; i++) {
17635
+ const param = this.params[i];
17636
+ const res = yield this.device.commands.typedCall('SolanaGetAddress', 'SolanaAddress', Object.assign({}, param));
17637
+ const {
17638
+ address
17639
+ } = res.message;
17640
+ responses.push({
17641
+ path: serializedPath(param.address_n),
17642
+ address
17643
+ });
17644
+ }
17645
+
17646
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
17647
+ });
17648
+ }
17649
+
17650
+ }
17651
+
17652
+ class SolSignTransaction extends BaseMethod {
17653
+ constructor() {
17654
+ super(...arguments);
17655
+ this.hasBundle = false;
17656
+ }
17657
+
17658
+ init() {
17659
+ var _a;
17660
+
17661
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
17662
+ this.hasBundle = !!((_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle);
17663
+ const payload = this.hasBundle ? this.payload : {
17664
+ bundle: [this.payload]
17665
+ };
17666
+ validateParams(payload, [{
17667
+ name: 'bundle',
17668
+ type: 'array'
17669
+ }]);
17670
+ this.params = [];
17671
+ payload.bundle.forEach(batch => {
17672
+ const addressN = validatePath(batch.path, 3);
17673
+ validateParams(batch, [{
17674
+ name: 'path',
17675
+ required: true
17676
+ }, {
17677
+ name: 'rawTx',
17678
+ type: 'hexString',
17679
+ required: true
17680
+ }]);
17681
+ this.params.push({
17682
+ address_n: addressN,
17683
+ raw_tx: formatAnyHex(batch.rawTx)
17684
+ });
17685
+ });
17686
+ }
17687
+
17688
+ getVersionRange() {
17689
+ return {
17690
+ classic: {
17691
+ min: '2.1.9'
17692
+ },
17693
+ mini: {
17694
+ min: '2.1.9'
17695
+ }
17696
+ };
17697
+ }
17698
+
17699
+ run() {
17700
+ return __awaiter(this, void 0, void 0, function* () {
17701
+ const responses = [];
17702
+
17703
+ for (let i = 0; i < this.params.length; i++) {
17704
+ const param = this.params[i];
17705
+ const res = yield this.device.commands.typedCall('SolanaSignTx', 'SolanaSignedTx', Object.assign({}, param));
17706
+ const {
17707
+ signature
17708
+ } = res.message;
17709
+ responses.push({
17710
+ path: serializedPath(param.address_n),
17711
+ signature
17712
+ });
17713
+ }
17714
+
17715
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
17716
+ });
17717
+ }
17718
+
17719
+ }
17720
+
17721
+ class StellarGetAddress extends BaseMethod {
17722
+ constructor() {
17723
+ super(...arguments);
17724
+ this.hasBundle = false;
17725
+ }
17726
+
17727
+ init() {
17728
+ var _a;
17729
+
17730
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
17731
+ this.hasBundle = !!((_a = this.payload) === null || _a === void 0 ? void 0 : _a.bundle);
17732
+ const payload = this.hasBundle ? this.payload : {
17733
+ bundle: [this.payload]
17734
+ };
17735
+ validateParams(payload, [{
17736
+ name: 'bundle',
17737
+ type: 'array'
17738
+ }]);
17739
+ this.params = [];
17740
+ payload.bundle.forEach(batch => {
17741
+ var _a;
17742
+
17743
+ const addressN = validatePath(batch.path, 3);
17744
+ validateParams(batch, [{
17745
+ name: 'path',
17746
+ required: true
17747
+ }, {
17748
+ name: 'showOnOneKey',
17749
+ type: 'boolean'
17750
+ }]);
17751
+ const showOnOneKey = (_a = batch.showOnOneKey) !== null && _a !== void 0 ? _a : true;
17752
+ this.params.push({
17753
+ address_n: addressN,
17754
+ show_display: showOnOneKey
17755
+ });
17756
+ });
17757
+ }
17758
+
17759
+ run() {
17760
+ return __awaiter(this, void 0, void 0, function* () {
17761
+ const responses = [];
17762
+
17763
+ for (let i = 0; i < this.params.length; i++) {
17764
+ const param = this.params[i];
17765
+ const res = yield this.device.commands.typedCall('StellarGetAddress', 'StellarAddress', Object.assign({}, param));
17766
+ const {
17767
+ address
17768
+ } = res.message;
17769
+ responses.push({
17770
+ path: serializedPath(param.address_n),
17771
+ address
17772
+ });
17773
+ }
17774
+
17775
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
17776
+ });
17777
+ }
17778
+
17779
+ }
17780
+
17781
+ class StellarSignTransaction extends BaseMethod {
17782
+ constructor() {
17783
+ super(...arguments);
17784
+ this.operations = [];
17785
+
17786
+ this.parseOperation = op => {
17787
+ switch (op.type) {
17788
+ case 'createAccount':
17789
+ validateParams(op, [{
17790
+ name: 'destination',
17791
+ type: 'string',
17792
+ required: true
17793
+ }, {
17794
+ name: 'startingBalance',
17795
+ type: 'bigNumber',
17796
+ required: true
17797
+ }]);
17798
+ return {
17799
+ type: 'StellarCreateAccountOp',
17800
+ source_account: op.source,
17801
+ new_account: op.destination,
17802
+ starting_balance: op.startingBalance
17803
+ };
17804
+
17805
+ case 'payment':
17806
+ validateParams(op, [{
17807
+ name: 'destination',
17808
+ type: 'string',
17809
+ required: true
17810
+ }, {
17811
+ name: 'amount',
17812
+ type: 'bigNumber',
17813
+ required: true
17814
+ }, {
17815
+ name: 'asset',
17816
+ required: true
17817
+ }]);
17818
+ return {
17819
+ type: 'StellarPaymentOp',
17820
+ source_account: op.source,
17821
+ destination_account: op.destination,
17822
+ asset: op.asset,
17823
+ amount: op.amount
17824
+ };
17825
+
17826
+ case 'pathPayment':
17827
+ validateParams(op, [{
17828
+ name: 'destAmount',
17829
+ type: 'bigNumber',
17830
+ required: true
17831
+ }]);
17832
+ return {
17833
+ type: 'StellarPathPaymentOp',
17834
+ source_account: op.source,
17835
+ send_asset: op.sendAsset,
17836
+ send_max: op.sendMax,
17837
+ destination_account: op.destination,
17838
+ destination_asset: op.destAsset,
17839
+ destination_amount: op.destAmount,
17840
+ paths: op.path
17841
+ };
17842
+
17843
+ case 'createPassiveOffer':
17844
+ validateParams(op, [{
17845
+ name: 'amount',
17846
+ type: 'bigNumber',
17847
+ required: true
17848
+ }]);
17849
+ return {
17850
+ type: 'StellarCreatePassiveOfferOp',
17851
+ source_account: op.source,
17852
+ buying_asset: op.buying,
17853
+ selling_asset: op.selling,
17854
+ amount: op.amount,
17855
+ price_n: op.price.n,
17856
+ price_d: op.price.d
17857
+ };
17858
+
17859
+ case 'manageOffer':
17860
+ validateParams(op, [{
17861
+ name: 'amount',
17862
+ type: 'bigNumber',
17863
+ required: true
17864
+ }]);
17865
+ return {
17866
+ type: 'StellarManageOfferOp',
17867
+ source_account: op.source,
17868
+ buying_asset: op.buying,
17869
+ selling_asset: op.selling,
17870
+ amount: op.amount,
17871
+ offer_id: op.offerId,
17872
+ price_n: op.price.n,
17873
+ price_d: op.price.d
17874
+ };
17875
+
17876
+ case 'setOptions':
17877
+ {
17878
+ const signer = op.signer ? {
17879
+ signer_type: op.signer.type,
17880
+ signer_key: op.signer.key,
17881
+ signer_weight: op.signer.weight
17882
+ } : undefined;
17883
+ return Object.assign({
17884
+ type: 'StellarSetOptionsOp',
17885
+ source_account: op.source,
17886
+ clear_flags: op.clearFlags,
17887
+ set_flags: op.setFlags,
17888
+ master_weight: op.masterWeight,
17889
+ low_threshold: op.lowThreshold,
17890
+ medium_threshold: op.medThreshold,
17891
+ high_threshold: op.highThreshold,
17892
+ home_domain: op.homeDomain,
17893
+ inflation_destination_account: op.inflationDest
17894
+ }, signer);
17895
+ }
17896
+
17897
+ case 'changeTrust':
17898
+ validateParams(op, [{
17899
+ name: 'limit',
17900
+ type: 'bigNumber'
17901
+ }]);
17902
+ return {
17903
+ type: 'StellarChangeTrustOp',
17904
+ source_account: op.source,
17905
+ asset: op.line,
17906
+ limit: op.limit
17907
+ };
17908
+
17909
+ case 'allowTrust':
17910
+ return {
17911
+ type: 'StellarAllowTrustOp',
17912
+ source_account: op.source,
17913
+ trusted_account: op.trustor,
17914
+ asset_type: op.assetType,
17915
+ asset_code: op.assetCode,
17916
+ is_authorized: op.authorize ? 1 : 0
17917
+ };
17918
+
17919
+ case 'accountMerge':
17920
+ return {
17921
+ type: 'StellarAccountMergeOp',
17922
+ source_account: op.source,
17923
+ destination_account: op.destination
17924
+ };
17925
+
17926
+ case 'manageData':
17927
+ return {
17928
+ type: 'StellarManageDataOp',
17929
+ source_account: op.source,
17930
+ key: op.name,
17931
+ value: op.value
17932
+ };
17933
+
17934
+ case 'bumpSequence':
17935
+ return {
17936
+ type: 'StellarBumpSequenceOp',
17937
+ source_account: op.source,
17938
+ bump_to: op.bumpTo
17939
+ };
17940
+
17941
+ default:
17942
+ return {};
17943
+ }
17944
+ };
17945
+
17946
+ this.processTxRequest = (operations, index) => __awaiter(this, void 0, void 0, function* () {
17947
+ const isLastOp = index + 1 >= operations.length;
17948
+
17949
+ const _a = operations[index],
17950
+ {
17951
+ type
17952
+ } = _a,
17953
+ op = __rest(_a, ["type"]);
17954
+
17955
+ if (isLastOp) {
17956
+ const response = yield this.device.commands.typedCall(type, 'StellarSignedTx', op);
17957
+ return response.message;
17958
+ }
17959
+
17960
+ yield this.device.commands.typedCall(type, 'StellarTxOpRequest', op);
17961
+ return this.processTxRequest(operations, index + 1);
17962
+ });
17963
+ }
17964
+
17965
+ init() {
17966
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.INITIALIZE];
17967
+ validateParams(this.payload, [{
17968
+ name: 'path',
17969
+ required: true
17970
+ }, {
17971
+ name: 'networkPassphrase',
17972
+ type: 'string',
17973
+ required: true
17974
+ }, {
17975
+ name: 'transaction',
17976
+ type: 'object',
17977
+ required: true
17978
+ }]);
17979
+ const addressN = validatePath(this.payload.path, 3);
17980
+ const {
17981
+ transaction,
17982
+ networkPassphrase
17983
+ } = this.payload;
17984
+ this.params = {
17985
+ address_n: addressN,
17986
+ network_passphrase: networkPassphrase,
17987
+ source_account: transaction.source,
17988
+ fee: transaction.fee,
17989
+ sequence_number: transaction.sequence,
17990
+ num_operations: transaction.operations.length
17991
+ };
17992
+
17993
+ if (transaction.timebounds) {
17994
+ this.params.timebounds_start = transaction.timebounds.minTime;
17995
+ this.params.timebounds_end = transaction.timebounds.maxTime;
17996
+ }
17997
+
17998
+ if (transaction.memo) {
17999
+ this.params.memo_type = transaction.memo.type;
18000
+ this.params.memo_text = transaction.memo.text;
18001
+ this.params.memo_id = transaction.memo.id;
18002
+ this.params.memo_hash = transaction.memo.hash;
18003
+ }
18004
+
18005
+ transaction.operations.forEach(op => {
18006
+ const transformed = this.parseOperation(op);
18007
+
18008
+ if (transformed) {
18009
+ this.operations.push(transformed);
18010
+ }
18011
+ });
18012
+ console.log('StellarSignTransactionParams', this.params);
18013
+ console.log('StellarSignTransactionOperations', this.operations);
18014
+ }
18015
+
18016
+ run() {
18017
+ return __awaiter(this, void 0, void 0, function* () {
18018
+ yield this.device.commands.typedCall('StellarSignTx', 'StellarTxOpRequest', Object.assign({}, this.params));
18019
+ return this.processTxRequest(this.operations, 0);
18020
+ });
18021
+ }
18022
+
18023
+ }
18024
+
18025
+ var ApiMethods = /*#__PURE__*/Object.freeze({
18026
+ __proto__: null,
18027
+ searchDevices: SearchDevices,
18028
+ getFeatures: GetFeatures,
18029
+ cipherKeyValue: CipherKeyValue,
18030
+ btcGetAddress: BTCGetAddress,
18031
+ btcGetPublicKey: BTCGetPublicKey,
18032
+ btcSignMessage: BTCSignMessage,
18033
+ btcSignTransaction: BTCSignTransaction,
18034
+ btcVerifyMessage: BTCVerifyMessage,
18035
+ checkFirmwareRelease: CheckFirmwareRelease,
18036
+ checkBLEFirmwareRelease: CheckBLEFirmwareRelease,
18037
+ checkTransportRelease: CheckTransportRelease,
18038
+ deviceBackup: DeviceBackup,
18039
+ deviceChangePin: DeviceChangePin,
18040
+ deviceFlags: DeviceFlags,
18041
+ deviceRebootToBootloader: DeviceRebootToBootloader,
18042
+ deviceRecovery: DeviceRecovery,
18043
+ deviceReset: DeviceReset,
18044
+ deviceSettings: DeviceSettings,
18045
+ deviceUpdateReboot: DeviceUpdateReboot,
18046
+ deviceWipe: DeviceWipe,
18047
+ evmGetAddress: EvmGetAddress,
18048
+ evmGetPublicKey: EVMGetPublicKey,
18049
+ evmSignMessage: EVMSignMessage$2,
18050
+ evmSignMessageEIP712: EVMSignMessageEIP712,
18051
+ evmSignTransaction: EVMSignTransaction,
18052
+ evmSignTypedData: EVMSignTypedData,
18053
+ evmVerifyMessage: EVMSignMessage$1,
18054
+ starcoinGetAddress: StarcoinGetAddress,
18055
+ starcoinGetPublicKey: StarcoinGetPublicKey,
18056
+ starcoinSignMessage: StarcoinSignMessage,
18057
+ starcoinSignTransaction: StarcoinSignTransaction,
18058
+ starcoinVerifyMessage: EVMSignMessage,
18059
+ nemGetAddress: NEMGetAddress,
18060
+ nemSignTransaction: NEMSignTransaction,
18061
+ solGetAddress: SolGetAddress,
18062
+ solSignTransaction: SolSignTransaction,
18063
+ stellarGetAddress: StellarGetAddress,
18064
+ stellarSignTransaction: StellarSignTransaction
18065
+ });
18066
+
18067
+ function findMethod(message) {
18068
+ const {
18069
+ method
18070
+ } = message.payload;
18071
+
18072
+ if (typeof method !== 'string') {
18073
+ throw TypedError('Method_InvalidParameter', 'Method is not set');
18074
+ }
18075
+
18076
+ const MethodConstructor = ApiMethods[method];
18077
+
18078
+ if (MethodConstructor) {
18079
+ return new MethodConstructor(message);
18080
+ }
18081
+
18082
+ throw TypedError('Method_InvalidParameter', `Method ${method} is not set`);
18083
+ }
18084
+
18085
+ const resolveAfter = (msec, value) => new Promise(resolve => {
18086
+ setTimeout(resolve, msec, value);
18087
+ });
18088
+
18089
+ const Log$1 = initLog('DeviceConnector');
17140
18090
 
17141
18091
  const getDiff = (current, descriptors) => {
17142
18092
  const env = DataManager.getSettings('env');
@@ -17362,6 +18312,24 @@ const callAPI = message => __awaiter(void 0, void 0, void 0, function* () {
17362
18312
 
17363
18313
  try {
17364
18314
  const inner = () => __awaiter(void 0, void 0, void 0, function* () {
18315
+ const deviceType = getDeviceType(device.features);
18316
+ const deviceModel = getDeviceModel(device.features);
18317
+ const versionRangeType = method.getVersionRange()[deviceType];
18318
+ const versionRangeModel = method.getVersionRange()[deviceModel];
18319
+ const versionRange = versionRangeType !== null && versionRangeType !== void 0 ? versionRangeType : versionRangeModel;
18320
+
18321
+ if (versionRange && device.features) {
18322
+ const currentVersion = getDeviceFirmwareVersion(device.features).join('.');
18323
+
18324
+ if (semver__default["default"].valid(versionRange.min) && semver__default["default"].lt(currentVersion, versionRange.min)) {
18325
+ return Promise.reject(TypedError('Device_FwException', `Device firmware version is too low, please update to ${versionRange.min}`));
18326
+ }
18327
+
18328
+ if (versionRange.max && semver__default["default"].valid(versionRange.max) && semver__default["default"].gt(currentVersion, versionRange.max)) {
18329
+ return Promise.reject(TypedError('Device_FwException', `Device firmware version is too high, this method has been deprecated in ${versionRange.max}`));
18330
+ }
18331
+ }
18332
+
17365
18333
  const unexpectedMode = device.hasUnexpectedMode(method.allowDeviceMode, method.requireDeviceMode);
17366
18334
 
17367
18335
  if (unexpectedMode) {
@@ -17399,6 +18367,7 @@ const callAPI = message => __awaiter(void 0, void 0, void 0, function* () {
17399
18367
  } catch (error) {
17400
18368
  messageResponse = createResponseMessage(method.responseID, false, error);
17401
18369
  _callPromise === null || _callPromise === void 0 ? void 0 : _callPromise.reject(TypedError('Call_API', error));
18370
+ Log.debug('Call API - Run Error: ', error);
17402
18371
  } finally {
17403
18372
  const response = messageResponse;
17404
18373
 
@@ -17497,9 +18466,17 @@ const onDeviceButtonHandler = (...[device, request]) => {
17497
18466
  postMessage(createDeviceMessage(DEVICE.BUTTON, Object.assign(Object.assign({}, request), {
17498
18467
  device: device.toMessageObject()
17499
18468
  })));
17500
- postMessage(createUiMessage(UI_REQUEST$1.REQUEST_BUTTON, {
17501
- device: device.toMessageObject()
17502
- }));
18469
+
18470
+ if (request.code === 'ButtonRequest_PinEntry') {
18471
+ postMessage(createUiMessage(UI_REQUEST$1.REQUEST_PIN, {
18472
+ device: device.toMessageObject(),
18473
+ type: 'ButtonRequest_PinEntry'
18474
+ }));
18475
+ } else {
18476
+ postMessage(createUiMessage(UI_REQUEST$1.REQUEST_BUTTON, {
18477
+ device: device.toMessageObject()
18478
+ }));
18479
+ }
17503
18480
  };
17504
18481
 
17505
18482
  const postMessage = message => {
@@ -17636,6 +18613,8 @@ exports.ZP = HardwareSdk;
17636
18613
  exports.yI = enableLog;
17637
18614
  __webpack_unused_export__ = getDeviceLabel;
17638
18615
  __webpack_unused_export__ = getDeviceType;
18616
+ __webpack_unused_export__ = getDeviceTypeByBleName;
18617
+ __webpack_unused_export__ = getDeviceTypeByDeviceId;
17639
18618
  __webpack_unused_export__ = getDeviceUUID;
17640
18619
  __webpack_unused_export__ = getEnv;
17641
18620
  __webpack_unused_export__ = getHDPath;
@@ -17895,6 +18874,7 @@ const MESSAGE_TOP_CHAR = 0x003f;
17895
18874
  const MESSAGE_HEADER_BYTE = 0x23;
17896
18875
  const HEADER_SIZE = 1 + 1 + 4 + 2;
17897
18876
  const BUFFER_SIZE = 63;
18877
+ const COMMON_HEADER_SIZE = 6;
17898
18878
 
17899
18879
  const readHeader = buffer => {
17900
18880
  const typeId = buffer.readUint16();
@@ -18663,6 +19643,7 @@ var index = {
18663
19643
  parseConfigure
18664
19644
  };
18665
19645
  exports.BUFFER_SIZE = BUFFER_SIZE;
19646
+ exports.COMMON_HEADER_SIZE = COMMON_HEADER_SIZE;
18666
19647
  exports.HEADER_SIZE = HEADER_SIZE;
18667
19648
  exports.MESSAGE_HEADER_BYTE = MESSAGE_HEADER_BYTE;
18668
19649
  exports.MESSAGE_TOP_CHAR = MESSAGE_TOP_CHAR;