@keplr-wallet/common 0.13.9 → 0.13.11

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.
@@ -1,10 +1,12 @@
1
1
  import { KVStore } from "./interface";
2
2
  export declare class IndexedDBKVStore implements KVStore {
3
3
  protected readonly _prefix: string;
4
- protected cachedDB?: IDBDatabase;
4
+ protected static dbPromiseMap: Map<string, Promise<IDBDatabase>>;
5
5
  constructor(_prefix: string);
6
6
  get<T = unknown>(key: string): Promise<T | undefined>;
7
7
  set<T = unknown>(key: string, data: T | null): Promise<void>;
8
+ getAllKeys(): Promise<string[]>;
8
9
  prefix(): string;
9
10
  protected getDB(): Promise<IDBDatabase>;
11
+ protected openDB(): Promise<IDBDatabase>;
10
12
  }
@@ -21,8 +21,10 @@ class IndexedDBKVStore {
21
21
  return new Promise((resolve, reject) => {
22
22
  const request = store.get(key);
23
23
  request.onerror = (event) => {
24
+ var _a;
24
25
  event.stopPropagation();
25
- reject(event.target);
26
+ const error = event.target.error;
27
+ reject(new Error((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "Unknown IndexedDB error on get"));
26
28
  };
27
29
  request.onsuccess = () => {
28
30
  if (!request.result) {
@@ -43,8 +45,10 @@ class IndexedDBKVStore {
43
45
  return new Promise((resolve, reject) => {
44
46
  const request = store.delete(key);
45
47
  request.onerror = (event) => {
48
+ var _a;
46
49
  event.stopPropagation();
47
- reject(event.target);
50
+ const error = event.target.error;
51
+ reject(new Error((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "Unknown IndexedDB error on delete"));
48
52
  };
49
53
  request.onsuccess = () => {
50
54
  resolve();
@@ -60,8 +64,10 @@ class IndexedDBKVStore {
60
64
  data,
61
65
  });
62
66
  request.onerror = (event) => {
67
+ var _a;
63
68
  event.stopPropagation();
64
- reject(event.target);
69
+ const error = event.target.error;
70
+ reject(new Error((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "Unknown IndexedDB error on put"));
65
71
  };
66
72
  request.onsuccess = () => {
67
73
  resolve();
@@ -70,33 +76,67 @@ class IndexedDBKVStore {
70
76
  }
71
77
  });
72
78
  }
73
- prefix() {
74
- return this._prefix;
75
- }
76
- getDB() {
79
+ getAllKeys() {
77
80
  return __awaiter(this, void 0, void 0, function* () {
78
- if (this.cachedDB) {
79
- return this.cachedDB;
80
- }
81
+ const tx = (yield this.getDB()).transaction([this.prefix()], "readonly");
82
+ const store = tx.objectStore(this.prefix());
81
83
  return new Promise((resolve, reject) => {
82
- const request = window.indexedDB.open(this.prefix());
84
+ const request = store.getAllKeys();
83
85
  request.onerror = (event) => {
86
+ var _a;
84
87
  event.stopPropagation();
85
- reject(event.target);
86
- };
87
- request.onupgradeneeded = (event) => {
88
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
89
- // @ts-ignore
90
- const db = event.target.result;
91
- db.createObjectStore(this.prefix(), { keyPath: "key" });
88
+ const error = event.target.error;
89
+ reject(new Error((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "Unknown IndexedDB error on getAllKeys"));
92
90
  };
93
91
  request.onsuccess = () => {
94
- this.cachedDB = request.result;
95
92
  resolve(request.result);
96
93
  };
97
94
  });
98
95
  });
99
96
  }
97
+ prefix() {
98
+ return this._prefix;
99
+ }
100
+ getDB() {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const prefix = this.prefix();
103
+ if (!IndexedDBKVStore.dbPromiseMap.has(prefix)) {
104
+ IndexedDBKVStore.dbPromiseMap.set(prefix, this.openDB());
105
+ }
106
+ return IndexedDBKVStore.dbPromiseMap.get(prefix);
107
+ });
108
+ }
109
+ openDB() {
110
+ const prefix = this.prefix();
111
+ return new Promise((resolve, reject) => {
112
+ const request = window.indexedDB.open(prefix);
113
+ request.onerror = (event) => {
114
+ var _a;
115
+ event.stopPropagation();
116
+ IndexedDBKVStore.dbPromiseMap.delete(prefix);
117
+ const error = event.target.error;
118
+ reject(new Error((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "Unknown IndexedDB error on openDB"));
119
+ };
120
+ request.onupgradeneeded = (event) => {
121
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
122
+ // @ts-ignore
123
+ const db = event.target.result;
124
+ db.createObjectStore(prefix, { keyPath: "key" });
125
+ };
126
+ request.onsuccess = () => {
127
+ const db = request.result;
128
+ db.onclose = () => {
129
+ IndexedDBKVStore.dbPromiseMap.delete(prefix);
130
+ };
131
+ db.onversionchange = () => {
132
+ db.close();
133
+ IndexedDBKVStore.dbPromiseMap.delete(prefix);
134
+ };
135
+ resolve(db);
136
+ };
137
+ });
138
+ }
100
139
  }
140
+ IndexedDBKVStore.dbPromiseMap = new Map();
101
141
  exports.IndexedDBKVStore = IndexedDBKVStore;
102
142
  //# sourceMappingURL=indexed-db.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexed-db.js","sourceRoot":"","sources":["../../src/kv-store/indexed-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexed-db.js","sourceRoot":"","sources":["../../src/kv-store/indexed-db.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keplr-wallet/common",
3
- "version": "0.13.9",
3
+ "version": "0.13.11",
4
4
  "main": "build/index.js",
5
5
  "author": "chainapsis",
6
6
  "license": "Apache-2.0",
@@ -21,11 +21,11 @@
21
21
  "typecheck": "npx tsc -p tsconfig.check.json"
22
22
  },
23
23
  "dependencies": {
24
- "@keplr-wallet/crypto": "0.13.9",
25
- "@keplr-wallet/types": "0.13.9",
24
+ "@keplr-wallet/crypto": "0.13.11",
25
+ "@keplr-wallet/types": "0.13.11",
26
26
  "buffer": "^6.0.3",
27
27
  "delay": "^4.4.0",
28
28
  "p-queue": "^6.6.2"
29
29
  },
30
- "gitHead": "bdb97c3ed6d06da10baa2d6bc573371b5007426b"
30
+ "gitHead": "5998947a9853adcbed5872b849362f05b5e73f7e"
31
31
  }
@@ -1,7 +1,7 @@
1
1
  import { KVStore } from "./interface";
2
2
 
3
3
  export class IndexedDBKVStore implements KVStore {
4
- protected cachedDB?: IDBDatabase;
4
+ protected static dbPromiseMap = new Map<string, Promise<IDBDatabase>>();
5
5
 
6
6
  constructor(protected readonly _prefix: string) {}
7
7
 
@@ -14,7 +14,8 @@ export class IndexedDBKVStore implements KVStore {
14
14
  request.onerror = (event) => {
15
15
  event.stopPropagation();
16
16
 
17
- reject(event.target);
17
+ const error = (event.target as IDBRequest).error;
18
+ reject(new Error(error?.message ?? "Unknown IndexedDB error on get"));
18
19
  };
19
20
  request.onsuccess = () => {
20
21
  if (!request.result) {
@@ -36,7 +37,10 @@ export class IndexedDBKVStore implements KVStore {
36
37
  request.onerror = (event) => {
37
38
  event.stopPropagation();
38
39
 
39
- reject(event.target);
40
+ const error = (event.target as IDBRequest).error;
41
+ reject(
42
+ new Error(error?.message ?? "Unknown IndexedDB error on delete")
43
+ );
40
44
  };
41
45
  request.onsuccess = () => {
42
46
  resolve();
@@ -54,7 +58,8 @@ export class IndexedDBKVStore implements KVStore {
54
58
  request.onerror = (event) => {
55
59
  event.stopPropagation();
56
60
 
57
- reject(event.target);
61
+ const error = (event.target as IDBRequest).error;
62
+ reject(new Error(error?.message ?? "Unknown IndexedDB error on put"));
58
63
  };
59
64
  request.onsuccess = () => {
60
65
  resolve();
@@ -63,20 +68,50 @@ export class IndexedDBKVStore implements KVStore {
63
68
  }
64
69
  }
65
70
 
71
+ async getAllKeys(): Promise<string[]> {
72
+ const tx = (await this.getDB()).transaction([this.prefix()], "readonly");
73
+ const store = tx.objectStore(this.prefix());
74
+
75
+ return new Promise((resolve, reject) => {
76
+ const request = store.getAllKeys();
77
+ request.onerror = (event) => {
78
+ event.stopPropagation();
79
+
80
+ const error = (event.target as IDBRequest).error;
81
+ reject(
82
+ new Error(error?.message ?? "Unknown IndexedDB error on getAllKeys")
83
+ );
84
+ };
85
+ request.onsuccess = () => {
86
+ resolve(request.result as string[]);
87
+ };
88
+ });
89
+ }
90
+
66
91
  prefix(): string {
67
92
  return this._prefix;
68
93
  }
69
94
 
70
95
  protected async getDB(): Promise<IDBDatabase> {
71
- if (this.cachedDB) {
72
- return this.cachedDB;
96
+ const prefix = this.prefix();
97
+ if (!IndexedDBKVStore.dbPromiseMap.has(prefix)) {
98
+ IndexedDBKVStore.dbPromiseMap.set(prefix, this.openDB());
73
99
  }
74
100
 
101
+ return IndexedDBKVStore.dbPromiseMap.get(prefix)!;
102
+ }
103
+
104
+ protected openDB(): Promise<IDBDatabase> {
105
+ const prefix = this.prefix();
75
106
  return new Promise((resolve, reject) => {
76
- const request = window.indexedDB.open(this.prefix());
107
+ const request = window.indexedDB.open(prefix);
77
108
  request.onerror = (event) => {
78
109
  event.stopPropagation();
79
- reject(event.target);
110
+ IndexedDBKVStore.dbPromiseMap.delete(prefix);
111
+ const error = (event.target as IDBRequest).error;
112
+ reject(
113
+ new Error(error?.message ?? "Unknown IndexedDB error on openDB")
114
+ );
80
115
  };
81
116
 
82
117
  request.onupgradeneeded = (event) => {
@@ -84,12 +119,21 @@ export class IndexedDBKVStore implements KVStore {
84
119
  // @ts-ignore
85
120
  const db = event.target.result;
86
121
 
87
- db.createObjectStore(this.prefix(), { keyPath: "key" });
122
+ db.createObjectStore(prefix, { keyPath: "key" });
88
123
  };
89
124
 
90
125
  request.onsuccess = () => {
91
- this.cachedDB = request.result;
92
- resolve(request.result);
126
+ const db = request.result;
127
+
128
+ db.onclose = () => {
129
+ IndexedDBKVStore.dbPromiseMap.delete(prefix);
130
+ };
131
+ db.onversionchange = () => {
132
+ db.close();
133
+ IndexedDBKVStore.dbPromiseMap.delete(prefix);
134
+ };
135
+
136
+ resolve(db);
93
137
  };
94
138
  });
95
139
  }