@subwallet/extension-base 1.1.9-0 → 1.1.11-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 (102) hide show
  1. package/background/KoniTypes.d.ts +13 -1
  2. package/background/KoniTypes.js +5 -0
  3. package/background/errors/BalanceError.js +7 -5
  4. package/background/errors/EvmProviderError.js +10 -8
  5. package/background/errors/ProviderError.js +5 -4
  6. package/background/errors/TransactionError.js +22 -17
  7. package/background/handlers/Extension.js +18 -18
  8. package/background/handlers/State.js +5 -5
  9. package/background/handlers/Tabs.js +1 -1
  10. package/background/warnings/TransactionWarning.js +4 -2
  11. package/cjs/background/KoniTypes.js +7 -1
  12. package/cjs/background/errors/BalanceError.js +7 -5
  13. package/cjs/background/errors/EvmProviderError.js +10 -8
  14. package/cjs/background/errors/ProviderError.js +5 -4
  15. package/cjs/background/errors/TransactionError.js +22 -17
  16. package/cjs/background/handlers/Extension.js +18 -18
  17. package/cjs/background/handlers/State.js +5 -5
  18. package/cjs/background/handlers/Tabs.js +1 -1
  19. package/cjs/background/warnings/TransactionWarning.js +4 -2
  20. package/cjs/constants/i18n.js +4 -1
  21. package/cjs/constants/index.js +12 -0
  22. package/cjs/constants/storage.js +11 -0
  23. package/cjs/defaults.js +3 -1
  24. package/cjs/koni/api/dotsama/parseTransaction.js +2 -1
  25. package/cjs/koni/api/nft/config.js +10 -12
  26. package/cjs/koni/api/staking/bonding/paraChain.js +10 -6
  27. package/cjs/koni/api/staking/bonding/relayChain.js +16 -7
  28. package/cjs/koni/api/staking/bonding/utils.js +80 -7
  29. package/cjs/koni/background/handlers/Extension.js +256 -183
  30. package/cjs/koni/background/handlers/State.js +19 -14
  31. package/cjs/koni/background/handlers/Tabs.js +15 -14
  32. package/cjs/packageInfo.js +1 -1
  33. package/cjs/services/balance-service/index.js +12 -3
  34. package/cjs/services/chain-service/constants.js +3 -2
  35. package/cjs/services/keyring-service/index.js +4 -0
  36. package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -4
  37. package/cjs/services/request-service/handler/EvmRequestHandler.js +24 -11
  38. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +10 -2
  39. package/cjs/services/request-service/index.js +1 -1
  40. package/cjs/services/setting-service/SettingService.js +29 -7
  41. package/cjs/services/setting-service/constants.js +5 -1
  42. package/cjs/services/setting-service/i18n/Backend.js +42 -0
  43. package/cjs/services/setting-service/i18n/cache.js +12 -0
  44. package/cjs/services/setting-service/i18n/extend.js +16 -0
  45. package/cjs/services/setting-service/i18n/i18n.js +29 -0
  46. package/cjs/services/transaction-service/index.js +25 -16
  47. package/cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js +0 -1
  48. package/cjs/utils/eth/parseTransaction/base.js +1 -1
  49. package/cjs/utils/eth/parseTransaction/index.js +2 -1
  50. package/cjs/utils/getId.js +1 -1
  51. package/cjs/utils/index.js +2 -1
  52. package/constants/i18n.js +4 -1
  53. package/constants/index.d.ts +1 -0
  54. package/constants/index.js +2 -1
  55. package/constants/storage.d.ts +1 -0
  56. package/constants/storage.js +4 -0
  57. package/defaults.d.ts +2 -1
  58. package/defaults.js +2 -1
  59. package/koni/api/dotsama/parseTransaction.js +2 -1
  60. package/koni/api/nft/config.d.ts +1 -1
  61. package/koni/api/nft/config.js +8 -10
  62. package/koni/api/staking/bonding/paraChain.js +11 -7
  63. package/koni/api/staking/bonding/relayChain.js +17 -8
  64. package/koni/api/staking/bonding/utils.d.ts +4 -0
  65. package/koni/api/staking/bonding/utils.js +70 -2
  66. package/koni/background/handlers/Extension.d.ts +1 -0
  67. package/koni/background/handlers/Extension.js +135 -63
  68. package/koni/background/handlers/State.js +19 -14
  69. package/koni/background/handlers/Tabs.js +15 -14
  70. package/package.json +31 -11
  71. package/packageInfo.js +1 -1
  72. package/services/balance-service/index.js +12 -3
  73. package/services/chain-service/constants.js +3 -2
  74. package/services/keyring-service/index.d.ts +1 -0
  75. package/services/keyring-service/index.js +4 -0
  76. package/services/request-service/handler/AuthRequestHandler.js +4 -4
  77. package/services/request-service/handler/EvmRequestHandler.js +24 -11
  78. package/services/request-service/handler/SubstrateRequestHandler.js +10 -2
  79. package/services/request-service/index.d.ts +1 -1
  80. package/services/request-service/index.js +1 -1
  81. package/services/setting-service/SettingService.d.ts +2 -0
  82. package/services/setting-service/SettingService.js +26 -5
  83. package/services/setting-service/constants.d.ts +2 -1
  84. package/services/setting-service/constants.js +4 -1
  85. package/services/setting-service/i18n/Backend.d.ts +9 -0
  86. package/services/setting-service/i18n/Backend.js +34 -0
  87. package/services/setting-service/i18n/cache.d.ts +2 -0
  88. package/services/setting-service/i18n/cache.js +5 -0
  89. package/services/setting-service/i18n/extend.d.ts +2 -0
  90. package/services/setting-service/i18n/extend.js +8 -0
  91. package/services/setting-service/i18n/i18n.d.ts +2 -0
  92. package/services/setting-service/i18n/i18n.js +21 -0
  93. package/services/transaction-service/index.d.ts +3 -3
  94. package/services/transaction-service/index.js +25 -16
  95. package/services/wallet-connect-service/handler/PolkadotRequestHandler.js +0 -1
  96. package/utils/eth/parseTransaction/base.js +1 -1
  97. package/utils/eth/parseTransaction/index.js +2 -1
  98. package/utils/getId.js +2 -2
  99. package/utils/index.js +2 -1
  100. package/cjs/utils/keyring.js +0 -57
  101. package/utils/keyring.d.ts +0 -4
  102. package/utils/keyring.js +0 -49
