@subwallet/extension-base 1.1.31-beta.0 → 1.1.32-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 (307) hide show
  1. package/background/KoniTypes.d.ts +69 -111
  2. package/background/KoniTypes.js +13 -19
  3. package/background/errors/TransactionError.js +0 -9
  4. package/cjs/background/KoniTypes.js +16 -20
  5. package/cjs/background/errors/TransactionError.js +0 -9
  6. package/cjs/constants/index.js +4 -19
  7. package/cjs/koni/api/nft/config.js +23 -33
  8. package/cjs/koni/api/nft/index.js +0 -14
  9. package/cjs/koni/api/nft/nft.js +22 -1
  10. package/cjs/koni/api/staking/bonding/amplitude.js +15 -17
  11. package/cjs/koni/api/staking/bonding/astar.js +10 -11
  12. package/cjs/koni/api/staking/bonding/index.js +3 -4
  13. package/cjs/koni/api/staking/bonding/paraChain.js +29 -28
  14. package/cjs/koni/api/staking/bonding/relayChain.js +45 -48
  15. package/cjs/koni/api/staking/bonding/utils.js +86 -104
  16. package/cjs/koni/api/staking/index.js +5 -6
  17. package/cjs/koni/api/staking/paraChain.js +5 -6
  18. package/cjs/koni/api/staking/relayChain.js +2 -3
  19. package/cjs/koni/background/cron.js +1 -11
  20. package/cjs/koni/background/handlers/Extension.js +69 -362
  21. package/cjs/koni/background/handlers/State.js +3 -51
  22. package/cjs/koni/background/handlers/index.js +2 -4
  23. package/cjs/koni/background/subscription.js +37 -95
  24. package/cjs/packageInfo.js +1 -1
  25. package/cjs/services/campaign-service/index.js +6 -9
  26. package/cjs/services/chain-service/constants.js +18 -3
  27. package/cjs/services/chain-service/index.js +2 -3
  28. package/cjs/services/chain-service/utils.js +1 -7
  29. package/cjs/services/event-service/index.js +0 -4
  30. package/cjs/services/keyring-service/index.js +2 -14
  31. package/cjs/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  32. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  33. package/cjs/services/migration-service/scripts/index.js +1 -7
  34. package/cjs/services/notification-service/NotificationService.js +1 -1
  35. package/cjs/services/storage-service/DatabaseService.js +0 -51
  36. package/cjs/services/storage-service/databases/index.js +0 -4
  37. package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  38. package/cjs/services/subscan-service/index.js +0 -16
  39. package/cjs/services/transaction-service/event-parser/index.js +0 -58
  40. package/cjs/services/transaction-service/helpers/index.js +1 -3
  41. package/cjs/services/transaction-service/index.js +75 -231
  42. package/cjs/services/transaction-service/utils.js +0 -1
  43. package/cjs/types/index.js +0 -44
  44. package/cjs/utils/fetchStaticData.js +1 -2
  45. package/cjs/utils/index.js +1 -89
  46. package/cjs/utils/number.js +1 -3
  47. package/constants/index.d.ts +1 -6
  48. package/constants/index.js +1 -6
  49. package/koni/api/nft/config.js +23 -33
  50. package/koni/api/nft/index.js +1 -15
  51. package/koni/api/nft/nft.js +23 -2
  52. package/koni/api/staking/bonding/amplitude.js +9 -11
  53. package/koni/api/staking/bonding/astar.js +8 -9
  54. package/koni/api/staking/bonding/index.d.ts +2 -1
  55. package/koni/api/staking/bonding/index.js +3 -5
  56. package/koni/api/staking/bonding/paraChain.js +16 -15
  57. package/koni/api/staking/bonding/relayChain.d.ts +2 -2
  58. package/koni/api/staking/bonding/relayChain.js +30 -33
  59. package/koni/api/staking/bonding/utils.d.ts +38 -15
  60. package/koni/api/staking/bonding/utils.js +69 -85
  61. package/koni/api/staking/index.js +1 -2
  62. package/koni/api/staking/paraChain.js +6 -7
  63. package/koni/api/staking/relayChain.js +3 -4
  64. package/koni/background/cron.d.ts +0 -1
  65. package/koni/background/cron.js +2 -12
  66. package/koni/background/handlers/Extension.d.ts +1 -17
  67. package/koni/background/handlers/Extension.js +30 -321
  68. package/koni/background/handlers/State.d.ts +2 -18
  69. package/koni/background/handlers/State.js +3 -50
  70. package/koni/background/handlers/index.js +2 -4
  71. package/koni/background/subscription.d.ts +1 -6
  72. package/koni/background/subscription.js +38 -97
  73. package/package.json +8 -321
  74. package/packageInfo.js +1 -1
  75. package/services/campaign-service/index.js +6 -9
  76. package/services/chain-service/constants.d.ts +11 -0
  77. package/services/chain-service/constants.js +16 -2
  78. package/services/chain-service/index.js +2 -3
  79. package/services/chain-service/utils.d.ts +0 -1
  80. package/services/chain-service/utils.js +1 -5
  81. package/services/event-service/index.d.ts +0 -1
  82. package/services/event-service/index.js +0 -4
  83. package/services/event-service/types.d.ts +0 -8
  84. package/services/keyring-service/index.d.ts +1 -2
  85. package/services/keyring-service/index.js +2 -14
  86. package/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  87. package/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  88. package/services/migration-service/scripts/index.js +1 -7
  89. package/services/notification-service/NotificationService.js +1 -1
  90. package/services/storage-service/DatabaseService.d.ts +1 -18
  91. package/services/storage-service/DatabaseService.js +0 -51
  92. package/services/storage-service/databases/index.d.ts +1 -3
  93. package/services/storage-service/databases/index.js +0 -4
  94. package/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  95. package/services/subscan-service/index.d.ts +2 -3
  96. package/services/subscan-service/index.js +0 -15
  97. package/services/subscan-service/types.d.ts +0 -20
  98. package/services/transaction-service/event-parser/index.d.ts +1 -3
  99. package/services/transaction-service/event-parser/index.js +1 -57
  100. package/services/transaction-service/helpers/index.js +1 -3
  101. package/services/transaction-service/index.d.ts +15 -4
  102. package/services/transaction-service/index.js +73 -229
  103. package/services/transaction-service/types.d.ts +0 -2
  104. package/services/transaction-service/utils.js +0 -1
  105. package/types/index.d.ts +0 -5
  106. package/types/index.js +1 -5
  107. package/utils/fetchStaticData.js +1 -2
  108. package/utils/index.d.ts +0 -5
  109. package/utils/index.js +1 -53
  110. package/utils/number.d.ts +1 -1
  111. package/utils/number.js +1 -1
  112. package/cjs/koni/api/dotsama/balance.js +0 -464
  113. package/cjs/koni/api/nft/ordinal_nft/constants.js +0 -21
  114. package/cjs/koni/api/nft/ordinal_nft/index.js +0 -121
  115. package/cjs/koni/api/nft/ordinal_nft/utils.js +0 -41
  116. package/cjs/koni/api/yield/helper/utils.js +0 -46
  117. package/cjs/services/earning-service/constants/chains.js +0 -29
  118. package/cjs/services/earning-service/constants/index.js +0 -27
  119. package/cjs/services/earning-service/constants/step.js +0 -18
  120. package/cjs/services/earning-service/handlers/base.js +0 -259
  121. package/cjs/services/earning-service/handlers/index.js +0 -60
  122. package/cjs/services/earning-service/handlers/lending/base.js +0 -20
  123. package/cjs/services/earning-service/handlers/lending/index.js +0 -13
  124. package/cjs/services/earning-service/handlers/lending/interlay.js +0 -191
  125. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +0 -239
  126. package/cjs/services/earning-service/handlers/liquid-staking/base.js +0 -43
  127. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +0 -297
  128. package/cjs/services/earning-service/handlers/liquid-staking/index.js +0 -34
  129. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +0 -226
  130. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +0 -395
  131. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +0 -384
  132. package/cjs/services/earning-service/handlers/native-staking/astar.js +0 -461
  133. package/cjs/services/earning-service/handlers/native-staking/base-para.js +0 -146
  134. package/cjs/services/earning-service/handlers/native-staking/base.js +0 -159
  135. package/cjs/services/earning-service/handlers/native-staking/index.js +0 -34
  136. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +0 -385
  137. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +0 -558
  138. package/cjs/services/earning-service/handlers/nomination-pool/index.js +0 -560
  139. package/cjs/services/earning-service/handlers/special.js +0 -503
  140. package/cjs/services/earning-service/service.js +0 -387
  141. package/cjs/services/earning-service/utils/index.js +0 -128
  142. package/cjs/services/migration-service/scripts/DeleteEarningData.js +0 -21
  143. package/cjs/services/migration-service/scripts/EnableEarningChains.js +0 -21
  144. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +0 -17
  145. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +0 -17
  146. package/cjs/services/migration-service/scripts/MigrateProvider.js +0 -29
  147. package/cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js +0 -21
  148. package/cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js +0 -21
  149. package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +0 -149
  150. package/cjs/services/mint-campaign-service/campaigns/index.js +0 -13
  151. package/cjs/services/mint-campaign-service/constants.js +0 -11
  152. package/cjs/services/mint-campaign-service/index.js +0 -18
  153. package/cjs/services/storage-service/db-stores/YieldPoolStore.js +0 -36
  154. package/cjs/services/storage-service/db-stores/YieldPositionStore.js +0 -65
  155. package/cjs/services/storage-service/index.js +0 -241
  156. package/cjs/types/campaigns/index.js +0 -16
  157. package/cjs/types/campaigns/unlock-dot.js +0 -1
  158. package/cjs/types/ordinal.js +0 -1
  159. package/cjs/types/transaction.js +0 -1
  160. package/cjs/types/yield/actions/index.js +0 -27
  161. package/cjs/types/yield/actions/join/index.js +0 -38
  162. package/cjs/types/yield/actions/join/step.js +0 -47
  163. package/cjs/types/yield/actions/join/submit.js +0 -1
  164. package/cjs/types/yield/actions/join/validate.js +0 -16
  165. package/cjs/types/yield/actions/others.js +0 -1
  166. package/cjs/types/yield/index.js +0 -27
  167. package/cjs/types/yield/info/account/index.js +0 -49
  168. package/cjs/types/yield/info/account/info.js +0 -1
  169. package/cjs/types/yield/info/account/reward.js +0 -1
  170. package/cjs/types/yield/info/account/target.js +0 -32
  171. package/cjs/types/yield/info/account/unstake.js +0 -27
  172. package/cjs/types/yield/info/base.js +0 -41
  173. package/cjs/types/yield/info/chain/index.js +0 -27
  174. package/cjs/types/yield/info/chain/info.js +0 -1
  175. package/cjs/types/yield/info/chain/target.js +0 -1
  176. package/cjs/types/yield/info/index.js +0 -49
  177. package/cjs/types/yield/info/pallet.js +0 -15
  178. package/cjs/types.js +0 -1
  179. package/cjs/utils/address.js +0 -34
  180. package/cjs/utils/keyring.js +0 -57
  181. package/cjs/utils/object.js +0 -12
  182. package/koni/api/nft/ordinal_nft/constants.d.ts +0 -9
  183. package/koni/api/nft/ordinal_nft/constants.js +0 -12
  184. package/koni/api/nft/ordinal_nft/index.d.ts +0 -8
  185. package/koni/api/nft/ordinal_nft/index.js +0 -114
  186. package/koni/api/nft/ordinal_nft/utils.d.ts +0 -2
  187. package/koni/api/nft/ordinal_nft/utils.js +0 -33
  188. package/koni/api/yield/helper/utils.d.ts +0 -10
  189. package/koni/api/yield/helper/utils.js +0 -32
  190. package/services/earning-service/constants/abis/compound_finance_v2_abi.json +0 -1235
  191. package/services/earning-service/constants/abis/st_liquid_token_abi.json +0 -1355
  192. package/services/earning-service/constants/chains.d.ts +0 -14
  193. package/services/earning-service/constants/chains.js +0 -21
  194. package/services/earning-service/constants/index.d.ts +0 -2
  195. package/services/earning-service/constants/index.js +0 -5
  196. package/services/earning-service/constants/step.d.ts +0 -3
  197. package/services/earning-service/constants/step.js +0 -10
  198. package/services/earning-service/handlers/base.d.ts +0 -112
  199. package/services/earning-service/handlers/base.js +0 -253
  200. package/services/earning-service/handlers/index.d.ts +0 -5
  201. package/services/earning-service/handlers/index.js +0 -8
  202. package/services/earning-service/handlers/lending/base.d.ts +0 -6
  203. package/services/earning-service/handlers/lending/base.js +0 -12
  204. package/services/earning-service/handlers/lending/index.d.ts +0 -1
  205. package/services/earning-service/handlers/lending/index.js +0 -4
  206. package/services/earning-service/handlers/lending/interlay.d.ts +0 -24
  207. package/services/earning-service/handlers/lending/interlay.js +0 -183
  208. package/services/earning-service/handlers/liquid-staking/acala.d.ts +0 -27
  209. package/services/earning-service/handlers/liquid-staking/acala.js +0 -231
  210. package/services/earning-service/handlers/liquid-staking/base.d.ts +0 -9
  211. package/services/earning-service/handlers/liquid-staking/base.js +0 -35
  212. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +0 -46
  213. package/services/earning-service/handlers/liquid-staking/bifrost.js +0 -286
  214. package/services/earning-service/handlers/liquid-staking/index.d.ts +0 -4
  215. package/services/earning-service/handlers/liquid-staking/index.js +0 -7
  216. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +0 -26
  217. package/services/earning-service/handlers/liquid-staking/parallel.js +0 -218
  218. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +0 -34
  219. package/services/earning-service/handlers/liquid-staking/stella-swap.js +0 -385
  220. package/services/earning-service/handlers/native-staking/amplitude.d.ts +0 -22
  221. package/services/earning-service/handlers/native-staking/amplitude.js +0 -375
  222. package/services/earning-service/handlers/native-staking/astar.d.ts +0 -19
  223. package/services/earning-service/handlers/native-staking/astar.js +0 -451
  224. package/services/earning-service/handlers/native-staking/base-para.d.ts +0 -11
  225. package/services/earning-service/handlers/native-staking/base-para.js +0 -138
  226. package/services/earning-service/handlers/native-staking/base.d.ts +0 -21
  227. package/services/earning-service/handlers/native-staking/base.js +0 -150
  228. package/services/earning-service/handlers/native-staking/index.d.ts +0 -4
  229. package/services/earning-service/handlers/native-staking/index.js +0 -7
  230. package/services/earning-service/handlers/native-staking/para-chain.d.ts +0 -15
  231. package/services/earning-service/handlers/native-staking/para-chain.js +0 -377
  232. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +0 -21
  233. package/services/earning-service/handlers/native-staking/relay-chain.js +0 -549
  234. package/services/earning-service/handlers/nomination-pool/index.d.ts +0 -36
  235. package/services/earning-service/handlers/nomination-pool/index.js +0 -550
  236. package/services/earning-service/handlers/special.d.ts +0 -65
  237. package/services/earning-service/handlers/special.js +0 -495
  238. package/services/earning-service/service.d.ts +0 -45
  239. package/services/earning-service/service.js +0 -379
  240. package/services/earning-service/utils/index.d.ts +0 -18
  241. package/services/earning-service/utils/index.js +0 -112
  242. package/services/migration-service/scripts/DeleteEarningData.d.ts +0 -4
  243. package/services/migration-service/scripts/DeleteEarningData.js +0 -13
  244. package/services/migration-service/scripts/EnableEarningChains.d.ts +0 -4
  245. package/services/migration-service/scripts/EnableEarningChains.js +0 -13
  246. package/services/migration-service/scripts/databases/MigrateEarningHistory.d.ts +0 -4
  247. package/services/migration-service/scripts/databases/MigrateEarningHistory.js +0 -13
  248. package/services/migration-service/scripts/databases/MigrateEarningVersion.d.ts +0 -4
  249. package/services/migration-service/scripts/databases/MigrateEarningVersion.js +0 -13
  250. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.d.ts +0 -13
  251. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +0 -139
  252. package/services/mint-campaign-service/campaigns/index.d.ts +0 -1
  253. package/services/mint-campaign-service/campaigns/index.js +0 -4
  254. package/services/mint-campaign-service/constants.d.ts +0 -1
  255. package/services/mint-campaign-service/constants.js +0 -4
  256. package/services/mint-campaign-service/index.d.ts +0 -7
  257. package/services/mint-campaign-service/index.js +0 -11
  258. package/services/storage-service/db-stores/YieldPoolStore.d.ts +0 -10
  259. package/services/storage-service/db-stores/YieldPoolStore.js +0 -28
  260. package/services/storage-service/db-stores/YieldPositionStore.d.ts +0 -9
  261. package/services/storage-service/db-stores/YieldPositionStore.js +0 -57
  262. package/types/campaigns/index.d.ts +0 -1
  263. package/types/campaigns/index.js +0 -4
  264. package/types/campaigns/unlock-dot.d.ts +0 -71
  265. package/types/campaigns/unlock-dot.js +0 -1
  266. package/types/ordinal.d.ts +0 -69
  267. package/types/ordinal.js +0 -1
  268. package/types/transaction.d.ts +0 -3
  269. package/types/transaction.js +0 -1
  270. package/types/yield/actions/index.d.ts +0 -2
  271. package/types/yield/actions/index.js +0 -5
  272. package/types/yield/actions/join/index.d.ts +0 -3
  273. package/types/yield/actions/join/index.js +0 -6
  274. package/types/yield/actions/join/step.d.ts +0 -95
  275. package/types/yield/actions/join/step.js +0 -46
  276. package/types/yield/actions/join/submit.d.ts +0 -57
  277. package/types/yield/actions/join/submit.js +0 -1
  278. package/types/yield/actions/join/validate.d.ts +0 -18
  279. package/types/yield/actions/join/validate.js +0 -10
  280. package/types/yield/actions/others.d.ts +0 -85
  281. package/types/yield/actions/others.js +0 -1
  282. package/types/yield/index.d.ts +0 -2
  283. package/types/yield/index.js +0 -5
  284. package/types/yield/info/account/index.d.ts +0 -4
  285. package/types/yield/info/account/index.js +0 -7
  286. package/types/yield/info/account/info.d.ts +0 -92
  287. package/types/yield/info/account/info.js +0 -1
  288. package/types/yield/info/account/reward.d.ts +0 -45
  289. package/types/yield/info/account/reward.js +0 -1
  290. package/types/yield/info/account/target.d.ts +0 -43
  291. package/types/yield/info/account/target.js +0 -27
  292. package/types/yield/info/account/unstake.d.ts +0 -31
  293. package/types/yield/info/account/unstake.js +0 -22
  294. package/types/yield/info/base.d.ts +0 -45
  295. package/types/yield/info/base.js +0 -36
  296. package/types/yield/info/chain/index.d.ts +0 -2
  297. package/types/yield/info/chain/index.js +0 -5
  298. package/types/yield/info/chain/info.d.ts +0 -251
  299. package/types/yield/info/chain/info.js +0 -1
  300. package/types/yield/info/chain/target.d.ts +0 -37
  301. package/types/yield/info/chain/target.js +0 -1
  302. package/types/yield/info/index.d.ts +0 -4
  303. package/types/yield/info/index.js +0 -7
  304. package/types/yield/info/pallet.d.ts +0 -143
  305. package/types/yield/info/pallet.js +0 -9
  306. package/utils/object.d.ts +0 -1
  307. package/utils/object.js +0 -6
