@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/page/Injected.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
// Copyright 2019-2025 @pezkuwi/extension-base authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
1
|
import Accounts from './Accounts.js';
|
|
4
2
|
import Metadata from './Metadata.js';
|
|
5
3
|
import PostMessageProvider from './PostMessageProvider.js';
|
|
6
4
|
import Signer from './Signer.js';
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export default class {
|
|
6
|
+
accounts;
|
|
7
|
+
metadata;
|
|
8
|
+
provider;
|
|
9
|
+
signer;
|
|
10
|
+
constructor(sendRequest) {
|
|
9
11
|
this.accounts = new Accounts(sendRequest);
|
|
10
12
|
this.metadata = new Metadata(sendRequest);
|
|
11
13
|
this.provider = new PostMessageProvider(sendRequest);
|
|
12
14
|
this.signer = new Signer(sendRequest);
|
|
13
|
-
setInterval(
|
|
14
|
-
sendRequest('pub(ping)', null).catch(
|
|
15
|
+
setInterval(() => {
|
|
16
|
+
sendRequest('pub(ping)', null).catch(() => {
|
|
15
17
|
console.error('Extension unavailable, ping failed');
|
|
16
18
|
});
|
|
17
|
-
},
|
|
19
|
+
}, 5_000 + Math.floor(Math.random() * 5_000));
|
|
18
20
|
}
|
|
19
|
-
|
|
20
|
-
}());
|
|
21
|
-
export default default_1;
|
|
21
|
+
}
|
package/page/Metadata.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var sendRequest;
|
|
5
|
-
var Metadata = /** @class */ (function () {
|
|
6
|
-
function Metadata(_sendRequest) {
|
|
1
|
+
let sendRequest;
|
|
2
|
+
export default class Metadata {
|
|
3
|
+
constructor(_sendRequest) {
|
|
7
4
|
sendRequest = _sendRequest;
|
|
8
5
|
}
|
|
9
|
-
|
|
6
|
+
get() {
|
|
10
7
|
return sendRequest('pub(metadata.list)');
|
|
11
|
-
}
|
|
12
|
-
|
|
8
|
+
}
|
|
9
|
+
provide(definition) {
|
|
13
10
|
return sendRequest('pub(metadata.provide)', definition);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
}());
|
|
17
|
-
export default Metadata;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -1,234 +1,132 @@
|
|
|
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
|
-
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 _PostMessageProvider_eventemitter, _PostMessageProvider_isConnected, _PostMessageProvider_subscriptions;
|
|
51
1
|
import { EventEmitter } from 'eventemitter3';
|
|
52
2
|
import { isUndefined, logger } from '@pezkuwi/util';
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var sendRequest;
|
|
3
|
+
const l = logger('PostMessageProvider');
|
|
4
|
+
let sendRequest;
|
|
56
5
|
/**
|
|
57
6
|
* @name PostMessageProvider
|
|
58
7
|
*
|
|
59
8
|
* @description Extension provider to be used by dapps
|
|
60
9
|
*/
|
|
61
|
-
|
|
10
|
+
export default class PostMessageProvider {
|
|
11
|
+
#eventemitter;
|
|
12
|
+
// Whether or not the actual extension background provider is connected
|
|
13
|
+
#isConnected = false;
|
|
14
|
+
// Subscription IDs are (historically) not guaranteed to be globally unique;
|
|
15
|
+
// only unique for a given subscription method; which is why we identify
|
|
16
|
+
// the subscriptions based on subscription id + type
|
|
17
|
+
#subscriptions = {}; // {[(type,subscriptionId)]: callback}
|
|
62
18
|
/**
|
|
63
19
|
* @param {function} sendRequest The function to be called to send requests to the node
|
|
64
20
|
* @param {function} subscriptionNotificationHandler Channel for receiving subscription messages
|
|
65
21
|
*/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// Whether or not the actual extension background provider is connected
|
|
69
|
-
_PostMessageProvider_isConnected.set(this, false);
|
|
70
|
-
// Subscription IDs are (historically) not guaranteed to be globally unique;
|
|
71
|
-
// only unique for a given subscription method; which is why we identify
|
|
72
|
-
// the subscriptions based on subscription id + type
|
|
73
|
-
_PostMessageProvider_subscriptions.set(this, {}); // {[(type,subscriptionId)]: callback}
|
|
74
|
-
__classPrivateFieldSet(this, _PostMessageProvider_eventemitter, new EventEmitter(), "f");
|
|
22
|
+
constructor(_sendRequest) {
|
|
23
|
+
this.#eventemitter = new EventEmitter();
|
|
75
24
|
sendRequest = _sendRequest;
|
|
76
25
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
enumerable: false,
|
|
82
|
-
configurable: true
|
|
83
|
-
});
|
|
26
|
+
get isClonable() {
|
|
27
|
+
return !!true;
|
|
28
|
+
}
|
|
84
29
|
/**
|
|
85
30
|
* @description Returns a clone of the object
|
|
86
31
|
*/
|
|
87
|
-
|
|
32
|
+
clone() {
|
|
88
33
|
return new PostMessageProvider(sendRequest);
|
|
89
|
-
}
|
|
34
|
+
}
|
|
90
35
|
/**
|
|
91
36
|
* @description Manually disconnect from the connection, clearing autoconnect logic
|
|
92
37
|
*/
|
|
93
38
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
99
|
-
return [2 /*return*/];
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
};
|
|
39
|
+
async connect() {
|
|
40
|
+
// FIXME This should see if the extension's state's provider can disconnect
|
|
41
|
+
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
42
|
+
}
|
|
103
43
|
/**
|
|
104
44
|
* @description Manually disconnect from the connection, clearing autoconnect logic
|
|
105
45
|
*/
|
|
106
46
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
});
|
|
127
|
-
Object.defineProperty(PostMessageProvider.prototype, "isConnected", {
|
|
128
|
-
/**
|
|
129
|
-
* @summary Whether the node is connected or not.
|
|
130
|
-
* @return {boolean} true if connected
|
|
131
|
-
*/
|
|
132
|
-
get: function () {
|
|
133
|
-
return __classPrivateFieldGet(this, _PostMessageProvider_isConnected, "f");
|
|
134
|
-
},
|
|
135
|
-
enumerable: false,
|
|
136
|
-
configurable: true
|
|
137
|
-
});
|
|
138
|
-
PostMessageProvider.prototype.listProviders = function () {
|
|
47
|
+
async disconnect() {
|
|
48
|
+
// FIXME This should see if the extension's state's provider can disconnect
|
|
49
|
+
console.error('PostMessageProvider.disconnect() is not implemented.');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @summary `true` when this provider supports subscriptions
|
|
53
|
+
*/
|
|
54
|
+
get hasSubscriptions() {
|
|
55
|
+
// FIXME This should see if the extension's state's provider has subscriptions
|
|
56
|
+
return !!true;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @summary Whether the node is connected or not.
|
|
60
|
+
* @return {boolean} true if connected
|
|
61
|
+
*/
|
|
62
|
+
get isConnected() {
|
|
63
|
+
return this.#isConnected;
|
|
64
|
+
}
|
|
65
|
+
listProviders() {
|
|
139
66
|
return sendRequest('pub(rpc.listProviders)', undefined);
|
|
140
|
-
}
|
|
67
|
+
}
|
|
141
68
|
/**
|
|
142
69
|
* @summary Listens on events after having subscribed using the [[subscribe]] function.
|
|
143
70
|
* @param {ProviderInterfaceEmitted} type Event
|
|
144
71
|
* @param {ProviderInterfaceEmitCb} sub Callback
|
|
145
72
|
* @return unsubscribe function
|
|
146
73
|
*/
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
__classPrivateFieldGet(_this, _PostMessageProvider_eventemitter, "f").removeListener(type, sub);
|
|
74
|
+
on(type, sub) {
|
|
75
|
+
this.#eventemitter.on(type, sub);
|
|
76
|
+
return () => {
|
|
77
|
+
this.#eventemitter.removeListener(type, sub);
|
|
152
78
|
};
|
|
153
|
-
}
|
|
79
|
+
}
|
|
154
80
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
case 0:
|
|
161
|
-
if (!subscription) return [3 /*break*/, 2];
|
|
162
|
-
callback = subscription.callback, type = subscription.type;
|
|
163
|
-
return [4 /*yield*/, sendRequest('pub(rpc.subscribe)', { method: method, params: params, type: type }, function (res) {
|
|
164
|
-
subscription.callback(null, res);
|
|
165
|
-
})];
|
|
166
|
-
case 1:
|
|
167
|
-
id = _a.sent();
|
|
168
|
-
__classPrivateFieldGet(this, _PostMessageProvider_subscriptions, "f")["".concat(type, "::").concat(id)] = callback;
|
|
169
|
-
return [2 /*return*/, id];
|
|
170
|
-
case 2: return [2 /*return*/, sendRequest('pub(rpc.send)', { method: method, params: params })];
|
|
171
|
-
}
|
|
81
|
+
async send(method, params, _, subscription) {
|
|
82
|
+
if (subscription) {
|
|
83
|
+
const { callback, type } = subscription;
|
|
84
|
+
const id = await sendRequest('pub(rpc.subscribe)', { method, params, type }, (res) => {
|
|
85
|
+
subscription.callback(null, res);
|
|
172
86
|
});
|
|
173
|
-
|
|
174
|
-
|
|
87
|
+
this.#subscriptions[`${type}::${id}`] = callback;
|
|
88
|
+
return id;
|
|
89
|
+
}
|
|
90
|
+
return sendRequest('pub(rpc.send)', { method, params });
|
|
91
|
+
}
|
|
175
92
|
/**
|
|
176
93
|
* @summary Spawn a provider on the extension background.
|
|
177
94
|
*/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
__classPrivateFieldSet(_this, _PostMessageProvider_isConnected, connected, "f");
|
|
194
|
-
if (connected) {
|
|
195
|
-
__classPrivateFieldGet(_this, _PostMessageProvider_eventemitter, "f").emit('connected');
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
__classPrivateFieldGet(_this, _PostMessageProvider_eventemitter, "f").emit('disconnected');
|
|
199
|
-
}
|
|
200
|
-
return true;
|
|
201
|
-
});
|
|
202
|
-
return [2 /*return*/, meta];
|
|
203
|
-
}
|
|
204
|
-
});
|
|
95
|
+
async startProvider(key) {
|
|
96
|
+
// Disconnect from the previous provider
|
|
97
|
+
this.#isConnected = false;
|
|
98
|
+
this.#eventemitter.emit('disconnected');
|
|
99
|
+
const meta = await sendRequest('pub(rpc.startProvider)', key);
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
101
|
+
sendRequest('pub(rpc.subscribeConnected)', null, (connected) => {
|
|
102
|
+
this.#isConnected = connected;
|
|
103
|
+
if (connected) {
|
|
104
|
+
this.#eventemitter.emit('connected');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.#eventemitter.emit('disconnected');
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
205
110
|
});
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
111
|
+
return meta;
|
|
112
|
+
}
|
|
113
|
+
subscribe(type, method, params, callback) {
|
|
114
|
+
return this.send(method, params, false, { callback, type });
|
|
115
|
+
}
|
|
210
116
|
/**
|
|
211
117
|
* @summary Allows unsubscribing to subscriptions made with [[subscribe]].
|
|
212
118
|
*/
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
return [2 /*return*/, this.send(method, [id])];
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
};
|
|
231
|
-
return PostMessageProvider;
|
|
232
|
-
}());
|
|
233
|
-
_PostMessageProvider_eventemitter = new WeakMap(), _PostMessageProvider_isConnected = new WeakMap(), _PostMessageProvider_subscriptions = new WeakMap();
|
|
234
|
-
export default PostMessageProvider;
|
|
119
|
+
async unsubscribe(type, method, id) {
|
|
120
|
+
const subscription = `${type}::${id}`;
|
|
121
|
+
// FIXME This now could happen with re-subscriptions. The issue is that with a re-sub
|
|
122
|
+
// the assigned id now does not match what the API user originally received. It has
|
|
123
|
+
// a slight complication in solving - since we cannot rely on the send id, but rather
|
|
124
|
+
// need to find the actual subscription id to map it
|
|
125
|
+
if (isUndefined(this.#subscriptions[subscription])) {
|
|
126
|
+
l.debug(() => `Unable to find active subscription=${subscription}`);
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
delete this.#subscriptions[subscription];
|
|
130
|
+
return this.send(method, [id]);
|
|
131
|
+
}
|
|
132
|
+
}
|
package/page/Signer.js
CHANGED
|
@@ -1,92 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
-
s = arguments[i];
|
|
7
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
-
t[p] = s[p];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
return __assign.apply(this, arguments);
|
|
13
|
-
};
|
|
14
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
24
|
-
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);
|
|
25
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
26
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
27
|
-
function step(op) {
|
|
28
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
29
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
30
|
-
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;
|
|
31
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
32
|
-
switch (op[0]) {
|
|
33
|
-
case 0: case 1: t = op; break;
|
|
34
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
35
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
36
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
37
|
-
default:
|
|
38
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
39
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
40
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
41
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
42
|
-
if (t[2]) _.ops.pop();
|
|
43
|
-
_.trys.pop(); continue;
|
|
44
|
-
}
|
|
45
|
-
op = body.call(thisArg, _);
|
|
46
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
47
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
// External to class, this.# is not private enough (yet)
|
|
51
|
-
var sendRequest;
|
|
52
|
-
var nextId = 0;
|
|
53
|
-
var Signer = /** @class */ (function () {
|
|
54
|
-
function Signer(_sendRequest) {
|
|
1
|
+
let sendRequest;
|
|
2
|
+
let nextId = 0;
|
|
3
|
+
export default class Signer {
|
|
4
|
+
constructor(_sendRequest) {
|
|
55
5
|
sendRequest = _sendRequest;
|
|
56
6
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
var id, result;
|
|
78
|
-
return __generator(this, function (_a) {
|
|
79
|
-
switch (_a.label) {
|
|
80
|
-
case 0:
|
|
81
|
-
id = ++nextId;
|
|
82
|
-
return [4 /*yield*/, sendRequest('pub(bytes.sign)', payload)];
|
|
83
|
-
case 1:
|
|
84
|
-
result = _a.sent();
|
|
85
|
-
return [2 /*return*/, __assign(__assign({}, result), { id: id })];
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
return Signer;
|
|
91
|
-
}());
|
|
92
|
-
export default Signer;
|
|
7
|
+
async signPayload(payload) {
|
|
8
|
+
const id = ++nextId;
|
|
9
|
+
const result = await sendRequest('pub(extrinsic.sign)', payload);
|
|
10
|
+
// we add an internal id (number) - should have a mapping from the
|
|
11
|
+
// extension id (string) -> internal id (number) if we wish to provide
|
|
12
|
+
// updated via the update functionality (noop at this point)
|
|
13
|
+
return {
|
|
14
|
+
...result,
|
|
15
|
+
id
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async signRaw(payload) {
|
|
19
|
+
const id = ++nextId;
|
|
20
|
+
const result = await sendRequest('pub(bytes.sign)', payload);
|
|
21
|
+
return {
|
|
22
|
+
...result,
|
|
23
|
+
id
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
package/page/index.js
CHANGED
|
@@ -1,89 +1,32 @@
|
|
|
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 { MESSAGE_ORIGIN_PAGE } from '../defaults.js';
|
|
40
2
|
import { getId } from '../utils/getId.js';
|
|
41
3
|
import Injected from './Injected.js';
|
|
42
|
-
|
|
4
|
+
const handlers = {};
|
|
43
5
|
export function sendMessage(message, request, subscriber) {
|
|
44
|
-
return new Promise(
|
|
45
|
-
|
|
46
|
-
handlers[id] = { reject
|
|
47
|
-
|
|
48
|
-
id
|
|
49
|
-
message
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const id = getId();
|
|
8
|
+
handlers[id] = { reject, resolve, subscriber };
|
|
9
|
+
const transportRequestMessage = {
|
|
10
|
+
id,
|
|
11
|
+
message,
|
|
50
12
|
origin: MESSAGE_ORIGIN_PAGE,
|
|
51
13
|
request: request || null
|
|
52
14
|
};
|
|
53
15
|
window.postMessage(transportRequestMessage, '*');
|
|
54
16
|
});
|
|
55
17
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return
|
|
59
|
-
return __generator(this, function (_a) {
|
|
60
|
-
switch (_a.label) {
|
|
61
|
-
case 0: return [4 /*yield*/, sendMessage('pub(authorize.tab)', { origin: origin })];
|
|
62
|
-
case 1:
|
|
63
|
-
_a.sent();
|
|
64
|
-
return [2 /*return*/, new Injected(sendMessage)];
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
});
|
|
18
|
+
export async function enable(origin) {
|
|
19
|
+
await sendMessage('pub(authorize.tab)', { origin });
|
|
20
|
+
return new Injected(sendMessage);
|
|
68
21
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return
|
|
72
|
-
var res;
|
|
73
|
-
return __generator(this, function (_a) {
|
|
74
|
-
switch (_a.label) {
|
|
75
|
-
case 0: return [4 /*yield*/, sendMessage('pub(phishing.redirectIfDenied)')];
|
|
76
|
-
case 1:
|
|
77
|
-
res = _a.sent();
|
|
78
|
-
return [2 /*return*/, res];
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
});
|
|
22
|
+
export async function redirectIfPhishing() {
|
|
23
|
+
const res = await sendMessage('pub(phishing.redirectIfDenied)');
|
|
24
|
+
return res;
|
|
82
25
|
}
|
|
83
26
|
export function handleResponse(data) {
|
|
84
|
-
|
|
27
|
+
const handler = handlers[data.id];
|
|
85
28
|
if (!handler) {
|
|
86
|
-
console.error(
|
|
29
|
+
console.error(`Unknown response: ${JSON.stringify(data)}`);
|
|
87
30
|
return;
|
|
88
31
|
}
|
|
89
32
|
if (!handler.subscriber) {
|
package/page/types.js
CHANGED