@w3ux/react-connect-kit 3.2.0 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,4 @@
1
- import type { ExtensionAccount, ExtensionInterface } from '@w3ux/types';
2
- import type { ExtensionEnableResults, RawExtensions } from '../types';
1
+ import type { ExtensionAccount, ExtensionEnableResults, ExtensionInterface, RawExtensions } from '@w3ux/types';
3
2
  export declare class Extensions {
4
3
  static getFromIds: (extensionIds: string[]) => RawExtensions;
5
4
  static enable: (extensions: RawExtensions, dappName: string) => Promise<PromiseSettledResult<ExtensionInterface>[]>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ExtensionAccountsProvider/Extensions.ts"],"names":[],"mappings":"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","file":"Extensions.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionAccount, ExtensionInterface } from '@w3ux/types'\nimport { formatAccountSs58, localStorageOrDefault } from '@w3ux/utils'\nimport type {\n ExtensionEnableResult,\n ExtensionEnableResults,\n RawExtensionEnable,\n RawExtensions,\n} from '../types'\nimport { DEFAULT_SS58 } from './defaults'\n\n// A static class to manage the discovery and importing of extensions.\nexport class Extensions {\n // Gets a map of extensions with their enable functions from `injectedWeb3`.\n static getFromIds = (extensionIds: string[]): RawExtensions => {\n const rawExtensions = new Map<string, RawExtensionEnable>()\n\n extensionIds.forEach(async (id) => {\n if (this.isLocal(id)) {\n const { enable } = window.injectedWeb3[id]\n\n if (enable !== undefined && typeof enable === 'function') {\n rawExtensions.set(id, enable)\n } else {\n this.removeFromLocal(id)\n }\n }\n })\n return rawExtensions\n }\n\n // Calls `enable` for the provided extensions.\n static enable = async (\n extensions: RawExtensions,\n dappName: string\n ): Promise<PromiseSettledResult<ExtensionInterface>[]> => {\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map((enable) => enable(dappName))\n )\n return results\n } catch (err) {\n console.error(\"Error during 'enable' call for Extensions: \", err)\n // Return an empty array if an error occurs.\n return []\n }\n }\n\n // Formats the results of an extension's `enable` function.\n static formatEnabled = (\n extensions: RawExtensions,\n results: PromiseSettledResult<ExtensionInterface>[]\n ): ExtensionEnableResults => {\n // Accumulate resulting extensions state after attempting to enable.\n const extensionsState = new Map<string, ExtensionEnableResult>()\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]\n const id = Array.from(extensions.keys())[i]\n\n if (result.status === 'fulfilled') {\n extensionsState.set(id, {\n extension: result.value,\n connected: true,\n })\n } else if (result.status === 'rejected') {\n extensionsState.set(id, {\n connected: false,\n error: result.reason,\n })\n }\n }\n return extensionsState\n }\n\n // Return successfully connected extensions.\n static connected = (\n extensions: ExtensionEnableResults\n ): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n )\n\n static withError = (\n extensions: ExtensionEnableResults\n ): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n )\n\n // Calls `enable` and formats the results of an extension's `enable` function.\n static getAllAccounts = async (\n extensions: ExtensionEnableResults\n ): Promise<ExtensionAccount[]> => {\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map(({ extension }) =>\n extension.accounts.get()\n )\n )\n\n const extensionEntries = Array.from(extensions.entries())\n const all: ExtensionAccount[] = []\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]\n const id = extensionEntries[i][0]\n const signer = extensionEntries[i][1].extension.signer\n\n if (result.status === 'fulfilled') {\n const filtered = result.value\n // Reformat addresses with default ss58 prefix.\n .map((account) => {\n const formattedAddress = formatAccountSs58(\n account.address,\n DEFAULT_SS58\n )\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 // Remove accounts that have already been imported.\n .filter(\n ({ address }) =>\n !all.find(\n (currentAccount) => address === currentAccount.address\n )\n )\n // Reformat entries to include extension source.\n .map(({ address, name }) => ({\n address,\n name,\n source: id,\n signer,\n }))\n\n all.push(...filtered)\n }\n }\n\n return all\n } catch (err) {\n // Return an empty array if an error occurs.\n console.error(\n \"Error during 'enable' and format call for Extensions: \",\n err\n )\n return []\n }\n }\n\n // Check if an extension exists in local `active_extensions`.\n static isLocal = (id: string): boolean => {\n const current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n )\n let isLocal = false\n if (Array.isArray(current)) {\n isLocal = current.find((l) => l === id) !== undefined\n }\n return !!isLocal\n }\n\n // Adds an extension to local `active_extensions`.\n static addToLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n )\n if (Array.isArray(current)) {\n if (!current.includes(id)) {\n current.push(id)\n localStorage.setItem('active_extensions', JSON.stringify(current))\n }\n }\n }\n\n // Removes extension from local `active_extensions`.\n static removeFromLocal = (id: string): void => {\n let current = localStorageOrDefault<string[]>(`active_extensions`, [], true)\n if (Array.isArray(current)) {\n current = current.filter((localId: string) => localId !== id)\n localStorage.setItem('active_extensions', JSON.stringify(current))\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/Extensions.ts"],"names":[],"mappings":"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","file":"Extensions.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type {\n ExtensionAccount,\n ExtensionEnableResult,\n ExtensionEnableResults,\n ExtensionInterface,\n RawExtensionEnable,\n RawExtensions,\n} from '@w3ux/types'\nimport { formatAccountSs58, localStorageOrDefault } from '@w3ux/utils'\nimport { DEFAULT_SS58 } from './defaults'\n\n// A static class to manage the discovery and importing of extensions.\nexport class Extensions {\n // Gets a map of extensions with their enable functions from `injectedWeb3`.\n static getFromIds = (extensionIds: string[]): RawExtensions => {\n const rawExtensions = new Map<string, RawExtensionEnable>()\n\n extensionIds.forEach(async (id) => {\n if (this.isLocal(id)) {\n const { enable } = window.injectedWeb3[id]\n\n if (enable !== undefined && typeof enable === 'function') {\n rawExtensions.set(id, enable)\n } else {\n this.removeFromLocal(id)\n }\n }\n })\n return rawExtensions\n }\n\n // Calls `enable` for the provided extensions.\n static enable = async (\n extensions: RawExtensions,\n dappName: string\n ): Promise<PromiseSettledResult<ExtensionInterface>[]> => {\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map((enable) => enable(dappName))\n )\n return results\n } catch (err) {\n console.error(\"Error during 'enable' call for Extensions: \", err)\n // Return an empty array if an error occurs.\n return []\n }\n }\n\n // Formats the results of an extension's `enable` function.\n static formatEnabled = (\n extensions: RawExtensions,\n results: PromiseSettledResult<ExtensionInterface>[]\n ): ExtensionEnableResults => {\n // Accumulate resulting extensions state after attempting to enable.\n const extensionsState = new Map<string, ExtensionEnableResult>()\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]\n const id = Array.from(extensions.keys())[i]\n\n if (result.status === 'fulfilled') {\n extensionsState.set(id, {\n extension: result.value,\n connected: true,\n })\n } else if (result.status === 'rejected') {\n extensionsState.set(id, {\n connected: false,\n error: result.reason,\n })\n }\n }\n return extensionsState\n }\n\n // Return successfully connected extensions.\n static connected = (\n extensions: ExtensionEnableResults\n ): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n )\n\n static withError = (\n extensions: ExtensionEnableResults\n ): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n )\n\n // Calls `enable` and formats the results of an extension's `enable` function.\n static getAllAccounts = async (\n extensions: ExtensionEnableResults\n ): Promise<ExtensionAccount[]> => {\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map(({ extension }) =>\n extension.accounts.get()\n )\n )\n\n const extensionEntries = Array.from(extensions.entries())\n const all: ExtensionAccount[] = []\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]\n const id = extensionEntries[i][0]\n const signer = extensionEntries[i][1].extension.signer\n\n if (result.status === 'fulfilled') {\n const filtered = result.value\n // Reformat addresses with default ss58 prefix.\n .map((account) => {\n const formattedAddress = formatAccountSs58(\n account.address,\n DEFAULT_SS58\n )\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 // Remove accounts that have already been imported.\n .filter(\n ({ address }) =>\n !all.find(\n (currentAccount) => address === currentAccount.address\n )\n )\n // Reformat entries to include extension source.\n .map(({ address, name }) => ({\n address,\n name,\n source: id,\n signer,\n }))\n\n all.push(...filtered)\n }\n }\n\n return all\n } catch (err) {\n // Return an empty array if an error occurs.\n console.error(\n \"Error during 'enable' and format call for Extensions: \",\n err\n )\n return []\n }\n }\n\n // Check if an extension exists in local `active_extensions`.\n static isLocal = (id: string): boolean => {\n const current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n )\n let isLocal = false\n if (Array.isArray(current)) {\n isLocal = current.find((l) => l === id) !== undefined\n }\n return !!isLocal\n }\n\n // Adds an extension to local `active_extensions`.\n static addToLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(\n `active_extensions`,\n [],\n true\n )\n if (Array.isArray(current)) {\n if (!current.includes(id)) {\n current.push(id)\n localStorage.setItem('active_extensions', JSON.stringify(current))\n }\n }\n }\n\n // Removes extension from local `active_extensions`.\n static removeFromLocal = (id: string): void => {\n let current = localStorageOrDefault<string[]>(`active_extensions`, [], true)\n if (Array.isArray(current)) {\n current = current.filter((localId: string) => localId !== id)\n localStorage.setItem('active_extensions', JSON.stringify(current))\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@w3ux/react-connect-kit",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "license": "GPL-3.0-only",
