@w3ux/react-connect-kit 0.0.1

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 (49) hide show
  1. package/ExtensionAccountsProvider/Extensions.d.ts +13 -0
  2. package/ExtensionAccountsProvider/Extensions.js +205 -0
  3. package/ExtensionAccountsProvider/Extensions.js.map +1 -0
  4. package/ExtensionAccountsProvider/defaults.d.ts +9 -0
  5. package/ExtensionAccountsProvider/defaults.js +14 -0
  6. package/ExtensionAccountsProvider/defaults.js.map +1 -0
  7. package/ExtensionAccountsProvider/index.d.ts +5 -0
  8. package/ExtensionAccountsProvider/index.js +327 -0
  9. package/ExtensionAccountsProvider/index.js.map +1 -0
  10. package/ExtensionAccountsProvider/snap.d.ts +2 -0
  11. package/ExtensionAccountsProvider/snap.js +129 -0
  12. package/ExtensionAccountsProvider/snap.js.map +1 -0
  13. package/ExtensionAccountsProvider/types.d.ts +28 -0
  14. package/ExtensionAccountsProvider/types.js +3 -0
  15. package/ExtensionAccountsProvider/types.js.map +1 -0
  16. package/ExtensionAccountsProvider/useImportExtension.d.ts +6 -0
  17. package/ExtensionAccountsProvider/useImportExtension.js +66 -0
  18. package/ExtensionAccountsProvider/useImportExtension.js.map +1 -0
  19. package/ExtensionAccountsProvider/utils.d.ts +8 -0
  20. package/ExtensionAccountsProvider/utils.js +37 -0
  21. package/ExtensionAccountsProvider/utils.js.map +1 -0
  22. package/ExtensionsProvider/defaults.d.ts +2 -0
  23. package/ExtensionsProvider/defaults.js +11 -0
  24. package/ExtensionsProvider/defaults.js.map +1 -0
  25. package/ExtensionsProvider/index.d.ts +7 -0
  26. package/ExtensionsProvider/index.js +156 -0
  27. package/ExtensionsProvider/index.js.map +1 -0
  28. package/ExtensionsProvider/types.d.ts +43 -0
  29. package/ExtensionsProvider/types.js +3 -0
  30. package/ExtensionsProvider/types.js.map +1 -0
  31. package/ExtensionsProvider/utils.d.ts +20 -0
  32. package/ExtensionsProvider/utils.js +78 -0
  33. package/ExtensionsProvider/utils.js.map +1 -0
  34. package/LedgerAccountsProvider/defaults.d.ts +2 -0
  35. package/LedgerAccountsProvider/defaults.js +10 -0
  36. package/LedgerAccountsProvider/defaults.js.map +1 -0
  37. package/LedgerAccountsProvider/index.d.ts +5 -0
  38. package/LedgerAccountsProvider/index.js +116 -0
  39. package/LedgerAccountsProvider/index.js.map +1 -0
  40. package/LedgerAccountsProvider/types.d.ts +21 -0
  41. package/LedgerAccountsProvider/types.js +3 -0
  42. package/LedgerAccountsProvider/types.js.map +1 -0
  43. package/LedgerAccountsProvider/utils.d.ts +9 -0
  44. package/LedgerAccountsProvider/utils.js +38 -0
  45. package/LedgerAccountsProvider/utils.js.map +1 -0
  46. package/package.json +6 -0
  47. package/types.d.ts +39 -0
  48. package/types.js +3 -0
  49. package/types.js.map +1 -0