@@ -5,24 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ProviderError = void 0;
7
7
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
+ var _utils = require("@subwallet/extension-base/utils");
8
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
9
10
  // SPDX-License-Identifier: Apache-2.0
10
11
 
11
12
  const defaultErrorMap = {
12
13
  CHAIN_DISCONNECTED: {
13
- message: 'Chain is disconnected',
14
+ message: (0, _utils.detectTranslate)('Network is disconnected'),
14
15
  code: undefined
15
16
  },
16
17
  INVALID_PARAMS: {
17
- message: 'Invalid params',
18
+ message: (0, _utils.detectTranslate)('Undefined error. Please contact SubWallet support'),
18
19
  code: undefined
19
20
  },
20
21
  INTERNAL_ERROR: {
21
- message: 'Internal error',
22
+ message: (0, _utils.detectTranslate)('Undefined error. Please contact SubWallet support'),
22
23
  code: undefined
23
24
  },
24
25
  USER_REJECT: {
25
- message: 'User reject request',
26
+ message: (0, _utils.detectTranslate)('Rejected by user'),
26
27
  code: undefined
27
28
  }
28
29
  };
@@ -6,92 +6,97 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.TransactionError = void 0;
7
7
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _utils = require("@subwallet/extension-base/utils");
10
+ var _i18next = require("i18next");
9
11
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
12
  // SPDX-License-Identifier: Apache-2.0
11
13
 
12
14
  // Todo: finish this map in the future
