@w3ux/react-connect-kit 0.1.8 → 0.1.10
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/ExtensionAccountsProvider/Extensions.d.ts +1 -1
- package/ExtensionAccountsProvider/Extensions.js +3 -2
- package/ExtensionAccountsProvider/Extensions.js.map +1 -1
- package/ExtensionAccountsProvider/defaults.d.ts +1 -0
- package/ExtensionAccountsProvider/defaults.js +2 -1
- package/ExtensionAccountsProvider/defaults.js.map +1 -1
- package/ExtensionAccountsProvider/index.d.ts +1 -1
- package/ExtensionAccountsProvider/index.js +26 -15
- package/ExtensionAccountsProvider/index.js.map +1 -1
- package/ExtensionAccountsProvider/types.d.ts +1 -6
- package/ExtensionAccountsProvider/types.js.map +1 -1
- package/ExtensionAccountsProvider/useImportExtension.d.ts +2 -2
- package/ExtensionAccountsProvider/useImportExtension.js +7 -8
- package/ExtensionAccountsProvider/useImportExtension.js.map +1 -1
- package/ExtensionAccountsProvider/utils.d.ts +2 -3
- package/ExtensionAccountsProvider/utils.js +8 -8
- package/ExtensionAccountsProvider/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ export declare class Extensions {
|
|
|
6
6
|
static formatEnabled: (extensions: RawExtensions, results: PromiseSettledResult<ExtensionInterface>[]) => ExtensionEnableResults;
|
|
7
7
|
static connected: (extensions: ExtensionEnableResults) => ExtensionEnableResults;
|
|
8
8
|
static withError: (extensions: ExtensionEnableResults) => ExtensionEnableResults;
|
|
9
|
-
static getAllAccounts: (extensions: ExtensionEnableResults
|
|
9
|
+
static getAllAccounts: (extensions: ExtensionEnableResults) => Promise<ExtensionAccount[]>;
|
|
10
10
|
static isLocal: (id: string) => boolean;
|
|
11
11
|
static addToLocal: (id: string) => void;
|
|
12
12
|
static removeFromLocal: (id: string) => void;
|
|
@@ -47,6 +47,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
47
47
|
};
|
|
48
48
|
import { localStorageOrDefault } from "@w3ux/utils";
|
|
49
49
|
import Keyring from "@polkadot/keyring";
|
|
50
|
+
import { DEFAULT_SS58_PREFIX } from "./defaults";
|
|
50
51
|
var Extensions = (function () {
|
|
51
52
|
function Extensions() {
|
|
52
53
|
}
|
|
@@ -121,13 +122,13 @@ var Extensions = (function () {
|
|
|
121
122
|
return !state.connected;
|
|
122
123
|
}));
|
|
123
124
|
};
|
|
124
|
-
Extensions.getAllAccounts = function (extensions
|
|
125
|
+
Extensions.getAllAccounts = function (extensions) { return __awaiter(void 0, void 0, void 0, function () {
|
|
125
126
|
var keyring, results, extensionEntries, all_1, _loop_1, i, err_2;
|
|
126
127
|
return __generator(_a, function (_b) {
|
|
127
128
|
switch (_b.label) {
|
|
128
129
|
case 0:
|
|
129
130
|
keyring = new Keyring();
|
|
130
|
-
keyring.setSS58Format(
|
|
131
|
+
keyring.setSS58Format(DEFAULT_SS58_PREFIX);
|
|
131
132
|
_b.label = 1;
|
|
132
133
|
case 1:
|
|
133
134
|
_b.trys.push([1, 3, , 4]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/Extensions.ts"],"names":[],"mappings":"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","file":"Extensions.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-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"]}
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/Extensions.ts"],"names":[],"mappings":"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","file":"Extensions.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-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\";\nimport { DEFAULT_SS58_PREFIX } from \"./defaults\";\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 ): Promise<ExtensionAccount[]> => {\n // By default, format addresses with the default ss58 prefix.\n const keyring = new Keyring();\n keyring.setSS58Format(DEFAULT_SS58_PREFIX);\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 default 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"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export var defaultExtensionAccountsContext = {
|
|
2
2
|
connectExtensionAccounts: function () { return Promise.resolve(false); },
|
|
3
3
|
extensionAccountsSynced: "unsynced",
|
|
4
|
-
|
|
4
|
+
getExtensionAccounts: function (ss58) { return []; },
|
|
5
5
|
};
|
|
6
6
|
export var defaultHandleImportExtension = {
|
|
7
7
|
newAccounts: [],
|
|
@@ -10,5 +10,6 @@ export var defaultHandleImportExtension = {
|
|
|
10
10
|
removedActiveAccount: null,
|
|
11
11
|
},
|
|
12
12
|
};
|
|
13
|
+
export var DEFAULT_SS58_PREFIX = 0;
|
|
13
14
|
|
|
14
15
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/defaults.ts"],"names":[],"mappings":"AAAA;wCACwC;AACxC,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,
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/defaults.ts"],"names":[],"mappings":"AAAA;wCACwC;AACxC,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,oBAAoB,EAAE,UAAC,IAAI,IAAK,OAAA,EAAE,EAAF,CAAE;CACnC,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;AAEF,MAAM,CAAC,IAAM,mBAAmB,GAAG,CAAC,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-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 getExtensionAccounts: (ss58) => [],\n };\n\nexport const defaultHandleImportExtension = {\n newAccounts: [],\n meta: {\n accountsToRemove: [],\n removedActiveAccount: null,\n },\n};\n\nexport const DEFAULT_SS58_PREFIX = 0;\n"]}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
import { ExtensionAccountsContextInterface, ExtensionAccountsProviderProps } from "./types";
|
|
3
3
|
export declare const ExtensionAccountsContext: import("react").Context<ExtensionAccountsContextInterface>;
|
|
4
4
|
export declare const useExtensionAccounts: () => ExtensionAccountsContextInterface;
|
|
5
|
-
export declare const ExtensionAccountsProvider: ({ children, network,
|
|
5
|
+
export declare const ExtensionAccountsProvider: ({ children, network, dappName, activeAccount, setActiveAccount, onExtensionEnabled, }: ExtensionAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,3 +1,14 @@
|
|
|
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
|
+
};
|
|
1
12
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
13
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
14
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -46,17 +57,18 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
46
57
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
47
58
|
import { createContext, useContext, useEffect, useRef, useState } from "react";
|
|
48
59
|
import { localStorageOrDefault, setStateWithRef } from "@w3ux/utils";
|
|
49
|
-
import { defaultExtensionAccountsContext } from "./defaults";
|
|
60
|
+
import { DEFAULT_SS58_PREFIX, defaultExtensionAccountsContext, } from "./defaults";
|
|
50
61
|
import { useImportExtension } from "./useImportExtension";
|
|
51
62
|
import { initPolkadotSnap } from "./snap";
|
|
52
63
|
import { Extensions } from "./Extensions";
|
|
53
64
|
import { connectActiveExtensionAccount, getActiveAccountLocal, getActiveExtensionAccount, } from "./utils";
|
|
54
65
|
import { useExtensions } from "../ExtensionsProvider";
|
|
55
66
|
import { useEffectIgnoreInitial } from "@w3ux/hooks";
|
|
67
|
+
import Keyring from "@polkadot/keyring";
|
|
56
68
|
export var ExtensionAccountsContext = createContext(defaultExtensionAccountsContext);
|
|
57
69
|
export var useExtensionAccounts = function () { return useContext(ExtensionAccountsContext); };
|
|
58
70
|
export var ExtensionAccountsProvider = function (_a) {
|
|
59
|
-
var children = _a.children, network = _a.network,
|
|
71
|
+
var children = _a.children, network = _a.network, dappName = _a.dappName, activeAccount = _a.activeAccount, setActiveAccount = _a.setActiveAccount, onExtensionEnabled = _a.onExtensionEnabled;
|
|
60
72
|
var handleImportExtension = useImportExtension().handleImportExtension;
|
|
61
73
|
var _b = useExtensions(), extensionsStatus = _b.extensionsStatus, setExtensionStatus = _b.setExtensionStatus, removeExtensionStatus = _b.removeExtensionStatus, checkingInjectedWeb3 = _b.checkingInjectedWeb3, extensionHasFeature = _b.extensionHasFeature;
|
|
62
74
|
var _c = useState([]), extensionAccounts = _c[0], setExtensionAccounts = _c[1];
|
|
@@ -102,12 +114,12 @@ export var ExtensionAccountsProvider = function (_a) {
|
|
|
102
114
|
Array.from(connectedExtensions.keys()).forEach(function (id) {
|
|
103
115
|
return Extensions.addToLocal(id);
|
|
104
116
|
});
|
|
105
|
-
return [4 , Extensions.getAllAccounts(connectedExtensions
|
|
117
|
+
return [4 , Extensions.getAllAccounts(connectedExtensions)];
|
|
106
118
|
case 3:
|
|
107
119
|
initialAccounts = _f.sent();
|
|
108
120
|
activeAccountInInitial = initialAccounts.find(function (_a) {
|
|
109
121
|
var address = _a.address;
|
|
110
|
-
return address === getActiveAccountLocal(network
|
|
122
|
+
return address === getActiveAccountLocal(network);
|
|
111
123
|
});
|
|
112
124
|
Array.from(extensionsWithError.entries()).forEach(function (_a) {
|
|
113
125
|
var id = _a[0], state = _a[1];
|
|
@@ -122,10 +134,7 @@ export var ExtensionAccountsProvider = function (_a) {
|
|
|
122
134
|
connectActiveExtensionAccount(activeAccountInInitial, connectToAccount);
|
|
123
135
|
}
|
|
124
136
|
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;
|
|
137
|
+
var _a = handleImportExtension(extensionId, extensionAccountsRef.current, signer, accounts, network), newAccounts = _a.newAccounts, accountsToRemove = _a.meta.accountsToRemove;
|
|
129
138
|
updateExtensionAccounts({ add: newAccounts, remove: accountsToRemove });
|
|
130
139
|
};
|
|
131
140
|
_loop_1 = function (id, extension) {
|
|
@@ -167,9 +176,9 @@ export var ExtensionAccountsProvider = function (_a) {
|
|
|
167
176
|
extension_1 = _a.sent();
|
|
168
177
|
if (!(extension_1 !== undefined)) return [3 , 8];
|
|
169
178
|
handleAccounts_1 = function (accounts) {
|
|
170
|
-
var _a = handleImportExtension(id, extensionAccountsRef.current, extension_1.signer, accounts,
|
|
179
|
+
var _a = handleImportExtension(id, extensionAccountsRef.current, extension_1.signer, accounts, network), newAccounts = _a.newAccounts, _b = _a.meta, removedActiveAccount = _b.removedActiveAccount, accountsToRemove = _b.accountsToRemove;
|
|
171
180
|
if (!activeAccount) {
|
|
172
|
-
var activeExtensionAccount = getActiveExtensionAccount(
|
|
181
|
+
var activeExtensionAccount = getActiveExtensionAccount(network, newAccounts);
|
|
173
182
|
if ((activeExtensionAccount === null || activeExtensionAccount === void 0 ? void 0 : activeExtensionAccount.address) !== removedActiveAccount &&
|
|
174
183
|
removedActiveAccount !== null) {
|
|
175
184
|
connectActiveExtensionAccount(activeExtensionAccount, connectToAccount);
|
|
@@ -225,7 +234,7 @@ export var ExtensionAccountsProvider = function (_a) {
|
|
|
225
234
|
if (!extensionIds.find(function (id) { return id === "metamask-polkadot-snap"; })) return [3 , 2];
|
|
226
235
|
return [4 , initPolkadotSnap({
|
|
227
236
|
networkName: network,
|
|
228
|
-
addressPrefix:
|
|
237
|
+
addressPrefix: DEFAULT_SS58_PREFIX,
|
|
229
238
|
})];
|
|
230
239
|
case 1:
|
|
231
240
|
_a.sent();
|
|
@@ -304,13 +313,15 @@ export var ExtensionAccountsProvider = function (_a) {
|
|
|
304
313
|
}
|
|
305
314
|
});
|
|
306
315
|
}); };
|
|
316
|
+
var getExtensionAccounts = function (ss58) {
|
|
317
|
+
var keyring = new Keyring();
|
|
318
|
+
keyring.setSS58Format(ss58);
|
|
319
|
+
return extensionAccounts.map(function (account) { return (__assign(__assign({}, account), { address: keyring.addFromAddress(account.address).address })); });
|
|
320
|
+
};
|
|
307
321
|
useEffect(function () {
|
|
308
322
|
handleSyncExtensionAccounts();
|
|
309
323
|
return function () { return unsubscribe(); };
|
|
310
324
|
}, [extensionsStatus, checkingInjectedWeb3, extensionAccountsSynced]);
|
|
311
|
-
useEffectIgnoreInitial(function () {
|
|
312
|
-
setExtensionAccountsSynced("unsynced");
|
|
313
|
-
}, [ss58]);
|
|
314
325
|
useEffectIgnoreInitial(function () {
|
|
315
326
|
if (!checkingInjectedWeb3 &&
|
|
316
327
|
extensionsInitialised.length === Object.keys(extensionsStatus).length) {
|
|
@@ -320,7 +331,7 @@ export var ExtensionAccountsProvider = function (_a) {
|
|
|
320
331
|
return (_jsx(ExtensionAccountsContext.Provider, { value: {
|
|
321
332
|
connectExtensionAccounts: connectExtensionAccounts,
|
|
322
333
|
extensionAccountsSynced: extensionAccountsSynced,
|
|
323
|
-
|
|
334
|
+
getExtensionAccounts: getExtensionAccounts,
|
|
324
335
|
}, children: children }));
|
|
325
336
|
};
|
|
326
337
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createContext, useContext, useEffect, useRef, useState } from \"react\";\nimport { localStorageOrDefault, setStateWithRef } from \"@w3ux/utils\";\nimport { defaultExtensionAccountsContext } from \"./defaults\";\nimport { ImportedAccount, AnyFunction, Sync, VoidFn } from \"../types\";\nimport {\n ExtensionAccount,\n ExtensionInterface,\n} from \"../ExtensionsProvider/types\";\nimport {\n ExtensionAccountsContextInterface,\n ExtensionAccountsProviderProps,\n} from \"./types\";\nimport { useImportExtension } from \"./useImportExtension\";\nimport { initPolkadotSnap } from \"./snap\";\nimport { SnapNetworks } from \"@chainsafe/metamask-polkadot-types\";\nimport { Extensions } from \"./Extensions\";\nimport {\n connectActiveExtensionAccount,\n getActiveAccountLocal,\n getActiveExtensionAccount,\n} from \"./utils\";\nimport { useExtensions } from \"../ExtensionsProvider\";\nimport { useEffectIgnoreInitial } from \"@w3ux/hooks\";\n\nexport const ExtensionAccountsContext =\n createContext<ExtensionAccountsContextInterface>(\n defaultExtensionAccountsContext\n );\n\nexport const useExtensionAccounts = () => useContext(ExtensionAccountsContext);\n\nexport const ExtensionAccountsProvider = ({\n children,\n network,\n ss58,\n dappName,\n activeAccount,\n setActiveAccount,\n onExtensionEnabled,\n}: ExtensionAccountsProviderProps) => {\n const { handleImportExtension } = useImportExtension();\n\n const {\n extensionsStatus,\n setExtensionStatus,\n removeExtensionStatus,\n checkingInjectedWeb3,\n extensionHasFeature,\n } = useExtensions();\n\n // Store connected extension accounts.\n const [extensionAccounts, setExtensionAccounts] = useState<ImportedAccount[]>(\n []\n );\n const extensionAccountsRef = useRef(extensionAccounts);\n\n // Store whether extension accounts have been synced.\n const [extensionAccountsSynced, setExtensionAccountsSynced] =\n useState<Sync>(\"unsynced\");\n\n // Store extensions whose account subscriptions have been initialised.\n const [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n []\n );\n const extensionsInitialisedRef = useRef(extensionsInitialised);\n\n // Store unsubscribe handlers for connected extensions.\n const unsubs = useRef<Record<string, VoidFn>>({});\n\n // Helper for setting active account. Ignores if not a valid function.\n const maybeSetActiveAccount = (address: string) => {\n if (typeof setActiveAccount === \"function\") {\n setActiveAccount(address ?? null);\n }\n };\n\n // Helper for calling extension enabled callback. Ignores if not a valid function.\n const maybeOnExtensionEnabled = (id: string) => {\n if (typeof onExtensionEnabled === \"function\") {\n onExtensionEnabled(id);\n }\n };\n\n const connectToAccount = (account: ImportedAccount | null) => {\n maybeSetActiveAccount(account?.address ?? null);\n };\n\n // connectActiveExtensions\n //\n // Connects to extensions that already have been connected to and stored in localStorage. Loop\n // through extensions and connect to accounts. If `activeAccount` exists locally, we wait until\n // all extensions are looped before connecting to it; there is no guarantee it still exists - must\n // explicitly find it.\n const connectActiveExtensions = async () => {\n const extensionIds = Object.keys(extensionsStatus);\n if (!extensionIds.length) {\n return;\n }\n\n // Pre-connect: Inject extensions into `injectedWeb3` if not already injected.\n await handleExtensionAdapters(extensionIds);\n\n // Iterate previously connected extensions and retreive valid `enable` functions.\n // ------------------------------------------------------------------------------\n const rawExtensions = Extensions.getFromIds(extensionIds);\n\n // Attempt to connect to extensions via `enable` and format the results.\n const enableResults = Extensions.formatEnabled(\n rawExtensions,\n await Extensions.enable(rawExtensions, dappName)\n );\n\n // Retrieve the resulting connected extensions only.\n const connectedExtensions = Extensions.connected(enableResults);\n\n // Retrieve extensions that failed to connect.\n const extensionsWithError = Extensions.withError(enableResults);\n\n // Add connected extensions to local storage.\n Array.from(connectedExtensions.keys()).forEach((id) =>\n Extensions.addToLocal(id)\n );\n\n // Initial fetch of extension accounts to populate accounts & extensions state.\n // ----------------------------------------------------------------------------\n\n // Get full list of imported accounts.\n const initialAccounts = await Extensions.getAllAccounts(\n connectedExtensions,\n ss58\n );\n\n // Connect to the active account if found in initial accounts.\n const activeAccountInInitial = initialAccounts.find(\n ({ address }) => address === getActiveAccountLocal(network, ss58)\n );\n\n // Perform all initial state updates.\n // ----------------------------------\n\n Array.from(extensionsWithError.entries()).forEach(([id, state]) => {\n handleExtensionError(id, state.error);\n });\n\n Array.from(connectedExtensions.keys()).forEach((id) => {\n setExtensionStatus(id, \"connected\");\n updateInitialisedExtensions(id);\n });\n\n updateExtensionAccounts({ add: initialAccounts, remove: [] });\n\n if (activeAccountInInitial) {\n connectActiveExtensionAccount(activeAccountInInitial, connectToAccount);\n }\n\n // Initiate account subscriptions for connected extensions.\n // --------------------------------------------------------\n\n // Handler function for each extension accounts subscription.\n const handleAccounts = (\n extensionId: string,\n accounts: ExtensionAccount[],\n signer: AnyFunction\n ) => {\n const {\n newAccounts,\n meta: { accountsToRemove },\n } = handleImportExtension(\n extensionId,\n extensionAccountsRef.current,\n signer,\n accounts,\n {\n network,\n ss58,\n }\n );\n\n // Update added and removed accounts.\n updateExtensionAccounts({ add: newAccounts, remove: accountsToRemove });\n };\n\n // Try to subscribe to accounts for each connected extension.\n for (const [id, { extension }] of Array.from(\n connectedExtensions.entries()\n )) {\n // If enabled, subscribe to accounts.\n if (extensionHasFeature(id, \"subscribeAccounts\")) {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(id, accounts || [], extension.signer);\n });\n\n // Add unsub to context ref.\n addToUnsubscribe(id, unsub);\n }\n }\n };\n\n // connectExtensionAccounts\n //\n // Similar to the above but only connects to a single extension. This is invoked by the user by\n // clicking on an extension. If activeAccount is not found here, it is simply ignored.\n const connectExtensionAccounts = async (id: string): Promise<boolean> => {\n const extensionIds = Object.keys(extensionsStatus);\n const exists = extensionIds.find((key) => key === id) || undefined;\n\n if (!exists) {\n updateInitialisedExtensions(\n `unknown_extension_${extensionsInitialisedRef.current.length + 1}`\n );\n } else {\n // Pre-connect: Inject into `injectedWeb3` if the provided extension is not already injected.\n await handleExtensionAdapters([id]);\n\n try {\n // Attempt to get extension `enable` property.\n const { enable } = window.injectedWeb3[id];\n\n // Summons extension popup.\n const extension: ExtensionInterface = await enable(dappName);\n\n // Continue if `enable` succeeded, and if the current network is supported.\n if (extension !== undefined) {\n // Handler for new accounts.\n const handleAccounts = (accounts: ExtensionAccount[]) => {\n const {\n newAccounts,\n meta: { removedActiveAccount, accountsToRemove },\n } = handleImportExtension(\n id,\n extensionAccountsRef.current,\n extension.signer,\n accounts,\n { network, ss58 }\n );\n // Set active account for network if not yet set.\n if (!activeAccount) {\n const activeExtensionAccount = getActiveExtensionAccount(\n { network, ss58 },\n newAccounts\n );\n if (\n activeExtensionAccount?.address !== removedActiveAccount &&\n removedActiveAccount !== null\n ) {\n connectActiveExtensionAccount(\n activeExtensionAccount,\n connectToAccount\n );\n }\n }\n\n // Update extension accounts state.\n updateExtensionAccounts({\n add: newAccounts,\n remove: accountsToRemove,\n });\n\n // Update initialised extensions.\n updateInitialisedExtensions(id);\n };\n\n // Call optional `onExtensionEnabled` callback.\n Extensions.addToLocal(id);\n\n maybeOnExtensionEnabled(id);\n setExtensionStatus(id, \"connected\");\n\n // If account subscriptions are not supported, simply get the account(s) from the extension. Otherwise, subscribe to accounts.\n if (!extensionHasFeature(id, \"subscribeAccounts\")) {\n const accounts = await extension.accounts.get();\n handleAccounts(accounts);\n } else {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(accounts || []);\n });\n addToUnsubscribe(id, unsub);\n }\n return true;\n }\n } catch (err) {\n handleExtensionError(id, String(err));\n }\n }\n return false;\n };\n\n // Handle errors when communiating with extensions.\n const handleExtensionError = (id: string, err: string) => {\n // if not general error (maybe enabled but no accounts trust app).\n if (err.startsWith(\"Error\")) {\n // remove extension from local `active_extensions`.\n Extensions.removeFromLocal(id);\n\n // extension not found (does not exist).\n if (err.substring(0, 17) === \"NotInstalledError\") {\n removeExtensionStatus(id);\n } else {\n // declare extension as no imported accounts authenticated.\n setExtensionStatus(id, \"not_authenticated\");\n }\n }\n // mark extension as initialised.\n updateInitialisedExtensions(id);\n };\n\n // Handle adaptors for extensions that are not supported by `injectedWeb3`.\n const handleExtensionAdapters = async (extensionIds: string[]) => {\n // Connect to Metamask Polkadot Snap and inject into `injectedWeb3` if avaialble.\n if (extensionIds.find((id) => id === \"metamask-polkadot-snap\")) {\n await initPolkadotSnap({\n networkName: network as SnapNetworks,\n addressPrefix: ss58,\n });\n }\n };\n\n // Update initialised extensions.\n const updateInitialisedExtensions = (id: string) => {\n if (!extensionsInitialisedRef.current.includes(id)) {\n setStateWithRef(\n [...extensionsInitialisedRef.current].concat(id),\n setExtensionsInitialised,\n extensionsInitialisedRef\n );\n }\n };\n\n // Add an extension account to context state.\n const updateExtensionAccounts = ({\n add,\n remove,\n }: {\n add: ExtensionAccount[];\n remove: ExtensionAccount[];\n }) => {\n // Add new accounts and remove any removed accounts.\n const newAccounts = [...extensionAccountsRef.current]\n .concat(add)\n .filter((a) => remove.find((s) => s.address === a.address) === undefined);\n\n if (remove.length) {\n // Unsubscribe from removed accounts.\n unsubAccounts(remove);\n\n // Remove active account if it is being forgotten.\n if (\n activeAccount &&\n remove.find(({ address }) => address === activeAccount) !== undefined\n ) {\n maybeSetActiveAccount(null);\n }\n }\n\n setStateWithRef(newAccounts, setExtensionAccounts, extensionAccountsRef);\n };\n\n // Add an extension id to unsubscribe state.\n const addToUnsubscribe = (id: string, unsub: VoidFn) => {\n unsubs.current[id] = unsub;\n };\n\n // Handle unsubscribing of an removed extension accounts.\n const unsubAccounts = (accounts: ImportedAccount[]) => {\n // Unsubscribe and remove unsub from context ref.\n if (accounts.length) {\n for (const { address } of accounts) {\n if (extensionAccountsRef.current.find((a) => a.address === address)) {\n const unsub = unsubs.current[address];\n if (unsub) {\n unsub();\n delete unsubs.current[address];\n }\n }\n }\n }\n };\n\n // Unsubscrbe all account subscriptions.\n const unsubscribe = () => {\n Object.values(unsubs.current).forEach((unsub) => {\n unsub();\n });\n };\n\n const handleSyncExtensionAccounts = async () => {\n // Wait for injectedWeb3 check to finish before starting account import process.\n if (!checkingInjectedWeb3 && extensionAccountsSynced === \"unsynced\") {\n // Unsubscribe from all accounts and reset state\n unsubscribe();\n setStateWithRef([], setExtensionAccounts, extensionAccountsRef);\n setStateWithRef([], setExtensionsInitialised, extensionsInitialisedRef);\n // If extensions have been fetched, get accounts if extensions exist and local extensions\n // exist (previously connected).\n if (Object.keys(extensionsStatus).length) {\n // get active extensions\n const localExtensions = localStorageOrDefault(\n `active_extensions`,\n [],\n true\n );\n if (Object.keys(extensionsStatus).length && localExtensions.length) {\n setExtensionAccountsSynced(\"syncing\");\n await connectActiveExtensions();\n }\n }\n\n // Syncing is complete. Also covers case where no extensions were found.\n setExtensionAccountsSynced(\"synced\");\n }\n };\n\n // Re-sync extensions accounts on `unsynced`.\n useEffect(() => {\n handleSyncExtensionAccounts();\n\n return () => unsubscribe();\n }, [extensionsStatus, checkingInjectedWeb3, extensionAccountsSynced]);\n\n // Change syncing to unsynced on `ss58` change.\n useEffectIgnoreInitial(() => {\n setExtensionAccountsSynced(\"unsynced\");\n }, [ss58]);\n\n // Once initialised extensions equal total extensions present in `injectedWeb3`, mark extensions\n // as fetched.\n useEffectIgnoreInitial(() => {\n if (\n !checkingInjectedWeb3 &&\n extensionsInitialised.length === Object.keys(extensionsStatus).length\n ) {\n setExtensionAccountsSynced(\"synced\");\n }\n }, [checkingInjectedWeb3, extensionsInitialised]);\n\n return (\n <ExtensionAccountsContext.Provider\n value={{\n connectExtensionAccounts,\n extensionAccountsSynced,\n extensionAccounts: extensionAccountsRef.current,\n }}\n >\n {children}\n </ExtensionAccountsContext.Provider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createContext, useContext, useEffect, useRef, useState } from \"react\";\nimport { localStorageOrDefault, setStateWithRef } from \"@w3ux/utils\";\nimport {\n DEFAULT_SS58_PREFIX,\n defaultExtensionAccountsContext,\n} from \"./defaults\";\nimport { ImportedAccount, AnyFunction, Sync, VoidFn } from \"../types\";\nimport {\n ExtensionAccount,\n ExtensionInterface,\n} from \"../ExtensionsProvider/types\";\nimport {\n ExtensionAccountsContextInterface,\n ExtensionAccountsProviderProps,\n} from \"./types\";\nimport { useImportExtension } from \"./useImportExtension\";\nimport { initPolkadotSnap } from \"./snap\";\nimport { SnapNetworks } from \"@chainsafe/metamask-polkadot-types\";\nimport { Extensions } from \"./Extensions\";\nimport {\n connectActiveExtensionAccount,\n getActiveAccountLocal,\n getActiveExtensionAccount,\n} from \"./utils\";\nimport { useExtensions } from \"../ExtensionsProvider\";\nimport { useEffectIgnoreInitial } from \"@w3ux/hooks\";\nimport Keyring from \"@polkadot/keyring\";\n\nexport const ExtensionAccountsContext =\n createContext<ExtensionAccountsContextInterface>(\n defaultExtensionAccountsContext\n );\n\nexport const useExtensionAccounts = () => useContext(ExtensionAccountsContext);\n\nexport const ExtensionAccountsProvider = ({\n children,\n network,\n dappName,\n activeAccount,\n setActiveAccount,\n onExtensionEnabled,\n}: ExtensionAccountsProviderProps) => {\n const { handleImportExtension } = useImportExtension();\n\n const {\n extensionsStatus,\n setExtensionStatus,\n removeExtensionStatus,\n checkingInjectedWeb3,\n extensionHasFeature,\n } = useExtensions();\n\n // Store connected extension accounts.\n const [extensionAccounts, setExtensionAccounts] = useState<ImportedAccount[]>(\n []\n );\n const extensionAccountsRef = useRef(extensionAccounts);\n\n // Store whether extension accounts have been synced.\n const [extensionAccountsSynced, setExtensionAccountsSynced] =\n useState<Sync>(\"unsynced\");\n\n // Store extensions whose account subscriptions have been initialised.\n const [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n []\n );\n const extensionsInitialisedRef = useRef(extensionsInitialised);\n\n // Store unsubscribe handlers for connected extensions.\n const unsubs = useRef<Record<string, VoidFn>>({});\n\n // Helper for setting active account. Ignores if not a valid function.\n const maybeSetActiveAccount = (address: string) => {\n if (typeof setActiveAccount === \"function\") {\n setActiveAccount(address ?? null);\n }\n };\n\n // Helper for calling extension enabled callback. Ignores if not a valid function.\n const maybeOnExtensionEnabled = (id: string) => {\n if (typeof onExtensionEnabled === \"function\") {\n onExtensionEnabled(id);\n }\n };\n\n const connectToAccount = (account: ImportedAccount | null) => {\n maybeSetActiveAccount(account?.address ?? null);\n };\n\n // connectActiveExtensions\n //\n // Connects to extensions that already have been connected to and stored in localStorage. Loop\n // through extensions and connect to accounts. If `activeAccount` exists locally, we wait until\n // all extensions are looped before connecting to it; there is no guarantee it still exists - must\n // explicitly find it.\n const connectActiveExtensions = async () => {\n const extensionIds = Object.keys(extensionsStatus);\n if (!extensionIds.length) {\n return;\n }\n\n // Pre-connect: Inject extensions into `injectedWeb3` if not already injected.\n await handleExtensionAdapters(extensionIds);\n\n // Iterate previously connected extensions and retreive valid `enable` functions.\n // ------------------------------------------------------------------------------\n const rawExtensions = Extensions.getFromIds(extensionIds);\n\n // Attempt to connect to extensions via `enable` and format the results.\n const enableResults = Extensions.formatEnabled(\n rawExtensions,\n await Extensions.enable(rawExtensions, dappName)\n );\n\n // Retrieve the resulting connected extensions only.\n const connectedExtensions = Extensions.connected(enableResults);\n\n // Retrieve extensions that failed to connect.\n const extensionsWithError = Extensions.withError(enableResults);\n\n // Add connected extensions to local storage.\n Array.from(connectedExtensions.keys()).forEach((id) =>\n Extensions.addToLocal(id)\n );\n\n // Initial fetch of extension accounts to populate accounts & extensions state.\n // ----------------------------------------------------------------------------\n\n // Get full list of imported accounts.\n const initialAccounts =\n await Extensions.getAllAccounts(connectedExtensions);\n\n // Connect to the active account if found in initial accounts.\n const activeAccountInInitial = initialAccounts.find(\n ({ address }) => address === getActiveAccountLocal(network)\n );\n\n // Perform all initial state updates.\n // ----------------------------------\n\n Array.from(extensionsWithError.entries()).forEach(([id, state]) => {\n handleExtensionError(id, state.error);\n });\n\n Array.from(connectedExtensions.keys()).forEach((id) => {\n setExtensionStatus(id, \"connected\");\n updateInitialisedExtensions(id);\n });\n\n updateExtensionAccounts({ add: initialAccounts, remove: [] });\n\n if (activeAccountInInitial) {\n connectActiveExtensionAccount(activeAccountInInitial, connectToAccount);\n }\n\n // Initiate account subscriptions for connected extensions.\n // --------------------------------------------------------\n\n // Handler function for each extension accounts subscription.\n const handleAccounts = (\n extensionId: string,\n accounts: ExtensionAccount[],\n signer: AnyFunction\n ) => {\n const {\n newAccounts,\n meta: { accountsToRemove },\n } = handleImportExtension(\n extensionId,\n extensionAccountsRef.current,\n signer,\n accounts,\n network\n );\n\n // Update added and removed accounts.\n updateExtensionAccounts({ add: newAccounts, remove: accountsToRemove });\n };\n\n // Try to subscribe to accounts for each connected extension.\n for (const [id, { extension }] of Array.from(\n connectedExtensions.entries()\n )) {\n // If enabled, subscribe to accounts.\n if (extensionHasFeature(id, \"subscribeAccounts\")) {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(id, accounts || [], extension.signer);\n });\n\n // Add unsub to context ref.\n addToUnsubscribe(id, unsub);\n }\n }\n };\n\n // connectExtensionAccounts\n //\n // Similar to the above but only connects to a single extension. This is invoked by the user by\n // clicking on an extension. If activeAccount is not found here, it is simply ignored.\n const connectExtensionAccounts = async (id: string): Promise<boolean> => {\n const extensionIds = Object.keys(extensionsStatus);\n const exists = extensionIds.find((key) => key === id) || undefined;\n\n if (!exists) {\n updateInitialisedExtensions(\n `unknown_extension_${extensionsInitialisedRef.current.length + 1}`\n );\n } else {\n // Pre-connect: Inject into `injectedWeb3` if the provided extension is not already injected.\n await handleExtensionAdapters([id]);\n\n try {\n // Attempt to get extension `enable` property.\n const { enable } = window.injectedWeb3[id];\n\n // Summons extension popup.\n const extension: ExtensionInterface = await enable(dappName);\n\n // Continue if `enable` succeeded, and if the current network is supported.\n if (extension !== undefined) {\n // Handler for new accounts.\n const handleAccounts = (accounts: ExtensionAccount[]) => {\n const {\n newAccounts,\n meta: { removedActiveAccount, accountsToRemove },\n } = handleImportExtension(\n id,\n extensionAccountsRef.current,\n extension.signer,\n accounts,\n network\n );\n // Set active account for network if not yet set.\n if (!activeAccount) {\n const activeExtensionAccount = getActiveExtensionAccount(\n network,\n newAccounts\n );\n if (\n activeExtensionAccount?.address !== removedActiveAccount &&\n removedActiveAccount !== null\n ) {\n connectActiveExtensionAccount(\n activeExtensionAccount,\n connectToAccount\n );\n }\n }\n\n // Update extension accounts state.\n updateExtensionAccounts({\n add: newAccounts,\n remove: accountsToRemove,\n });\n\n // Update initialised extensions.\n updateInitialisedExtensions(id);\n };\n\n // Call optional `onExtensionEnabled` callback.\n Extensions.addToLocal(id);\n\n maybeOnExtensionEnabled(id);\n setExtensionStatus(id, \"connected\");\n\n // If account subscriptions are not supported, simply get the account(s) from the extension. Otherwise, subscribe to accounts.\n if (!extensionHasFeature(id, \"subscribeAccounts\")) {\n const accounts = await extension.accounts.get();\n handleAccounts(accounts);\n } else {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(accounts || []);\n });\n addToUnsubscribe(id, unsub);\n }\n return true;\n }\n } catch (err) {\n handleExtensionError(id, String(err));\n }\n }\n return false;\n };\n\n // Handle errors when communiating with extensions.\n const handleExtensionError = (id: string, err: string) => {\n // if not general error (maybe enabled but no accounts trust app).\n if (err.startsWith(\"Error\")) {\n // remove extension from local `active_extensions`.\n Extensions.removeFromLocal(id);\n\n // extension not found (does not exist).\n if (err.substring(0, 17) === \"NotInstalledError\") {\n removeExtensionStatus(id);\n } else {\n // declare extension as no imported accounts authenticated.\n setExtensionStatus(id, \"not_authenticated\");\n }\n }\n // mark extension as initialised.\n updateInitialisedExtensions(id);\n };\n\n // Handle adaptors for extensions that are not supported by `injectedWeb3`.\n const handleExtensionAdapters = async (extensionIds: string[]) => {\n // Connect to Metamask Polkadot Snap and inject into `injectedWeb3` if avaialble.\n if (extensionIds.find((id) => id === \"metamask-polkadot-snap\")) {\n await initPolkadotSnap({\n networkName: network as SnapNetworks,\n addressPrefix: DEFAULT_SS58_PREFIX,\n });\n }\n };\n\n // Update initialised extensions.\n const updateInitialisedExtensions = (id: string) => {\n if (!extensionsInitialisedRef.current.includes(id)) {\n setStateWithRef(\n [...extensionsInitialisedRef.current].concat(id),\n setExtensionsInitialised,\n extensionsInitialisedRef\n );\n }\n };\n\n // Add an extension account to context state.\n const updateExtensionAccounts = ({\n add,\n remove,\n }: {\n add: ExtensionAccount[];\n remove: ExtensionAccount[];\n }) => {\n // Add new accounts and remove any removed accounts.\n const newAccounts = [...extensionAccountsRef.current]\n .concat(add)\n .filter((a) => remove.find((s) => s.address === a.address) === undefined);\n\n if (remove.length) {\n // Unsubscribe from removed accounts.\n unsubAccounts(remove);\n\n // Remove active account if it is being forgotten.\n if (\n activeAccount &&\n remove.find(({ address }) => address === activeAccount) !== undefined\n ) {\n maybeSetActiveAccount(null);\n }\n }\n\n setStateWithRef(newAccounts, setExtensionAccounts, extensionAccountsRef);\n };\n\n // Add an extension id to unsubscribe state.\n const addToUnsubscribe = (id: string, unsub: VoidFn) => {\n unsubs.current[id] = unsub;\n };\n\n // Handle unsubscribing of an removed extension accounts.\n const unsubAccounts = (accounts: ImportedAccount[]) => {\n // Unsubscribe and remove unsub from context ref.\n if (accounts.length) {\n for (const { address } of accounts) {\n if (extensionAccountsRef.current.find((a) => a.address === address)) {\n const unsub = unsubs.current[address];\n if (unsub) {\n unsub();\n delete unsubs.current[address];\n }\n }\n }\n }\n };\n\n // Unsubscrbe all account subscriptions.\n const unsubscribe = () => {\n Object.values(unsubs.current).forEach((unsub) => {\n unsub();\n });\n };\n\n const handleSyncExtensionAccounts = async () => {\n // Wait for injectedWeb3 check to finish before starting account import process.\n if (!checkingInjectedWeb3 && extensionAccountsSynced === \"unsynced\") {\n // Unsubscribe from all accounts and reset state\n unsubscribe();\n setStateWithRef([], setExtensionAccounts, extensionAccountsRef);\n setStateWithRef([], setExtensionsInitialised, extensionsInitialisedRef);\n // If extensions have been fetched, get accounts if extensions exist and local extensions\n // exist (previously connected).\n if (Object.keys(extensionsStatus).length) {\n // get active extensions\n const localExtensions = localStorageOrDefault(\n `active_extensions`,\n [],\n true\n );\n if (Object.keys(extensionsStatus).length && localExtensions.length) {\n setExtensionAccountsSynced(\"syncing\");\n await connectActiveExtensions();\n }\n }\n\n // Syncing is complete. Also covers case where no extensions were found.\n setExtensionAccountsSynced(\"synced\");\n }\n };\n\n // Get extension accounts based on the provided ss58 prefix.\n const getExtensionAccounts = (ss58: number) => {\n // NOTE: This is a temporary solution until we have a light weight solution to reformat\n // addresses.\n const keyring = new Keyring();\n keyring.setSS58Format(ss58);\n\n return extensionAccounts.map((account) => ({\n ...account,\n address: keyring.addFromAddress(account.address).address,\n }));\n };\n\n // Re-sync extensions accounts on `unsynced`.\n useEffect(() => {\n handleSyncExtensionAccounts();\n\n return () => unsubscribe();\n }, [extensionsStatus, checkingInjectedWeb3, extensionAccountsSynced]);\n\n // Once initialised extensions equal total extensions present in `injectedWeb3`, mark extensions\n // as fetched.\n useEffectIgnoreInitial(() => {\n if (\n !checkingInjectedWeb3 &&\n extensionsInitialised.length === Object.keys(extensionsStatus).length\n ) {\n setExtensionAccountsSynced(\"synced\");\n }\n }, [checkingInjectedWeb3, extensionsInitialised]);\n\n return (\n <ExtensionAccountsContext.Provider\n value={{\n connectExtensionAccounts,\n extensionAccountsSynced,\n getExtensionAccounts,\n }}\n >\n {children}\n </ExtensionAccountsContext.Provider>\n );\n};\n"]}
|
|
@@ -4,12 +4,11 @@ import { ImportedAccount, MaybeAddress, Sync } from "../types";
|
|
|
4
4
|
export interface ExtensionAccountsContextInterface {
|
|
5
5
|
connectExtensionAccounts: (id?: string) => Promise<boolean>;
|
|
6
6
|
extensionAccountsSynced: Sync;
|
|
7
|
-
|
|
7
|
+
getExtensionAccounts: (ss58: number) => ImportedAccount[];
|
|
8
8
|
}
|
|
9
9
|
export interface ExtensionAccountsProviderProps {
|
|
10
10
|
children: ReactNode;
|
|
11
11
|
network: string;
|
|
12
|
-
ss58: number;
|
|
13
12
|
dappName: string;
|
|
14
13
|
activeAccount?: MaybeAddress;
|
|
15
14
|
setActiveAccount?: (address: MaybeAddress) => void;
|
|
@@ -22,7 +21,3 @@ export interface HandleImportExtension {
|
|
|
22
21
|
removedActiveAccount: MaybeAddress;
|
|
23
22
|
};
|
|
24
23
|
}
|
|
25
|
-
export interface NetworkSS58 {
|
|
26
|
-
network: string;
|
|
27
|
-
ss58: number;
|
|
28
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/types.ts"],"names":[],"mappings":"AAAA;wCACwC","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ReactNode } from \"react\";\nimport { ExtensionAccount } from \"../ExtensionsProvider/types\";\nimport { ImportedAccount, MaybeAddress, Sync } from \"../types\";\n\nexport interface ExtensionAccountsContextInterface {\n connectExtensionAccounts: (id?: string) => Promise<boolean>;\n extensionAccountsSynced: Sync;\n
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/types.ts"],"names":[],"mappings":"AAAA;wCACwC","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ReactNode } from \"react\";\nimport { ExtensionAccount } from \"../ExtensionsProvider/types\";\nimport { ImportedAccount, MaybeAddress, Sync } from \"../types\";\n\nexport interface ExtensionAccountsContextInterface {\n connectExtensionAccounts: (id?: string) => Promise<boolean>;\n extensionAccountsSynced: Sync;\n getExtensionAccounts: (ss58: number) => ImportedAccount[];\n}\n\nexport interface ExtensionAccountsProviderProps {\n children: ReactNode;\n network: string;\n dappName: string;\n activeAccount?: MaybeAddress;\n setActiveAccount?: (address: MaybeAddress) => void;\n onExtensionEnabled?: (id: string) => void;\n}\n\nexport interface HandleImportExtension {\n newAccounts: ExtensionAccount[];\n meta: {\n accountsToRemove: ExtensionAccount[];\n removedActiveAccount: MaybeAddress;\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ExtensionAccount } from "../ExtensionsProvider/types";
|
|
2
|
-
import { HandleImportExtension
|
|
2
|
+
import { HandleImportExtension } from "./types";
|
|
3
3
|
import { AnyFunction } from "../types";
|
|
4
4
|
export declare const useImportExtension: () => {
|
|
5
|
-
handleImportExtension: (id: string, currentAccounts: ExtensionAccount[], signer: AnyFunction, newAccounts: ExtensionAccount[],
|
|
5
|
+
handleImportExtension: (id: string, currentAccounts: ExtensionAccount[], signer: AnyFunction, newAccounts: ExtensionAccount[], network: string) => HandleImportExtension;
|
|
6
6
|
};
|
|
@@ -10,16 +10,15 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
10
10
|
import Keyring from "@polkadot/keyring";
|
|
11
11
|
import { isValidAddress } from "@w3ux/utils";
|
|
12
12
|
import { getActiveAccountLocal, getInExternalAccounts } from "./utils";
|
|
13
|
-
import { defaultHandleImportExtension } from "./defaults";
|
|
13
|
+
import { DEFAULT_SS58_PREFIX, defaultHandleImportExtension } from "./defaults";
|
|
14
14
|
export var useImportExtension = function () {
|
|
15
|
-
var handleImportExtension = function (id, currentAccounts, signer, newAccounts,
|
|
16
|
-
var
|
|
17
|
-
var network = _a.network, ss58 = _a.ss58;
|
|
15
|
+
var handleImportExtension = function (id, currentAccounts, signer, newAccounts, network) {
|
|
16
|
+
var _a;
|
|
18
17
|
if (!newAccounts.length) {
|
|
19
18
|
return defaultHandleImportExtension;
|
|
20
19
|
}
|
|
21
20
|
var keyring = new Keyring();
|
|
22
|
-
keyring.setSS58Format(
|
|
21
|
+
keyring.setSS58Format(DEFAULT_SS58_PREFIX);
|
|
23
22
|
newAccounts = newAccounts.filter(function (_a) {
|
|
24
23
|
var address = _a.address;
|
|
25
24
|
return isValidAddress(address);
|
|
@@ -33,10 +32,10 @@ export var useImportExtension = function () {
|
|
|
33
32
|
var removedAccounts = currentAccounts
|
|
34
33
|
.filter(function (j) { return j.source === id; })
|
|
35
34
|
.filter(function (j) { return !newAccounts.find(function (i) { return i.address === j.address; }); });
|
|
36
|
-
var removedActiveAccount = ((
|
|
35
|
+
var removedActiveAccount = ((_a = removedAccounts.find(function (_a) {
|
|
37
36
|
var address = _a.address;
|
|
38
|
-
return address === getActiveAccountLocal(network
|
|
39
|
-
})) === null ||
|
|
37
|
+
return address === getActiveAccountLocal(network);
|
|
38
|
+
})) === null || _a === void 0 ? void 0 : _a.address) || null;
|
|
40
39
|
newAccounts = newAccounts.filter(function (_a) {
|
|
41
40
|
var address = _a.address;
|
|
42
41
|
return !currentAccounts.find(function (j) { return j.address === address && j.source !== "external"; });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/useImportExtension.tsx"],"names":[],"mappings":"AAAA;wCACwC;;;;;;;;;;AAExC,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/useImportExtension.tsx"],"names":[],"mappings":"AAAA;wCACwC;;;;;;;;;;AAExC,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAG/E,MAAM,CAAC,IAAM,kBAAkB,GAAG;IAChC,2CAA2C;IAC3C,EAAE;IACF,0DAA0D;IAC1D,IAAM,qBAAqB,GAAG,UAC5B,EAAU,EACV,eAAmC,EACnC,MAAmB,EACnB,WAA+B,EAC/B,OAAe;;QAEf,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,4BAA4B,CAAC;QACtC,CAAC;QAED,IAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAE3C,qEAAqE;QACrE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,EAAW;gBAAT,OAAO,aAAA;YAAO,OAAA,cAAc,CAAC,OAAO,CAAC;QAAvB,CAAuB,CAAC,CAAC;QAE3E,oDAAoD;QACpD,WAAW,CAAC,GAAG,CAAC,UAAC,OAAO;YACd,IAAA,OAAO,GAAK,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,QAA5C,CAA6C;YAC5D,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,gEAAgE;QAChE,IAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE/D,gEAAgE;QAChE,IAAM,eAAe,GAAG,eAAe;aACpC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,KAAK,EAAE,EAAf,CAAe,CAAC;aAC9B,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAvB,CAAuB,CAAC,EAAjD,CAAiD,CAAC,CAAC;QAEpE,iEAAiE;QACjE,IAAM,oBAAoB,GACxB,CAAA,MAAA,eAAe,CAAC,IAAI,CAClB,UAAC,EAAW;gBAAT,OAAO,aAAA;YAAO,OAAA,OAAO,KAAK,qBAAqB,CAAC,OAAO,CAAC;QAA1C,CAA0C,CAC5D,0CAAE,OAAO,KAAI,IAAI,CAAC;QAErB,2FAA2F;QAC3F,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,UAAC,EAAW;gBAAT,OAAO,aAAA;YACR,OAAA,CAAC,eAAe,CAAC,IAAI,CACnB,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAhD,CAAgD,CACxD;QAFD,CAEC,CACJ,CAAC;QAEF,8BAA8B;QAC9B,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,UAAC,EAAiB;gBAAf,OAAO,aAAA,EAAE,IAAI,UAAA;YAAO,OAAA,CAAC;gBACpD,OAAO,SAAA;gBACP,IAAI,MAAA;gBACJ,MAAM,EAAE,EAAE;gBACV,MAAM,QAAA;aACP,CAAC;QALmD,CAKnD,CAAC,CAAC;QAEJ,OAAO;YACL,WAAW,aAAA;YACX,IAAI,EAAE;gBACJ,gBAAgB,kCAAM,UAAU,SAAK,eAAe,OAAC;gBACrD,oBAAoB,sBAAA;aACrB;SACF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,qBAAqB,uBAAA;KACtB,CAAC;AACJ,CAAC,CAAC","file":"useImportExtension.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport Keyring from \"@polkadot/keyring\";\nimport { isValidAddress } from \"@w3ux/utils\";\nimport type { ExtensionAccount } from \"../ExtensionsProvider/types\";\nimport { HandleImportExtension } from \"./types\";\nimport { getActiveAccountLocal, getInExternalAccounts } from \"./utils\";\nimport { DEFAULT_SS58_PREFIX, defaultHandleImportExtension } from \"./defaults\";\nimport { AnyFunction } from \"../types\";\n\nexport const useImportExtension = () => {\n // Handles importing of extension accounts.\n //\n // Gets accounts to be imported and commits them to state.\n const handleImportExtension = (\n id: string,\n currentAccounts: ExtensionAccount[],\n signer: AnyFunction,\n newAccounts: ExtensionAccount[],\n network: string\n ): HandleImportExtension => {\n if (!newAccounts.length) {\n return defaultHandleImportExtension;\n }\n\n const keyring = new Keyring();\n keyring.setSS58Format(DEFAULT_SS58_PREFIX);\n\n // Remove accounts that do not contain correctly formatted addresses.\n newAccounts = newAccounts.filter(({ address }) => isValidAddress(address));\n\n // Reformat addresses to ensure default ss58 format.\n newAccounts.map((account) => {\n const { address } = keyring.addFromAddress(account.address);\n account.address = address;\n return account;\n });\n\n // Remove `newAccounts` from local external accounts if present.\n const inExternal = getInExternalAccounts(newAccounts, network);\n\n // Find any accounts that have been removed from this extension.\n const removedAccounts = currentAccounts\n .filter((j) => j.source === id)\n .filter((j) => !newAccounts.find((i) => i.address === j.address));\n\n // Check whether active account is present in forgotten accounts.\n const removedActiveAccount =\n removedAccounts.find(\n ({ address }) => address === getActiveAccountLocal(network)\n )?.address || null;\n\n // Remove accounts that have already been added to `currentAccounts` via another extension.\n newAccounts = newAccounts.filter(\n ({ address }) =>\n !currentAccounts.find(\n (j) => j.address === address && j.source !== \"external\"\n )\n );\n\n // Format accounts properties.\n newAccounts = newAccounts.map(({ address, name }) => ({\n address,\n name,\n source: id,\n signer,\n }));\n\n return {\n newAccounts,\n meta: {\n accountsToRemove: [...inExternal, ...removedAccounts],\n removedActiveAccount,\n },\n };\n };\n\n return {\n handleImportExtension,\n };\n};\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ExtensionAccount } from "../ExtensionsProvider/types";
|
|
2
2
|
import { AnyFunction, ExternalAccount } from "../types";
|
|
3
|
-
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const getActiveExtensionAccount: ({ network, ss58 }: NetworkSS58, accounts: ExtensionAccount[]) => ExtensionAccount;
|
|
3
|
+
export declare const getActiveAccountLocal: (network: string) => any;
|
|
4
|
+
export declare const getActiveExtensionAccount: (network: string, accounts: ExtensionAccount[]) => ExtensionAccount;
|
|
6
5
|
export declare const connectActiveExtensionAccount: (account: ExtensionAccount | null, callback: AnyFunction) => void;
|
|
7
6
|
export declare const getInExternalAccounts: (accounts: ExtensionAccount[], network: string) => ExternalAccount[];
|
|
8
7
|
export declare const getLocalExternalAccounts: (network?: string) => ExternalAccount[];
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { localStorageOrDefault } from "@w3ux/utils";
|
|
2
2
|
import Keyring from "@polkadot/keyring";
|
|
3
|
-
|
|
3
|
+
import { DEFAULT_SS58_PREFIX } from "./defaults";
|
|
4
|
+
export var getActiveAccountLocal = function (network) {
|
|
4
5
|
var keyring = new Keyring();
|
|
5
|
-
keyring.setSS58Format(
|
|
6
|
+
keyring.setSS58Format(DEFAULT_SS58_PREFIX);
|
|
6
7
|
var account = localStorageOrDefault("".concat(network, "_active_account"), null);
|
|
7
8
|
if (account !== null) {
|
|
8
9
|
account = keyring.addFromAddress(account).address;
|
|
9
10
|
}
|
|
10
11
|
return account;
|
|
11
12
|
};
|
|
12
|
-
export var getActiveExtensionAccount = function (
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
return (_b = accounts.find(function (_a) {
|
|
13
|
+
export var getActiveExtensionAccount = function (network, accounts) {
|
|
14
|
+
var _a;
|
|
15
|
+
return (_a = accounts.find(function (_a) {
|
|
16
16
|
var address = _a.address;
|
|
17
|
-
return address === getActiveAccountLocal(network
|
|
18
|
-
})) !== null &&
|
|
17
|
+
return address === getActiveAccountLocal(network);
|
|
18
|
+
})) !== null && _a !== void 0 ? _a : null;
|
|
19
19
|
};
|
|
20
20
|
export var connectActiveExtensionAccount = function (account, callback) {
|
|
21
21
|
if (account !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/utils.ts"],"names":[],"mappings":"AAAA;wCACwC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,OAAO,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/utils.ts"],"names":[],"mappings":"AAAA;wCACwC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAGxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;+DAE+D;AAE/D,4CAA4C;AAC5C,MAAM,CAAC,IAAM,qBAAqB,GAAG,UAAC,OAAe;IACnD,IAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAE3C,IAAI,OAAO,GAAG,qBAAqB,CAAC,UAAG,OAAO,oBAAiB,EAAE,IAAI,CAAC,CAAC;IACvE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,IAAM,yBAAyB,GAAG,UACvC,OAAe,EACf,QAA4B;;IAE5B,OAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,UAAC,EAAW;YAAT,OAAO,aAAA;QAAO,OAAA,OAAO,KAAK,qBAAqB,CAAC,OAAO,CAAC;IAA1C,CAA0C,CAAC,mCAC1E,IAAI,CAAA;CAAA,CAAC;AAEP,2EAA2E;AAC3E,MAAM,CAAC,IAAM,6BAA6B,GAAG,UAC3C,OAAgC,EAChC,QAAqB;IAErB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAEF;;+DAE+D;AAE/D,yDAAyD;AACzD,MAAM,CAAC,IAAM,qBAAqB,GAAG,UACnC,QAA4B,EAC5B,OAAe;IAEf,IAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAEhE,OAAO,CACL,qBAAqB,CAAC,MAAM,CAC1B,UAAC,CAAC,IAAK,OAAA,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAvB,CAAuB,CAAC,KAAK,SAAS,EAAnE,CAAmE,CAC3E,IAAI,EAAE,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,OAAgB;IACvD,IAAI,aAAa,GAAG,qBAAqB,CACvC,mBAAmB,EACnB,EAAE,EACF,IAAI,CACgB,CAAC;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,OAAO,EAArB,CAAqB,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from \"@w3ux/utils\";\nimport Keyring from \"@polkadot/keyring\";\nimport { ExtensionAccount } from \"../ExtensionsProvider/types\";\nimport { AnyFunction, ExternalAccount } from \"../types\";\nimport { DEFAULT_SS58_PREFIX } from \"./defaults\";\n\n/*------------------------------------------------------------\n Active account utils.\n ------------------------------------------------------------*/\n\n// Gets local `active_acount` for a network.\nexport const getActiveAccountLocal = (network: string) => {\n const keyring = new Keyring();\n keyring.setSS58Format(DEFAULT_SS58_PREFIX);\n\n let account = localStorageOrDefault(`${network}_active_account`, null);\n if (account !== null) {\n account = keyring.addFromAddress(account).address;\n }\n\n return account;\n};\n\n// Checks if the local active account is the provided accounts.\nexport const getActiveExtensionAccount = (\n network: string,\n accounts: ExtensionAccount[]\n) =>\n accounts.find(({ address }) => address === getActiveAccountLocal(network)) ??\n null;\n\n// Connects to active account, and calls an optional callback, if provided.\nexport const connectActiveExtensionAccount = (\n account: ExtensionAccount | null,\n callback: AnyFunction\n) => {\n if (account !== null) {\n callback(account);\n }\n};\n\n/*------------------------------------------------------------\n External account utils.\n ------------------------------------------------------------*/\n\n// Gets accounts that exist in local `external_accounts`.\nexport const getInExternalAccounts = (\n accounts: ExtensionAccount[],\n network: string\n) => {\n const localExternalAccounts = getLocalExternalAccounts(network);\n\n return (\n localExternalAccounts.filter(\n (a) => (accounts || []).find((b) => b.address === a.address) !== undefined\n ) || []\n );\n};\n\n// Gets local external accounts for a network.\nexport const getLocalExternalAccounts = (network?: string) => {\n let localAccounts = localStorageOrDefault<ExternalAccount[]>(\n \"external_accounts\",\n [],\n true\n ) as ExternalAccount[];\n if (network) {\n localAccounts = localAccounts.filter((l) => l.network === network);\n }\n return localAccounts;\n};\n"]}
|