@subwallet/extension-base 1.0.5-2 → 1.0.6-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 (54) hide show
  1. package/background/KoniTypes.d.ts +7 -1
  2. package/cjs/constants/index.js +1 -1
  3. package/cjs/koni/api/staking/bonding/relayChain.js +2 -7
  4. package/cjs/koni/api/staking/bonding/utils.js +9 -0
  5. package/cjs/koni/api/staking/index.js +6 -3
  6. package/cjs/koni/api/staking/relayChain.js +16 -14
  7. package/cjs/koni/background/handlers/Extension.js +60 -46
  8. package/cjs/koni/background/handlers/State.js +16 -0
  9. package/cjs/koni/background/handlers/Tabs.js +47 -28
  10. package/cjs/packageInfo.js +1 -1
  11. package/cjs/services/chain-service/constants.js +3 -3
  12. package/cjs/services/chain-service/index.js +5 -0
  13. package/cjs/services/chain-service/utils.js +15 -10
  14. package/cjs/services/history-service/subsquid-multi-chain-history.js +2 -2
  15. package/cjs/services/request-service/index.js +3 -0
  16. package/cjs/services/setting-service/SettingService.js +14 -0
  17. package/cjs/services/storage-service/DatabaseService.js +1 -1
  18. package/cjs/services/storage-service/db-stores/Nft.js +3 -3
  19. package/cjs/services/transaction-service/index.js +11 -5
  20. package/cjs/services/transaction-service/utils.js +3 -0
  21. package/cjs/stores/PassPhishingStore.js +18 -0
  22. package/constants/index.d.ts +1 -1
  23. package/constants/index.js +1 -1
  24. package/koni/api/staking/bonding/relayChain.js +3 -8
  25. package/koni/api/staking/bonding/utils.d.ts +1 -0
  26. package/koni/api/staking/bonding/utils.js +8 -0
  27. package/koni/api/staking/index.js +6 -4
  28. package/koni/api/staking/relayChain.js +16 -14
  29. package/koni/background/handlers/Extension.d.ts +1 -0
  30. package/koni/background/handlers/Extension.js +61 -48
  31. package/koni/background/handlers/State.d.ts +1 -0
  32. package/koni/background/handlers/State.js +16 -0
  33. package/koni/background/handlers/Tabs.d.ts +2 -0
  34. package/koni/background/handlers/Tabs.js +47 -28
  35. package/package.json +11 -6
  36. package/packageInfo.js +1 -1
  37. package/services/chain-service/constants.js +3 -3
  38. package/services/chain-service/index.js +5 -0
  39. package/services/chain-service/utils.d.ts +1 -0
  40. package/services/chain-service/utils.js +14 -10
  41. package/services/history-service/subsquid-multi-chain-history.js +2 -2
  42. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -1
  43. package/services/request-service/index.d.ts +1 -0
  44. package/services/request-service/index.js +3 -0
  45. package/services/setting-service/SettingService.d.ts +5 -1
  46. package/services/setting-service/SettingService.js +14 -0
  47. package/services/storage-service/DatabaseService.js +1 -1
  48. package/services/storage-service/db-stores/Nft.d.ts +1 -1
  49. package/services/storage-service/db-stores/Nft.js +3 -3
  50. package/services/transaction-service/index.js +11 -5
  51. package/services/transaction-service/types.d.ts +3 -3
  52. package/services/transaction-service/utils.js +3 -0
  53. package/stores/PassPhishingStore.d.ts +5 -0
  54. package/stores/PassPhishingStore.js +10 -0
@@ -707,6 +707,11 @@ export class ChainService {
707
707
  targetChainInfo.substrateInfo.crowdloanUrl = params.chainEditInfo.crowdloanUrl;
708
708
  }
709
709
  }
710
+ if (targetChainInfo.evmInfo) {
711
+ if (params.chainEditInfo.blockExplorer !== undefined) {
712
+ targetChainInfo.evmInfo.blockExplorer = params.chainEditInfo.blockExplorer;
713
+ }
714
+ }
710
715
  this.updateChainInfoMapSubscription();
