@w3ux/react-connect-kit 1.2.1 → 1.3.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ExtensionAccountsProvider/Extensions.js +75 -167
- package/ExtensionAccountsProvider/Extensions.js.map +1 -1
- package/ExtensionAccountsProvider/defaults.js +7 -5
- package/ExtensionAccountsProvider/defaults.js.map +1 -1
- package/ExtensionAccountsProvider/index.js +139 -256
- package/ExtensionAccountsProvider/index.js.map +1 -1
- package/ExtensionAccountsProvider/snap.js +52 -121
- package/ExtensionAccountsProvider/snap.js.map +1 -1
- package/ExtensionAccountsProvider/types.js +2 -0
- package/ExtensionAccountsProvider/types.js.map +1 -1
- package/ExtensionAccountsProvider/useImportExtension.js +24 -44
- package/ExtensionAccountsProvider/useImportExtension.js.map +1 -1
- package/ExtensionAccountsProvider/utils.js +14 -17
- package/ExtensionAccountsProvider/utils.js.map +1 -1
- package/ExtensionsProvider/defaults.js +8 -6
- package/ExtensionsProvider/defaults.js.map +1 -1
- package/ExtensionsProvider/index.js +56 -115
- package/ExtensionsProvider/index.js.map +1 -1
- package/ExtensionsProvider/types.js +2 -0
- package/ExtensionsProvider/types.js.map +1 -1
- package/ExtensionsProvider/utils.js +21 -73
- package/ExtensionsProvider/utils.js.map +1 -1
- package/LedgerAccountsProvider/defaults.js +9 -7
- package/LedgerAccountsProvider/defaults.js.map +1 -1
- package/LedgerAccountsProvider/index.js +39 -68
- package/LedgerAccountsProvider/index.js.map +1 -1
- package/LedgerAccountsProvider/types.js +2 -0
- package/LedgerAccountsProvider/types.js.map +1 -1
- package/LedgerAccountsProvider/utils.js +16 -25
- package/LedgerAccountsProvider/utils.js.map +1 -1
- package/VaultAccountsProvider/defaults.js +9 -7
- package/VaultAccountsProvider/defaults.js.map +1 -1
- package/VaultAccountsProvider/index.js +40 -66
- package/VaultAccountsProvider/index.js.map +1 -1
- package/VaultAccountsProvider/types.js +2 -0
- package/VaultAccountsProvider/types.js.map +1 -1
- package/VaultAccountsProvider/utils.js +6 -4
- package/VaultAccountsProvider/utils.js.map +1 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +5 -5
- package/types.js +2 -0
- package/types.js.map +1 -1
|
@@ -1,129 +1,60 @@
|
|
|
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
1
|
import { hasMetaMask, isMetamaskSnapsSupported, } from "@chainsafe/metamask-polkadot-adapter/src/utils";
|
|
38
2
|
import { enablePolkadotSnap } from "@chainsafe/metamask-polkadot-adapter";
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
var injectPolkadotSnap = function (win, config) {
|
|
3
|
+
const transformAccounts = (accounts) => accounts.map((address, index) => ({
|
|
4
|
+
address,
|
|
5
|
+
name: `Polkadot Snap ${index + 1}`,
|
|
6
|
+
source: "metamask-polkadot-snap",
|
|
7
|
+
type: "ethereum",
|
|
8
|
+
}));
|
|
9
|
+
const injectPolkadotSnap = (win, config) => {
|
|
48
10
|
win.injectedWeb3.Snap = {
|
|
49
|
-
enable:
|
|
50
|
-
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return function () { };
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
signer: {
|
|
75
|
-
signPayload: function (payload) { return __awaiter(void 0, void 0, void 0, function () {
|
|
76
|
-
var signature;
|
|
77
|
-
return __generator(this, function (_a) {
|
|
78
|
-
switch (_a.label) {
|
|
79
|
-
case 0: return [4 , snap.signPayloadJSON(payload)];
|
|
80
|
-
case 1:
|
|
81
|
-
signature = (_a.sent());
|
|
82
|
-
return [2 , { id: 0, signature: signature }];
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}); },
|
|
86
|
-
signRaw: function (raw) { return __awaiter(void 0, void 0, void 0, function () {
|
|
87
|
-
var signature;
|
|
88
|
-
return __generator(this, function (_a) {
|
|
89
|
-
switch (_a.label) {
|
|
90
|
-
case 0: return [4 , snap.signPayloadRaw(raw)];
|
|
91
|
-
case 1:
|
|
92
|
-
signature = (_a.sent());
|
|
93
|
-
return [2 , { id: 0, signature: signature }];
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}); },
|
|
97
|
-
},
|
|
98
|
-
}];
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}); },
|
|
11
|
+
enable: async () => {
|
|
12
|
+
const snap = (await enablePolkadotSnap(config)).getMetamaskSnapApi();
|
|
13
|
+
return {
|
|
14
|
+
accounts: {
|
|
15
|
+
get: async () => {
|
|
16
|
+
const response = await snap.getAddress();
|
|
17
|
+
return transformAccounts([response]);
|
|
18
|
+
},
|
|
19
|
+
subscribe: (_cb) => () => { },
|
|
20
|
+
},
|
|
21
|
+
signer: {
|
|
22
|
+
signPayload: async (payload) => {
|
|
23
|
+
const signature = (await snap.signPayloadJSON(payload));
|
|
24
|
+
return { id: 0, signature };
|
|
25
|
+
},
|
|
26
|
+
signRaw: async (raw) => {
|
|
27
|
+
const signature = (await snap.signPayloadRaw(raw));
|
|
28
|
+
return { id: 0, signature };
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
},
|
|
102
33
|
version: "0.1",
|
|
103
34
|
};
|
|
104
35
|
};
|
|
105
|
-
export
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
window.injectedWeb3["
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
});
|
|
127
|
-
};
|
|
36
|
+
export const initPolkadotSnap = (config) => new Promise((resolve) => {
|
|
37
|
+
const win = window;
|
|
38
|
+
win.injectedWeb3 = win.injectedWeb3 || {};
|
|
39
|
+
if (hasMetaMask()) {
|
|
40
|
+
isMetamaskSnapsSupported().then((result) => {
|
|
41
|
+
if (result) {
|
|
42
|
+
injectPolkadotSnap(win, config);
|
|
43
|
+
window.injectedWeb3["metamask-polkadot-snap"] =
|
|
44
|
+
window.injectedWeb3["Snap"];
|
|
45
|
+
delete window.injectedWeb3["Snap"];
|
|
46
|
+
resolve(true);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
resolve(false);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
resolve(false);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
128
57
|
|
|
58
|
+
//# sourceMappingURL=snap.js.map
|
|
129
59
|
|
|
60
|
+
//# sourceMappingURL=snap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/snap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/snap.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EACX,wBAAwB,GACzB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAc1E,MAAM,iBAAiB,GAAG,CAAC,QAAkB,EAAsB,EAAE,CACnE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO;IACP,IAAI,EAAE,iBAAiB,KAAK,GAAG,CAAC,EAAE;IAClC,MAAM,EAAE,wBAAwB;IAChC,IAAI,EAAE,UAAU;CACjB,CAAC,CAAC,CAAC;AAEN,MAAM,kBAAkB,GAAG,CAAC,GAAe,EAAE,MAAkB,EAAQ,EAAE;IACvE,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG;QACtB,MAAM,EAAE,KAAK,IAAuB,EAAE;YACpC,MAAM,IAAI,GAAG,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAErE,OAAO;gBACL,QAAQ,EAAE;oBACR,GAAG,EAAE,KAAK,IAAgC,EAAE;wBAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;wBACzC,OAAO,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACvC,CAAC;oBAED,SAAS,EACP,CAEE,GAA0C,EAC5B,EAAE,CAElB,GAAS,EAAE,GAAE,CAAC;iBACjB;gBACD,MAAM,EAAE;oBACN,WAAW,EAAE,KAAK,EAChB,OAA0B,EACH,EAAE;wBACzB,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAC3C,OAAO,CACR,CAAc,CAAC;wBAChB,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;oBAC9B,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,GAAqB,EAAyB,EAAE;wBAC9D,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAc,CAAC;wBAChE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;oBAC9B,CAAC;iBACF;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAoB,EAAE,CACvE,IAAI,OAAO,CAAC,CAAC,OAAO,EAAQ,EAAE;IAC5B,MAAM,GAAG,GAAG,MAA6B,CAAC;IAC1C,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAG1C,IAAI,WAAW,EAAE,EAAE,CAAC;QAClB,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,IAAI,MAAM,EAAE,CAAC;gBACX,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAGhC,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC;oBAC3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC9B,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC","file":"snap.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\nimport type {\n Injected,\n InjectedAccount,\n InjectedWindow,\n} from \"@polkadot/extension-inject/types\";\nimport {\n hasMetaMask,\n isMetamaskSnapsSupported,\n} from \"@chainsafe/metamask-polkadot-adapter/src/utils\";\nimport { enablePolkadotSnap } from \"@chainsafe/metamask-polkadot-adapter\";\nimport type {\n SignerPayloadJSON,\n SignerPayloadRaw,\n SignerResult,\n} from \"@polkadot/types/types\";\nimport type { HexString } from \"@polkadot/util/types\";\nimport { SnapConfig } from \"@chainsafe/metamask-polkadot-types\";\nimport { ExtensionAccount } from \"../ExtensionsProvider/types\";\n\ninterface Web3Window extends InjectedWindow {\n ethereum: unknown;\n}\n\nconst transformAccounts = (accounts: string[]): ExtensionAccount[] =>\n accounts.map((address, index) => ({\n address,\n name: `Polkadot Snap ${index + 1}`,\n source: \"metamask-polkadot-snap\",\n type: \"ethereum\",\n }));\n\nconst injectPolkadotSnap = (win: Web3Window, config: SnapConfig): void => {\n win.injectedWeb3.Snap = {\n enable: async (): Promise<Injected> => {\n const snap = (await enablePolkadotSnap(config)).getMetamaskSnapApi();\n\n return {\n accounts: {\n get: async (): Promise<InjectedAccount[]> => {\n const response = await snap.getAddress();\n return transformAccounts([response]);\n },\n // Currently there is only available only one account, in that case this method will never return anything.\n subscribe:\n (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n _cb: (accounts: InjectedAccount[]) => void\n ): (() => void) =>\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n (): void => {},\n },\n signer: {\n signPayload: async (\n payload: SignerPayloadJSON\n ): Promise<SignerResult> => {\n const signature = (await snap.signPayloadJSON(\n payload\n )) as HexString;\n return { id: 0, signature };\n },\n signRaw: async (raw: SignerPayloadRaw): Promise<SignerResult> => {\n const signature = (await snap.signPayloadRaw(raw)) as HexString;\n return { id: 0, signature };\n },\n },\n };\n },\n version: \"0.1\",\n };\n};\n\n// Initiate Polkadot snap and inject it into `injectedWeb3`. as `metamask-polkadot-snap`.\nexport const initPolkadotSnap = (config: SnapConfig): Promise<boolean> =>\n new Promise((resolve): void => {\n const win = window as Window & Web3Window;\n win.injectedWeb3 = win.injectedWeb3 || {};\n\n // Attempt to inject into `injectedWeb3`.\n if (hasMetaMask()) {\n isMetamaskSnapsSupported().then((result) => {\n if (result) {\n injectPolkadotSnap(win, config);\n // Overwrite `injectedWeb3` key with correct id and delete stale version.\n // Issue at: https://github.com/ChainSafe/metamask-snap-polkadot/issues/204\n window.injectedWeb3[\"metamask-polkadot-snap\"] =\n window.injectedWeb3[\"Snap\"];\n delete window.injectedWeb3[\"Snap\"];\n resolve(true);\n } else {\n resolve(false);\n }\n });\n } else {\n resolve(false);\n }\n });\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/types.ts"],"names":[],"mappings":"","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 } from \"../types\";\nimport { Sync } from \"@w3ux/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,65 +1,45 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
1
|
import Keyring from "@polkadot/keyring";
|
|
11
2
|
import { isValidAddress } from "@w3ux/utils";
|
|
12
3
|
import { getActiveAccountLocal, getInExternalAccounts } from "./utils";
|
|
13
4
|
import { DEFAULT_SS58, defaultHandleImportExtension } from "./defaults";
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
var _a;
|
|
5
|
+
export const useImportExtension = () => {
|
|
6
|
+
const handleImportExtension = (id, currentAccounts, signer, newAccounts, network) => {
|
|
17
7
|
if (!newAccounts.length) {
|
|
18
8
|
return defaultHandleImportExtension;
|
|
19
9
|
}
|
|
20
|
-
|
|
10
|
+
const keyring = new Keyring();
|
|
21
11
|
keyring.setSS58Format(DEFAULT_SS58);
|
|
22
|
-
newAccounts = newAccounts.filter(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
});
|
|
26
|
-
newAccounts.map(function (account) {
|
|
27
|
-
var address = keyring.addFromAddress(account.address).address;
|
|
12
|
+
newAccounts = newAccounts.filter(({ address }) => isValidAddress(address));
|
|
13
|
+
newAccounts.map((account) => {
|
|
14
|
+
const { address } = keyring.addFromAddress(account.address);
|
|
28
15
|
account.address = address;
|
|
29
16
|
return account;
|
|
30
17
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.filter(
|
|
34
|
-
.filter(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
});
|
|
43
|
-
newAccounts = newAccounts.map(function (_a) {
|
|
44
|
-
var address = _a.address, name = _a.name;
|
|
45
|
-
return ({
|
|
46
|
-
address: address,
|
|
47
|
-
name: name,
|
|
48
|
-
source: id,
|
|
49
|
-
signer: signer,
|
|
50
|
-
});
|
|
51
|
-
});
|
|
18
|
+
const inExternal = getInExternalAccounts(newAccounts, network);
|
|
19
|
+
const removedAccounts = currentAccounts
|
|
20
|
+
.filter((j) => j.source === id)
|
|
21
|
+
.filter((j) => !newAccounts.find((i) => i.address === j.address));
|
|
22
|
+
const removedActiveAccount = removedAccounts.find(({ address }) => address === getActiveAccountLocal(network))?.address || null;
|
|
23
|
+
newAccounts = newAccounts.filter(({ address }) => !currentAccounts.find((j) => j.address === address && j.source !== "external"));
|
|
24
|
+
newAccounts = newAccounts.map(({ address, name }) => ({
|
|
25
|
+
address,
|
|
26
|
+
name,
|
|
27
|
+
source: id,
|
|
28
|
+
signer,
|
|
29
|
+
}));
|
|
52
30
|
return {
|
|
53
|
-
newAccounts
|
|
31
|
+
newAccounts,
|
|
54
32
|
meta: {
|
|
55
|
-
accountsToRemove:
|
|
56
|
-
removedActiveAccount
|
|
33
|
+
accountsToRemove: [...inExternal, ...removedAccounts],
|
|
34
|
+
removedActiveAccount,
|
|
57
35
|
},
|
|
58
36
|
};
|
|
59
37
|
};
|
|
60
38
|
return {
|
|
61
|
-
handleImportExtension
|
|
39
|
+
handleImportExtension,
|
|
62
40
|
};
|
|
63
41
|
};
|
|
64
42
|
|
|
43
|
+
//# sourceMappingURL=useImportExtension.js.map
|
|
65
44
|
|
|
45
|
+
//# sourceMappingURL=useImportExtension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/useImportExtension.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/useImportExtension.tsx"],"names":[],"mappings":"AAGA,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,YAAY,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAIrC,MAAM,qBAAqB,GAAG,CAC5B,EAAU,EACV,eAAmC,EACnC,MAAmB,EACnB,WAA+B,EAC/B,OAAe,EACQ,EAAE;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,4BAA4B,CAAC;QACtC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAGpC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QAG3E,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAGH,MAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAG/D,MAAM,eAAe,GAAG,eAAe;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAGpE,MAAM,oBAAoB,GACxB,eAAe,CAAC,IAAI,CAClB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,qBAAqB,CAAC,OAAO,CAAC,CAC5D,EAAE,OAAO,IAAI,IAAI,CAAC;QAGrB,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACd,CAAC,eAAe,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CACxD,CACJ,CAAC;QAGF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,OAAO;YACP,IAAI;YACJ,MAAM,EAAE,EAAE;YACV,MAAM;SACP,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,WAAW;YACX,IAAI,EAAE;gBACJ,gBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,eAAe,CAAC;gBACrD,oBAAoB;aACrB;SACF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,qBAAqB;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, defaultHandleImportExtension } from \"./defaults\";\nimport { AnyFunction } from \"@w3ux/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);\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,37 +1,34 @@
|
|
|
1
1
|
import { localStorageOrDefault } from "@w3ux/utils";
|
|
2
2
|
import Keyring from "@polkadot/keyring";
|
|
3
3
|
import { DEFAULT_SS58 } from "./defaults";
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export const getActiveAccountLocal = (network) => {
|
|
5
|
+
const keyring = new Keyring();
|
|
6
6
|
keyring.setSS58Format(DEFAULT_SS58);
|
|
7
|
-
|
|
7
|
+
let account = localStorageOrDefault(`${network}_active_account`, null);
|
|
8
8
|
if (account !== null) {
|
|
9
9
|
account = keyring.addFromAddress(account).address;
|
|
10
10
|
}
|
|
11
11
|
return account;
|
|
12
12
|
};
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var address = _a.address;
|
|
17
|
-
return address === getActiveAccountLocal(network);
|
|
18
|
-
})) !== null && _a !== void 0 ? _a : null;
|
|
19
|
-
};
|
|
20
|
-
export var connectActiveExtensionAccount = function (account, callback) {
|
|
13
|
+
export const getActiveExtensionAccount = (network, accounts) => accounts.find(({ address }) => address === getActiveAccountLocal(network)) ??
|
|
14
|
+
null;
|
|
15
|
+
export const connectActiveExtensionAccount = (account, callback) => {
|
|
21
16
|
if (account !== null) {
|
|
22
17
|
callback(account);
|
|
23
18
|
}
|
|
24
19
|
};
|
|
25
|
-
export
|
|
26
|
-
|
|
27
|
-
return (localExternalAccounts.filter(
|
|
20
|
+
export const getInExternalAccounts = (accounts, network) => {
|
|
21
|
+
const localExternalAccounts = getLocalExternalAccounts(network);
|
|
22
|
+
return (localExternalAccounts.filter((a) => (accounts || []).find((b) => b.address === a.address) !== undefined) || []);
|
|
28
23
|
};
|
|
29
|
-
export
|
|
30
|
-
|
|
24
|
+
export const getLocalExternalAccounts = (network) => {
|
|
25
|
+
let localAccounts = localStorageOrDefault("external_accounts", [], true);
|
|
31
26
|
if (network) {
|
|
32
|
-
localAccounts = localAccounts.filter(
|
|
27
|
+
localAccounts = localAccounts.filter((l) => l.network === network);
|
|
33
28
|
}
|
|
34
29
|
return localAccounts;
|
|
35
30
|
};
|
|
36
31
|
|
|
32
|
+
//# sourceMappingURL=utils.js.map
|
|
37
33
|
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccountsProvider/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionAccountsProvider/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAE,EAAE;IACvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAEpC,IAAI,OAAO,GAAG,qBAAqB,CAAC,GAAG,OAAO,iBAAiB,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;AAGF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAAe,EACf,QAA4B,EAC5B,EAAE,CACF,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC;AAGP,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,OAAgC,EAChC,QAAqB,EACrB,EAAE;IACF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAA4B,EAC5B,OAAe,EACf,EAAE;IACF,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAEhE,OAAO,CACL,qBAAqB,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAC3E,IAAI,EAAE,CACR,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC3D,IAAI,aAAa,GAAG,qBAAqB,CACvC,mBAAmB,EACnB,EAAE,EACF,IAAI,CACgB,CAAC;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,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 { ExternalAccount } from \"../types\";\nimport { DEFAULT_SS58 } from \"./defaults\";\nimport { AnyFunction } from \"@w3ux/types\";\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);\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"]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const defaultExtensionsContext = {
|
|
2
2
|
checkingInjectedWeb3: false,
|
|
3
3
|
extensionsStatus: {},
|
|
4
|
-
setExtensionStatus:
|
|
5
|
-
removeExtensionStatus:
|
|
6
|
-
extensionInstalled:
|
|
7
|
-
extensionCanConnect:
|
|
8
|
-
extensionHasFeature:
|
|
4
|
+
setExtensionStatus: (id, status) => { },
|
|
5
|
+
removeExtensionStatus: (id) => { },
|
|
6
|
+
extensionInstalled: (id) => false,
|
|
7
|
+
extensionCanConnect: (id) => false,
|
|
8
|
+
extensionHasFeature: (id, feature) => false,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
+
//# sourceMappingURL=defaults.js.map
|
|
11
12
|
|
|
13
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionsProvider/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ExtensionsProvider/defaults.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,wBAAwB,GAA+B;IAClE,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,CAAC;IACtC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAE,CAAC;IACjC,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK;IACjC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK;IAClC,mBAAmB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK;CAC5C,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 type { ExtensionsContextInterface } from \"./types\";\n\nexport const defaultExtensionsContext: ExtensionsContextInterface = {\n checkingInjectedWeb3: false,\n extensionsStatus: {},\n setExtensionStatus: (id, status) => {},\n removeExtensionStatus: (id) => {},\n extensionInstalled: (id) => false,\n extensionCanConnect: (id) => false,\n extensionHasFeature: (id, feature) => false,\n};\n"]}
|