@@ -0,0 +1,13 @@
1
+ import { ExtensionEnableResults, RawExtensions } from "../types";
2
+ import { ExtensionAccount, ExtensionInterface } from "../ExtensionsProvider/types";
3
+ export declare class Extensions {
4
+ static getFromIds: (extensionIds: string[]) => RawExtensions;
5
+ static enable: (extensions: RawExtensions, dappName: string) => Promise<PromiseSettledResult<ExtensionInterface>[]>;
6
+ static formatEnabled: (extensions: RawExtensions, results: PromiseSettledResult<ExtensionInterface>[]) => ExtensionEnableResults;
7
+ static connected: (extensions: ExtensionEnableResults) => ExtensionEnableResults;
8
+ static withError: (extensions: ExtensionEnableResults) => ExtensionEnableResults;
9
+ static getAllAccounts: (extensions: ExtensionEnableResults, ss58: number) => Promise<ExtensionAccount[]>;
10
+ static isLocal: (id: string) => boolean;
11
+ static addToLocal: (id: string) => void;
12
+ static removeFromLocal: (id: string) => void;
13
+ }
@@ -0,0 +1,205 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { localStorageOrDefault } from "@w3ux/utils";
49
+ import Keyring from "@polkadot/keyring";
50
+ var Extensions = (function () {
51
+ function Extensions() {
52
+ }
53
+ var _a;
54
+ _a = Extensions;
55
+ Extensions.getFromIds = function (extensionIds) {
56
+ var rawExtensions = new Map();
57
+ extensionIds.forEach(function (id) { return __awaiter(void 0, void 0, void 0, function () {
58
+ var enable;
59
+ return __generator(_a, function (_b) {
60
+ if (this.isLocal(id)) {
61
+ enable = window.injectedWeb3[id].enable;
62
+ if (enable !== undefined && typeof enable === "function") {
63
+ rawExtensions.set(id, enable);
64
+ }
65
+ else {
66
+ this.removeFromLocal(id);
67
+ }
68
+ }
69
+ return [2 ];
70
+ });
71
+ }); });
72
+ return rawExtensions;
73
+ };
74
+ Extensions.enable = function (extensions, dappName) { return __awaiter(void 0, void 0, void 0, function () {
75
+ var results, err_1;
76
+ return __generator(_a, function (_b) {
77
+ switch (_b.label) {
78
+ case 0:
79
+ _b.trys.push([0, 2, , 3]);
80
+ return [4 , Promise.allSettled(Array.from(extensions.values()).map(function (enable) { return enable(dappName); }))];
81
+ case 1:
82
+ results = _b.sent();
83
+ return [2 , results];
84
+ case 2:
85
+ err_1 = _b.sent();
86
+ console.error("Error during 'enable' call for Extensions: ", err_1);
87
+ return [2 , []];
88
+ case 3: return [2 ];
89
+ }
90
+ });
91
+ }); };
92
+ Extensions.formatEnabled = function (extensions, results) {
93
+ var extensionsState = new Map();
94
+ for (var i = 0; i < results.length; i++) {
95
+ var result = results[i];
96
+ var id = Array.from(extensions.keys())[i];
97
+ if (result.status === "fulfilled") {
98
+ extensionsState.set(id, {
99
+ extension: result.value,
100
+ connected: true,
101
+ });
102
+ }
103
+ else if (result.status === "rejected") {
104
+ extensionsState.set(id, {
105
+ connected: false,
106
+ error: result.reason,
107
+ });
108
+ }
109
+ }
110
+ return extensionsState;
111
+ };
112
+ Extensions.connected = function (extensions) {
113
+ return new Map(Array.from(extensions.entries()).filter(function (_b) {
114
+ var state = _b[1];
115
+ return state.connected;
116
+ }));
117
+ };
118
+ Extensions.withError = function (extensions) {
119
+ return new Map(Array.from(extensions.entries()).filter(function (_b) {
120
+ var state = _b[1];
121
+ return !state.connected;
122
+ }));
123
+ };
124
+ Extensions.getAllAccounts = function (extensions, ss58) { return __awaiter(void 0, void 0, void 0, function () {
125
+ var keyring, results, extensionEntries, all_1, _loop_1, i, err_2;
126
+ return __generator(_a, function (_b) {
127
+ switch (_b.label) {
128
+ case 0:
129
+ keyring = new Keyring();
130
+ keyring.setSS58Format(ss58);
131
+ _b.label = 1;
132
+ case 1:
133
+ _b.trys.push([1, 3, , 4]);
134
+ return [4 , Promise.allSettled(Array.from(extensions.values()).map(function (_b) {
135
+ var extension = _b.extension;
136
+ return extension.accounts.get();
137
+ }))];
138
+ case 2:
139
+ results = _b.sent();
140
+ extensionEntries = Array.from(extensions.entries());
141
+ all_1 = [];
142
+ _loop_1 = function (i) {
143
+ var result = results[i];
144
+ var id = extensionEntries[i][0];
145
+ var signer = extensionEntries[i][1].extension.signer;
146
+ if (result.status === "fulfilled") {
147
+ var filtered = result.value
148
+ .map(function (newAccount) { return (__assign(__assign({}, newAccount), { address: keyring.addFromAddress(newAccount.address).address })); })
149
+ .filter(function (_b) {
150
+ var address = _b.address;
151
+ return !all_1.find(function (currentAccount) { return address === currentAccount.address; });
152
+ })
153
+ .map(function (_b) {
154
+ var address = _b.address, name = _b.name;
155
+ return ({
156
+ address: address,
157
+ name: name,
158
+ source: id,
159
+ signer: signer,
160
+ });
161
+ });
162
+ all_1.push.apply(all_1, filtered);
163
+ }
164
+ };
165
+ for (i = 0; i < results.length; i++) {
166
+ _loop_1(i);
167
+ }
168
+ return [2 , all_1];
169
+ case 3:
170
+ err_2 = _b.sent();
171
+ console.error("Error during 'enable' and format call for Extensions: ", err_2);
172
+ return [2 , []];
173
+ case 4: return [2 ];
174
+ }
175
+ });
176
+ }); };
177
+ Extensions.isLocal = function (id) {
178
+ var current = localStorageOrDefault("active_extensions", [], true);
179
+ var isLocal = false;
180
+ if (Array.isArray(current)) {
181
+ isLocal = current.find(function (l) { return l === id; }) !== undefined;
182
+ }
183
+ return !!isLocal;
184
+ };
185
+ Extensions.addToLocal = function (id) {
186
+ var current = localStorageOrDefault("active_extensions", [], true);
187
+ if (Array.isArray(current)) {
188
+ if (!current.includes(id)) {
189
+ current.push(id);
190
+ localStorage.setItem("active_extensions", JSON.stringify(current));
191
+ }
192
+ }
193
+ };
194
+ Extensions.removeFromLocal = function (id) {
195
+ var current = localStorageOrDefault("active_extensions", [], true);
196
+ if (Array.isArray(current)) {
197
+ current = current.filter(function (localId) { return localId !== id; });
198
+ localStorage.setItem("active_extensions", JSON.stringify(current));
199
+ }
200
+ };
201
+ return Extensions;
202
+ }());
203
+ export { Extensions };
204
+
205
+
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/Extensions.ts"],"names":[],"mappings":"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","file":"Extensions.js","sourcesContent":["/* @license Copyright 2024 @polkadot-cloud/library authors & contributors\",\n\"SPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from \"@w3ux/utils\";\nimport {\n ExtensionEnableResult,\n ExtensionEnableResults,\n RawExtensionEnable,\n RawExtensions,\n} from \"../types\";\nimport {\n ExtensionAccount,\n ExtensionInterface,\n} from \"../ExtensionsProvider/types\";\nimport Keyring from \"@polkadot/keyring\";\n\n// A static class to manage the discovery and importing of extensions.\nexport class Extensions {\n // Gets a map of extensions with their enable functions from `injectedWeb3`.\n static getFromIds = (extensionIds: string[]): RawExtensions => {\n const rawExtensions = new Map<string, RawExtensionEnable>();\n\n extensionIds.forEach(async (id) => {\n if (this.isLocal(id)) {\n const { enable } = window.injectedWeb3[id];\n\n if (enable !== undefined && typeof enable === \"function\") {\n rawExtensions.set(id, enable);\n } else {\n this.removeFromLocal(id);\n }\n }\n });\n return rawExtensions;\n };\n\n // Calls `enable` for the provided extensions.\n static enable = async (\n extensions: RawExtensions,\n dappName: string\n ): Promise<PromiseSettledResult<ExtensionInterface>[]> => {\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map((enable) => enable(dappName))\n );\n return results;\n } catch (err) {\n console.error(\"Error during 'enable' call for Extensions: \", err);\n // Return an empty array if an error occurs.\n return [];\n }\n };\n\n // Formats the results of an extension's `enable` function.\n static formatEnabled = (\n extensions: RawExtensions,\n results: PromiseSettledResult<ExtensionInterface>[]\n ): ExtensionEnableResults => {\n // Accumulate resulting extensions state after attempting to enable.\n const extensionsState = new Map<string, ExtensionEnableResult>();\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const id = Array.from(extensions.keys())[i];\n\n if (result.status === \"fulfilled\") {\n extensionsState.set(id, {\n extension: result.value,\n connected: true,\n });\n } else if (result.status === \"rejected\") {\n extensionsState.set(id, {\n connected: false,\n error: result.reason,\n });\n }\n }\n return extensionsState;\n };\n\n // Return successfully connected extensions.\n static connected = (\n extensions: ExtensionEnableResults\n ): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n );\n\n static withError = (\n extensions: ExtensionEnableResults\n ): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n );\n\n // Calls `enable` and formats the results of an extension's `enable` function.\n static getAllAccounts = async (\n extensions: ExtensionEnableResults,\n ss58: number\n ): Promise<ExtensionAccount[]> => {\n const keyring = new Keyring();\n keyring.setSS58Format(ss58);\n\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map(({ extension }) =>\n extension.accounts.get()\n )\n );\n\n const extensionEntries = Array.from(extensions.entries());\n const all: ExtensionAccount[] = [];\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const id = extensionEntries[i][0];\n const signer = extensionEntries[i][1].extension.signer;\n\n if (result.status === \"fulfilled\") {\n const filtered = result.value\n // Reformat addresses with correct ss58 prefix.\n .map((newAccount) => ({\n ...newAccount,\n address: keyring.addFromAddress(newAccount.address).address,\n }))\n // Remove accounts that have already been imported.\n .filter(\n ({ address }) =>\n !all.find(\n (currentAccount) => address === currentAccount.address\n )\n )\n // Reformat entries to include extension source.\n .map(({ address, name }) => ({\n address,\n name,\n source: id,\n signer,\n }));\n\n all.push(...filtered);\n }\n }\n\n return all;\n } catch (err) {\n // Return an empty array if an error occurs.\n console.error(\n \"Error during 'enable' and format call for Extensions: \",\n err\n );\n return [];\n }\n };\n\n // Check if an extension exists in local `active_extensions`.\n static isLocal = (id: string): boolean => {\n const current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n );\n let isLocal = false;\n if (Array.isArray(current)) {\n isLocal = current.find((l) => l === id) !== undefined;\n }\n return !!isLocal;\n };\n\n // Adds an extension to local `active_extensions`.\n static addToLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n );\n if (Array.isArray(current)) {\n if (!current.includes(id)) {\n current.push(id);\n localStorage.setItem(\"active_extensions\", JSON.stringify(current));\n }\n }\n };\n\n // Removes extension from local `active_extensions`.\n static removeFromLocal = (id: string): void => {\n let current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n );\n if (Array.isArray(current)) {\n current = current.filter((localId: string) => localId !== id);\n localStorage.setItem(\"active_extensions\", JSON.stringify(current));\n }\n };\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { ExtensionAccountsContextInterface } from "./types";
2
+ export declare const defaultExtensionAccountsContext: ExtensionAccountsContextInterface;
3
+ export declare const defaultHandleImportExtension: {
4
+ newAccounts: any[];
5
+ meta: {
6
+ accountsToRemove: any[];
7
+ removedActiveAccount: any;
8
+ };
9
+ };
@@ -0,0 +1,14 @@
1
+ export var defaultExtensionAccountsContext = {
2
+ connectExtensionAccounts: function () { return Promise.resolve(false); },
3
+ extensionAccountsSynced: "unsynced",
4
+ extensionAccounts: [],
5
+ };
6
+ export var defaultHandleImportExtension = {
7
+ newAccounts: [],
8
+ meta: {
9
+ accountsToRemove: [],
10
+ removedActiveAccount: null,
11
+ },
12
+ };
13
+
14
+
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/defaults.ts"],"names":[],"mappings":"AAAA;yCACyC;AACzC,6GAA6G;AAI7G,MAAM,CAAC,IAAM,+BAA+B,GAC1C;IACE,wBAAwB,EAAE,cAAM,OAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAtB,CAAsB;IACtD,uBAAuB,EAAE,UAAU;IACnC,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEJ,MAAM,CAAC,IAAM,4BAA4B,GAAG;IAC1C,WAAW,EAAE,EAAE;IACf,IAAI,EAAE;QACJ,gBAAgB,EAAE,EAAE;QACpB,oBAAoB,EAAE,IAAI;KAC3B;CACF,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 @polkadot-cloud/library authors & contributors\",\n\"SPDX-License-Identifier: GPL-3.0-only */\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function, no-unused-vars */\n\nimport { ExtensionAccountsContextInterface } from \"./types\";\n\nexport const defaultExtensionAccountsContext: ExtensionAccountsContextInterface =\n {\n connectExtensionAccounts: () => Promise.resolve(false),\n extensionAccountsSynced: \"unsynced\",\n extensionAccounts: [],\n };\n\nexport const defaultHandleImportExtension = {\n newAccounts: [],\n meta: {\n accountsToRemove: [],\n removedActiveAccount: null,\n },\n};\n"]}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { ExtensionAccountsContextInterface, ExtensionAccountsProviderProps } from "./types";
3
+ export declare const ExtensionAccountsContext: import("react").Context<ExtensionAccountsContextInterface>;
4
+ export declare const useExtensionAccounts: () => ExtensionAccountsContextInterface;
5
+ export declare const ExtensionAccountsProvider: ({ children, network, ss58, dappName, activeAccount, setActiveAccount, onExtensionEnabled, }: ExtensionAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,327 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
38
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
39
+ if (ar || !(i in from)) {
40
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
41
+ ar[i] = from[i];
42
+ }
43
+ }
44
+ return to.concat(ar || Array.prototype.slice.call(from));
45
+ };
46
+ import { jsx as _jsx } from "react/jsx-runtime";
47
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
48
+ import { localStorageOrDefault, setStateWithRef } from "@w3ux/utils";
49
+ import { defaultExtensionAccountsContext } from "./defaults";
50
+ import { useImportExtension } from "./useImportExtension";
51
+ import { initPolkadotSnap } from "./snap";
52
+ import { Extensions } from "./Extensions";
53
+ import { connectActiveExtensionAccount, getActiveAccountLocal, getActiveExtensionAccount, } from "./utils";
54
+ import { useExtensions } from "../ExtensionsProvider";
55
+ import { useEffectIgnoreInitial } from "@w3ux/hooks";
56
+ export var ExtensionAccountsContext = createContext(defaultExtensionAccountsContext);
57
+ export var useExtensionAccounts = function () { return useContext(ExtensionAccountsContext); };
58
+ export var ExtensionAccountsProvider = function (_a) {
59
+ var children = _a.children, network = _a.network, ss58 = _a.ss58, dappName = _a.dappName, activeAccount = _a.activeAccount, setActiveAccount = _a.setActiveAccount, onExtensionEnabled = _a.onExtensionEnabled;
60
+ var handleImportExtension = useImportExtension().handleImportExtension;
61
+ var _b = useExtensions(), extensionsStatus = _b.extensionsStatus, setExtensionStatus = _b.setExtensionStatus, removeExtensionStatus = _b.removeExtensionStatus, checkingInjectedWeb3 = _b.checkingInjectedWeb3, extensionHasFeature = _b.extensionHasFeature;
62
+ var _c = useState([]), extensionAccounts = _c[0], setExtensionAccounts = _c[1];
63
+ var extensionAccountsRef = useRef(extensionAccounts);
64
+ var _d = useState("unsynced"), extensionAccountsSynced = _d[0], setExtensionAccountsSynced = _d[1];
65
+ var _e = useState([]), extensionsInitialised = _e[0], setExtensionsInitialised = _e[1];
66
+ var extensionsInitialisedRef = useRef(extensionsInitialised);
67
+ var unsubs = useRef({});
68
+ var maybeSetActiveAccount = function (address) {
69
+ if (typeof setActiveAccount === "function") {
70
+ setActiveAccount(address !== null && address !== void 0 ? address : null);
71
+ }
72
+ };
73
+ var maybeOnExtensionEnabled = function (id) {
74
+ if (typeof onExtensionEnabled === "function") {
75
+ onExtensionEnabled(id);
76
+ }
77
+ };
78
+ var connectToAccount = function (account) {
79
+ var _a;
80
+ maybeSetActiveAccount((_a = account === null || account === void 0 ? void 0 : account.address) !== null && _a !== void 0 ? _a : null);
81
+ };
82
+ var connectActiveExtensions = function () { return __awaiter(void 0, void 0, void 0, function () {
83
+ var extensionIds, rawExtensions, enableResults, _a, _b, _c, connectedExtensions, extensionsWithError, initialAccounts, activeAccountInInitial, handleAccounts, _loop_1, _i, _d, _e, id, extension;
84
+ return __generator(this, function (_f) {
85
+ switch (_f.label) {
86
+ case 0:
87
+ extensionIds = Object.keys(extensionsStatus);
88
+ if (!extensionIds.length) {
89
+ return [2 ];
90
+ }
91
+ return [4 , handleExtensionAdapters(extensionIds)];
92
+ case 1:
93
+ _f.sent();
94
+ rawExtensions = Extensions.getFromIds(extensionIds);
95
+ _b = (_a = Extensions).formatEnabled;
96
+ _c = [rawExtensions];
97
+ return [4 , Extensions.enable(rawExtensions, dappName)];
98
+ case 2:
99
+ enableResults = _b.apply(_a, _c.concat([_f.sent()]));
100
+ connectedExtensions = Extensions.connected(enableResults);
101
+ extensionsWithError = Extensions.withError(enableResults);
102
+ Array.from(connectedExtensions.keys()).forEach(function (id) {
103
+ return Extensions.addToLocal(id);
104
+ });
105
+ return [4 , Extensions.getAllAccounts(connectedExtensions, ss58)];
106
+ case 3:
107
+ initialAccounts = _f.sent();
108
+ activeAccountInInitial = initialAccounts.find(function (_a) {
109
+ var address = _a.address;
110
+ return address === getActiveAccountLocal(network, ss58);
111
+ });
112
+ Array.from(extensionsWithError.entries()).forEach(function (_a) {
113
+ var id = _a[0], state = _a[1];
114
+ handleExtensionError(id, state.error);
115
+ });
116
+ Array.from(connectedExtensions.keys()).forEach(function (id) {
117
+ setExtensionStatus(id, "connected");
118
+ updateInitialisedExtensions(id);
119
+ });
120
+ updateExtensionAccounts({ add: initialAccounts, remove: [] });
121
+ if (activeAccountInInitial) {
122
+ connectActiveExtensionAccount(activeAccountInInitial, connectToAccount);
123
+ }
124
+ handleAccounts = function (extensionId, accounts, signer) {
125
+ var _a = handleImportExtension(extensionId, extensionAccountsRef.current, signer, accounts, {
126
+ network: network,
127
+ ss58: ss58,
128
+ }), newAccounts = _a.newAccounts, accountsToRemove = _a.meta.accountsToRemove;
129
+ updateExtensionAccounts({ add: newAccounts, remove: accountsToRemove });
130
+ };
131
+ _loop_1 = function (id, extension) {
132
+ if (extensionHasFeature(id, "subscribeAccounts")) {
133
+ var unsub = extension.accounts.subscribe(function (accounts) {
134
+ handleAccounts(id, accounts || [], extension.signer);
135
+ });
136
+ addToUnsubscribe(id, unsub);
137
+ }
138
+ };
139
+ for (_i = 0, _d = Array.from(connectedExtensions.entries()); _i < _d.length; _i++) {
140
+ _e = _d[_i], id = _e[0], extension = _e[1].extension;
141
+ _loop_1(id, extension);
142
+ }
143
+ return [2 ];
144
+ }
145
+ });
146
+ }); };
147
+ var connectExtensionAccounts = function (id) { return __awaiter(void 0, void 0, void 0, function () {
148
+ var extensionIds, exists, enable, extension_1, handleAccounts_1, accounts, unsub, err_1;
149
+ return __generator(this, function (_a) {
150
+ switch (_a.label) {
151
+ case 0:
152
+ extensionIds = Object.keys(extensionsStatus);
153
+ exists = extensionIds.find(function (key) { return key === id; }) || undefined;
154
+ if (!!exists) return [3 , 1];
155
+ updateInitialisedExtensions("unknown_extension_".concat(extensionsInitialisedRef.current.length + 1));
156
+ return [3 , 10];
157
+ case 1:
158
+ return [4 , handleExtensionAdapters([id])];
159
+ case 2:
160
+ _a.sent();
161
+ _a.label = 3;
162
+ case 3:
163
+ _a.trys.push([3, 9, , 10]);
164
+ enable = window.injectedWeb3[id].enable;
165
+ return [4 , enable(dappName)];
166
+ case 4:
167
+ extension_1 = _a.sent();
168
+ if (!(extension_1 !== undefined)) return [3 , 8];
169
+ handleAccounts_1 = function (accounts) {
170
+ var _a = handleImportExtension(id, extensionAccountsRef.current, extension_1.signer, accounts, { network: network, ss58: ss58 }), newAccounts = _a.newAccounts, _b = _a.meta, removedActiveAccount = _b.removedActiveAccount, accountsToRemove = _b.accountsToRemove;
171
+ if (!activeAccount) {
172
+ var activeExtensionAccount = getActiveExtensionAccount({ network: network, ss58: ss58 }, newAccounts);
173
+ if ((activeExtensionAccount === null || activeExtensionAccount === void 0 ? void 0 : activeExtensionAccount.address) !== removedActiveAccount &&
174
+ removedActiveAccount !== null) {
175
+ connectActiveExtensionAccount(activeExtensionAccount, connectToAccount);
176
+ }
177
+ }
178
+ updateExtensionAccounts({
179
+ add: newAccounts,
180
+ remove: accountsToRemove,
181
+ });
182
+ updateInitialisedExtensions(id);
183
+ };
184
+ Extensions.addToLocal(id);
185
+ maybeOnExtensionEnabled(id);
186
+ setExtensionStatus(id, "connected");
187
+ if (!!extensionHasFeature(id, "subscribeAccounts")) return [3 , 6];
188
+ return [4 , extension_1.accounts.get()];
189
+ case 5:
190
+ accounts = _a.sent();
191
+ handleAccounts_1(accounts);
192
+ return [3 , 7];
193
+ case 6:
194
+ unsub = extension_1.accounts.subscribe(function (accounts) {
195
+ handleAccounts_1(accounts || []);
196
+ });
197
+ addToUnsubscribe(id, unsub);
198
+ _a.label = 7;
199
+ case 7: return [2 , true];
200
+ case 8: return [3 , 10];
201
+ case 9:
202
+ err_1 = _a.sent();
203
+ handleExtensionError(id, String(err_1));
204
+ return [3 , 10];
205
+ case 10: return [2 , false];
206
+ }
207
+ });
208
+ }); };
209
+ var handleExtensionError = function (id, err) {
210
+ if (err.startsWith("Error")) {
211
+ Extensions.removeFromLocal(id);
212
+ if (err.substring(0, 17) === "NotInstalledError") {
213
+ removeExtensionStatus(id);
214
+ }
215
+ else {
216
+ setExtensionStatus(id, "not_authenticated");
217
+ }
218
+ }
219
+ updateInitialisedExtensions(id);
220
+ };
221
+ var handleExtensionAdapters = function (extensionIds) { return __awaiter(void 0, void 0, void 0, function () {
222
+ return __generator(this, function (_a) {
223
+ switch (_a.label) {
224
+ case 0:
225
+ if (!extensionIds.find(function (id) { return id === "metamask-polkadot-snap"; })) return [3 , 2];
226
+ return [4 , initPolkadotSnap({
227
+ networkName: network,
228
+ addressPrefix: ss58,
229
+ })];
230
+ case 1:
231
+ _a.sent();
232
+ _a.label = 2;
233
+ case 2: return [2 ];
234
+ }
235
+ });
236
+ }); };
237
+ var updateInitialisedExtensions = function (id) {
238
+ if (!extensionsInitialisedRef.current.includes(id)) {
239
+ setStateWithRef(__spreadArray([], extensionsInitialisedRef.current, true).concat(id), setExtensionsInitialised, extensionsInitialisedRef);
240
+ }
241
+ };
242
+ var updateExtensionAccounts = function (_a) {
243
+ var add = _a.add, remove = _a.remove;
244
+ var newAccounts = __spreadArray([], extensionAccountsRef.current, true).concat(add)
245
+ .filter(function (a) { return remove.find(function (s) { return s.address === a.address; }) === undefined; });
246
+ if (remove.length) {
247
+ unsubAccounts(remove);
248
+ if (activeAccount &&
249
+ remove.find(function (_a) {
250
+ var address = _a.address;
251
+ return address === activeAccount;
252
+ }) !== undefined) {
253
+ maybeSetActiveAccount(null);
254
+ }
255
+ }
256
+ setStateWithRef(newAccounts, setExtensionAccounts, extensionAccountsRef);
257
+ };
258
+ var addToUnsubscribe = function (id, unsub) {
259
+ unsubs.current[id] = unsub;
260
+ };
261
+ var unsubAccounts = function (accounts) {
262
+ if (accounts.length) {
263
+ var _loop_2 = function (address) {
264
+ if (extensionAccountsRef.current.find(function (a) { return a.address === address; })) {
265
+ var unsub = unsubs.current[address];
266
+ if (unsub) {
267
+ unsub();
268
+ delete unsubs.current[address];
269
+ }
270
+ }
271
+ };
272
+ for (var _i = 0, accounts_1 = accounts; _i < accounts_1.length; _i++) {
273
+ var address = accounts_1[_i].address;
274
+ _loop_2(address);
275
+ }
276
+ }
277
+ };
278
+ var unsubscribe = function () {
279
+ Object.values(unsubs.current).forEach(function (unsub) {
280
+ unsub();
281
+ });
282
+ };
283
+ var handleSyncExtensionAccounts = function () { return __awaiter(void 0, void 0, void 0, function () {
284
+ var localExtensions;
285
+ return __generator(this, function (_a) {
286
+ switch (_a.label) {
287
+ case 0:
288
+ if (!(!checkingInjectedWeb3 && extensionAccountsSynced === "unsynced")) return [3 , 3];
289
+ unsubscribe();
290
+ setStateWithRef([], setExtensionAccounts, extensionAccountsRef);
291
+ setStateWithRef([], setExtensionsInitialised, extensionsInitialisedRef);
292
+ if (!Object.keys(extensionsStatus).length) return [3 , 2];
293
+ localExtensions = localStorageOrDefault("active_extensions", [], true);
294
+ if (!(Object.keys(extensionsStatus).length && localExtensions.length)) return [3 , 2];
295
+ setExtensionAccountsSynced("syncing");
296
+ return [4 , connectActiveExtensions()];
297
+ case 1:
298
+ _a.sent();
299
+ _a.label = 2;
300
+ case 2:
301
+ setExtensionAccountsSynced("synced");
302
+ _a.label = 3;
303
+ case 3: return [2 ];
304
+ }
305
+ });
306
+ }); };
307
+ useEffect(function () {
308
+ handleSyncExtensionAccounts();
309
+ return function () { return unsubscribe(); };
310
+ }, [extensionsStatus, checkingInjectedWeb3, extensionAccountsSynced]);
311
+ useEffectIgnoreInitial(function () {
312
+ setExtensionAccountsSynced("unsynced");
313
+ }, [ss58]);
314
+ useEffectIgnoreInitial(function () {
315
+ if (!checkingInjectedWeb3 &&
316
+ extensionsInitialised.length === Object.keys(extensionsStatus).length) {
317
+ setExtensionAccountsSynced("synced");
318
+ }
319
+ }, [checkingInjectedWeb3, extensionsInitialised]);
320
+ return (_jsx(ExtensionAccountsContext.Provider, { value: {
321
+ connectExtensionAccounts: connectExtensionAccounts,
322
+ extensionAccountsSynced: extensionAccountsSynced,
323
+ extensionAccounts: extensionAccountsRef.current,
324
+ }, children: children }));
325
+ };
326
+
327
+