@keplr-wallet/background 0.10.23 → 0.10.24

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 (49) hide show
  1. package/build/index.d.ts +1 -0
  2. package/build/index.js +9 -0
  3. package/build/index.js.map +1 -1
  4. package/build/phishing-list/constants.d.ts +1 -0
  5. package/build/phishing-list/constants.js +5 -0
  6. package/build/phishing-list/constants.js.map +1 -0
  7. package/build/phishing-list/handler.d.ts +3 -0
  8. package/build/phishing-list/handler.js +19 -0
  9. package/build/phishing-list/handler.js.map +1 -0
  10. package/build/phishing-list/index.d.ts +2 -0
  11. package/build/phishing-list/index.js +15 -0
  12. package/build/phishing-list/index.js.map +1 -0
  13. package/build/phishing-list/init.d.ts +3 -0
  14. package/build/phishing-list/init.js +12 -0
  15. package/build/phishing-list/init.js.map +1 -0
  16. package/build/phishing-list/internal.d.ts +2 -0
  17. package/build/phishing-list/internal.js +15 -0
  18. package/build/phishing-list/internal.js.map +1 -0
  19. package/build/phishing-list/messages.d.ts +9 -0
  20. package/build/phishing-list/messages.js +30 -0
  21. package/build/phishing-list/messages.js.map +1 -0
  22. package/build/phishing-list/messages.spec.d.ts +1 -0
  23. package/build/phishing-list/messages.spec.js +102 -0
  24. package/build/phishing-list/messages.spec.js.map +1 -0
  25. package/build/phishing-list/service.d.ts +22 -0
  26. package/build/phishing-list/service.js +86 -0
  27. package/build/phishing-list/service.js.map +1 -0
  28. package/build/phishing-list/service.spec.d.ts +1 -0
  29. package/build/phishing-list/service.spec.js +302 -0
  30. package/build/phishing-list/service.spec.js.map +1 -0
  31. package/build/phishing-list/utils.d.ts +1 -0
  32. package/build/phishing-list/utils.js +27 -0
  33. package/build/phishing-list/utils.js.map +1 -0
  34. package/build/phishing-list/utils.spec.d.ts +1 -0
  35. package/build/phishing-list/utils.spec.js +142 -0
  36. package/build/phishing-list/utils.spec.js.map +1 -0
  37. package/package.json +11 -11
  38. package/src/index.ts +11 -0
  39. package/src/phishing-list/constants.ts +1 -0
  40. package/src/phishing-list/handler.ts +27 -0
  41. package/src/phishing-list/index.ts +2 -0
  42. package/src/phishing-list/init.ts +11 -0
  43. package/src/phishing-list/internal.ts +2 -0
  44. package/src/phishing-list/messages.spec.ts +104 -0
  45. package/src/phishing-list/messages.ts +32 -0
  46. package/src/phishing-list/service.spec.ts +367 -0
  47. package/src/phishing-list/service.ts +88 -0
  48. package/src/phishing-list/utils.spec.ts +144 -0
  49. package/src/phishing-list/utils.ts +27 -0
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const service_1 = require("./service");
16
+ const http_1 = __importDefault(require("http"));
17
+ const phishings = [
18
+ "keplr-vvallet-app.online",
19
+ "xn--kplr-vva.com",
20
+ "keplr-vvallet.tech",
21
+ "app-keplr-vvallet.online",
22
+ "keplr-vvallet-app.space",
23
+ "keplr-vvallet-app.host",
24
+ "app-keplr-vvallet.tech",
25
+ "app-keplr-vvallet.host",
26
+ ];
27
+ const createMockServer = () => {
28
+ let queryCount = 0;
29
+ const server = http_1.default.createServer((req, resp) => {
30
+ queryCount++;
31
+ // Most desired case
32
+ if (req.url === "/list1") {
33
+ resp.writeHead(200);
34
+ resp.end(phishings.join("\n"));
35
+ return;
36
+ }
37
+ // If some strange cases exist
38
+ if (req.url === "/list2") {
39
+ resp.writeHead(200);
40
+ let str = "";
41
+ for (let i = 0; i < phishings.length; i++) {
42
+ let phishing = phishings[i];
43
+ switch (i) {
44
+ case 0:
45
+ phishing = phishing + "\n";
46
+ break;
47
+ case 1:
48
+ // Windows line break
49
+ phishing = phishing + "\r\n";
50
+ break;
51
+ case 2:
52
+ phishing = phishing + ";";
53
+ break;
54
+ case 3:
55
+ phishing = phishing + ",";
56
+ break;
57
+ case 4:
58
+ phishing = phishing + " ; ";
59
+ break;
60
+ case 5:
61
+ phishing = phishing + " , ";
62
+ break;
63
+ case 6:
64
+ phishing = "third-domain." + phishing;
65
+ break;
66
+ default:
67
+ phishing = ` ${phishing} `;
68
+ }
69
+ str += phishing;
70
+ }
71
+ resp.end(str);
72
+ return;
73
+ }
74
+ // Even if an invalid endpoint exists, only that endpoint should be ignored and proceeded.
75
+ // When second fetch, add other domain to test fetching interval.
76
+ if (req.url === "/list3") {
77
+ resp.writeHead(200);
78
+ let str = "";
79
+ for (let i = 0; i < phishings.length; i++) {
80
+ let phishing = phishings[i];
81
+ switch (i) {
82
+ case 0:
83
+ phishing = phishing + "\n";
84
+ break;
85
+ case 1:
86
+ phishing = phishing + ".\n";
87
+ break;
88
+ case 2:
89
+ phishing = "." + phishing + "\r\n";
90
+ break;
91
+ case 3:
92
+ phishing = "invalid;.." + phishing + "..;";
93
+ break;
94
+ case 4:
95
+ phishing = phishing + "/,";
96
+ break;
97
+ case 5:
98
+ phishing = phishing + "?test\n";
99
+ break;
100
+ case 6:
101
+ phishing = "third-domain." + phishing + "\n";
102
+ break;
103
+ default:
104
+ phishing = ` ${phishing} `;
105
+ }
106
+ str += phishing;
107
+ }
108
+ str += ";invalid";
109
+ if (queryCount === 2) {
110
+ str += ";added.domain";
111
+ }
112
+ resp.end(str);
113
+ return;
114
+ }
115
+ if (req.url === "/test-retry") {
116
+ if (queryCount % 3 === 0) {
117
+ resp.writeHead(400);
118
+ resp.end();
119
+ return;
120
+ }
121
+ resp.writeHead(200);
122
+ resp.end(phishings.slice(0, queryCount).join("\n"));
123
+ return;
124
+ }
125
+ throw new Error("invalid url");
126
+ });
127
+ server.listen();
128
+ const address = server.address();
129
+ if (!address || typeof address === "string") {
130
+ throw new Error("Failed to get address for server");
131
+ }
132
+ const port = address.port;
133
+ return {
134
+ port,
135
+ closeServer: () => {
136
+ server.close();
137
+ },
138
+ getQueryCount: () => {
139
+ return queryCount;
140
+ },
141
+ };
142
+ };
143
+ describe("Test phishing list service", () => {
144
+ let eachService;
145
+ let port = -1;
146
+ let closeServer;
147
+ let getQueryCount;
148
+ beforeEach(() => {
149
+ const server = createMockServer();
150
+ port = server.port;
151
+ closeServer = server.closeServer;
152
+ getQueryCount = server.getQueryCount;
153
+ });
154
+ afterEach(() => {
155
+ if (eachService) {
156
+ eachService.stop();
157
+ eachService = undefined;
158
+ }
159
+ if (closeServer) {
160
+ closeServer();
161
+ closeServer = undefined;
162
+ }
163
+ });
164
+ const waitServiceInit = (service) => {
165
+ return new Promise((resolve) => {
166
+ if (service.hasInited) {
167
+ resolve();
168
+ return;
169
+ }
170
+ const intervalId = setInterval(() => {
171
+ if (service.hasInited) {
172
+ resolve();
173
+ clearInterval(intervalId);
174
+ }
175
+ }, 10);
176
+ });
177
+ };
178
+ const testCheckURLIsPhishing = (service) => {
179
+ for (const phishing of phishings) {
180
+ expect(service.checkURLIsPhishing(`http://${phishing}`)).toBe(true);
181
+ expect(service.checkURLIsPhishing(`https://${phishing}`)).toBe(true);
182
+ expect(service.checkURLIsPhishing(`https://test.${phishing}`)).toBe(true);
183
+ expect(service.checkURLIsPhishing(`https://test.${phishing}.`)).toBe(true);
184
+ expect(service.checkURLIsPhishing(`https://test.${phishing}./`)).toBe(true);
185
+ expect(service.checkURLIsPhishing(`https://test.${phishing}..`)).toBe(true);
186
+ expect(service.checkURLIsPhishing(`https://test.${phishing}../`)).toBe(true);
187
+ expect(service.checkURLIsPhishing(`https://test.${phishing}..?test`)).toBe(true);
188
+ expect(service.checkURLIsPhishing(`https://test.${phishing}..?test=1`)).toBe(true);
189
+ expect(service.checkURLIsPhishing(`https://.test.test.${phishing}`)).toBe(true);
190
+ expect(service.checkURLIsPhishing(`https://..test.test.${phishing}`)).toBe(true);
191
+ expect(service.checkURLIsPhishing(`https://..test..test...${phishing}`)).toBe(true);
192
+ }
193
+ };
194
+ test("Test basic PhishingListService with valid cases", () => __awaiter(void 0, void 0, void 0, function* () {
195
+ const service = new service_1.PhishingListService({
196
+ blockListUrl: `http://127.0.0.1:${port}/list1`,
197
+ fetchingIntervalMs: 3600,
198
+ retryIntervalMs: 3600,
199
+ });
200
+ eachService = service;
201
+ service.init();
202
+ yield waitServiceInit(service);
203
+ testCheckURLIsPhishing(service);
204
+ }));
205
+ test("Test basic PhishingListService with strange separators", () => __awaiter(void 0, void 0, void 0, function* () {
206
+ const service = new service_1.PhishingListService({
207
+ blockListUrl: `http://127.0.0.1:${port}/list2`,
208
+ fetchingIntervalMs: 3600,
209
+ retryIntervalMs: 3600,
210
+ });
211
+ eachService = service;
212
+ service.init();
213
+ yield waitServiceInit(service);
214
+ testCheckURLIsPhishing(service);
215
+ }));
216
+ test("Test basic PhishingListService with strange cases", () => __awaiter(void 0, void 0, void 0, function* () {
217
+ const service = new service_1.PhishingListService({
218
+ blockListUrl: `http://127.0.0.1:${port}/list3`,
219
+ fetchingIntervalMs: 3600,
220
+ retryIntervalMs: 3600,
221
+ });
222
+ eachService = service;
223
+ service.init();
224
+ yield waitServiceInit(service);
225
+ testCheckURLIsPhishing(service);
226
+ }));
227
+ test("Test basic PhishingListService fetching interval", () => __awaiter(void 0, void 0, void 0, function* () {
228
+ const service = new service_1.PhishingListService({
229
+ blockListUrl: `http://127.0.0.1:${port}/list3`,
230
+ fetchingIntervalMs: 200,
231
+ retryIntervalMs: 3600,
232
+ });
233
+ eachService = service;
234
+ service.init();
235
+ yield waitServiceInit(service);
236
+ testCheckURLIsPhishing(service);
237
+ expect(service.checkURLIsPhishing("https://added.domain")).toBe(false);
238
+ expect(getQueryCount()).toBe(1);
239
+ // Wait re-fetching
240
+ yield new Promise((resolve) => setTimeout(resolve, 210));
241
+ testCheckURLIsPhishing(service);
242
+ // See the implementation of /list3
243
+ expect(service.checkURLIsPhishing("https://added.domain")).toBe(true);
244
+ expect(getQueryCount()).toBe(2);
245
+ // Wait re-fetching
246
+ yield new Promise((resolve) => setTimeout(resolve, 210));
247
+ testCheckURLIsPhishing(service);
248
+ // See the implementation of /list3
249
+ expect(service.checkURLIsPhishing("https://added.domain")).toBe(false);
250
+ expect(getQueryCount()).toBe(3);
251
+ }));
252
+ test("Test basic PhishingListService fetching interval with retry interval", () => __awaiter(void 0, void 0, void 0, function* () {
253
+ const service = new service_1.PhishingListService({
254
+ blockListUrl: `http://127.0.0.1:${port}/test-retry`,
255
+ fetchingIntervalMs: 200,
256
+ retryIntervalMs: 100,
257
+ });
258
+ eachService = service;
259
+ service.init();
260
+ const testPhishingUntil = (count) => {
261
+ const tests = phishings.slice(0, count);
262
+ for (const test of tests) {
263
+ expect(service.checkURLIsPhishing("https://" + test)).toBe(true);
264
+ }
265
+ if (phishings.length > count) {
266
+ const test = phishings[count];
267
+ expect(service.checkURLIsPhishing("https://" + test)).toBe(false);
268
+ }
269
+ };
270
+ yield waitServiceInit(service);
271
+ testPhishingUntil(1);
272
+ expect(getQueryCount()).toBe(1);
273
+ // Wait re-fetching
274
+ yield new Promise((resolve) => setTimeout(resolve, 210));
275
+ // See the implementation of /test-retry
276
+ testPhishingUntil(2);
277
+ expect(getQueryCount()).toBe(2);
278
+ // Wait re-fetching
279
+ yield new Promise((resolve) => setTimeout(resolve, 210));
280
+ // See the implementation of /test-retry
281
+ // In this case, the fetching should be failed.
282
+ // So, there is no update on phishing list.
283
+ testPhishingUntil(2);
284
+ expect(getQueryCount()).toBe(3);
285
+ // Wait retry for failed query
286
+ yield new Promise((resolve) => setTimeout(resolve, 110));
287
+ // See the implementation of /test-retry
288
+ testPhishingUntil(4);
289
+ expect(getQueryCount()).toBe(4);
290
+ // Not yet re-fetching
291
+ yield new Promise((resolve) => setTimeout(resolve, 110));
292
+ // See the implementation of /test-retry
293
+ testPhishingUntil(4);
294
+ expect(getQueryCount()).toBe(4);
295
+ // Now re-fetching
296
+ yield new Promise((resolve) => setTimeout(resolve, 110));
297
+ // See the implementation of /test-retry
298
+ testPhishingUntil(5);
299
+ expect(getQueryCount()).toBe(5);
300
+ }));
301
+ });
302
+ //# sourceMappingURL=service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.spec.js","sourceRoot":"","sources":["../../src/phishing-list/service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function parseDomainUntilSecondLevel(param: string): string;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDomainUntilSecondLevel = void 0;
4
+ function parseDomainUntilSecondLevel(param) {
5
+ let domain = param;
6
+ if (domain.match(/^[a-zA-Z0-9-]+:\/\/.+$/)) {
7
+ domain = domain.replace(/^[a-zA-Z0-9-]+:\/\//, "");
8
+ }
9
+ const slash = domain.indexOf("/");
10
+ if (slash >= 0) {
11
+ domain = domain.slice(0, slash);
12
+ }
13
+ const qMark = domain.indexOf("?");
14
+ if (qMark >= 0) {
15
+ domain = domain.slice(0, qMark);
16
+ }
17
+ const split = domain
18
+ .split(".")
19
+ .map((str) => str.trim())
20
+ .filter((str) => str.length > 0);
21
+ if (split.length < 2) {
22
+ throw new Error(`Invalid domain: ${param}`);
23
+ }
24
+ return split[split.length - 2] + "." + split[split.length - 1];
25
+ }
26
+ exports.parseDomainUntilSecondLevel = parseDomainUntilSecondLevel;
27
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/phishing-list/utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,2BAA2B,CAAC,KAAa;IACvD,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE;QAC1C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;KACpD;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KACjC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KACjC;IAED,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;KAC7C;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AA1BD,kEA0BC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ describe("Test phishing list service utils", () => {
5
+ test("Test parseDomainUntilSecondLevel", () => {
6
+ const tests = [
7
+ {
8
+ url: "",
9
+ invalid: true,
10
+ },
11
+ {
12
+ url: ".",
13
+ invalid: true,
14
+ },
15
+ {
16
+ url: "..",
17
+ invalid: true,
18
+ },
19
+ {
20
+ url: ".test.",
21
+ invalid: true,
22
+ },
23
+ {
24
+ url: "..test",
25
+ invalid: true,
26
+ },
27
+ {
28
+ url: "test.com.",
29
+ expect: "test.com",
30
+ },
31
+ {
32
+ url: "test.com..",
33
+ expect: "test.com",
34
+ },
35
+ {
36
+ url: ".test.com.",
37
+ expect: "test.com",
38
+ },
39
+ {
40
+ url: "..test.com..",
41
+ expect: "test.com",
42
+ },
43
+ {
44
+ url: "test..com",
45
+ expect: "test.com",
46
+ },
47
+ {
48
+ url: "..test..com..",
49
+ expect: "test.com",
50
+ },
51
+ {
52
+ url: "asd.test.com.",
53
+ expect: "test.com",
54
+ },
55
+ {
56
+ url: "asd..test.com.",
57
+ expect: "test.com",
58
+ },
59
+ {
60
+ url: "http://",
61
+ invalid: true,
62
+ },
63
+ {
64
+ url: "https://.",
65
+ invalid: true,
66
+ },
67
+ {
68
+ url: "https://..",
69
+ invalid: true,
70
+ },
71
+ {
72
+ url: "https://.test.",
73
+ invalid: true,
74
+ },
75
+ {
76
+ url: "https://..test",
77
+ invalid: true,
78
+ },
79
+ {
80
+ url: "https://test.com.",
81
+ expect: "test.com",
82
+ },
83
+ {
84
+ url: "https://test.com..",
85
+ expect: "test.com",
86
+ },
87
+ {
88
+ url: "https://.test.com.",
89
+ expect: "test.com",
90
+ },
91
+ {
92
+ url: "https://..test.com..",
93
+ expect: "test.com",
94
+ },
95
+ {
96
+ url: "https://test..com",
97
+ expect: "test.com",
98
+ },
99
+ {
100
+ url: "https://..test..com..",
101
+ expect: "test.com",
102
+ },
103
+ {
104
+ url: "https://asd.test.com.",
105
+ expect: "test.com",
106
+ },
107
+ {
108
+ url: "https://asd..test.com.",
109
+ expect: "test.com",
110
+ },
111
+ {
112
+ url: "chrome-extension://hajcclbibbmagnhankhjinooiploogfm/_generated_background_page.html",
113
+ invalid: true,
114
+ },
115
+ {
116
+ url: "chrome-extension://hajcclbibbmagnhankhjinooiploogfm.test/",
117
+ expect: "hajcclbibbmagnhankhjinooiploogfm.test",
118
+ },
119
+ {
120
+ url: "chrome-extension://hajcclbibbmagnhankhjinooiploogfm.test/?test=1",
121
+ expect: "hajcclbibbmagnhankhjinooiploogfm.test",
122
+ },
123
+ {
124
+ url: "chrome-extension://hajcclbibbmagnhankhjinooiploogfm.test?test=1",
125
+ expect: "hajcclbibbmagnhankhjinooiploogfm.test",
126
+ },
127
+ {
128
+ url: "chrome-extension://hajcclbibbmagnhankhjinooiploogfm.test/_generated_background_page.html",
129
+ expect: "hajcclbibbmagnhankhjinooiploogfm.test",
130
+ },
131
+ ];
132
+ for (const test of tests) {
133
+ if ("invalid" in test) {
134
+ expect(() => utils_1.parseDomainUntilSecondLevel(test.url)).toThrow();
135
+ }
136
+ else {
137
+ expect(utils_1.parseDomainUntilSecondLevel(test.url)).toBe(test.expect);
138
+ }
139
+ }
140
+ });
141
+ });
142
+ //# sourceMappingURL=utils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/phishing-list/utils.spec.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.10.23",
3
+ "version": "0.10.24",
4
4
  "main": "build/index.js",
5
5
  "author": "chainapsis",
6
6
  "license": "Apache-2.0",
@@ -29,19 +29,19 @@
29
29
  "@ethersproject/bytes": "^5.5.0",
30
30
  "@ethersproject/keccak256": "^5.5.0",
31
31
  "@ethersproject/wallet": "^5.5.0",
32
- "@keplr-wallet/common": "0.10.23",
33
- "@keplr-wallet/cosmos": "0.10.23",
34
- "@keplr-wallet/crypto": "0.10.23",
35
- "@keplr-wallet/popup": "0.10.23",
36
- "@keplr-wallet/proto-types": "0.10.23",
37
- "@keplr-wallet/router": "0.10.23",
38
- "@keplr-wallet/types": "0.10.23",
39
- "@keplr-wallet/unit": "0.10.23",
32
+ "@keplr-wallet/common": "0.10.24",
33
+ "@keplr-wallet/cosmos": "0.10.24",
34
+ "@keplr-wallet/crypto": "0.10.24",
35
+ "@keplr-wallet/popup": "0.10.24",
36
+ "@keplr-wallet/proto-types": "0.10.24",
37
+ "@keplr-wallet/router": "0.10.24",
38
+ "@keplr-wallet/types": "0.10.24",
39
+ "@keplr-wallet/unit": "0.10.24",
40
40
  "@ledgerhq/hw-transport": "^6.20.0",
41
41
  "@ledgerhq/hw-transport-webhid": "^6.20.0",
42
42
  "@ledgerhq/hw-transport-webusb": "^6.20.0",
43
43
  "aes-js": "^3.1.2",
44
- "axios": "^0.21.4",
44
+ "axios": "^0.27.2",
45
45
  "big-integer": "^1.6.48",
46
46
  "bip39": "^3.0.2",
47
47
  "buffer": "^6.0.3",
@@ -54,5 +54,5 @@
54
54
  "secretjs": "^0.17.0",
55
55
  "utility-types": "^3.10.0"
56
56
  },