@@ -1,18 +1,16 @@
1
1
  /// <reference types="chrome" />
2
2
  import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
3
- import { AddTokenRequestExternal, AmountData, ApiMap, AuthRequestV2, ChainStakingMetadata, ConfirmationsQueue, CrowdloanItem, CrowdloanJson, CurrentAccountInfo, EvmSendTransactionParams, ExternalRequestPromise, MantaPayConfig, MantaPaySyncState, NftCollection, NftItem, NftJson, NominatorMetadata, RequestAccountExportPrivateKey, RequestCheckPublicAndSecretKey, RequestConfirmationComplete, RequestCrowdloanContributions, RequestSettingsType, ResponseAccountExportPrivateKey, ResponseCheckPublicAndSecretKey, ServiceInfo, SingleModeJson, StakingItem, StakingJson, StakingRewardItem, StakingRewardJson, StakingType, UiSettings } from '@subwallet/extension-base/background/KoniTypes';
3
+ import { AddTokenRequestExternal, AmountData, ApiMap, AuthRequestV2, ChainStakingMetadata, ConfirmationsQueue, CrowdloanItem, CrowdloanJson, CurrentAccountInfo, EvmSendTransactionParams, ExternalRequestPromise, MantaPayConfig, MantaPaySyncState, NftCollection, NftItem, NftJson, NominatorMetadata, RequestAccountExportPrivateKey, RequestCheckPublicAndSecretKey, RequestConfirmationComplete, RequestSettingsType, ResponseAccountExportPrivateKey, ResponseCheckPublicAndSecretKey, ServiceInfo, SingleModeJson, StakingItem, StakingJson, StakingRewardItem, StakingRewardJson, StakingType, UiSettings } from '@subwallet/extension-base/background/KoniTypes';
4
4
  import { AccountJson, RequestAuthorizeTab, RequestRpcSend, RequestRpcSubscribe, RequestRpcUnsubscribe, RequestSign, ResponseRpcListProviders, ResponseSigning } from '@subwallet/extension-base/background/types';
