@subwallet/extension-base 1.2.32-0 → 1.3.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 (415) hide show
  1. package/background/KoniTypes.d.ts +78 -227
  2. package/background/KoniTypes.js +3 -40
  3. package/background/errors/SWError.d.ts +4 -7
  4. package/background/errors/SWError.js +4 -0
  5. package/background/errors/TransactionError.d.ts +2 -2
  6. package/background/errors/TransactionError.js +2 -4
  7. package/background/handlers/State.d.ts +0 -12
  8. package/background/types.d.ts +9 -134
  9. package/background/warnings/TransactionWarning.d.ts +1 -1
  10. package/background/warnings/TransactionWarning.js +5 -1
  11. package/cjs/background/KoniTypes.js +4 -44
  12. package/cjs/background/errors/SWError.js +4 -0
  13. package/cjs/background/errors/TransactionError.js +13 -15
  14. package/cjs/background/warnings/TransactionWarning.js +6 -2
  15. package/cjs/constants/environment.js +13 -0
  16. package/cjs/constants/index.js +40 -13
  17. package/cjs/constants/signing.js +23 -0
  18. package/cjs/constants/storage.js +4 -2
  19. package/cjs/core/consts.js +20 -0
  20. package/cjs/core/logic-validation/recipientAddress.js +106 -0
  21. package/cjs/core/logic-validation/request.js +11 -19
  22. package/cjs/core/logic-validation/swap.js +5 -5
  23. package/cjs/core/logic-validation/transfer.js +83 -42
  24. package/cjs/core/types.js +26 -0
  25. package/cjs/core/utils.js +113 -0
  26. package/cjs/koni/api/dotsama/crowdloan.js +1 -1
  27. package/cjs/koni/api/nft/index.js +14 -5
  28. package/cjs/koni/api/staking/bonding/paraChain.js +8 -8
  29. package/cjs/koni/api/staking/bonding/relayChain.js +9 -9
  30. package/cjs/koni/api/staking/index.js +4 -1
  31. package/cjs/koni/background/cron.js +7 -7
  32. package/cjs/koni/background/handlers/Extension.js +510 -1446
  33. package/cjs/koni/background/handlers/State.js +61 -238
  34. package/cjs/koni/background/handlers/Tabs.js +143 -107
  35. package/cjs/koni/background/subscription.js +5 -5
  36. package/cjs/packageInfo.js +1 -1
  37. package/cjs/page/Accounts.js +2 -5
  38. package/cjs/page/SubWalleEvmProvider.js +1 -1
  39. package/cjs/page/index.js +2 -1
  40. package/cjs/services/balance-service/BalanceMapImpl.js +48 -20
  41. package/cjs/services/balance-service/helpers/subscribe/index.js +27 -12
  42. package/cjs/services/balance-service/helpers/subscribe/ton/consts.js +40 -0
  43. package/cjs/services/balance-service/helpers/subscribe/ton/ton.js +120 -0
  44. package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +181 -0
  45. package/cjs/services/balance-service/index.js +25 -13
  46. package/cjs/services/balance-service/transfer/token.js +41 -24
  47. package/cjs/services/balance-service/transfer/ton-transfer.js +136 -0
  48. package/cjs/services/buy-service/index.js +5 -1
  49. package/cjs/services/chain-service/constants.js +1 -1
  50. package/cjs/services/chain-service/handler/TonApi.js +213 -0
  51. package/cjs/services/chain-service/handler/TonChainHandler.js +81 -0
  52. package/cjs/services/chain-service/index.js +32 -8
  53. package/cjs/services/chain-service/utils/index.js +78 -22
  54. package/cjs/services/earning-service/constants/chains.js +3 -1
  55. package/cjs/services/earning-service/handlers/base.js +2 -1
  56. package/cjs/services/earning-service/handlers/lending/base.js +8 -9
  57. package/cjs/services/earning-service/handlers/lending/interlay.js +1 -1
  58. package/cjs/services/earning-service/handlers/liquid-staking/base.js +9 -10
  59. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +1 -1
  60. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +1 -1
  61. package/cjs/services/earning-service/handlers/native-staking/astar.js +2 -2
  62. package/cjs/services/earning-service/handlers/native-staking/base-para.js +13 -13
  63. package/cjs/services/earning-service/handlers/native-staking/base.js +2 -2
  64. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +2 -2
  65. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +15 -15
  66. package/cjs/services/earning-service/handlers/nomination-pool/index.js +14 -14
  67. package/cjs/services/earning-service/handlers/special.js +10 -10
  68. package/cjs/services/earning-service/service.js +26 -17
  69. package/cjs/services/history-service/helpers/subscan-extrinsic-parser-helper.js +1 -1
  70. package/cjs/services/history-service/index.js +29 -11
  71. package/cjs/services/history-service/subscan-history.js +9 -21
  72. package/cjs/services/keyring-service/context/account-context.js +259 -0
  73. package/cjs/services/keyring-service/context/handlers/Base.js +20 -0
  74. package/cjs/services/keyring-service/context/handlers/Derive.js +377 -0
  75. package/cjs/services/keyring-service/context/handlers/Inject.js +75 -0
  76. package/cjs/services/keyring-service/context/handlers/Json.js +348 -0
  77. package/cjs/services/keyring-service/context/handlers/Ledger.js +165 -0
  78. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +218 -0
  79. package/cjs/services/keyring-service/context/handlers/Modify.js +258 -0
  80. package/cjs/services/keyring-service/context/handlers/Secret.js +310 -0
  81. package/cjs/services/keyring-service/context/handlers/index.js +82 -0
  82. package/cjs/services/keyring-service/context/state.js +649 -0
  83. package/cjs/services/keyring-service/context/stores/AccountProxy.js +32 -0
  84. package/cjs/services/keyring-service/context/stores/Base.js +37 -0
  85. package/cjs/services/keyring-service/context/stores/CurrentAccount.js +28 -0
  86. package/cjs/services/keyring-service/context/stores/ModifyPair.js +19 -0
  87. package/cjs/services/keyring-service/context/stores/index.js +38 -0
  88. package/cjs/services/keyring-service/index.js +20 -164
  89. package/cjs/services/migration-service/scripts/index.js +6 -4
  90. package/cjs/services/migration-service/scripts/{MigrateLedgerAccountV2.js → keyring/MigrateLedgerAccountV2.js} +1 -1
  91. package/cjs/services/migration-service/scripts/keyring/MigratePairData.js +28 -0
  92. package/cjs/services/migration-service/scripts/{MigrateRemoveGenesisHash.js → keyring/MigrateRemoveGenesisHash.js} +1 -1
  93. package/cjs/services/request-service/constants.js +5 -3
  94. package/cjs/services/request-service/handler/AuthRequestHandler.js +104 -57
  95. package/cjs/services/request-service/handler/EvmRequestHandler.js +3 -4
  96. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +5 -11
  97. package/cjs/services/request-service/handler/TonRequestHandler.js +175 -0
  98. package/cjs/services/request-service/index.js +24 -5
  99. package/cjs/services/swap-service/handler/asset-hub/handler.js +6 -5
  100. package/cjs/services/swap-service/handler/base-handler.js +8 -8
  101. package/cjs/services/swap-service/handler/chainflip-handler.js +5 -4
  102. package/cjs/services/swap-service/handler/hydradx-handler.js +4 -3
  103. package/cjs/services/swap-service/index.js +4 -4
  104. package/cjs/services/transaction-service/helpers/index.js +6 -1
  105. package/cjs/services/transaction-service/index.js +184 -84
  106. package/cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js +2 -10
  107. package/cjs/stores/AccountProxyStore.js +18 -0
  108. package/cjs/stores/ModifyPairStore.js +18 -0
  109. package/cjs/stores/index.js +23 -2
  110. package/cjs/types/account/action/add/index.js +38 -0
  111. package/cjs/types/account/action/add/json.js +1 -0
  112. package/cjs/types/account/action/add/mnemonic.js +1 -0
  113. package/cjs/types/account/action/add/secret.js +1 -0
  114. package/cjs/types/account/action/derive.js +1 -0
  115. package/cjs/types/account/action/edit.js +1 -0
  116. package/cjs/types/account/action/export.js +1 -0
  117. package/cjs/types/account/action/index.js +71 -0
  118. package/cjs/types/account/action/subscribe.js +16 -0
  119. package/cjs/types/account/action/validate.js +1 -0
  120. package/cjs/types/account/error/common.js +40 -0
  121. package/cjs/types/account/error/derive.js +55 -0
  122. package/cjs/types/account/error/index.js +27 -0
  123. package/cjs/types/account/index.js +38 -0
  124. package/cjs/types/account/info/current.js +1 -0
  125. package/cjs/types/account/info/index.js +38 -0
  126. package/cjs/types/account/info/keyring.js +90 -0
  127. package/cjs/types/account/info/proxy.js +49 -0
  128. package/cjs/types/error.js +1 -0
  129. package/cjs/types/index.js +44 -0
  130. package/cjs/types/transaction/data.js +1 -0
  131. package/cjs/types/transaction/error.js +53 -0
  132. package/cjs/types/transaction/index.js +49 -0
  133. package/cjs/types/transaction/request.js +1 -0
  134. package/cjs/types/transaction/warning.js +14 -0
  135. package/cjs/types/yield/actions/join/validate.js +1 -16
  136. package/cjs/utils/account/analyze.js +166 -0
  137. package/cjs/utils/account/common.js +121 -0
  138. package/cjs/utils/account/derive/index.js +27 -0
  139. package/cjs/utils/account/derive/info/index.js +27 -0
  140. package/cjs/utils/account/derive/info/solo.js +246 -0
  141. package/cjs/utils/account/derive/info/unified.js +112 -0
  142. package/cjs/utils/account/derive/validate.js +177 -0
  143. package/cjs/utils/account/index.js +49 -0
  144. package/cjs/utils/account/transform.js +566 -0
  145. package/cjs/utils/auth.js +46 -0
  146. package/cjs/utils/getId.js +8 -1
  147. package/cjs/utils/index.js +48 -62
  148. package/constants/environment.d.ts +1 -0
  149. package/constants/environment.js +6 -0
  150. package/constants/index.d.ts +5 -1
  151. package/constants/index.js +5 -2
  152. package/constants/signing.d.ts +4 -0
  153. package/constants/signing.js +15 -0
  154. package/constants/storage.d.ts +1 -0
  155. package/constants/storage.js +2 -1
  156. package/core/consts.d.ts +1 -0
  157. package/core/consts.js +13 -0
  158. package/core/logic-validation/recipientAddress.d.ts +2 -0
  159. package/core/logic-validation/recipientAddress.js +100 -0
  160. package/core/logic-validation/request.js +10 -18
  161. package/core/logic-validation/swap.js +1 -1
  162. package/core/logic-validation/transfer.d.ts +3 -2
  163. package/core/logic-validation/transfer.js +50 -10
  164. package/core/types.d.ts +26 -0
  165. package/core/types.js +19 -0
  166. package/core/utils.d.ts +10 -0
  167. package/core/utils.js +105 -0
  168. package/koni/api/dotsama/crowdloan.js +1 -1
  169. package/koni/api/nft/index.js +14 -5
  170. package/koni/api/staking/bonding/paraChain.js +2 -2
  171. package/koni/api/staking/bonding/relayChain.js +2 -2
  172. package/koni/api/staking/index.js +4 -1
  173. package/koni/background/cron.js +7 -7
  174. package/koni/background/handlers/Extension.d.ts +26 -35
  175. package/koni/background/handlers/Extension.js +337 -1242
  176. package/koni/background/handlers/State.d.ts +12 -19
  177. package/koni/background/handlers/State.js +57 -231
  178. package/koni/background/handlers/Tabs.d.ts +2 -3
  179. package/koni/background/handlers/Tabs.js +105 -61
  180. package/koni/background/subscription.js +5 -5
  181. package/package.json +352 -53
  182. package/packageInfo.js +1 -1
  183. package/page/Accounts.js +2 -5
  184. package/page/SubWalleEvmProvider.js +1 -1
  185. package/page/index.js +2 -1
  186. package/services/balance-service/BalanceMapImpl.d.ts +6 -4
  187. package/services/balance-service/BalanceMapImpl.js +44 -18
  188. package/services/balance-service/helpers/subscribe/index.d.ts +3 -4
  189. package/services/balance-service/helpers/subscribe/index.js +29 -14
  190. package/services/balance-service/helpers/subscribe/ton/consts.d.ts +18 -0
  191. package/services/balance-service/helpers/subscribe/ton/consts.js +28 -0
  192. package/services/balance-service/helpers/subscribe/ton/ton.d.ts +3 -0
  193. package/services/balance-service/helpers/subscribe/ton/ton.js +111 -0
  194. package/services/balance-service/helpers/subscribe/ton/types.d.ts +26 -0
  195. package/services/balance-service/helpers/subscribe/ton/utils.d.ts +32 -0
  196. package/services/balance-service/helpers/subscribe/ton/utils.js +159 -0
  197. package/services/balance-service/index.js +25 -13
  198. package/services/balance-service/transfer/token.d.ts +2 -2
  199. package/services/balance-service/transfer/token.js +18 -1
  200. package/services/balance-service/transfer/ton-transfer.d.ts +25 -0
  201. package/services/balance-service/transfer/ton-transfer.js +127 -0
  202. package/services/buy-service/index.js +5 -1
  203. package/services/buy-service/types.d.ts +2 -2
  204. package/services/chain-service/constants.js +1 -1
  205. package/services/chain-service/handler/TonApi.d.ts +52 -0
  206. package/services/chain-service/handler/TonApi.js +204 -0
  207. package/services/chain-service/handler/TonChainHandler.d.ts +17 -0
  208. package/services/chain-service/handler/TonChainHandler.js +73 -0
  209. package/services/chain-service/index.d.ts +5 -1
  210. package/services/chain-service/index.js +32 -8
  211. package/services/chain-service/types.d.ts +24 -0
  212. package/services/chain-service/utils/index.d.ts +10 -2
  213. package/services/chain-service/utils/index.js +59 -18
  214. package/services/earning-service/constants/chains.d.ts +1 -0
  215. package/services/earning-service/constants/chains.js +1 -0
  216. package/services/earning-service/handlers/base.js +3 -2
  217. package/services/earning-service/handlers/lending/base.js +1 -2
  218. package/services/earning-service/handlers/lending/interlay.js +2 -2
  219. package/services/earning-service/handlers/liquid-staking/base.js +1 -2
  220. package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  221. package/services/earning-service/handlers/native-staking/amplitude.js +2 -2
  222. package/services/earning-service/handlers/native-staking/astar.js +2 -2
  223. package/services/earning-service/handlers/native-staking/base-para.js +2 -2
  224. package/services/earning-service/handlers/native-staking/base.js +2 -2
  225. package/services/earning-service/handlers/native-staking/para-chain.js +2 -2
  226. package/services/earning-service/handlers/native-staking/relay-chain.js +2 -2
  227. package/services/earning-service/handlers/nomination-pool/index.js +2 -2
  228. package/services/earning-service/handlers/special.js +2 -2
  229. package/services/earning-service/service.js +18 -9
  230. package/services/event-service/types.d.ts +3 -1
  231. package/services/history-service/helpers/subscan-extrinsic-parser-helper.js +1 -1
  232. package/services/history-service/index.d.ts +4 -1
  233. package/services/history-service/index.js +29 -11
  234. package/services/history-service/subscan-history.js +8 -20
  235. package/services/keyring-service/context/account-context.d.ts +87 -0
  236. package/services/keyring-service/context/account-context.js +250 -0
  237. package/services/keyring-service/context/handlers/Base.d.ts +11 -0
  238. package/services/keyring-service/context/handlers/Base.js +13 -0
  239. package/services/keyring-service/context/handlers/Derive.d.ts +29 -0
  240. package/services/keyring-service/context/handlers/Derive.js +365 -0
  241. package/services/keyring-service/context/handlers/Inject.d.ts +11 -0
  242. package/services/keyring-service/context/handlers/Inject.js +69 -0
  243. package/services/keyring-service/context/handlers/Json.d.ts +18 -0
  244. package/services/keyring-service/context/handlers/Json.js +328 -0
  245. package/services/keyring-service/context/handlers/Ledger.d.ts +11 -0
  246. package/services/keyring-service/context/handlers/Ledger.js +158 -0
  247. package/services/keyring-service/context/handlers/Mnemonic.d.ts +15 -0
  248. package/services/keyring-service/context/handlers/Mnemonic.js +206 -0
  249. package/services/keyring-service/context/handlers/Modify.d.ts +16 -0
  250. package/services/keyring-service/context/handlers/Modify.js +250 -0
  251. package/services/keyring-service/context/handlers/Secret.d.ts +16 -0
  252. package/services/keyring-service/context/handlers/Secret.js +299 -0
  253. package/services/keyring-service/context/handlers/index.d.ts +7 -0
  254. package/services/keyring-service/context/handlers/index.js +10 -0
  255. package/services/keyring-service/context/state.d.ts +92 -0
  256. package/services/keyring-service/context/state.js +629 -0
  257. package/services/keyring-service/context/stores/AccountProxy.d.ts +13 -0
  258. package/services/keyring-service/context/stores/AccountProxy.js +25 -0
  259. package/services/keyring-service/context/stores/Base.d.ts +22 -0
  260. package/services/keyring-service/context/stores/Base.js +30 -0
  261. package/services/keyring-service/context/stores/CurrentAccount.d.ts +15 -0
  262. package/services/keyring-service/context/stores/CurrentAccount.js +21 -0
  263. package/services/keyring-service/context/stores/ModifyPair.d.ts +10 -0
  264. package/services/keyring-service/context/stores/ModifyPair.js +12 -0
  265. package/services/keyring-service/context/stores/index.d.ts +3 -0
  266. package/services/keyring-service/context/stores/index.js +6 -0
  267. package/services/keyring-service/index.d.ts +10 -22
  268. package/services/keyring-service/index.js +20 -161
  269. package/services/migration-service/scripts/index.js +6 -4
  270. package/services/migration-service/scripts/{MigrateLedgerAccountV2.d.ts → keyring/MigrateLedgerAccountV2.d.ts} +1 -1
  271. package/services/migration-service/scripts/{MigrateLedgerAccountV2.js → keyring/MigrateLedgerAccountV2.js} +1 -1
  272. package/services/migration-service/scripts/keyring/MigratePairData.d.ts +4 -0
  273. package/services/migration-service/scripts/keyring/MigratePairData.js +20 -0
  274. package/services/migration-service/scripts/{MigrateRemoveGenesisHash.js → keyring/MigrateRemoveGenesisHash.js} +1 -1
  275. package/services/request-service/constants.d.ts +1 -1
  276. package/services/request-service/constants.js +2 -1
  277. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
  278. package/services/request-service/handler/AuthRequestHandler.js +93 -45
  279. package/services/request-service/handler/EvmRequestHandler.js +3 -4
  280. package/services/request-service/handler/SubstrateRequestHandler.d.ts +2 -2
  281. package/services/request-service/handler/SubstrateRequestHandler.js +5 -11
  282. package/services/request-service/handler/TonRequestHandler.d.ts +17 -0
  283. package/services/request-service/handler/TonRequestHandler.js +168 -0
  284. package/services/request-service/index.d.ts +8 -3
  285. package/services/request-service/index.js +23 -5
  286. package/services/request-service/types.d.ts +6 -3
  287. package/services/swap-service/handler/asset-hub/handler.d.ts +1 -1
  288. package/services/swap-service/handler/asset-hub/handler.js +2 -1
  289. package/services/swap-service/handler/base-handler.js +1 -1
  290. package/services/swap-service/handler/chainflip-handler.d.ts +1 -1
  291. package/services/swap-service/handler/chainflip-handler.js +4 -3
  292. package/services/swap-service/handler/hydradx-handler.d.ts +1 -1
  293. package/services/swap-service/handler/hydradx-handler.js +2 -1
  294. package/services/swap-service/index.js +1 -1
  295. package/services/transaction-service/helpers/index.d.ts +2 -0
  296. package/services/transaction-service/helpers/index.js +4 -0
  297. package/services/transaction-service/index.d.ts +1 -0
  298. package/services/transaction-service/index.js +114 -17
  299. package/services/transaction-service/types.d.ts +4 -2
  300. package/services/wallet-connect-service/handler/PolkadotRequestHandler.js +2 -10
  301. package/stores/AccountProxyStore.d.ts +5 -0
  302. package/stores/AccountProxyStore.js +10 -0
  303. package/stores/Authorize.d.ts +1 -1
  304. package/stores/CurrentAccountStore.d.ts +1 -1
  305. package/stores/ModifyPairStore.d.ts +5 -0
  306. package/stores/ModifyPairStore.js +10 -0
  307. package/stores/index.d.ts +4 -1
  308. package/stores/index.js +5 -2
  309. package/types/account/action/add/index.d.ts +3 -0
  310. package/types/account/action/add/index.js +6 -0
  311. package/types/account/action/add/json.d.ts +29 -0
  312. package/types/account/action/add/json.js +1 -0
  313. package/types/account/action/add/mnemonic.d.ts +77 -0
  314. package/types/account/action/add/mnemonic.js +1 -0
  315. package/types/account/action/add/secret.d.ts +55 -0
  316. package/types/account/action/add/secret.js +1 -0
  317. package/types/account/action/derive.d.ts +77 -0
  318. package/types/account/action/derive.js +1 -0
  319. package/types/account/action/edit.d.ts +31 -0
  320. package/types/account/action/edit.js +1 -0
  321. package/types/account/action/export.d.ts +15 -0
  322. package/types/account/action/export.js +1 -0
  323. package/types/account/action/index.d.ts +6 -0
  324. package/types/account/action/index.js +9 -0
  325. package/types/account/action/subscribe.d.ts +22 -0
  326. package/types/account/action/subscribe.js +10 -0
  327. package/types/account/action/validate.d.ts +17 -0
  328. package/types/account/action/validate.js +1 -0
  329. package/types/account/error/common.d.ts +10 -0
  330. package/types/account/error/common.js +33 -0
  331. package/types/account/error/derive.d.ts +13 -0
  332. package/types/account/error/derive.js +48 -0
  333. package/types/account/error/index.d.ts +2 -0
  334. package/types/account/error/index.js +5 -0
  335. package/types/account/index.d.ts +3 -0
  336. package/types/account/index.js +6 -0
  337. package/types/account/info/current.d.ts +10 -0
  338. package/types/account/info/current.js +1 -0
  339. package/types/account/info/index.d.ts +3 -0
  340. package/types/account/info/index.js +6 -0
  341. package/types/account/info/keyring.d.ts +161 -0
  342. package/types/account/info/keyring.js +88 -0
  343. package/types/account/info/proxy.d.ts +73 -0
  344. package/types/account/info/proxy.js +46 -0
  345. package/types/balance/index.d.ts +4 -1
  346. package/types/buy.d.ts +3 -1
  347. package/types/error.d.ts +8 -0
  348. package/types/error.js +1 -0
  349. package/types/index.d.ts +4 -0
  350. package/types/index.js +5 -1
  351. package/types/transaction/data.d.ts +17 -0
  352. package/types/transaction/data.js +1 -0
  353. package/types/transaction/error.d.ts +39 -0
  354. package/types/transaction/error.js +44 -0
  355. package/types/transaction/index.d.ts +4 -0
  356. package/types/transaction/index.js +7 -0
  357. package/types/transaction/request.d.ts +24 -0
  358. package/types/transaction/request.js +1 -0
  359. package/types/transaction/warning.d.ts +5 -0
  360. package/types/transaction/warning.js +8 -0
  361. package/types/yield/actions/join/submit.d.ts +2 -2
  362. package/types/yield/actions/join/validate.d.ts +1 -6
  363. package/types/yield/actions/join/validate.js +1 -10
  364. package/types/yield/actions/others.d.ts +1 -1
  365. package/utils/account/analyze.d.ts +4 -0
  366. package/utils/account/analyze.js +159 -0
  367. package/utils/account/common.d.ts +16 -0
  368. package/utils/account/common.js +104 -0
  369. package/utils/account/derive/index.d.ts +2 -0
  370. package/utils/account/derive/index.js +5 -0
  371. package/utils/account/derive/info/index.d.ts +2 -0
  372. package/utils/account/derive/info/index.js +5 -0
  373. package/utils/account/derive/info/solo.d.ts +11 -0
  374. package/utils/account/derive/info/solo.js +230 -0
  375. package/utils/account/derive/info/unified.d.ts +7 -0
  376. package/utils/account/derive/info/unified.js +102 -0
  377. package/utils/account/derive/validate.d.ts +8 -0
  378. package/utils/account/derive/validate.js +165 -0
  379. package/utils/account/index.d.ts +4 -0
  380. package/utils/account/index.js +7 -0
  381. package/utils/account/transform.d.ts +41 -0
  382. package/utils/account/transform.js +533 -0
  383. package/utils/auth.d.ts +2 -0
  384. package/utils/auth.js +39 -0
  385. package/utils/canDerive.d.ts +1 -1
  386. package/utils/eth/mergeTransactionAndSignature.d.ts +1 -1
  387. package/utils/getId.d.ts +1 -0
  388. package/utils/getId.js +3 -1
  389. package/utils/index.d.ts +12 -5
  390. package/utils/index.js +28 -47
  391. package/cjs/signers/substrates/KeyringSigner.js +0 -35
  392. package/cjs/signers/substrates/LedgerSigner.js +0 -44
  393. package/cjs/signers/substrates/QrSigner.js +0 -63
  394. package/cjs/signers/types.js +0 -15
  395. package/cjs/signers/web3/QrSigner.js +0 -67
  396. package/cjs/utils/account.js +0 -34
  397. package/signers/substrates/KeyringSigner.d.ts +0 -13
  398. package/signers/substrates/KeyringSigner.js +0 -27
  399. package/signers/substrates/LedgerSigner.d.ts +0 -13
  400. package/signers/substrates/LedgerSigner.js +0 -37
  401. package/signers/substrates/QrSigner.d.ts +0 -20
  402. package/signers/substrates/QrSigner.js +0 -55
  403. package/signers/types.d.ts +0 -34
  404. package/signers/types.js +0 -9
  405. package/signers/web3/QrSigner.d.ts +0 -18
  406. package/signers/web3/QrSigner.js +0 -59
  407. package/types/transaction.d.ts +0 -3
  408. package/utils/account.d.ts +0 -5
  409. package/utils/account.js +0 -24
  410. /package/cjs/{types/transaction.js → services/balance-service/helpers/subscribe/ton/types.js} +0 -0
  411. /package/cjs/services/migration-service/scripts/{MigrateLedgerAccount.js → keyring/MigrateLedgerAccount.js} +0 -0
  412. /package/{types/transaction.js → services/balance-service/helpers/subscribe/ton/types.js} +0 -0
  413. /package/services/migration-service/scripts/{MigrateLedgerAccount.d.ts → keyring/MigrateLedgerAccount.d.ts} +0 -0
  414. /package/services/migration-service/scripts/{MigrateLedgerAccount.js → keyring/MigrateLedgerAccount.js} +0 -0
  415. /package/services/migration-service/scripts/{MigrateRemoveGenesisHash.d.ts → keyring/MigrateRemoveGenesisHash.d.ts} +0 -0
