@pezkuwi/extension-base 0.62.8 → 0.62.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +201 -0
  2. package/background/RequestBytesSign.js +12 -0
  3. package/background/RequestExtrinsicSign.js +11 -0
  4. package/background/handlers/Extension.js +489 -0
  5. package/background/handlers/State.js +478 -0
  6. package/background/handlers/Tabs.js +195 -0
  7. package/{build/background → background}/handlers/helpers.js +1 -3
  8. package/background/handlers/index.js +40 -0
  9. package/background/handlers/subscriptions.js +18 -0
  10. package/background/index.js +1 -0
  11. package/bundle.js +1 -0
  12. package/cjs/background/RequestBytesSign.d.ts +12 -0
  13. package/cjs/background/RequestBytesSign.js +15 -0
  14. package/cjs/background/RequestExtrinsicSign.d.ts +12 -0
  15. package/cjs/background/RequestExtrinsicSign.js +14 -0
  16. package/cjs/background/handlers/Extension.d.ts +49 -0
  17. package/cjs/background/handlers/Extension.js +492 -0
  18. package/cjs/background/handlers/State.d.ts +96 -0
  19. package/cjs/background/handlers/State.js +482 -0
  20. package/cjs/background/handlers/Tabs.d.ts +25 -0
  21. package/cjs/background/handlers/Tabs.js +199 -0
  22. package/cjs/background/handlers/helpers.d.ts +1 -0
  23. package/cjs/background/handlers/helpers.js +14 -0
  24. package/cjs/background/handlers/index.d.ts +3 -0
  25. package/cjs/background/handlers/index.js +46 -0
  26. package/cjs/background/handlers/subscriptions.d.ts +3 -0
  27. package/cjs/background/handlers/subscriptions.js +22 -0
  28. package/cjs/background/index.d.ts +1 -0
  29. package/cjs/background/index.js +7 -0
  30. package/cjs/background/types.d.ts +343 -0
  31. package/cjs/background/types.js +2 -0
  32. package/cjs/bundle.d.ts +1 -0
  33. package/cjs/bundle.js +5 -0
  34. package/cjs/defaults.js +16 -0
  35. package/cjs/index.js +4 -0
  36. package/cjs/package.json +3 -0
  37. package/cjs/packageDetect.d.ts +1 -0
  38. package/cjs/packageDetect.js +8 -0
  39. package/cjs/packageInfo.js +4 -0
  40. package/cjs/page/Accounts.js +24 -0
  41. package/cjs/page/Injected.js +25 -0
  42. package/cjs/page/Metadata.js +15 -0
  43. package/cjs/page/PostMessageProvider.js +135 -0
  44. package/cjs/page/Signer.js +29 -0
  45. package/cjs/page/index.js +52 -0
  46. package/cjs/page/types.js +2 -0
  47. package/cjs/stores/Accounts.js +21 -0
  48. package/cjs/stores/Base.js +70 -0
  49. package/cjs/stores/Metadata.js +13 -0
  50. package/cjs/stores/index.js +8 -0
  51. package/cjs/types.js +2 -0
  52. package/cjs/utils/canDerive.js +6 -0
  53. package/cjs/utils/getId.js +8 -0
  54. package/cjs/utils/index.js +5 -0
  55. package/{build → cjs}/utils/portUtils.d.ts +0 -1
  56. package/cjs/utils/portUtils.js +49 -0
  57. package/defaults.d.ts +9 -0
  58. package/{src/defaults.ts → defaults.js} +2 -15
  59. package/index.d.ts +1 -0
  60. package/index.js +1 -0
  61. package/package.json +464 -10
  62. package/packageDetect.d.ts +1 -0
  63. package/{build/packageDetect.js → packageDetect.js} +0 -4
  64. package/packageInfo.d.ts +6 -0
  65. package/packageInfo.js +1 -0
  66. package/page/Accounts.d.ts +7 -0
  67. package/page/Accounts.js +21 -0
  68. package/page/Injected.d.ts +13 -0
  69. package/{build/page → page}/Injected.js +10 -10
  70. package/page/Metadata.d.ts +7 -0
  71. package/page/Metadata.js +12 -0
  72. package/page/PostMessageProvider.d.ts +63 -0
  73. package/page/PostMessageProvider.js +132 -0
  74. package/page/Signer.d.ts +8 -0
  75. package/page/Signer.js +26 -0
  76. package/page/index.d.ts +16 -0
  77. package/page/index.js +45 -0
  78. package/page/types.d.ts +6 -0
  79. package/page/types.js +1 -0
  80. package/stores/Accounts.d.ts +6 -0
  81. package/stores/Accounts.js +17 -0
  82. package/stores/Base.d.ts +9 -0
  83. package/stores/Base.js +67 -0
  84. package/stores/Metadata.d.ts +5 -0
  85. package/stores/Metadata.js +9 -0
  86. package/{src/stores/index.ts → stores/index.d.ts} +0 -3
  87. package/{build/stores → stores}/index.js +0 -2
  88. package/types.d.ts +9 -0
  89. package/types.js +1 -0
  90. package/utils/canDerive.d.ts +2 -0
  91. package/{build/utils → utils}/canDerive.js +0 -2
  92. package/utils/getId.d.ts +1 -0
  93. package/utils/getId.js +5 -0
  94. package/utils/index.d.ts +1 -0
  95. package/utils/index.js +1 -0
  96. package/utils/portUtils.d.ts +13 -0
  97. package/utils/portUtils.js +43 -0
  98. package/build/background/RequestBytesSign.js +0 -15
  99. package/build/background/RequestExtrinsicSign.js +0 -14
  100. package/build/background/handlers/Extension.js +0 -645
  101. package/build/background/handlers/State.js +0 -732
  102. package/build/background/handlers/Tabs.js +0 -313
  103. package/build/background/handlers/index.js +0 -45
  104. package/build/background/handlers/subscriptions.js +0 -22
  105. package/build/background/index.js +0 -3
  106. package/build/background/types.js +0 -3
  107. package/build/bundle.js +0 -3
  108. package/build/defaults.js +0 -17
  109. package/build/index.js +0 -5
  110. package/build/packageInfo.js +0 -4
  111. package/build/page/Accounts.js +0 -26
  112. package/build/page/Metadata.js +0 -17
  113. package/build/page/PostMessageProvider.js +0 -234
  114. package/build/page/Signer.js +0 -92
  115. package/build/page/index.js +0 -102
  116. package/build/page/types.js +0 -3
  117. package/build/stores/Accounts.js +0 -83
  118. package/build/stores/Base.js +0 -250
  119. package/build/stores/Metadata.js +0 -29
  120. package/build/types.js +0 -3
  121. package/build/utils/getId.js +0 -7
  122. package/build/utils/index.js +0 -3
  123. package/build/utils/portUtils.js +0 -106
  124. package/src/background/RequestBytesSign.ts +0 -28
  125. package/src/background/RequestExtrinsicSign.ts +0 -22
  126. package/src/background/handlers/Extension.spec.ts +0 -478
  127. package/src/background/handlers/Extension.ts +0 -690
  128. package/src/background/handlers/State.ts +0 -664
  129. package/src/background/handlers/Tabs.ts +0 -289
  130. package/src/background/handlers/helpers.ts +0 -14
  131. package/src/background/handlers/index.ts +0 -60
  132. package/src/background/handlers/subscriptions.ts +0 -32
  133. package/src/background/index.ts +0 -4
  134. package/src/background/types.ts +0 -432
  135. package/src/bundle.ts +0 -4
  136. package/src/index.ts +0 -7
  137. package/src/packageDetect.ts +0 -14
  138. package/src/packageInfo.ts +0 -6
  139. package/src/page/Accounts.ts +0 -33
  140. package/src/page/Injected.ts +0 -33
  141. package/src/page/Metadata.ts +0 -22
  142. package/src/page/PostMessageProvider.ts +0 -182
  143. package/src/page/Signer.ts +0 -45
  144. package/src/page/index.ts +0 -89
  145. package/src/page/types.ts +0 -10
  146. package/src/stores/Accounts.ts +0 -28
  147. package/src/stores/Base.ts +0 -93
  148. package/src/stores/Metadata.ts +0 -17
  149. package/src/types.ts +0 -12
  150. package/src/utils/canDerive.ts +0 -8
  151. package/src/utils/getId.ts +0 -10
  152. package/src/utils/index.ts +0 -4
  153. package/src/utils/portUtils.ts +0 -65
  154. package/tsconfig.build.json +0 -16
  155. package/tsconfig.build.tsbuildinfo +0 -1
  156. package/tsconfig.spec.json +0 -18
  157. package/tsconfig.spec.tsbuildinfo +0 -1
  158. /package/{build/background → background}/RequestBytesSign.d.ts +0 -0
  159. /package/{build/background → background}/RequestExtrinsicSign.d.ts +0 -0
  160. /package/{build/background → background}/handlers/Extension.d.ts +0 -0
  161. /package/{build/background → background}/handlers/State.d.ts +0 -0
  162. /package/{build/background → background}/handlers/Tabs.d.ts +0 -0
  163. /package/{build/background → background}/handlers/helpers.d.ts +0 -0
  164. /package/{build/background → background}/handlers/index.d.ts +0 -0
  165. /package/{build/background → background}/handlers/subscriptions.d.ts +0 -0
  166. /package/{build/background → background}/index.d.ts +0 -0
  167. /package/{build/background → background}/types.d.ts +0 -0
  168. /package/{build/packageDetect.d.ts → background/types.js} +0 -0
  169. /package/{build/bundle.d.ts → bundle.d.ts} +0 -0
  170. /package/{build → cjs}/defaults.d.ts +0 -0
  171. /package/{build → cjs}/index.d.ts +0 -0
  172. /package/{build → cjs}/packageInfo.d.ts +0 -0
  173. /package/{build → cjs}/page/Accounts.d.ts +0 -0
  174. /package/{build → cjs}/page/Injected.d.ts +0 -0
  175. /package/{build → cjs}/page/Metadata.d.ts +0 -0
  176. /package/{build → cjs}/page/PostMessageProvider.d.ts +0 -0
  177. /package/{build → cjs}/page/Signer.d.ts +0 -0
  178. /package/{build → cjs}/page/index.d.ts +0 -0
  179. /package/{build → cjs}/page/types.d.ts +0 -0
  180. /package/{build → cjs}/stores/Accounts.d.ts +0 -0
  181. /package/{build → cjs}/stores/Base.d.ts +0 -0
  182. /package/{build → cjs}/stores/Metadata.d.ts +0 -0
  183. /package/{build → cjs}/stores/index.d.ts +0 -0
  184. /package/{build → cjs}/types.d.ts +0 -0
  185. /package/{build → cjs}/utils/canDerive.d.ts +0 -0
  186. /package/{build → cjs}/utils/getId.d.ts +0 -0
  187. /package/{build → cjs}/utils/index.d.ts +0 -0
