@w3ux/react-connect-kit 3.9.2 → 4.0.0
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/index.cjs +5 -5
- package/index.cjs.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +6 -4
package/index.cjs
CHANGED
|
@@ -34,7 +34,7 @@ var import_hooks2 = require("@w3ux/hooks");
|
|
|
34
34
|
var import_observables_connect2 = require("@w3ux/observables-connect");
|
|
35
35
|
var import_accounts = require("@w3ux/observables-connect/accounts");
|
|
36
36
|
var import_extensions2 = require("@w3ux/observables-connect/extensions");
|
|
37
|
-
var
|
|
37
|
+
var import_util_dedot = require("@w3ux/util-dedot");
|
|
38
38
|
var import_react2 = require("react");
|
|
39
39
|
var import_rxjs2 = require("rxjs");
|
|
40
40
|
|
|
@@ -117,7 +117,7 @@ var ExtensionAccountsProvider = ({
|
|
|
117
117
|
};
|
|
118
118
|
const connectExtension = async (id) => await (0, import_extensions2.connectExtension)(dappName, ss58, id);
|
|
119
119
|
const getExtensionAccounts = (ss58Prefix) => extensionAccounts.map((account) => {
|
|
120
|
-
const formattedAddress = (0,
|
|
120
|
+
const formattedAddress = (0, import_util_dedot.formatAccountSs58)(account.address, ss58Prefix);
|
|
121
121
|
if (!formattedAddress) {
|
|
122
122
|
return null;
|
|
123
123
|
}
|
|
@@ -128,7 +128,7 @@ var ExtensionAccountsProvider = ({
|
|
|
128
128
|
}).filter((account) => account !== null);
|
|
129
129
|
const getExtensionAccount = (address, source) => {
|
|
130
130
|
const account = extensionAccounts.find(
|
|
131
|
-
(item) => (0,
|
|
131
|
+
(item) => (0, import_util_dedot.formatAccountSs58)(item.address, 0) === (0, import_util_dedot.formatAccountSs58)(address, 0) && item.source === source
|
|
132
132
|
);
|
|
133
133
|
return account ? { ...account, address } : void 0;
|
|
134
134
|
};
|
|
@@ -176,7 +176,7 @@ var ExtensionsProvider = ({
|
|
|
176
176
|
// src/Hardware/index.tsx
|
|
177
177
|
var import_hooks3 = require("@w3ux/hooks");
|
|
178
178
|
var import_observables_connect3 = require("@w3ux/observables-connect");
|
|
179
|
-
var
|
|
179
|
+
var import_utils = require("@w3ux/utils");
|
|
180
180
|
var import_react3 = require("react");
|
|
181
181
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
182
182
|
var [HardwareAccountsContext, useHardwareAccounts] = (0, import_hooks3.createSafeContext)();
|
|
@@ -192,7 +192,7 @@ var HardwareAccountsProvider = ({
|
|
|
192
192
|
const newAccount = {
|
|
193
193
|
address,
|
|
194
194
|
network,
|
|
195
|
-
name: (0,
|
|
195
|
+
name: (0, import_utils.ellipsisFn)(address),
|
|
196
196
|
source,
|
|
197
197
|
index
|
|
198
198
|
};
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/Extensions/Accounts.tsx","../src/Extensions/Connect.tsx","../src/Extensions/Provider.tsx","../src/Hardware/index.tsx"],"sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from './Extensions'\nexport * from './Hardware'\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\textensionAccounts$,\n\tgetReconnectSync,\n\tinitialisedExtensions$,\n\treconnectSync$,\n\tresetAccounts,\n} from '@w3ux/observables-connect'\nimport { unsubAll } from '@w3ux/observables-connect/accounts'\nimport {\n\tconnectExtension as doConnectExtension,\n\treconnectExtensions,\n} from '@w3ux/observables-connect/extensions'\nimport type { Account, ExtensionAccount, Sync } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/utils'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from './Connect'\nimport type {\n\tExtensionAccountsContextInterface,\n\tExtensionsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n\tcreateSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n\tchildren,\n\tss58,\n\tdappName,\n}: ExtensionsProviderProps) => {\n\tconst { gettingExtensions } = useExtensions()\n\n\t// Store connected extension accounts\n\tconst [extensionAccounts, setExtensionAccounts] = useState<Account[]>([])\n\t// Stores initialised extensions\n\tconst [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n\t\t[],\n\t)\n\t// Store whether previously enabled extensions have been re-connected\n\tconst [extensionsSynced, setExtensionsSynced] = useState<Sync>(\n\t\tgetReconnectSync(),\n\t)\n\n\t// Handle initial connection to previously enabled extensions\n\tconst handleInitialConnect = async () => {\n\t\tif (!gettingExtensions && extensionsSynced === 'unsynced') {\n\t\t\t// Defensive: unsubscribe from all accounts and reset state\n\t\t\tunsubAll()\n\t\t\tresetAccounts()\n\t\t\tawait reconnectExtensions(dappName, ss58)\n\t\t}\n\t}\n\n\t// Connects to a single extension and processes its accounts\n\tconst connectExtension = async (id: string): Promise<boolean> =>\n\t\tawait doConnectExtension(dappName, ss58, id)\n\n\t// Get extension accounts, formatted by a provided ss58 prefix\n\tconst getExtensionAccounts = (ss58Prefix: number) =>\n\t\textensionAccounts\n\t\t\t.map((account) => {\n\t\t\t\tconst formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n\t\t\t\tif (!formattedAddress) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...account,\n\t\t\t\t\taddress: formattedAddress,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((account) => account !== null)\n\n\t// Get an imported extension account\n\tconst getExtensionAccount = (\n\t\taddress: string,\n\t\tsource: string,\n\t): ExtensionAccount | undefined => {\n\t\tconst account = extensionAccounts.find(\n\t\t\t(item) =>\n\t\t\t\tformatAccountSs58(item.address, 0) === formatAccountSs58(address, 0) &&\n\t\t\t\titem.source === source,\n\t\t)\n\t\treturn account ? { ...account, address } : undefined\n\t}\n\n\t// Initialise extension accounts sync\n\tuseEffect(() => {\n\t\thandleInitialConnect()\n\t\treturn () => unsubAll()\n\t}, [gettingExtensions])\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = combineLatest([\n\t\t\tinitialisedExtensions$,\n\t\t\textensionAccounts$,\n\t\t\treconnectSync$,\n\t\t]).subscribe(([initialised, accounts, sync]) => {\n\t\t\tsetExtensionsInitialised(initialised)\n\t\t\tsetExtensionAccounts(accounts)\n\t\t\tsetExtensionsSynced(sync)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsInitialised,\n\t\t\t\tconnectExtension,\n\t\t\t\textensionsSynced,\n\t\t\t\tgetExtensionAccount,\n\t\t\t\tgetExtensionAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionAccountsContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tcanConnect,\n\textensionsStatus$,\n\tgetStatus,\n\tgettingExtensions$,\n\tremoveStatus,\n\tsetStatus,\n} from '@w3ux/observables-connect'\nimport {\n\tgetExtensions,\n\tinjectMimir,\n} from '@w3ux/observables-connect/extensions'\nimport type { ExtensionStatus, ExtensionsStatus } from '@w3ux/types'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport type { ExtensionsConnectContextInterface } from './types'\n\nexport const [ExtensionsConnectContext, useExtensions] =\n\tcreateSafeContext<ExtensionsConnectContextInterface>()\n\nexport const ExtensionsConnectProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store whether extensions are being fetched\n\tconst [gettingExtensions, setGettingExtensions] = useState<boolean>(true)\n\n\t// Store discovered extensions along with their status\n\tconst [extensionsStatus, setExtensionsStatus] = useState<ExtensionsStatus>({})\n\n\t// Setter for an extension status\n\tconst setExtensionStatus = (id: string, status: ExtensionStatus) => {\n\t\tsetStatus(id, status)\n\t}\n\n\t// Removes an extension status\n\tconst removeExtensionStatus = (id: string) => {\n\t\tremoveStatus(id)\n\t}\n\n\t// Checks if an extension has been installed\n\tconst extensionInstalled = (id: string): boolean =>\n\t\tgetStatus(id) !== undefined\n\n\t// Checks whether an extension can be connected to\n\tconst extensionCanConnect = (id: string): boolean => canConnect(id)\n\n\t// Init extensions discovery\n\tconst discoverExtensions = async () => {\n\t\t// Handle Mimir iframe injection\n\t\tawait injectMimir()\n\t\t// Fetch extensions from `injectedWeb3`\n\t\tgetExtensions()\n\t}\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tdiscoverExtensions()\n\t\tconst sub = combineLatest([\n\t\t\tgettingExtensions$,\n\t\t\textensionsStatus$,\n\t\t]).subscribe(([getting, status]) => {\n\t\t\tsetGettingExtensions(getting)\n\t\t\tsetExtensionsStatus(status)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionsConnectContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsStatus,\n\t\t\t\tgettingExtensions,\n\t\t\t\tsetExtensionStatus,\n\t\t\t\tremoveExtensionStatus,\n\t\t\t\textensionInstalled,\n\t\t\t\textensionCanConnect,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionsConnectContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ExtensionAccountsProvider } from './Accounts'\nimport { ExtensionsConnectProvider } from './Connect'\nimport type { ExtensionsProviderProps } from './types'\n\nexport const ExtensionsProvider = ({\n\tss58,\n\tdappName,\n\tchildren,\n}: ExtensionsProviderProps) => (\n\t<ExtensionsConnectProvider>\n\t\t<ExtensionAccountsProvider ss58={ss58} dappName={dappName}>\n\t\t\t{children}\n\t\t</ExtensionAccountsProvider>\n\t</ExtensionsConnectProvider>\n)\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tgetHardwareAccountsLocal,\n\tHardwareAccountsKey,\n\thardwareAccounts$,\n\tsetHardwareAccounts,\n} from '@w3ux/observables-connect'\nimport type { HardwareAccount, HardwareAccountSource } from '@w3ux/types'\nimport { ellipsisFn } from '@w3ux/utils'\nimport type { ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { HardwareAccountsContextInterface } from './types'\n\nexport const [HardwareAccountsContext, useHardwareAccounts] =\n\tcreateSafeContext<HardwareAccountsContextInterface>()\n\nexport const HardwareAccountsProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store imported hardware accounts\n\tconst [hardwareAccounts, setHardwareAccountsState] = useState<\n\t\tHardwareAccount[]\n\t>(getHardwareAccountsLocal())\n\n\t// Check if an account exists\n\tconst hardwareAccountExists = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\t!!hardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.address === address && a.network === network,\n\t\t)\n\n\t// Adds an account\n\tconst addHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tindex: number,\n\t\tcallback?: () => void,\n\t) => {\n\t\tif (!hardwareAccountExists(source, network, address)) {\n\t\t\tconst newAccount: HardwareAccount = {\n\t\t\t\taddress,\n\t\t\t\tnetwork,\n\t\t\t\tname: ellipsisFn(address),\n\t\t\t\tsource,\n\t\t\t\tindex,\n\t\t\t}\n\t\t\tconst newHardwareAccounts = [...hardwareAccounts].concat(newAccount)\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t\t// Handle optional callback function\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback()\n\t\t\t}\n\t\t\treturn newAccount\n\t\t}\n\t\treturn null\n\t}\n\n\t// Removes an account\n\tconst removeHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tcallback?: () => void,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].filter(\n\t\t\t(a) =>\n\t\t\t\t!(\n\t\t\t\t\ta.source === source &&\n\t\t\t\t\ta.address === address &&\n\t\t\t\t\ta.network === network\n\t\t\t\t),\n\t\t)\n\n\t\tif (!newHardwareAccounts.length) {\n\t\t\tlocalStorage.removeItem(HardwareAccountsKey)\n\t\t} else {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t}\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t// Handle optional callback function\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\t// Renames an imported account\n\tconst renameHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tnewName: string,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].map((a) =>\n\t\t\ta.source === source && a.network === network && a.address === address\n\t\t\t\t? {\n\t\t\t\t\t\t...a,\n\t\t\t\t\t\tname: newName,\n\t\t\t\t\t}\n\t\t\t\t: a,\n\t\t)\n\t\tlocalStorage.setItem(\n\t\t\tHardwareAccountsKey,\n\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t)\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t}\n\n\t// Gets an imported account\n\tconst getHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\thardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.network === network && a.address === address,\n\t\t) || null\n\n\t// Gets all accounts for a network and source\n\tconst getHardwareAccounts = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t) =>\n\t\thardwareAccounts.filter((a) => a.source === source && a.network === network)\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = hardwareAccounts$.subscribe((accounts) => {\n\t\t\tsetHardwareAccountsState(accounts)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<HardwareAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\thardwareAccountExists,\n\t\t\t\tgetHardwareAccount,\n\t\t\t\taddHardwareAccount,\n\t\t\t\tremoveHardwareAccount,\n\t\t\t\trenameHardwareAccount,\n\t\t\t\tgetHardwareAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</HardwareAccountsContext.Provider>\n\t)\n}\n"],"mappings":"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","names":["import_hooks","import_observables_connect","import_extensions","import_react","import_rxjs","import_jsx_runtime","doConnectExtension","import_jsx_runtime","import_hooks","import_observables_connect","import_utils","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/Extensions/Accounts.tsx","../src/Extensions/Connect.tsx","../src/Extensions/Provider.tsx","../src/Hardware/index.tsx"],"sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from './Extensions'\nexport * from './Hardware'\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\textensionAccounts$,\n\tgetReconnectSync,\n\tinitialisedExtensions$,\n\treconnectSync$,\n\tresetAccounts,\n} from '@w3ux/observables-connect'\nimport { unsubAll } from '@w3ux/observables-connect/accounts'\nimport {\n\tconnectExtension as doConnectExtension,\n\treconnectExtensions,\n} from '@w3ux/observables-connect/extensions'\nimport type { Account, ExtensionAccount, Sync } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/util-dedot'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from './Connect'\nimport type {\n\tExtensionAccountsContextInterface,\n\tExtensionsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n\tcreateSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n\tchildren,\n\tss58,\n\tdappName,\n}: ExtensionsProviderProps) => {\n\tconst { gettingExtensions } = useExtensions()\n\n\t// Store connected extension accounts\n\tconst [extensionAccounts, setExtensionAccounts] = useState<Account[]>([])\n\t// Stores initialised extensions\n\tconst [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n\t\t[],\n\t)\n\t// Store whether previously enabled extensions have been re-connected\n\tconst [extensionsSynced, setExtensionsSynced] = useState<Sync>(\n\t\tgetReconnectSync(),\n\t)\n\n\t// Handle initial connection to previously enabled extensions\n\tconst handleInitialConnect = async () => {\n\t\tif (!gettingExtensions && extensionsSynced === 'unsynced') {\n\t\t\t// Defensive: unsubscribe from all accounts and reset state\n\t\t\tunsubAll()\n\t\t\tresetAccounts()\n\t\t\tawait reconnectExtensions(dappName, ss58)\n\t\t}\n\t}\n\n\t// Connects to a single extension and processes its accounts\n\tconst connectExtension = async (id: string): Promise<boolean> =>\n\t\tawait doConnectExtension(dappName, ss58, id)\n\n\t// Get extension accounts, formatted by a provided ss58 prefix\n\tconst getExtensionAccounts = (ss58Prefix: number) =>\n\t\textensionAccounts\n\t\t\t.map((account) => {\n\t\t\t\tconst formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n\t\t\t\tif (!formattedAddress) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...account,\n\t\t\t\t\taddress: formattedAddress,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((account) => account !== null)\n\n\t// Get an imported extension account\n\tconst getExtensionAccount = (\n\t\taddress: string,\n\t\tsource: string,\n\t): ExtensionAccount | undefined => {\n\t\tconst account = extensionAccounts.find(\n\t\t\t(item) =>\n\t\t\t\tformatAccountSs58(item.address, 0) === formatAccountSs58(address, 0) &&\n\t\t\t\titem.source === source,\n\t\t)\n\t\treturn account ? { ...account, address } : undefined\n\t}\n\n\t// Initialise extension accounts sync\n\tuseEffect(() => {\n\t\thandleInitialConnect()\n\t\treturn () => unsubAll()\n\t}, [gettingExtensions])\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = combineLatest([\n\t\t\tinitialisedExtensions$,\n\t\t\textensionAccounts$,\n\t\t\treconnectSync$,\n\t\t]).subscribe(([initialised, accounts, sync]) => {\n\t\t\tsetExtensionsInitialised(initialised)\n\t\t\tsetExtensionAccounts(accounts)\n\t\t\tsetExtensionsSynced(sync)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsInitialised,\n\t\t\t\tconnectExtension,\n\t\t\t\textensionsSynced,\n\t\t\t\tgetExtensionAccount,\n\t\t\t\tgetExtensionAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionAccountsContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tcanConnect,\n\textensionsStatus$,\n\tgetStatus,\n\tgettingExtensions$,\n\tremoveStatus,\n\tsetStatus,\n} from '@w3ux/observables-connect'\nimport {\n\tgetExtensions,\n\tinjectMimir,\n} from '@w3ux/observables-connect/extensions'\nimport type { ExtensionStatus, ExtensionsStatus } from '@w3ux/types'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport type { ExtensionsConnectContextInterface } from './types'\n\nexport const [ExtensionsConnectContext, useExtensions] =\n\tcreateSafeContext<ExtensionsConnectContextInterface>()\n\nexport const ExtensionsConnectProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store whether extensions are being fetched\n\tconst [gettingExtensions, setGettingExtensions] = useState<boolean>(true)\n\n\t// Store discovered extensions along with their status\n\tconst [extensionsStatus, setExtensionsStatus] = useState<ExtensionsStatus>({})\n\n\t// Setter for an extension status\n\tconst setExtensionStatus = (id: string, status: ExtensionStatus) => {\n\t\tsetStatus(id, status)\n\t}\n\n\t// Removes an extension status\n\tconst removeExtensionStatus = (id: string) => {\n\t\tremoveStatus(id)\n\t}\n\n\t// Checks if an extension has been installed\n\tconst extensionInstalled = (id: string): boolean =>\n\t\tgetStatus(id) !== undefined\n\n\t// Checks whether an extension can be connected to\n\tconst extensionCanConnect = (id: string): boolean => canConnect(id)\n\n\t// Init extensions discovery\n\tconst discoverExtensions = async () => {\n\t\t// Handle Mimir iframe injection\n\t\tawait injectMimir()\n\t\t// Fetch extensions from `injectedWeb3`\n\t\tgetExtensions()\n\t}\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tdiscoverExtensions()\n\t\tconst sub = combineLatest([\n\t\t\tgettingExtensions$,\n\t\t\textensionsStatus$,\n\t\t]).subscribe(([getting, status]) => {\n\t\t\tsetGettingExtensions(getting)\n\t\t\tsetExtensionsStatus(status)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionsConnectContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsStatus,\n\t\t\t\tgettingExtensions,\n\t\t\t\tsetExtensionStatus,\n\t\t\t\tremoveExtensionStatus,\n\t\t\t\textensionInstalled,\n\t\t\t\textensionCanConnect,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionsConnectContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ExtensionAccountsProvider } from './Accounts'\nimport { ExtensionsConnectProvider } from './Connect'\nimport type { ExtensionsProviderProps } from './types'\n\nexport const ExtensionsProvider = ({\n\tss58,\n\tdappName,\n\tchildren,\n}: ExtensionsProviderProps) => (\n\t<ExtensionsConnectProvider>\n\t\t<ExtensionAccountsProvider ss58={ss58} dappName={dappName}>\n\t\t\t{children}\n\t\t</ExtensionAccountsProvider>\n\t</ExtensionsConnectProvider>\n)\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tgetHardwareAccountsLocal,\n\tHardwareAccountsKey,\n\thardwareAccounts$,\n\tsetHardwareAccounts,\n} from '@w3ux/observables-connect'\nimport type { HardwareAccount, HardwareAccountSource } from '@w3ux/types'\nimport { ellipsisFn } from '@w3ux/utils'\nimport type { ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { HardwareAccountsContextInterface } from './types'\n\nexport const [HardwareAccountsContext, useHardwareAccounts] =\n\tcreateSafeContext<HardwareAccountsContextInterface>()\n\nexport const HardwareAccountsProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store imported hardware accounts\n\tconst [hardwareAccounts, setHardwareAccountsState] = useState<\n\t\tHardwareAccount[]\n\t>(getHardwareAccountsLocal())\n\n\t// Check if an account exists\n\tconst hardwareAccountExists = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\t!!hardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.address === address && a.network === network,\n\t\t)\n\n\t// Adds an account\n\tconst addHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tindex: number,\n\t\tcallback?: () => void,\n\t) => {\n\t\tif (!hardwareAccountExists(source, network, address)) {\n\t\t\tconst newAccount: HardwareAccount = {\n\t\t\t\taddress,\n\t\t\t\tnetwork,\n\t\t\t\tname: ellipsisFn(address),\n\t\t\t\tsource,\n\t\t\t\tindex,\n\t\t\t}\n\t\t\tconst newHardwareAccounts = [...hardwareAccounts].concat(newAccount)\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t\t// Handle optional callback function\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback()\n\t\t\t}\n\t\t\treturn newAccount\n\t\t}\n\t\treturn null\n\t}\n\n\t// Removes an account\n\tconst removeHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tcallback?: () => void,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].filter(\n\t\t\t(a) =>\n\t\t\t\t!(\n\t\t\t\t\ta.source === source &&\n\t\t\t\t\ta.address === address &&\n\t\t\t\t\ta.network === network\n\t\t\t\t),\n\t\t)\n\n\t\tif (!newHardwareAccounts.length) {\n\t\t\tlocalStorage.removeItem(HardwareAccountsKey)\n\t\t} else {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t}\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t// Handle optional callback function\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\t// Renames an imported account\n\tconst renameHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tnewName: string,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].map((a) =>\n\t\t\ta.source === source && a.network === network && a.address === address\n\t\t\t\t? {\n\t\t\t\t\t\t...a,\n\t\t\t\t\t\tname: newName,\n\t\t\t\t\t}\n\t\t\t\t: a,\n\t\t)\n\t\tlocalStorage.setItem(\n\t\t\tHardwareAccountsKey,\n\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t)\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t}\n\n\t// Gets an imported account\n\tconst getHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\thardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.network === network && a.address === address,\n\t\t) || null\n\n\t// Gets all accounts for a network and source\n\tconst getHardwareAccounts = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t) =>\n\t\thardwareAccounts.filter((a) => a.source === source && a.network === network)\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = hardwareAccounts$.subscribe((accounts) => {\n\t\t\tsetHardwareAccountsState(accounts)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<HardwareAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\thardwareAccountExists,\n\t\t\t\tgetHardwareAccount,\n\t\t\t\taddHardwareAccount,\n\t\t\t\tremoveHardwareAccount,\n\t\t\t\trenameHardwareAccount,\n\t\t\t\tgetHardwareAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</HardwareAccountsContext.Provider>\n\t)\n}\n"],"mappings":"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","names":["import_hooks","import_observables_connect","import_extensions","import_react","import_rxjs","import_jsx_runtime","doConnectExtension","import_jsx_runtime","import_hooks","import_observables_connect","import_react","import_jsx_runtime"]}
|
package/index.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
connectExtension as doConnectExtension,
|
|
13
13
|
reconnectExtensions
|
|
14
14
|
} from "@w3ux/observables-connect/extensions";
|
|
15
|
-
import { formatAccountSs58 } from "@w3ux/
|
|
15
|
+
import { formatAccountSs58 } from "@w3ux/util-dedot";
|
|
16
16
|
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
17
17
|
import { combineLatest as combineLatest2 } from "rxjs";
|
|
18
18
|
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Extensions/Accounts.tsx","../src/Extensions/Connect.tsx","../src/Extensions/Provider.tsx","../src/Hardware/index.tsx"],"sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\textensionAccounts$,\n\tgetReconnectSync,\n\tinitialisedExtensions$,\n\treconnectSync$,\n\tresetAccounts,\n} from '@w3ux/observables-connect'\nimport { unsubAll } from '@w3ux/observables-connect/accounts'\nimport {\n\tconnectExtension as doConnectExtension,\n\treconnectExtensions,\n} from '@w3ux/observables-connect/extensions'\nimport type { Account, ExtensionAccount, Sync } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/utils'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from './Connect'\nimport type {\n\tExtensionAccountsContextInterface,\n\tExtensionsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n\tcreateSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n\tchildren,\n\tss58,\n\tdappName,\n}: ExtensionsProviderProps) => {\n\tconst { gettingExtensions } = useExtensions()\n\n\t// Store connected extension accounts\n\tconst [extensionAccounts, setExtensionAccounts] = useState<Account[]>([])\n\t// Stores initialised extensions\n\tconst [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n\t\t[],\n\t)\n\t// Store whether previously enabled extensions have been re-connected\n\tconst [extensionsSynced, setExtensionsSynced] = useState<Sync>(\n\t\tgetReconnectSync(),\n\t)\n\n\t// Handle initial connection to previously enabled extensions\n\tconst handleInitialConnect = async () => {\n\t\tif (!gettingExtensions && extensionsSynced === 'unsynced') {\n\t\t\t// Defensive: unsubscribe from all accounts and reset state\n\t\t\tunsubAll()\n\t\t\tresetAccounts()\n\t\t\tawait reconnectExtensions(dappName, ss58)\n\t\t}\n\t}\n\n\t// Connects to a single extension and processes its accounts\n\tconst connectExtension = async (id: string): Promise<boolean> =>\n\t\tawait doConnectExtension(dappName, ss58, id)\n\n\t// Get extension accounts, formatted by a provided ss58 prefix\n\tconst getExtensionAccounts = (ss58Prefix: number) =>\n\t\textensionAccounts\n\t\t\t.map((account) => {\n\t\t\t\tconst formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n\t\t\t\tif (!formattedAddress) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...account,\n\t\t\t\t\taddress: formattedAddress,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((account) => account !== null)\n\n\t// Get an imported extension account\n\tconst getExtensionAccount = (\n\t\taddress: string,\n\t\tsource: string,\n\t): ExtensionAccount | undefined => {\n\t\tconst account = extensionAccounts.find(\n\t\t\t(item) =>\n\t\t\t\tformatAccountSs58(item.address, 0) === formatAccountSs58(address, 0) &&\n\t\t\t\titem.source === source,\n\t\t)\n\t\treturn account ? { ...account, address } : undefined\n\t}\n\n\t// Initialise extension accounts sync\n\tuseEffect(() => {\n\t\thandleInitialConnect()\n\t\treturn () => unsubAll()\n\t}, [gettingExtensions])\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = combineLatest([\n\t\t\tinitialisedExtensions$,\n\t\t\textensionAccounts$,\n\t\t\treconnectSync$,\n\t\t]).subscribe(([initialised, accounts, sync]) => {\n\t\t\tsetExtensionsInitialised(initialised)\n\t\t\tsetExtensionAccounts(accounts)\n\t\t\tsetExtensionsSynced(sync)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsInitialised,\n\t\t\t\tconnectExtension,\n\t\t\t\textensionsSynced,\n\t\t\t\tgetExtensionAccount,\n\t\t\t\tgetExtensionAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionAccountsContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tcanConnect,\n\textensionsStatus$,\n\tgetStatus,\n\tgettingExtensions$,\n\tremoveStatus,\n\tsetStatus,\n} from '@w3ux/observables-connect'\nimport {\n\tgetExtensions,\n\tinjectMimir,\n} from '@w3ux/observables-connect/extensions'\nimport type { ExtensionStatus, ExtensionsStatus } from '@w3ux/types'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport type { ExtensionsConnectContextInterface } from './types'\n\nexport const [ExtensionsConnectContext, useExtensions] =\n\tcreateSafeContext<ExtensionsConnectContextInterface>()\n\nexport const ExtensionsConnectProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store whether extensions are being fetched\n\tconst [gettingExtensions, setGettingExtensions] = useState<boolean>(true)\n\n\t// Store discovered extensions along with their status\n\tconst [extensionsStatus, setExtensionsStatus] = useState<ExtensionsStatus>({})\n\n\t// Setter for an extension status\n\tconst setExtensionStatus = (id: string, status: ExtensionStatus) => {\n\t\tsetStatus(id, status)\n\t}\n\n\t// Removes an extension status\n\tconst removeExtensionStatus = (id: string) => {\n\t\tremoveStatus(id)\n\t}\n\n\t// Checks if an extension has been installed\n\tconst extensionInstalled = (id: string): boolean =>\n\t\tgetStatus(id) !== undefined\n\n\t// Checks whether an extension can be connected to\n\tconst extensionCanConnect = (id: string): boolean => canConnect(id)\n\n\t// Init extensions discovery\n\tconst discoverExtensions = async () => {\n\t\t// Handle Mimir iframe injection\n\t\tawait injectMimir()\n\t\t// Fetch extensions from `injectedWeb3`\n\t\tgetExtensions()\n\t}\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tdiscoverExtensions()\n\t\tconst sub = combineLatest([\n\t\t\tgettingExtensions$,\n\t\t\textensionsStatus$,\n\t\t]).subscribe(([getting, status]) => {\n\t\t\tsetGettingExtensions(getting)\n\t\t\tsetExtensionsStatus(status)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionsConnectContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsStatus,\n\t\t\t\tgettingExtensions,\n\t\t\t\tsetExtensionStatus,\n\t\t\t\tremoveExtensionStatus,\n\t\t\t\textensionInstalled,\n\t\t\t\textensionCanConnect,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionsConnectContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ExtensionAccountsProvider } from './Accounts'\nimport { ExtensionsConnectProvider } from './Connect'\nimport type { ExtensionsProviderProps } from './types'\n\nexport const ExtensionsProvider = ({\n\tss58,\n\tdappName,\n\tchildren,\n}: ExtensionsProviderProps) => (\n\t<ExtensionsConnectProvider>\n\t\t<ExtensionAccountsProvider ss58={ss58} dappName={dappName}>\n\t\t\t{children}\n\t\t</ExtensionAccountsProvider>\n\t</ExtensionsConnectProvider>\n)\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tgetHardwareAccountsLocal,\n\tHardwareAccountsKey,\n\thardwareAccounts$,\n\tsetHardwareAccounts,\n} from '@w3ux/observables-connect'\nimport type { HardwareAccount, HardwareAccountSource } from '@w3ux/types'\nimport { ellipsisFn } from '@w3ux/utils'\nimport type { ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { HardwareAccountsContextInterface } from './types'\n\nexport const [HardwareAccountsContext, useHardwareAccounts] =\n\tcreateSafeContext<HardwareAccountsContextInterface>()\n\nexport const HardwareAccountsProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store imported hardware accounts\n\tconst [hardwareAccounts, setHardwareAccountsState] = useState<\n\t\tHardwareAccount[]\n\t>(getHardwareAccountsLocal())\n\n\t// Check if an account exists\n\tconst hardwareAccountExists = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\t!!hardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.address === address && a.network === network,\n\t\t)\n\n\t// Adds an account\n\tconst addHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tindex: number,\n\t\tcallback?: () => void,\n\t) => {\n\t\tif (!hardwareAccountExists(source, network, address)) {\n\t\t\tconst newAccount: HardwareAccount = {\n\t\t\t\taddress,\n\t\t\t\tnetwork,\n\t\t\t\tname: ellipsisFn(address),\n\t\t\t\tsource,\n\t\t\t\tindex,\n\t\t\t}\n\t\t\tconst newHardwareAccounts = [...hardwareAccounts].concat(newAccount)\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t\t// Handle optional callback function\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback()\n\t\t\t}\n\t\t\treturn newAccount\n\t\t}\n\t\treturn null\n\t}\n\n\t// Removes an account\n\tconst removeHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tcallback?: () => void,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].filter(\n\t\t\t(a) =>\n\t\t\t\t!(\n\t\t\t\t\ta.source === source &&\n\t\t\t\t\ta.address === address &&\n\t\t\t\t\ta.network === network\n\t\t\t\t),\n\t\t)\n\n\t\tif (!newHardwareAccounts.length) {\n\t\t\tlocalStorage.removeItem(HardwareAccountsKey)\n\t\t} else {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t}\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t// Handle optional callback function\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\t// Renames an imported account\n\tconst renameHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tnewName: string,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].map((a) =>\n\t\t\ta.source === source && a.network === network && a.address === address\n\t\t\t\t? {\n\t\t\t\t\t\t...a,\n\t\t\t\t\t\tname: newName,\n\t\t\t\t\t}\n\t\t\t\t: a,\n\t\t)\n\t\tlocalStorage.setItem(\n\t\t\tHardwareAccountsKey,\n\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t)\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t}\n\n\t// Gets an imported account\n\tconst getHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\thardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.network === network && a.address === address,\n\t\t) || null\n\n\t// Gets all accounts for a network and source\n\tconst getHardwareAccounts = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t) =>\n\t\thardwareAccounts.filter((a) => a.source === source && a.network === network)\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = hardwareAccounts$.subscribe((accounts) => {\n\t\t\tsetHardwareAccountsState(accounts)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<HardwareAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\thardwareAccountExists,\n\t\t\t\tgetHardwareAccount,\n\t\t\t\taddHardwareAccount,\n\t\t\t\tremoveHardwareAccount,\n\t\t\t\trenameHardwareAccount,\n\t\t\t\tgetHardwareAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</HardwareAccountsContext.Provider>\n\t)\n}\n"],"mappings":";AAGA,SAAS,qBAAAA,0BAAyB;AAClC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,gBAAgB;AACzB;AAAA,EACC,oBAAoB;AAAA,EACpB;AAAA,OACM;AAEP,SAAS,yBAAyB;AAClC,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AACpC,SAAS,iBAAAC,sBAAqB;;;AChB9B,SAAS,yBAAyB;AAClC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP;AAAA,EACC;AAAA,EACA;AAAA,OACM;AAEP,SAAyB,WAAW,gBAAgB;AACpD,SAAS,qBAAqB;AA0D5B;AAvDK,IAAM,CAAC,0BAA0B,aAAa,IACpD,kBAAqD;AAE/C,IAAM,4BAA4B,CAAC;AAAA,EACzC;AACD,MAEM;AAEL,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAkB,IAAI;AAGxE,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAA2B,CAAC,CAAC;AAG7E,QAAM,qBAAqB,CAAC,IAAY,WAA4B;AACnE,cAAU,IAAI,MAAM;AAAA,EACrB;AAGA,QAAM,wBAAwB,CAAC,OAAe;AAC7C,iBAAa,EAAE;AAAA,EAChB;AAGA,QAAM,qBAAqB,CAAC,OAC3B,UAAU,EAAE,MAAM;AAGnB,QAAM,sBAAsB,CAAC,OAAwB,WAAW,EAAE;AAGlE,QAAM,qBAAqB,YAAY;AAEtC,UAAM,YAAY;AAElB,kBAAc;AAAA,EACf;AAGA,YAAU,MAAM;AACf,uBAAmB;AACnB,UAAM,MAAM,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,IACD,CAAC,EAAE,UAAU,CAAC,CAAC,SAAS,MAAM,MAAM;AACnC,2BAAqB,OAAO;AAC5B,0BAAoB,MAAM;AAAA,IAC3B,CAAC;AACD,WAAO,MAAM;AACZ,UAAI,YAAY;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SACC;AAAA,IAAC,yBAAyB;AAAA,IAAzB;AAAA,MACA,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;;;ADuBE,gBAAAC,YAAA;AAtFK,IAAM,CAAC,0BAA0B,oBAAoB,IAC3DC,mBAAqD;AAE/C,IAAM,4BAA4B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACD,MAA+B;AAC9B,QAAM,EAAE,kBAAkB,IAAI,cAAc;AAG5C,QAAM,CAAC,mBAAmB,oBAAoB,IAAIC,UAAoB,CAAC,CAAC;AAExE,QAAM,CAAC,uBAAuB,wBAAwB,IAAIA;AAAA,IACzD,CAAC;AAAA,EACF;AAEA,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA;AAAA,IAC/C,iBAAiB;AAAA,EAClB;AAGA,QAAM,uBAAuB,YAAY;AACxC,QAAI,CAAC,qBAAqB,qBAAqB,YAAY;AAE1D,eAAS;AACT,oBAAc;AACd,YAAM,oBAAoB,UAAU,IAAI;AAAA,IACzC;AAAA,EACD;AAGA,QAAM,mBAAmB,OAAO,OAC/B,MAAM,mBAAmB,UAAU,MAAM,EAAE;AAG5C,QAAM,uBAAuB,CAAC,eAC7B,kBACE,IAAI,CAAC,YAAY;AACjB,UAAM,mBAAmB,kBAAkB,QAAQ,SAAS,UAAU;AACtE,QAAI,CAAC,kBAAkB;AACtB,aAAO;AAAA,IACR;AACA,WAAO;AAAA,MACN,GAAG;AAAA,MACH,SAAS;AAAA,IACV;AAAA,EACD,CAAC,EACA,OAAO,CAAC,YAAY,YAAY,IAAI;AAGvC,QAAM,sBAAsB,CAC3B,SACA,WACkC;AAClC,UAAM,UAAU,kBAAkB;AAAA,MACjC,CAAC,SACA,kBAAkB,KAAK,SAAS,CAAC,MAAM,kBAAkB,SAAS,CAAC,KACnE,KAAK,WAAW;AAAA,IAClB;AACA,WAAO,UAAU,EAAE,GAAG,SAAS,QAAQ,IAAI;AAAA,EAC5C;AAGA,EAAAC,WAAU,MAAM;AACf,yBAAqB;AACrB,WAAO,MAAM,SAAS;AAAA,EACvB,GAAG,CAAC,iBAAiB,CAAC;AAGtB,EAAAA,WAAU,MAAM;AACf,UAAM,MAAMC,eAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC,EAAE,UAAU,CAAC,CAAC,aAAa,UAAU,IAAI,MAAM;AAC/C,+BAAyB,WAAW;AACpC,2BAAqB,QAAQ;AAC7B,0BAAoB,IAAI;AAAA,IACzB,CAAC;AACD,WAAO,MAAM;AACZ,UAAI,YAAY;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SACC,gBAAAJ;AAAA,IAAC,yBAAyB;AAAA,IAAzB;AAAA,MACA,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;;;AE/GE,gBAAAK,YAAA;AANK,IAAM,qBAAqB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACD,MACC,gBAAAA,KAAC,6BACA,0BAAAA,KAAC,6BAA0B,MAAY,UACrC,UACF,GACD;;;ACbD,SAAS,qBAAAC,0BAAyB;AAClC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEP,SAAS,kBAAkB;AAE3B,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AA4IlC,gBAAAC,YAAA;AAzIK,IAAM,CAAC,yBAAyB,mBAAmB,IACzDH,mBAAoD;AAE9C,IAAM,2BAA2B,CAAC;AAAA,EACxC;AACD,MAEM;AAEL,QAAM,CAAC,kBAAkB,wBAAwB,IAAIE,UAEnD,yBAAyB,CAAC;AAG5B,QAAM,wBAAwB,CAC7B,QACA,SACA,YAEA,CAAC,CAAC,iBAAiB;AAAA,IAClB,CAAC,MACA,EAAE,WAAW,UAAU,EAAE,YAAY,WAAW,EAAE,YAAY;AAAA,EAChE;AAGD,QAAM,qBAAqB,CAC1B,QACA,SACA,SACA,OACA,aACI;AACJ,QAAI,CAAC,sBAAsB,QAAQ,SAAS,OAAO,GAAG;AACrD,YAAM,aAA8B;AAAA,QACnC;AAAA,QACA;AAAA,QACA,MAAM,WAAW,OAAO;AAAA,QACxB;AAAA,QACA;AAAA,MACD;AACA,YAAM,sBAAsB,CAAC,GAAG,gBAAgB,EAAE,OAAO,UAAU;AACnE,mBAAa;AAAA,QACZ;AAAA,QACA,KAAK,UAAU,mBAAmB;AAAA,MACnC;AACA,0BAAoB,mBAAmB;AAEvC,UAAI,OAAO,aAAa,YAAY;AACnC,iBAAS;AAAA,MACV;AACA,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AAGA,QAAM,wBAAwB,CAC7B,QACA,SACA,SACA,aACI;AACJ,UAAM,sBAAsB,CAAC,GAAG,gBAAgB,EAAE;AAAA,MACjD,CAAC,MACA,EACC,EAAE,WAAW,UACb,EAAE,YAAY,WACd,EAAE,YAAY;AAAA,IAEjB;AAEA,QAAI,CAAC,oBAAoB,QAAQ;AAChC,mBAAa,WAAW,mBAAmB;AAAA,IAC5C,OAAO;AACN,mBAAa;AAAA,QACZ;AAAA,QACA,KAAK,UAAU,mBAAmB;AAAA,MACnC;AAAA,IACD;AACA,wBAAoB,mBAAmB;AAEvC,QAAI,OAAO,aAAa,YAAY;AACnC,eAAS;AAAA,IACV;AAAA,EACD;AAGA,QAAM,wBAAwB,CAC7B,QACA,SACA,SACA,YACI;AACJ,UAAM,sBAAsB,CAAC,GAAG,gBAAgB,EAAE;AAAA,MAAI,CAAC,MACtD,EAAE,WAAW,UAAU,EAAE,YAAY,WAAW,EAAE,YAAY,UAC3D;AAAA,QACA,GAAG;AAAA,QACH,MAAM;AAAA,MACP,IACC;AAAA,IACJ;AACA,iBAAa;AAAA,MACZ;AAAA,MACA,KAAK,UAAU,mBAAmB;AAAA,IACnC;AACA,wBAAoB,mBAAmB;AAAA,EACxC;AAGA,QAAM,qBAAqB,CAC1B,QACA,SACA,YAEA,iBAAiB;AAAA,IAChB,CAAC,MACA,EAAE,WAAW,UAAU,EAAE,YAAY,WAAW,EAAE,YAAY;AAAA,EAChE,KAAK;AAGN,QAAM,sBAAsB,CAC3B,QACA,YAEA,iBAAiB,OAAO,CAAC,MAAM,EAAE,WAAW,UAAU,EAAE,YAAY,OAAO;AAG5E,EAAAD,WAAU,MAAM;AACf,UAAM,MAAM,kBAAkB,UAAU,CAAC,aAAa;AACrD,+BAAyB,QAAQ;AAAA,IAClC,CAAC;AACD,WAAO,MAAM;AACZ,UAAI,YAAY;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SACC,gBAAAE;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACA,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;","names":["createSafeContext","useEffect","useState","combineLatest","jsx","createSafeContext","useState","useEffect","combineLatest","jsx","createSafeContext","useEffect","useState","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/Accounts.tsx","../src/Extensions/Connect.tsx","../src/Extensions/Provider.tsx","../src/Hardware/index.tsx"],"sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\textensionAccounts$,\n\tgetReconnectSync,\n\tinitialisedExtensions$,\n\treconnectSync$,\n\tresetAccounts,\n} from '@w3ux/observables-connect'\nimport { unsubAll } from '@w3ux/observables-connect/accounts'\nimport {\n\tconnectExtension as doConnectExtension,\n\treconnectExtensions,\n} from '@w3ux/observables-connect/extensions'\nimport type { Account, ExtensionAccount, Sync } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/util-dedot'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from './Connect'\nimport type {\n\tExtensionAccountsContextInterface,\n\tExtensionsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n\tcreateSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n\tchildren,\n\tss58,\n\tdappName,\n}: ExtensionsProviderProps) => {\n\tconst { gettingExtensions } = useExtensions()\n\n\t// Store connected extension accounts\n\tconst [extensionAccounts, setExtensionAccounts] = useState<Account[]>([])\n\t// Stores initialised extensions\n\tconst [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n\t\t[],\n\t)\n\t// Store whether previously enabled extensions have been re-connected\n\tconst [extensionsSynced, setExtensionsSynced] = useState<Sync>(\n\t\tgetReconnectSync(),\n\t)\n\n\t// Handle initial connection to previously enabled extensions\n\tconst handleInitialConnect = async () => {\n\t\tif (!gettingExtensions && extensionsSynced === 'unsynced') {\n\t\t\t// Defensive: unsubscribe from all accounts and reset state\n\t\t\tunsubAll()\n\t\t\tresetAccounts()\n\t\t\tawait reconnectExtensions(dappName, ss58)\n\t\t}\n\t}\n\n\t// Connects to a single extension and processes its accounts\n\tconst connectExtension = async (id: string): Promise<boolean> =>\n\t\tawait doConnectExtension(dappName, ss58, id)\n\n\t// Get extension accounts, formatted by a provided ss58 prefix\n\tconst getExtensionAccounts = (ss58Prefix: number) =>\n\t\textensionAccounts\n\t\t\t.map((account) => {\n\t\t\t\tconst formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n\t\t\t\tif (!formattedAddress) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...account,\n\t\t\t\t\taddress: formattedAddress,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((account) => account !== null)\n\n\t// Get an imported extension account\n\tconst getExtensionAccount = (\n\t\taddress: string,\n\t\tsource: string,\n\t): ExtensionAccount | undefined => {\n\t\tconst account = extensionAccounts.find(\n\t\t\t(item) =>\n\t\t\t\tformatAccountSs58(item.address, 0) === formatAccountSs58(address, 0) &&\n\t\t\t\titem.source === source,\n\t\t)\n\t\treturn account ? { ...account, address } : undefined\n\t}\n\n\t// Initialise extension accounts sync\n\tuseEffect(() => {\n\t\thandleInitialConnect()\n\t\treturn () => unsubAll()\n\t}, [gettingExtensions])\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = combineLatest([\n\t\t\tinitialisedExtensions$,\n\t\t\textensionAccounts$,\n\t\t\treconnectSync$,\n\t\t]).subscribe(([initialised, accounts, sync]) => {\n\t\t\tsetExtensionsInitialised(initialised)\n\t\t\tsetExtensionAccounts(accounts)\n\t\t\tsetExtensionsSynced(sync)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsInitialised,\n\t\t\t\tconnectExtension,\n\t\t\t\textensionsSynced,\n\t\t\t\tgetExtensionAccount,\n\t\t\t\tgetExtensionAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionAccountsContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tcanConnect,\n\textensionsStatus$,\n\tgetStatus,\n\tgettingExtensions$,\n\tremoveStatus,\n\tsetStatus,\n} from '@w3ux/observables-connect'\nimport {\n\tgetExtensions,\n\tinjectMimir,\n} from '@w3ux/observables-connect/extensions'\nimport type { ExtensionStatus, ExtensionsStatus } from '@w3ux/types'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport type { ExtensionsConnectContextInterface } from './types'\n\nexport const [ExtensionsConnectContext, useExtensions] =\n\tcreateSafeContext<ExtensionsConnectContextInterface>()\n\nexport const ExtensionsConnectProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store whether extensions are being fetched\n\tconst [gettingExtensions, setGettingExtensions] = useState<boolean>(true)\n\n\t// Store discovered extensions along with their status\n\tconst [extensionsStatus, setExtensionsStatus] = useState<ExtensionsStatus>({})\n\n\t// Setter for an extension status\n\tconst setExtensionStatus = (id: string, status: ExtensionStatus) => {\n\t\tsetStatus(id, status)\n\t}\n\n\t// Removes an extension status\n\tconst removeExtensionStatus = (id: string) => {\n\t\tremoveStatus(id)\n\t}\n\n\t// Checks if an extension has been installed\n\tconst extensionInstalled = (id: string): boolean =>\n\t\tgetStatus(id) !== undefined\n\n\t// Checks whether an extension can be connected to\n\tconst extensionCanConnect = (id: string): boolean => canConnect(id)\n\n\t// Init extensions discovery\n\tconst discoverExtensions = async () => {\n\t\t// Handle Mimir iframe injection\n\t\tawait injectMimir()\n\t\t// Fetch extensions from `injectedWeb3`\n\t\tgetExtensions()\n\t}\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tdiscoverExtensions()\n\t\tconst sub = combineLatest([\n\t\t\tgettingExtensions$,\n\t\t\textensionsStatus$,\n\t\t]).subscribe(([getting, status]) => {\n\t\t\tsetGettingExtensions(getting)\n\t\t\tsetExtensionsStatus(status)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<ExtensionsConnectContext.Provider\n\t\t\tvalue={{\n\t\t\t\textensionsStatus,\n\t\t\t\tgettingExtensions,\n\t\t\t\tsetExtensionStatus,\n\t\t\t\tremoveExtensionStatus,\n\t\t\t\textensionInstalled,\n\t\t\t\textensionCanConnect,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ExtensionsConnectContext.Provider>\n\t)\n}\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ExtensionAccountsProvider } from './Accounts'\nimport { ExtensionsConnectProvider } from './Connect'\nimport type { ExtensionsProviderProps } from './types'\n\nexport const ExtensionsProvider = ({\n\tss58,\n\tdappName,\n\tchildren,\n}: ExtensionsProviderProps) => (\n\t<ExtensionsConnectProvider>\n\t\t<ExtensionAccountsProvider ss58={ss58} dappName={dappName}>\n\t\t\t{children}\n\t\t</ExtensionAccountsProvider>\n\t</ExtensionsConnectProvider>\n)\n","/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n\tgetHardwareAccountsLocal,\n\tHardwareAccountsKey,\n\thardwareAccounts$,\n\tsetHardwareAccounts,\n} from '@w3ux/observables-connect'\nimport type { HardwareAccount, HardwareAccountSource } from '@w3ux/types'\nimport { ellipsisFn } from '@w3ux/utils'\nimport type { ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { HardwareAccountsContextInterface } from './types'\n\nexport const [HardwareAccountsContext, useHardwareAccounts] =\n\tcreateSafeContext<HardwareAccountsContextInterface>()\n\nexport const HardwareAccountsProvider = ({\n\tchildren,\n}: {\n\tchildren: ReactNode\n}) => {\n\t// Store imported hardware accounts\n\tconst [hardwareAccounts, setHardwareAccountsState] = useState<\n\t\tHardwareAccount[]\n\t>(getHardwareAccountsLocal())\n\n\t// Check if an account exists\n\tconst hardwareAccountExists = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\t!!hardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.address === address && a.network === network,\n\t\t)\n\n\t// Adds an account\n\tconst addHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tindex: number,\n\t\tcallback?: () => void,\n\t) => {\n\t\tif (!hardwareAccountExists(source, network, address)) {\n\t\t\tconst newAccount: HardwareAccount = {\n\t\t\t\taddress,\n\t\t\t\tnetwork,\n\t\t\t\tname: ellipsisFn(address),\n\t\t\t\tsource,\n\t\t\t\tindex,\n\t\t\t}\n\t\t\tconst newHardwareAccounts = [...hardwareAccounts].concat(newAccount)\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t\t// Handle optional callback function\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback()\n\t\t\t}\n\t\t\treturn newAccount\n\t\t}\n\t\treturn null\n\t}\n\n\t// Removes an account\n\tconst removeHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tcallback?: () => void,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].filter(\n\t\t\t(a) =>\n\t\t\t\t!(\n\t\t\t\t\ta.source === source &&\n\t\t\t\t\ta.address === address &&\n\t\t\t\t\ta.network === network\n\t\t\t\t),\n\t\t)\n\n\t\tif (!newHardwareAccounts.length) {\n\t\t\tlocalStorage.removeItem(HardwareAccountsKey)\n\t\t} else {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tHardwareAccountsKey,\n\t\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t\t)\n\t\t}\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t\t// Handle optional callback function\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\t// Renames an imported account\n\tconst renameHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t\tnewName: string,\n\t) => {\n\t\tconst newHardwareAccounts = [...hardwareAccounts].map((a) =>\n\t\t\ta.source === source && a.network === network && a.address === address\n\t\t\t\t? {\n\t\t\t\t\t\t...a,\n\t\t\t\t\t\tname: newName,\n\t\t\t\t\t}\n\t\t\t\t: a,\n\t\t)\n\t\tlocalStorage.setItem(\n\t\t\tHardwareAccountsKey,\n\t\t\tJSON.stringify(newHardwareAccounts),\n\t\t)\n\t\tsetHardwareAccounts(newHardwareAccounts)\n\t}\n\n\t// Gets an imported account\n\tconst getHardwareAccount = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t\taddress: string,\n\t) =>\n\t\thardwareAccounts.find(\n\t\t\t(a) =>\n\t\t\t\ta.source === source && a.network === network && a.address === address,\n\t\t) || null\n\n\t// Gets all accounts for a network and source\n\tconst getHardwareAccounts = (\n\t\tsource: HardwareAccountSource,\n\t\tnetwork: string,\n\t) =>\n\t\thardwareAccounts.filter((a) => a.source === source && a.network === network)\n\n\t// Subscribes to observables and updates state\n\tuseEffect(() => {\n\t\tconst sub = hardwareAccounts$.subscribe((accounts) => {\n\t\t\tsetHardwareAccountsState(accounts)\n\t\t})\n\t\treturn () => {\n\t\t\tsub.unsubscribe()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<HardwareAccountsContext.Provider\n\t\t\tvalue={{\n\t\t\t\thardwareAccountExists,\n\t\t\t\tgetHardwareAccount,\n\t\t\t\taddHardwareAccount,\n\t\t\t\tremoveHardwareAccount,\n\t\t\t\trenameHardwareAccount,\n\t\t\t\tgetHardwareAccounts,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</HardwareAccountsContext.Provider>\n\t)\n}\n"],"mappings":"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","names":["createSafeContext","useEffect","useState","combineLatest","jsx","createSafeContext","useState","useEffect","combineLatest","jsx","createSafeContext","useEffect","useState","jsx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w3ux/react-connect-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"license": "GPL-3.0-only",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Providers and hooks for connecting to web3 wallets and interacting with accounts",
|
|
@@ -30,11 +30,13 @@
|
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@w3ux/hooks": "^2.4.
|
|
34
|
-
"@w3ux/observables-connect": "^1.0.
|
|
35
|
-
"@w3ux/
|
|
33
|
+
"@w3ux/hooks": "^2.4.2",
|
|
34
|
+
"@w3ux/observables-connect": "^1.0.3",
|
|
35
|
+
"@w3ux/util-dedot": "^1.0.0",
|
|
36
|
+
"@w3ux/utils": "^3.1.0"
|
|
36
37
|
},
|
|
37
38
|
"peerDependencies": {
|
|
39
|
+
"dedot": "^1",
|
|
38
40
|
"react": "^19.1.0",
|
|
39
41
|
"react-dom": "^19.1.0",
|
|
40
42
|
"rxjs": "^7.8.2"
|