5
5
  import { BalanceService } from '@subwallet/extension-base/services/balance-service';
6
6
  import BuyService from '@subwallet/extension-base/services/buy-service';
7
7
  import CampaignService from '@subwallet/extension-base/services/campaign-service';
8
8
  import { ChainService } from '@subwallet/extension-base/services/chain-service';
9
9
  import { _ChainState, _NetworkUpsertParams, _ValidateCustomAssetRequest } from '@subwallet/extension-base/services/chain-service/types';
10
- import EarningService from '@subwallet/extension-base/services/earning-service/service';
11
10
  import { EventService } from '@subwallet/extension-base/services/event-service';
12
11
  import { HistoryService } from '@subwallet/extension-base/services/history-service';
13
12
  import { KeyringService } from '@subwallet/extension-base/services/keyring-service';
14
13
  import MigrationService from '@subwallet/extension-base/services/migration-service';
15
- import MintCampaignService from '@subwallet/extension-base/services/mint-campaign-service';
16
14
  import NotificationService from '@subwallet/extension-base/services/notification-service/NotificationService';
17
15
  import { PriceService } from '@subwallet/extension-base/services/price-service';
18
16
  import RequestService from '@subwallet/extension-base/services/request-service';
@@ -22,7 +20,7 @@ import DatabaseService from '@subwallet/extension-base/services/storage-service/
22
20
  import { SubscanService } from '@subwallet/extension-base/services/subscan-service';