13
15
  const defaultErrorMap = {
14
16
  NOT_ENOUGH_BALANCE: {
15
- message: 'Not enough balance',
17
+ message: (0, _utils.detectTranslate)('Insufficient balance'),
16
18
  code: undefined
17
19
  },
18
20
  CHAIN_DISCONNECTED: {
19
- message: 'Chain is disconnected',
21
+ message: (0, _utils.detectTranslate)('Network is disconnected'),
20
22
  code: undefined
21
23
  },
22
24
  INVALID_PARAMS: {
23
- message: 'Invalid params',
25
+ message: (0, _utils.detectTranslate)('Undefined error. Please contact SubWallet support'),
24
26
  code: undefined
25
27
  },
26
28
  INTERNAL_ERROR: {
27
- message: 'Internal error',
29
+ message: (0, _utils.detectTranslate)('Undefined error. Please contact SubWallet support'),
28
30
  code: undefined
29
31
  },
30
32
  DUPLICATE_TRANSACTION: {
31
- message: 'Duplicate transaction',
33
+ message: (0, _utils.detectTranslate)('Another transaction is in queue. Please try again later'),
32
34
  code: undefined
33
35
  },
34
36
  UNABLE_TO_SIGN: {
35
- message: 'Unable to sign',
37
+ message: (0, _utils.detectTranslate)('Unable to sign'),
36
38
  code: undefined
37
39
  },
38
40
  USER_REJECT_REQUEST: {
39
- message: 'User reject request',
41
+ message: (0, _utils.detectTranslate)('Rejected by user'),
40
42
  code: undefined
41
43
  },
42
44
  UNABLE_TO_SEND: {
43
- message: 'Unable to send',
45
+ message: (0, _utils.detectTranslate)('Unable to send'),
44
46
  code: undefined
45
47
  },
46
48
  SEND_TRANSACTION_FAILED: {
47
- message: 'Send transaction failed',
49
+ message: (0, _utils.detectTranslate)('Send transaction failed'),
48
50
  code: undefined
49
51
  },
50
52
  NOT_ENOUGH_EXISTENTIAL_DEPOSIT: {
51
- message: 'Not enough existential deposit',
53
+ message: (0, _utils.detectTranslate)('Insufficient balance to cover existential deposit. Please decrease the transaction amount or increase your current balance'),
52
54
  code: undefined
53
55
  },
54
56
  [_KoniTypes.BasicTxErrorType.UNSUPPORTED]: {
55
- message: 'This transaction is not supported',
57
+ message: (0, _utils.detectTranslate)('This feature is not available with this token'),
56
58
  code: undefined
57
59
  },
58
60
  [_KoniTypes.BasicTxErrorType.TIMEOUT]: {
59
- message: 'Transaction timeout',
61
+ message: (0, _utils.detectTranslate)('Transaction timeout'),
60
62
  code: undefined
61
63
  },
62
64
  [_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE]: {
63
65
  message: 'Not enough min stake',
66
+ // Message specific to each case
64
67
  code: undefined
65
68
  },
66
69
  [_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS]: {
67
70
  message: 'Exceed max nominations',
71
+ // Message specific to each case
68
72
  code: undefined
69
73
  },
70
74
  [_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST]: {
71
75
  message: 'Exist unstaking request',
76
+ // Message specific to each case
72
77
  code: undefined
73
78
  },
74
79
  [_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE]: {
75
- message: 'Invalid active stake',
80
+ message: (0, _utils.detectTranslate)('Invalid. If you unstake this amount your active stake would fall below minimum active threshold'),
76
81
  code: undefined
77
82
  },
78
83
  [_KoniTypes.StakingTxErrorType.EXCEED_MAX_UNSTAKING]: {
79
- message: 'Exceed max unstaking',
84
+ message: (0, _utils.detectTranslate)('You reached the maximum number of unstake requests'),
80
85
  code: undefined
81
86
  },
82
87
  [_KoniTypes.StakingTxErrorType.INACTIVE_NOMINATION_POOL]: {
83
- message: 'This nomination pool is not active',
88
+ message: (0, _utils.detectTranslate)('Invalid. Inactive nomination pool'),
84
89
  code: undefined
85
90
  },
86
91
  [_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT]: {
87
- message: 'Receiver is not enough existential deposit',
92
+ message: (0, _utils.detectTranslate)('Receiver is not enough existential deposit'),
88
93
  code: undefined
89
94
  }
90
95
  };