711
716
  this.dbService.updateChainStore({
712
717
  ...targetChainInfo,
@@ -10,6 +10,7 @@ export declare function _isPureEvmChain(chainInfo: _ChainInfo): boolean;
10
10
  export declare function _isPureSubstrateChain(chainInfo: _ChainInfo): boolean;
11
11
  export declare function _getOriginChainOfAsset(assetSlug: string): string;
12
12
  export declare function _getContractAddressOfToken(tokenInfo: _ChainAsset): string;
13
+ export declare function _isTokenTransferredByEvm(tokenInfo: _ChainAsset): boolean;
13
14
  export declare function _checkSmartContractSupportByChain(chainInfo: _ChainInfo, contractType: _AssetType): boolean;
14
15
  export declare function _getTokenOnChainAssetId(tokenInfo: _ChainAsset): string;
15
16
  export declare function _getTokenOnChainInfo(tokenInfo: _ChainAsset): Record<string, any>;
@@ -61,6 +61,10 @@ export function _getContractAddressOfToken(tokenInfo) {
61
61
  var _tokenInfo$metadata;
62
62
  return ((_tokenInfo$metadata = tokenInfo.metadata) === null || _tokenInfo$metadata === void 0 ? void 0 : _tokenInfo$metadata.contractAddress) || '';
63
63
  }
64
+ export function _isTokenTransferredByEvm(tokenInfo) {
65
+ var _tokenInfo$metadata2;
66
+ return !!((_tokenInfo$metadata2 = tokenInfo.metadata) !== null && _tokenInfo$metadata2 !== void 0 && _tokenInfo$metadata2.contractAddress) || _isNativeToken(tokenInfo);
67
+ }
64
68
  export function _checkSmartContractSupportByChain(chainInfo, contractType) {
65
69
  // EVM chains support smart contract by default so just checking Substrate chains
66
70
  if (chainInfo.substrateInfo === null || chainInfo.substrateInfo && chainInfo.substrateInfo.supportSmartContract === null) {
@@ -71,12 +75,12 @@ export function _checkSmartContractSupportByChain(chainInfo, contractType) {
71
75
 
72
76
  // Utils for balance functions
73
77
  export function _getTokenOnChainAssetId(tokenInfo) {
74
- var _tokenInfo$metadata2;
75
- return ((_tokenInfo$metadata2 = tokenInfo.metadata) === null || _tokenInfo$metadata2 === void 0 ? void 0 : _tokenInfo$metadata2.assetId) || '-1';
78
+ var _tokenInfo$metadata3;
79
+ return ((_tokenInfo$metadata3 = tokenInfo.metadata) === null || _tokenInfo$metadata3 === void 0 ? void 0 : _tokenInfo$metadata3.assetId) || '-1';
76
80
  }
77
81
  export function _getTokenOnChainInfo(tokenInfo) {
78
- var _tokenInfo$metadata3;
79
- return (_tokenInfo$metadata3 = tokenInfo.metadata) === null || _tokenInfo$metadata3 === void 0 ? void 0 : _tokenInfo$metadata3.onChainInfo;
82
+ var _tokenInfo$metadata4;
83
+ return (_tokenInfo$metadata4 = tokenInfo.metadata) === null || _tokenInfo$metadata4 === void 0 ? void 0 : _tokenInfo$metadata4.onChainInfo;
80
84
  }
81
85
  export function _getTokenMinAmount(tokenInfo) {
82
86
  return tokenInfo.minAmount || '0';
@@ -229,16 +233,16 @@ export function _isXcmPathSupported(originTokenSlug, destinationTokenSlug, asset
229
233
  return assetRef.path === _AssetRefPath.XCM;
230
234
  }
231
235
  export function _getXcmAssetType(tokenInfo) {
232
- var _tokenInfo$metadata4;
233
- return ((_tokenInfo$metadata4 = tokenInfo.metadata) === null || _tokenInfo$metadata4 === void 0 ? void 0 : _tokenInfo$metadata4.assetType) || '';
236
+ var _tokenInfo$metadata5;
237
+ return ((_tokenInfo$metadata5 = tokenInfo.metadata) === null || _tokenInfo$metadata5 === void 0 ? void 0 : _tokenInfo$metadata5.assetType) || '';
234
238
  }
235
239
  export function _getXcmAssetId(tokenInfo) {
236
- var _tokenInfo$metadata5;
237
- return ((_tokenInfo$metadata5 = tokenInfo.metadata) === null || _tokenInfo$metadata5 === void 0 ? void 0 : _tokenInfo$metadata5.assetId) || '-1';
240
+ var _tokenInfo$metadata6;
241
+ return ((_tokenInfo$metadata6 = tokenInfo.metadata) === null || _tokenInfo$metadata6 === void 0 ? void 0 : _tokenInfo$metadata6.assetId) || '-1';
238
242
  }
239
243
  export function _getXcmAssetMultilocation(tokenInfo) {
240
- var _tokenInfo$metadata6;
241
- return (_tokenInfo$metadata6 = tokenInfo.metadata) === null || _tokenInfo$metadata6 === void 0 ? void 0 : _tokenInfo$metadata6.multilocation;
244
+ var _tokenInfo$metadata7;
245
+ return (_tokenInfo$metadata7 = tokenInfo.metadata) === null || _tokenInfo$metadata7 === void 0 ? void 0 : _tokenInfo$metadata7.multilocation;
242
246
  }
243
247
  export function _getXcmTransferType(originChainInfo, destinationChainInfo) {
244
248
  var _originChainInfo$subs, _destinationChainInfo;
@@ -244,7 +244,7 @@ export async function fetchMultiChainHistories(addresses, chainMap, maxPage = 25
244
244
  const usedAddresses = relatedAddresses.filter(a => lowerAddresses.includes(a.toLowerCase()));
245
245
  const chainInfo = chainMap[chainId];
246
246
  if (chainInfo === undefined) {
247
- console.warn(`Not found chain info for chain id: ${chainId}`); // TODO: resolve conflicting chainId
247
+ console.debug(`Not found chain info for chain id: ${chainId}`); // TODO: resolve conflicting chainId
248
248
 
249
249
  return;
250
250
  }
@@ -253,7 +253,7 @@ export async function fetchMultiChainHistories(addresses, chainMap, maxPage = 25
253
253
  const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
254
254
  histories.push(transactionData);
255
255
  } catch (e) {
256
- console.warn('Parse transaction data failed', address, e);
256
+ console.debug('Parse transaction data failed', address, e);
257
257
  }
258
258
  });
259
259
  });
@@ -15,7 +15,7 @@ export default class AuthRequestHandler {
15
15
  private readonly evmChainSubject;
16
16
  readonly authSubjectV2: BehaviorSubject<AuthorizeRequest[]>;
17
17
  constructor(requestService: RequestService, chainService: ChainService, keyringService: KeyringService);
18
- private stripUrl;
18
+ stripUrl(url: string): string;
19
19
  private getAddressList;
20
20
  get numAuthRequestsV2(): number;
21
21
  private get allAuthRequestsV2();
@@ -14,6 +14,7 @@ export default class RequestService {
14
14
  constructor(chainService: ChainService, settingService: SettingService, keyringService: KeyringService);
15
15
  get numAllRequests(): number;
16
16
  updateIconV2(shouldClose?: boolean): void;
17
+ stripUrl(url: string): string;
17
18
  getAddressList(value?: boolean): Record<string, boolean>;
18
19
  get popup(): number[];
19
20
  popupClose(): void;
@@ -35,6 +35,9 @@ export default class RequestService {
35
35
  updateIconV2(shouldClose) {
36
36
  this.#popupHandler.updateIconV2(shouldClose);
37
37
  }
38
+ stripUrl(url) {
39
+ return this.#authRequestHandler.stripUrl(url);
40
+ }
38
41
  getAddressList(value = false) {
39
42
  const addressList = Object.keys(this.keyringService.accounts);
40
43
  return addressList.reduce((addressList, v) => ({
@@ -1,9 +1,13 @@
1
- import { RequestSettingsType } from '@subwallet/extension-base/background/KoniTypes';
1
+ import { PassPhishing, RequestSettingsType } from '@subwallet/extension-base/background/KoniTypes';
2
2
  import { Subject } from 'rxjs';
3
3
  export default class SettingService {
4
4
  private readonly settingsStore;
5
+ private readonly passPhishingStore;
5
6
  getSubject(): Subject<RequestSettingsType>;
6
7
  getSettings(update: (value: RequestSettingsType) => void): void;
7
8
  setSettings(data: RequestSettingsType, callback?: () => void): void;
9
+ passPhishingSubject(): Subject<Record<string, PassPhishing>>;
10
+ getPassPhishingList(update: (value: Record<string, PassPhishing>) => void): void;
11
+ setPassPhishing(data: Record<string, PassPhishing>, callback?: () => void): void;
8
12
  resetWallet(): void;
9
13
  }
@@ -1,10 +1,12 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import PassPhishingStore from '@subwallet/extension-base/stores/PassPhishingStore';
4
5
  import SettingsStore from '@subwallet/extension-base/stores/Settings';
5
6
  import { DEFAULT_SETTING } from "./constants.js";
6
7
  export default class SettingService {
7
8
  settingsStore = new SettingsStore();
9
+ passPhishingStore = new PassPhishingStore();
8
10
  getSubject() {
9
11
  return this.settingsStore.getSubject();
10
12
  }
@@ -20,7 +22,19 @@ export default class SettingService {
20
22
  setSettings(data, callback) {
21
23
  this.settingsStore.set('Settings', data, callback);
22
24
  }
25
+ passPhishingSubject() {
26
+ return this.passPhishingStore.getSubject();
27
+ }
28
+ getPassPhishingList(update) {
29
+ this.passPhishingStore.get('PassPhishing', value => {
30
+ update(value || {});
31
+ });
32
+ }
33
+ setPassPhishing(data, callback) {
34
+ this.passPhishingStore.set('PassPhishing', data, callback);
35
+ }
23
36
  resetWallet() {
24
37
  this.settingsStore.set('Settings', DEFAULT_SETTING);
38
+ this.passPhishingStore.set('PassPhishing', {});
25
39
  }
26
40
  }
@@ -145,7 +145,7 @@ export default class DatabaseService {
145
145
  }
146
146
  async cleanUpNft(chain, owner, collectionIds, nftIds, ownNothing) {
147
147
  if (ownNothing) {
148
- return this.stores.nft.deleteNftsByChainAndOwner(chain, reformatAddress(owner, 42));
148
+ return this.stores.nft.deleteNftsByChainAndOwner(chain, reformatAddress(owner, 42), collectionIds);
149
149
  }
150
150
  return this.stores.nft.cleanUpNfts(chain, reformatAddress(owner, 42), collectionIds, nftIds);
151
151
  }
@@ -5,7 +5,7 @@ export default class NftStore extends BaseStoreWithAddressAndChain<INft> {
5
5
  getNft(addresses: string[], chainList?: string[]): import("dexie").PromiseExtended<INft[]>;
6
6
  subscribeNft(addresses: string[], chainList?: string[]): import("dexie").Observable<INft[]>;
7
7
  cleanUpNfts(chain: string, address: string, collectionIds: string[], nftIds: string[]): import("dexie").PromiseExtended<number>;
8
- deleteNftsByChainAndOwner(chain: string, address: string): import("dexie").PromiseExtended<number>;
8
+ deleteNftsByChainAndOwner(chain: string, address: string, collectionIds: string[]): import("dexie").PromiseExtended<number>;
9
9
  deleteNftByAddress(addresses: string[]): import("dexie").PromiseExtended<number>;
10
10
  deleteNftItem(chain: string, addresses: string[], nftItem: NftItem): import("dexie").PromiseExtended<number>;
11
11
  deleteNftsByCollection(chain: string, collectionId: string): import("dexie").PromiseExtended<number>;
@@ -19,13 +19,13 @@ export default class NftStore extends BaseStoreWithAddressAndChain {
19
19
  return this.table.where({
20
20
  address,
21
21
  chain
22
- }).and(nft => !collectionIds.includes(nft.collectionId) || collectionIds.includes(nft.collectionId) && !nftIds.includes(nft.id)).delete();
22
+ }).and(nft => collectionIds.includes(nft.collectionId) && !nftIds.includes(nft.id)).delete();
23
23
  }
24
- deleteNftsByChainAndOwner(chain, address) {
24
+ deleteNftsByChainAndOwner(chain, address, collectionIds) {
25
25
  return this.table.where({
26
26
  address,
27
27
  chain
28
- }).delete();
28
+ }).and(nft => collectionIds.includes(nft.collectionId)).delete();
29
29
  }
30
30
  deleteNftByAddress(addresses) {
31
31
  return this.table.where('address').anyOfIgnoreCase(addresses).delete();
@@ -122,7 +122,7 @@ export default class TransactionService {
122
122
  } else {
123
123
  var _pair$meta;
124
124
  if ((_pair$meta = pair.meta) !== null && _pair$meta !== void 0 && _pair$meta.isReadOnly) {
125
- validationResponse.errors.push(new TransactionError(BasicTxErrorType.INTERNAL_ERROR, 'This is read-only account'));
125
+ validationResponse.errors.push(new TransactionError(BasicTxErrorType.INTERNAL_ERROR, 'This is watch-only account'));
126
126
  }
127
127
  }
128
128
 
@@ -161,8 +161,8 @@ export default class TransactionService {
161
161
  const transactionId = getTransactionId(transaction.chainType, transaction.chain, isInternal);
162
162
  return {
163
163
  ...transaction,
164
- createdAt: new Date(),
165
- updatedAt: new Date(),
164
+ createdAt: new Date().getTime(),
165
+ updatedAt: new Date().getTime(),
166
166
  errors: transaction.errors || [],
167
167
  warnings: transaction.warnings || [],
168
168
  url: transaction.url || EXTENSION_REQUEST_URL,
@@ -203,6 +203,9 @@ export default class TransactionService {
203
203
  const stopByErrors = validatedTransaction.errors.length > 0;
204
204
  const stopByWarnings = validatedTransaction.warnings.length > 0 && !validatedTransaction.ignoreWarnings;
205
205
  if (stopByErrors || stopByWarnings) {
206
+ // @ts-ignore
207
+ 'transaction' in validatedTransaction && delete validatedTransaction.transaction;
208
+ 'additionalValidator' in validatedTransaction && delete validatedTransaction.additionalValidator;
206
209
  return validatedTransaction;
207
210
  }
208
211
  validatedTransaction.warnings = [];
@@ -220,6 +223,10 @@ export default class TransactionService {
220
223
  }
221
224
  });
222
225
  });
226
+
227
+ // @ts-ignore
228
+ 'transaction' in validatedTransaction && delete validatedTransaction.transaction;
229
+ 'additionalValidator' in validatedTransaction && delete validatedTransaction.additionalValidator;
223
230
  return validatedTransaction;
224
231
  }
225
232
  async sendTransaction(transaction) {
@@ -286,7 +293,7 @@ export default class TransactionService {
286
293
  status: transaction.status,
287
294
  transactionId: transaction.id,
288
295
  extrinsicHash: transaction.extrinsicHash,
289
- time: transaction.createdAt.getTime(),
296
+ time: transaction.createdAt,
290
297
  fee: transaction.estimateFee,
291
298
  blockNumber: 0,
292
299
  // Will be added in next step
@@ -295,7 +302,6 @@ export default class TransactionService {
295
302
  nonce: nonce || 0,
296
303
  startBlock: startBlock || 0
297
304
  };
298
- console.log('historyItem', historyItem);
299
305
  const chainInfo = this.chainService.getChainInfoByKey(transaction.chain);
300
306
  const nativeAsset = _getChainNativeTokenBasicInfo(chainInfo);
301
307
  const baseNativeAmount = {
@@ -14,14 +14,14 @@ export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick
14
14
  status: ExtrinsicStatus;
15
15
  extrinsicHash: string;
16
16
  extrinsicType: ExtrinsicType;
17
- createdAt: Date;
18
- updatedAt: Date;
17
+ createdAt: number;
18
+ updatedAt: number;
19
19
  estimateFee?: AmountData;
20
20
  transaction: SubmittableExtrinsic | TransactionConfig;
21
21
  additionalValidator?: (inputTransaction: SWTransactionResponse) => Promise<void>;
22
22
  eventsHandler?: (eventEmitter: TransactionEmitter) => void;
23
23
  }
24
- export declare type SWTransactionResult = Omit<SWTransaction, 'transaction'>;
24
+ export declare type SWTransactionResult = Omit<SWTransaction, 'transaction' | 'additionalValidator'>;
25
25
  declare type SwInputBase = Pick<SWTransaction, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransaction, 'additionalValidator'>>;
26
26
  export interface SWTransactionInput extends SwInputBase {
27
27
  transaction?: SWTransaction['transaction'] | null;
@@ -21,6 +21,9 @@ function getBlockExplorerTxRoute(chainInfo) {
21
21
  if (_isPureEvmChain(chainInfo)) {
22
22
  return 'tx';
23
23
  }
24
+ if (['aventus'].includes(chainInfo.slug)) {
25
+ return 'transaction';
26
+ }
24
27
  return 'extrinsic';
25
28
  }
26
29
  export function getExplorerLink(chainInfo, value, type) {
@@ -0,0 +1,5 @@
1
+ import { PassPhishing } from '@subwallet/extension-base/background/KoniTypes';
2
+ import SubscribableStore from '@subwallet/extension-base/stores/SubscribableStore';
3
+ export default class PassPhishingStore extends SubscribableStore<Record<string, PassPhishing>> {
4
+ constructor();
5
+ }
@@ -0,0 +1,10 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { EXTENSION_PREFIX } from '@subwallet/extension-base/defaults';
5
+ import SubscribableStore from '@subwallet/extension-base/stores/SubscribableStore';
6
+ export default class PassPhishingStore extends SubscribableStore {
7
+ constructor() {
8
+ super(EXTENSION_PREFIX ? `${EXTENSION_PREFIX}subwallet-pass-phishing-list` : null);
9
+ }
10
+ }