23
21
  import TransactionService from '@subwallet/extension-base/services/transaction-service';
24
22
  import WalletConnectService from '@subwallet/extension-base/services/wallet-connect-service';
25
- import { BalanceItem, BalanceJson, BalanceMap, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
23
+ import { BalanceItem, BalanceJson, BalanceMap } from '@subwallet/extension-base/types';
26
24
  import { MetadataDef, ProviderMeta } from '@subwallet/extension-inject/types';
27
25
  import SimpleKeyring from 'eth-simple-keyring';
28
26
  import { BehaviorSubject, Subject } from 'rxjs';
@@ -48,8 +46,6 @@ export default class KoniState {
48
46
  private stakingNominatorMetadataSubject;
49
47
  private stakingRewardSubject;
50
48
  private stakingRewardState;
51
- private yieldPoolInfoSubject;
52
- private yieldPositionSubject;
53
49
  private lazyMap;
54
50
  readonly notificationService: NotificationService;
55
51
  readonly eventService: EventService;
@@ -68,10 +64,8 @@ export default class KoniState {
68
64
  readonly migrationService: MigrationService;
69
65
  readonly subscanService: SubscanService;
70
66
  readonly walletConnectService: WalletConnectService;
71
- readonly mintCampaignService: MintCampaignService;
72
67
  readonly campaignService: CampaignService;
73
68
  readonly buyService: BuyService;
74
- readonly earningService: EarningService;
75
69
  private generalStatus;
76
70
  private waitSleeping;
77
71
  private waitStarting;
@@ -114,11 +108,6 @@ export default class KoniState {
114
108
  getStaking(): Promise<StakingJson>;
115
109
  getStakingOwnersByChains(chains: string[]): Promise<string[]>;
116
110
  getPooledStakingRecordsByAddress(addresses: string[]): Promise<StakingItem[]>;
117
- getPooledPositionByAddress(addresses: string[]): Promise<YieldPositionInfo[]>;
118
- subscribeYieldPoolInfo(): Subject<YieldPoolInfo[]>;
119
- subscribeYieldPosition(): Subject<YieldPositionInfo[]>;
120
- getYieldPoolInfo(): Promise<YieldPoolInfo[]>;
121
- getYieldPositionInfo(): Promise<YieldPositionInfo[]>;
122
111
  subscribeMantaPayConfig(): Subject<MantaPayConfig[]>;
123
112
  subscribeStaking(): Subject<StakingJson>;
124
113
  subscribeChainStakingMetadata(): Subject<ChainStakingMetadata[]>;
@@ -262,10 +251,5 @@ export default class KoniState {
262
251
  metadata: string;
263
252
  specVersion: number;
264
253
  }>;
265
- updateYieldPoolInfo(data: YieldPoolInfo): void;
266
- resetYieldPoolInfo(chains: string[]): void;
267
- updateYieldPosition(data: YieldPositionInfo): void;
268
- getYieldPoolStakingInfo(chain: string, poolType: YieldPoolType): Promise<YieldPoolInfo | undefined>;
269
- getCrowdloanContributions({ address, page, relayChain }: RequestCrowdloanContributions): Promise<import("../../../services/subscan-service/types").CrowdloanContributionsResponse>;
270
254
  }
271
255
  export {};
@@ -14,12 +14,10 @@ import CampaignService from '@subwallet/extension-base/services/campaign-service
14
14
  import { ChainService } from '@subwallet/extension-base/services/chain-service';
15
15
  import { _DEFAULT_MANTA_ZK_CHAIN, _MANTA_ZK_CHAIN_GROUP, _PREDEFINED_SINGLE_MODES } from '@subwallet/extension-base/services/chain-service/constants';
16
16
  import { _getEvmChainId, _getSubstrateGenesisHash, _getTokenOnChainAssetId, _isAssetFungibleToken, _isChainEnabled, _isChainTestNet, _parseMetadataForSmartContractAsset } from '@subwallet/extension-base/services/chain-service/utils';
17
- import EarningService from '@subwallet/extension-base/services/earning-service/service';
18
17
  import { EventService } from '@subwallet/extension-base/services/event-service';
19
18
  import { HistoryService } from '@subwallet/extension-base/services/history-service';
20
19
  import { KeyringService } from '@subwallet/extension-base/services/keyring-service';
21
20
  import MigrationService from '@subwallet/extension-base/services/migration-service';
22
- import MintCampaignService from '@subwallet/extension-base/services/mint-campaign-service';
23
21
  import NotificationService from '@subwallet/extension-base/services/notification-service/NotificationService';
24
22
  import { PriceService } from '@subwallet/extension-base/services/price-service';
25
23
  import RequestService from '@subwallet/extension-base/services/request-service';
@@ -77,10 +75,6 @@ export default class KoniState {
77
75
  ready: false,
78
76
  data: {}
79
77
  };
80
-
81
- // earning
82
- yieldPoolInfoSubject = new Subject();
83
- yieldPositionSubject = new Subject();
84
78
  lazyMap = {};
85
79
  // Handle the general status of the extension
86
80
  generalStatus = ServiceStatus.INITIALIZING;
@@ -99,13 +93,11 @@ export default class KoniState {
99
93
  this.priceService = new PriceService(this.dbService, this.eventService, this.chainService);
100
94
  this.balanceService = new BalanceService(this);
101
95
  this.historyService = new HistoryService(this.dbService, this.chainService, this.eventService, this.keyringService, this.subscanService);
102
- this.mintCampaignService = new MintCampaignService(this);
96
+ this.transactionService = new TransactionService(this.chainService, this.eventService, this.requestService, this.balanceService, this.historyService, this.notificationService, this.dbService);
103
97
  this.walletConnectService = new WalletConnectService(this, this.requestService);
104
98
  this.migrationService = new MigrationService(this, this.eventService);
105
99
  this.campaignService = new CampaignService(this);
106
100
  this.buyService = new BuyService(this);
107
- this.transactionService = new TransactionService(this);
108
- this.earningService = new EarningService(this);
109
101
  this.subscription = new KoniSubscription(this, this.dbService);
110
102
  this.cron = new KoniCron(this, this.subscription, this.dbService);
111
103
  this.logger = createLogger('State');
@@ -248,7 +240,6 @@ export default class KoniState {
248
240
  }
249
241
  async startSubscription() {
250
242
  await this.eventService.waitKeyringReady;
251
- await this.eventService.waitAssetReady;
252
243
  this.dbService.subscribeChainStakingMetadata([], data => {
253
244
  this.chainStakingMetadataSubject.next(data);
254
245
  });
@@ -259,8 +250,8 @@ export default class KoniState {
259
250
  this.keyringService.accountSubject.subscribe(accounts => {
260
251
  // TODO: improve this
261
252
  unsub && unsub.unsubscribe();
262
- unsub = this.dbService.subscribeYieldPosition(Object.keys(accounts), data => {
263
- this.yieldPositionSubject.next(data);
253
+ unsub = this.dbService.subscribeNominatorMetadata(Object.keys(accounts), data => {
254
+ this.stakingNominatorMetadataSubject.next(data);
264
255
  });
265
256
  });
266
257
  }
@@ -352,22 +343,6 @@ export default class KoniState {
352
343
  async getPooledStakingRecordsByAddress(addresses) {
353
344
  return this.dbService.getPooledStakings(addresses, this.activeChainSlugs);
354
345
  }
355
- async getPooledPositionByAddress(addresses) {
356
- return this.dbService.getYieldNominationPoolPosition(addresses, this.activeChainSlugs);
357
- }
358
- subscribeYieldPoolInfo() {
359
- return this.yieldPoolInfoSubject;
360
- }
361
- subscribeYieldPosition() {
362
- return this.yieldPositionSubject;
363
- }
364
- getYieldPoolInfo() {
365
- return this.dbService.getYieldPools();
366
- }
367
- getYieldPositionInfo() {
368
- const addresses = this.getDecodedAddresses(this.keyringService.currentAccount.address);
369
- return this.dbService.getYieldPositionByAddress(addresses);
370
- }
371
346
  subscribeMantaPayConfig() {
372
347
  return this.mantaPayConfigSubject;
373
348
  }
@@ -1766,26 +1741,4 @@ export default class KoniState {
1766
1741
  specVersion: parseInt((metadata === null || metadata === void 0 ? void 0 : metadata.specVersion) || '0')
1767
1742
  };
1768
1743
  }
1769
- updateYieldPoolInfo(data) {
1770
- this.dbService.updateYieldPoolStore(data).catch(e => this.logger.warn(e));
1771
- }
1772
- resetYieldPoolInfo(chains) {
1773
- this.dbService.subscribeYieldPoolInfo(chains, data => {
1774
- // TODO: no unsub
1775
- this.yieldPoolInfoSubject.next(data);
1776
- });
1777
- }
1778
- updateYieldPosition(data) {
1779
- this.dbService.updateYieldPosition(data).catch(e => this.logger.warn(e));
1780
- }
1781
- getYieldPoolStakingInfo(chain, poolType) {
1782
- return this.dbService.getYieldPoolStakingInfo(chain, poolType);
1783
- }
1784
- getCrowdloanContributions({
1785
- address,
1786
- page,
1787
- relayChain
1788
- }) {
1789
- return this.subscanService.getCrowdloanContributions(relayChain, address, page);
1790
- }
1791
1744
  }
@@ -58,8 +58,7 @@ export default function handlers({
58
58
  assert(port, 'Port has been disconnected');
59
59
  port.postMessage({
60
60
  id,
61
- response,
62
- sender: 'BACKGROUND'
61
+ response
63
62
  });
64
63
  }).catch(error => {
65
64
  console.error(error);
@@ -71,8 +70,7 @@ export default function handlers({
71
70
  error: error.message,
72
71
  errorCode: error.code,
73
72
  errorData: error.data,
74
- id,
75
- sender: 'BACKGROUND'
73
+ id
76
74
  });
77
75
  }
78
76
  });
@@ -1,9 +1,8 @@
1
1
  import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
2
- import { SubstrateApi } from '@subwallet/extension-base/services/chain-service/handler/SubstrateApi';
3
2
  import { _ChainState, _EvmApi, _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
4
3
  import DatabaseService from '@subwallet/extension-base/services/storage-service/DatabaseService';
5
4
  import KoniState from './handlers/State';
6
- declare type SubscriptionName = 'balance' | 'crowdloan' | 'stakingOnChain' | 'essentialChainStakingMetadata' | 'yieldPoolStats' | 'yieldPosition';
5
+ declare type SubscriptionName = 'balance' | 'crowdloan' | 'stakingOnChain' | 'essentialChainStakingMetadata';
7
6
  export declare class KoniSubscription {
8
7
  private eventHandler?;
9
8
  private subscriptionMap;
@@ -19,9 +18,6 @@ export declare class KoniSubscription {
19
18
  stop(): Promise<void>;
20
19
  subscribeBalances(address: string, chainInfoMap: Record<string, _ChainInfo>, chainStateMap: Record<string, _ChainState>, substrateApiMap: Record<string, _SubstrateApi>, web3ApiMap: Record<string, _EvmApi>, onlyRunOnFirstTime?: boolean): void;
21
20
  subscribeCrowdloans(address: string, substrateApiMap: Record<string, _SubstrateApi>, onlyRunOnFirstTime?: boolean): void;
22
- subscribeYieldPools(chainInfoMap: Record<string, _ChainInfo>, assetInfoMap: Record<string, _ChainAsset>, substrateApiMap: Record<string, SubstrateApi>, evmApiMap: Record<string, _EvmApi>, address?: string, onlyRunOnFirstTime?: boolean): void;
23
- initYieldPositionSubscription(addresses: string[], substrateApiMap: Record<string, SubstrateApi>, evmApiMap: Record<string, _EvmApi>, chainInfoMap: Record<string, _ChainInfo>, assetInfoMap: Record<string, _ChainAsset>, onlyRunOnFirstTime?: boolean): () => void;
24
- initYieldPoolStatsSubscription(substrateApiMap: Record<string, _SubstrateApi>, evmApiMap: Record<string, _EvmApi>, onlyRunOnFirstTime?: boolean): () => void;
25
21
  subscribeStakingOnChain(address: string, substrateApiMap: Record<string, _SubstrateApi>, onlyRunOnFirstTime?: boolean): void;
26
22
  initStakingOnChainSubscription(addresses: string[], substrateApiMap: Record<string, _SubstrateApi>, onlyRunOnFirstTime?: boolean): (() => void) | undefined;
27
23
  initEssentialChainStakingMetadataSubscription(substrateApiMap: Record<string, _SubstrateApi>, onlyRunOnFirstTime?: boolean): (() => void) | undefined;
@@ -31,7 +27,6 @@ export declare class KoniSubscription {
31
27
  initNftSubscription(addresses: string[], substrateApiMap: Record<string, _SubstrateApi>, evmApiMap: Record<string, _EvmApi>, smartContractNfts: _ChainAsset[], chainInfoMap: Record<string, _ChainInfo>): void;
32
28
  subscribeStakingReward(address: string): Promise<void>;
33
29
  subscribeStakingRewardFastInterval(address: string): Promise<void>;
34
- subscribeEarningRewardHistoryInterval(address: string): Promise<void>;
35
30
  reloadStaking(): Promise<void>;
36
31
  reloadBalance(): Promise<void>;
37
32
  reloadCrowdloan(): Promise<void>;
@@ -2,22 +2,21 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { subscribeCrowdloan } from '@subwallet/extension-base/koni/api/dotsama/crowdloan';
5
- import { getNominationStakingRewardData, stakingOnChainApi } from '@subwallet/extension-base/koni/api/staking';
5
+ import { getNominationStakingRewardData, getPoolingStakingRewardData, stakingOnChainApi } from '@subwallet/extension-base/koni/api/staking';
6
6
  import { subscribeEssentialChainStakingMetadata } from '@subwallet/extension-base/koni/api/staking/bonding';
7
+ import { getAmplitudeUnclaimedStakingReward } from '@subwallet/extension-base/koni/api/staking/paraChain';
7
8
  import { nftHandler } from '@subwallet/extension-base/koni/background/handlers';
8
9
  import { subscribeBalance } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/balance';
9
10
  import { _isChainEnabled, _isChainSupportSubstrateStaking } from '@subwallet/extension-base/services/chain-service/utils';
10
11
  import { COMMON_RELOAD_EVENTS } from '@subwallet/extension-base/services/event-service/types';
11
12
  import { waitTimeout } from '@subwallet/extension-base/utils';
12
- import { logger as createLogger, noop } from '@polkadot/util';
13
+ import { logger as createLogger } from '@polkadot/util';
13
14
  export class KoniSubscription {
14
15
  subscriptionMap = {
15
16
  crowdloan: undefined,
16
17
  balance: undefined,
17
18
  stakingOnChain: undefined,
18
- essentialChainStakingMetadata: undefined,
19
- yieldPoolStats: undefined,
20
- yieldPosition: undefined
19
+ essentialChainStakingMetadata: undefined
21
20
  };
22
21
  constructor(state, dbService) {
23
22
  this.dbService = dbService;
@@ -53,7 +52,6 @@ export class KoniSubscription {
53
52
  var _this$state$keyringSe;
54
53
  await Promise.all([this.state.eventService.waitCryptoReady, this.state.eventService.waitKeyringReady, this.state.eventService.waitAssetReady]);
55
54
  const currentAddress = (_this$state$keyringSe = this.state.keyringService.currentAccount) === null || _this$state$keyringSe === void 0 ? void 0 : _this$state$keyringSe.address;
56
- this.subscribeYieldPools(this.state.getChainInfoMap(), this.state.getAssetRegistry(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap(), currentAddress);
57
55
  if (currentAddress) {
58
56
  this.subscribeBalances(currentAddress, this.state.getChainInfoMap(), this.state.getChainStateMap(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap());
59
57
  this.subscribeCrowdloans(currentAddress, this.state.getSubstrateApiMap());
@@ -67,9 +65,6 @@ export class KoniSubscription {
67
65
  return;
68
66
  }
69
67
  const address = (_serviceInfo$currentA = serviceInfo.currentAccountInfo) === null || _serviceInfo$currentA === void 0 ? void 0 : _serviceInfo$currentA.address;
70
-
71
- // @ts-ignore
72
- this.subscribeYieldPools(serviceInfo.chainInfoMap, serviceInfo.assetRegistry, serviceInfo.chainApiMap.substrate, serviceInfo.chainApiMap.evm, address);
73
68
  if (!address) {
74
69
  return;
75
70
  }
@@ -105,72 +100,6 @@ export class KoniSubscription {
105
100
  this.updateSubscription('crowdloan', this.initCrowdloanSubscription(addresses, substrateApiMap, onlyRunOnFirstTime));
106
101
  }).catch(console.error);
107
102
  }
108
- subscribeYieldPools(chainInfoMap, assetInfoMap, substrateApiMap, evmApiMap, address, onlyRunOnFirstTime) {
109
- this.updateSubscription('yieldPoolStats', this.initYieldPoolStatsSubscription(substrateApiMap, evmApiMap, onlyRunOnFirstTime));
110
- if (address) {
111
- const addresses = this.state.getDecodedAddresses(address);
112
- if (!addresses.length) {
113
- return;
114
- }
115
- this.updateSubscription('yieldPosition', this.initYieldPositionSubscription(addresses, substrateApiMap, evmApiMap, chainInfoMap, assetInfoMap));
116
- }
117
- }
118
- initYieldPositionSubscription(addresses, substrateApiMap, evmApiMap, chainInfoMap, assetInfoMap, onlyRunOnFirstTime) {
119
- let cancel = false;
120
- const updateYieldPoolStats = data => {
121
- this.state.updateYieldPosition(data);
122
- };
123
- let unsub = noop;
124
- this.state.earningService.subscribePoolPositions(addresses, updateYieldPoolStats).then(rs => {
125
- if (cancel) {
126
- rs();
127
- } else {
128
- if (onlyRunOnFirstTime) {
129
- rs && rs();
130
- } else {
131
- unsub = rs;
132
- }
133
- }
134
- }).catch(console.error);
135
- return () => {
136
- cancel = true;
137
- unsub && unsub();
138
- };
139
- }
140
- initYieldPoolStatsSubscription(substrateApiMap, evmApiMap, onlyRunOnFirstTime) {
141
- let cancel = false;
142
- this.state.resetYieldPoolInfo(Object.keys(this.state.getChainInfoMap()));
143
- const updateYieldPoolStats = data => {
144
- this.state.updateYieldPoolInfo(data);
145
- };
146
-
147
- // const unsub = subscribeYieldPoolStats(substrateApiMap, evmApiMap, this.state.getActiveChainInfoMap(), this.state.getAssetRegistry(), updateYieldPoolStats);
148
- let unsub = noop;
149
- this.state.earningService.subscribePoolsInfo(updateYieldPoolStats).then(rs => {
150
- if (cancel) {
151
- rs();
152
- } else {
153
- if (onlyRunOnFirstTime) {
154
- rs && rs();
155
- } else {
156
- unsub = rs;
157
- }
158
- }
159
- }).catch(console.error);
160
-
161
- //
162
- // if (onlyRunOnFirstTime) {
163
- // unsub && unsub();
164
- //
165
- // return;
166
- // }
167
-
168
- return () => {
169
- cancel = true;
170
- // unsub && unsub();
171
- unsub && unsub();
172
- };
173
- }
174
103
  subscribeStakingOnChain(address, substrateApiMap, onlyRunOnFirstTime) {
175
104
  this.state.resetStaking(address);
176
105
  const addresses = this.state.getDecodedAddresses(address);
@@ -246,11 +175,15 @@ export class KoniSubscription {
246
175
  this.state.setCrowdloanItem(networkKey, rs);
247
176
  });
248
177
  if (onlyRunOnFirstTime) {
249
- subscriptionPromise.then(unsub => unsub === null || unsub === void 0 ? void 0 : unsub()).catch(this.logger.warn);
178
+ subscriptionPromise.then(unsub => {
179
+ unsub && unsub();
180
+ }).catch(this.logger.warn);
250
181
  return;
251
182
  }
252
183
  return () => {
253
- subscriptionPromise.then(unsub => unsub === null || unsub === void 0 ? void 0 : unsub()).catch(this.logger.warn);
184
+ subscriptionPromise.then(unsub => {
185
+ unsub && unsub();
186
+ }).catch(this.logger.warn);
254
187
  };
255
188
  }
256
189
  subscribeNft(address, substrateApiMap, evmApiMap, smartContractNfts, chainInfoMap) {
@@ -289,38 +222,46 @@ export class KoniSubscription {
289
222
  if (!addresses.length) {
290
223
  return;
291
224
  }
225
+ const pooledStakingItems = await this.state.getPooledStakingRecordsByAddress(addresses);
226
+ const pooledAddresses = [];
227
+ pooledStakingItems.forEach(pooledItem => {
228
+ if (!pooledAddresses.includes(pooledItem.address)) {
229
+ pooledAddresses.push(pooledItem.address);
230
+ }
231
+ });
232
+ const chainInfoMap = this.state.getChainInfoMap();
233
+ const targetChainMap = {};
234
+ Object.entries(chainInfoMap).forEach(([key, network]) => {
235
+ const chainState = this.state.getChainStateByKey(key);
236
+ if (_isChainEnabled(chainState) && _isChainSupportSubstrateStaking(network)) {
237
+ targetChainMap[key] = network;
238
+ }
239
+ });
240
+ const activeNetworks = [];
241
+ Object.keys(targetChainMap).forEach(key => {
242
+ activeNetworks.push(key);
243
+ });
292
244
  const updateState = result => {
293
- this.state.earningService.updateEarningReward(result);
294
- };
295
- await Promise.all([this.state.earningService.getPoolReward(addresses, updateState)]);
296
- }
297
- async subscribeEarningRewardHistoryInterval(address) {
298
- const addresses = this.state.getDecodedAddresses(address);
299
- if (!addresses.length) {
300
- return;
301
- }
302
- const updateState = result => {
303
- this.state.earningService.updateEarningRewardHistory(result);
245
+ this.state.updateStakingReward(result);
304
246
  };
305
- await Promise.all([this.state.earningService.fetchPoolRewardHistory(addresses, updateState)]);
247
+ await Promise.all([getPoolingStakingRewardData(pooledAddresses, targetChainMap, this.state.getSubstrateApiMap(), updateState), getAmplitudeUnclaimedStakingReward(this.state.getSubstrateApiMap(), addresses, chainInfoMap, activeNetworks, updateState)]);
306
248
  }
307
249
  async reloadStaking() {
308
- // const currentAddress = this.state.keyringService.currentAccount?.address;
309
-
310
- // this.subscribeYieldPools(this.state.getSubstrateApiMap());
311
-
250
+ var _this$state$keyringSe2;
251
+ const currentAddress = (_this$state$keyringSe2 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe2 === void 0 ? void 0 : _this$state$keyringSe2.address;
252
+ this.subscribeStakingOnChain(currentAddress, this.state.getSubstrateApiMap());
312
253
  await waitTimeout(1800);
313
254
  }
314
255
  async reloadBalance() {
315
- var _this$state$keyringSe2;
316
- const currentAddress = (_this$state$keyringSe2 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe2 === void 0 ? void 0 : _this$state$keyringSe2.address;
256
+ var _this$state$keyringSe3;
257
+ const currentAddress = (_this$state$keyringSe3 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe3 === void 0 ? void 0 : _this$state$keyringSe3.address;
317
258
  await this.state.handleResetBalance(currentAddress, true);
318
259
  this.subscribeBalances(currentAddress, this.state.getChainInfoMap(), this.state.getChainStateMap(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap());
319
260
  await waitTimeout(1800);
320
261
  }
321
262
  async reloadCrowdloan() {
322
- var _this$state$keyringSe3;
323
- const currentAddress = (_this$state$keyringSe3 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe3 === void 0 ? void 0 : _this$state$keyringSe3.address;
263
+ var _this$state$keyringSe4;
264
+ const currentAddress = (_this$state$keyringSe4 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe4 === void 0 ? void 0 : _this$state$keyringSe4.address;
324
265
  this.subscribeCrowdloans(currentAddress, this.state.getSubstrateApiMap());
325
266
  await waitTimeout(1800);
326
267
  }