@polkadot/extension-base 0.44.9 → 0.45.2
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/background/RequestBytesSign.d.ts +1 -1
- package/background/RequestBytesSign.js +8 -11
- package/background/RequestExtrinsicSign.d.ts +1 -1
- package/background/RequestExtrinsicSign.js +8 -11
- package/background/handlers/Extension.d.ts +2 -2
- package/background/handlers/Extension.js +460 -612
- package/background/handlers/State.d.ts +1 -1
- package/background/handlers/State.js +380 -424
- package/background/handlers/Tabs.d.ts +2 -2
- package/background/handlers/Tabs.js +178 -212
- package/background/handlers/helpers.js +8 -10
- package/background/handlers/index.d.ts +1 -1
- package/background/handlers/index.js +29 -39
- package/background/handlers/subscriptions.d.ts +1 -1
- package/background/handlers/subscriptions.js +13 -22
- package/background/types.d.ts +2 -2
- package/bundle.d.ts +1 -1
- package/bundle.js +1 -4
- package/cjs/background/RequestBytesSign.js +11 -18
- package/cjs/background/RequestExtrinsicSign.js +9 -16
- package/cjs/background/handlers/Extension.js +468 -658
- package/cjs/background/handlers/State.js +389 -460
- package/cjs/background/handlers/Tabs.js +185 -242
- package/cjs/background/handlers/helpers.js +12 -16
- package/cjs/background/handlers/index.js +37 -52
- package/cjs/background/handlers/subscriptions.js +17 -28
- package/cjs/background/types.js +2 -1
- package/cjs/bundle.js +4 -11
- package/cjs/defaults.js +3 -12
- package/cjs/detectOther.js +5 -12
- package/cjs/detectPackage.js +6 -11
- package/cjs/index.js +3 -15
- package/cjs/packageInfo.js +2 -16
- package/cjs/page/Accounts.js +19 -28
- package/cjs/page/Injected.js +19 -26
- package/cjs/page/Metadata.js +10 -18
- package/cjs/page/PostMessageProvider.js +127 -160
- package/cjs/page/Signer.js +23 -38
- package/cjs/page/index.js +44 -61
- package/cjs/page/types.js +2 -1
- package/cjs/stores/Accounts.js +17 -22
- package/cjs/stores/Base.js +56 -63
- package/cjs/stores/Metadata.js +10 -15
- package/cjs/stores/index.js +9 -19
- package/cjs/types.js +2 -1
- package/cjs/utils/canDerive.js +5 -10
- package/cjs/utils/getId.js +6 -11
- package/cjs/utils/index.js +4 -11
- package/defaults.js +1 -8
- package/detectOther.js +0 -3
- package/detectPackage.js +2 -7
- package/index.d.ts +1 -1
- package/index.js +1 -7
- package/package.json +20 -17
- package/packageInfo.js +1 -11
- package/page/Accounts.d.ts +1 -1
- package/page/Accounts.js +18 -23
- package/page/Injected.d.ts +5 -5
- package/page/Injected.js +15 -18
- package/page/Metadata.d.ts +1 -1
- package/page/Metadata.js +9 -13
- package/page/PostMessageProvider.d.ts +1 -1
- package/page/PostMessageProvider.js +124 -152
- package/page/Signer.d.ts +1 -1
- package/page/Signer.js +22 -33
- package/page/index.d.ts +2 -2
- package/page/index.js +36 -59
- package/page/types.d.ts +1 -1
- package/stores/Accounts.d.ts +1 -1
- package/stores/Accounts.js +14 -15
- package/stores/Base.js +55 -57
- package/stores/Metadata.d.ts +1 -1
- package/stores/Metadata.js +7 -8
- package/stores/index.d.ts +2 -2
- package/stores/index.js +2 -5
- package/utils/canDerive.js +1 -4
- package/utils/getId.js +2 -5
- package/utils/index.d.ts +1 -1
- package/utils/index.js +1 -4
|
@@ -1,475 +1,404 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var _stores = require("../../stores");
|
|
15
|
-
var _helpers = require("./helpers");
|
|
16
|
-
// Copyright 2019-2023 @polkadot/extension-bg authors & contributors
|
|
17
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
18
|
-
|
|
2
|
+
var _State_authUrls, _State_authRequests, _State_metaStore, _State_injectedProviders, _State_metaRequests, _State_notification, _State_providers, _State_signRequests, _State_windows, _State_connectedTabsUrl;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NotificationOptions = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const rxjs_1 = require("rxjs");
|
|
7
|
+
const getId_1 = require("@polkadot/extension-base/utils/getId");
|
|
8
|
+
const extension_chains_1 = require("@polkadot/extension-chains");
|
|
9
|
+
const defaults_1 = require("@polkadot/networks/defaults");
|
|
10
|
+
const ui_settings_1 = tslib_1.__importDefault(require("@polkadot/ui-settings"));
|
|
11
|
+
const util_1 = require("@polkadot/util");
|
|
12
|
+
const index_js_1 = require("../../stores/index.js");
|
|
13
|
+
const helpers_js_1 = require("./helpers.js");
|
|
19
14
|
const NOTIFICATION_URL = chrome.extension.getURL('notification.html');
|
|
20
15
|
const POPUP_WINDOW_OPTS = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
focused: true,
|
|
17
|
+
height: 621,
|
|
18
|
+
left: 150,
|
|
19
|
+
top: 150,
|
|
20
|
+
type: 'popup',
|
|
21
|
+
url: NOTIFICATION_URL,
|
|
22
|
+
width: 560
|
|
28
23
|
};
|
|
29
24
|
const NORMAL_WINDOW_OPTS = {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
focused: true,
|
|
26
|
+
type: 'normal',
|
|
27
|
+
url: NOTIFICATION_URL
|
|
33
28
|
};
|
|
34
|
-
|
|
35
|
-
exports.NotificationOptions = NotificationOptions;
|
|
29
|
+
var NotificationOptions;
|
|
36
30
|
(function (NotificationOptions) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
})(NotificationOptions
|
|
31
|
+
NotificationOptions[NotificationOptions["None"] = 0] = "None";
|
|
32
|
+
NotificationOptions[NotificationOptions["Normal"] = 1] = "Normal";
|
|
33
|
+
NotificationOptions[NotificationOptions["PopUp"] = 2] = "PopUp";
|
|
34
|
+
})(NotificationOptions = exports.NotificationOptions || (exports.NotificationOptions = {}));
|
|
41
35
|
const AUTH_URLS_KEY = 'authUrls';
|
|
42
36
|
const DEFAULT_AUTH_ACCOUNTS = 'defaultAuthAccounts';
|
|
43
37
|
function extractMetadata(store) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// this is not a known entry, so we will just apply it
|
|
73
|
-
defs[key] = {
|
|
74
|
-
def,
|
|
75
|
-
index: 0,
|
|
76
|
-
key
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
removals.forEach(key => store.remove(key));
|
|
81
|
-
Object.values(defs).forEach(_ref3 => {
|
|
82
|
-
let {
|
|
83
|
-
def
|
|
84
|
-
} = _ref3;
|
|
85
|
-
return (0, _extensionChains.addMetadata)(def);
|
|
38
|
+
store.allMap((map) => {
|
|
39
|
+
const knownEntries = Object.entries(defaults_1.knownGenesis);
|
|
40
|
+
const defs = {};
|
|
41
|
+
const removals = [];
|
|
42
|
+
Object
|
|
43
|
+
.entries(map)
|
|
44
|
+
.forEach(([key, def]) => {
|
|
45
|
+
const entry = knownEntries.find(([, hashes]) => hashes.includes(def.genesisHash));
|
|
46
|
+
if (entry) {
|
|
47
|
+
const [name, hashes] = entry;
|
|
48
|
+
const index = hashes.indexOf(def.genesisHash);
|
|
49
|
+
// flatten the known metadata based on the genesis index
|
|
50
|
+
// (lower is better/newer)
|
|
51
|
+
if (!defs[name] || (defs[name].index > index)) {
|
|
52
|
+
if (defs[name]) {
|
|
53
|
+
// remove the old version of the metadata
|
|
54
|
+
removals.push(defs[name].key);
|
|
55
|
+
}
|
|
56
|
+
defs[name] = { def, index, key };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// this is not a known entry, so we will just apply it
|
|
61
|
+
defs[key] = { def, index: 0, key };
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
removals.forEach((key) => store.remove(key));
|
|
65
|
+
Object.values(defs).forEach(({ def }) => (0, extension_chains_1.addMetadata)(def));
|
|
86
66
|
});
|
|
87
|
-
});
|
|
88
67
|
}
|
|
89
68
|
class State {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
id
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
69
|
+
constructor(providers = {}) {
|
|
70
|
+
_State_authUrls.set(this, {});
|
|
71
|
+
_State_authRequests.set(this, {});
|
|
72
|
+
_State_metaStore.set(this, new index_js_1.MetadataStore());
|
|
73
|
+
// Map of providers currently injected in tabs
|
|
74
|
+
_State_injectedProviders.set(this, new Map());
|
|
75
|
+
_State_metaRequests.set(this, {});
|
|
76
|
+
_State_notification.set(this, ui_settings_1.default.notification);
|
|
77
|
+
// Map of all providers exposed by the extension, they are retrievable by key
|
|
78
|
+
_State_providers.set(this, void 0);
|
|
79
|
+
_State_signRequests.set(this, {});
|
|
80
|
+
_State_windows.set(this, []);
|
|
81
|
+
_State_connectedTabsUrl.set(this, []);
|
|
82
|
+
this.authSubject = new rxjs_1.BehaviorSubject([]);
|
|
83
|
+
this.metaSubject = new rxjs_1.BehaviorSubject([]);
|
|
84
|
+
this.signSubject = new rxjs_1.BehaviorSubject([]);
|
|
85
|
+
this.defaultAuthAccountSelection = [];
|
|
86
|
+
this.authComplete = (id, resolve, reject) => {
|
|
87
|
+
const complete = (authorizedAccounts = []) => {
|
|
88
|
+
const { idStr, request: { origin }, url } = tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f")[id];
|
|
89
|
+
tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[this.stripUrl(url)] = {
|
|
90
|
+
authorizedAccounts,
|
|
91
|
+
count: 0,
|
|
92
|
+
id: idStr,
|
|
93
|
+
origin,
|
|
94
|
+
url
|
|
95
|
+
};
|
|
96
|
+
this.saveCurrentAuthList();
|
|
97
|
+
this.updateDefaultAuthAccounts(authorizedAccounts);
|
|
98
|
+
delete tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f")[id];
|
|
99
|
+
this.updateIconAuth(true);
|
|
100
|
+
};
|
|
101
|
+
return {
|
|
102
|
+
reject: (error) => {
|
|
103
|
+
complete();
|
|
104
|
+
reject(error);
|
|
105
|
+
},
|
|
106
|
+
resolve: ({ authorizedAccounts, result }) => {
|
|
107
|
+
complete(authorizedAccounts);
|
|
108
|
+
resolve({ authorizedAccounts, result });
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
this.metaComplete = (id, resolve, reject) => {
|
|
113
|
+
const complete = () => {
|
|
114
|
+
delete tslib_1.__classPrivateFieldGet(this, _State_metaRequests, "f")[id];
|
|
115
|
+
this.updateIconMeta(true);
|
|
116
|
+
};
|
|
117
|
+
return {
|
|
118
|
+
reject: (error) => {
|
|
119
|
+
complete();
|
|
120
|
+
reject(error);
|
|
121
|
+
},
|
|
122
|
+
resolve: (result) => {
|
|
123
|
+
complete();
|
|
124
|
+
resolve(result);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
this.signComplete = (id, resolve, reject) => {
|
|
129
|
+
const complete = () => {
|
|
130
|
+
delete tslib_1.__classPrivateFieldGet(this, _State_signRequests, "f")[id];
|
|
131
|
+
this.updateIconSign(true);
|
|
132
|
+
};
|
|
133
|
+
return {
|
|
134
|
+
reject: (error) => {
|
|
135
|
+
complete();
|
|
136
|
+
reject(error);
|
|
137
|
+
},
|
|
138
|
+
resolve: (result) => {
|
|
139
|
+
complete();
|
|
140
|
+
resolve(result);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
tslib_1.__classPrivateFieldSet(this, _State_providers, providers, "f");
|
|
145
|
+
extractMetadata(tslib_1.__classPrivateFieldGet(this, _State_metaStore, "f"));
|
|
146
|
+
// retrieve previously set authorizations
|
|
147
|
+
const authString = localStorage.getItem(AUTH_URLS_KEY) || '{}';
|
|
148
|
+
const previousAuth = JSON.parse(authString);
|
|
149
|
+
tslib_1.__classPrivateFieldSet(this, _State_authUrls, previousAuth, "f");
|
|
150
|
+
// retrieve previously set default auth accounts
|
|
151
|
+
const defaultAuthString = localStorage.getItem(DEFAULT_AUTH_ACCOUNTS) || '[]';
|
|
152
|
+
const previousDefaultAuth = JSON.parse(defaultAuthString);
|
|
153
|
+
this.defaultAuthAccountSelection = previousDefaultAuth;
|
|
154
|
+
}
|
|
155
|
+
get knownMetadata() {
|
|
156
|
+
return (0, extension_chains_1.knownMetadata)();
|
|
157
|
+
}
|
|
158
|
+
get numAuthRequests() {
|
|
159
|
+
return Object.keys(tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f")).length;
|
|
160
|
+
}
|
|
161
|
+
get numMetaRequests() {
|
|
162
|
+
return Object.keys(tslib_1.__classPrivateFieldGet(this, _State_metaRequests, "f")).length;
|
|
163
|
+
}
|
|
164
|
+
get numSignRequests() {
|
|
165
|
+
return Object.keys(tslib_1.__classPrivateFieldGet(this, _State_signRequests, "f")).length;
|
|
166
|
+
}
|
|
167
|
+
get allAuthRequests() {
|
|
168
|
+
return Object
|
|
169
|
+
.values(tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f"))
|
|
170
|
+
.map(({ id, request, url }) => ({ id, request, url }));
|
|
171
|
+
}
|
|
172
|
+
get allMetaRequests() {
|
|
173
|
+
return Object
|
|
174
|
+
.values(tslib_1.__classPrivateFieldGet(this, _State_metaRequests, "f"))
|
|
175
|
+
.map(({ id, request, url }) => ({ id, request, url }));
|
|
176
|
+
}
|
|
177
|
+
get allSignRequests() {
|
|
178
|
+
return Object
|
|
179
|
+
.values(tslib_1.__classPrivateFieldGet(this, _State_signRequests, "f"))
|
|
180
|
+
.map(({ account, id, request, url }) => ({ account, id, request, url }));
|
|
181
|
+
}
|
|
182
|
+
get authUrls() {
|
|
183
|
+
return tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f");
|
|
184
|
+
}
|
|
185
|
+
popupClose() {
|
|
186
|
+
tslib_1.__classPrivateFieldGet(this, _State_windows, "f").forEach((id) => (0, helpers_js_1.withErrorLog)(() => chrome.windows.remove(id)));
|
|
187
|
+
tslib_1.__classPrivateFieldSet(this, _State_windows, [], "f");
|
|
188
|
+
}
|
|
189
|
+
popupOpen() {
|
|
190
|
+
tslib_1.__classPrivateFieldGet(this, _State_notification, "f") !== 'extension' &&
|
|
191
|
+
chrome.windows.create(tslib_1.__classPrivateFieldGet(this, _State_notification, "f") === 'window'
|
|
192
|
+
? NORMAL_WINDOW_OPTS
|
|
193
|
+
: POPUP_WINDOW_OPTS, (window) => {
|
|
194
|
+
if (window) {
|
|
195
|
+
tslib_1.__classPrivateFieldGet(this, _State_windows, "f").push(window.id || 0);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
udateCurrentTabsUrl(urls) {
|
|
200
|
+
const connectedTabs = urls.map((url) => {
|
|
201
|
+
let strippedUrl = '';
|
|
202
|
+
// the assert in stripUrl may throw for new tabs with "chrome://newtab/"
|
|
203
|
+
try {
|
|
204
|
+
strippedUrl = this.stripUrl(url);
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
console.error(e);
|
|
208
|
+
}
|
|
209
|
+
// return the stripped url only if this website is known
|
|
210
|
+
return !!strippedUrl && this.authUrls[strippedUrl]
|
|
211
|
+
? strippedUrl
|
|
212
|
+
: undefined;
|
|
213
|
+
})
|
|
214
|
+
.filter((value) => !!value);
|
|
215
|
+
tslib_1.__classPrivateFieldSet(this, _State_connectedTabsUrl, connectedTabs, "f");
|
|
216
|
+
}
|
|
217
|
+
getConnectedTabsUrl() {
|
|
218
|
+
return tslib_1.__classPrivateFieldGet(this, _State_connectedTabsUrl, "f");
|
|
219
|
+
}
|
|
220
|
+
deleteAuthRequest(requestId) {
|
|
221
|
+
delete tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f")[requestId];
|
|
222
|
+
this.updateIconAuth(true);
|
|
223
|
+
}
|
|
224
|
+
saveCurrentAuthList() {
|
|
225
|
+
localStorage.setItem(AUTH_URLS_KEY, JSON.stringify(tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")));
|
|
226
|
+
}
|
|
227
|
+
saveDefaultAuthAccounts() {
|
|
228
|
+
localStorage.setItem(DEFAULT_AUTH_ACCOUNTS, JSON.stringify(this.defaultAuthAccountSelection));
|
|
229
|
+
}
|
|
230
|
+
updateDefaultAuthAccounts(newList) {
|
|
231
|
+
this.defaultAuthAccountSelection = newList;
|
|
232
|
+
this.saveDefaultAuthAccounts();
|
|
233
|
+
}
|
|
234
|
+
stripUrl(url) {
|
|
235
|
+
(0, util_1.assert)(url && (url.startsWith('http:') || url.startsWith('https:') || url.startsWith('ipfs:') || url.startsWith('ipns:')), `Invalid url ${url}, expected to start with http: or https: or ipfs: or ipns:`);
|
|
236
|
+
const parts = url.split('/');
|
|
237
|
+
return parts[2];
|
|
238
|
+
}
|
|
239
|
+
updateIcon(shouldClose) {
|
|
240
|
+
const authCount = this.numAuthRequests;
|
|
241
|
+
const metaCount = this.numMetaRequests;
|
|
242
|
+
const signCount = this.numSignRequests;
|
|
243
|
+
const text = (authCount
|
|
244
|
+
? 'Auth'
|
|
245
|
+
: metaCount
|
|
246
|
+
? 'Meta'
|
|
247
|
+
: (signCount ? `${signCount}` : ''));
|
|
248
|
+
(0, helpers_js_1.withErrorLog)(() => chrome.browserAction.setBadgeText({ text }));
|
|
249
|
+
if (shouldClose && text === '') {
|
|
250
|
+
this.popupClose();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
removeAuthorization(url) {
|
|
254
|
+
const entry = tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[url];
|
|
255
|
+
(0, util_1.assert)(entry, `The source ${url} is not known`);
|
|
256
|
+
delete tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[url];
|
|
257
|
+
this.saveCurrentAuthList();
|
|
258
|
+
return tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f");
|
|
259
|
+
}
|
|
260
|
+
updateIconAuth(shouldClose) {
|
|
261
|
+
this.authSubject.next(this.allAuthRequests);
|
|
262
|
+
this.updateIcon(shouldClose);
|
|
263
|
+
}
|
|
264
|
+
updateIconMeta(shouldClose) {
|
|
265
|
+
this.metaSubject.next(this.allMetaRequests);
|
|
266
|
+
this.updateIcon(shouldClose);
|
|
267
|
+
}
|
|
268
|
+
updateIconSign(shouldClose) {
|
|
269
|
+
this.signSubject.next(this.allSignRequests);
|
|
270
|
+
this.updateIcon(shouldClose);
|
|
271
|
+
}
|
|
272
|
+
updateAuthorizedAccounts(authorizedAccountDiff) {
|
|
273
|
+
authorizedAccountDiff.forEach(([url, authorizedAccountDiff]) => {
|
|
274
|
+
tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[url].authorizedAccounts = authorizedAccountDiff;
|
|
230
275
|
});
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const id = (0, _getId.getId)();
|
|
358
|
-
this.#authRequests[id] = {
|
|
359
|
-
...this.authComplete(id, resolve, reject),
|
|
360
|
-
id,
|
|
361
|
-
idStr,
|
|
362
|
-
request,
|
|
363
|
-
url
|
|
364
|
-
};
|
|
365
|
-
this.updateIconAuth();
|
|
366
|
-
this.popupOpen();
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
ensureUrlAuthorized(url) {
|
|
370
|
-
const entry = this.#authUrls[this.stripUrl(url)];
|
|
371
|
-
(0, _util.assert)(entry, `The source ${url} has not been enabled yet`);
|
|
372
|
-
return true;
|
|
373
|
-
}
|
|
374
|
-
injectMetadata(url, request) {
|
|
375
|
-
return new Promise((resolve, reject) => {
|
|
376
|
-
const id = (0, _getId.getId)();
|
|
377
|
-
this.#metaRequests[id] = {
|
|
378
|
-
...this.metaComplete(id, resolve, reject),
|
|
379
|
-
id,
|
|
380
|
-
request,
|
|
381
|
-
url
|
|
382
|
-
};
|
|
383
|
-
this.updateIconMeta();
|
|
384
|
-
this.popupOpen();
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
getAuthRequest(id) {
|
|
388
|
-
return this.#authRequests[id];
|
|
389
|
-
}
|
|
390
|
-
getMetaRequest(id) {
|
|
391
|
-
return this.#metaRequests[id];
|
|
392
|
-
}
|
|
393
|
-
getSignRequest(id) {
|
|
394
|
-
return this.#signRequests[id];
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// List all providers the extension is exposing
|
|
398
|
-
rpcListProviders() {
|
|
399
|
-
return Promise.resolve(Object.keys(this.#providers).reduce((acc, key) => {
|
|
400
|
-
acc[key] = this.#providers[key].meta;
|
|
401
|
-
return acc;
|
|
402
|
-
}, {}));
|
|
403
|
-
}
|
|
404
|
-
rpcSend(request, port) {
|
|
405
|
-
const provider = this.#injectedProviders.get(port);
|
|
406
|
-
(0, _util.assert)(provider, 'Cannot call pub(rpc.subscribe) before provider is set');
|
|
407
|
-
return provider.send(request.method, request.params);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
// Start a provider, return its meta
|
|
411
|
-
rpcStartProvider(key, port) {
|
|
412
|
-
(0, _util.assert)(Object.keys(this.#providers).includes(key), `Provider ${key} is not exposed by extension`);
|
|
413
|
-
if (this.#injectedProviders.get(port)) {
|
|
414
|
-
return Promise.resolve(this.#providers[key].meta);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Instantiate the provider
|
|
418
|
-
this.#injectedProviders.set(port, this.#providers[key].start());
|
|
419
|
-
|
|
420
|
-
// Close provider connection when page is closed
|
|
421
|
-
port.onDisconnect.addListener(() => {
|
|
422
|
-
const provider = this.#injectedProviders.get(port);
|
|
423
|
-
if (provider) {
|
|
424
|
-
(0, _helpers.withErrorLog)(() => provider.disconnect());
|
|
425
|
-
}
|
|
426
|
-
this.#injectedProviders.delete(port);
|
|
427
|
-
});
|
|
428
|
-
return Promise.resolve(this.#providers[key].meta);
|
|
429
|
-
}
|
|
430
|
-
rpcSubscribe(_ref9, cb, port) {
|
|
431
|
-
let {
|
|
432
|
-
method,
|
|
433
|
-
params,
|
|
434
|
-
type
|
|
435
|
-
} = _ref9;
|
|
436
|
-
const provider = this.#injectedProviders.get(port);
|
|
437
|
-
(0, _util.assert)(provider, 'Cannot call pub(rpc.subscribe) before provider is set');
|
|
438
|
-
return provider.subscribe(type, method, params, cb);
|
|
439
|
-
}
|
|
440
|
-
rpcSubscribeConnected(_request, cb, port) {
|
|
441
|
-
const provider = this.#injectedProviders.get(port);
|
|
442
|
-
(0, _util.assert)(provider, 'Cannot call pub(rpc.subscribeConnected) before provider is set');
|
|
443
|
-
cb(null, provider.isConnected); // Immediately send back current isConnected
|
|
444
|
-
provider.on('connected', () => cb(null, true));
|
|
445
|
-
provider.on('disconnected', () => cb(null, false));
|
|
446
|
-
}
|
|
447
|
-
rpcUnsubscribe(request, port) {
|
|
448
|
-
const provider = this.#injectedProviders.get(port);
|
|
449
|
-
(0, _util.assert)(provider, 'Cannot call pub(rpc.unsubscribe) before provider is set');
|
|
450
|
-
return provider.unsubscribe(request.type, request.method, request.subscriptionId);
|
|
451
|
-
}
|
|
452
|
-
saveMetadata(meta) {
|
|
453
|
-
this.#metaStore.set(meta.genesisHash, meta);
|
|
454
|
-
(0, _extensionChains.addMetadata)(meta);
|
|
455
|
-
}
|
|
456
|
-
setNotification(notification) {
|
|
457
|
-
this.#notification = notification;
|
|
458
|
-
return true;
|
|
459
|
-
}
|
|
460
|
-
sign(url, request, account) {
|
|
461
|
-
const id = (0, _getId.getId)();
|
|
462
|
-
return new Promise((resolve, reject) => {
|
|
463
|
-
this.#signRequests[id] = {
|
|
464
|
-
...this.signComplete(id, resolve, reject),
|
|
465
|
-
account,
|
|
466
|
-
id,
|
|
467
|
-
request,
|
|
468
|
-
url
|
|
469
|
-
};
|
|
470
|
-
this.updateIconSign();
|
|
471
|
-
this.popupOpen();
|
|
472
|
-
});
|
|
473
|
-
}
|
|
276
|
+
this.saveCurrentAuthList();
|
|
277
|
+
}
|
|
278
|
+
async authorizeUrl(url, request) {
|
|
279
|
+
const idStr = this.stripUrl(url);
|
|
280
|
+
// Do not enqueue duplicate authorization requests.
|
|
281
|
+
const isDuplicate = Object
|
|
282
|
+
.values(tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f"))
|
|
283
|
+
.some((request) => request.idStr === idStr);
|
|
284
|
+
(0, util_1.assert)(!isDuplicate, `The source ${url} has a pending authorization request`);
|
|
285
|
+
if (tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[idStr]) {
|
|
286
|
+
// this url was seen in the past
|
|
287
|
+
(0, util_1.assert)(tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[idStr].authorizedAccounts || tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[idStr].isAllowed, `The source ${url} is not allowed to interact with this extension`);
|
|
288
|
+
return {
|
|
289
|
+
authorizedAccounts: [],
|
|
290
|
+
result: false
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
return new Promise((resolve, reject) => {
|
|
294
|
+
const id = (0, getId_1.getId)();
|
|
295
|
+
tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f")[id] = {
|
|
296
|
+
...this.authComplete(id, resolve, reject),
|
|
297
|
+
id,
|
|
298
|
+
idStr,
|
|
299
|
+
request,
|
|
300
|
+
url
|
|
301
|
+
};
|
|
302
|
+
this.updateIconAuth();
|
|
303
|
+
this.popupOpen();
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
ensureUrlAuthorized(url) {
|
|
307
|
+
const entry = tslib_1.__classPrivateFieldGet(this, _State_authUrls, "f")[this.stripUrl(url)];
|
|
308
|
+
(0, util_1.assert)(entry, `The source ${url} has not been enabled yet`);
|
|
309
|
+
return true;
|
|
310
|
+
}
|
|
311
|
+
injectMetadata(url, request) {
|
|
312
|
+
return new Promise((resolve, reject) => {
|
|
313
|
+
const id = (0, getId_1.getId)();
|
|
314
|
+
tslib_1.__classPrivateFieldGet(this, _State_metaRequests, "f")[id] = {
|
|
315
|
+
...this.metaComplete(id, resolve, reject),
|
|
316
|
+
id,
|
|
317
|
+
request,
|
|
318
|
+
url
|
|
319
|
+
};
|
|
320
|
+
this.updateIconMeta();
|
|
321
|
+
this.popupOpen();
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
getAuthRequest(id) {
|
|
325
|
+
return tslib_1.__classPrivateFieldGet(this, _State_authRequests, "f")[id];
|
|
326
|
+
}
|
|
327
|
+
getMetaRequest(id) {
|
|
328
|
+
return tslib_1.__classPrivateFieldGet(this, _State_metaRequests, "f")[id];
|
|
329
|
+
}
|
|
330
|
+
getSignRequest(id) {
|
|
331
|
+
return tslib_1.__classPrivateFieldGet(this, _State_signRequests, "f")[id];
|
|
332
|
+
}
|
|
333
|
+
// List all providers the extension is exposing
|
|
334
|
+
rpcListProviders() {
|
|
335
|
+
return Promise.resolve(Object.keys(tslib_1.__classPrivateFieldGet(this, _State_providers, "f")).reduce((acc, key) => {
|
|
336
|
+
acc[key] = tslib_1.__classPrivateFieldGet(this, _State_providers, "f")[key].meta;
|
|
337
|
+
return acc;
|
|
338
|
+
}, {}));
|
|
339
|
+
}
|
|
340
|
+
rpcSend(request, port) {
|
|
341
|
+
const provider = tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").get(port);
|
|
342
|
+
(0, util_1.assert)(provider, 'Cannot call pub(rpc.subscribe) before provider is set');
|
|
343
|
+
return provider.send(request.method, request.params);
|
|
344
|
+
}
|
|
345
|
+
// Start a provider, return its meta
|
|
346
|
+
rpcStartProvider(key, port) {
|
|
347
|
+
(0, util_1.assert)(Object.keys(tslib_1.__classPrivateFieldGet(this, _State_providers, "f")).includes(key), `Provider ${key} is not exposed by extension`);
|
|
348
|
+
if (tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").get(port)) {
|
|
349
|
+
return Promise.resolve(tslib_1.__classPrivateFieldGet(this, _State_providers, "f")[key].meta);
|
|
350
|
+
}
|
|
351
|
+
// Instantiate the provider
|
|
352
|
+
tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").set(port, tslib_1.__classPrivateFieldGet(this, _State_providers, "f")[key].start());
|
|
353
|
+
// Close provider connection when page is closed
|
|
354
|
+
port.onDisconnect.addListener(() => {
|
|
355
|
+
const provider = tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").get(port);
|
|
356
|
+
if (provider) {
|
|
357
|
+
(0, helpers_js_1.withErrorLog)(() => provider.disconnect());
|
|
358
|
+
}
|
|
359
|
+
tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").delete(port);
|
|
360
|
+
});
|
|
361
|
+
return Promise.resolve(tslib_1.__classPrivateFieldGet(this, _State_providers, "f")[key].meta);
|
|
362
|
+
}
|
|
363
|
+
rpcSubscribe({ method, params, type }, cb, port) {
|
|
364
|
+
const provider = tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").get(port);
|
|
365
|
+
(0, util_1.assert)(provider, 'Cannot call pub(rpc.subscribe) before provider is set');
|
|
366
|
+
return provider.subscribe(type, method, params, cb);
|
|
367
|
+
}
|
|
368
|
+
rpcSubscribeConnected(_request, cb, port) {
|
|
369
|
+
const provider = tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").get(port);
|
|
370
|
+
(0, util_1.assert)(provider, 'Cannot call pub(rpc.subscribeConnected) before provider is set');
|
|
371
|
+
cb(null, provider.isConnected); // Immediately send back current isConnected
|
|
372
|
+
provider.on('connected', () => cb(null, true));
|
|
373
|
+
provider.on('disconnected', () => cb(null, false));
|
|
374
|
+
}
|
|
375
|
+
rpcUnsubscribe(request, port) {
|
|
376
|
+
const provider = tslib_1.__classPrivateFieldGet(this, _State_injectedProviders, "f").get(port);
|
|
377
|
+
(0, util_1.assert)(provider, 'Cannot call pub(rpc.unsubscribe) before provider is set');
|
|
378
|
+
return provider.unsubscribe(request.type, request.method, request.subscriptionId);
|
|
379
|
+
}
|
|
380
|
+
saveMetadata(meta) {
|
|
381
|
+
tslib_1.__classPrivateFieldGet(this, _State_metaStore, "f").set(meta.genesisHash, meta);
|
|
382
|
+
(0, extension_chains_1.addMetadata)(meta);
|
|
383
|
+
}
|
|
384
|
+
setNotification(notification) {
|
|
385
|
+
tslib_1.__classPrivateFieldSet(this, _State_notification, notification, "f");
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
sign(url, request, account) {
|
|
389
|
+
const id = (0, getId_1.getId)();
|
|
390
|
+
return new Promise((resolve, reject) => {
|
|
391
|
+
tslib_1.__classPrivateFieldGet(this, _State_signRequests, "f")[id] = {
|
|
392
|
+
...this.signComplete(id, resolve, reject),
|
|
393
|
+
account,
|
|
394
|
+
id,
|
|
395
|
+
request,
|
|
396
|
+
url
|
|
397
|
+
};
|
|
398
|
+
this.updateIconSign();
|
|
399
|
+
this.popupOpen();
|
|
400
|
+
});
|
|
401
|
+
}
|
|
474
402
|
}
|
|
475
|
-
exports.default = State;
|
|
403
|
+
exports.default = State;
|
|
404
|
+
_State_authUrls = new WeakMap(), _State_authRequests = new WeakMap(), _State_metaStore = new WeakMap(), _State_injectedProviders = new WeakMap(), _State_metaRequests = new WeakMap(), _State_notification = new WeakMap(), _State_providers = new WeakMap(), _State_signRequests = new WeakMap(), _State_windows = new WeakMap(), _State_connectedTabsUrl = new WeakMap();
|