@w3ux/observables-connect 0.9.28 → 0.9.29
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/accounts/index.d.ts +1 -5
- package/accounts/index.js +1 -5
- package/accounts/index.js.map +1 -1
- package/accounts/unsubs.d.ts +3 -0
- package/accounts/unsubs.js +13 -0
- package/accounts/unsubs.js.map +1 -0
- package/accounts/util.js +6 -6
- package/accounts/util.js.map +1 -1
- package/extensions/connect.d.ts +1 -4
- package/extensions/connect.js +28 -38
- package/extensions/connect.js.map +1 -1
- package/extensions/discover.js +1 -1
- package/extensions/discover.js.map +1 -1
- package/extensions/index.d.ts +2 -3
- package/extensions/index.js +2 -3
- package/extensions/index.js.map +1 -1
- package/extensions/init.d.ts +4 -0
- package/extensions/init.js +46 -0
- package/extensions/init.js.map +1 -0
- package/{accounts → extensions}/reconnect.js +5 -3
- package/extensions/reconnect.js.map +1 -0
- package/{extensions/local.d.ts → local.d.ts} +2 -0
- package/{extensions/local.js → local.js} +8 -1
- package/local.js.map +1 -0
- package/{extensions/observables.d.ts → observables.d.ts} +5 -1
- package/{extensions/observables.js → observables.js} +4 -0
- package/observables.js.map +1 -0
- package/package.json +1 -1
- package/{extensions/state.d.ts → util.d.ts} +4 -1
- package/{extensions/state.js → util.js} +10 -3
- package/util.js.map +1 -0
- package/accounts/connect.d.ts +0 -1
- package/accounts/connect.js +0 -35
- package/accounts/connect.js.map +0 -1
- package/accounts/local.d.ts +0 -2
- package/accounts/local.js +0 -12
- package/accounts/local.js.map +0 -1
- package/accounts/observables.d.ts +0 -6
- package/accounts/observables.js +0 -9
- package/accounts/observables.js.map +0 -1
- package/accounts/reconnect.js.map +0 -1
- package/accounts/state.d.ts +0 -7
- package/accounts/state.js +0 -21
- package/accounts/state.js.map +0 -1
- package/extensions/local.js.map +0 -1
- package/extensions/observables.js.map +0 -1
- package/extensions/state.js.map +0 -1
- /package/{accounts → extensions}/reconnect.d.ts +0 -0
package/accounts/index.d.ts
CHANGED
package/accounts/index.js
CHANGED
package/accounts/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/index.ts"],"names":[],"mappings":"AAGA,cAAc,
|
|
1
|
+
{"version":3,"sources":["../src/accounts/index.ts"],"names":[],"mappings":"AAGA,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from './get'\nexport * from './unsubs'\nexport * from './util'\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const unsubs = {};
|
|
2
|
+
export const addUnsub = (id, unsub) => {
|
|
3
|
+
unsubs[id] = unsub;
|
|
4
|
+
};
|
|
5
|
+
export const unsubAll = () => {
|
|
6
|
+
Object.values(unsubs).forEach((unsub) => {
|
|
7
|
+
unsub();
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=unsubs.js.map
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=unsubs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/accounts/unsubs.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,MAAM,GAA+B,EAAE,CAAA;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,KAAiB,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA","file":"unsubs.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\n// Extension account subscription unsubs\nexport const unsubs: Record<string, () => void> = {}\n\n// Add an extension id to unsub state\nexport const addUnsub = (id: string, unsub: () => void) => {\n unsubs[id] = unsub\n}\n\n// Unsubscribe to all unsubs\nexport const unsubAll = () => {\n Object.values(unsubs).forEach((unsub) => {\n unsub()\n })\n}\n"]}
|
package/accounts/util.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { formatAccountSs58, isValidAddress } from '@w3ux/utils';
|
|
2
2
|
import { defaultProcessExtensionResult } from '../consts';
|
|
3
|
-
import { getLocalExternalAccounts } from '
|
|
4
|
-
import {
|
|
3
|
+
import { getLocalExternalAccounts } from '../local';
|
|
4
|
+
import { _extensionAccounts } from '../observables';
|
|
5
5
|
export const processExtensionAccounts = (config, signer, newAccounts) => {
|
|
6
6
|
const { source, ss58 } = config;
|
|
7
7
|
if (!newAccounts.length) {
|
|
8
8
|
return defaultProcessExtensionResult;
|
|
9
9
|
}
|
|
10
10
|
newAccounts = formatExtensionAccounts(newAccounts, ss58);
|
|
11
|
-
const removedAccounts =
|
|
11
|
+
const removedAccounts = _extensionAccounts
|
|
12
12
|
.getValue()
|
|
13
13
|
.filter((j) => j.source === source)
|
|
14
14
|
.filter((j) => !newAccounts.find((i) => i.address === j.address));
|
|
15
|
-
newAccounts = newAccounts.filter(({ address }) => !
|
|
15
|
+
newAccounts = newAccounts.filter(({ address }) => !_extensionAccounts
|
|
16
16
|
.getValue()
|
|
17
17
|
.find((j) => j.address === address && j.source !== 'external'));
|
|
18
18
|
newAccounts = newAccounts.map(({ address, name }) => ({
|
|
@@ -49,10 +49,10 @@ export const getInExternalAccounts = (accounts, network) => {
|
|
|
49
49
|
return (localExternalAccounts.filter((a) => (accounts || []).find((b) => b.address === a.address) !== undefined) || []);
|
|
50
50
|
};
|
|
51
51
|
export const updateAccounts = ({ add, remove, }) => {
|
|
52
|
-
const newAccounts = [...
|
|
52
|
+
const newAccounts = [..._extensionAccounts.getValue()]
|
|
53
53
|
.concat(add)
|
|
54
54
|
.filter((a) => remove.find((s) => s.address === a.address) === undefined);
|
|
55
|
-
|
|
55
|
+
_extensionAccounts.next(newAccounts);
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
//# sourceMappingURL=util.js.map
|
package/accounts/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/util.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"sources":["../src/accounts/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type {\n ExtensionAccount,\n ImportedAccount,\n ProcessExtensionAccountsResult,\n} from '@w3ux/types'\nimport { formatAccountSs58, isValidAddress } from '@w3ux/utils'\nimport { defaultProcessExtensionResult } from '../consts'\nimport { getLocalExternalAccounts } from '../local'\nimport { _extensionAccounts } from '../observables'\n\n// Gets accounts to be imported and commits them to state\n\ninterface Config {\n source: string\n ss58: number\n}\nexport const processExtensionAccounts = (\n config: Config,\n signer: unknown,\n newAccounts: ExtensionAccount[]\n): ProcessExtensionAccountsResult => {\n const { source, ss58 } = config\n if (!newAccounts.length) {\n return defaultProcessExtensionResult\n }\n\n // Get valid accounts from extension\n newAccounts = formatExtensionAccounts(newAccounts, ss58)\n\n // Find any accounts that have been removed from this extension\n const removedAccounts = _extensionAccounts\n .getValue()\n .filter((j) => j.source === source)\n .filter((j) => !newAccounts.find((i) => i.address === j.address))\n\n // Remove accounts that have already been imported\n newAccounts = newAccounts.filter(\n ({ address }) =>\n !_extensionAccounts\n .getValue()\n .find((j) => j.address === address && j.source !== 'external')\n )\n\n // Format accounts properties\n newAccounts = newAccounts.map(({ address, name }) => ({\n address,\n name,\n source,\n signer,\n }))\n\n // Update observable state\n updateAccounts({\n add: newAccounts,\n remove: removedAccounts,\n })\n\n return {\n newAccounts,\n removedAccounts: [...removedAccounts],\n }\n}\n\n// Formats accounts to correct ss58 and removes invalid accounts\nexport const formatExtensionAccounts = (\n accounts: ExtensionAccount[],\n ss58: number\n) => {\n accounts = accounts\n // Remove accounts that do not contain correctly formatted addresses\n .filter(({ address }) => isValidAddress(address))\n // Reformat addresses to ensure default ss58 format\n .map((account) => {\n const formattedAddress = formatAccountSs58(account.address, ss58)\n if (!formattedAddress) {\n return null\n }\n account.address = formattedAddress\n return account\n })\n // Remove null entries resulting from invalid formatted addresses\n .filter((account) => account !== null)\n\n return accounts\n}\n\n// Gets accounts that exist in local external accounts\nexport const getInExternalAccounts = (\n accounts: ImportedAccount[],\n network: string\n) => {\n const localExternalAccounts = getLocalExternalAccounts(network)\n return (\n localExternalAccounts.filter(\n (a) => (accounts || []).find((b) => b.address === a.address) !== undefined\n ) || []\n )\n}\n\n// Updates accounts observable based on removed and added accounts\nexport const updateAccounts = ({\n add,\n remove,\n}: {\n add: ExtensionAccount[]\n remove: ExtensionAccount[]\n}) => {\n const newAccounts = [..._extensionAccounts.getValue()]\n .concat(add)\n .filter((a) => remove.find((s) => s.address === a.address) === undefined)\n _extensionAccounts.next(newAccounts)\n}\n"]}
|
package/extensions/connect.d.ts
CHANGED
|
@@ -1,4 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const connectExtensions: (dappName: string, extensionIds: string[]) => Promise<{
|
|
3
|
-
connected: ExtensionEnableResults;
|
|
4
|
-
}>;
|
|
1
|
+
export declare const connectExtension: (dappName: string, ss58: number, id: string) => Promise<boolean>;
|
package/extensions/connect.js
CHANGED
|
@@ -1,45 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { addUnsub } from '../accounts/unsubs';
|
|
2
|
+
import { processExtensionAccounts } from '../accounts/util';
|
|
3
|
+
import { canConnect } from '../util';
|
|
4
|
+
import { initExtensions } from './index';
|
|
5
|
+
export const connectExtension = async (dappName, ss58, id) => {
|
|
6
|
+
if (canConnect(id)) {
|
|
7
|
+
const { connected } = await initExtensions(dappName, [id]);
|
|
8
|
+
if (connected.size === 0) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const { extension } = connected.get(id);
|
|
12
|
+
const canSubscribe = typeof extension.accounts.subscribe === 'function';
|
|
13
|
+
const handleAccounts = (accounts) => {
|
|
14
|
+
processExtensionAccounts({
|
|
15
|
+
source: id,
|
|
16
|
+
ss58,
|
|
17
|
+
}, extension.signer, accounts);
|
|
8
18
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
filterConnectedExtensions(enableResults),
|
|
13
|
-
filterFailedExtensions(enableResults),
|
|
14
|
-
];
|
|
15
|
-
Array.from(connected.keys()).forEach((id) => addExtensionToLocal(id));
|
|
16
|
-
Array.from(withError.keys()).forEach((id) => removeExtensionFromLocal(id));
|
|
17
|
-
const newStatus = { ..._extensionsStatus.getValue() };
|
|
18
|
-
Array.from(connected.keys()).forEach((id) => {
|
|
19
|
-
newStatus[id] = 'connected';
|
|
20
|
-
});
|
|
21
|
-
Array.from(withError.entries()).forEach(([id, { error }]) => {
|
|
22
|
-
if (error.startsWith('Error')) {
|
|
23
|
-
if (error.substring(0, 17) === 'NotInstalledError') {
|
|
24
|
-
delete newStatus[id];
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
newStatus[id] = 'not_authenticated';
|
|
28
|
-
}
|
|
19
|
+
if (!canSubscribe) {
|
|
20
|
+
const accounts = await extension.accounts.get();
|
|
21
|
+
handleAccounts(accounts);
|
|
29
22
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
else {
|
|
24
|
+
const unsub = extension.accounts.subscribe((accounts) => {
|
|
25
|
+
handleAccounts(accounts);
|
|
26
|
+
});
|
|
27
|
+
addUnsub(id, unsub);
|
|
35
28
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return { connected };
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
40
32
|
};
|
|
41
|
-
const filterConnectedExtensions = (extensions) => new Map(Array.from(extensions.entries()).filter(([, state]) => state.connected));
|
|
42
|
-
const filterFailedExtensions = (extensions) => new Map(Array.from(extensions.entries()).filter(([, state]) => !state.connected));
|
|
43
33
|
|
|
44
34
|
//# sourceMappingURL=connect.js.map
|
|
45
35
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/connect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../src/extensions/connect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,QAAgB,EAChB,IAAY,EACZ,EAAU,EACQ,EAAE;IACpB,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1D,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,OAAM;QACR,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,YAAY,GAAG,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,CAAA;QAEvE,MAAM,cAAc,GAAG,CAAC,QAA4B,EAAE,EAAE;YACtD,wBAAwB,CACtB;gBACE,MAAM,EAAE,EAAE;gBACV,IAAI;aACL,EACD,SAAS,CAAC,MAAM,EAChB,QAAQ,CACT,CAAA;QACH,CAAC,CAAA;QAID,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;YAC/C,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACtD,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","file":"connect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionAccount } from '@w3ux/types'\nimport { addUnsub } from '../accounts/unsubs'\nimport { processExtensionAccounts } from '../accounts/util'\nimport { canConnect } from '../util'\nimport { initExtensions } from './index'\n\n// Connects to a single extension and processes its accounts\nexport const connectExtension = async (\n dappName: string,\n ss58: number,\n id: string\n): Promise<boolean> => {\n if (canConnect(id)) {\n const { connected } = await initExtensions(dappName, [id])\n if (connected.size === 0) {\n return\n }\n const { extension } = connected.get(id)\n const canSubscribe = typeof extension.accounts.subscribe === 'function'\n\n const handleAccounts = (accounts: ExtensionAccount[]) => {\n processExtensionAccounts(\n {\n source: id,\n ss58,\n },\n extension.signer,\n accounts\n )\n }\n\n // If account subscriptions are not supported, simply get the account(s) from the extension,\n // otherwise, subscribe to accounts\n if (!canSubscribe) {\n const accounts = await extension.accounts.get()\n handleAccounts(accounts)\n } else {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(accounts)\n })\n addUnsub(id, unsub)\n }\n return true\n }\n return false\n}\n"]}
|
package/extensions/discover.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import extensions from '@w3ux/extension-assets';
|
|
2
|
-
import { _extensionsStatus, _gettingExtensions } from '
|
|
2
|
+
import { _extensionsStatus, _gettingExtensions } from '../observables';
|
|
3
3
|
export const getExtensions = async () => {
|
|
4
4
|
_gettingExtensions.next(true);
|
|
5
5
|
let injectedWeb3Interval = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/discover.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"sources":["../src/extensions/discover.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGtE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,oBAAoB,GAAmC,IAAI,CAAA;IAG/D,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,GAAG,CAAC,GAAG,CAAC;YACN,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClE,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CACpC,CAAA;IAGH,MAAM,eAAe,GAAG,KAAK,EAAE,eAAwB,EAAE,EAAE;QACzD,aAAa,CAAC,oBAAoB,CAAC,CAAA;QACnC,IAAI,eAAe,EAAE,CAAC;YACpB,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAC3C,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,GAAG,CAAA;IACpB,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,MAAM,gBAAgB,GAAG,CAAC,CAAA;IAG1B,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,aAAa,GAAG,CAAC,CAAA;IACrB,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,OAAO,EAAE,CAAA;QACT,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,eAAe,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,EAAE,YAAY,CAAA;YAGrC,MAAM,KAAK,GACT,QAAQ,KAAK,SAAS;gBACtB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CACrD,CAAA;YAGH,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,EAAE,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,CAAC,CAAA;YACnB,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;gBACrD,eAAe,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,QAAQ,CAAC,CAAA;AACd,CAAC,CAAA","file":"discover.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport extensions from '@w3ux/extension-assets'\nimport { _extensionsStatus, _gettingExtensions } from '../observables'\n\n// Gets extensions from injectedWeb3\nexport const getExtensions = async () => {\n _gettingExtensions.next(true)\n let injectedWeb3Interval: ReturnType<typeof setInterval> = null\n\n // Format installed extensions\n const formatInstalled = () =>\n Object.keys(extensions).reduce(\n (acc, key) => {\n acc[key] =\n window?.injectedWeb3[key] !== undefined ? 'installed' : acc[key]\n return acc\n },\n { ..._extensionsStatus.getValue() }\n )\n\n // Handle completed interval check\n const handleCompleted = async (foundExtensions: boolean) => {\n clearInterval(injectedWeb3Interval)\n if (foundExtensions) {\n _extensionsStatus.next(formatInstalled())\n }\n _gettingExtensions.next(false)\n }\n\n const interval = 200\n const maxChecks = 10\n const minVerifications = 2\n\n // Getter for the currently installed extensions\n let counter = 0\n let verifications = 0\n injectedWeb3Interval = setInterval(() => {\n counter++\n if (counter === maxChecks) {\n handleCompleted(false)\n } else {\n const injected = window?.injectedWeb3\n\n // Check if injected exists and all extensions have a valid enable function\n const ready =\n injected !== undefined &&\n Object.entries(injected).every(\n ([, ext]) => ext && typeof ext.enable === 'function'\n )\n\n // Increment verifications if the extensions are ready\n if (ready) {\n verifications++\n } else {\n verifications = 0\n }\n\n if (counter > 2 && verifications >= minVerifications) {\n handleCompleted(true)\n }\n }\n }, interval)\n}\n"]}
|
package/extensions/index.d.ts
CHANGED
package/extensions/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export * from './connect';
|
|
2
2
|
export * from './discover';
|
|
3
3
|
export * from './enable';
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './state';
|
|
4
|
+
export * from './init';
|
|
5
|
+
export * from './reconnect';
|
|
7
6
|
|
|
8
7
|
//# sourceMappingURL=index.js.map
|
|
9
8
|
|
package/extensions/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/index.ts"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,
|
|
1
|
+
{"version":3,"sources":["../src/extensions/index.ts"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from './connect'\nexport * from './discover'\nexport * from './enable'\nexport * from './init'\nexport * from './reconnect'\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { addExtensionToLocal, removeExtensionFromLocal } from '../local';
|
|
2
|
+
import { _extensionsStatus, _initialisedExtensions } from '../observables';
|
|
3
|
+
import { enableExtensions } from './enable';
|
|
4
|
+
export const initExtensions = async (dappName, extensionIds) => {
|
|
5
|
+
if (!extensionIds.length) {
|
|
6
|
+
return {
|
|
7
|
+
connected: new Map(),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const enableResults = await enableExtensions(extensionIds, dappName);
|
|
11
|
+
const [connected, withError] = [
|
|
12
|
+
filterConnectedExtensions(enableResults),
|
|
13
|
+
filterFailedExtensions(enableResults),
|
|
14
|
+
];
|
|
15
|
+
Array.from(connected.keys()).forEach((id) => addExtensionToLocal(id));
|
|
16
|
+
Array.from(withError.keys()).forEach((id) => removeExtensionFromLocal(id));
|
|
17
|
+
const newStatus = { ..._extensionsStatus.getValue() };
|
|
18
|
+
Array.from(connected.keys()).forEach((id) => {
|
|
19
|
+
newStatus[id] = 'connected';
|
|
20
|
+
});
|
|
21
|
+
Array.from(withError.entries()).forEach(([id, { error }]) => {
|
|
22
|
+
if (error.startsWith('Error')) {
|
|
23
|
+
if (error.substring(0, 17) === 'NotInstalledError') {
|
|
24
|
+
delete newStatus[id];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
newStatus[id] = 'not_authenticated';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const newInitialised = [..._initialisedExtensions.getValue()];
|
|
32
|
+
extensionIds.forEach((id) => {
|
|
33
|
+
if (!newInitialised.includes(id)) {
|
|
34
|
+
newInitialised.push(id);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
_extensionsStatus.next(newStatus);
|
|
38
|
+
_initialisedExtensions.next(newInitialised);
|
|
39
|
+
return { connected };
|
|
40
|
+
};
|
|
41
|
+
const filterConnectedExtensions = (extensions) => new Map(Array.from(extensions.entries()).filter(([, state]) => state.connected));
|
|
42
|
+
const filterFailedExtensions = (extensions) => new Map(Array.from(extensions.entries()).filter(([, state]) => !state.connected));
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=init.js.map
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/extensions/init.ts"],"names":[],"mappings":"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","file":"init.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionEnableResults } from '@w3ux/types'\nimport { addExtensionToLocal, removeExtensionFromLocal } from '../local'\nimport { _extensionsStatus, _initialisedExtensions } from '../observables'\nimport { enableExtensions } from './enable'\n\n// Connects to previously connected extensions, or to a specific set of extensions\nexport const initExtensions = async (\n dappName: string,\n extensionIds: string[]\n): Promise<{ connected: ExtensionEnableResults }> => {\n if (!extensionIds.length) {\n return {\n connected: new Map(),\n }\n }\n // Get extensions and enable them\n const enableResults = await enableExtensions(extensionIds, dappName)\n\n // Determine which extensions are connected and which have errors\n const [connected, withError] = [\n filterConnectedExtensions(enableResults),\n filterFailedExtensions(enableResults),\n ]\n\n // Manage local storage depending on connection status\n Array.from(connected.keys()).forEach((id) => addExtensionToLocal(id))\n Array.from(withError.keys()).forEach((id) => removeExtensionFromLocal(id))\n\n // Handle new extension statuses\n const newStatus = { ..._extensionsStatus.getValue() }\n Array.from(connected.keys()).forEach((id) => {\n newStatus[id] = 'connected'\n })\n Array.from(withError.entries()).forEach(([id, { error }]) => {\n if (error.startsWith('Error')) {\n // Extension not found - remove from state\n if (error.substring(0, 17) === 'NotInstalledError') {\n delete newStatus[id]\n } else {\n // Assume extension not authenticated\n newStatus[id] = 'not_authenticated'\n }\n }\n })\n\n // Record initialised extensions\n const newInitialised = [..._initialisedExtensions.getValue()]\n extensionIds.forEach((id) => {\n if (!newInitialised.includes(id)) {\n newInitialised.push(id)\n }\n })\n\n // Commit updates to observables\n _extensionsStatus.next(newStatus)\n _initialisedExtensions.next(newInitialised)\n\n return { connected }\n}\n\n// Filter successfully connected extensions\nconst filterConnectedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n )\n\n// Filter extensions that failed to connect\nconst filterFailedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n )\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { addUnsub, getAccountsFromExtensions, processExtensionAccounts,
|
|
1
|
+
import { initExtensions } from '.';
|
|
2
|
+
import { addUnsub, getAccountsFromExtensions, processExtensionAccounts, updateAccounts, } from '../accounts/index';
|
|
3
|
+
import { getActiveExtensionsLocal } from '../local';
|
|
4
|
+
import { setReconnectSync } from '../util';
|
|
3
5
|
export const reconnectExtensions = async (dappName, ss58) => {
|
|
4
6
|
setReconnectSync('syncing');
|
|
5
|
-
const { connected } = await
|
|
7
|
+
const { connected } = await initExtensions(dappName, getActiveExtensionsLocal());
|
|
6
8
|
if (connected.size > 0) {
|
|
7
9
|
updateAccounts({
|
|
8
10
|
add: await getAccountsFromExtensions(connected, ss58),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/extensions/reconnect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,CAAA;AAClC,OAAO,EACL,QAAQ,EACR,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,QAAgB,EAAE,IAAY,EAAE,EAAE;IAC1E,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CACxC,QAAQ,EACR,wBAAwB,EAAE,CAC3B,CAAA;IACD,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAEvB,cAAc,CAAC;YACb,GAAG,EAAE,MAAM,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC;YACrD,MAAM,EAAE,EAAE;SACX,CAAC,CAAA;QAGF,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACtD,wBAAwB,CACtB;wBACE,MAAM,EAAE,EAAE;wBACV,IAAI;qBACL,EACD,SAAS,CAAC,MAAM,EAChB,QAAQ,CACT,CAAA;gBACH,CAAC,CAAC,CAAA;gBACF,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAC5B,CAAC,CAAA","file":"reconnect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { initExtensions } from '.'\nimport {\n addUnsub,\n getAccountsFromExtensions,\n processExtensionAccounts,\n updateAccounts,\n} from '../accounts/index'\nimport { getActiveExtensionsLocal } from '../local'\nimport { setReconnectSync } from '../util'\n\nexport const reconnectExtensions = async (dappName: string, ss58: number) => {\n setReconnectSync('syncing')\n const { connected } = await initExtensions(\n dappName,\n getActiveExtensionsLocal()\n )\n if (connected.size > 0) {\n // Perform initial account state update\n updateAccounts({\n add: await getAccountsFromExtensions(connected, ss58),\n remove: [],\n })\n\n // If available, subscribe to accounts for each connected extension\n for (const [id, { extension }] of Array.from(connected.entries())) {\n if (typeof extension.accounts.subscribe === 'function') {\n const unsub = extension.accounts.subscribe((accounts) => {\n processExtensionAccounts(\n {\n source: id,\n ss58,\n },\n extension.signer,\n accounts\n )\n })\n addUnsub(id, unsub)\n }\n }\n }\n setReconnectSync('synced')\n}\n"]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { ExternalAccount } from '@w3ux/types';
|
|
1
2
|
export declare const isExtensionLocal: (id: string) => boolean;
|
|
2
3
|
export declare const getActiveExtensionsLocal: () => string[];
|
|
3
4
|
export declare const addExtensionToLocal: (id: string) => void;
|
|
4
5
|
export declare const removeExtensionFromLocal: (id: string) => void;
|
|
6
|
+
export declare const getLocalExternalAccounts: (network?: string) => ExternalAccount[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { localStorageOrDefault } from '@w3ux/utils';
|
|
2
|
-
import { activeExtensionsKey } from '
|
|
2
|
+
import { activeExtensionsKey } from './consts';
|
|
3
3
|
export const isExtensionLocal = (id) => {
|
|
4
4
|
const current = localStorageOrDefault(activeExtensionsKey, [], true);
|
|
5
5
|
return Array.isArray(current) && current.includes(id);
|
|
@@ -20,6 +20,13 @@ export const removeExtensionFromLocal = (id) => {
|
|
|
20
20
|
localStorage.setItem(activeExtensionsKey, JSON.stringify(current.filter((localId) => localId !== id)));
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
+
export const getLocalExternalAccounts = (network) => {
|
|
24
|
+
let localAccounts = localStorageOrDefault('external_extensionAccounts', [], true);
|
|
25
|
+
if (network) {
|
|
26
|
+
localAccounts = localAccounts.filter((l) => l.network === network);
|
|
27
|
+
}
|
|
28
|
+
return localAccounts;
|
|
29
|
+
};
|
|
23
30
|
|
|
24
31
|
//# sourceMappingURL=local.js.map
|
|
25
32
|
|
package/local.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/local.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAG9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAW,EAAE;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAa,EAAE;IACrD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAQ,EAAE;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAU,EAAQ,EAAE;IAC3D,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC,OAAO,CAClB,mBAAmB,EACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAC5D,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC3D,IAAI,aAAa,GAAG,qBAAqB,CACvC,4BAA4B,EAC5B,EAAE,EACF,IAAI,CACgB,CAAA;IACtB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA","file":"local.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExternalAccount } from '@w3ux/types'\nimport { localStorageOrDefault } from '@w3ux/utils'\nimport { activeExtensionsKey } from './consts'\n\n// Check if an extension exists in local storage\nexport const isExtensionLocal = (id: string): boolean => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n return Array.isArray(current) && current.includes(id)\n}\n\n// Gets all active extensions from local storage\nexport const getActiveExtensionsLocal = (): string[] => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n return Array.isArray(current) ? current : []\n}\n\n// Adds an extension to local storage\nexport const addExtensionToLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n if (Array.isArray(current) && !current.includes(id)) {\n localStorage.setItem(activeExtensionsKey, JSON.stringify([...current, id]))\n }\n}\n\n// Removes extension from local storage\nexport const removeExtensionFromLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n if (Array.isArray(current)) {\n localStorage.setItem(\n activeExtensionsKey,\n JSON.stringify(current.filter((localId) => localId !== id))\n )\n }\n}\n\n// Gets local external accounts for a network\nexport const getLocalExternalAccounts = (network?: string) => {\n let localAccounts = localStorageOrDefault<ExternalAccount[]>(\n 'external_extensionAccounts',\n [],\n true\n ) as ExternalAccount[]\n if (network) {\n localAccounts = localAccounts.filter((l) => l.network === network)\n }\n return localAccounts\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionsStatus } from '@w3ux/types';
|
|
1
|
+
import type { ExtensionsStatus, ImportedAccount, Sync } from '@w3ux/types';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
export declare const _extensionsStatus: BehaviorSubject<ExtensionsStatus>;
|
|
4
4
|
export declare const extensionsStatus$: import("rxjs").Observable<ExtensionsStatus>;
|
|
@@ -6,3 +6,7 @@ export declare const _gettingExtensions: BehaviorSubject<boolean>;
|
|
|
6
6
|
export declare const gettingExtensions$: import("rxjs").Observable<boolean>;
|
|
7
7
|
export declare const _initialisedExtensions: BehaviorSubject<string[]>;
|
|
8
8
|
export declare const initialisedExtensions$: import("rxjs").Observable<string[]>;
|
|
9
|
+
export declare const _reconnectSync: BehaviorSubject<Sync>;
|
|
10
|
+
export declare const reconnectSync$: import("rxjs").Observable<Sync>;
|
|
11
|
+
export declare const _extensionAccounts: BehaviorSubject<ImportedAccount[]>;
|
|
12
|
+
export declare const extensionAccounts$: import("rxjs").Observable<ImportedAccount[]>;
|
|
@@ -5,6 +5,10 @@ export const _gettingExtensions = new BehaviorSubject(true);
|
|
|
5
5
|
export const gettingExtensions$ = _gettingExtensions.asObservable();
|
|
6
6
|
export const _initialisedExtensions = new BehaviorSubject([]);
|
|
7
7
|
export const initialisedExtensions$ = _initialisedExtensions.asObservable();
|
|
8
|
+
export const _reconnectSync = new BehaviorSubject('unsynced');
|
|
9
|
+
export const reconnectSync$ = _reconnectSync.asObservable();
|
|
10
|
+
export const _extensionAccounts = new BehaviorSubject([]);
|
|
11
|
+
export const extensionAccounts$ = _extensionAccounts.asObservable();
|
|
8
12
|
|
|
9
13
|
//# sourceMappingURL=observables.js.map
|
|
10
14
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/observables.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAA;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAA;AAGjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAA;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAA;AAGnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,eAAe,CAAW,EAAE,CAAC,CAAA;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,YAAY,EAAE,CAAA;AAG3E,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,eAAe,CAAO,UAAU,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,EAAE,CAAA;AAG3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAA;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAA","file":"observables.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionsStatus, ImportedAccount, Sync } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Discovered extensions along with their status\nexport const _extensionsStatus = new BehaviorSubject<ExtensionsStatus>({})\nexport const extensionsStatus$ = _extensionsStatus.asObservable()\n\n// Whether extensions are being checked\nexport const _gettingExtensions = new BehaviorSubject<boolean>(true)\nexport const gettingExtensions$ = _gettingExtensions.asObservable()\n\n// Extensions that have successfully connected\nexport const _initialisedExtensions = new BehaviorSubject<string[]>([])\nexport const initialisedExtensions$ = _initialisedExtensions.asObservable()\n\n// Sync status of reconnecting to previously enabled extensions\nexport const _reconnectSync = new BehaviorSubject<Sync>('unsynced')\nexport const reconnectSync$ = _reconnectSync.asObservable()\n\n// Imported extension accounts\nexport const _extensionAccounts = new BehaviorSubject<ImportedAccount[]>([])\nexport const extensionAccounts$ = _extensionAccounts.asObservable()\n"]}
|
package/package.json
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { ExtensionStatus } from '@w3ux/types';
|
|
1
|
+
import type { ExtensionStatus, Sync } from '@w3ux/types';
|
|
2
2
|
export declare const getStatus: (id: string) => ExtensionStatus;
|
|
3
3
|
export declare const setStatus: (id: string, status: ExtensionStatus) => void;
|
|
4
4
|
export declare const removeStatus: (id: string) => void;
|
|
5
5
|
export declare const canConnect: (id: string) => boolean;
|
|
6
|
+
export declare const resetAccounts: () => void;
|
|
7
|
+
export declare const getReconnectSync: () => Sync;
|
|
8
|
+
export declare const setReconnectSync: (sync: Sync) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _extensionsStatus } from './observables';
|
|
1
|
+
import { _extensionAccounts, _extensionsStatus, _reconnectSync, } from './observables';
|
|
2
2
|
export const getStatus = (id) => _extensionsStatus.getValue()[id] || undefined;
|
|
3
3
|
export const setStatus = (id, status) => {
|
|
4
4
|
const newValue = { ..._extensionsStatus.getValue() };
|
|
@@ -10,7 +10,14 @@ export const removeStatus = (id) => {
|
|
|
10
10
|
_extensionsStatus.next(rest);
|
|
11
11
|
};
|
|
12
12
|
export const canConnect = (id) => ![undefined, 'connected'].includes(_extensionsStatus.getValue()[id]);
|
|
13
|
+
export const resetAccounts = () => {
|
|
14
|
+
_extensionAccounts.next([]);
|
|
15
|
+
};
|
|
16
|
+
export const getReconnectSync = () => _reconnectSync.getValue();
|
|
17
|
+
export const setReconnectSync = (sync) => {
|
|
18
|
+
_reconnectSync.next(sync);
|
|
19
|
+
};
|
|
13
20
|
|
|
14
|
-
//# sourceMappingURL=
|
|
21
|
+
//# sourceMappingURL=util.js.map
|
|
15
22
|
|
|
16
|
-
//# sourceMappingURL=
|
|
23
|
+
//# sourceMappingURL=util.js.map
|
package/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AAGtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAmB,EAAE,CACvD,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,SAAS,CAAA;AAG/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,MAAuB,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAA;IACpD,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;IACrB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE;IACzC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAA;IACzD,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CACvC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC7B,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;AAG/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC7C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC,CAAA","file":"util.js","sourcesContent":["import type { ExtensionStatus, Sync } from '@w3ux/types'\nimport {\n _extensionAccounts,\n _extensionsStatus,\n _reconnectSync,\n} from './observables'\n\n// Gets an extension status\nexport const getStatus = (id: string): ExtensionStatus =>\n _extensionsStatus.getValue()[id] || undefined\n\n// Sets an extension status\nexport const setStatus = (id: string, status: ExtensionStatus) => {\n const newValue = { ..._extensionsStatus.getValue() }\n newValue[id] = status\n _extensionsStatus.next(newValue)\n}\n\n// Removes an extension status\nexport const removeStatus = (id: string) => {\n const { [id]: _, ...rest } = _extensionsStatus.getValue()\n _extensionsStatus.next(rest)\n}\n\n// Whether an extension can be connected\nexport const canConnect = (id: string) =>\n ![undefined, 'connected'].includes(_extensionsStatus.getValue()[id])\n\n// Reset accounts\nexport const resetAccounts = () => {\n _extensionAccounts.next([])\n}\n\n// Get previously enabled extension reconnect sync status\nexport const getReconnectSync = () => _reconnectSync.getValue()\n\n// Set previously enabled extension reconnect sync status\nexport const setReconnectSync = (sync: Sync) => {\n _reconnectSync.next(sync)\n}\n"]}
|
package/accounts/connect.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const connectExtension: (dappName: string, ss58: number, id: string) => Promise<boolean>;
|
package/accounts/connect.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { canConnect, connectExtensions } from '../extensions/index';
|
|
2
|
-
import { addUnsub } from './state';
|
|
3
|
-
import { processExtensionAccounts } from './util';
|
|
4
|
-
export const connectExtension = async (dappName, ss58, id) => {
|
|
5
|
-
if (canConnect(id)) {
|
|
6
|
-
const { connected } = await connectExtensions(dappName, [id]);
|
|
7
|
-
if (connected.size === 0) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
const { extension } = connected.get(id);
|
|
11
|
-
const canSubscribe = typeof extension.accounts.subscribe === 'function';
|
|
12
|
-
const handleAccounts = (accounts) => {
|
|
13
|
-
processExtensionAccounts({
|
|
14
|
-
source: id,
|
|
15
|
-
ss58,
|
|
16
|
-
}, extension.signer, accounts);
|
|
17
|
-
};
|
|
18
|
-
if (!canSubscribe) {
|
|
19
|
-
const accounts = await extension.accounts.get();
|
|
20
|
-
handleAccounts(accounts);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
const unsub = extension.accounts.subscribe((accounts) => {
|
|
24
|
-
handleAccounts(accounts);
|
|
25
|
-
});
|
|
26
|
-
addUnsub(id, unsub);
|
|
27
|
-
}
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=connect.js.map
|
|
34
|
-
|
|
35
|
-
//# sourceMappingURL=connect.js.map
|
package/accounts/connect.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/connect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAA;AAGjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,QAAgB,EAChB,IAAY,EACZ,EAAU,EACQ,EAAE;IACpB,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,OAAM;QACR,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,YAAY,GAAG,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,CAAA;QAEvE,MAAM,cAAc,GAAG,CAAC,QAA4B,EAAE,EAAE;YACtD,wBAAwB,CACtB;gBACE,MAAM,EAAE,EAAE;gBACV,IAAI;aACL,EACD,SAAS,CAAC,MAAM,EAChB,QAAQ,CACT,CAAA;QACH,CAAC,CAAA;QAID,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;YAC/C,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACtD,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","file":"connect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionAccount } from '@w3ux/types'\nimport { canConnect, connectExtensions } from '../extensions/index'\nimport { addUnsub } from './state'\nimport { processExtensionAccounts } from './util'\n\n// Connects to a single extension and processes its accounts\nexport const connectExtension = async (\n dappName: string,\n ss58: number,\n id: string\n): Promise<boolean> => {\n if (canConnect(id)) {\n const { connected } = await connectExtensions(dappName, [id])\n if (connected.size === 0) {\n return\n }\n const { extension } = connected.get(id)\n const canSubscribe = typeof extension.accounts.subscribe === 'function'\n\n const handleAccounts = (accounts: ExtensionAccount[]) => {\n processExtensionAccounts(\n {\n source: id,\n ss58,\n },\n extension.signer,\n accounts\n )\n }\n\n // If account subscriptions are not supported, simply get the account(s) from the extension,\n // otherwise, subscribe to accounts\n if (!canSubscribe) {\n const accounts = await extension.accounts.get()\n handleAccounts(accounts)\n } else {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(accounts)\n })\n addUnsub(id, unsub)\n }\n return true\n }\n return false\n}\n"]}
|
package/accounts/local.d.ts
DELETED
package/accounts/local.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { localStorageOrDefault } from '@w3ux/utils';
|
|
2
|
-
export const getLocalExternalAccounts = (network) => {
|
|
3
|
-
let localAccounts = localStorageOrDefault('external_accounts', [], true);
|
|
4
|
-
if (network) {
|
|
5
|
-
localAccounts = localAccounts.filter((l) => l.network === network);
|
|
6
|
-
}
|
|
7
|
-
return localAccounts;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=local.js.map
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=local.js.map
|
package/accounts/local.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/local.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC3D,IAAI,aAAa,GAAG,qBAAqB,CACvC,mBAAmB,EACnB,EAAE,EACF,IAAI,CACgB,CAAA;IACtB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA","file":"local.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExternalAccount } from '@w3ux/types'\nimport { localStorageOrDefault } from '@w3ux/utils'\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,6 +0,0 @@
|
|
|
1
|
-
import type { ImportedAccount, Sync } from '@w3ux/types';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
export declare const _reconnectSync: BehaviorSubject<Sync>;
|
|
4
|
-
export declare const reconnectSync$: import("rxjs").Observable<Sync>;
|
|
5
|
-
export declare const _accounts: BehaviorSubject<ImportedAccount[]>;
|
|
6
|
-
export declare const accounts$: import("rxjs").Observable<ImportedAccount[]>;
|
package/accounts/observables.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
-
export const _reconnectSync = new BehaviorSubject('unsynced');
|
|
3
|
-
export const reconnectSync$ = _reconnectSync.asObservable();
|
|
4
|
-
export const _accounts = new BehaviorSubject([]);
|
|
5
|
-
export const accounts$ = _accounts.asObservable();
|
|
6
|
-
|
|
7
|
-
//# sourceMappingURL=observables.js.map
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=observables.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/observables.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,eAAe,CAAO,UAAU,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,EAAE,CAAA;AAG3D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,CAAA","file":"observables.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ImportedAccount, Sync } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Sync status of reconnecting to previously enabled extensions\nexport const _reconnectSync = new BehaviorSubject<Sync>('unsynced')\nexport const reconnectSync$ = _reconnectSync.asObservable()\n\n// Imported extension accounts\nexport const _accounts = new BehaviorSubject<ImportedAccount[]>([])\nexport const accounts$ = _accounts.asObservable()\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/reconnect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EACL,QAAQ,EACR,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,GACf,MAAM,SAAS,CAAA;AAEhB,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,QAAgB,EAAE,IAAY,EAAE,EAAE;IAC1E,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,iBAAiB,CAC3C,QAAQ,EACR,wBAAwB,EAAE,CAC3B,CAAA;IACD,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAEvB,cAAc,CAAC;YACb,GAAG,EAAE,MAAM,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC;YACrD,MAAM,EAAE,EAAE;SACX,CAAC,CAAA;QAGF,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACtD,wBAAwB,CACtB;wBACE,MAAM,EAAE,EAAE;wBACV,IAAI;qBACL,EACD,SAAS,CAAC,MAAM,EAChB,QAAQ,CACT,CAAA;gBACH,CAAC,CAAC,CAAA;gBACF,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAC5B,CAAC,CAAA","file":"reconnect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { connectExtensions, getActiveExtensionsLocal } from '../extensions'\nimport {\n addUnsub,\n getAccountsFromExtensions,\n processExtensionAccounts,\n setReconnectSync,\n updateAccounts,\n} from './index'\n\nexport const reconnectExtensions = async (dappName: string, ss58: number) => {\n setReconnectSync('syncing')\n const { connected } = await connectExtensions(\n dappName,\n getActiveExtensionsLocal()\n )\n if (connected.size > 0) {\n // Perform initial account state update\n updateAccounts({\n add: await getAccountsFromExtensions(connected, ss58),\n remove: [],\n })\n\n // If available, subscribe to accounts for each connected extension\n for (const [id, { extension }] of Array.from(connected.entries())) {\n if (typeof extension.accounts.subscribe === 'function') {\n const unsub = extension.accounts.subscribe((accounts) => {\n processExtensionAccounts(\n {\n source: id,\n ss58,\n },\n extension.signer,\n accounts\n )\n })\n addUnsub(id, unsub)\n }\n }\n }\n setReconnectSync('synced')\n}\n"]}
|
package/accounts/state.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Sync } from '@w3ux/types';
|
|
2
|
-
export declare const unsubs: Record<string, () => void>;
|
|
3
|
-
export declare const addUnsub: (id: string, unsub: () => void) => void;
|
|
4
|
-
export declare const unsubAll: () => void;
|
|
5
|
-
export declare const resetAccounts: () => void;
|
|
6
|
-
export declare const getReconnectSync: () => Sync;
|
|
7
|
-
export declare const setReconnectSync: (sync: Sync) => void;
|
package/accounts/state.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { _accounts, _reconnectSync } from './observables';
|
|
2
|
-
export const unsubs = {};
|
|
3
|
-
export const addUnsub = (id, unsub) => {
|
|
4
|
-
unsubs[id] = unsub;
|
|
5
|
-
};
|
|
6
|
-
export const unsubAll = () => {
|
|
7
|
-
Object.values(unsubs).forEach((unsub) => {
|
|
8
|
-
unsub();
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
export const resetAccounts = () => {
|
|
12
|
-
_accounts.next([]);
|
|
13
|
-
};
|
|
14
|
-
export const getReconnectSync = () => _reconnectSync.getValue();
|
|
15
|
-
export const setReconnectSync = (sync) => {
|
|
16
|
-
_reconnectSync.next(sync);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=state.js.map
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=state.js.map
|
package/accounts/state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accounts/state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEzD,MAAM,CAAC,MAAM,MAAM,GAA+B,EAAE,CAAA;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,KAAiB,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;AAG/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC7C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC,CAAA","file":"state.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { Sync } from '@w3ux/types'\nimport { _accounts, _reconnectSync } from './observables'\n\nexport const unsubs: Record<string, () => void> = {}\n\n// Add an extension id to unsub state\nexport const addUnsub = (id: string, unsub: () => void) => {\n unsubs[id] = unsub\n}\n\n// Unsubscribe to all unsubs\nexport const unsubAll = () => {\n Object.values(unsubs).forEach((unsub) => {\n unsub()\n })\n}\n\n// Reset accounts\nexport const resetAccounts = () => {\n _accounts.next([])\n}\n\n// Get previously enabled extension reconnect sync status\nexport const getReconnectSync = () => _reconnectSync.getValue()\n\n// Set previously enabled extension reconnect sync status\nexport const setReconnectSync = (sync: Sync) => {\n _reconnectSync.next(sync)\n}\n"]}
|
package/extensions/local.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/local.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAW,EAAE;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAa,EAAE;IACrD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAQ,EAAE;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAU,EAAQ,EAAE;IAC3D,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC,OAAO,CAClB,mBAAmB,EACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAC5D,CAAA;IACH,CAAC;AACH,CAAC,CAAA","file":"local.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from '@w3ux/utils'\nimport { activeExtensionsKey } from '../consts'\n\n// Check if an extension exists in local storage\nexport const isExtensionLocal = (id: string): boolean => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n return Array.isArray(current) && current.includes(id)\n}\n\n// Gets all active extensions from local storage\nexport const getActiveExtensionsLocal = (): string[] => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n return Array.isArray(current) ? current : []\n}\n\n// Adds an extension to local storage\nexport const addExtensionToLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n if (Array.isArray(current) && !current.includes(id)) {\n localStorage.setItem(activeExtensionsKey, JSON.stringify([...current, id]))\n }\n}\n\n// Removes extension from local storage\nexport const removeExtensionFromLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n if (Array.isArray(current)) {\n localStorage.setItem(\n activeExtensionsKey,\n JSON.stringify(current.filter((localId) => localId !== id))\n )\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/observables.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAA;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAA;AAGjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAA;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAA;AAGnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,eAAe,CAAW,EAAE,CAAC,CAAA;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,YAAY,EAAE,CAAA","file":"observables.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionsStatus } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Discovered extensions along with their status\nexport const _extensionsStatus = new BehaviorSubject<ExtensionsStatus>({})\nexport const extensionsStatus$ = _extensionsStatus.asObservable()\n\n// Whether extensions are being checked\nexport const _gettingExtensions = new BehaviorSubject<boolean>(true)\nexport const gettingExtensions$ = _gettingExtensions.asObservable()\n\n// Extensions that have successfully connected\nexport const _initialisedExtensions = new BehaviorSubject<string[]>([])\nexport const initialisedExtensions$ = _initialisedExtensions.asObservable()\n"]}
|
package/extensions/state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGjD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAmB,EAAE,CACvD,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,SAAS,CAAA;AAG/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,MAAuB,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAA;IACpD,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;IACrB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE;IACzC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAA;IACzD,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CACvC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA","file":"state.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionStatus } from '@w3ux/types'\nimport { _extensionsStatus } from './observables'\n\n// Gets an extension status\nexport const getStatus = (id: string): ExtensionStatus =>\n _extensionsStatus.getValue()[id] || undefined\n\n// Sets an extension status\nexport const setStatus = (id: string, status: ExtensionStatus) => {\n const newValue = { ..._extensionsStatus.getValue() }\n newValue[id] = status\n _extensionsStatus.next(newValue)\n}\n\n// Removes an extension status\nexport const removeStatus = (id: string) => {\n const { [id]: _, ...rest } = _extensionsStatus.getValue()\n _extensionsStatus.next(rest)\n}\n\n// Whether an extension can be connected\nexport const canConnect = (id: string) =>\n ![undefined, 'connected'].includes(_extensionsStatus.getValue()[id])\n"]}
|
|
File without changes
|