91
96
  class TransactionError extends _SWError.SWError {
92
97
  constructor(errorType, errMessage, data) {
93
98
  const defaultErr = defaultErrorMap[errorType];
94
- const message = errMessage || (defaultErr === null || defaultErr === void 0 ? void 0 : defaultErr.message) || errorType;
99
+ const message = errMessage || (0, _i18next.t)((defaultErr === null || defaultErr === void 0 ? void 0 : defaultErr.message) || '') || errorType;
95
100
  super(errorType, message, defaultErr === null || defaultErr === void 0 ? void 0 : defaultErr.code, data);
96
101
  this.errorType = errorType;
97
102
  }
@@ -104,14 +104,14 @@ class Extension {
104
104
  oldPass
105
105
  } = _ref5;
106
106
  const pair = _uiKeyring.default.getPair(address);
107
- (0, _util.assert)(pair, 'Unable to find pair');
107
+ (0, _util.assert)(pair, 'Unable to find account');
108
108
  try {
109
109
  if (!pair.isLocked) {
110
110
  pair.lock();
111
111
  }
112
112
  pair.decodePkcs8(oldPass);
113
113
  } catch (error) {
114
- throw new Error('oldPass is invalid');
114
+ throw new Error('Wrong password');
115
115
  }
116
116
  _uiKeyring.default.encryptAccount(pair, newPass);
117
117
  return true;
@@ -122,7 +122,7 @@ class Extension {
122
122
  name
123
123
  } = _ref6;
124
124
  const pair = _uiKeyring.default.getPair(address);
125
- (0, _util.assert)(pair, 'Unable to find pair');
125
+ (0, _util.assert)(pair, 'Unable to find account');
126
126
  _uiKeyring.default.saveAccountMeta(pair, {
127
127
  ...pair.meta,
128
128
  name
@@ -171,7 +171,7 @@ class Extension {
171
171
  isShowing
172
172
  } = _ref9;
173
173
  const pair = _uiKeyring.default.getPair(address);
174
- (0, _util.assert)(pair, 'Unable to find pair');
174
+ (0, _util.assert)(pair, 'Unable to find account');
175
175
  _uiKeyring.default.saveAccountMeta(pair, {
176
176
  ...pair.meta,
177
177
  isHidden: !isShowing
@@ -184,7 +184,7 @@ class Extension {
184
184
  genesisHash
185
185
  } = _ref10;
186
186
  const pair = _uiKeyring.default.getPair(address);
187
- (0, _util.assert)(pair, 'Unable to find pair');
187
+ (0, _util.assert)(pair, 'Unable to find account');
188
188
  _uiKeyring.default.saveAccountMeta(pair, {
189
189
  ...pair.meta,
190
190
  genesisHash
@@ -219,7 +219,7 @@ class Extension {
219
219
  id
220
220
  } = _ref12;
221
221
  const queued = this.#state.getAuthRequest(id);
222
- (0, _util.assert)(queued, 'Unable to find request');
222
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
223
223
  const {
224
224
  resolve
225
225
  } = queued;
@@ -236,7 +236,7 @@ class Extension {
236
236
  id
237
237
  } = _ref13;
238
238
  const queued = this.#state.getAuthRequest(id);
239
- (0, _util.assert)(queued, 'Unable to find request');
239
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
240
240
  const {
241
241
  reject
242
242
  } = queued;
@@ -259,7 +259,7 @@ class Extension {
259
259
  id
260
260
  } = _ref14;
261
261
  const queued = this.#state.getMetaRequest(id);
262
- (0, _util.assert)(queued, 'Unable to find request');
262
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
263
263
  const {
264
264
  request,
265
265
  resolve
@@ -279,7 +279,7 @@ class Extension {
279
279
  id
280
280
  } = _ref15;
281
281
  const queued = this.#state.getMetaRequest(id);
282
- (0, _util.assert)(queued, 'Unable to find request');
282
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
283
283
  const {
284
284
  reject
285
285
  } = queued;
@@ -359,11 +359,11 @@ class Extension {
359
359
  phrase
360
360
  } = (0, _utilCrypto.keyExtractSuri)(suri);
361
361
  if ((0, _util.isHex)(phrase)) {
362
- (0, _util.assert)((0, _util.isHex)(phrase, 256), 'Hex seed needs to be 256-bits');
362
+ (0, _util.assert)((0, _util.isHex)(phrase, 256), 'Invalid seed phrase. Please try again.');
363
363
  } else {
364
364
  // sadly isHex detects as string, so we need a cast here
365
365
  (0, _util.assert)(SEED_LENGTHS.includes(phrase.split(' ').length), `Mnemonic needs to contain ${SEED_LENGTHS.join(', ')} words`);
366
- (0, _util.assert)((0, _utilCrypto.mnemonicValidate)(phrase), 'Not a valid mnemonic seed');
366
+ (0, _util.assert)((0, _utilCrypto.mnemonicValidate)(phrase), 'Invalid seed phrase. Please try again.');
367
367
  }
368
368
  return {
369
369
  address: _uiKeyring.default.createFromUri(getSuri(suri, type), {}, type).address,
@@ -377,7 +377,7 @@ class Extension {
377
377
  savePass
378
378
  } = _ref20;
379
379
  const queued = this.#state.getSignRequest(id);
380
- (0, _util.assert)(queued, 'Unable to find request');
380
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
381
381
  const {
382
382
  reject,
383
383
  request,
@@ -392,7 +392,7 @@ class Extension {
392
392
  address
393
393
  } = pair;
394
394
  if (!pair) {
395
- reject(new Error('Unable to find pair'));
395
+ reject(new Error('Unable to find account'));
396
396
  return false;
397
397
  }
398
398
  this.refreshAccountPasswordCache(pair);
@@ -435,7 +435,7 @@ class Extension {
435
435
  signature
436
436
  } = _ref21;
437
437
  const queued = this.#state.getSignRequest(id);
438
- (0, _util.assert)(queued, 'Unable to find request');
438
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
439
439
  const {
440
440
  resolve
441
441
  } = queued;
@@ -450,7 +450,7 @@ class Extension {
450
450
  id
451
451
  } = _ref22;
452
452
  const queued = this.#state.getSignRequest(id);
453
- (0, _util.assert)(queued, 'Unable to find request');
453
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
454
454
  const {
455
455
  reject
456
456
  } = queued;
@@ -462,10 +462,10 @@ class Extension {
462
462
  id
463
463
  } = _ref23;
464
464
  const queued = this.#state.getSignRequest(id);
465
- (0, _util.assert)(queued, 'Unable to find request');
465
+ (0, _util.assert)(queued, 'Unable to proceed. Please try again');
466
466
  const address = queued.request.payload.address;
467
467
  const pair = _uiKeyring.default.getPair(address);
468
- (0, _util.assert)(pair, 'Unable to find pair');
468
+ (0, _util.assert)(pair, 'Unable to find account');
469
469
  const remainingTime = this.refreshAccountPasswordCache(pair);
470
470
  return {
471
471
  isLocked: pair.isLocked,
@@ -515,7 +515,7 @@ class Extension {
515
515
  try {
516
516
  parentPair.decodePkcs8(password);
517
517
  } catch (e) {
518
- throw new Error('invalid password');
518
+ throw new Error('Wrong password');
519
519
  }
520
520
  try {
521
521
  return parentPair.derive(suri, metadata);
@@ -330,10 +330,10 @@ class State {
330
330
 
331
331
  // Do not enqueue duplicate authorization requests.
332
332
  const isDuplicate = Object.values(this.#authRequests).some(request => request.idStr === idStr);
333
- (0, _util.assert)(!isDuplicate, `The source ${url} has a pending authorization request`);
333
+ (0, _util.assert)(!isDuplicate, 'The source {{url}} has a pending authorization request'.replace('{{url}}', url));
334
334
  if (this.#authUrls[idStr]) {
335
335
  // this url was seen in the past
336
- (0, _util.assert)(this.#authUrls[idStr].isAllowed, `The source ${url} is not allowed to interact with this extension`);
336
+ (0, _util.assert)(this.#authUrls[idStr].isAllowed, 'The source {{url}} is not allowed to interact with this extension'.replace('{{url}}', url));
337
337
  return false;
338
338
  }
339
339
  return new Promise((resolve, reject) => {
@@ -351,8 +351,8 @@ class State {
351
351
  }
352
352
  ensureUrlAuthorized(url) {
353
353
  const entry = this.#authUrls[(0, _utils.stripUrl)(url)];
354
- (0, _util.assert)(entry, `The source ${url} has not been enabled yet`);
355
- (0, _util.assert)(entry.isAllowed, `The source ${url} is not allowed to interact with this extension`);
354
+ (0, _util.assert)(entry, 'The source {{url}} has not been authorized yet'.replace('{{url}}', url));
355
+ (0, _util.assert)(entry.isAllowed, 'The source {{url}} is not allowed to interact with this extension'.replace('{{url}}', url));
356
356
  return true;
357
357
  }
358
358
  injectMetadata(url, request) {
@@ -393,7 +393,7 @@ class State {
393
393
 
394
394
  // Start a provider, return its meta
395
395
  rpcStartProvider(key, port) {
396
- (0, _util.assert)(Object.keys(this.#providers).includes(key), `Provider ${key} is not exposed by extension`);
396
+ (0, _util.assert)(Object.keys(this.#providers).includes(key), 'Provider cannot be found.');
397
397
  if (this.#injectedProviders.get(port)) {
398
398
  return Promise.resolve(this.#providers[key].meta);
399
399
  }
@@ -88,7 +88,7 @@ class Tabs {
88
88
  }
89
89
  getSigningPair(address) {
90
90
  const pair = _uiKeyring.default.getPair(address);
91
- (0, _util.assert)(pair, 'Unable to find keypair');
91
+ (0, _util.assert)(pair, 'Unable to find account');
92
92
  return pair;
93
93
  }
94
94
  bytesSign(url, request) {
@@ -6,19 +6,21 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.TransactionWarning = void 0;
7
7
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
8
  var _SWWarning = require("@subwallet/extension-base/background/warnings/SWWarning");
9
+ var _utils = require("@subwallet/extension-base/utils");
10
+ var _i18next = require("i18next");
9
11
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
12
  // SPDX-License-Identifier: Apache-2.0
11
13
 
12
14
  const defaultWarningMap = {
13
15
  [_KoniTypes.BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT]: {
14
- message: 'Not enough existential deposit',
16
+ message: (0, _utils.detectTranslate)('Insufficient balance to cover existential deposit. Please decrease the transaction amount or increase your current balance'),
15
17
  code: undefined
16
18
  }
17
19
  };
18
20
  class TransactionWarning extends _SWWarning.SWWarning {
19
21
  constructor(warningType, message, code, data) {
20
22
  var _defaultWarningMap$wa, _defaultWarningMap$wa2;
21
- const warningMessage = message || ((_defaultWarningMap$wa = defaultWarningMap[warningType]) === null || _defaultWarningMap$wa === void 0 ? void 0 : _defaultWarningMap$wa.message) || warningType;
23
+ const warningMessage = message || (0, _i18next.t)(((_defaultWarningMap$wa = defaultWarningMap[warningType]) === null || _defaultWarningMap$wa === void 0 ? void 0 : _defaultWarningMap$wa.message) || '') || warningType;
22
24
  super(warningType, warningMessage, (_defaultWarningMap$wa2 = defaultWarningMap[warningType]) === null || _defaultWarningMap$wa2 === void 0 ? void 0 : _defaultWarningMap$wa2.code, data);
23
25
  this.warningType = warningType;
24
26
  }
@@ -19,6 +19,9 @@ const languageOptions = [{
19
19
  }, {
20
20
  text: '日本語',
21
21
  value: 'ja'
22
+ }, {
23
+ text: 'Русский',
24
+ value: 'ru'
22
25
  }, {
23
26
  text: 'Français',
24
27
  value: 'fr'
@@ -36,5 +39,5 @@ const languageOptions = [{
36
39
  value: 'ur'
37
40
  }];
38
41
  exports.languageOptions = languageOptions;
39
- const ENABLE_LANGUAGES = ['en', 'vi', 'zh'];
42
+ const ENABLE_LANGUAGES = ['en', 'vi', 'zh', 'ja', 'ru'];
40
43
  exports.ENABLE_LANGUAGES = ENABLE_LANGUAGES;
@@ -40,6 +40,18 @@ Object.keys(_staking).forEach(function (key) {
40
40
  }
41
41
  });
42
42
  });
43
+ var _storage = require("./storage");
44
+ Object.keys(_storage).forEach(function (key) {
45
+ if (key === "default" || key === "__esModule") return;
46
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
47
+ if (key in exports && exports[key] === _storage[key]) return;
48
+ Object.defineProperty(exports, key, {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _storage[key];
52
+ }
53
+ });
54
+ });
43
55
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
44
56
  // SPDX-License-Identifier: Apache-2.0
45
57
 
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LANGUAGE = void 0;
7
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
+ // SPDX-License-Identifier: Apache-2.0
9
+
10
+ const LANGUAGE = 'current-language';
11
+ exports.LANGUAGE = LANGUAGE;
package/cjs/defaults.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PORT_MOBILE = exports.PORT_EXTENSION = exports.PORT_CONTENT = exports.PHISHING_PAGE_REDIRECT = exports.PASSWORD_EXPIRY_MS = exports.PASSWORD_EXPIRY_MIN = exports.MESSAGE_ORIGIN_PAGE = exports.MESSAGE_ORIGIN_CONTENT = exports.EXTENSION_PREFIX = exports.ALLOWED_PATH = void 0;
6
+ exports.PORT_MOBILE = exports.PORT_EXTENSION = exports.PORT_CONTENT = exports.PHISHING_PAGE_REDIRECT = exports.PASSWORD_EXPIRY_MS = exports.PASSWORD_EXPIRY_MIN = exports.MESSAGE_ORIGIN_PAGE = exports.MESSAGE_ORIGIN_CONTENT = exports.ID_PREFIX = exports.EXTENSION_PREFIX = exports.ALLOWED_PATH = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
@@ -13,6 +13,8 @@ const PHISHING_PAGE_REDIRECT = '/phishing-page-detected';
13
13
  exports.PHISHING_PAGE_REDIRECT = PHISHING_PAGE_REDIRECT;
14
14
  const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX || '';
15
15
  exports.EXTENSION_PREFIX = EXTENSION_PREFIX;
16
+ const ID_PREFIX = process.env.ID_PREFIX || EXTENSION_PREFIX || '';
17
+ exports.ID_PREFIX = ID_PREFIX;
16
18
  const PORT_MOBILE = `${EXTENSION_PREFIX}mobile`;
17
19
  exports.PORT_MOBILE = PORT_MOBILE;
18
20
  const PORT_CONTENT = `${EXTENSION_PREFIX}koni-content`;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.parseSubstrateTransaction = void 0;
7
+ var _i18next = require("i18next");
7
8
  var _util = require("@polkadot/util");
8
9
  // Copyright 2019-2022 @polkadot/extension-koni-base authors & contributors
9
10
  // SPDX-License-Identifier: Apache-2.0
@@ -86,7 +87,7 @@ const parseSubstrateTransaction = (data, apiPromise) => {
86
87
  } catch (e) {
87
88
  return {
88
89
  ...baseInfo,
89
- message: 'Unable to decode method',
90
+ message: (0, _i18next.t)('Unable to decode the information'),
90
91
  method: _method
91
92
  };
92
93
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_HARDBIN = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = void 0;
6
+ exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = void 0;
7
7
  exports.getRandomIpfsGateway = getRandomIpfsGateway;
8
8
  var _utils = require("@subwallet/extension-base/utils");
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -47,14 +47,14 @@ const IPFS_W3S_LINK = 'https://w3s.link/ipfs/';
47
47
  exports.IPFS_W3S_LINK = IPFS_W3S_LINK;
48
48
  const GATEWAY_IPFS_IO = 'https://gateway.ipfs.io/ipfs/';
49
49
  exports.GATEWAY_IPFS_IO = GATEWAY_IPFS_IO;
50
+ const IPFS_IO = 'https://ipfs.io/ipfs/';
51
+ exports.IPFS_IO = IPFS_IO;
50
52
  const DWEB_LINK = 'https://dweb.link/ipfs/';
51
53
  exports.DWEB_LINK = DWEB_LINK;
52
54
  const IPFS_GATEWAY_4EVERLAND = 'https://4everland.io/ipfs/';
53
55
  exports.IPFS_GATEWAY_4EVERLAND = IPFS_GATEWAY_4EVERLAND;
54
56
  const IPFS_FLEEK = 'https://ipfs.fleek.co/ipfs/';
55
57
  exports.IPFS_FLEEK = IPFS_FLEEK;
56
- const IPFS_HARDBIN = 'https://hardbin.com/ipfs/';
57
- exports.IPFS_HARDBIN = IPFS_HARDBIN;
58
58
  let SUPPORTED_NFT_NETWORKS;
59
59
  exports.SUPPORTED_NFT_NETWORKS = SUPPORTED_NFT_NETWORKS;
60
60
  (function (SUPPORTED_NFT_NETWORKS) {
@@ -111,26 +111,24 @@ const RANDOM_IPFS_GATEWAY_SETTING = [{
111
111
  }, {
112
112
  provider: PINATA_IPFS_GATEWAY,
113
113
  weight: 1 // Rate limit too low
114
+ }, {
115
+ provider: DWEB_LINK,
116
+ weight: 5
114
117
  }, {
115
118
  provider: GATEWAY_IPFS_IO,
116
119
  weight: 5
117
120
  }, {
118
- provider: DWEB_LINK,
121
+ provider: IPFS_IO,
119
122
  weight: 5
123
+ }, {
124
+ provider: NFT_STORAGE_GATEWAY,
125
+ weight: 50
120
126
  }];
121
127
  if (!_utils.RuntimeInfo.protocol || _utils.RuntimeInfo.protocol && !_utils.RuntimeInfo.protocol.startsWith('http')) {
122
- RANDOM_IPFS_GATEWAY_SETTING.push({
123
- provider: NFT_STORAGE_GATEWAY,
124
- weight: 50
125
- });
126
128
  RANDOM_IPFS_GATEWAY_SETTING.push({
127
129
  provider: IPFS_FLEEK,
128
130
  weight: 4
129
131
  });
130
- RANDOM_IPFS_GATEWAY_SETTING.push({
131
- provider: IPFS_HARDBIN,
132
- weight: 1
133
- });
134
132
  RANDOM_IPFS_GATEWAY_SETTING.push({
135
133
  provider: IPFS_GATEWAY_4EVERLAND,
136
134
  weight: 2
@@ -45,8 +45,9 @@ function validateParaChainUnbondingCondition(amount, nominatorMetadata, chainSta
45
45
  const bnChainMinStake = new _util.BN(chainStakingMetadata.minStake || '0');
46
46
  const bnCollatorMinStake = new _util.BN(targetNomination.validatorMinStake || '0');
47
47
  const bnMinStake = _util.BN.max(bnCollatorMinStake, bnChainMinStake);
48
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(chainStakingMetadata.chain);
48
49
  if (targetNomination.hasUnstaking) {
49
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
50
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
50
51
  }
51
52
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
52
53
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
@@ -60,9 +61,12 @@ function validateParaChainBondingCondition(chainInfo, amount, selectedCollators,
60
61
  const bnChainMinStake = new _util.BN(chainStakingMetadata.minStake || '0');
61
62
  const bnCollatorMinStake = new _util.BN(selectedCollator.minBond || '0');
62
63
  const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
64
+ const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
65
+ const maxValidatorErrorMessage = (0, _utils.getMaxValidatorErrorMessage)(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
66
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(chainInfo.slug, true);
63
67
  if (!nominatorMetadata || nominatorMetadata.status === _KoniTypes.StakingStatus.NOT_STAKING) {
64
68
  if (!bnTotalStake.gte(bnMinStake)) {
65
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
69
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
66
70
  }
67
71
  return errors;
68
72
  }
@@ -73,11 +77,11 @@ function validateParaChainBondingCondition(chainInfo, amount, selectedCollators,
73
77
  if (!bondedValidators.includes(parsedSelectedCollatorAddress)) {
74
78
  // new delegation
75
79
  if (!bnTotalStake.gte(bnMinStake)) {
76
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
80
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
77
81
  }
78
82
  const delegationCount = nominatorMetadata.nominations.length + 1;
79
83
  if (delegationCount > chainStakingMetadata.maxValidatorPerNominator) {
80
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS));
84
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
81
85
  }
82
86
  } else {
83
87
  let currentDelegationAmount = '0';
@@ -91,10 +95,10 @@ function validateParaChainBondingCondition(chainInfo, amount, selectedCollators,
91
95
  }
92
96
  bnTotalStake = bnTotalStake.add(new _util.BN(currentDelegationAmount));
93
97
  if (!bnTotalStake.gte(bnMinStake)) {
94
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
98
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
95
99
  }
96
100
  if (hasUnstaking) {
97
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
101
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
98
102
  }
99
103
  }
100
104
  return errors;
@@ -28,6 +28,7 @@ var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils")
28
28
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
29
29
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
30
30
  var _utils3 = require("@subwallet/extension-base/utils");
31
+ var _i18next = require("i18next");
31
32
  var _util = require("@polkadot/util");
32
33
  var _utilCrypto = require("@polkadot/util-crypto");
33
34
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -42,7 +43,11 @@ function validateRelayUnbondingCondition(amount, chainStakingMetadata, nominator
42
43
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
43
44
  }
44
45
  if (nominatorMetadata.unstakings.length > chainStakingMetadata.maxWithdrawalRequestPerValidator) {
45
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_UNSTAKING));
46
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_UNSTAKING, (0, _i18next.t)('You cannot unstake more than {{number}} times', {
47
+ replace: {
48
+ number: chainStakingMetadata.maxWithdrawalRequestPerValidator
49
+ }
50
+ })));
46
51
  }
47
52
  return errors;
48
53
  }
@@ -52,6 +57,8 @@ function validatePoolBondingCondition(chainInfo, amount, selectedPool, address,
52
57
  const errors = [];
53
58
  let bnTotalStake = new _util.BN(amount);
54
59
  const bnMinStake = new _util.BN(chainStakingMetadata.minJoinNominationPool || '0');
60
+ const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
61
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(chainInfo.slug, true);
55
62
  if (selectedPool.state !== 'Open') {
56
63
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INACTIVE_NOMINATION_POOL));
57
64
  }
@@ -59,11 +66,11 @@ function validatePoolBondingCondition(chainInfo, amount, selectedPool, address,
59
66
  const bnCurrentActiveStake = new _util.BN(nominatorMetadata.activeStake);
60
67
  bnTotalStake = bnTotalStake.add(bnCurrentActiveStake);
61
68
  if (nominatorMetadata.unstakings.length > 0 && bnCurrentActiveStake.isZero()) {
62
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
69
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
63
70
  }
64
71
  }
65
72
  if (!bnTotalStake.gte(bnMinStake)) {
66
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
73
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
67
74
  }
68
75
  return errors;
69
76
  }
@@ -71,22 +78,24 @@ function validateRelayBondingCondition(chainInfo, amount, selectedValidators, ad
71
78
  const errors = [];
72
79
  let bnTotalStake = new _util.BN(amount);
73
80
  const bnMinStake = new _util.BN(chainStakingMetadata.minStake);
81
+ const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
82
+ const maxValidatorErrorMessage = (0, _utils.getMaxValidatorErrorMessage)(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
74
83
  if (!nominatorMetadata || nominatorMetadata.status === _KoniTypes.StakingStatus.NOT_STAKING) {
75
84
  if (!bnTotalStake.gte(bnMinStake)) {
76
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
85
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
77
86
  }
78
87
  if (selectedValidators.length > chainStakingMetadata.maxValidatorPerNominator) {
79
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS));
88
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
80
89
  }
81
90
  return errors;
82
91
  }
83
92
  const bnCurrentActiveStake = new _util.BN(nominatorMetadata.activeStake);
84
93
  bnTotalStake = bnTotalStake.add(bnCurrentActiveStake);
85
94
  if (!bnTotalStake.gte(bnMinStake)) {
86
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
95
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
87
96
  }
88
97
  if (selectedValidators.length > chainStakingMetadata.maxValidatorPerNominator) {
89
- errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS));
98
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
90
99
  }
91
100
  return errors;
92
101
  }