@@ -8,11 +8,7 @@ var _exportNames = {
8
8
  isDef: true,
9
9
  nonEmptyArr: true,
10
10
  isEmptyArray: true,
11
- isAccountAll: true,
12
- reformatAddress: true,
13
11
  filterAddressByNetworkKey: true,
14
- categoryAddresses: true,
15
- categoryNetworks: true,
16
12
  convertToEvmAddress: true,
17
13
  isUrl: true,
18
14
  inJestTest: true,
@@ -32,6 +28,8 @@ var _exportNames = {
32
28
  filterAndSortingAccountByAuthType: true,
33
29
  parseRawNumber: true,
34
30
  isSameAddress: true,
31
+ isSameAddressType: true,
32
+ isAddressAndChainCompatible: true,
35
33
  getDomainFromUrl: true,
36
34
  waitTimeout: true,
37
35
  stripUrl: true,
@@ -47,8 +45,6 @@ Object.defineProperty(exports, "canDerive", {
47
45
  return _canDerive.canDerive;
48
46
  }
49
47
  });
50
- exports.categoryAddresses = categoryAddresses;
51
- exports.categoryNetworks = categoryNetworks;
52
48
  exports.convertFundStatus = void 0;
53
49
  exports.convertToEvmAddress = convertToEvmAddress;
54
50
  exports.filterAddressByNetworkKey = filterAddressByNetworkKey;
@@ -58,15 +54,15 @@ exports.getNftProvider = void 0;
58
54
  exports.hexToStr = hexToStr;
59
55
  exports.hexToUTF16 = hexToUTF16;
60
56
  exports.inJestTest = inJestTest;
61
- exports.isAccountAll = isAccountAll;
57
+ exports.isAddressAndChainCompatible = isAddressAndChainCompatible;
62
58
  exports.isEmptyArray = exports.isDef = exports.isAddressesEqual = void 0;
63
59
  exports.isSameAddress = isSameAddress;
60
+ exports.isSameAddressType = isSameAddressType;
64
61
  exports.isUrl = isUrl;
65
62
  exports.isValidSubstrateAddress = exports.isValidProvider = void 0;
66
63
  exports.mergeNetworkProviders = mergeNetworkProviders;
67
64
  exports.parseIpfsLink = exports.notDef = exports.nonEmptyArr = void 0;
68
65
  exports.parseRawNumber = parseRawNumber;
69
- exports.reformatAddress = reformatAddress;
70
66
  exports.stripUrl = void 0;
71
67
  exports.sumBN = sumBN;
72
68
  exports.toUnit = exports.swParseIPFSUrl = void 0;
@@ -74,8 +70,10 @@ exports.utf16ToString = utf16ToString;
74
70
  exports.wait = wait;
75
71
  exports.waitTimeout = waitTimeout;
76
72
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
77
- var _constants = require("@subwallet/extension-base/constants");
78
73
  var _config = require("@subwallet/extension-base/koni/api/nft/config");
74
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
75
+ var _account = require("@subwallet/extension-base/utils/account");
76
+ var _keyring = require("@subwallet/keyring");
79
77
  var _i18next = require("i18next");
80
78
  var _util = require("@polkadot/util");
81
79
  var _utilCrypto = require("@polkadot/util-crypto");
@@ -104,15 +102,15 @@ Object.keys(_fetch).forEach(function (key) {
104
102
  }
105
103
  });
