@keplr-wallet/background 0.12.306 → 0.12.307-rc.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.
@@ -19,6 +19,8 @@ const getHandler = (service) => {
19
19
  return handleGetTokenScansMsg(service)(env, msg);
20
20
  case messages_1.RevalidateTokenScansMsg:
21
21
  return handleRevalidateTokenScansMsg(service)(env, msg);
22
+ case messages_1.DismissNewTokenFoundInMainMsg:
23
+ return handleDismissNewTokenFoundInMainMsg(service)(env, msg);
22
24
  default:
23
25
  throw new router_1.KeplrError("tx", 110, "Unknown msg type");
24
26
  }
@@ -27,15 +29,33 @@ const getHandler = (service) => {
27
29
  exports.getHandler = getHandler;
28
30
  const handleGetTokenScansMsg = (service) => {
29
31
  return (_, msg) => {
30
- return service.getTokenScans(msg.vaultId);
32
+ const tokenScans = service.getTokenScans(msg.vaultId);
33
+ return {
34
+ vaultId: msg.vaultId,
35
+ tokenScans: tokenScans,
36
+ tokenScansWithoutDismissed: tokenScans.filter((scan) => service.isMeaningfulTokenScanChangeBetweenDismissed(scan)),
37
+ };
31
38
  };
32
39
  };
33
40
  const handleRevalidateTokenScansMsg = (service) => {
34
41
  return (_, msg) => __awaiter(void 0, void 0, void 0, function* () {
35
42
  yield service.scanAll(msg.vaultId);
43
+ const tokenScans = service.getTokenScans(msg.vaultId);
44
+ return {
45
+ vaultId: msg.vaultId,
46
+ tokenScans: tokenScans,
47
+ tokenScansWithoutDismissed: tokenScans.filter((scan) => service.isMeaningfulTokenScanChangeBetweenDismissed(scan)),
48
+ };
49
+ });
50
+ };
51
+ const handleDismissNewTokenFoundInMainMsg = (service) => {
52
+ return (_, msg) => __awaiter(void 0, void 0, void 0, function* () {
53
+ service.dismissNewTokenFoundInHome(msg.vaultId);
54
+ const tokenScans = service.getTokenScans(msg.vaultId);
36
55
  return {
37
56
  vaultId: msg.vaultId,
38
- tokenScans: service.getTokenScans(msg.vaultId),
57
+ tokenScans: tokenScans,
58
+ tokenScansWithoutDismissed: tokenScans.filter((scan) => service.isMeaningfulTokenScanChangeBetweenDismissed(scan)),
39
59
  };
40
60
  });
41
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/token-scan/handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAM8B;AAC9B,yCAAuE;AAGhE,MAAM,UAAU,GAA2C,CAChE,OAAyB,EACzB,EAAE;IACF,OAAO,CAAC,GAAQ,EAAE,GAAqB,EAAE,EAAE;QACzC,QAAQ,GAAG,CAAC,WAAW,EAAE;YACvB,KAAK,2BAAgB;gBACnB,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAuB,CAAC,CAAC;YACvE,KAAK,kCAAuB;gBAC1B,OAAO,6BAA6B,CAAC,OAAO,CAAC,CAC3C,GAAG,EACH,GAA8B,CAC/B,CAAC;YACJ;gBACE,MAAM,IAAI,mBAAU,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;SACvD;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,UAAU,cAgBrB;AAEF,MAAM,sBAAsB,GAEa,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAChB,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAEa,CAAC,OAAO,EAAE,EAAE;IAC1D,OAAO,CAAO,CAAC,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;SAC/C,CAAC;IACJ,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/token-scan/handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAM8B;AAC9B,yCAIoB;AAGb,MAAM,UAAU,GAA2C,CAChE,OAAyB,EACzB,EAAE;IACF,OAAO,CAAC,GAAQ,EAAE,GAAqB,EAAE,EAAE;QACzC,QAAQ,GAAG,CAAC,WAAW,EAAE;YACvB,KAAK,2BAAgB;gBACnB,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAuB,CAAC,CAAC;YACvE,KAAK,kCAAuB;gBAC1B,OAAO,6BAA6B,CAAC,OAAO,CAAC,CAC3C,GAAG,EACH,GAA8B,CAC/B,CAAC;YACJ,KAAK,wCAA6B;gBAChC,OAAO,mCAAmC,CAAC,OAAO,CAAC,CACjD,GAAG,EACH,GAAoC,CACrC,CAAC;YACJ;gBACE,MAAM,IAAI,mBAAU,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;SACvD;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,UAAU,cAqBrB;AAEF,MAAM,sBAAsB,GAEa,CAAC,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAChB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,UAAU;YACtB,0BAA0B,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,OAAO,CAAC,2CAA2C,CAAC,IAAI,CAAC,CAC1D;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAEa,CAAC,OAAO,EAAE,EAAE;IAC1D,OAAO,CAAO,CAAC,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,UAAU;YACtB,0BAA0B,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,OAAO,CAAC,2CAA2C,CAAC,IAAI,CAAC,CAC1D;SACF,CAAC;IACJ,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAEa,CAAC,OAAO,EAAE,EAAE;IAChE,OAAO,CAAO,CAAC,EAAE,GAAG,EAAE,EAAE;QACtB,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,UAAU;YACtB,0BAA0B,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,OAAO,CAAC,2CAA2C,CAAC,IAAI,CAAC,CAC1D;SACF,CAAC;IACJ,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC"}
@@ -7,6 +7,7 @@ const handler_1 = require("./handler");
7
7
  function init(router, service) {
8
8
  router.registerMessage(messages_1.GetTokenScansMsg);
9
9
  router.registerMessage(messages_1.RevalidateTokenScansMsg);
10
+ router.registerMessage(messages_1.DismissNewTokenFoundInMainMsg);
10
11
  router.addHandler(constants_1.ROUTE, (0, handler_1.getHandler)(service));
11
12
  }
12
13
  exports.init = init;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/token-scan/init.ts"],"names":[],"mappings":";;;AACA,yCAAuE;AACvE,2CAAoC;AACpC,uCAAuC;AAGvC,SAAgB,IAAI,CAAC,MAAc,EAAE,OAAyB;IAC5D,MAAM,CAAC,eAAe,CAAC,2BAAgB,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,CAAC,kCAAuB,CAAC,CAAC;IAEhD,MAAM,CAAC,UAAU,CAAC,iBAAK,EAAE,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC;AALD,oBAKC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/token-scan/init.ts"],"names":[],"mappings":";;;AACA,yCAIoB;AACpB,2CAAoC;AACpC,uCAAuC;AAGvC,SAAgB,IAAI,CAAC,MAAc,EAAE,OAAyB;IAC5D,MAAM,CAAC,eAAe,CAAC,2BAAgB,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,CAAC,kCAAuB,CAAC,CAAC;IAChD,MAAM,CAAC,eAAe,CAAC,wCAA6B,CAAC,CAAC;IAEtD,MAAM,CAAC,UAAU,CAAC,iBAAK,EAAE,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC;AAND,oBAMC"}
@@ -1,6 +1,10 @@
1
1
  import { Message } from "@keplr-wallet/router";
2
2
  import { TokenScan } from "./service";
3
- export declare class GetTokenScansMsg extends Message<TokenScan[]> {
3
+ export declare class GetTokenScansMsg extends Message<{
4
+ vaultId: string;
5
+ tokenScans: TokenScan[];
6
+ tokenScansWithoutDismissed: TokenScan[];
7
+ }> {
4
8
  readonly vaultId: string;
5
9
  static type(): string;
6
10
  constructor(vaultId: string);
@@ -11,6 +15,19 @@ export declare class GetTokenScansMsg extends Message<TokenScan[]> {
11
15
  export declare class RevalidateTokenScansMsg extends Message<{
12
16
  vaultId: string;
13
17
  tokenScans: TokenScan[];
18
+ tokenScansWithoutDismissed: TokenScan[];
19
+ }> {
20
+ readonly vaultId: string;
21
+ static type(): string;
22
+ constructor(vaultId: string);
23
+ validateBasic(): void;
24
+ route(): string;
25
+ type(): string;
26
+ }
27
+ export declare class DismissNewTokenFoundInMainMsg extends Message<{
28
+ vaultId: string;
29
+ tokenScans: TokenScan[];
30
+ tokenScansWithoutDismissed: TokenScan[];
14
31
  }> {
15
32
  readonly vaultId: string;
16
33
  static type(): string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RevalidateTokenScansMsg = exports.GetTokenScansMsg = void 0;
3
+ exports.DismissNewTokenFoundInMainMsg = exports.RevalidateTokenScansMsg = exports.GetTokenScansMsg = void 0;
4
4
  const router_1 = require("@keplr-wallet/router");
5
5
  const constants_1 = require("./constants");
6
6
  class GetTokenScansMsg extends router_1.Message {
@@ -45,4 +45,25 @@ class RevalidateTokenScansMsg extends router_1.Message {
45
45
  }
46
46
  }
47
47
  exports.RevalidateTokenScansMsg = RevalidateTokenScansMsg;
48
+ class DismissNewTokenFoundInMainMsg extends router_1.Message {
49
+ static type() {
50
+ return "dismiss-new-token-found-in-main";
51
+ }
52
+ constructor(vaultId) {
53
+ super();
54
+ this.vaultId = vaultId;
55
+ }
56
+ validateBasic() {
57
+ if (!this.vaultId) {
58
+ throw new Error("Empty vault id");
59
+ }
60
+ }
61
+ route() {
62
+ return constants_1.ROUTE;
63
+ }
64
+ type() {
65
+ return DismissNewTokenFoundInMainMsg.type();
66
+ }
67
+ }
68
+ exports.DismissNewTokenFoundInMainMsg = DismissNewTokenFoundInMainMsg;
48
69
  //# sourceMappingURL=messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/token-scan/messages.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,2CAAoC;AAEpC,MAAa,gBAAiB,SAAQ,gBAAoB;IACjD,MAAM,CAAC,IAAI;QAChB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,YAA4B,OAAe;QACzC,KAAK,EAAE,CAAC;QADkB,YAAO,GAAP,OAAO,CAAQ;IAE3C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;IACH,CAAC;IAED,KAAK;QACH,OAAO,iBAAK,CAAC;IACf,CAAC;IAED,IAAI;QACF,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;CACF;AAtBD,4CAsBC;AAED,MAAa,uBAAwB,SAAQ,gBAG3C;IACO,MAAM,CAAC,IAAI;QAChB,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,YAA4B,OAAe;QACzC,KAAK,EAAE,CAAC;QADkB,YAAO,GAAP,OAAO,CAAQ;IAE3C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;IACH,CAAC;IAED,KAAK;QACH,OAAO,iBAAK,CAAC;IACf,CAAC;IAED,IAAI;QACF,OAAO,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;CACF;AAzBD,0DAyBC"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/token-scan/messages.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,2CAAoC;AAEpC,MAAa,gBAAiB,SAAQ,gBAIpC;IACO,MAAM,CAAC,IAAI;QAChB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,YAA4B,OAAe;QACzC,KAAK,EAAE,CAAC;QADkB,YAAO,GAAP,OAAO,CAAQ;IAE3C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;IACH,CAAC;IAED,KAAK;QACH,OAAO,iBAAK,CAAC;IACf,CAAC;IAED,IAAI;QACF,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;CACF;AA1BD,4CA0BC;AAED,MAAa,uBAAwB,SAAQ,gBAI3C;IACO,MAAM,CAAC,IAAI;QAChB,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,YAA4B,OAAe;QACzC,KAAK,EAAE,CAAC;QADkB,YAAO,GAAP,OAAO,CAAQ;IAE3C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;IACH,CAAC;IAED,KAAK;QACH,OAAO,iBAAK,CAAC;IACf,CAAC;IAED,IAAI;QACF,OAAO,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;CACF;AA1BD,0DA0BC;AAED,MAAa,6BAA8B,SAAQ,gBAIjD;IACO,MAAM,CAAC,IAAI;QAChB,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IAED,YAA4B,OAAe;QACzC,KAAK,EAAE,CAAC;QADkB,YAAO,GAAP,OAAO,CAAQ;IAE3C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;IACH,CAAC;IAED,KAAK;QACH,OAAO,iBAAK,CAAC;IACf,CAAC;IAED,IAAI;QACF,OAAO,6BAA6B,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;CACF;AA1BD,sEA0BC"}
@@ -8,23 +8,26 @@ import { KVStore } from "@keplr-wallet/common";
8
8
  import { KeyRingStarknetService } from "../keyring-starknet";
9
9
  import { KeyRingBitcoinService } from "../keyring-bitcoin";
10
10
  import { MessageRequester } from "@keplr-wallet/router";
11
+ type Asset = {
12
+ currency: AppCurrency;
13
+ amount: string;
14
+ };
15
+ export type TokenScanInfo = {
16
+ bech32Address?: string;
17
+ ethereumHexAddress?: string;
18
+ starknetHexAddress?: string;
19
+ bitcoinAddress?: {
20
+ bech32Address: string;
21
+ paymentType: SupportedPaymentType;
22
+ };
23
+ coinType?: number;
24
+ assets: Asset[];
25
+ };
11
26
  export type TokenScan = {
12
27
  chainId: string;
13
- infos: {
14
- bech32Address?: string;
15
- ethereumHexAddress?: string;
16
- starknetHexAddress?: string;
17
- bitcoinAddress?: {
18
- bech32Address: string;
19
- paymentType: SupportedPaymentType;
20
- };
21
- coinType?: number;
22
- assets: {
23
- currency: AppCurrency;
24
- amount: string;
25
- }[];
26
- }[];
28
+ infos: TokenScanInfo[];
27
29
  linkedChainKey?: string;
30
+ dismissedInfos?: TokenScanInfo[];
28
31
  };
29
32
  export declare class TokenScanService {
30
33
  protected readonly kvStore: KVStore;
@@ -44,4 +47,8 @@ export declare class TokenScanService {
44
47
  scan(vaultId: string, chainId: string): Promise<void>;
45
48
  scanAll(vaultId: string): Promise<void>;
46
49
  protected calculateTokenScan(vaultId: string, chainId: string): Promise<TokenScan | undefined>;
50
+ dismissNewTokenFoundInHome(vaultId: string): void;
51
+ resetDismiss(vaultId: string): void;
52
+ isMeaningfulTokenScanChangeBetweenDismissed(tokenScan: TokenScan): boolean;
47
53
  }
54
+ export {};
@@ -97,12 +97,12 @@ class TokenScanService {
97
97
  }
98
98
  });
99
99
  });
100
- this.chainsUIService.addChainUIEnabledChangedHandler((vaultId, chainIdentifiers) => {
100
+ this.chainsService.addChainRemovedHandler((chainInfo) => {
101
101
  (0, mobx_1.runInAction)(() => {
102
- let prevTokenScans = this.vaultToMap.get(vaultId);
103
- if (prevTokenScans) {
104
- prevTokenScans = prevTokenScans.filter((tokenScan) => {
105
- return !chainIdentifiers.includes(cosmos_1.ChainIdHelper.parse(tokenScan.chainId).identifier);
102
+ for (const [vaultId, tokenScans] of this.vaultToMap.entries()) {
103
+ let prevTokenScans = tokenScans;
104
+ prevTokenScans = prevTokenScans.filter((scan) => {
105
+ return scan.chainId !== chainInfo.chainId;
106
106
  });
107
107
  this.vaultToMap.set(vaultId, prevTokenScans);
108
108
  }
@@ -114,8 +114,9 @@ class TokenScanService {
114
114
  var _a;
115
115
  return ((_a = this.vaultToMap.get(vaultId)) !== null && _a !== void 0 ? _a : [])
116
116
  .filter((tokenScan) => {
117
- return (this.chainsService.hasChainInfo(tokenScan.chainId) ||
118
- this.chainsService.hasModularChainInfo(tokenScan.chainId));
117
+ return ((this.chainsService.hasChainInfo(tokenScan.chainId) ||
118
+ this.chainsService.hasModularChainInfo(tokenScan.chainId)) &&
119
+ !this.chainsUIService.isEnabled(vaultId, tokenScan.chainId));
119
120
  })
120
121
  .sort((a, b) => {
121
122
  // Sort by chain name
@@ -182,11 +183,14 @@ class TokenScanService {
182
183
  var _a;
183
184
  let prevTokenScans = (_a = this.vaultToMap.get(vaultId)) !== null && _a !== void 0 ? _a : [];
184
185
  const chainIdentifier = cosmos_1.ChainIdHelper.parse(tokenScan.chainId).identifier;
186
+ const prevTokenScan = prevTokenScans.find((scan) => {
187
+ return (cosmos_1.ChainIdHelper.parse(scan.chainId).identifier === chainIdentifier);
188
+ });
185
189
  prevTokenScans = prevTokenScans.filter((scan) => {
186
190
  const prevChainIdentifier = cosmos_1.ChainIdHelper.parse(scan.chainId).identifier;
187
191
  return chainIdentifier !== prevChainIdentifier;
188
192
  });
189
- prevTokenScans.push(tokenScan);
193
+ prevTokenScans.push(Object.assign(Object.assign({}, prevTokenScan), tokenScan));
190
194
  this.vaultToMap.set(vaultId, prevTokenScans);
191
195
  });
192
196
  }
@@ -225,22 +229,22 @@ class TokenScanService {
225
229
  let prevTokenScans = (_a = this.vaultToMap.get(vaultId)) !== null && _a !== void 0 ? _a : [];
226
230
  for (const tokenScan of tokenScans) {
227
231
  const chainIdentifier = cosmos_1.ChainIdHelper.parse(tokenScan.chainId).identifier;
232
+ const prevTokenScan = prevTokenScans.find((scan) => {
233
+ return (cosmos_1.ChainIdHelper.parse(scan.chainId).identifier === chainIdentifier);
234
+ });
228
235
  prevTokenScans = prevTokenScans.filter((scan) => {
229
236
  const prevChainIdentifier = cosmos_1.ChainIdHelper.parse(scan.chainId).identifier;
230
237
  return chainIdentifier !== prevChainIdentifier;
231
238
  });
232
- prevTokenScans.push(tokenScan);
239
+ prevTokenScans.push(Object.assign(Object.assign({}, prevTokenScan), tokenScan));
233
240
  }
234
- prevTokenScans = prevTokenScans.filter((scan) => {
235
- return !this.chainsUIService.isEnabled(vaultId, scan.chainId);
236
- });
237
241
  this.vaultToMap.set(vaultId, prevTokenScans);
238
242
  });
239
243
  }
240
244
  });
241
245
  }
242
246
  calculateTokenScan(vaultId, chainId) {
243
- var _a, _b, _c;
247
+ var _a, _b, _c, _d, _e;
244
248
  return __awaiter(this, void 0, void 0, function* () {
245
249
  if (this.keyRingService.keyRingStatus !== "unlocked") {
246
250
  return;
@@ -324,14 +328,23 @@ class TokenScanService {
324
328
  const assets = [];
325
329
  const balances = (_c = (_b = res.data) === null || _b === void 0 ? void 0 : _b.balances) !== null && _c !== void 0 ? _c : [];
326
330
  for (const bal of balances) {
327
- const currency = chainInfo.currencies.find((cur) => cur.coinMinimalDenom === bal.denom);
331
+ let currency = chainInfo.currencies.find((cur) => cur.coinMinimalDenom === bal.denom);
332
+ // IBC 토큰의 경우 일단 여기서 반환하고
333
+ // 사용하는 쪽에서 가공한다.
334
+ if (!currency && bal.denom.startsWith("ibc/")) {
335
+ currency = {
336
+ coinMinimalDenom: bal.denom,
337
+ coinDenom: bal.denom,
338
+ coinDecimals: (_e = (_d = chainInfo.stakeCurrency) === null || _d === void 0 ? void 0 : _d.coinDecimals) !== null && _e !== void 0 ? _e : 6,
339
+ };
340
+ }
328
341
  if (currency) {
329
342
  // validate
330
343
  if (typeof bal.amount !== "string") {
331
344
  throw new Error("Invalid amount");
332
345
  }
333
346
  const dec = new unit_1.Dec(bal.amount);
334
- if (dec.gt(new unit_1.Dec(0))) {
347
+ if (dec.gte(new unit_1.Dec(0))) {
335
348
  assets.push({
336
349
  currency,
337
350
  amount: bal.amount,
@@ -386,27 +399,25 @@ class TokenScanService {
386
399
  })
387
400
  .toBigInt()
388
401
  .toString(10);
389
- if (amount !== "0") {
390
- // XXX: Starknet의 경우는 여러 주소가 나올수가 없으므로
391
- // starknetHexAddress는 같은 값으로 나온다고 생각하고 처리한다.
392
- if (tokenScan.infos.length === 0) {
393
- tokenScan.infos.push({
394
- starknetHexAddress,
395
- assets: [
396
- {
397
- currency,
398
- amount,
399
- },
400
- ],
401
- });
402
- }
403
- else {
404
- if (tokenScan.infos[0].starknetHexAddress === starknetHexAddress) {
405
- tokenScan.infos[0].assets.push({
402
+ // XXX: Starknet의 경우는 여러 주소가 나올수가 없으므로
403
+ // starknetHexAddress는 같은 값으로 나온다고 생각하고 처리한다.
404
+ if (tokenScan.infos.length === 0) {
405
+ tokenScan.infos.push({
406
+ starknetHexAddress,
407
+ assets: [
408
+ {
406
409
  currency,
407
410
  amount,
408
- });
409
- }
411
+ },
412
+ ],
413
+ });
414
+ }
415
+ else {
416
+ if (tokenScan.infos[0].starknetHexAddress === starknetHexAddress) {
417
+ tokenScan.infos[0].assets.push({
418
+ currency,
419
+ amount,
420
+ });
410
421
  }
411
422
  }
412
423
  }
@@ -455,22 +466,10 @@ class TokenScanService {
455
466
  if (bitcoinScanInfos.length !== linkedBitcoinChains.length) {
456
467
  throw new Error("Invalid bitcoin scan info: length mismatch between linked bitcoin chains and bitcoin scan infos");
457
468
  }
458
- let hasNonZeroAmount = false;
459
- for (const bitcoinScanInfo of bitcoinScanInfos) {
460
- // 우선 main currency만 처리한다.
461
- if (bitcoinScanInfo.assets.length > 0 &&
462
- bitcoinScanInfo.assets[0].amount !== "0") {
463
- hasNonZeroAmount = true;
464
- break;
465
- }
466
- }
467
- // 하나라도 0이 아닌 값이 있으면 연결된 모든 체인에 대해 토큰 스캔 정보를 추가한다.
468
- if (hasNonZeroAmount) {
469
- tokenScan.infos.push(...bitcoinScanInfos);
470
- }
469
+ tokenScan.infos.push(...bitcoinScanInfos);
471
470
  }
472
471
  else {
473
- const bitcoinScanInfo = yield getBitcoinScanInfo(vaultId, chainId, false);
472
+ const bitcoinScanInfo = yield getBitcoinScanInfo(vaultId, chainId, true);
474
473
  if (bitcoinScanInfo) {
475
474
  tokenScan.infos.push(bitcoinScanInfo);
476
475
  }
@@ -482,6 +481,96 @@ class TokenScanService {
482
481
  return undefined;
483
482
  });
484
483
  }
484
+ dismissNewTokenFoundInHome(vaultId) {
485
+ var _a;
486
+ const prevTokenScans = (_a = this.vaultToMap.get(vaultId)) !== null && _a !== void 0 ? _a : [];
487
+ for (const prevTokenScan of prevTokenScans) {
488
+ prevTokenScan.dismissedInfos = prevTokenScan.infos;
489
+ }
490
+ this.vaultToMap.set(vaultId, prevTokenScans);
491
+ }
492
+ resetDismiss(vaultId) {
493
+ var _a;
494
+ const prevTokenScans = (_a = this.vaultToMap.get(vaultId)) !== null && _a !== void 0 ? _a : [];
495
+ for (const prevTokenScan of prevTokenScans) {
496
+ prevTokenScan.dismissedInfos = undefined;
497
+ }
498
+ this.vaultToMap.set(vaultId, prevTokenScans);
499
+ }
500
+ isMeaningfulTokenScanChangeBetweenDismissed(tokenScan) {
501
+ var _a;
502
+ if (!tokenScan.dismissedInfos || tokenScan.dismissedInfos.length === 0) {
503
+ return tokenScan.infos.length > 0;
504
+ }
505
+ const makeKey = (info) => {
506
+ var _a;
507
+ if (info.bech32Address)
508
+ return `bech32:${info.bech32Address}`;
509
+ if (info.ethereumHexAddress)
510
+ return `eth:${info.ethereumHexAddress}`;
511
+ if (info.starknetHexAddress)
512
+ return `stark:${info.starknetHexAddress}`;
513
+ if ((_a = info.bitcoinAddress) === null || _a === void 0 ? void 0 : _a.bech32Address)
514
+ return `btc:${info.bitcoinAddress.bech32Address}`;
515
+ if (info.coinType != null)
516
+ return `coin:${info.coinType}`;
517
+ return undefined;
518
+ };
519
+ const toBigIntSafe = (v) => {
520
+ try {
521
+ return BigInt(v);
522
+ }
523
+ catch (_a) {
524
+ return undefined;
525
+ }
526
+ };
527
+ const dismissedTokenInfosMap = new Map();
528
+ for (const info of (_a = tokenScan.dismissedInfos) !== null && _a !== void 0 ? _a : []) {
529
+ const key = makeKey(info);
530
+ if (key) {
531
+ dismissedTokenInfosMap.set(key, info);
532
+ }
533
+ }
534
+ for (const info of tokenScan.infos) {
535
+ const key = makeKey(info);
536
+ if (!key) {
537
+ continue;
538
+ }
539
+ const dismissedTokenInfo = dismissedTokenInfosMap.get(key);
540
+ if (!dismissedTokenInfo) {
541
+ if (info.assets.length > 0) {
542
+ return true;
543
+ }
544
+ continue;
545
+ }
546
+ const dismissedAssetMap = new Map();
547
+ for (const asset of dismissedTokenInfo.assets) {
548
+ dismissedAssetMap.set(asset.currency.coinMinimalDenom, asset);
549
+ }
550
+ for (const asset of info.assets) {
551
+ const prevAsset = dismissedAssetMap.get(asset.currency.coinMinimalDenom);
552
+ // 없던 토큰이 생긴경우
553
+ if (!prevAsset) {
554
+ return true;
555
+ }
556
+ const prevAmount = toBigIntSafe(prevAsset.amount);
557
+ const curAmount = toBigIntSafe(asset.amount);
558
+ if (prevAmount == null || curAmount == null) {
559
+ continue;
560
+ }
561
+ // 이전에 0이였다가 밸런스가 생긴경우.
562
+ if (prevAmount === BigInt(0) && curAmount > BigInt(0)) {
563
+ return true;
564
+ }
565
+ // 이전 밸런스에 배해서 10% 밸런스가 증가한 경우
566
+ if (prevAmount > BigInt(0) &&
567
+ curAmount * BigInt(10) >= prevAmount * BigInt(11)) {
568
+ return true;
569
+ }
570
+ }
571
+ }
572
+ return false;
573
+ }
485
574
  }
486
575
  __decorate([
487
576
  mobx_1.observable
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/token-scan/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/token-scan/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keplr-wallet/background",
3
- "version": "0.12.306",
3
+ "version": "0.12.307-rc.0",
4
4
  "main": "build/index.js",
5
5
  "author": "chainapsis",
6
6
  "license": "Apache-2.0",
@@ -32,17 +32,17 @@
32
32
  "@ethersproject/hash": "^5.7.0",
33
33
  "@ethersproject/transactions": "^5.7.0",
34
34
  "@ethersproject/wallet": "^5.7.0",
35
- "@keplr-wallet/chain-validator": "0.12.306",
36
- "@keplr-wallet/common": "0.12.306",
37
- "@keplr-wallet/cosmos": "0.12.306",
38
- "@keplr-wallet/crypto": "0.12.306",
39
- "@keplr-wallet/ledger-cosmos": "0.12.306",
40
- "@keplr-wallet/popup": "0.12.306",
41
- "@keplr-wallet/proto-types": "0.12.306",
42
- "@keplr-wallet/router": "0.12.306",
43
- "@keplr-wallet/simple-fetch": "0.12.306",
44
- "@keplr-wallet/types": "0.12.306",
45
- "@keplr-wallet/unit": "0.12.306",
35
+ "@keplr-wallet/chain-validator": "0.12.307-rc.0",
36
+ "@keplr-wallet/common": "0.12.307-rc.0",
37
+ "@keplr-wallet/cosmos": "0.12.307-rc.0",
38
+ "@keplr-wallet/crypto": "0.12.307-rc.0",
39
+ "@keplr-wallet/ledger-cosmos": "0.12.307-rc.0",
40
+ "@keplr-wallet/popup": "0.12.307-rc.0",
41
+ "@keplr-wallet/proto-types": "0.12.307-rc.0",
42
+ "@keplr-wallet/router": "0.12.307-rc.0",
43
+ "@keplr-wallet/simple-fetch": "0.12.307-rc.0",
44
+ "@keplr-wallet/types": "0.12.307-rc.0",
45
+ "@keplr-wallet/unit": "0.12.307-rc.0",
46
46
  "@ledgerhq/hw-app-eth": "6.42.8",
47
47
  "@ledgerhq/hw-app-starknet": "^3.0.1",
48
48
  "@ledgerhq/hw-transport": "^6.31.4",
@@ -69,5 +69,5 @@
69
69
  "mobx-utils": "^6",
70
70
  "starknet": "^7"
71
71
  },
72
- "gitHead": "5e5fa507a95fca5db80a65feefe73fb381de927b"
72
+ "gitHead": "b10567552e9f974c1a9e01c9950f01dd3298b0cc"
73
73
  }
@@ -5,7 +5,11 @@ import {
5
5
  KeplrError,
6
6
  Message,
7
7
  } from "@keplr-wallet/router";
8
- import { GetTokenScansMsg, RevalidateTokenScansMsg } from "./messages";
8
+ import {
9
+ DismissNewTokenFoundInMainMsg,
10
+ GetTokenScansMsg,
11
+ RevalidateTokenScansMsg,
12
+ } from "./messages";
9
13
  import { TokenScanService } from "./service";
10
14
 
11
15
  export const getHandler: (service: TokenScanService) => Handler = (
@@ -20,6 +24,11 @@ export const getHandler: (service: TokenScanService) => Handler = (
20
24
  env,
21
25
  msg as RevalidateTokenScansMsg
22
26
  );
27
+ case DismissNewTokenFoundInMainMsg:
28
+ return handleDismissNewTokenFoundInMainMsg(service)(
29
+ env,
30
+ msg as DismissNewTokenFoundInMainMsg
31
+ );
23
32
  default:
24
33
  throw new KeplrError("tx", 110, "Unknown msg type");
25
34
  }
@@ -30,7 +39,15 @@ const handleGetTokenScansMsg: (
30
39
  service: TokenScanService
31
40
  ) => InternalHandler<GetTokenScansMsg> = (service) => {
32
41
  return (_, msg) => {
33
- return service.getTokenScans(msg.vaultId);
42
+ const tokenScans = service.getTokenScans(msg.vaultId);
43
+
44
+ return {
45
+ vaultId: msg.vaultId,
46
+ tokenScans: tokenScans,
47
+ tokenScansWithoutDismissed: tokenScans.filter((scan) =>
48
+ service.isMeaningfulTokenScanChangeBetweenDismissed(scan)
49
+ ),
50
+ };
34
51
  };
35
52
  };
36
53
 
@@ -39,9 +56,33 @@ const handleRevalidateTokenScansMsg: (
39
56
  ) => InternalHandler<RevalidateTokenScansMsg> = (service) => {
40
57
  return async (_, msg) => {
41
58
  await service.scanAll(msg.vaultId);
59
+
60
+ const tokenScans = service.getTokenScans(msg.vaultId);
61
+
62
+ return {
63
+ vaultId: msg.vaultId,
64
+ tokenScans: tokenScans,
65
+ tokenScansWithoutDismissed: tokenScans.filter((scan) =>
66
+ service.isMeaningfulTokenScanChangeBetweenDismissed(scan)
67
+ ),
68
+ };
69
+ };
70
+ };
71
+
72
+ const handleDismissNewTokenFoundInMainMsg: (
73
+ service: TokenScanService
74
+ ) => InternalHandler<DismissNewTokenFoundInMainMsg> = (service) => {
75
+ return async (_, msg) => {
76
+ service.dismissNewTokenFoundInHome(msg.vaultId);
77
+
78
+ const tokenScans = service.getTokenScans(msg.vaultId);
79
+
42
80
  return {
43
81
  vaultId: msg.vaultId,
44
- tokenScans: service.getTokenScans(msg.vaultId),
82
+ tokenScans: tokenScans,
83
+ tokenScansWithoutDismissed: tokenScans.filter((scan) =>
84
+ service.isMeaningfulTokenScanChangeBetweenDismissed(scan)
85
+ ),
45
86
  };
46
87
  };
47
88
  };
@@ -1,5 +1,9 @@
1
1
  import { Router } from "@keplr-wallet/router";
2
- import { GetTokenScansMsg, RevalidateTokenScansMsg } from "./messages";
2
+ import {
3
+ DismissNewTokenFoundInMainMsg,
4
+ GetTokenScansMsg,
5
+ RevalidateTokenScansMsg,
6
+ } from "./messages";
3
7
  import { ROUTE } from "./constants";
4
8
  import { getHandler } from "./handler";
5
9
  import { TokenScanService } from "./service";
@@ -7,6 +11,7 @@ import { TokenScanService } from "./service";
7
11
  export function init(router: Router, service: TokenScanService): void {
8
12
  router.registerMessage(GetTokenScansMsg);
9
13
  router.registerMessage(RevalidateTokenScansMsg);
14
+ router.registerMessage(DismissNewTokenFoundInMainMsg);
10
15
 
11
16
  router.addHandler(ROUTE, getHandler(service));
12
17
  }
@@ -2,7 +2,11 @@ import { Message } from "@keplr-wallet/router";
2
2
  import { TokenScan } from "./service";
3
3
  import { ROUTE } from "./constants";
4
4
 
5
- export class GetTokenScansMsg extends Message<TokenScan[]> {
5
+ export class GetTokenScansMsg extends Message<{
6
+ vaultId: string;
7
+ tokenScans: TokenScan[];
8
+ tokenScansWithoutDismissed: TokenScan[];
9
+ }> {
6
10
  public static type() {
7
11
  return "get-token-scans";
8
12
  }
@@ -29,6 +33,7 @@ export class GetTokenScansMsg extends Message<TokenScan[]> {
29
33
  export class RevalidateTokenScansMsg extends Message<{
30
34
  vaultId: string;
31
35
  tokenScans: TokenScan[];
36
+ tokenScansWithoutDismissed: TokenScan[];
32
37
  }> {
33
38
  public static type() {
34
39
  return "revalidate-token-scans";
@@ -52,3 +57,31 @@ export class RevalidateTokenScansMsg extends Message<{
52
57
  return RevalidateTokenScansMsg.type();
53
58
  }
54
59
  }
60
+
61
+ export class DismissNewTokenFoundInMainMsg extends Message<{
62
+ vaultId: string;
63
+ tokenScans: TokenScan[];
64
+ tokenScansWithoutDismissed: TokenScan[];
65
+ }> {
66
+ public static type() {
67
+ return "dismiss-new-token-found-in-main";
68
+ }
69
+
70
+ constructor(public readonly vaultId: string) {
71
+ super();
72
+ }
73
+
74
+ validateBasic(): void {
75
+ if (!this.vaultId) {
76
+ throw new Error("Empty vault id");
77
+ }
78
+ }
79
+
80
+ route(): string {
81
+ return ROUTE;
82
+ }
83
+
84
+ type(): string {
85
+ return DismissNewTokenFoundInMainMsg.type();
86
+ }
87
+ }
@@ -14,23 +14,28 @@ import { CairoUint256 } from "starknet";
14
14
  import { KeyRingBitcoinService } from "../keyring-bitcoin";
15
15
  import { MessageRequester } from "@keplr-wallet/router";
16
16
 
17
+ type Asset = {
18
+ currency: AppCurrency;
19
+ amount: string;
20
+ };
21
+
22
+ export type TokenScanInfo = {
23
+ bech32Address?: string;
24
+ ethereumHexAddress?: string;
25
+ starknetHexAddress?: string;
26
+ bitcoinAddress?: {
27
+ bech32Address: string;
28
+ paymentType: SupportedPaymentType;
29
+ };
30
+ coinType?: number;
31
+ assets: Asset[];
32
+ };
33
+
17
34
  export type TokenScan = {
18
35
  chainId: string;
19
- infos: {
20
- bech32Address?: string;
21
- ethereumHexAddress?: string;
22
- starknetHexAddress?: string;
23
- bitcoinAddress?: {
24
- bech32Address: string;
25
- paymentType: SupportedPaymentType;
26
- };
27
- coinType?: number;
28
- assets: {
29
- currency: AppCurrency;
30
- amount: string;
31
- }[];
32
- }[];
36
+ infos: TokenScanInfo[];
33
37
  linkedChainKey?: string;
38
+ dismissedInfos?: TokenScanInfo[];
34
39
  };
35
40
 
36
41
  export class TokenScanService {
@@ -127,29 +132,28 @@ export class TokenScanService {
127
132
  });
128
133
  }
129
134
  );
130
- this.chainsUIService.addChainUIEnabledChangedHandler(
131
- (vaultId, chainIdentifiers) => {
132
- runInAction(() => {
133
- let prevTokenScans = this.vaultToMap.get(vaultId);
134
- if (prevTokenScans) {
135
- prevTokenScans = prevTokenScans.filter((tokenScan) => {
136
- return !chainIdentifiers.includes(
137
- ChainIdHelper.parse(tokenScan.chainId).identifier
138
- );
139
- });
140
- this.vaultToMap.set(vaultId, prevTokenScans);
141
- }
142
- });
143
- }
144
- );
135
+
136
+ this.chainsService.addChainRemovedHandler((chainInfo) => {
137
+ runInAction(() => {
138
+ for (const [vaultId, tokenScans] of this.vaultToMap.entries()) {
139
+ let prevTokenScans = tokenScans;
140
+ prevTokenScans = prevTokenScans.filter((scan) => {
141
+ return scan.chainId !== chainInfo.chainId;
142
+ });
143
+
144
+ this.vaultToMap.set(vaultId, prevTokenScans);
145
+ }
146
+ });
147
+ });
145
148
  }
146
149
 
147
150
  getTokenScans(vaultId: string): TokenScan[] {
148
151
  return (this.vaultToMap.get(vaultId) ?? [])
149
152
  .filter((tokenScan) => {
150
153
  return (
151
- this.chainsService.hasChainInfo(tokenScan.chainId) ||
152
- this.chainsService.hasModularChainInfo(tokenScan.chainId)
154
+ (this.chainsService.hasChainInfo(tokenScan.chainId) ||
155
+ this.chainsService.hasModularChainInfo(tokenScan.chainId)) &&
156
+ !this.chainsUIService.isEnabled(vaultId, tokenScan.chainId)
153
157
  );
154
158
  })
155
159
  .sort((a, b) => {
@@ -225,6 +229,13 @@ export class TokenScanService {
225
229
  const chainIdentifier = ChainIdHelper.parse(
226
230
  tokenScan.chainId
227
231
  ).identifier;
232
+
233
+ const prevTokenScan = prevTokenScans.find((scan) => {
234
+ return (
235
+ ChainIdHelper.parse(scan.chainId).identifier === chainIdentifier
236
+ );
237
+ });
238
+
228
239
  prevTokenScans = prevTokenScans.filter((scan) => {
229
240
  const prevChainIdentifier = ChainIdHelper.parse(
230
241
  scan.chainId
@@ -232,7 +243,10 @@ export class TokenScanService {
232
243
  return chainIdentifier !== prevChainIdentifier;
233
244
  });
234
245
 
235
- prevTokenScans.push(tokenScan);
246
+ prevTokenScans.push({
247
+ ...prevTokenScan,
248
+ ...tokenScan,
249
+ });
236
250
 
237
251
  this.vaultToMap.set(vaultId, prevTokenScans);
238
252
  });
@@ -288,6 +302,13 @@ export class TokenScanService {
288
302
  const chainIdentifier = ChainIdHelper.parse(
289
303
  tokenScan.chainId
290
304
  ).identifier;
305
+
306
+ const prevTokenScan = prevTokenScans.find((scan) => {
307
+ return (
308
+ ChainIdHelper.parse(scan.chainId).identifier === chainIdentifier
309
+ );
310
+ });
311
+
291
312
  prevTokenScans = prevTokenScans.filter((scan) => {
292
313
  const prevChainIdentifier = ChainIdHelper.parse(
293
314
  scan.chainId
@@ -295,13 +316,12 @@ export class TokenScanService {
295
316
  return chainIdentifier !== prevChainIdentifier;
296
317
  });
297
318
 
298
- prevTokenScans.push(tokenScan);
319
+ prevTokenScans.push({
320
+ ...prevTokenScan,
321
+ ...tokenScan,
322
+ });
299
323
  }
300
324
 
301
- prevTokenScans = prevTokenScans.filter((scan) => {
302
- return !this.chainsUIService.isEnabled(vaultId, scan.chainId);
303
- });
304
-
305
325
  this.vaultToMap.set(vaultId, prevTokenScans);
306
326
  });
307
327
  }
@@ -422,13 +442,24 @@ export class TokenScanService {
422
442
  );
423
443
 
424
444
  if (res.status === 200) {
425
- const assets: TokenScan["infos"][number]["assets"] = [];
445
+ const assets: TokenScanInfo["assets"] = [];
426
446
 
427
447
  const balances = res.data?.balances ?? [];
428
448
  for (const bal of balances) {
429
- const currency = chainInfo.currencies.find(
449
+ let currency = chainInfo.currencies.find(
430
450
  (cur) => cur.coinMinimalDenom === bal.denom
431
451
  );
452
+
453
+ // IBC 토큰의 경우 일단 여기서 반환하고
454
+ // 사용하는 쪽에서 가공한다.
455
+ if (!currency && bal.denom.startsWith("ibc/")) {
456
+ currency = {
457
+ coinMinimalDenom: bal.denom,
458
+ coinDenom: bal.denom,
459
+ coinDecimals: chainInfo.stakeCurrency?.coinDecimals ?? 6,
460
+ };
461
+ }
462
+
432
463
  if (currency) {
433
464
  // validate
434
465
  if (typeof bal.amount !== "string") {
@@ -436,7 +467,7 @@ export class TokenScanService {
436
467
  }
437
468
 
438
469
  const dec = new Dec(bal.amount);
439
- if (dec.gt(new Dec(0))) {
470
+ if (dec.gte(new Dec(0))) {
440
471
  assets.push({
441
472
  currency,
442
473
  amount: bal.amount,
@@ -502,28 +533,26 @@ export class TokenScanService {
502
533
  .toBigInt()
503
534
  .toString(10);
504
535
 
505
- if (amount !== "0") {
506
- // XXX: Starknet의 경우는 여러 주소가 나올수가 없으므로
507
- // starknetHexAddress는 같은 값으로 나온다고 생각하고 처리한다.
508
- if (tokenScan.infos.length === 0) {
509
- tokenScan.infos.push({
510
- starknetHexAddress,
511
- assets: [
512
- {
513
- currency,
514
- amount,
515
- },
516
- ],
517
- });
518
- } else {
519
- if (
520
- tokenScan.infos[0].starknetHexAddress === starknetHexAddress
521
- ) {
522
- tokenScan.infos[0].assets.push({
536
+ // XXX: Starknet의 경우는 여러 주소가 나올수가 없으므로
537
+ // starknetHexAddress는 같은 값으로 나온다고 생각하고 처리한다.
538
+ if (tokenScan.infos.length === 0) {
539
+ tokenScan.infos.push({
540
+ starknetHexAddress,
541
+ assets: [
542
+ {
523
543
  currency,
524
544
  amount,
525
- });
526
- }
545
+ },
546
+ ],
547
+ });
548
+ } else {
549
+ if (
550
+ tokenScan.infos[0].starknetHexAddress === starknetHexAddress
551
+ ) {
552
+ tokenScan.infos[0].assets.push({
553
+ currency,
554
+ amount,
555
+ });
527
556
  }
528
557
  }
529
558
  }
@@ -613,40 +642,125 @@ export class TokenScanService {
613
642
  );
614
643
  }
615
644
 
616
- let hasNonZeroAmount = false;
617
-
618
- for (const bitcoinScanInfo of bitcoinScanInfos) {
619
- // 우선 main currency만 처리한다.
620
- if (
621
- bitcoinScanInfo.assets.length > 0 &&
622
- bitcoinScanInfo.assets[0].amount !== "0"
623
- ) {
624
- hasNonZeroAmount = true;
625
- break;
626
- }
627
- }
628
-
629
- // 하나라도 0이 아닌 값이 있으면 연결된 모든 체인에 대해 토큰 스캔 정보를 추가한다.
630
- if (hasNonZeroAmount) {
631
- tokenScan.infos.push(...bitcoinScanInfos);
632
- }
645
+ tokenScan.infos.push(...bitcoinScanInfos);
633
646
  } else {
634
647
  const bitcoinScanInfo = await getBitcoinScanInfo(
635
648
  vaultId,
636
649
  chainId,
637
- false
650
+ true
638
651
  );
639
-
640
652
  if (bitcoinScanInfo) {
641
653
  tokenScan.infos.push(bitcoinScanInfo);
642
654
  }
643
655
  }
644
656
  }
645
-
646
657
  if (tokenScan.infos.length > 0) {
647
658
  return tokenScan;
648
659
  }
649
660
 
650
661
  return undefined;
651
662
  }
663
+
664
+ dismissNewTokenFoundInHome(vaultId: string) {
665
+ const prevTokenScans = this.vaultToMap.get(vaultId) ?? [];
666
+ for (const prevTokenScan of prevTokenScans) {
667
+ prevTokenScan.dismissedInfos = prevTokenScan.infos;
668
+ }
669
+ this.vaultToMap.set(vaultId, prevTokenScans);
670
+ }
671
+
672
+ resetDismiss(vaultId: string) {
673
+ const prevTokenScans = this.vaultToMap.get(vaultId) ?? [];
674
+ for (const prevTokenScan of prevTokenScans) {
675
+ prevTokenScan.dismissedInfos = undefined;
676
+ }
677
+ this.vaultToMap.set(vaultId, prevTokenScans);
678
+ }
679
+
680
+ public isMeaningfulTokenScanChangeBetweenDismissed(
681
+ tokenScan: TokenScan
682
+ ): boolean {
683
+ if (!tokenScan.dismissedInfos || tokenScan.dismissedInfos.length === 0) {
684
+ return tokenScan.infos.length > 0;
685
+ }
686
+
687
+ const makeKey = (info: TokenScanInfo): string | undefined => {
688
+ if (info.bech32Address) return `bech32:${info.bech32Address}`;
689
+ if (info.ethereumHexAddress) return `eth:${info.ethereumHexAddress}`;
690
+ if (info.starknetHexAddress) return `stark:${info.starknetHexAddress}`;
691
+ if (info.bitcoinAddress?.bech32Address)
692
+ return `btc:${info.bitcoinAddress.bech32Address}`;
693
+ if (info.coinType != null) return `coin:${info.coinType}`;
694
+ return undefined;
695
+ };
696
+
697
+ const toBigIntSafe = (v: string): bigint | undefined => {
698
+ try {
699
+ return BigInt(v);
700
+ } catch {
701
+ return undefined;
702
+ }
703
+ };
704
+
705
+ const dismissedTokenInfosMap = new Map<string, TokenScanInfo>();
706
+ for (const info of tokenScan.dismissedInfos ?? []) {
707
+ const key = makeKey(info);
708
+ if (key) {
709
+ dismissedTokenInfosMap.set(key, info);
710
+ }
711
+ }
712
+
713
+ for (const info of tokenScan.infos) {
714
+ const key = makeKey(info);
715
+ if (!key) {
716
+ continue;
717
+ }
718
+
719
+ const dismissedTokenInfo = dismissedTokenInfosMap.get(key);
720
+
721
+ if (!dismissedTokenInfo) {
722
+ if (info.assets.length > 0) {
723
+ return true;
724
+ }
725
+ continue;
726
+ }
727
+
728
+ const dismissedAssetMap = new Map<string, Asset>();
729
+ for (const asset of dismissedTokenInfo.assets) {
730
+ dismissedAssetMap.set(asset.currency.coinMinimalDenom, asset);
731
+ }
732
+
733
+ for (const asset of info.assets) {
734
+ const prevAsset = dismissedAssetMap.get(
735
+ asset.currency.coinMinimalDenom
736
+ );
737
+
738
+ // 없던 토큰이 생긴경우
739
+ if (!prevAsset) {
740
+ return true;
741
+ }
742
+
743
+ const prevAmount = toBigIntSafe(prevAsset.amount);
744
+ const curAmount = toBigIntSafe(asset.amount);
745
+ if (prevAmount == null || curAmount == null) {
746
+ continue;
747
+ }
748
+
749
+ // 이전에 0이였다가 밸런스가 생긴경우.
750
+ if (prevAmount === BigInt(0) && curAmount > BigInt(0)) {
751
+ return true;
752
+ }
753
+
754
+ // 이전 밸런스에 배해서 10% 밸런스가 증가한 경우
755
+ if (
756
+ prevAmount > BigInt(0) &&
757
+ curAmount * BigInt(10) >= prevAmount * BigInt(11)
758
+ ) {
759
+ return true;
760
+ }
761
+ }
762
+ }
763
+
764
+ return false;
765
+ }
652
766
  }