package/cjs/index.js ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./bundle.js"), exports);
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const packageInfo_1 = require("@pezkuwi/extension-chains/cjs/packageInfo");
4
+ const packageInfo_2 = require("@pezkuwi/extension-dapp/cjs/packageInfo");
5
+ const packageInfo_3 = require("@pezkuwi/extension-inject/cjs/packageInfo");
6
+ const util_1 = require("@pezkuwi/util");
7
+ const packageInfo_js_1 = require("./packageInfo.js");
8
+ (0, util_1.detectPackage)(packageInfo_js_1.packageInfo, null, [packageInfo_1.packageInfo, packageInfo_2.packageInfo, packageInfo_3.packageInfo]);
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.packageInfo = void 0;
4
+ exports.packageInfo = { name: '@pezkuwi/extension-base', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '0.62.12' };
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ let sendRequest;
4
+ class Accounts {
5
+ constructor(_sendRequest) {
6
+ sendRequest = _sendRequest;
7
+ }
8
+ get(anyType) {
9
+ return sendRequest('pub(accounts.list)', { anyType });
10
+ }
11
+ subscribe(cb) {
12
+ let id = null;
13
+ sendRequest('pub(accounts.subscribe)', null, cb)
14
+ .then((subId) => {
15
+ id = subId;
16
+ })
17
+ .catch(console.error);
18
+ return () => {
19
+ id && sendRequest('pub(accounts.unsubscribe)', { id })
20
+ .catch(console.error);
21
+ };
22
+ }
23
+ }
24
+ exports.default = Accounts;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const Accounts_js_1 = tslib_1.__importDefault(require("./Accounts.js"));
5
+ const Metadata_js_1 = tslib_1.__importDefault(require("./Metadata.js"));
6
+ const PostMessageProvider_js_1 = tslib_1.__importDefault(require("./PostMessageProvider.js"));
7
+ const Signer_js_1 = tslib_1.__importDefault(require("./Signer.js"));
8
+ class default_1 {
9
+ accounts;
10
+ metadata;
11
+ provider;
12
+ signer;
13
+ constructor(sendRequest) {
14
+ this.accounts = new Accounts_js_1.default(sendRequest);
15
+ this.metadata = new Metadata_js_1.default(sendRequest);
16
+ this.provider = new PostMessageProvider_js_1.default(sendRequest);
17
+ this.signer = new Signer_js_1.default(sendRequest);
18
+ setInterval(() => {
19
+ sendRequest('pub(ping)', null).catch(() => {
20
+ console.error('Extension unavailable, ping failed');
21
+ });
22
+ }, 5_000 + Math.floor(Math.random() * 5_000));
23
+ }
24
+ }
25
+ exports.default = default_1;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ let sendRequest;
4
+ class Metadata {
5
+ constructor(_sendRequest) {
6
+ sendRequest = _sendRequest;
7
+ }
8
+ get() {
9
+ return sendRequest('pub(metadata.list)');
10
+ }
11
+ provide(definition) {
12
+ return sendRequest('pub(metadata.provide)', definition);
13
+ }
14
+ }
15
+ exports.default = Metadata;
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const eventemitter3_1 = require("eventemitter3");
4
+ const util_1 = require("@pezkuwi/util");
5
+ const l = (0, util_1.logger)('PostMessageProvider');
6
+ let sendRequest;
7
+ /**
8
+ * @name PostMessageProvider
9
+ *
10
+ * @description Extension provider to be used by dapps
11
+ */
12
+ class PostMessageProvider {
13
+ #eventemitter;
14
+ // Whether or not the actual extension background provider is connected
15
+ #isConnected = false;
16
+ // Subscription IDs are (historically) not guaranteed to be globally unique;
17
+ // only unique for a given subscription method; which is why we identify
18
+ // the subscriptions based on subscription id + type
19
+ #subscriptions = {}; // {[(type,subscriptionId)]: callback}
20
+ /**
21
+ * @param {function} sendRequest The function to be called to send requests to the node
22
+ * @param {function} subscriptionNotificationHandler Channel for receiving subscription messages
23
+ */
24
+ constructor(_sendRequest) {
25
+ this.#eventemitter = new eventemitter3_1.EventEmitter();
26
+ sendRequest = _sendRequest;
27
+ }
28
+ get isClonable() {
29
+ return !!true;
30
+ }
31
+ /**
32
+ * @description Returns a clone of the object
33
+ */
34
+ clone() {
35
+ return new PostMessageProvider(sendRequest);
36
+ }
37
+ /**
38
+ * @description Manually disconnect from the connection, clearing autoconnect logic
39
+ */
40
+ // eslint-disable-next-line @typescript-eslint/require-await
41
+ async connect() {
42
+ // FIXME This should see if the extension's state's provider can disconnect
43
+ console.error('PostMessageProvider.disconnect() is not implemented.');
44
+ }
45
+ /**
46
+ * @description Manually disconnect from the connection, clearing autoconnect logic
47
+ */
48
+ // eslint-disable-next-line @typescript-eslint/require-await
49
+ async disconnect() {
50
+ // FIXME This should see if the extension's state's provider can disconnect
51
+ console.error('PostMessageProvider.disconnect() is not implemented.');
52
+ }
53
+ /**
54
+ * @summary `true` when this provider supports subscriptions
55
+ */
56
+ get hasSubscriptions() {
57
+ // FIXME This should see if the extension's state's provider has subscriptions
58
+ return !!true;
59
+ }
60
+ /**
61
+ * @summary Whether the node is connected or not.
62
+ * @return {boolean} true if connected
63
+ */
64
+ get isConnected() {
65
+ return this.#isConnected;
66
+ }
67
+ listProviders() {
68
+ return sendRequest('pub(rpc.listProviders)', undefined);
69
+ }
70
+ /**
71
+ * @summary Listens on events after having subscribed using the [[subscribe]] function.
72
+ * @param {ProviderInterfaceEmitted} type Event
73
+ * @param {ProviderInterfaceEmitCb} sub Callback
74
+ * @return unsubscribe function
75
+ */
76
+ on(type, sub) {
77
+ this.#eventemitter.on(type, sub);
78
+ return () => {
79
+ this.#eventemitter.removeListener(type, sub);
80
+ };
81
+ }
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ async send(method, params, _, subscription) {
84
+ if (subscription) {
85
+ const { callback, type } = subscription;
86
+ const id = await sendRequest('pub(rpc.subscribe)', { method, params, type }, (res) => {
87
+ subscription.callback(null, res);
88
+ });
89
+ this.#subscriptions[`${type}::${id}`] = callback;
90
+ return id;
91
+ }
92
+ return sendRequest('pub(rpc.send)', { method, params });
93
+ }
94
+ /**
95
+ * @summary Spawn a provider on the extension background.
96
+ */
97
+ async startProvider(key) {
98
+ // Disconnect from the previous provider
99
+ this.#isConnected = false;
100
+ this.#eventemitter.emit('disconnected');
101
+ const meta = await sendRequest('pub(rpc.startProvider)', key);
102
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
103
+ sendRequest('pub(rpc.subscribeConnected)', null, (connected) => {
104
+ this.#isConnected = connected;
105
+ if (connected) {
106
+ this.#eventemitter.emit('connected');
107
+ }
108
+ else {
109
+ this.#eventemitter.emit('disconnected');
110
+ }
111
+ return true;
112
+ });
113
+ return meta;
114
+ }
115
+ subscribe(type, method, params, callback) {
116
+ return this.send(method, params, false, { callback, type });
117
+ }
118
+ /**
119
+ * @summary Allows unsubscribing to subscriptions made with [[subscribe]].
120
+ */
121
+ async unsubscribe(type, method, id) {
122
+ const subscription = `${type}::${id}`;
123
+ // FIXME This now could happen with re-subscriptions. The issue is that with a re-sub
124
+ // the assigned id now does not match what the API user originally received. It has
125
+ // a slight complication in solving - since we cannot rely on the send id, but rather
126
+ // need to find the actual subscription id to map it
127
+ if ((0, util_1.isUndefined)(this.#subscriptions[subscription])) {
128
+ l.debug(() => `Unable to find active subscription=${subscription}`);
129
+ return false;
130
+ }
131
+ delete this.#subscriptions[subscription];
132
+ return this.send(method, [id]);
133
+ }
134
+ }
135
+ exports.default = PostMessageProvider;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ let sendRequest;
4
+ let nextId = 0;
5
+ class Signer {
6
+ constructor(_sendRequest) {
7
+ sendRequest = _sendRequest;
8
+ }
9
+ async signPayload(payload) {
10
+ const id = ++nextId;
11
+ const result = await sendRequest('pub(extrinsic.sign)', payload);
12
+ // we add an internal id (number) - should have a mapping from the
13
+ // extension id (string) -> internal id (number) if we wish to provide
14
+ // updated via the update functionality (noop at this point)
15
+ return {
16
+ ...result,
17
+ id
18
+ };
19
+ }
20
+ async signRaw(payload) {
21
+ const id = ++nextId;
22
+ const result = await sendRequest('pub(bytes.sign)', payload);
23
+ return {
24
+ ...result,
25
+ id
26
+ };
27
+ }
28
+ }
29
+ exports.default = Signer;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendMessage = sendMessage;
4
+ exports.enable = enable;
5
+ exports.redirectIfPhishing = redirectIfPhishing;
6
+ exports.handleResponse = handleResponse;
7
+ const tslib_1 = require("tslib");
8
+ const defaults_js_1 = require("../defaults.js");
9
+ const getId_js_1 = require("../utils/getId.js");
10
+ const Injected_js_1 = tslib_1.__importDefault(require("./Injected.js"));
11
+ const handlers = {};
12
+ function sendMessage(message, request, subscriber) {
13
+ return new Promise((resolve, reject) => {
14
+ const id = (0, getId_js_1.getId)();
15
+ handlers[id] = { reject, resolve, subscriber };
16
+ const transportRequestMessage = {
17
+ id,
18
+ message,
19
+ origin: defaults_js_1.MESSAGE_ORIGIN_PAGE,
20
+ request: request || null
21
+ };
22
+ window.postMessage(transportRequestMessage, '*');
23
+ });
24
+ }
25
+ async function enable(origin) {
26
+ await sendMessage('pub(authorize.tab)', { origin });
27
+ return new Injected_js_1.default(sendMessage);
28
+ }
29
+ async function redirectIfPhishing() {
30
+ const res = await sendMessage('pub(phishing.redirectIfDenied)');
31
+ return res;
32
+ }
33
+ function handleResponse(data) {
34
+ const handler = handlers[data.id];
35
+ if (!handler) {
36
+ console.error(`Unknown response: ${JSON.stringify(data)}`);
37
+ return;
38
+ }
39
+ if (!handler.subscriber) {
40
+ delete handlers[data.id];
41
+ }
42
+ if (data.subscription) {
43
+ // eslint-disable-next-line @typescript-eslint/ban-types
44
+ handler.subscriber(data.subscription);
45
+ }
46
+ else if (data.error) {
47
+ handler.reject(new Error(data.error));
48
+ }
49
+ else {
50
+ handler.resolve(data.response);
51
+ }
52
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const defaults_js_1 = require("../defaults.js");
5
+ const Base_js_1 = tslib_1.__importDefault(require("./Base.js"));
6
+ class AccountsStore extends Base_js_1.default {
7
+ constructor() {
8
+ super(defaults_js_1.EXTENSION_PREFIX && defaults_js_1.EXTENSION_PREFIX !== 'polkadot{.js}'
9
+ ? `${defaults_js_1.EXTENSION_PREFIX}accounts`
10
+ : null);
11
+ }
12
+ async set(key, value, update) {
13
+ // shortcut, don't save testing accounts in extension storage
14
+ if (key.startsWith('account:') && value.meta && value.meta.isTesting) {
15
+ update && update();
16
+ return;
17
+ }
18
+ await super.set(key, value, update);
19
+ }
20
+ }
21
+ exports.default = AccountsStore;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lastError = (type) => {
4
+ const error = chrome.runtime.lastError;
5
+ if (error) {
6
+ console.error(`BaseStore.${type}:: runtime.lastError:`, error);
7
+ }
8
+ };
9
+ class BaseStore {
10
+ #prefix;
11
+ constructor(prefix) {
12
+ this.#prefix = prefix ? `${prefix}:` : '';
13
+ }
14
+ async all(update) {
15
+ await this.allMap(async (map) => {
16
+ const entries = Object.entries(map);
17
+ for (const [key, value] of entries) {
18
+ // eslint-disable-next-line @typescript-eslint/await-thenable
19
+ await update(key, value);
20
+ }
21
+ });
22
+ }
23
+ async allMap(update) {
24
+ await chrome.storage.local.get(null).then(async (result) => {
25
+ lastError('all');
26
+ const entries = Object.entries(result);
27
+ const map = {};
28
+ for (let i = 0, count = entries.length; i < count; i++) {
29
+ const [key, value] = entries[i];
30
+ if (key.startsWith(this.#prefix)) {
31
+ map[key.replace(this.#prefix, '')] = value;
32
+ }
33
+ }
34
+ await update(map);
35
+ }).catch(({ message }) => {
36
+ console.error(`BaseStore error within allMap: ${message}`);
37
+ });
38
+ }
39
+ async get(key, update) {
40
+ const prefixedKey = `${this.#prefix}${key}`;
41
+ await chrome.storage.local.get([prefixedKey]).then(async (result) => {
42
+ lastError('get');
43
+ // eslint-disable-next-line @typescript-eslint/await-thenable
44
+ await update(result[prefixedKey]);
45
+ }).catch(({ message }) => {
46
+ console.error(`BaseStore error within get: ${message}`);
47
+ });
48
+ }
49
+ async remove(key, update) {
50
+ const prefixedKey = `${this.#prefix}${key}`;
51
+ await chrome.storage.local.remove(prefixedKey).then(async () => {
52
+ lastError('remove');
53
+ // eslint-disable-next-line @typescript-eslint/await-thenable
54
+ update && await update();
55
+ }).catch(({ message }) => {
56
+ console.error(`BaseStore error within remove: ${message}`);
57
+ });
58
+ }
59
+ async set(key, value, update) {
60
+ const prefixedKey = `${this.#prefix}${key}`;
61
+ await chrome.storage.local.set({ [prefixedKey]: value }).then(async () => {
62
+ lastError('set');
63
+ // eslint-disable-next-line @typescript-eslint/await-thenable
64
+ update && await update();
65
+ }).catch(({ message }) => {
66
+ console.error(`BaseStore error within set: ${message}`);
67
+ });
68
+ }
69
+ }
70
+ exports.default = BaseStore;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const defaults_js_1 = require("../defaults.js");
5
+ const Base_js_1 = tslib_1.__importDefault(require("./Base.js"));
6
+ class MetadataStore extends Base_js_1.default {
7
+ constructor() {
8
+ super(defaults_js_1.EXTENSION_PREFIX && defaults_js_1.EXTENSION_PREFIX !== 'polkadot{.js}'
9
+ ? `${defaults_js_1.EXTENSION_PREFIX}metadata`
10
+ : 'metadata');
11
+ }
12
+ }
13
+ exports.default = MetadataStore;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MetadataStore = exports.AccountsStore = void 0;
4
+ const tslib_1 = require("tslib");
5
+ var Accounts_js_1 = require("./Accounts.js");
6
+ Object.defineProperty(exports, "AccountsStore", { enumerable: true, get: function () { return tslib_1.__importDefault(Accounts_js_1).default; } });
7
+ var Metadata_js_1 = require("./Metadata.js");
8
+ Object.defineProperty(exports, "MetadataStore", { enumerable: true, get: function () { return tslib_1.__importDefault(Metadata_js_1).default; } });
package/cjs/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canDerive = canDerive;
4
+ function canDerive(type) {
5
+ return !!type && ['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(type);
6
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getId = getId;
4
+ const defaults_js_1 = require("../defaults.js");
5
+ let counter = 0;
6
+ function getId() {
7
+ return `${defaults_js_1.EXTENSION_PREFIX}.${Date.now()}.${++counter}`;
8
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canDerive = void 0;
4
+ var canDerive_js_1 = require("./canDerive.js");
5
+ Object.defineProperty(exports, "canDerive", { enumerable: true, get: function () { return canDerive_js_1.canDerive; } });
@@ -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;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wakeUpServiceWorkerWrapper = void 0;
4
+ exports.setupPort = setupPort;
5
+ exports.wakeUpServiceWorker = wakeUpServiceWorker;
6
+ exports.ensurePortConnection = ensurePortConnection;
7
+ const chrome_1 = require("@pezkuwi/extension-inject/chrome");
8
+ function setupPort(portName, onMessageHandler, onDisconnectHandler) {
9
+ const port = chrome_1.chrome.runtime.connect({ name: portName });
10
+ port.onMessage.addListener(onMessageHandler);
11
+ port.onDisconnect.addListener(() => {
12
+ console.log(`Disconnected from ${portName}`);
13
+ onDisconnectHandler();
14
+ });
15
+ return port;
16
+ }
17
+ async function wakeUpServiceWorker() {
18
+ return new Promise((resolve, reject) => {
19
+ chrome_1.chrome.runtime.sendMessage({ type: 'wakeup' }, (response) => {
20
+ if (chrome_1.chrome.runtime.lastError) {
21
+ reject(new Error(chrome_1.chrome.runtime.lastError.message));
22
+ }
23
+ else {
24
+ resolve(response);
25
+ }
26
+ });
27
+ });
28
+ }
29
+ exports.wakeUpServiceWorkerWrapper = { wakeUpServiceWorker };
30
+ async function ensurePortConnection(portRef, portConfig) {
31
+ const maxAttempts = 5;
32
+ const delayMs = 1000;
33
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
34
+ try {
35
+ const response = await exports.wakeUpServiceWorkerWrapper.wakeUpServiceWorker();
36
+ if (response?.status === 'awake') {
37
+ if (!portRef) {
38
+ return setupPort(portConfig.portName, portConfig.onPortMessageHandler, portConfig.onPortDisconnectHandler);
39
+ }
40
+ return portRef;
41
+ }
42
+ }
43
+ catch (error) {
44
+ console.error(`Attempt ${attempt + 1} failed: ${error.message}`);
45
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
46
+ }
47
+ }
48
+ throw new Error('Failed to wake up the service worker and setup the port after multiple attempts');
49
+ }
package/defaults.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare const EXTENSION_PREFIX: string;
2
+ export declare const PORT_CONTENT: string;
3
+ export declare const PORT_EXTENSION: string;
4
+ export declare const MESSAGE_ORIGIN_PAGE: string;
5
+ export declare const MESSAGE_ORIGIN_CONTENT: string;
6
+ export declare const ALLOWED_PATH: readonly ["/", "/account/import-ledger", "/account/restore-json"];
7
+ export declare const PASSWORD_EXPIRY_MIN = 15;
8
+ export declare const PASSWORD_EXPIRY_MS: number;
9
+ export declare const PHISHING_PAGE_REDIRECT = "/phishing-page-detected";
@@ -1,26 +1,13 @@
1
- // Copyright 2019-2025 @pezkuwi/extension-base authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- // this _must_ be changed for each extension
5
1
  export const EXTENSION_PREFIX = process.env['EXTENSION_PREFIX'] || '';
6
-
7
2
  if (!EXTENSION_PREFIX && !process.env['PORT_PREFIX']) {
8
- throw new Error('CRITICAL: The extension does not define an own EXTENSION_PREFIX environment variable as part of the build, this is required to ensure that messages are not shared between extensions. Failure to do so will yield messages sent to multiple extensions.');
3
+ throw new Error('CRITICAL: The extension does not define an own EXTENSION_PREFIX environment variable as part of the build, this is required to ensure that messages are not shared between extensions. Failure to do so will yield messages sent to multiple extensions.');
9
4
  }
10
-
11
5
  const PORT_PREFIX = `${EXTENSION_PREFIX || 'unknown'}-${process.env['PORT_PREFIX'] || 'unknown'}`;
12
-
13
6
  export const PORT_CONTENT = `${PORT_PREFIX}-content`;
14
7
  export const PORT_EXTENSION = `${PORT_PREFIX}-extension`;
15
-
16
8
  export const MESSAGE_ORIGIN_PAGE = `${PORT_PREFIX}-page`;
17
9
  export const MESSAGE_ORIGIN_CONTENT = `${PORT_PREFIX}-content`;
18
-
19
- export const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json'] as const;
20
-
10
+ export const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json'];
21
11
  export const PASSWORD_EXPIRY_MIN = 15;
22
12
  export const PASSWORD_EXPIRY_MS = PASSWORD_EXPIRY_MIN * 60 * 1000;
23
-
24
13
  export const PHISHING_PAGE_REDIRECT = '/phishing-page-detected';
25
-
26
- // console.log(`Extension is sending and receiving messages on ${PORT_PREFIX}-*`);
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './bundle.js';
package/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from './bundle.js';