57
- "gitHead": "3be0fd82edda817dda79a77497c1cdf596063178"
57
+ "gitHead": "7a4db487b74170d968ecc2c7979d39579251277c"
58
58
  }
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ import * as Updater from "./updater/internal";
10
10
  import * as Tokens from "./tokens/internal";
11
11
  import * as Interaction from "./interaction/internal";
12
12
  import * as Permission from "./permission/internal";
13
+ import * as PhishingList from "./phishing-list/internal";
13
14
 
14
15
  export * from "./persistent-memory";
15
16
  export * from "./chains";
@@ -21,6 +22,7 @@ export * from "./updater";
21
22
  export * from "./tokens";
22
23
  export * from "./interaction";
23
24
  export * from "./permission";
25
+ export * from "./phishing-list";
24
26
 
25
27
  import { KVStore } from "@keplr-wallet/common";
26
28
  import { ChainInfo } from "@keplr-wallet/types";
@@ -94,6 +96,13 @@ export function init(
94
96
  notification
95
97
  );
96
98
 
99
+ const phishingListService = new PhishingList.PhishingListService({
100
+ blockListUrl:
101
+ "https://raw.githubusercontent.com/chainapsis/phishing-block-list/main/block-list.txt",
102
+ fetchingIntervalMs: 3 * 3600 * 1000, // 3 hours
103
+ retryIntervalMs: 10 * 60 * 1000, // 10 mins
104
+ });
105
+
97
106
  interactionService.init();
