@keplr-wallet/stores-core 0.12.32-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.
Files changed (54) hide show
  1. package/.eslintignore +2 -0
  2. package/.prettierignore +2 -0
  3. package/LICENSE +209 -0
  4. package/build/core/index.d.ts +4 -0
  5. package/build/core/index.js +21 -0
  6. package/build/core/index.js.map +1 -0
  7. package/build/core/interaction/chain-suggest.d.ts +35 -0
  8. package/build/core/interaction/chain-suggest.js +106 -0
  9. package/build/core/interaction/chain-suggest.js.map +1 -0
  10. package/build/core/interaction/eth-sign.d.ts +25 -0
  11. package/build/core/interaction/eth-sign.js +60 -0
  12. package/build/core/interaction/eth-sign.js.map +1 -0
  13. package/build/core/interaction/icns.d.ts +32 -0
  14. package/build/core/interaction/icns.js +58 -0
  15. package/build/core/interaction/icns.js.map +1 -0
  16. package/build/core/interaction/index.d.ts +6 -0
  17. package/build/core/interaction/index.js +23 -0
  18. package/build/core/interaction/index.js.map +1 -0
  19. package/build/core/interaction/interaction.d.ts +64 -0
  20. package/build/core/interaction/interaction.js +232 -0
  21. package/build/core/interaction/interaction.js.map +1 -0
  22. package/build/core/interaction/permission.d.ts +22 -0
  23. package/build/core/interaction/permission.js +108 -0
  24. package/build/core/interaction/permission.js.map +1 -0
  25. package/build/core/interaction/sign.d.ts +49 -0
  26. package/build/core/interaction/sign.js +78 -0
  27. package/build/core/interaction/sign.js.map +1 -0
  28. package/build/core/keyring.d.ts +132 -0
  29. package/build/core/keyring.js +278 -0
  30. package/build/core/keyring.js.map +1 -0
  31. package/build/core/permission-manager.d.ts +15 -0
  32. package/build/core/permission-manager.js +122 -0
  33. package/build/core/permission-manager.js.map +1 -0
  34. package/build/core/tokens.d.ts +39 -0
  35. package/build/core/tokens.js +225 -0
  36. package/build/core/tokens.js.map +1 -0
  37. package/build/index.d.ts +1 -0
  38. package/build/index.js +18 -0
  39. package/build/index.js.map +1 -0
  40. package/jest.config.js +5 -0
  41. package/package.json +31 -0
  42. package/src/core/index.ts +4 -0
  43. package/src/core/interaction/chain-suggest.ts +136 -0
  44. package/src/core/interaction/eth-sign.ts +71 -0
  45. package/src/core/interaction/icns.ts +68 -0
  46. package/src/core/interaction/index.ts +6 -0
  47. package/src/core/interaction/interaction.ts +290 -0
  48. package/src/core/interaction/permission.ts +121 -0
  49. package/src/core/interaction/sign.ts +124 -0
  50. package/src/core/keyring.ts +354 -0
  51. package/src/core/permission-manager.ts +114 -0
  52. package/src/core/tokens.ts +275 -0
  53. package/src/index.ts +1 -0
  54. package/tsconfig.json +12 -0
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.TokensStore = void 0;
19
+ const router_1 = require("@keplr-wallet/router");
20
+ const background_1 = require("@keplr-wallet/background");
21
+ const mobx_1 = require("mobx");
22
+ const cosmos_1 = require("@keplr-wallet/cosmos");
23
+ const buffer_1 = require("buffer/");
24
+ class TokensStore {
25
+ constructor(eventListener, requester, chainStore, accountStore, keyRingStore, interactionStore) {
26
+ this.eventListener = eventListener;
27
+ this.requester = requester;
28
+ this.chainStore = chainStore;
29
+ this.accountStore = accountStore;
30
+ this.keyRingStore = keyRingStore;
31
+ this.interactionStore = interactionStore;
32
+ this._isInitialized = false;
33
+ this.tokenMap = new Map();
34
+ // No need to be observable.
35
+ this.prevTokenMap = new Map();
36
+ (0, mobx_1.makeObservable)(this);
37
+ this.init();
38
+ }
39
+ init() {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ yield this.refreshTokens();
42
+ // If key store in the keplr extension is changed, this event will be dispatched.
43
+ // This is needed becuase the token such as secret20 exists according to the account.
44
+ this.eventListener.addEventListener("keplr_keystorechange", () => {
45
+ this.clearTokensFromChainInfos();
46
+ this.refreshTokens();
47
+ });
48
+ (0, mobx_1.autorun)(() => {
49
+ // Account가 변경되었을때, 체인 정보가 변경되었을때 등에 반응해야하기 때문에 autorun 안에 넣는다.
50
+ this.updateChainInfos();
51
+ });
52
+ (0, mobx_1.runInAction)(() => {
53
+ this._isInitialized = true;
54
+ });
55
+ });
56
+ }
57
+ refreshTokens() {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const msg = new background_1.GetAllTokenInfosMsg();
60
+ const tokens = yield this.requester.sendMessage(router_1.BACKGROUND_PORT, msg);
61
+ (0, mobx_1.runInAction)(() => {
62
+ const map = new Map();
63
+ for (const [key, value] of Object.entries(tokens)) {
64
+ if (value) {
65
+ map.set(key, value);
66
+ }
67
+ }
68
+ this.tokenMap = map;
69
+ });
70
+ });
71
+ }
72
+ clearTokensFromChainInfos() {
73
+ var _a;
74
+ const chainInfos = this.chainStore.chainInfos;
75
+ for (const chainInfo of chainInfos) {
76
+ const chainIdentifier = cosmos_1.ChainIdHelper.parse(chainInfo.chainId);
77
+ // Tokens should be changed whenever the account changed.
78
+ // But, the added currencies are not removed automatically.
79
+ // So, we should remove the prev token currencies from the chain info.
80
+ const prevTokens = (_a = this.prevTokenMap.get(chainIdentifier.identifier)) !== null && _a !== void 0 ? _a : [];
81
+ chainInfo.removeCurrencies(...prevTokens.map((token) => token.currency.coinMinimalDenom));
82
+ }
83
+ }
84
+ updateChainInfos() {
85
+ var _a;
86
+ const chainInfos = this.chainStore.chainInfos;
87
+ for (const chainInfo of chainInfos) {
88
+ const chainIdentifier = cosmos_1.ChainIdHelper.parse(chainInfo.chainId);
89
+ const tokens = (_a = this.tokenMap.get(chainIdentifier.identifier)) !== null && _a !== void 0 ? _a : [];
90
+ const adds = [];
91
+ for (const token of tokens) {
92
+ if (!token.associatedAccountAddress) {
93
+ adds.push(token.currency);
94
+ }
95
+ else if (this.keyRingStore.status === "unlocked" &&
96
+ this.accountStore.getAccount(chainInfo.chainId).bech32Address) {
97
+ if (buffer_1.Buffer.from(cosmos_1.Bech32Address.fromBech32(this.accountStore.getAccount(chainInfo.chainId).bech32Address).address).toString("hex") === token.associatedAccountAddress) {
98
+ adds.push(token.currency);
99
+ }
100
+ }
101
+ }
102
+ chainInfo.addCurrencies(...adds);
103
+ }
104
+ this.prevTokenMap = this.tokenMap;
105
+ }
106
+ get isInitialized() {
107
+ return this._isInitialized;
108
+ }
109
+ waitUntilInitialized() {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ if (this.isInitialized) {
112
+ return;
113
+ }
114
+ return new Promise((resolve) => {
115
+ const disposal = (0, mobx_1.autorun)(() => {
116
+ if (this.isInitialized) {
117
+ resolve();
118
+ if (disposal) {
119
+ disposal();
120
+ }
121
+ }
122
+ });
123
+ });
124
+ });
125
+ }
126
+ getTokens(chainId) {
127
+ var _a;
128
+ const bech32Address = this.accountStore.getAccount(chainId).bech32Address;
129
+ const chainInfo = this.chainStore.getChain(chainId);
130
+ const associatedAccountAddress = bech32Address
131
+ ? buffer_1.Buffer.from(cosmos_1.Bech32Address.fromBech32(bech32Address, chainInfo.bech32Config.bech32PrefixAccAddr).address).toString("hex")
132
+ : "";
133
+ const tokens = (_a = this.tokenMap.get(cosmos_1.ChainIdHelper.parse(chainId).identifier)) !== null && _a !== void 0 ? _a : [];
134
+ return tokens.filter((token) => {
135
+ if (token.associatedAccountAddress &&
136
+ token.associatedAccountAddress !== associatedAccountAddress) {
137
+ return false;
138
+ }
139
+ return true;
140
+ });
141
+ }
142
+ addToken(chainId, currency) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ const bech32Address = this.accountStore.getAccount(chainId).bech32Address;
145
+ if (!bech32Address) {
146
+ throw new Error("Account not initialized");
147
+ }
148
+ const chainInfo = this.chainStore.getChain(chainId);
149
+ const associatedAccountAddress = buffer_1.Buffer.from(cosmos_1.Bech32Address.fromBech32(bech32Address, chainInfo.bech32Config.bech32PrefixAccAddr).address).toString("hex");
150
+ const msg = new background_1.AddTokenMsg(chainId, associatedAccountAddress, currency);
151
+ const res = yield this.requester.sendMessage(router_1.BACKGROUND_PORT, msg);
152
+ (0, mobx_1.runInAction)(() => {
153
+ const map = new Map();
154
+ for (const [key, value] of Object.entries(res)) {
155
+ if (value) {
156
+ map.set(key, value);
157
+ }
158
+ }
159
+ this.tokenMap = map;
160
+ });
161
+ });
162
+ }
163
+ removeToken(chainId, tokenInfo) {
164
+ var _a;
165
+ return __awaiter(this, void 0, void 0, function* () {
166
+ const contractAddress = (() => {
167
+ if ("contractAddress" in tokenInfo.currency) {
168
+ return tokenInfo.currency.contractAddress;
169
+ }
170
+ throw new Error("Token info is not for contract");
171
+ })();
172
+ const msg = new background_1.RemoveTokenMsg(chainId, (_a = tokenInfo.associatedAccountAddress) !== null && _a !== void 0 ? _a : "", contractAddress);
173
+ const res = yield this.requester.sendMessage(router_1.BACKGROUND_PORT, msg);
174
+ (0, mobx_1.runInAction)(() => {
175
+ // Remove 이후에는 지워진 토큰에 대한 싱크를 맞추기 위해서 clearTokensFromChainInfos를 호출한다.
176
+ // 그냥 다 지우고 다시 다 설정하는 방식임.
177
+ this.clearTokensFromChainInfos();
178
+ const map = new Map();
179
+ for (const [key, value] of Object.entries(res)) {
180
+ if (value) {
181
+ map.set(key, value);
182
+ }
183
+ }
184
+ this.tokenMap = map;
185
+ });
186
+ });
187
+ }
188
+ get waitingSuggestedToken() {
189
+ const datas = this.interactionStore.getAllData("suggest-token-cw20");
190
+ if (datas.length > 0) {
191
+ return datas[0];
192
+ }
193
+ }
194
+ approveSuggestedTokenWithProceedNext(id, appCurrency, afterFn) {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ const d = this.interactionStore.getData(id);
197
+ if (!d) {
198
+ return;
199
+ }
200
+ yield this.interactionStore.approveWithProceedNext(id, appCurrency, afterFn);
201
+ this.refreshTokens();
202
+ });
203
+ }
204
+ rejectSuggestedToken(id, afterFn) {
205
+ return __awaiter(this, void 0, void 0, function* () {
206
+ yield this.interactionStore.rejectWithProceedNext(id, afterFn);
207
+ });
208
+ }
209
+ rejectAllSuggestedTokens() {
210
+ return __awaiter(this, void 0, void 0, function* () {
211
+ yield this.interactionStore.rejectAll("suggest-token-cw20");
212
+ });
213
+ }
214
+ }
215
+ __decorate([
216
+ mobx_1.observable
217
+ ], TokensStore.prototype, "_isInitialized", void 0);
218
+ __decorate([
219
+ mobx_1.observable.ref
220
+ ], TokensStore.prototype, "tokenMap", void 0);
221
+ __decorate([
222
+ mobx_1.action
223
+ ], TokensStore.prototype, "clearTokensFromChainInfos", null);
224
+ exports.TokensStore = TokensStore;
225
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./core";
package/build/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./core"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
package/jest.config.js ADDED
@@ -0,0 +1,5 @@
1
+ module.exports = {
2
+ preset: "ts-jest",
3
+ testEnvironment: "node",
4
+ testMatch: ["**/src/**/?(*.)+(spec|test).[jt]s?(x)"],
5
+ };
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@keplr-wallet/stores-core",
3
+ "version": "0.12.32-rc.0",
4
+ "main": "build/index.js",
5
+ "author": "chainapsis",
6
+ "license": "Apache-2.0",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "scripts": {
11
+ "clean": "rm -rf node_modules; rm -rf build",
12
+ "build": "tsc",
13
+ "dev": "tsc -w",
14
+ "test": "jest --passWithNoTests",
15
+ "lint-test": "eslint \"src/**/*\" && prettier --check \"src/**/*\"",
16
+ "lint-fix": "eslint --fix \"src/**/*\" && prettier --write \"src/**/*\""
17
+ },
18
+ "dependencies": {
19
+ "@keplr-wallet/background": "0.12.32-rc.0",
20
+ "@keplr-wallet/common": "0.12.32-rc.0",
21
+ "@keplr-wallet/cosmos": "0.12.32-rc.0",
22
+ "@keplr-wallet/router": "0.12.32-rc.0",
23
+ "@keplr-wallet/simple-fetch": "0.12.32-rc.0",
24
+ "@keplr-wallet/stores": "0.12.32-rc.0",
25
+ "@keplr-wallet/types": "0.12.32-rc.0",
26
+ "buffer": "^6.0.3",
27
+ "mobx": "^6.1.7",
28
+ "mobx-utils": "^6.0.3"
29
+ },
30
+ "gitHead": "91d09e1e10ada236fcc76f3395e1d1f7b139422a"
31
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./interaction";
2
+ export * from "./keyring";
3
+ export * from "./tokens";
4
+ export * from "./permission-manager";
@@ -0,0 +1,136 @@
1
+ import { InteractionStore } from "./interaction";
2
+ import { ChainInfo } from "@keplr-wallet/types";
3
+ import {
4
+ ChainInfoWithSuggestedOptions,
5
+ SuggestChainInfoMsg,
6
+ } from "@keplr-wallet/background";
7
+ import { flow, makeObservable, observable } from "mobx";
8
+ import { ChainIdHelper } from "@keplr-wallet/cosmos";
9
+ import { toGenerator } from "@keplr-wallet/common";
10
+ import { simpleFetch } from "@keplr-wallet/simple-fetch";
11
+
12
+ export class ChainSuggestStore {
13
+ @observable.shallow
14
+ protected communityChainInfo: Map<
15
+ string,
16
+ {
17
+ chainInfo: ChainInfo | undefined;
18
+ isLoading: boolean;
19
+ }
20
+ > = new Map();
21
+
22
+ constructor(
23
+ protected readonly interactionStore: InteractionStore,
24
+ protected readonly communityChainInfoRepo: {
25
+ readonly organizationName: string;
26
+ readonly repoName: string;
27
+ readonly branchName: string;
28
+ }
29
+ ) {
30
+ makeObservable(this);
31
+ }
32
+
33
+ get waitingSuggestedChainInfo() {
34
+ const data = this.interactionStore.getAllData<{
35
+ chainInfo: ChainInfo;
36
+ origin: string;
37
+ }>(SuggestChainInfoMsg.type());
38
+
39
+ if (data.length > 0) {
40
+ return data[0];
41
+ }
42
+ }
43
+
44
+ get communityChainInfoRepoUrl(): string {
45
+ return `https://github.com/${this.communityChainInfoRepo.organizationName}/${this.communityChainInfoRepo.repoName}`;
46
+ }
47
+
48
+ getCommunityChainInfoUrl(chainId: string): string {
49
+ const chainIdHelper = ChainIdHelper.parse(chainId);
50
+ return `${this.communityChainInfoRepoUrl}/blob/${this.communityChainInfoRepo.branchName}/cosmos/${chainIdHelper.identifier}.json`;
51
+ }
52
+
53
+ getCommunityChainInfo(chainId: string): {
54
+ chainInfo: ChainInfo | undefined;
55
+ isLoading: boolean;
56
+ } {
57
+ const chainIdentifier = ChainIdHelper.parse(chainId).identifier;
58
+ if (!this.communityChainInfo.has(chainIdentifier)) {
59
+ this.fetchCommunityChainInfo(chainId);
60
+ }
61
+
62
+ return this.communityChainInfo.get(chainIdentifier)!;
63
+ }
64
+
65
+ @flow
66
+ protected *fetchCommunityChainInfo(chainId: string) {
67
+ const chainIdentifier = ChainIdHelper.parse(chainId).identifier;
68
+ const communityChainInfo = this.communityChainInfo.get(chainIdentifier);
69
+ if (communityChainInfo) {
70
+ return;
71
+ }
72
+
73
+ this.communityChainInfo.set(chainIdentifier, {
74
+ isLoading: true,
75
+ chainInfo: undefined,
76
+ });
77
+
78
+ try {
79
+ const response = yield* toGenerator(
80
+ simpleFetch<ChainInfo>(
81
+ `https://raw.githubusercontent.com/${this.communityChainInfoRepo.organizationName}/${this.communityChainInfoRepo.repoName}/${this.communityChainInfoRepo.branchName}`,
82
+ `/cosmos/${chainIdentifier}.json`
83
+ )
84
+ );
85
+
86
+ if (
87
+ ChainIdHelper.parse(response.data.chainId).identifier !==
88
+ chainIdentifier
89
+ ) {
90
+ throw new Error(
91
+ `Invalid chain identifier: (expected: ${chainIdentifier}, actual: ${
92
+ ChainIdHelper.parse(response.data.chainId).identifier
93
+ })`
94
+ );
95
+ }
96
+
97
+ this.communityChainInfo.set(chainIdentifier, {
98
+ isLoading: false,
99
+ chainInfo: response.data,
100
+ });
101
+ } catch (e) {
102
+ console.log(e);
103
+ this.communityChainInfo.set(chainIdentifier, {
104
+ isLoading: false,
105
+ chainInfo: undefined,
106
+ });
107
+ }
108
+ }
109
+
110
+ async approveWithProceedNext(
111
+ id: string,
112
+ chainInfo: ChainInfoWithSuggestedOptions,
113
+ afterFn: (proceedNext: boolean) => void | Promise<void>
114
+ ) {
115
+ await this.interactionStore.approveWithProceedNextV2(
116
+ id,
117
+ chainInfo,
118
+ afterFn
119
+ );
120
+ }
121
+
122
+ async rejectWithProceedNext(
123
+ id: string,
124
+ afterFn: (proceedNext: boolean) => void | Promise<void>
125
+ ) {
126
+ await this.interactionStore.rejectWithProceedNext(id, afterFn);
127
+ }
128
+
129
+ async rejectAll() {
130
+ await this.interactionStore.rejectAll(SuggestChainInfoMsg.type());
131
+ }
132
+
133
+ isObsoleteInteraction(id: string | undefined): boolean {
134
+ return this.interactionStore.isObsoleteInteraction(id);
135
+ }
136
+ }
@@ -0,0 +1,71 @@
1
+ import { InteractionStore } from "./interaction";
2
+ import { computed, makeObservable } from "mobx";
3
+ import { EthSignType } from "@keplr-wallet/types";
4
+ import { PlainObject } from "@keplr-wallet/background";
5
+
6
+ export type SignEthereumInteractionData = {
7
+ origin: string;
8
+ chainId: string;
9
+ signer: string;
10
+ pubKey: Uint8Array;
11
+ message: Uint8Array;
12
+ signType: EthSignType;
13
+ keyType: string;
14
+ keyInsensitive: PlainObject;
15
+ };
16
+
17
+ export class SignEthereumInteractionStore {
18
+ constructor(protected readonly interactionStore: InteractionStore) {
19
+ makeObservable(this);
20
+ }
21
+
22
+ get waitingDatas() {
23
+ return this.interactionStore.getAllData<SignEthereumInteractionData>(
24
+ "request-sign-ethereum"
25
+ );
26
+ }
27
+
28
+ @computed
29
+ get waitingData() {
30
+ const datas = this.waitingDatas;
31
+
32
+ if (datas.length === 0) {
33
+ return undefined;
34
+ }
35
+
36
+ return datas[0];
37
+ }
38
+
39
+ async approveWithProceedNext(
40
+ id: string,
41
+ signature: Uint8Array | undefined,
42
+ afterFn: (proceedNext: boolean) => void | Promise<void>,
43
+ options: {
44
+ preDelay?: number;
45
+ } = {}
46
+ ) {
47
+ await this.interactionStore.approveWithProceedNextV2(
48
+ id,
49
+ {
50
+ signature,
51
+ },
52
+ afterFn,
53
+ options
54
+ );
55
+ }
56
+
57
+ async rejectWithProceedNext(
58
+ id: string,
59
+ afterFn: (proceedNext: boolean) => void | Promise<void>
60
+ ) {
61
+ await this.interactionStore.rejectWithProceedNext(id, afterFn);
62
+ }
63
+
64
+ async rejectAll() {
65
+ await this.interactionStore.rejectAll("request-sign-cosmos");
66
+ }
67
+
68
+ isObsoleteInteraction(id: string | undefined): boolean {
69
+ return this.interactionStore.isObsoleteInteraction(id);
70
+ }
71
+ }
@@ -0,0 +1,68 @@
1
+ import { InteractionStore } from "./interaction";
2
+ import { computed, makeObservable } from "mobx";
3
+ import { InteractionWaitingData } from "@keplr-wallet/background";
4
+
5
+ export class ICNSInteractionStore {
6
+ constructor(protected readonly interactionStore: InteractionStore) {
7
+ makeObservable(this);
8
+ }
9
+
10
+ get waitingDatas() {
11
+ return this.interactionStore.getAllData<{
12
+ chainId: string;
13
+ owner: string;
14
+ username: string;
15
+ origin: string;
16
+ accountInfos: {
17
+ chainId: string;
18
+ bech32Prefix: string;
19
+ bech32Address: string;
20
+ }[];
21
+ }>("request-sign-icns-adr36");
22
+ }
23
+
24
+ @computed
25
+ get waitingData():
26
+ | InteractionWaitingData<{
27
+ chainId: string;
28
+ owner: string;
29
+ username: string;
30
+ origin: string;
31
+ accountInfos: {
32
+ chainId: string;
33
+ bech32Prefix: string;
34
+ bech32Address: string;
35
+ }[];
36
+ }>
37
+ | undefined {
38
+ const datas = this.waitingDatas;
39
+
40
+ if (datas.length === 0) {
41
+ return undefined;
42
+ }
43
+
44
+ return datas[0];
45
+ }
46
+
47
+ async approveWithProceedNext(
48
+ id: string,
49
+ afterFn: (proceedNext: boolean) => void | Promise<void>
50
+ ) {
51
+ await this.interactionStore.approveWithProceedNextV2(id, {}, afterFn);
52
+ }
53
+
54
+ async rejectWithProceedNext(
55
+ id: string,
56
+ afterFn: (proceedNext: boolean) => void | Promise<void>
57
+ ) {
58
+ await this.interactionStore.rejectWithProceedNextV2(id, afterFn);
59
+ }
60
+
61
+ async rejectAll() {
62
+ await this.interactionStore.rejectAll("request-sign-icns-adr36");
63
+ }
64
+
65
+ isObsoleteInteraction(id: string | undefined): boolean {
66
+ return this.interactionStore.isObsoleteInteraction(id);
67
+ }
68
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./interaction";
2
+ export * from "./permission";
3
+ export * from "./sign";
4
+ export * from "./chain-suggest";
5
+ export * from "./icns";
6
+ export * from "./eth-sign";