106
104
  });
107
- var _account = require("./account");
108
- Object.keys(_account).forEach(function (key) {
105
+ var _account2 = require("./account");
106
+ Object.keys(_account2).forEach(function (key) {
109
107
  if (key === "default" || key === "__esModule") return;
110
108
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
111
- if (key in exports && exports[key] === _account[key]) return;
109
+ if (key in exports && exports[key] === _account2[key]) return;
112
110
  Object.defineProperty(exports, key, {
113
111
  enumerable: true,
114
112
  get: function () {
115
- return _account[key];
113
+ return _account2[key];
116
114
  }
117
115
  });
118
116
  });
@@ -140,6 +138,18 @@ Object.keys(_asset).forEach(function (key) {
140
138
  }
141
139
  });
142
140
  });
141
+ var _auth = require("./auth");
142
+ Object.keys(_auth).forEach(function (key) {
143
+ if (key === "default" || key === "__esModule") return;
144
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
145
+ if (key in exports && exports[key] === _auth[key]) return;
146
+ Object.defineProperty(exports, key, {
147
+ enumerable: true,
148
+ get: function () {
149
+ return _auth[key];
150
+ }
151
+ });
152
+ });
143
153
  var _environment = require("./environment");
144
154
  Object.keys(_environment).forEach(function (key) {
145
155
  if (key === "default" || key === "__esModule") return;
@@ -306,36 +316,11 @@ exports.isDef = isDef;
306
316
  const nonEmptyArr = x => Array.isArray(x) && x.length > 0;
307
317
  exports.nonEmptyArr = nonEmptyArr;
308
318
  const isEmptyArray = x => !Array.isArray(x) || Array.isArray(x) && x.length === 0;
319
+
320
+ /**
321
+ * @deprecated
322
+ * */
309
323
  exports.isEmptyArray = isEmptyArray;
310
- function isAccountAll(address) {
311
- return address === _constants.ALL_ACCOUNT_KEY;
312
- }
313
- function reformatAddress(address) {
314
- let networkPrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 42;
315
- let isEthereum = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
316
- try {
317
- if (!address || address === '') {
318
- return '';
319
- }
320
- if ((0, _utilCrypto.isEthereumAddress)(address)) {
321
- return address;
322
- }
323
- if (isAccountAll(address)) {
324
- return address;
325
- }
326
- const publicKey = (0, _utilCrypto.decodeAddress)(address);
327
- if (isEthereum) {
328
- return (0, _utilCrypto.ethereumEncode)(publicKey);
329
- }
330
- if (networkPrefix < 0) {
331
- return address;
332
- }
333
- return (0, _utilCrypto.encodeAddress)(publicKey, networkPrefix);
334
- } catch (e) {
335
- console.warn('Get error while reformat address', address, e);
336
- return address;
337
- }
338
- }
339
324
  function filterAddressByNetworkKey(addresses, networkKey, isEthereum) {
340
325
  if (isEthereum) {
341
326
  return addresses.filter(address => {
@@ -347,25 +332,12 @@ function filterAddressByNetworkKey(addresses, networkKey, isEthereum) {
347
332
  });
348
333
  }
349
334
  }
350
- function categoryAddresses(addresses) {
351
- const substrateAddresses = [];
352
- const evmAddresses = [];
353
- addresses.forEach(address => {
354
- if ((0, _utilCrypto.isEthereumAddress)(address)) {
355
- evmAddresses.push(address);
356
- } else {
357
- substrateAddresses.push(address);
358
- }
359
- });
360
- return [substrateAddresses, evmAddresses];
361
- }
362
- function categoryNetworks(networks) {
363
- const substrateAddresses = [];
364
- const evmAddresses = [];
365
- return [substrateAddresses, evmAddresses];
366
- }
335
+
336
+ /**
337
+ * @deprecated
338
+ * */
367
339
  function convertToEvmAddress(substrateAddress) {
368
- const addressBytes = (0, _utilCrypto.decodeAddress)(substrateAddress);
340
+ const addressBytes = (0, _keyring.decodeAddress)(substrateAddress);
369
341
  return (0, _utilCrypto.ethereumEncode)('0x' + Buffer.from(addressBytes.subarray(0, 20)).toString('hex'));
370
342
  }
371
343
  function isUrl(targetString) {
@@ -436,7 +408,7 @@ function hexToUTF16(hex) {
436
408
  }
437
409
  const isValidSubstrateAddress = address => {
438
410
  try {
439
- (0, _utilCrypto.encodeAddress)((0, _util.isHex)(address) ? (0, _util.hexToU8a)(address) : (0, _utilCrypto.decodeAddress)(address));
411
+ (0, _keyring.encodeAddress)((0, _util.isHex)(address) ? (0, _util.hexToU8a)(address) : (0, _keyring.decodeAddress)(address));
440
412
  return true;
441
413
  } catch (error) {
442
414
  return false;
@@ -579,9 +551,23 @@ function isSameAddress(address1, address2) {
579
551
  if ((0, _utilCrypto.isEthereumAddress)(address1)) {
580
552
  return address1.toLowerCase() === address2.toLowerCase();
581
553
  }
582
- return reformatAddress(address1, 0) === reformatAddress(address2, 0); // TODO: maybe there's a better way
554
+ return (0, _account.reformatAddress)(address1, 0) === (0, _account.reformatAddress)(address2, 0); // TODO: maybe there's a better way
583
555
  }
584
556
 
557
+ function isSameAddressType(address1, address2) {
558
+ const isSameEvmAddress = (0, _utilCrypto.isEthereumAddress)(address1) && (0, _utilCrypto.isEthereumAddress)(address2);
559
+ const isSameTonAddress = (0, _keyring.isTonAddress)(address1) && (0, _keyring.isTonAddress)(address2);
560
+ const isSameSubstrateAddress = !(0, _utilCrypto.isEthereumAddress)(address1) && !(0, _keyring.isTonAddress)(address1) && !(0, _utilCrypto.isEthereumAddress)(address2) && !(0, _keyring.isTonAddress)(address2); // todo: need isSubstrateAddress util function to check exactly
561
+
562
+ return isSameEvmAddress || isSameTonAddress || isSameSubstrateAddress;
563
+ }
564
+ function isAddressAndChainCompatible(address, chain) {
565
+ const isEvmCompatible = (0, _utilCrypto.isEthereumAddress)(address) && (0, _utils._isChainEvmCompatible)(chain);
566
+ const isTonCompatible = (0, _keyring.isTonAddress)(address) && (0, _utils._isChainTonCompatible)(chain);
567
+ const isSubstrateCompatible = !(0, _utilCrypto.isEthereumAddress)(address) && !(0, _keyring.isTonAddress)(address) && (0, _utils._isChainSubstrateCompatible)(chain); // todo: need isSubstrateAddress util function to check exactly
568
+
569
+ return isEvmCompatible || isSubstrateCompatible || isTonCompatible;
570
+ }
585
571
  function getDomainFromUrl(url) {
586
572
  return url.replace(/^(https?:\/\/)?(www\.)?/, '').split('/')[0];
587
573
  }
@@ -0,0 +1 @@
1
+ export declare const isProductionMode: boolean;
@@ -0,0 +1,6 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
5
+ const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
6
+ export const isProductionMode = PRODUCTION_BRANCHES.indexOf(branchName) > -1;
@@ -1,3 +1,4 @@
1
+ import { AccountAuthType } from '@subwallet/extension-base/background/types';
1
2
  export declare const BASE_SECOND_INTERVAL = 1000;
2
3
  export declare const BASE_MINUTE_INTERVAL: number;
3
4
  export declare const CRON_REFRESH_PRICE_INTERVAL = 30000;
@@ -22,6 +23,7 @@ export declare const ALL_ACCOUNT_KEY = "ALL";
22
23
  export declare const ALL_NETWORK_KEY = "all";
23
24
  export declare const ALL_GENESIS_HASH: null;
24
25
  export declare const IGNORE_GET_SUBSTRATE_FEATURES_LIST: string[];
26
+ export declare const ALL_ACCOUNT_AUTH_TYPES: AccountAuthType[];
25
27
  export declare const IGNORE_QR_SIGNER: string[];
26
28
  export declare const XCM_MIN_AMOUNT_RATIO = 1.2;
27
29
  export declare const XCM_FEE_RATIO = 2;
@@ -30,6 +32,8 @@ export declare const NETWORK_MULTI_GAS_FEE: string[];
30
32
  export declare const ORDINAL_COLLECTION = "__Ordinal__";
31
33
  export declare const ORDINAL_METHODS: string[];
32
34
  export declare const PERMISSIONS_TO_REVOKE: string[];
35
+ export * from './blocked-actions-list';
36
+ export * from './environment';
37
+ export * from './signing';
33
38
  export * from './staking';
34
39
  export * from './storage';
35
- export * from './blocked-actions-list';
@@ -25,6 +25,7 @@ export const ALL_ACCOUNT_KEY = 'ALL';
25
25
  export const ALL_NETWORK_KEY = 'all';
26
26
  export const ALL_GENESIS_HASH = null;
27
27
  export const IGNORE_GET_SUBSTRATE_FEATURES_LIST = ['astarEvm', 'ethereum', 'ethereum_goerli', 'binance', 'binance_test', 'boba_rinkeby', 'boba', 'bobabase', 'bobabeam'];
28
+ export const ALL_ACCOUNT_AUTH_TYPES = ['evm', 'substrate', 'ton'];
28
29
  export const IGNORE_QR_SIGNER = [];
29
30
  export const XCM_MIN_AMOUNT_RATIO = 1.2;
30
31
  export const XCM_FEE_RATIO = 2;
@@ -33,6 +34,8 @@ export const NETWORK_MULTI_GAS_FEE = ['*'];
33
34
  export const ORDINAL_COLLECTION = '__Ordinal__';
34
35
  export const ORDINAL_METHODS = ['drc-20', 'pol-20'];
35
36
  export const PERMISSIONS_TO_REVOKE = ['eth_accounts'];
37
+ export * from "./blocked-actions-list.js";
38
+ export * from "./environment.js";
39
+ export * from "./signing.js";
36
40
  export * from "./staking.js";
37
- export * from "./storage.js";
38
- export * from "./blocked-actions-list.js";
41
+ export * from "./storage.js";
@@ -0,0 +1,4 @@
1
+ import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
2
+ import { AccountChainType } from '@subwallet/extension-base/types';
3
+ export declare const SIGNING_COMPATIBLE_MAP: Record<ChainType, AccountChainType[]>;
4
+ export declare const LEDGER_SIGNING_COMPATIBLE_MAP: Record<ChainType, AccountChainType[]>;
@@ -0,0 +1,15 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { AccountChainType } from '@subwallet/extension-base/types';
6
+ export const SIGNING_COMPATIBLE_MAP = {
7
+ [ChainType.SUBSTRATE]: [AccountChainType.SUBSTRATE, AccountChainType.ETHEREUM],
8
+ [ChainType.EVM]: [AccountChainType.ETHEREUM],
9
+ [ChainType.TON]: [AccountChainType.TON]
10
+ };
11
+ export const LEDGER_SIGNING_COMPATIBLE_MAP = {
12
+ [ChainType.SUBSTRATE]: [AccountChainType.SUBSTRATE],
13
+ [ChainType.EVM]: [AccountChainType.ETHEREUM],
14
+ [ChainType.TON]: [AccountChainType.TON]
15
+ };
@@ -3,3 +3,4 @@ export declare const DEFAULT_LANGUAGE = "en";
3
3
  export declare const CURRENCY = "current-currency";
4
4
  export declare const REMIND_EXPORT_ACCOUNT = "remind_export_account";
5
5
  export declare const LATEST_SESSION = "general.latest-session";
6
+ export declare const UPGRADE_DUPLICATE_ACCOUNT_NAME = "general.upgrade-duplicate-account-name";
@@ -5,4 +5,5 @@ export const LANGUAGE = 'current-language';
5
5
  export const DEFAULT_LANGUAGE = 'en';
6
6
  export const CURRENCY = 'current-currency';
7
7
  export const REMIND_EXPORT_ACCOUNT = 'remind_export_account';
8
- export const LATEST_SESSION = 'general.latest-session';
8
+ export const LATEST_SESSION = 'general.latest-session';
9
+ export const UPGRADE_DUPLICATE_ACCOUNT_NAME = 'general.upgrade-duplicate-account-name';
@@ -0,0 +1 @@
1
+ export declare const LEDGER_GENERIC_ALLOW_NETWORKS: string[];
package/core/consts.js ADDED
@@ -0,0 +1,13 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const LEDGER_GENERIC_ALLOW_NETWORKS = ['polkadot', 'statemint', 'bridgeHubPolkadot', 'collectives', 'centrifuge', 'manta_network', 'ajunaPolkadot', 'astar', 'bifrost_dot', 'hydradx_main', 'kusama', 'encointer', 'statemine', 'bridgeHubKusama', 'peopleKusama', 'altair', 'bajun', 'bifrost', 'calamari', 'shiden', 'tinkernet', 'rococo', 'rococo_assethub', 'hydradx_rococo', 'bifrost_testnet', 'westend', 'shibuya'];
5
+
6
+ // export const ERROR_MESSAGE_MAP: Record<ValidationCondition, string> = {
7
+ // IS_NOT_NULL: 'Recipient address is required.',
8
+ // IS_ADDRESS: 'Invalid recipient address.',
9
+ // IS_VALID_ADDRESS_FOR_ECOSYSTEM: 'The recipient address must be {{chainType}} type',
10
+ // IS_VALID_SUBSTRATE_ADDRESS_FORMAT: 'Recipient should be a valid {{destChainName}} address',
11
+ // IS_NOT_DUPLICATE_ADDRESS: 'The recipient address can not be the same as the sender address',
12
+ // IS_SUPPORT_LEDGER_ACCOUNT: 'Ledger {{ledgerType}} address is not supported for this transfer'
13
+ // };
@@ -0,0 +1,2 @@
1
+ import { ValidateRecipientParams } from '@subwallet/extension-base/core/types';
2
+ export declare function validateRecipientAddress(validateRecipientParams: ValidateRecipientParams): Promise<void>;
@@ -0,0 +1,100 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ActionType, ValidationCondition } from '@subwallet/extension-base/core/types';
5
+ import { _isAddress, _isNotDuplicateAddress, _isNotNull, _isSupportLedgerAccount, _isValidAddressForEcosystem, _isValidSubstrateAddressFormat, _isValidTonAddressFormat } from '@subwallet/extension-base/core/utils';
6
+ import { AccountSignMode } from '@subwallet/extension-base/types';
7
+ import { detectTranslate } from '@subwallet/extension-base/utils';
8
+ import { isSubstrateAddress, isTonAddress } from '@subwallet/keyring';
9
+ function getConditions(validateRecipientParams) {
10
+ const {
11
+ account,
12
+ actionType,
13
+ autoFormatValue,
14
+ destChainInfo,
15
+ srcChain,
16
+ toAddress
17
+ } = validateRecipientParams;
18
+ const conditions = [];
19
+ const isSendAction = [ActionType.SEND_FUND, ActionType.SEND_NFT].includes(actionType);
20
+ conditions.push(ValidationCondition.IS_NOT_NULL);
21
+ conditions.push(ValidationCondition.IS_ADDRESS);
22
+ conditions.push(ValidationCondition.IS_VALID_ADDRESS_FOR_ECOSYSTEM);
23
+ if (isSubstrateAddress(toAddress) && !autoFormatValue) {
24
+ // todo: need isSubstrateAddress util function to check exactly
25
+ conditions.push(ValidationCondition.IS_VALID_SUBSTRATE_ADDRESS_FORMAT);
26
+ }
27
+ if (isTonAddress(toAddress)) {
28
+ conditions.push(ValidationCondition.IS_VALID_TON_ADDRESS_FORMAT);
29
+ }
30
+ if (srcChain === destChainInfo.slug && isSendAction && !destChainInfo.tonInfo) {
31
+ conditions.push(ValidationCondition.IS_NOT_DUPLICATE_ADDRESS);
32
+ }
33
+ if (account !== null && account !== void 0 && account.isHardware) {
34
+ conditions.push(ValidationCondition.IS_SUPPORT_LEDGER_ACCOUNT);
35
+ if (account.signMode === AccountSignMode.LEGACY_LEDGER) {
36
+ conditions.push(ValidationCondition.IS_VALID_SUBSTRATE_ADDRESS_FORMAT);
37
+ }
38
+ }
39
+ return conditions;
40
+ }
41
+ function getValidationFunctions(conditions) {
42
+ const validationFunctions = [];
43
+ for (const condition of conditions) {
44
+ switch (condition) {
45
+ case ValidationCondition.IS_NOT_NULL:
46
+ {
47
+ validationFunctions.push(_isNotNull);
48
+ break;
49
+ }
50
+ case ValidationCondition.IS_ADDRESS:
51
+ {
52
+ validationFunctions.push(_isAddress);
53
+ break;
54
+ }
55
+ case ValidationCondition.IS_VALID_ADDRESS_FOR_ECOSYSTEM:
56
+ {
57
+ validationFunctions.push(_isValidAddressForEcosystem);
58
+ break;
59
+ }
60
+ case ValidationCondition.IS_VALID_SUBSTRATE_ADDRESS_FORMAT:
61
+ {
62
+ validationFunctions.push(_isValidSubstrateAddressFormat);
63
+ break;
64
+ }
65
+ case ValidationCondition.IS_VALID_TON_ADDRESS_FORMAT:
66
+ {
67
+ validationFunctions.push(_isValidTonAddressFormat);
68
+ break;
69
+ }
70
+ case ValidationCondition.IS_NOT_DUPLICATE_ADDRESS:
71
+ {
72
+ validationFunctions.push(_isNotDuplicateAddress);
73
+ break;
74
+ }
75
+ case ValidationCondition.IS_SUPPORT_LEDGER_ACCOUNT:
76
+ {
77
+ validationFunctions.push(_isSupportLedgerAccount);
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ return validationFunctions;
83
+ }
84
+ function runValidationFunctions(validateRecipientParams, validationFunctions) {
85
+ const validationResults = [];
86
+ for (const validationFunction of validationFunctions) {
87
+ validationResults.push(validationFunction(validateRecipientParams));
88
+ }
89
+ for (const result of validationResults) {
90
+ if (result) {
91
+ return Promise.reject(detectTranslate(result));
92
+ }
93
+ }
94
+ return Promise.resolve();
95
+ }
96
+ export function validateRecipientAddress(validateRecipientParams) {
97
+ const conditions = getConditions(validateRecipientParams);
98
+ const validationFunctions = getValidationFunctions(conditions);
99
+ return runValidationFunctions(validateRecipientParams, validationFunctions);
100
+ }
@@ -4,10 +4,12 @@
4
4
  import { typedSignatureHash } from '@metamask/eth-sig-util';
5
5
  import { EvmProviderError } from '@subwallet/extension-base/background/errors/EvmProviderError';
6
6
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
7
- import { BasicTxErrorType, EvmProviderErrorType } from '@subwallet/extension-base/background/KoniTypes';
7
+ import { EvmProviderErrorType } from '@subwallet/extension-base/background/KoniTypes';
8
8
  import { calculateGasFeeParams } from '@subwallet/extension-base/services/fee-service/utils';
9
+ import { BasicTxErrorType } from '@subwallet/extension-base/types';
9
10
  import { BN_ZERO, createPromiseHandler, isSameAddress, stripUrl, wait } from '@subwallet/extension-base/utils';
10
11
  import { isContractAddress, parseContractInput } from '@subwallet/extension-base/utils/eth/parseTransaction';
12
+ import { isSubstrateAddress } from '@subwallet/keyring';
11
13
  import { keyring } from '@subwallet/ui-keyring';
12
14
  import { getSdkError } from '@walletconnect/utils';
13
15
  import BigN from 'bignumber.js';
@@ -237,8 +239,7 @@ export async function validationEvmDataTransactionMiddleware(koni, url, payload)
237
239
  const transactionParams = payload.payloadAfterValidated;
238
240
  const {
239
241
  address: fromAddress,
240
- networkKey,
241
- pair
242
+ networkKey
242
243
  } = payload;
243
244
  const evmApi = koni.getEvmApi(networkKey || '');
244
245
  const web3 = evmApi === null || evmApi === void 0 ? void 0 : evmApi.api;
@@ -357,11 +358,6 @@ export async function validationEvmDataTransactionMiddleware(koni, url, payload)
357
358
  handleError(e.message);
358
359
  }
359
360
  }
360
- const pair_ = pair || keyring.getPair(fromAddress);
361
- const account = {
362
- address: fromAddress,
363
- ...(pair_ === null || pair_ === void 0 ? void 0 : pair_.meta)
364
- };
365
361
  try {
366
362
  transaction.nonce = await web3.eth.getTransactionCount(fromAddress);
367
363
  } catch (e) {
@@ -384,7 +380,7 @@ export async function validationEvmDataTransactionMiddleware(koni, url, payload)
384
380
  errors,
385
381
  payloadAfterValidated: {
386
382
  ...transaction,
387
- account,
383
+ address: fromAddress,
388
384
  estimateGas,
389
385
  hashPayload,
390
386
  isToContract,
@@ -419,10 +415,6 @@ export async function validationEvmSignMessageMiddleware(koni, url, payload_) {
419
415
  handleError('Not found address or payload to sign');
420
416
  }
421
417
  const pair = pair_ || keyring.getPair(address);
422
- const account = {
423
- address: pair.address,
424
- ...pair.meta
425
- };
426
418
  if (method) {
427
419
  if (['eth_sign', 'personal_sign', 'eth_signTypedData', 'eth_signTypedData_v1', 'eth_signTypedData_v3', 'eth_signTypedData_v4'].indexOf(method) < 0) {
428
420
  handleError('Unsupported action');
@@ -438,13 +430,13 @@ export async function validationEvmSignMessageMiddleware(koni, url, payload_) {
438
430
  hashPayload = payload;
439
431
  break;
440
432
  case 'eth_sign':
441
- if (!account.isExternal) {
433
+ if (!pair.meta.isExternal) {
442
434
  canSign = true;
443
435
  }
444
436
  break;
445
437
  case 'eth_signTypedData':
446
438
  case 'eth_signTypedData_v1':
447
- if (!account.isExternal) {
439
+ if (!pair.meta.isExternal) {
448
440
  canSign = true;
449
441
  }
450
442
  payload = validateTypedSignMessageDataV1({
@@ -454,7 +446,7 @@ export async function validationEvmSignMessageMiddleware(koni, url, payload_) {
454
446
  break;
455
447
  case 'eth_signTypedData_v3':
456
448
  case 'eth_signTypedData_v4':
457
- if (!account.isExternal) {
449
+ if (!pair.meta.isExternal) {
458
450
  canSign = true;
459
451
  }
460
452
  payload = validateTypedSignMessageDataV3V4({
@@ -473,7 +465,7 @@ export async function validationEvmSignMessageMiddleware(koni, url, payload_) {
473
465
  handleError('Unsupported method');
474
466
  }
475
467
  const payloadAfterValidated = {
476
- account: account,
468
+ address,
477
469
  type: method || '',
478
470
  payload: payload,
479
471
  hashPayload: hashPayload,
@@ -505,7 +497,7 @@ export function validationAuthWCMiddleware(koni, url, payload, topic) {
505
497
  if (isEthereumAddress(address)) {
506
498
  var _requestSession$names;
507
499
  sessionAccounts = ((_requestSession$names = requestSession.namespaces.eip155.accounts) === null || _requestSession$names === void 0 ? void 0 : _requestSession$names.map(account => account.split(':')[2])) || sessionAccounts;
508
- } else {
500
+ } else if (isSubstrateAddress(address)) {
509
501
  var _requestSession$names2;
510
502
  sessionAccounts = ((_requestSession$names2 = requestSession.namespaces.polkadot.accounts) === null || _requestSession$names2 === void 0 ? void 0 : _requestSession$names2.map(account => account.split(':')[2])) || sessionAccounts;
511
503
  }
@@ -3,8 +3,8 @@
3
3
 
4
4
  import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
5
5
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
6
- import { BasicTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
7
6
  import { _getAssetDecimals, _getTokenMinAmount, _isChainEvmCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
7
+ import { BasicTxErrorType } from '@subwallet/extension-base/types';
8
8
  import { SwapErrorType } from '@subwallet/extension-base/types/swap';
9
9
  import { formatNumber } from '@subwallet/extension-base/utils';
10
10
  import BigN from 'bignumber.js';
@@ -2,7 +2,7 @@ import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
3
3
  import { _Address, AmountData, ExtrinsicType, FeeData } from '@subwallet/extension-base/background/KoniTypes';
4
4
  import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
5
- import { _EvmApi } from '@subwallet/extension-base/services/chain-service/types';
5
+ import { _EvmApi, _TonApi } from '@subwallet/extension-base/services/chain-service/types';
6
6
  import { OptionalSWTransaction, SWTransactionInput, SWTransactionResponse } from '@subwallet/extension-base/services/transaction-service/types';
7
7
  import { KeyringPair } from '@subwallet/keyring/types';
8
8
  import BigN from 'bignumber.js';
@@ -14,5 +14,6 @@ export declare function checkSupportForFeature(validationResponse: SWTransaction
14
14
  export declare function checkSupportForAction(validationResponse: SWTransactionResponse, blockedActionsMap: Record<ExtrinsicType, string[]>): void;
15
15
  export declare function checkSupportForTransaction(validationResponse: SWTransactionResponse, transaction: OptionalSWTransaction): void;
16
16
  export declare function estimateFeeForTransaction(validationResponse: SWTransactionResponse, transaction: OptionalSWTransaction, chainInfo: _ChainInfo, evmApi: _EvmApi): Promise<FeeData>;
17
- export declare function checkSigningAccountForTransaction(validationResponse: SWTransactionResponse): void;
17
+ export declare function checkSigningAccountForTransaction(validationResponse: SWTransactionResponse, chainInfoMap: Record<string, _ChainInfo>): void;
18
18
  export declare function checkBalanceWithTransactionFee(validationResponse: SWTransactionResponse, transactionInput: SWTransactionInput, nativeTokenInfo: _ChainAsset, nativeTokenAvailable: AmountData): void;
19
+ export declare function checkTonAddressBounceableAndAccountNotActive(tonApi: _TonApi, validationResponse: SWTransactionResponse): Promise<void>;
@@ -2,15 +2,18 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
- import { BasicTxErrorType, BasicTxWarningCode, ExtrinsicType, TransferTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
7
- import { XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
7
+ import { LEDGER_SIGNING_COMPATIBLE_MAP, SIGNING_COMPATIBLE_MAP, XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
8
8
  import { _canAccountBeReaped } from '@subwallet/extension-base/core/substrate/system-pallet';
9
+ import { isBounceableAddress } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/utils';
9
10
  import { _TRANSFER_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
10
- import { _getChainExistentialDeposit, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getTokenMinAmount, _isNativeToken, _isTokenEvmSmartContract } from '@subwallet/extension-base/services/chain-service/utils';
11
+ import { _getChainExistentialDeposit, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getTokenMinAmount, _isNativeToken, _isTokenEvmSmartContract, _isTokenTonSmartContract } from '@subwallet/extension-base/services/chain-service/utils';
11
12
  import { calculateGasFeeParams } from '@subwallet/extension-base/services/fee-service/utils';
12
- import { isSubstrateTransaction } from '@subwallet/extension-base/services/transaction-service/helpers';
13
- import { balanceFormatter, formatNumber } from '@subwallet/extension-base/utils';
13
+ import { isSubstrateTransaction, isTonTransaction } from '@subwallet/extension-base/services/transaction-service/helpers';
14
+ import { AccountSignMode, BasicTxErrorType, BasicTxWarningCode, TransferTxErrorType } from '@subwallet/extension-base/types';
15
+ import { balanceFormatter, formatNumber, pairToAccount } from '@subwallet/extension-base/utils';
16
+ import { isTonAddress } from '@subwallet/keyring';
14
17
  import { keyring } from '@subwallet/ui-keyring';
15
18
  import BigN from 'bignumber.js';
16
19
  import { t } from 'i18next';
@@ -35,6 +38,9 @@ export function validateTransferRequest(tokenInfo, from, to, value, transferAll)
35
38
  if (isEthereumAddress(from) && isEthereumAddress(to) && _isTokenEvmSmartContract(tokenInfo) && _getContractAddressOfToken(tokenInfo).length === 0) {
36
39
  errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Not found ERC20 address for this token')));
37
40
  }
41
+ if (isTonAddress(from) && isTonAddress(to) && _isTokenTonSmartContract(tokenInfo) && _getContractAddressOfToken(tokenInfo).length === 0) {
42
+ errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Not found TEP74 address for this token')));
43
+ }
38
44
  return [errors, keypair, transferValue];
39
45
  }
40
46
  export function additionalValidateTransfer(tokenInfo, nativeTokenInfo, extrinsicType, receiverTransferTokenFreeBalance, transferAmount, senderTransferTokenTransferable, receiverNativeTransferable) {
@@ -333,6 +339,8 @@ export async function estimateFeeForTransaction(validationResponse, transaction,
333
339
  try {
334
340
  if (isSubstrateTransaction(transaction)) {
335
341
  estimateFee.value = (await transaction.paymentInfo(validationResponse.address)).partialFee.toString();
342
+ } else if (isTonTransaction(transaction)) {
343
+ estimateFee.value = transaction.estimateFee; // todo: might need to update logic estimate fee inside for future actions excluding normal transfer Ton and Jetton
336
344
  } else {
337
345
  const gasLimit = await evmApi.api.eth.estimateGas(transaction);
338
346
  const priority = await calculateGasFeeParams(evmApi, chainInfo.slug);
@@ -354,14 +362,30 @@ export async function estimateFeeForTransaction(validationResponse, transaction,
354
362
  }
355
363
  return estimateFee;
356
364
  }
357
- export function checkSigningAccountForTransaction(validationResponse) {
358
- const pair = keyring.getPair(validationResponse.address);
365
+ export function checkSigningAccountForTransaction(validationResponse, chainInfoMap) {
366
+ const {
367
+ address,
368
+ chain,
369
+ chainType,
370
+ extrinsicType
371
+ } = validationResponse;
372
+ const pair = keyring.getPair(address);
359
373
  if (!pair) {
360
374
  validationResponse.errors.push(new TransactionError(BasicTxErrorType.INTERNAL_ERROR, t('Unable to find account')));
361
375
  } else {
362
- var _pair$meta;
363
- if ((_pair$meta = pair.meta) !== null && _pair$meta !== void 0 && _pair$meta.isReadOnly) {
364
- validationResponse.errors.push(new TransactionError(BasicTxErrorType.INTERNAL_ERROR, t('This account is watch-only')));
376
+ const accountJson = pairToAccount(pair, chainInfoMap);
377
+ if (!accountJson.transactionActions.includes(extrinsicType)) {
378
+ // check if the account can sign the transaction type
379
+ validationResponse.errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('This feature is not available with this account')));
380
+ } else if (accountJson.specialChain && accountJson.specialChain !== chain) {
381
+ // check if the account can only be used on a specific chain (for ledger legacy)
382
+ validationResponse.errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('This feature is not available with this account')));
383
+ } else {
384
+ const compatibleMap = [AccountSignMode.LEGACY_LEDGER, AccountSignMode.GENERIC_LEDGER].includes(accountJson.signMode) ? LEDGER_SIGNING_COMPATIBLE_MAP : SIGNING_COMPATIBLE_MAP;
385
+ if (!compatibleMap[chainType].includes(accountJson.chainType)) {
386
+ // check if the account chain type is compatible with the transaction chain type
387
+ validationResponse.errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('This feature is not available with this account')));
388
+ }
365
389
  }
366
390
  }
367
391
  }
@@ -396,4 +420,20 @@ export function checkBalanceWithTransactionFee(validationResponse, transactionIn
396
420
  if (isNeedCheckRemainingBalance && isRemainingBalanceValid) {
397
421
  edAsWarning ? validationResponse.warnings.push(new TransactionWarning(BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT)) : validationResponse.errors.push(new TransactionError(BasicTxErrorType.NOT_ENOUGH_EXISTENTIAL_DEPOSIT));
398
422
  }
423
+ }
424
+ export async function checkTonAddressBounceableAndAccountNotActive(tonApi, validationResponse) {
425
+ const {
426
+ to
427
+ } = validationResponse.data;
428
+ const isActive = await isAccountActive(tonApi, to);
429
+ if (isTonAddressBounceable(to) && !isActive) {
430
+ validationResponse.warnings.push(new TransactionWarning(BasicTxWarningCode.IS_BOUNCEABLE_ADDRESS));
431
+ }
432
+ }
433
+ function isTonAddressBounceable(address) {
434
+ return isBounceableAddress(address);
435
+ }
436
+ async function isAccountActive(tonApi, address) {
437
+ const state = await tonApi.getAccountState(address);
438
+ return state === 'active';
399
439
  }