@w3ux/react-connect-kit 3.2.16 → 3.2.17

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.
@@ -1,9 +1,6 @@
1
1
  export const defaultProcessExtensionResult = {
2
2
  newAccounts: [],
3
- meta: {
4
- accountsToRemove: [],
5
- removedActiveAccount: null,
6
- },
3
+ removedAccounts: [],
7
4
  };
8
5
 
9
6
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ExtensionAccountsProvider/defaults.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,WAAW,EAAE,EAAE;IACf,IAAI,EAAE;QACJ,gBAAgB,EAAE,EAAE;QACpB,oBAAoB,EAAE,IAAI;KAC3B;CACF,CAAA","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ProcessExtensionAccountsResult } from '@w3ux/types'\n\nexport const defaultProcessExtensionResult: ProcessExtensionAccountsResult = {\n newAccounts: [],\n meta: {\n accountsToRemove: [],\n removedActiveAccount: null,\n },\n}\n"]}
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/defaults.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,WAAW,EAAE,EAAE;IACf,eAAe,EAAE,EAAE;CACpB,CAAA","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ProcessExtensionAccountsResult } from '@w3ux/types'\n\nexport const defaultProcessExtensionResult: ProcessExtensionAccountsResult = {\n newAccounts: [],\n removedAccounts: [],\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  import type { ExtensionAccountsContextInterface, ExtensionAccountsProviderProps } from './types';
2
2
  export declare const ExtensionAccountsContext: import("react").Context<ExtensionAccountsContextInterface>, useExtensionAccounts: () => ExtensionAccountsContextInterface;
3
- export declare const ExtensionAccountsProvider: ({ children, network, ss58, dappName, onExtensionEnabled, }: ExtensionAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const ExtensionAccountsProvider: ({ children, ss58, dappName, onExtensionEnabled, }: ExtensionAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -7,7 +7,7 @@ import { useEffect, useState } from 'react';
7
7
  import { combineLatest } from 'rxjs';
8
8
  import { useExtensions } from '../ExtensionsProvider';
9
9
  export const [ExtensionAccountsContext, useExtensionAccounts] = createSafeContext();
10
- export const ExtensionAccountsProvider = ({ children, network, ss58, dappName, onExtensionEnabled, }) => {
10
+ export const ExtensionAccountsProvider = ({ children, ss58, dappName, onExtensionEnabled, }) => {
11
11
  const { extensionsStatus, gettingExtensions, extensionHasFeature, extensionCanConnect, } = useExtensions();
12
12
  const [extensionAccounts, setExtensionAccounts] = useState([]);
13
13
  const [extensionsInitialised, setExtensionsInitialised] = useState([]);
@@ -27,7 +27,6 @@ export const ExtensionAccountsProvider = ({ children, network, ss58, dappName, o
27
27
  const handleAccounts = (extensionId, accounts, signer) => {
28
28
  processExtensionAccounts({
29
29
  source: extensionId,
30
- network,
31
30
  ss58,
32
31
  }, signer, accounts);
33
32
  };
@@ -50,7 +49,6 @@ export const ExtensionAccountsProvider = ({ children, network, ss58, dappName, o
50
49
  const handleAccounts = (extensionId, accounts, signer) => {
51
50
  processExtensionAccounts({
52
51
  source: extensionId,
53
- network,
54
52
  ss58,
55
53
  }, signer, accounts);
56
54
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ExtensionAccountsProvider/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext, useEffectIgnoreInitial } from '@w3ux/hooks'\nimport {\n accounts$,\n addUnsub,\n getAccountsFromExtensions,\n processExtensionAccounts,\n resetAccounts,\n unsubAll,\n updateAccounts,\n} from '@w3ux/observables-connect/accounts'\nimport {\n connectExtensions,\n getActiveExtensionsLocal,\n initialisedExtensions$,\n} from '@w3ux/observables-connect/extensions'\nimport type { ExtensionAccount, ImportedAccount, Sync } from '@w3ux/types'\nimport { formatAccountSs58, localStorageOrDefault } from '@w3ux/utils'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from '../ExtensionsProvider'\nimport type {\n ExtensionAccountsContextInterface,\n ExtensionAccountsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n createSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n children,\n network,\n ss58,\n dappName,\n onExtensionEnabled,\n}: ExtensionAccountsProviderProps) => {\n const {\n extensionsStatus,\n gettingExtensions,\n extensionHasFeature,\n extensionCanConnect,\n } = useExtensions()\n\n // Store connected extension accounts\n const [extensionAccounts, setExtensionAccounts] = useState<ImportedAccount[]>(\n []\n )\n // Stores initialised extensions\n const [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n []\n )\n\n // Store whether extension accounts have been synced\n // TODO: Use observable to update this state\n const [extensionAccountsSynced, setExtensionAccountsSynced] =\n useState<Sync>('unsynced')\n\n // Helper for calling extension enabled callback. Ignores if not a valid function\n const maybeOnExtensionEnabled = (id: string) => {\n if (typeof onExtensionEnabled === 'function') {\n onExtensionEnabled(id)\n }\n }\n\n // Connects to extensions that already have been connected to and stored in localStorage. Loop\n // through extensions and connect to accounts\n const connectActiveExtensions = async () => {\n const { connected } = await connectExtensions(\n dappName,\n getActiveExtensionsLocal()\n )\n if (connected.size === 0) {\n return\n }\n\n // Get full list of imported accounts\n const initialAccounts = await getAccountsFromExtensions(connected, ss58)\n\n // Perform initial account state update\n updateAccounts({ add: initialAccounts, remove: [] })\n\n // Initiate account subscriptions for connected extensions\n // --------------------------------------------------------\n\n // Handler function for each extension accounts subscription\n const handleAccounts = (\n extensionId: string,\n accounts: ExtensionAccount[],\n signer: unknown\n ) => {\n processExtensionAccounts(\n {\n source: extensionId,\n network,\n ss58,\n },\n signer,\n accounts\n )\n }\n\n // Try to subscribe to accounts for each connected extension\n for (const [id, { extension }] of Array.from(connected.entries())) {\n // If enabled, subscribe to accounts.\n if (extensionHasFeature(id, 'subscribeAccounts')) {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(id, accounts || [], extension.signer)\n })\n // Store unsub\n addUnsub(id, unsub)\n }\n }\n }\n\n // Connects to a single extension\n const connectExtensionAccounts = async (id: string): Promise<boolean> => {\n if (extensionCanConnect(id)) {\n const { connected } = await connectExtensions(dappName, [id])\n if (connected.size === 0) {\n return\n }\n const { extension } = connected.get(id)\n\n // Handler for new accounts\n const handleAccounts = (\n extensionId: string,\n accounts: ExtensionAccount[],\n signer: unknown\n ) => {\n processExtensionAccounts(\n {\n source: extensionId,\n network,\n ss58,\n },\n signer,\n accounts\n )\n }\n\n // Call optional `onExtensionEnabled` callback\n maybeOnExtensionEnabled(id)\n\n // If account subscriptions are not supported, simply get the account(s) from the extension. Otherwise, subscribe to accounts\n if (!extensionHasFeature(id, 'subscribeAccounts')) {\n const accounts = await extension.accounts.get()\n handleAccounts(id, accounts, extension.signer)\n } else {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(id, accounts || [], extension.signer)\n })\n addUnsub(id, unsub)\n }\n return true\n }\n return false\n }\n\n const handleSyncExtensionAccounts = async () => {\n // Wait for injectedWeb3 check to finish before starting account import process\n if (!gettingExtensions && extensionAccountsSynced === 'unsynced') {\n // Unsubscribe from all accounts and reset state\n unsubAll()\n resetAccounts()\n // If extensions have been fetched, get accounts if extensions exist and local extensions\n // exist (previously connected)\n if (Object.keys(extensionsStatus).length) {\n // get active extensions\n const localExtensions = localStorageOrDefault(\n `active_extensions`,\n [],\n true\n )\n if (Object.keys(extensionsStatus).length && localExtensions.length) {\n setExtensionAccountsSynced('syncing')\n await connectActiveExtensions()\n }\n }\n\n // Syncing is complete. Also covers case where no extensions were found\n setExtensionAccountsSynced('synced')\n }\n }\n\n // Get extension accounts based on the provided ss58 prefix\n const getExtensionAccounts = (ss58Prefix: number): ImportedAccount[] =>\n extensionAccounts\n .map((account) => {\n const formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n if (!formattedAddress) {\n return null\n }\n return {\n ...account,\n address: formattedAddress,\n }\n })\n // Remove null entries resulting from invalid formatted addresses\n .filter((account) => account !== null)\n\n // Re-sync extensions accounts on `unsynced`\n useEffect(() => {\n handleSyncExtensionAccounts()\n\n return () => unsubAll()\n }, [extensionsStatus, gettingExtensions, extensionAccountsSynced])\n\n // Once initialised extensions equal total extensions present in `injectedWeb3`, mark extensions\n // as fetched\n useEffectIgnoreInitial(() => {\n if (\n !gettingExtensions &&\n extensionsInitialised.length === Object.keys(extensionsStatus).length\n ) {\n setExtensionAccountsSynced('synced')\n }\n }, [gettingExtensions, extensionsInitialised])\n\n // Subscribes to observables and updates state\n useEffect(() => {\n const sub = combineLatest([initialisedExtensions$, accounts$]).subscribe(\n ([initialised, accounts]) => {\n setExtensionsInitialised(initialised)\n setExtensionAccounts(accounts)\n }\n )\n return () => {\n sub.unsubscribe()\n }\n }, [])\n\n return (\n <ExtensionAccountsContext.Provider\n value={{\n connectExtensionAccounts,\n extensionAccountsSynced,\n getExtensionAccounts,\n }}\n >\n {children}\n </ExtensionAccountsContext.Provider>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext, useEffectIgnoreInitial } from '@w3ux/hooks'\nimport {\n accounts$,\n addUnsub,\n getAccountsFromExtensions,\n processExtensionAccounts,\n resetAccounts,\n unsubAll,\n updateAccounts,\n} from '@w3ux/observables-connect/accounts'\nimport {\n connectExtensions,\n getActiveExtensionsLocal,\n initialisedExtensions$,\n} from '@w3ux/observables-connect/extensions'\nimport type { ExtensionAccount, ImportedAccount, Sync } from '@w3ux/types'\nimport { formatAccountSs58, localStorageOrDefault } from '@w3ux/utils'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from '../ExtensionsProvider'\nimport type {\n ExtensionAccountsContextInterface,\n ExtensionAccountsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n createSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n children,\n ss58,\n dappName,\n onExtensionEnabled,\n}: ExtensionAccountsProviderProps) => {\n const {\n extensionsStatus,\n gettingExtensions,\n extensionHasFeature,\n extensionCanConnect,\n } = useExtensions()\n\n // Store connected extension accounts\n const [extensionAccounts, setExtensionAccounts] = useState<ImportedAccount[]>(\n []\n )\n // Stores initialised extensions\n const [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n []\n )\n\n // Store whether extension accounts have been synced\n // TODO: Use observable to update this state\n const [extensionAccountsSynced, setExtensionAccountsSynced] =\n useState<Sync>('unsynced')\n\n // Helper for calling extension enabled callback. Ignores if not a valid function\n const maybeOnExtensionEnabled = (id: string) => {\n if (typeof onExtensionEnabled === 'function') {\n onExtensionEnabled(id)\n }\n }\n\n // Connects to extensions that already have been connected to and stored in localStorage. Loop\n // through extensions and connect to accounts\n const connectActiveExtensions = async () => {\n const { connected } = await connectExtensions(\n dappName,\n getActiveExtensionsLocal()\n )\n if (connected.size === 0) {\n return\n }\n\n // Get full list of imported accounts\n const initialAccounts = await getAccountsFromExtensions(connected, ss58)\n\n // Perform initial account state update\n updateAccounts({ add: initialAccounts, remove: [] })\n\n // Initiate account subscriptions for connected extensions\n // --------------------------------------------------------\n\n // Handler function for each extension accounts subscription\n const handleAccounts = (\n extensionId: string,\n accounts: ExtensionAccount[],\n signer: unknown\n ) => {\n processExtensionAccounts(\n {\n source: extensionId,\n ss58,\n },\n signer,\n accounts\n )\n }\n\n // Try to subscribe to accounts for each connected extension\n for (const [id, { extension }] of Array.from(connected.entries())) {\n // If enabled, subscribe to accounts.\n if (extensionHasFeature(id, 'subscribeAccounts')) {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(id, accounts || [], extension.signer)\n })\n // Store unsub\n addUnsub(id, unsub)\n }\n }\n }\n\n // Connects to a single extension\n const connectExtensionAccounts = async (id: string): Promise<boolean> => {\n if (extensionCanConnect(id)) {\n const { connected } = await connectExtensions(dappName, [id])\n if (connected.size === 0) {\n return\n }\n const { extension } = connected.get(id)\n\n // Handler for new accounts\n const handleAccounts = (\n extensionId: string,\n accounts: ExtensionAccount[],\n signer: unknown\n ) => {\n processExtensionAccounts(\n {\n source: extensionId,\n ss58,\n },\n signer,\n accounts\n )\n }\n\n // Call optional `onExtensionEnabled` callback\n maybeOnExtensionEnabled(id)\n\n // If account subscriptions are not supported, simply get the account(s) from the extension. Otherwise, subscribe to accounts\n if (!extensionHasFeature(id, 'subscribeAccounts')) {\n const accounts = await extension.accounts.get()\n handleAccounts(id, accounts, extension.signer)\n } else {\n const unsub = extension.accounts.subscribe((accounts) => {\n handleAccounts(id, accounts || [], extension.signer)\n })\n addUnsub(id, unsub)\n }\n return true\n }\n return false\n }\n\n const handleSyncExtensionAccounts = async () => {\n // Wait for injectedWeb3 check to finish before starting account import process\n if (!gettingExtensions && extensionAccountsSynced === 'unsynced') {\n // Unsubscribe from all accounts and reset state\n unsubAll()\n resetAccounts()\n // If extensions have been fetched, get accounts if extensions exist and local extensions\n // exist (previously connected)\n if (Object.keys(extensionsStatus).length) {\n // get active extensions\n const localExtensions = localStorageOrDefault(\n `active_extensions`,\n [],\n true\n )\n if (Object.keys(extensionsStatus).length && localExtensions.length) {\n setExtensionAccountsSynced('syncing')\n await connectActiveExtensions()\n }\n }\n\n // Syncing is complete. Also covers case where no extensions were found\n setExtensionAccountsSynced('synced')\n }\n }\n\n // Get extension accounts based on the provided ss58 prefix\n const getExtensionAccounts = (ss58Prefix: number): ImportedAccount[] =>\n extensionAccounts\n .map((account) => {\n const formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n if (!formattedAddress) {\n return null\n }\n return {\n ...account,\n address: formattedAddress,\n }\n })\n // Remove null entries resulting from invalid formatted addresses\n .filter((account) => account !== null)\n\n // Re-sync extensions accounts on `unsynced`\n useEffect(() => {\n handleSyncExtensionAccounts()\n\n return () => unsubAll()\n }, [extensionsStatus, gettingExtensions, extensionAccountsSynced])\n\n // Once initialised extensions equal total extensions present in `injectedWeb3`, mark extensions\n // as fetched\n useEffectIgnoreInitial(() => {\n if (\n !gettingExtensions &&\n extensionsInitialised.length === Object.keys(extensionsStatus).length\n ) {\n setExtensionAccountsSynced('synced')\n }\n }, [gettingExtensions, extensionsInitialised])\n\n // Subscribes to observables and updates state\n useEffect(() => {\n const sub = combineLatest([initialisedExtensions$, accounts$]).subscribe(\n ([initialised, accounts]) => {\n setExtensionsInitialised(initialised)\n setExtensionAccounts(accounts)\n }\n )\n return () => {\n sub.unsubscribe()\n }\n }, [])\n\n return (\n <ExtensionAccountsContext.Provider\n value={{\n connectExtensionAccounts,\n extensionAccountsSynced,\n getExtensionAccounts,\n }}\n >\n {children}\n </ExtensionAccountsContext.Provider>\n )\n}\n"]}
@@ -7,7 +7,6 @@ export interface ExtensionAccountsContextInterface {
7
7
  }
8
8
  export interface ExtensionAccountsProviderProps {
9
9
  children: ReactNode;
10
- network: string;
11
10
  ss58: number;
12
11
  dappName: string;
13
12
  onExtensionEnabled?: (id: string) => void;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ExtensionAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ImportedAccount, Sync } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface ExtensionAccountsContextInterface {\n connectExtensionAccounts: (id?: string) => Promise<boolean>\n extensionAccountsSynced: Sync\n getExtensionAccounts: (ss58: number) => ImportedAccount[]\n}\n\nexport interface ExtensionAccountsProviderProps {\n children: ReactNode\n network: string\n ss58: number\n dappName: string\n onExtensionEnabled?: (id: string) => void\n}\n"]}
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ImportedAccount, Sync } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface ExtensionAccountsContextInterface {\n connectExtensionAccounts: (id?: string) => Promise<boolean>\n extensionAccountsSynced: Sync\n getExtensionAccounts: (ss58: number) => ImportedAccount[]\n}\n\nexport interface ExtensionAccountsProviderProps {\n children: ReactNode\n ss58: number\n dappName: string\n onExtensionEnabled?: (id: string) => void\n}\n"]}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@w3ux/react-connect-kit",
3
- "version": "3.2.16",
3
+ "version": "3.2.17",
4
4
  "license": "GPL-3.0-only",
5
5
  "dependencies": {
6
6
  "@w3ux/extension-assets": "^2.2.0",
7
7
  "@w3ux/hooks": "^2.1.0",
8
- "@w3ux/observables-connect": "0.9.24",
8
+ "@w3ux/observables-connect": "0.9.25",
9
9
  "@w3ux/utils": "^2.0.8"
10
10
  },
11
11
  "type": "module",
@@ -1,3 +0,0 @@
1
- import type { ExtensionAccount } from '@w3ux/types';
2
- export declare const getActiveAccountLocal: (network: string, ss58: number) => string | null;
3
- export declare const getActiveExtensionAccount: (network: string, ss58: number, accounts: ExtensionAccount[]) => ExtensionAccount;
@@ -1,16 +0,0 @@
1
- import { formatAccountSs58, localStorageOrDefault } from '@w3ux/utils';
2
- export const getActiveAccountLocal = (network, ss58) => {
3
- const account = localStorageOrDefault(`${network}_active_account`, null);
4
- if (account !== null) {
5
- const formattedAddress = formatAccountSs58(account, ss58);
6
- if (formattedAddress) {
7
- return formattedAddress;
8
- }
9
- }
10
- return null;
11
- };
12
- export const getActiveExtensionAccount = (network, ss58, accounts) => accounts.find(({ address }) => address === getActiveAccountLocal(network, ss58)) ?? null;
13
-
14
- //# sourceMappingURL=utils.js.map
15
-
16
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ExtensionAccountsProvider/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,OAAe,EACf,IAAY,EACG,EAAE;IACjB,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,OAAO,iBAAiB,EAAE,IAAI,CAAC,CAAA;IAExE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACzD,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,gBAAgB,CAAA;QACzB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAAe,EACf,IAAY,EACZ,QAA4B,EAC5B,EAAE,CACF,QAAQ,CAAC,IAAI,CACX,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAClE,IAAI,IAAI,CAAA","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionAccount } from '@w3ux/types'\nimport { formatAccountSs58, localStorageOrDefault } from '@w3ux/utils'\n\n// Gets local `active_acount` for a network.\nexport const getActiveAccountLocal = (\n network: string,\n ss58: number\n): string | null => {\n const account = localStorageOrDefault(`${network}_active_account`, null)\n\n if (account !== null) {\n const formattedAddress = formatAccountSs58(account, ss58)\n if (formattedAddress) {\n return formattedAddress\n }\n }\n return null\n}\n\n// Checks if the local active account is the provided accounts.\nexport const getActiveExtensionAccount = (\n network: string,\n ss58: number,\n accounts: ExtensionAccount[]\n) =>\n accounts.find(\n ({ address }) => address === getActiveAccountLocal(network, ss58)\n ) ?? null\n"]}