98
107
  persistentMemoryService.init();
99
108
  permissionService.init(interactionService, chainsService, keyRingService);
@@ -114,6 +123,7 @@ export function init(
114
123
  );
115
124
  secretWasmService.init(chainsService, keyRingService, permissionService);
116
125
  backgroundTxService.init(chainsService, permissionService);
126
+ phishingListService.init();
117
127
 
118
128
  Interaction.init(router, interactionService);
119
129
  PersistentMemory.init(router, persistentMemoryService);
@@ -125,4 +135,5 @@ export function init(
125
135
  KeyRing.init(router, keyRingService);
126
136
  SecretWasm.init(router, secretWasmService);
127
137
  BackgroundTx.init(router, backgroundTxService);
138
+ PhishingList.init(router, phishingListService);
128
139
  }
@@ -0,0 +1 @@
1
+ export const ROUTE = "phishing-list";
@@ -0,0 +1,27 @@
1
+ import { Env, Handler, InternalHandler, Message } from "@keplr-wallet/router";
2
+ import { PhishingListService } from "./service";
3
+ import { CheckURLIsPhishingMsg } from "./messages";
4
+
5
+ export const getHandler: (service: PhishingListService) => Handler = (
6
+ service: PhishingListService
7
+ ) => {
8
+ return (env: Env, msg: Message<unknown>) => {
9
+ switch (msg.constructor) {
10
+ case CheckURLIsPhishingMsg:
11
+ return handleCheckURLIsPhishingMsg(service)(
12
+ env,
13
+ msg as CheckURLIsPhishingMsg
14
+ );
15
+ default:
16
+ throw new Error("Unknown msg type");
17
+ }
18
+ };
19
+ };
20
+
21
+ const handleCheckURLIsPhishingMsg: (
22
+ service: PhishingListService
23
+ ) => InternalHandler<CheckURLIsPhishingMsg> = (
24
+ service: PhishingListService
25
+ ) => (_, msg) => {
26
+ return service.checkURLIsPhishing(msg.origin);
27
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./service";
2
+ export * from "./messages";
@@ -0,0 +1,11 @@
1
+ import { Router } from "@keplr-wallet/router";
2
+ import { ROUTE } from "./constants";
3
+ import { getHandler } from "./handler";
4
+ import { PhishingListService } from "./service";
5
+ import { CheckURLIsPhishingMsg } from "./messages";
6
+
7
+ export function init(router: Router, service: PhishingListService): void {
8
+ router.registerMessage(CheckURLIsPhishingMsg);
9
+
10
+ router.addHandler(ROUTE, getHandler(service));
11
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./service";
2
+ export * from "./init";