5
5
  "dependencies": {
6
6
  "@w3ux/extension-assets": "^2.2.0",
7
7
  "@w3ux/hooks": "^2.0.4",
8
- "@w3ux/observables-connect": "0.9.0",
8
+ "@w3ux/observables-connect": "0.9.1",
9
9
  "@w3ux/utils": "^2.0.8"
10
10
  },
11
11
  "type": "module",
package/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ExtensionInjected, ExtensionInterface } from '@w3ux/types';
1
+ import type { ExtensionInjected } from '@w3ux/types';
2
2
  declare global {
3
3
  interface Window {
4
4
  injectedWeb3?: Record<string, ExtensionInjected>;
@@ -8,12 +8,3 @@ export * from './ExtensionAccountsProvider/types';
8
8
  export * from './ExtensionsProvider/types';
9
9
  export * from './LedgerAccountsProvider/types';
10
10
  export * from './VaultAccountsProvider/types';
11
- export type RawExtensions = Map<string, RawExtensionEnable>;
12
- export type RawExtensionEnable = (name?: string) => Promise<ExtensionInterface>;
13
- export type ExtensionEnableStatus = 'valid' | 'extension_not_found' | 'enable_invalid';
14
- export type ExtensionEnableResults = Map<string, ExtensionEnableResult>;
15
- export interface ExtensionEnableResult {
16
- extension?: ExtensionInterface;
17
- connected: boolean;
18
- error?: string;
19
- }
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"names":[],"mappings":"AAeA,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionInjected, ExtensionInterface } from '@w3ux/types'\n\ndeclare global {\n interface Window {\n injectedWeb3?: Record<string, ExtensionInjected>\n }\n}\n\n/*------------------------------------------------------------\n Re-export package inner types.\n ------------------------------------------------------------*/\n\nexport * from './ExtensionAccountsProvider/types'\nexport * from './ExtensionsProvider/types'\nexport * from './LedgerAccountsProvider/types'\nexport * from './VaultAccountsProvider/types'\n\n/*------------------------------------------------------------\n Extension import process types.\n ------------------------------------------------------------*/\n\nexport type RawExtensions = Map<string, RawExtensionEnable>\n\nexport type RawExtensionEnable = (name?: string) => Promise<ExtensionInterface>\n\nexport type ExtensionEnableStatus =\n | 'valid'\n | 'extension_not_found'\n | 'enable_invalid'\n\nexport type ExtensionEnableResults = Map<string, ExtensionEnableResult>\n\nexport interface ExtensionEnableResult {\n extension?: ExtensionInterface\n connected: boolean\n error?: string\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts"],"names":[],"mappings":"AAYA,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionInjected } from '@w3ux/types'\n\n// TODO: Remove once observable refactor is in place\ndeclare global {\n interface Window {\n injectedWeb3?: Record<string, ExtensionInjected>\n }\n}\n\nexport * from './ExtensionAccountsProvider/types'\nexport * from './ExtensionsProvider/types'\nexport * from './LedgerAccountsProvider/types'\nexport * from './VaultAccountsProvider/types'\n"]}