@pezkuwi/extension-base 0.62.10 → 0.62.13
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.
- package/LICENSE +201 -0
- package/background/RequestBytesSign.js +6 -9
- package/background/RequestExtrinsicSign.js +6 -9
- package/background/handlers/Extension.js +304 -460
- package/background/handlers/State.js +365 -619
- package/background/handlers/Tabs.js +155 -273
- package/background/handlers/helpers.js +1 -3
- package/background/handlers/index.js +17 -22
- package/background/handlers/subscriptions.js +5 -9
- package/background/index.js +0 -2
- package/background/types.js +0 -2
- package/bundle.js +0 -2
- package/cjs/background/RequestBytesSign.d.ts +12 -0
- package/cjs/background/RequestBytesSign.js +15 -0
- package/cjs/background/RequestExtrinsicSign.d.ts +12 -0
- package/cjs/background/RequestExtrinsicSign.js +14 -0
- package/cjs/background/handlers/Extension.d.ts +49 -0
- package/cjs/background/handlers/Extension.js +492 -0
- package/cjs/background/handlers/State.d.ts +96 -0
- package/cjs/background/handlers/State.js +482 -0
- package/cjs/background/handlers/Tabs.d.ts +25 -0
- package/cjs/background/handlers/Tabs.js +199 -0
- package/cjs/background/handlers/helpers.d.ts +1 -0
- package/cjs/background/handlers/helpers.js +14 -0
- package/cjs/background/handlers/index.d.ts +3 -0
- package/cjs/background/handlers/index.js +46 -0
- package/cjs/background/handlers/subscriptions.d.ts +3 -0
- package/cjs/background/handlers/subscriptions.js +22 -0
- package/cjs/background/index.d.ts +1 -0
- package/cjs/background/index.js +7 -0
- package/cjs/background/types.d.ts +343 -0
- package/cjs/background/types.js +2 -0
- package/cjs/bundle.d.ts +1 -0
- package/cjs/bundle.js +5 -0
- package/cjs/defaults.d.ts +9 -0
- package/cjs/defaults.js +16 -0
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +4 -0
- package/cjs/package.json +3 -0
- package/cjs/packageDetect.d.ts +1 -0
- package/cjs/packageDetect.js +8 -0
- package/cjs/packageInfo.d.ts +6 -0
- package/cjs/packageInfo.js +4 -0
- package/cjs/page/Accounts.d.ts +7 -0
- package/cjs/page/Accounts.js +24 -0
- package/cjs/page/Injected.d.ts +13 -0
- package/cjs/page/Injected.js +25 -0
- package/cjs/page/Metadata.d.ts +7 -0
- package/cjs/page/Metadata.js +15 -0
- package/cjs/page/PostMessageProvider.d.ts +63 -0
- package/cjs/page/PostMessageProvider.js +135 -0
- package/cjs/page/Signer.d.ts +8 -0
- package/cjs/page/Signer.js +29 -0
- package/cjs/page/index.d.ts +16 -0
- package/cjs/page/index.js +52 -0
- package/cjs/page/types.d.ts +6 -0
- package/cjs/page/types.js +2 -0
- package/cjs/stores/Accounts.d.ts +6 -0
- package/cjs/stores/Accounts.js +21 -0
- package/cjs/stores/Base.d.ts +9 -0
- package/cjs/stores/Base.js +70 -0
- package/cjs/stores/Metadata.d.ts +5 -0
- package/cjs/stores/Metadata.js +13 -0
- package/cjs/stores/index.d.ts +2 -0
- package/cjs/stores/index.js +8 -0
- package/cjs/types.d.ts +9 -0
- package/cjs/types.js +2 -0
- package/cjs/utils/canDerive.d.ts +2 -0
- package/cjs/utils/canDerive.js +6 -0
- package/cjs/utils/getId.d.ts +1 -0
- package/cjs/utils/getId.js +8 -0
- package/cjs/utils/index.d.ts +1 -0
- package/cjs/utils/index.js +5 -0
- package/cjs/utils/portUtils.d.ts +13 -0
- package/cjs/utils/portUtils.js +49 -0
- package/defaults.js +10 -14
- package/index.js +0 -4
- package/package.json +464 -10
- package/packageDetect.js +0 -4
- package/packageInfo.js +1 -4
- package/page/Accounts.js +13 -18
- package/page/Injected.js +10 -10
- package/page/Metadata.js +8 -13
- package/page/PostMessageProvider.js +90 -192
- package/page/Signer.js +24 -90
- package/page/index.js +15 -72
- package/page/types.js +0 -2
- package/stores/Accounts.js +14 -80
- package/stores/Base.js +57 -240
- package/stores/Metadata.js +6 -26
- package/stores/index.js +0 -2
- package/types.js +0 -2
- package/utils/canDerive.js +0 -2
- package/utils/getId.js +2 -4
- package/utils/index.js +0 -2
- package/utils/portUtils.d.ts +0 -1
- package/utils/portUtils.js +31 -94
package/stores/Accounts.js
CHANGED
|
@@ -1,83 +1,17 @@
|
|
|
1
|
-
// Copyright 2019-2025 @pezkuwi/extension-base authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
var __extends = (this && this.__extends) || (function () {
|
|
4
|
-
var extendStatics = function (d, b) {
|
|
5
|
-
extendStatics = Object.setPrototypeOf ||
|
|
6
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
7
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
8
|
-
return extendStatics(d, b);
|
|
9
|
-
};
|
|
10
|
-
return function (d, b) {
|
|
11
|
-
if (typeof b !== "function" && b !== null)
|
|
12
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
13
|
-
extendStatics(d, b);
|
|
14
|
-
function __() { this.constructor = d; }
|
|
15
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
16
|
-
};
|
|
17
|
-
})();
|
|
18
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
19
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
20
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
21
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
22
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
23
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
24
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
28
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
29
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
30
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
31
|
-
function step(op) {
|
|
32
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
33
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
34
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
35
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
36
|
-
switch (op[0]) {
|
|
37
|
-
case 0: case 1: t = op; break;
|
|
38
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
39
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
40
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
41
|
-
default:
|
|
42
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
43
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
44
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
45
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
46
|
-
if (t[2]) _.ops.pop();
|
|
47
|
-
_.trys.pop(); continue;
|
|
48
|
-
}
|
|
49
|
-
op = body.call(thisArg, _);
|
|
50
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
51
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
1
|
import { EXTENSION_PREFIX } from '../defaults.js';
|
|
55
2
|
import BaseStore from './Base.js';
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
3
|
+
export default class AccountsStore extends BaseStore {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(EXTENSION_PREFIX && EXTENSION_PREFIX !== 'polkadot{.js}'
|
|
6
|
+
? `${EXTENSION_PREFIX}accounts`
|
|
7
|
+
: null);
|
|
8
|
+
}
|
|
9
|
+
async set(key, value, update) {
|
|
10
|
+
// shortcut, don't save testing accounts in extension storage
|
|
11
|
+
if (key.startsWith('account:') && value.meta && value.meta.isTesting) {
|
|
12
|
+
update && update();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
await super.set(key, value, update);
|
|
62
16
|
}
|
|
63
|
-
|
|
64
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
-
return __generator(this, function (_a) {
|
|
66
|
-
switch (_a.label) {
|
|
67
|
-
case 0:
|
|
68
|
-
// shortcut, don't save testing accounts in extension storage
|
|
69
|
-
if (key.startsWith('account:') && value.meta && value.meta.isTesting) {
|
|
70
|
-
update && update();
|
|
71
|
-
return [2 /*return*/];
|
|
72
|
-
}
|
|
73
|
-
return [4 /*yield*/, _super.prototype.set.call(this, key, value, update)];
|
|
74
|
-
case 1:
|
|
75
|
-
_a.sent();
|
|
76
|
-
return [2 /*return*/];
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
|
-
return AccountsStore;
|
|
82
|
-
}(BaseStore));
|
|
83
|
-
export default AccountsStore;
|
|
17
|
+
}
|
package/stores/Base.js
CHANGED
|
@@ -1,250 +1,67 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
14
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
15
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
-
function step(op) {
|
|
17
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
19
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
20
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
-
switch (op[0]) {
|
|
22
|
-
case 0: case 1: t = op; break;
|
|
23
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
-
default:
|
|
27
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
-
if (t[2]) _.ops.pop();
|
|
32
|
-
_.trys.pop(); continue;
|
|
33
|
-
}
|
|
34
|
-
op = body.call(thisArg, _);
|
|
35
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
40
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
41
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
42
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
43
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
44
|
-
};
|
|
45
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
46
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
47
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
48
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
49
|
-
};
|
|
50
|
-
var _BaseStore_prefix;
|
|
51
|
-
var lastError = function (type) {
|
|
52
|
-
var error = chrome.runtime.lastError;
|
|
1
|
+
const lastError = (type) => {
|
|
2
|
+
const error = chrome.runtime.lastError;
|
|
53
3
|
if (error) {
|
|
54
|
-
console.error(
|
|
4
|
+
console.error(`BaseStore.${type}:: runtime.lastError:`, error);
|
|
55
5
|
}
|
|
56
6
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
7
|
+
export default class BaseStore {
|
|
8
|
+
#prefix;
|
|
9
|
+
constructor(prefix) {
|
|
10
|
+
this.#prefix = prefix ? `${prefix}:` : '';
|
|
61
11
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return __generator(this, function (_b) {
|
|
70
|
-
switch (_b.label) {
|
|
71
|
-
case 0:
|
|
72
|
-
entries = Object.entries(map);
|
|
73
|
-
_i = 0, entries_1 = entries;
|
|
74
|
-
_b.label = 1;
|
|
75
|
-
case 1:
|
|
76
|
-
if (!(_i < entries_1.length)) return [3 /*break*/, 4];
|
|
77
|
-
_a = entries_1[_i], key = _a[0], value = _a[1];
|
|
78
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
79
|
-
return [4 /*yield*/, update(key, value)];
|
|
80
|
-
case 2:
|
|
81
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
82
|
-
_b.sent();
|
|
83
|
-
_b.label = 3;
|
|
84
|
-
case 3:
|
|
85
|
-
_i++;
|
|
86
|
-
return [3 /*break*/, 1];
|
|
87
|
-
case 4: return [2 /*return*/];
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}); })];
|
|
91
|
-
case 1:
|
|
92
|
-
_a.sent();
|
|
93
|
-
return [2 /*return*/];
|
|
94
|
-
}
|
|
95
|
-
});
|
|
12
|
+
async all(update) {
|
|
13
|
+
await this.allMap(async (map) => {
|
|
14
|
+
const entries = Object.entries(map);
|
|
15
|
+
for (const [key, value] of entries) {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
17
|
+
await update(key, value);
|
|
18
|
+
}
|
|
96
19
|
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
case 0:
|
|
108
|
-
lastError('all');
|
|
109
|
-
entries = Object.entries(result);
|
|
110
|
-
map = {};
|
|
111
|
-
for (i = 0, count = entries.length; i < count; i++) {
|
|
112
|
-
_a = entries[i], key = _a[0], value = _a[1];
|
|
113
|
-
if (key.startsWith(__classPrivateFieldGet(this, _BaseStore_prefix, "f"))) {
|
|
114
|
-
map[key.replace(__classPrivateFieldGet(this, _BaseStore_prefix, "f"), '')] = value;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return [4 /*yield*/, update(map)];
|
|
118
|
-
case 1:
|
|
119
|
-
_b.sent();
|
|
120
|
-
return [2 /*return*/];
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}); }).catch(function (_a) {
|
|
124
|
-
var message = _a.message;
|
|
125
|
-
console.error("BaseStore error within allMap: ".concat(message));
|
|
126
|
-
})];
|
|
127
|
-
case 1:
|
|
128
|
-
_a.sent();
|
|
129
|
-
return [2 /*return*/];
|
|
20
|
+
}
|
|
21
|
+
async allMap(update) {
|
|
22
|
+
await chrome.storage.local.get(null).then(async (result) => {
|
|
23
|
+
lastError('all');
|
|
24
|
+
const entries = Object.entries(result);
|
|
25
|
+
const map = {};
|
|
26
|
+
for (let i = 0, count = entries.length; i < count; i++) {
|
|
27
|
+
const [key, value] = entries[i];
|
|
28
|
+
if (key.startsWith(this.#prefix)) {
|
|
29
|
+
map[key.replace(this.#prefix, '')] = value;
|
|
130
30
|
}
|
|
131
|
-
}
|
|
31
|
+
}
|
|
32
|
+
await update(map);
|
|
33
|
+
}).catch(({ message }) => {
|
|
34
|
+
console.error(`BaseStore error within allMap: ${message}`);
|
|
132
35
|
});
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return [4 /*yield*/, chrome.storage.local.get([prefixedKey]).then(function (result) { return __awaiter(_this, void 0, void 0, function () {
|
|
143
|
-
return __generator(this, function (_a) {
|
|
144
|
-
switch (_a.label) {
|
|
145
|
-
case 0:
|
|
146
|
-
lastError('get');
|
|
147
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
148
|
-
return [4 /*yield*/, update(result[prefixedKey])];
|
|
149
|
-
case 1:
|
|
150
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
151
|
-
_a.sent();
|
|
152
|
-
return [2 /*return*/];
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}); }).catch(function (_a) {
|
|
156
|
-
var message = _a.message;
|
|
157
|
-
console.error("BaseStore error within get: ".concat(message));
|
|
158
|
-
})];
|
|
159
|
-
case 1:
|
|
160
|
-
_a.sent();
|
|
161
|
-
return [2 /*return*/];
|
|
162
|
-
}
|
|
163
|
-
});
|
|
36
|
+
}
|
|
37
|
+
async get(key, update) {
|
|
38
|
+
const prefixedKey = `${this.#prefix}${key}`;
|
|
39
|
+
await chrome.storage.local.get([prefixedKey]).then(async (result) => {
|
|
40
|
+
lastError('get');
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
42
|
+
await update(result[prefixedKey]);
|
|
43
|
+
}).catch(({ message }) => {
|
|
44
|
+
console.error(`BaseStore error within get: ${message}`);
|
|
164
45
|
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return [4 /*yield*/, chrome.storage.local.remove(prefixedKey).then(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
175
|
-
var _a;
|
|
176
|
-
return __generator(this, function (_b) {
|
|
177
|
-
switch (_b.label) {
|
|
178
|
-
case 0:
|
|
179
|
-
lastError('remove');
|
|
180
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
181
|
-
_a = update;
|
|
182
|
-
if (!_a)
|
|
183
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
184
|
-
return [3 /*break*/, 2];
|
|
185
|
-
return [4 /*yield*/, update()];
|
|
186
|
-
case 1:
|
|
187
|
-
_a = (_b.sent());
|
|
188
|
-
_b.label = 2;
|
|
189
|
-
case 2:
|
|
190
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
191
|
-
_a;
|
|
192
|
-
return [2 /*return*/];
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
}); }).catch(function (_a) {
|
|
196
|
-
var message = _a.message;
|
|
197
|
-
console.error("BaseStore error within remove: ".concat(message));
|
|
198
|
-
})];
|
|
199
|
-
case 1:
|
|
200
|
-
_a.sent();
|
|
201
|
-
return [2 /*return*/];
|
|
202
|
-
}
|
|
203
|
-
});
|
|
46
|
+
}
|
|
47
|
+
async remove(key, update) {
|
|
48
|
+
const prefixedKey = `${this.#prefix}${key}`;
|
|
49
|
+
await chrome.storage.local.remove(prefixedKey).then(async () => {
|
|
50
|
+
lastError('remove');
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
52
|
+
update && await update();
|
|
53
|
+
}).catch(({ message }) => {
|
|
54
|
+
console.error(`BaseStore error within remove: ${message}`);
|
|
204
55
|
});
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
prefixedKey = "".concat(__classPrivateFieldGet(this, _BaseStore_prefix, "f")).concat(key);
|
|
215
|
-
return [4 /*yield*/, chrome.storage.local.set((_a = {}, _a[prefixedKey] = value, _a)).then(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
216
|
-
var _a;
|
|
217
|
-
return __generator(this, function (_b) {
|
|
218
|
-
switch (_b.label) {
|
|
219
|
-
case 0:
|
|
220
|
-
lastError('set');
|
|
221
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
222
|
-
_a = update;
|
|
223
|
-
if (!_a)
|
|
224
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
225
|
-
return [3 /*break*/, 2];
|
|
226
|
-
return [4 /*yield*/, update()];
|
|
227
|
-
case 1:
|
|
228
|
-
_a = (_b.sent());
|
|
229
|
-
_b.label = 2;
|
|
230
|
-
case 2:
|
|
231
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
232
|
-
_a;
|
|
233
|
-
return [2 /*return*/];
|
|
234
|
-
}
|
|
235
|
-
});
|
|
236
|
-
}); }).catch(function (_a) {
|
|
237
|
-
var message = _a.message;
|
|
238
|
-
console.error("BaseStore error within set: ".concat(message));
|
|
239
|
-
})];
|
|
240
|
-
case 1:
|
|
241
|
-
_b.sent();
|
|
242
|
-
return [2 /*return*/];
|
|
243
|
-
}
|
|
244
|
-
});
|
|
56
|
+
}
|
|
57
|
+
async set(key, value, update) {
|
|
58
|
+
const prefixedKey = `${this.#prefix}${key}`;
|
|
59
|
+
await chrome.storage.local.set({ [prefixedKey]: value }).then(async () => {
|
|
60
|
+
lastError('set');
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
62
|
+
update && await update();
|
|
63
|
+
}).catch(({ message }) => {
|
|
64
|
+
console.error(`BaseStore error within set: ${message}`);
|
|
245
65
|
});
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
}());
|
|
249
|
-
_BaseStore_prefix = new WeakMap();
|
|
250
|
-
export default BaseStore;
|
|
66
|
+
}
|
|
67
|
+
}
|
package/stores/Metadata.js
CHANGED
|
@@ -1,29 +1,9 @@
|
|
|
1
|
-
// Copyright 2019-2025 @pezkuwi/extension-base authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
var __extends = (this && this.__extends) || (function () {
|
|
4
|
-
var extendStatics = function (d, b) {
|
|
5
|
-
extendStatics = Object.setPrototypeOf ||
|
|
6
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
7
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
8
|
-
return extendStatics(d, b);
|
|
9
|
-
};
|
|
10
|
-
return function (d, b) {
|
|
11
|
-
if (typeof b !== "function" && b !== null)
|
|
12
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
13
|
-
extendStatics(d, b);
|
|
14
|
-
function __() { this.constructor = d; }
|
|
15
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
16
|
-
};
|
|
17
|
-
})();
|
|
18
1
|
import { EXTENSION_PREFIX } from '../defaults.js';
|
|
19
2
|
import BaseStore from './Base.js';
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
: 'metadata') || this;
|
|
3
|
+
export default class MetadataStore extends BaseStore {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(EXTENSION_PREFIX && EXTENSION_PREFIX !== 'polkadot{.js}'
|
|
6
|
+
? `${EXTENSION_PREFIX}metadata`
|
|
7
|
+
: 'metadata');
|
|
26
8
|
}
|
|
27
|
-
|
|
28
|
-
}(BaseStore));
|
|
29
|
-
export default MetadataStore;
|
|
9
|
+
}
|
package/stores/index.js
CHANGED
package/types.js
CHANGED
package/utils/canDerive.js
CHANGED
package/utils/getId.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
// Copyright 2019-2025 @pezkuwi/extension-base authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
1
|
import { EXTENSION_PREFIX } from '../defaults.js';
|
|
4
|
-
|
|
2
|
+
let counter = 0;
|
|
5
3
|
export function getId() {
|
|
6
|
-
return
|
|
4
|
+
return `${EXTENSION_PREFIX}.${Date.now()}.${++counter}`;
|
|
7
5
|
}
|
package/utils/index.js
CHANGED
package/utils/portUtils.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Message } from '@pezkuwi/extension-base/types';
|
|
2
|
-
import { chrome } from '@pezkuwi/extension-inject/chrome';
|
|
3
2
|
export declare function setupPort(portName: string, onMessageHandler: (data: Message['data']) => void, onDisconnectHandler: () => void): chrome.runtime.Port;
|
|
4
3
|
export declare function wakeUpServiceWorker(): Promise<{
|
|
5
4
|
status: string;
|
package/utils/portUtils.js
CHANGED
|
@@ -1,106 +1,43 @@
|
|
|
1
|
-
// Copyright 2019-2025 @pezkuwi/extension-base authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
14
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
15
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
-
function step(op) {
|
|
17
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
19
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
20
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
-
switch (op[0]) {
|
|
22
|
-
case 0: case 1: t = op; break;
|
|
23
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
-
default:
|
|
27
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
-
if (t[2]) _.ops.pop();
|
|
32
|
-
_.trys.pop(); continue;
|
|
33
|
-
}
|
|
34
|
-
op = body.call(thisArg, _);
|
|
35
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
1
|
import { chrome } from '@pezkuwi/extension-inject/chrome';
|
|
40
2
|
export function setupPort(portName, onMessageHandler, onDisconnectHandler) {
|
|
41
|
-
|
|
3
|
+
const port = chrome.runtime.connect({ name: portName });
|
|
42
4
|
port.onMessage.addListener(onMessageHandler);
|
|
43
|
-
port.onDisconnect.addListener(
|
|
44
|
-
console.log(
|
|
5
|
+
port.onDisconnect.addListener(() => {
|
|
6
|
+
console.log(`Disconnected from ${portName}`);
|
|
45
7
|
onDisconnectHandler();
|
|
46
8
|
});
|
|
47
9
|
return port;
|
|
48
10
|
}
|
|
49
|
-
export function wakeUpServiceWorker() {
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
resolve(response);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
})];
|
|
11
|
+
export async function wakeUpServiceWorker() {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
chrome.runtime.sendMessage({ type: 'wakeup' }, (response) => {
|
|
14
|
+
if (chrome.runtime.lastError) {
|
|
15
|
+
reject(new Error(chrome.runtime.lastError.message));
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
resolve(response);
|
|
19
|
+
}
|
|
62
20
|
});
|
|
63
21
|
});
|
|
64
22
|
}
|
|
65
|
-
|
|
66
|
-
export
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
case 1:
|
|
78
|
-
if (!(attempt < maxAttempts)) return [3 /*break*/, 7];
|
|
79
|
-
_a.label = 2;
|
|
80
|
-
case 2:
|
|
81
|
-
_a.trys.push([2, 4, , 6]);
|
|
82
|
-
return [4 /*yield*/, wakeUpServiceWorkerWrapper.wakeUpServiceWorker()];
|
|
83
|
-
case 3:
|
|
84
|
-
response = _a.sent();
|
|
85
|
-
if ((response === null || response === void 0 ? void 0 : response.status) === 'awake') {
|
|
86
|
-
if (!portRef) {
|
|
87
|
-
return [2 /*return*/, setupPort(portConfig.portName, portConfig.onPortMessageHandler, portConfig.onPortDisconnectHandler)];
|
|
88
|
-
}
|
|
89
|
-
return [2 /*return*/, portRef];
|
|
90
|
-
}
|
|
91
|
-
return [3 /*break*/, 6];
|
|
92
|
-
case 4:
|
|
93
|
-
error_1 = _a.sent();
|
|
94
|
-
console.error("Attempt ".concat(attempt + 1, " failed: ").concat(error_1.message));
|
|
95
|
-
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, delayMs); })];
|
|
96
|
-
case 5:
|
|
97
|
-
_a.sent();
|
|
98
|
-
return [3 /*break*/, 6];
|
|
99
|
-
case 6:
|
|
100
|
-
attempt++;
|
|
101
|
-
return [3 /*break*/, 1];
|
|
102
|
-
case 7: throw new Error('Failed to wake up the service worker and setup the port after multiple attempts');
|
|
23
|
+
export const wakeUpServiceWorkerWrapper = { wakeUpServiceWorker };
|
|
24
|
+
export async function ensurePortConnection(portRef, portConfig) {
|
|
25
|
+
const maxAttempts = 5;
|
|
26
|
+
const delayMs = 1000;
|
|
27
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
28
|
+
try {
|
|
29
|
+
const response = await wakeUpServiceWorkerWrapper.wakeUpServiceWorker();
|
|
30
|
+
if (response?.status === 'awake') {
|
|
31
|
+
if (!portRef) {
|
|
32
|
+
return setupPort(portConfig.portName, portConfig.onPortMessageHandler, portConfig.onPortDisconnectHandler);
|
|
33
|
+
}
|
|
34
|
+
return portRef;
|
|
103
35
|
}
|
|
104
|
-
}
|
|
105
|
-
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error(`Attempt ${attempt + 1} failed: ${error.message}`);
|
|
39
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
throw new Error('Failed to wake up the service worker and setup the port after multiple attempts');
|
|
106
43
|
}
|