@w3ux/react-connect-kit 3.0.3 → 3.0.4

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.
Files changed (65) hide show
  1. package/ExtensionAccountsProvider/Extensions.d.ts +3 -3
  2. package/ExtensionAccountsProvider/Extensions.js +8 -8
  3. package/ExtensionAccountsProvider/Extensions.js.map +1 -1
  4. package/ExtensionAccountsProvider/defaults.d.ts +2 -9
  5. package/ExtensionAccountsProvider/defaults.js +0 -5
  6. package/ExtensionAccountsProvider/defaults.js.map +1 -1
  7. package/ExtensionAccountsProvider/index.d.ts +2 -3
  8. package/ExtensionAccountsProvider/index.js +24 -26
  9. package/ExtensionAccountsProvider/index.js.map +1 -1
  10. package/ExtensionAccountsProvider/types.d.ts +2 -2
  11. package/ExtensionAccountsProvider/types.js.map +1 -1
  12. package/ExtensionAccountsProvider/useImportExtension.d.ts +2 -2
  13. package/ExtensionAccountsProvider/useImportExtension.js +4 -4
  14. package/ExtensionAccountsProvider/useImportExtension.js.map +1 -1
  15. package/ExtensionAccountsProvider/utils.d.ts +1 -1
  16. package/ExtensionAccountsProvider/utils.js +2 -2
  17. package/ExtensionAccountsProvider/utils.js.map +1 -1
  18. package/ExtensionsProvider/index.d.ts +3 -4
  19. package/ExtensionsProvider/index.js +10 -11
  20. package/ExtensionsProvider/index.js.map +1 -1
  21. package/ExtensionsProvider/types.d.ts +2 -2
  22. package/ExtensionsProvider/types.js.map +1 -1
  23. package/LedgerAccountsProvider/index.d.ts +2 -3
  24. package/LedgerAccountsProvider/index.js +12 -13
  25. package/LedgerAccountsProvider/index.js.map +1 -1
  26. package/LedgerAccountsProvider/types.d.ts +2 -2
  27. package/LedgerAccountsProvider/types.js.map +1 -1
  28. package/LedgerAccountsProvider/utils.d.ts +2 -2
  29. package/LedgerAccountsProvider/utils.js +5 -5
  30. package/LedgerAccountsProvider/utils.js.map +1 -1
  31. package/VaultAccountsProvider/index.d.ts +2 -3
  32. package/VaultAccountsProvider/index.js +12 -13
  33. package/VaultAccountsProvider/index.js.map +1 -1
  34. package/VaultAccountsProvider/types.d.ts +2 -2
  35. package/VaultAccountsProvider/types.js.map +1 -1
  36. package/VaultAccountsProvider/utils.d.ts +1 -1
  37. package/VaultAccountsProvider/utils.js +2 -2
  38. package/VaultAccountsProvider/utils.js.map +1 -1
  39. package/WCAccountsProvider/index.d.ts +2 -3
  40. package/WCAccountsProvider/index.js +12 -13
  41. package/WCAccountsProvider/index.js.map +1 -1
  42. package/WCAccountsProvider/types.d.ts +2 -2
  43. package/WCAccountsProvider/types.js.map +1 -1
  44. package/WCAccountsProvider/utils.d.ts +1 -1
  45. package/WCAccountsProvider/utils.js +2 -2
  46. package/WCAccountsProvider/utils.js.map +1 -1
  47. package/index.d.ts +5 -5
  48. package/index.js +5 -5
  49. package/index.js.map +1 -1
  50. package/package.json +1 -1
  51. package/types.d.ts +6 -6
  52. package/types.js +4 -4
  53. package/types.js.map +1 -1
  54. package/ExtensionsProvider/defaults.d.ts +0 -2
  55. package/ExtensionsProvider/defaults.js +0 -13
  56. package/ExtensionsProvider/defaults.js.map +0 -1
  57. package/LedgerAccountsProvider/defaults.d.ts +0 -2
  58. package/LedgerAccountsProvider/defaults.js +0 -13
  59. package/LedgerAccountsProvider/defaults.js.map +0 -1
  60. package/VaultAccountsProvider/defaults.d.ts +0 -2
  61. package/VaultAccountsProvider/defaults.js +0 -13
  62. package/VaultAccountsProvider/defaults.js.map +0 -1
  63. package/WCAccountsProvider/defaults.d.ts +0 -2
  64. package/WCAccountsProvider/defaults.js +0 -13
  65. package/WCAccountsProvider/defaults.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ExtensionsProvider/index.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAEL,SAAS,EACT,MAAM,EACN,QAAQ,EACR,aAAa,EACb,UAAU,GACX,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAC5C,wBAAwB,CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,QAAQ,EACR,OAAO,GAOR,EAAE,EAAE;IAKH,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GACnD,QAAQ,CAAU,IAAI,CAAC,CAAC;IAC1B,MAAM,uBAAuB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAG7D,MAAM,sBAAsB,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;IAGtD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAEtD,EAAE,CAAC,CAAC;IACN,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAGrD,MAAM,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CACrC,OAAO,EAAE,oBAAoB,IAAI,KAAK,CACvC,CAAC;IAGF,IAAI,oBAAoD,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,CAAS,CAAC,CAAC,CAAC;IAKxC,MAAM,mBAAmB,GAAG,KAAK,EAAE,eAAwB,EAAE,EAAE;QAC7D,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAGpC,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;YAEhD,IAAI,eAAe,EAAE,CAAC;gBACpB,eAAe,CACb,mBAAmB,EAAE,EACrB,mBAAmB,EACnB,mBAAmB,CACpB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,eAAe,CAAC,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;IAC3E,CAAC,CAAC;IAMF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAChC,MAAM,mBAAmB,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CACtD,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACjB,EAAE,EAAE,GAAG;YACP,GAAG,KAAK;SACT,CAAC,CACH,CAAC;QACF,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,mBAAmB,CAAC;IAC7B,CAAC,CAAC;IAGF,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,MAAuB,EAAE,EAAE;QACjE,eAAe,CACb;YACE,GAAG,mBAAmB,CAAC,OAAO;YAC9B,CAAC,EAAE,CAAC,EAAE,MAAM;SACb,EACD,mBAAmB,EACnB,mBAAmB,CACpB,CAAC;IACJ,CAAC,CAAC;IAGF,MAAM,qBAAqB,GAAG,CAAC,EAAU,EAAE,EAAE;QAC3C,MAAM,mBAAmB,GAAG,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAC/D,OAAO,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAE/B,eAAe,CACb,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,CACpB,CAAC;IACJ,CAAC,CAAC;IAGF,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAW,EAAE,CACjD,gBAAgB,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IAGrC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAW,EAAE,CAClD,kBAAkB,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC;IAGjE,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,OAAe,EAAW,EAAE;QACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAOF,MAAM,YAAY,GAAG,GAAG,CAAC;IAEzB,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACpC,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;YAEtC,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;gBACtC,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,aAAa,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;oBAC1C,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBAEN,MAAM,YAAY,GAAG,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;oBAClD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;wBAC1B,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC,EAAE,YAAY,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IACzB,KAAK,EAAE;YACL,gBAAgB,EAAE,mBAAmB,CAAC,OAAO;YAC7C,oBAAoB;YACpB,kBAAkB;YAClB,qBAAqB;YACrB,kBAAkB;YAClB,mBAAmB;YACnB,mBAAmB;SACpB,YAEA,QAAQ,GACkB,CAC9B,CAAC;AACJ,CAAC,CAAC","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { setStateWithRef, withTimeout } from \"@w3ux/utils\";\nimport {\n ReactNode,\n useEffect,\n useRef,\n useState,\n createContext,\n useContext,\n} from \"react\";\nimport type { ExtensionsContextInterface } from \"./types\";\nimport { defaultExtensionsContext } from \"./defaults\";\nimport extensions from \"@w3ux/extension-assets\";\nimport { web3Enable } from \"@polkagate/extension-dapp\";\nimport { ExtensionStatus } from \"@w3ux/types\";\n\nexport const ExtensionsContext = createContext<ExtensionsContextInterface>(\n defaultExtensionsContext\n);\n\nexport const useExtensions = () => useContext(ExtensionsContext);\n\nexport const ExtensionsProvider = ({\n children,\n options,\n}: {\n children: ReactNode;\n options?: {\n chainSafeSnapEnabled?: boolean;\n polkagateSnapEnabled?: boolean;\n };\n}) => {\n // Store whether initial `injectedWeb3` checking is underway.\n //\n // Injecting `injectedWeb3` is an asynchronous process, so we need to check for its existence for\n // a period of time.\n const [checkingInjectedWeb3, setCheckingInjectedWeb3] =\n useState<boolean>(true);\n const checkingInjectedWeb3Ref = useRef(checkingInjectedWeb3);\n\n // Store whether injected interval has been initialised.\n const intervalInitialisedRef = useRef<boolean>(false);\n\n // Store each extension's status in state.\n const [extensionsStatus, setExtensionsStatus] = useState<\n Record<string, ExtensionStatus>\n >({});\n const extensionsStatusRef = useRef(extensionsStatus);\n\n // Store whether Metamask Snaps are enabled.\n const [polkaGateSnapEnabled] = useState<boolean>(\n options?.polkagateSnapEnabled || false\n );\n\n // Listen for window.injectedWeb3 with an interval.\n let injectedWeb3Interval: ReturnType<typeof setInterval>;\n const injectCounter = useRef<number>(0);\n\n // Handle completed interval check for `injectedWeb3`.\n //\n // Clear interval and move on to checking for Metamask Polkadot Snap.\n const handleClearInterval = async (hasInjectedWeb3: boolean) => {\n clearInterval(injectedWeb3Interval);\n\n // Check if Metamask PolkaGate Snap is available.\n if (polkaGateSnapEnabled) {\n await withTimeout(500, web3Enable(\"snap_only\"));\n\n if (hasInjectedWeb3) {\n setStateWithRef(\n getExtensionsStatus(),\n setExtensionsStatus,\n extensionsStatusRef\n );\n }\n }\n setStateWithRef(false, setCheckingInjectedWeb3, checkingInjectedWeb3Ref);\n };\n\n // Getter for the currently installed extensions.\n //\n // Loops through the supported extensios and checks if they are present in `injectedWeb3`. Adds\n // `installed` status to the extension if it is present.\n const getExtensionsStatus = () => {\n const { injectedWeb3 } = window;\n const newExtensionsStatus = { ...extensionsStatus };\n const extensionsAsArray = Object.entries(extensions).map(\n ([key, value]) => ({\n id: key,\n ...value,\n })\n );\n extensionsAsArray.forEach((e) => {\n if (injectedWeb3[e.id] !== undefined) {\n newExtensionsStatus[e.id] = \"installed\";\n }\n });\n\n return newExtensionsStatus;\n };\n\n // Setter for an extension status.\n const setExtensionStatus = (id: string, status: ExtensionStatus) => {\n setStateWithRef(\n {\n ...extensionsStatusRef.current,\n [id]: status,\n },\n setExtensionsStatus,\n extensionsStatusRef\n );\n };\n\n // Removes an extension from the `extensionsStatus` state.\n const removeExtensionStatus = (id: string) => {\n const newExtensionsStatus = { ...extensionsStatusRef.current };\n delete newExtensionsStatus[id];\n\n setStateWithRef(\n newExtensionsStatus,\n setExtensionsStatus,\n extensionsStatusRef\n );\n };\n\n // Checks if an extension has been installed.\n const extensionInstalled = (id: string): boolean =>\n extensionsStatus[id] !== undefined;\n\n // Checks whether an extension can be connected to.\n const extensionCanConnect = (id: string): boolean =>\n extensionInstalled(id) && extensionsStatus[id] !== \"connected\";\n\n // Checks whether an extension supports a feature.\n const extensionHasFeature = (id: string, feature: string): boolean => {\n const { features } = extensions[id];\n if (features === \"*\" || features.includes(feature)) {\n return true;\n } else {\n return false;\n }\n };\n\n // Check for `injectedWeb3` and Metamask Snap on mount. To trigger interval on soft page\n // refreshes, no empty dependency array is provided to this `useEffect`. Checks for `injectedWeb3`\n // for a total of 3 seconds before giving up.\n //\n // Interval duration.\n const checkEveryMs = 300;\n // Total interval iterations.\n const totalChecks = 10;\n useEffect(() => {\n if (!intervalInitialisedRef.current) {\n intervalInitialisedRef.current = true;\n\n injectedWeb3Interval = setInterval(() => {\n injectCounter.current++;\n if (injectCounter.current === totalChecks) {\n handleClearInterval(false);\n } else {\n // `injectedWeb3` is present\n const injectedWeb3 = window?.injectedWeb3 || null;\n if (injectedWeb3 !== null) {\n handleClearInterval(true);\n }\n }\n }, checkEveryMs);\n }\n\n return () => clearInterval(injectedWeb3Interval);\n });\n\n return (\n <ExtensionsContext.Provider\n value={{\n extensionsStatus: extensionsStatusRef.current,\n checkingInjectedWeb3,\n setExtensionStatus,\n removeExtensionStatus,\n extensionInstalled,\n extensionCanConnect,\n extensionHasFeature,\n }}\n >\n {children}\n </ExtensionsContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ExtensionsProvider/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 { web3Enable } from '@polkagate/extension-dapp'\nimport extensions from '@w3ux/extension-assets'\nimport { createSafeContext } from '@w3ux/hooks'\nimport type { ExtensionStatus } from '@w3ux/types'\nimport { setStateWithRef, withTimeout } from '@w3ux/utils'\nimport type { ReactNode } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport type { ExtensionsContextInterface } from './types'\n\nexport const [ExtensionsContext, useExtensions] =\n createSafeContext<ExtensionsContextInterface>()\n\nexport const ExtensionsProvider = ({\n children,\n options,\n}: {\n children: ReactNode\n options?: {\n chainSafeSnapEnabled?: boolean\n polkagateSnapEnabled?: boolean\n }\n}) => {\n // Store whether initial `injectedWeb3` checking is underway.\n //\n // Injecting `injectedWeb3` is an asynchronous process, so we need to check for its existence for\n // a period of time.\n const [checkingInjectedWeb3, setCheckingInjectedWeb3] =\n useState<boolean>(true)\n const checkingInjectedWeb3Ref = useRef(checkingInjectedWeb3)\n\n // Store whether injected interval has been initialised.\n const intervalInitialisedRef = useRef<boolean>(false)\n\n // Store each extension's status in state.\n const [extensionsStatus, setExtensionsStatus] = useState<\n Record<string, ExtensionStatus>\n >({})\n const extensionsStatusRef = useRef(extensionsStatus)\n\n // Store whether Metamask Snaps are enabled.\n const [polkaGateSnapEnabled] = useState<boolean>(\n options?.polkagateSnapEnabled || false\n )\n\n // Listen for window.injectedWeb3 with an interval.\n let injectedWeb3Interval: ReturnType<typeof setInterval>\n const injectCounter = useRef<number>(0)\n\n // Handle completed interval check for `injectedWeb3`.\n //\n // Clear interval and move on to checking for Metamask Polkadot Snap.\n const handleClearInterval = async (hasInjectedWeb3: boolean) => {\n clearInterval(injectedWeb3Interval)\n\n // Check if Metamask PolkaGate Snap is available.\n if (polkaGateSnapEnabled) {\n await withTimeout(500, web3Enable('snap_only'))\n\n if (hasInjectedWeb3) {\n setStateWithRef(\n getExtensionsStatus(),\n setExtensionsStatus,\n extensionsStatusRef\n )\n }\n }\n setStateWithRef(false, setCheckingInjectedWeb3, checkingInjectedWeb3Ref)\n }\n\n // Getter for the currently installed extensions.\n //\n // Loops through the supported extensios and checks if they are present in `injectedWeb3`. Adds\n // `installed` status to the extension if it is present.\n const getExtensionsStatus = () => {\n const { injectedWeb3 } = window\n const newExtensionsStatus = { ...extensionsStatus }\n const extensionsAsArray = Object.entries(extensions).map(\n ([key, value]) => ({\n id: key,\n ...value,\n })\n )\n extensionsAsArray.forEach((e) => {\n if (injectedWeb3[e.id] !== undefined) {\n newExtensionsStatus[e.id] = 'installed'\n }\n })\n\n return newExtensionsStatus\n }\n\n // Setter for an extension status.\n const setExtensionStatus = (id: string, status: ExtensionStatus) => {\n setStateWithRef(\n {\n ...extensionsStatusRef.current,\n [id]: status,\n },\n setExtensionsStatus,\n extensionsStatusRef\n )\n }\n\n // Removes an extension from the `extensionsStatus` state.\n const removeExtensionStatus = (id: string) => {\n const newExtensionsStatus = { ...extensionsStatusRef.current }\n delete newExtensionsStatus[id]\n\n setStateWithRef(\n newExtensionsStatus,\n setExtensionsStatus,\n extensionsStatusRef\n )\n }\n\n // Checks if an extension has been installed.\n const extensionInstalled = (id: string): boolean =>\n extensionsStatus[id] !== undefined\n\n // Checks whether an extension can be connected to.\n const extensionCanConnect = (id: string): boolean =>\n extensionInstalled(id) && extensionsStatus[id] !== 'connected'\n\n // Checks whether an extension supports a feature.\n const extensionHasFeature = (id: string, feature: string): boolean => {\n const { features } = extensions[id]\n if (features === '*' || features.includes(feature)) {\n return true\n } else {\n return false\n }\n }\n\n // Check for `injectedWeb3` and Metamask Snap on mount. To trigger interval on soft page\n // refreshes, no empty dependency array is provided to this `useEffect`. Checks for `injectedWeb3`\n // for a total of 3 seconds before giving up.\n //\n // Interval duration.\n const checkEveryMs = 300\n // Total interval iterations.\n const totalChecks = 10\n useEffect(() => {\n if (!intervalInitialisedRef.current) {\n intervalInitialisedRef.current = true\n\n injectedWeb3Interval = setInterval(() => {\n injectCounter.current++\n if (injectCounter.current === totalChecks) {\n handleClearInterval(false)\n } else {\n // `injectedWeb3` is present\n const injectedWeb3 = window?.injectedWeb3 || null\n if (injectedWeb3 !== null) {\n handleClearInterval(true)\n }\n }\n }, checkEveryMs)\n }\n\n return () => clearInterval(injectedWeb3Interval)\n })\n\n return (\n <ExtensionsContext.Provider\n value={{\n extensionsStatus: extensionsStatusRef.current,\n checkingInjectedWeb3,\n setExtensionStatus,\n removeExtensionStatus,\n extensionInstalled,\n extensionCanConnect,\n extensionHasFeature,\n }}\n >\n {children}\n </ExtensionsContext.Provider>\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { FunctionComponent, SVGProps } from "react";
2
- import { ExtensionAccount, ExtensionStatus, VoidFn } from "@w3ux/types";
1
+ import type { ExtensionAccount, ExtensionStatus, VoidFn } from '@w3ux/types';
2
+ import type { FunctionComponent, SVGProps } from 'react';
3
3
  export interface ExtensionsContextInterface {
4
4
  checkingInjectedWeb3: boolean;
5
5
  extensionsStatus: Record<string, ExtensionStatus>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ExtensionsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { FunctionComponent, SVGProps } from \"react\";\nimport { ExtensionAccount, ExtensionStatus, VoidFn } from \"@w3ux/types\";\n\n// Extensions context interface.\nexport interface ExtensionsContextInterface {\n checkingInjectedWeb3: boolean;\n extensionsStatus: Record<string, ExtensionStatus>;\n setExtensionStatus: (id: string, status: ExtensionStatus) => void;\n removeExtensionStatus: (id: string) => void;\n extensionInstalled: (id: string) => boolean;\n extensionCanConnect: (id: string) => boolean;\n extensionHasFeature: (id: string, feature: string) => boolean;\n}\n\n// Top level required properties the extension must expose via their `injectedWeb3` entry.\nexport interface ExtensionInjected extends ExtensionConfig {\n id: string;\n enable: (n: string) => Promise<ExtensionInterface>;\n}\n\n// Required properties `enable` must provide after resolution.\nexport interface ExtensionInterface {\n accounts: {\n subscribe: (a: (b: ExtensionAccount[]) => void) => VoidFn;\n get: () => Promise<ExtensionAccount[]>;\n };\n provider: unknown;\n metadata: unknown;\n signer: unknown;\n}\n\n// Configuration item of an extension.\nexport interface ExtensionConfig {\n id: string;\n title: string;\n icon: FunctionComponent<\n SVGProps<SVGSVGElement> & { title?: string | undefined }\n >;\n url: string;\n}\n"]}
1
+ {"version":3,"sources":["../src/ExtensionsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionAccount, ExtensionStatus, VoidFn } from '@w3ux/types'\nimport type { FunctionComponent, SVGProps } from 'react'\n\n// Extensions context interface.\nexport interface ExtensionsContextInterface {\n checkingInjectedWeb3: boolean\n extensionsStatus: Record<string, ExtensionStatus>\n setExtensionStatus: (id: string, status: ExtensionStatus) => void\n removeExtensionStatus: (id: string) => void\n extensionInstalled: (id: string) => boolean\n extensionCanConnect: (id: string) => boolean\n extensionHasFeature: (id: string, feature: string) => boolean\n}\n\n// Top level required properties the extension must expose via their `injectedWeb3` entry.\nexport interface ExtensionInjected extends ExtensionConfig {\n id: string\n enable: (n: string) => Promise<ExtensionInterface>\n}\n\n// Required properties `enable` must provide after resolution.\nexport interface ExtensionInterface {\n accounts: {\n subscribe: (a: (b: ExtensionAccount[]) => void) => VoidFn\n get: () => Promise<ExtensionAccount[]>\n }\n provider: unknown\n metadata: unknown\n signer: unknown\n}\n\n// Configuration item of an extension.\nexport interface ExtensionConfig {\n id: string\n title: string\n icon: FunctionComponent<\n SVGProps<SVGSVGElement> & { title?: string | undefined }\n >\n url: string\n}\n"]}
@@ -1,4 +1,3 @@
1
- import { LedgerAccountsContextInterface, LedgerAccountsProviderProps } from "./types";
2
- export declare const LedgerAccountsContext: import("react").Context<LedgerAccountsContextInterface>;
3
- export declare const useLedgerAccounts: () => LedgerAccountsContextInterface;
1
+ import type { LedgerAccountsContextInterface, LedgerAccountsProviderProps } from './types';
2
+ export declare const LedgerAccountsContext: import("react").Context<LedgerAccountsContextInterface>, useLedgerAccounts: () => LedgerAccountsContextInterface;
4
3
  export declare const LedgerAccountsProvider: ({ children, }: LedgerAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useRef, useState } from "react";
3
- import { defaultLedgerAccountsContext } from "./defaults";
4
- import { getLocalLedgerAccounts, getLocalLedgerAddresses, isLocalLedgerAccount, renameLocalLedgerAddress, } from "./utils";
5
- import { setStateWithRef } from "@w3ux/utils";
6
- export const LedgerAccountsContext = createContext(defaultLedgerAccountsContext);
7
- export const useLedgerAccounts = () => useContext(LedgerAccountsContext);
2
+ import { createSafeContext } from '@w3ux/hooks';
3
+ import { setStateWithRef } from '@w3ux/utils';
4
+ import { useRef, useState } from 'react';
5
+ import { getLocalLedgerAccounts, getLocalLedgerAddresses, isLocalLedgerAccount, renameLocalLedgerAddress, } from './utils';
6
+ export const [LedgerAccountsContext, useLedgerAccounts] = createSafeContext();
8
7
  export const LedgerAccountsProvider = ({ children, }) => {
9
8
  const [ledgerAccounts, setLedgerAccountsState] = useState(getLocalLedgerAccounts());
10
9
  const ledgerAccountsRef = useRef(ledgerAccounts);
@@ -18,13 +17,13 @@ export const LedgerAccountsProvider = ({ children, }) => {
18
17
  address,
19
18
  network,
20
19
  name: ledgerAddress.name,
21
- source: "ledger",
20
+ source: 'ledger',
22
21
  index,
23
22
  };
24
23
  newLedgerAccounts = [...newLedgerAccounts].concat(newAccount);
25
- localStorage.setItem("ledger_accounts", JSON.stringify(newLedgerAccounts));
24
+ localStorage.setItem('ledger_accounts', JSON.stringify(newLedgerAccounts));
26
25
  setStateWithRef(newLedgerAccounts.filter((account) => account.network === network), setLedgerAccountsState, ledgerAccountsRef);
27
- if (typeof callback === "function") {
26
+ if (typeof callback === 'function') {
28
27
  callback();
29
28
  }
30
29
  return newAccount;
@@ -42,13 +41,13 @@ export const LedgerAccountsProvider = ({ children, }) => {
42
41
  return false;
43
42
  });
44
43
  if (!newLedgerAccounts.length) {
45
- localStorage.removeItem("ledger_accounts");
44
+ localStorage.removeItem('ledger_accounts');
46
45
  }
47
46
  else {
48
- localStorage.setItem("ledger_accounts", JSON.stringify(newLedgerAccounts));
47
+ localStorage.setItem('ledger_accounts', JSON.stringify(newLedgerAccounts));
49
48
  }
50
49
  setStateWithRef(newLedgerAccounts.filter((account) => account.network === network), setLedgerAccountsState, ledgerAccountsRef);
51
- if (typeof callback === "function") {
50
+ if (typeof callback === 'function') {
52
51
  callback();
53
52
  }
54
53
  };
@@ -60,7 +59,7 @@ export const LedgerAccountsProvider = ({ children, }) => {
60
59
  }
61
60
  : account);
62
61
  renameLocalLedgerAddress(address, newName, network);
63
- localStorage.setItem("ledger_accounts", JSON.stringify(newLedgerAccounts));
62
+ localStorage.setItem('ledger_accounts', JSON.stringify(newLedgerAccounts));
64
63
  setStateWithRef(newLedgerAccounts.filter((account) => account.network === network), setLedgerAccountsState, ledgerAccountsRef);
65
64
  };
66
65
  const getLedgerAccount = (network, address) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LedgerAccountsProvider/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 { createContext, useContext, useRef, useState } from \"react\";\nimport { defaultLedgerAccountsContext } from \"./defaults\";\nimport {\n LedgerAccountsContextInterface,\n LedgerAccountsProviderProps,\n} from \"./types\";\nimport {\n getLocalLedgerAccounts,\n getLocalLedgerAddresses,\n isLocalLedgerAccount,\n renameLocalLedgerAddress,\n} from \"./utils\";\nimport { setStateWithRef } from \"@w3ux/utils\";\nimport { LedgerAccount } from \"@w3ux/types\";\n\nexport const LedgerAccountsContext =\n createContext<LedgerAccountsContextInterface>(defaultLedgerAccountsContext);\n\nexport const useLedgerAccounts = () => useContext(LedgerAccountsContext);\n\nexport const LedgerAccountsProvider = ({\n children,\n}: LedgerAccountsProviderProps) => {\n // Store the fetched ledger accounts.\n const [ledgerAccounts, setLedgerAccountsState] = useState<LedgerAccount[]>(\n getLocalLedgerAccounts()\n );\n const ledgerAccountsRef = useRef(ledgerAccounts);\n\n // Check if a Ledger address exists in imported addresses.\n const ledgerAccountExists = (network: string, address: string) =>\n !!getLocalLedgerAccounts().find((account) =>\n isLocalLedgerAccount(network, account, address)\n );\n\n // Adds a ledger address to the list of fetched addresses.\n const addLedgerAccount = (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => {\n let newLedgerAccounts = getLocalLedgerAccounts();\n\n const ledgerAddress = getLocalLedgerAddresses().find((a) =>\n isLocalLedgerAccount(network, a, address)\n );\n\n if (\n ledgerAddress &&\n !newLedgerAccounts.find((account) =>\n isLocalLedgerAccount(network, account, address)\n )\n ) {\n const newAccount = {\n address,\n network,\n name: ledgerAddress.name,\n source: \"ledger\",\n index,\n };\n\n // Update the full list of local ledger accounts with new entry.\n newLedgerAccounts = [...newLedgerAccounts].concat(newAccount);\n localStorage.setItem(\n \"ledger_accounts\",\n JSON.stringify(newLedgerAccounts)\n );\n\n // Store only those accounts on the current network in state.\n setStateWithRef(\n newLedgerAccounts.filter((account) => account.network === network),\n setLedgerAccountsState,\n ledgerAccountsRef\n );\n\n // Handle optional callback function.\n if (typeof callback === \"function\") {\n callback();\n }\n return newAccount;\n }\n return null;\n };\n\n // Removes a Ledger account from state and local storage.\n const removeLedgerAccount = (\n network: string,\n address: string,\n callback?: () => void\n ) => {\n // Remove th account from local storage records\n const newLedgerAccounts = getLocalLedgerAccounts().filter((account) => {\n if (account.address !== address) {\n return true;\n }\n if (account.network !== network) {\n return true;\n }\n return false;\n });\n if (!newLedgerAccounts.length) {\n localStorage.removeItem(\"ledger_accounts\");\n } else {\n localStorage.setItem(\n \"ledger_accounts\",\n JSON.stringify(newLedgerAccounts)\n );\n }\n\n // Update state with the new list of accounts.\n setStateWithRef(\n newLedgerAccounts.filter((account) => account.network === network),\n setLedgerAccountsState,\n ledgerAccountsRef\n );\n\n // Handle optional callback function.\n if (typeof callback === \"function\") {\n callback();\n }\n };\n\n // Renames an imported ledger account.\n const renameLedgerAccount = (\n network: string,\n address: string,\n newName: string\n ) => {\n // Update the local storage records.\n const newLedgerAccounts = getLocalLedgerAccounts().map((account) =>\n isLocalLedgerAccount(network, account, address)\n ? {\n ...account,\n name: newName,\n }\n : account\n );\n renameLocalLedgerAddress(address, newName, network);\n localStorage.setItem(\"ledger_accounts\", JSON.stringify(newLedgerAccounts));\n\n // Update state with the new list of accounts.\n setStateWithRef(\n newLedgerAccounts.filter((account) => account.network === network),\n setLedgerAccountsState,\n ledgerAccountsRef\n );\n };\n\n // Gets an imported address along with its Ledger metadata.\n const getLedgerAccount = (network: string, address: string) => {\n const localLedgerAccounts = getLocalLedgerAccounts();\n if (!localLedgerAccounts) {\n return null;\n }\n return (\n localLedgerAccounts.find((account) =>\n isLocalLedgerAccount(network, account, address)\n ) || null\n );\n };\n\n // Gets Ledger accounts for a network.\n const getLedgerAccounts = (network: string) =>\n ledgerAccountsRef.current.filter((a) => a.network === network);\n\n return (\n <LedgerAccountsContext.Provider\n value={{\n ledgerAccountExists,\n getLedgerAccount,\n addLedgerAccount,\n removeLedgerAccount,\n renameLedgerAccount,\n getLedgerAccounts,\n ledgerAccounts: ledgerAccountsRef.current,\n }}\n >\n {children}\n </LedgerAccountsContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/LedgerAccountsProvider/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 } from '@w3ux/hooks'\nimport type { LedgerAccount } from '@w3ux/types'\nimport { setStateWithRef } from '@w3ux/utils'\nimport { useRef, useState } from 'react'\nimport type {\n LedgerAccountsContextInterface,\n LedgerAccountsProviderProps,\n} from './types'\nimport {\n getLocalLedgerAccounts,\n getLocalLedgerAddresses,\n isLocalLedgerAccount,\n renameLocalLedgerAddress,\n} from './utils'\n\nexport const [LedgerAccountsContext, useLedgerAccounts] =\n createSafeContext<LedgerAccountsContextInterface>()\n\nexport const LedgerAccountsProvider = ({\n children,\n}: LedgerAccountsProviderProps) => {\n // Store the fetched ledger accounts.\n const [ledgerAccounts, setLedgerAccountsState] = useState<LedgerAccount[]>(\n getLocalLedgerAccounts()\n )\n const ledgerAccountsRef = useRef(ledgerAccounts)\n\n // Check if a Ledger address exists in imported addresses.\n const ledgerAccountExists = (network: string, address: string) =>\n !!getLocalLedgerAccounts().find((account) =>\n isLocalLedgerAccount(network, account, address)\n )\n\n // Adds a ledger address to the list of fetched addresses.\n const addLedgerAccount = (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => {\n let newLedgerAccounts = getLocalLedgerAccounts()\n\n const ledgerAddress = getLocalLedgerAddresses().find((a) =>\n isLocalLedgerAccount(network, a, address)\n )\n\n if (\n ledgerAddress &&\n !newLedgerAccounts.find((account) =>\n isLocalLedgerAccount(network, account, address)\n )\n ) {\n const newAccount = {\n address,\n network,\n name: ledgerAddress.name,\n source: 'ledger',\n index,\n }\n\n // Update the full list of local ledger accounts with new entry.\n newLedgerAccounts = [...newLedgerAccounts].concat(newAccount)\n localStorage.setItem('ledger_accounts', JSON.stringify(newLedgerAccounts))\n\n // Store only those accounts on the current network in state.\n setStateWithRef(\n newLedgerAccounts.filter((account) => account.network === network),\n setLedgerAccountsState,\n ledgerAccountsRef\n )\n\n // Handle optional callback function.\n if (typeof callback === 'function') {\n callback()\n }\n return newAccount\n }\n return null\n }\n\n // Removes a Ledger account from state and local storage.\n const removeLedgerAccount = (\n network: string,\n address: string,\n callback?: () => void\n ) => {\n // Remove th account from local storage records\n const newLedgerAccounts = getLocalLedgerAccounts().filter((account) => {\n if (account.address !== address) {\n return true\n }\n if (account.network !== network) {\n return true\n }\n return false\n })\n if (!newLedgerAccounts.length) {\n localStorage.removeItem('ledger_accounts')\n } else {\n localStorage.setItem('ledger_accounts', JSON.stringify(newLedgerAccounts))\n }\n\n // Update state with the new list of accounts.\n setStateWithRef(\n newLedgerAccounts.filter((account) => account.network === network),\n setLedgerAccountsState,\n ledgerAccountsRef\n )\n\n // Handle optional callback function.\n if (typeof callback === 'function') {\n callback()\n }\n }\n\n // Renames an imported ledger account.\n const renameLedgerAccount = (\n network: string,\n address: string,\n newName: string\n ) => {\n // Update the local storage records.\n const newLedgerAccounts = getLocalLedgerAccounts().map((account) =>\n isLocalLedgerAccount(network, account, address)\n ? {\n ...account,\n name: newName,\n }\n : account\n )\n renameLocalLedgerAddress(address, newName, network)\n localStorage.setItem('ledger_accounts', JSON.stringify(newLedgerAccounts))\n\n // Update state with the new list of accounts.\n setStateWithRef(\n newLedgerAccounts.filter((account) => account.network === network),\n setLedgerAccountsState,\n ledgerAccountsRef\n )\n }\n\n // Gets an imported address along with its Ledger metadata.\n const getLedgerAccount = (network: string, address: string) => {\n const localLedgerAccounts = getLocalLedgerAccounts()\n if (!localLedgerAccounts) {\n return null\n }\n return (\n localLedgerAccounts.find((account) =>\n isLocalLedgerAccount(network, account, address)\n ) || null\n )\n }\n\n // Gets Ledger accounts for a network.\n const getLedgerAccounts = (network: string) =>\n ledgerAccountsRef.current.filter((a) => a.network === network)\n\n return (\n <LedgerAccountsContext.Provider\n value={{\n ledgerAccountExists,\n getLedgerAccount,\n addLedgerAccount,\n removeLedgerAccount,\n renameLedgerAccount,\n getLedgerAccounts,\n ledgerAccounts: ledgerAccountsRef.current,\n }}\n >\n {children}\n </LedgerAccountsContext.Provider>\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { LedgerAccount } from "@w3ux/types";
2
- import { ReactNode } from "react";
1
+ import type { LedgerAccount } from '@w3ux/types';
2
+ import type { ReactNode } from 'react';
3
3
  export interface LedgerAccountsContextInterface {
4
4
  ledgerAccountExists: (network: string, a: string) => boolean;
5
5
  addLedgerAccount: (network: string, address: string, index: number, callback?: () => void) => LedgerAccount | null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LedgerAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { LedgerAccount } from \"@w3ux/types\";\nimport { ReactNode } from \"react\";\n\nexport interface LedgerAccountsContextInterface {\n ledgerAccountExists: (network: string, a: string) => boolean;\n addLedgerAccount: (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => LedgerAccount | null;\n removeLedgerAccount: (\n network: string,\n address: string,\n callback?: () => void\n ) => void;\n renameLedgerAccount: (network: string, address: string, name: string) => void;\n getLedgerAccount: (network: string, address: string) => LedgerAccount | null;\n getLedgerAccounts: (network: string) => LedgerAccount[];\n ledgerAccounts: LedgerAccount[];\n}\n\nexport interface LedgerAccountsProviderProps {\n children: ReactNode;\n}\n\nexport interface LedgerAddress {\n address: string;\n index: number;\n name: string;\n network: string;\n pubKey: string;\n}\n"]}
1
+ {"version":3,"sources":["../src/LedgerAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { LedgerAccount } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface LedgerAccountsContextInterface {\n ledgerAccountExists: (network: string, a: string) => boolean\n addLedgerAccount: (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => LedgerAccount | null\n removeLedgerAccount: (\n network: string,\n address: string,\n callback?: () => void\n ) => void\n renameLedgerAccount: (network: string, address: string, name: string) => void\n getLedgerAccount: (network: string, address: string) => LedgerAccount | null\n getLedgerAccounts: (network: string) => LedgerAccount[]\n ledgerAccounts: LedgerAccount[]\n}\n\nexport interface LedgerAccountsProviderProps {\n children: ReactNode\n}\n\nexport interface LedgerAddress {\n address: string\n index: number\n name: string\n network: string\n pubKey: string\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { LedgerAddress } from "./types";
2
- import { LedgerAccount } from "@w3ux/types";
1
+ import type { LedgerAccount } from '@w3ux/types';
2
+ import type { LedgerAddress } from './types';
3
3
  export declare const getLocalLedgerAccounts: (network?: string) => LedgerAccount[];
4
4
  export declare const isLocalLedgerAccount: (network: string, account: {
5
5
  address: string | null;
@@ -1,26 +1,26 @@
1
- import { localStorageOrDefault } from "@w3ux/utils";
1
+ import { localStorageOrDefault } from '@w3ux/utils';
2
2
  export const getLocalLedgerAccounts = (network) => {
3
- const localAddresses = localStorageOrDefault("ledger_accounts", [], true);
3
+ const localAddresses = localStorageOrDefault('ledger_accounts', [], true);
4
4
  return network
5
5
  ? localAddresses.filter((a) => a.network === network)
6
6
  : localAddresses;
7
7
  };
8
8
  export const isLocalLedgerAccount = (network, account, address) => account.address === address && account.network === network;
9
9
  export const getLocalLedgerAddresses = (network) => {
10
- const localAddresses = localStorageOrDefault("ledger_addresses", [], true);
10
+ const localAddresses = localStorageOrDefault('ledger_addresses', [], true);
11
11
  return network
12
12
  ? localAddresses.filter((a) => a.network === network)
13
13
  : localAddresses;
14
14
  };
15
15
  export const renameLocalLedgerAddress = (address, name, network) => {
16
- const localLedger = localStorageOrDefault("ledger_addresses", [], true)?.map((i) => !(i.address === address && i.network === network)
16
+ const localLedger = localStorageOrDefault('ledger_addresses', [], true)?.map((i) => !(i.address === address && i.network === network)
17
17
  ? i
18
18
  : {
19
19
  ...i,
20
20
  name,
21
21
  });
22
22
  if (localLedger) {
23
- localStorage.setItem("ledger_addresses", JSON.stringify(localLedger));
23
+ localStorage.setItem('ledger_addresses', JSON.stringify(localLedger));
24
24
  }
25
25
  };
26
26
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LedgerAccountsProvider/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAmB,EAAE;IAC1E,MAAM,cAAc,GAAG,qBAAqB,CAC1C,iBAAiB,EACjB,EAAE,EACF,IAAI,CACc,CAAC;IAErB,OAAO,OAAO;QACZ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QACrD,CAAC,CAAC,cAAc,CAAC;AACrB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAe,EACf,OAAoD,EACpD,OAAe,EACf,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC;AAGhE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC1D,MAAM,cAAc,GAAG,qBAAqB,CAC1C,kBAAkB,EAClB,EAAE,EACF,IAAI,CACc,CAAC;IAErB,OAAO,OAAO;QACZ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QACrD,CAAC,CAAC,cAAc,CAAC;AACrB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACf,IAAY,EACZ,OAAe,EACf,EAAE;IACF,MAAM,WAAW,GACf,qBAAqB,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,CACnD,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,CAAC,CAAC;YACE,GAAG,CAAC;YACJ,IAAI;SACL,CACN,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC,CAAC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from \"@w3ux/utils\";\nimport { LedgerAddress } from \"./types\";\nimport { LedgerAccount } from \"@w3ux/types\";\n\n// Gets imported Ledger accounts from local storage.\nexport const getLocalLedgerAccounts = (network?: string): LedgerAccount[] => {\n const localAddresses = localStorageOrDefault(\n \"ledger_accounts\",\n [],\n true\n ) as LedgerAccount[];\n\n return network\n ? localAddresses.filter((a) => a.network === network)\n : localAddresses;\n};\n\n// Gets whether an address is a local Ledger account.\nexport const isLocalLedgerAccount = (\n network: string,\n account: { address: string | null; network: string },\n address: string\n) => account.address === address && account.network === network;\n\n// Gets saved ledger addresses from local storage.\nexport const getLocalLedgerAddresses = (network?: string) => {\n const localAddresses = localStorageOrDefault(\n \"ledger_addresses\",\n [],\n true\n ) as LedgerAddress[];\n\n return network\n ? localAddresses.filter((a) => a.network === network)\n : localAddresses;\n};\n\n// Renames a record from local ledger addresses.\nexport const renameLocalLedgerAddress = (\n address: string,\n name: string,\n network: string\n) => {\n const localLedger = (\n localStorageOrDefault(\"ledger_addresses\", [], true) as LedgerAddress[]\n )?.map((i) =>\n !(i.address === address && i.network === network)\n ? i\n : {\n ...i,\n name,\n }\n );\n if (localLedger) {\n localStorage.setItem(\"ledger_addresses\", JSON.stringify(localLedger));\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/LedgerAccountsProvider/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAInD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAmB,EAAE;IAC1E,MAAM,cAAc,GAAG,qBAAqB,CAC1C,iBAAiB,EACjB,EAAE,EACF,IAAI,CACc,CAAA;IAEpB,OAAO,OAAO;QACZ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QACrD,CAAC,CAAC,cAAc,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAe,EACf,OAAoD,EACpD,OAAe,EACf,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAA;AAG/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC1D,MAAM,cAAc,GAAG,qBAAqB,CAC1C,kBAAkB,EAClB,EAAE,EACF,IAAI,CACc,CAAA;IAEpB,OAAO,OAAO;QACZ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QACrD,CAAC,CAAC,cAAc,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACf,IAAY,EACZ,OAAe,EACf,EAAE;IACF,MAAM,WAAW,GACf,qBAAqB,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,CACnD,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,CAAC,CAAC;YACE,GAAG,CAAC;YACJ,IAAI;SACL,CACN,CAAA;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IACvE,CAAC;AACH,CAAC,CAAA","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { LedgerAccount } from '@w3ux/types'\nimport { localStorageOrDefault } from '@w3ux/utils'\nimport type { LedgerAddress } from './types'\n\n// Gets imported Ledger accounts from local storage.\nexport const getLocalLedgerAccounts = (network?: string): LedgerAccount[] => {\n const localAddresses = localStorageOrDefault(\n 'ledger_accounts',\n [],\n true\n ) as LedgerAccount[]\n\n return network\n ? localAddresses.filter((a) => a.network === network)\n : localAddresses\n}\n\n// Gets whether an address is a local Ledger account.\nexport const isLocalLedgerAccount = (\n network: string,\n account: { address: string | null; network: string },\n address: string\n) => account.address === address && account.network === network\n\n// Gets saved ledger addresses from local storage.\nexport const getLocalLedgerAddresses = (network?: string) => {\n const localAddresses = localStorageOrDefault(\n 'ledger_addresses',\n [],\n true\n ) as LedgerAddress[]\n\n return network\n ? localAddresses.filter((a) => a.network === network)\n : localAddresses\n}\n\n// Renames a record from local ledger addresses.\nexport const renameLocalLedgerAddress = (\n address: string,\n name: string,\n network: string\n) => {\n const localLedger = (\n localStorageOrDefault('ledger_addresses', [], true) as LedgerAddress[]\n )?.map((i) =>\n !(i.address === address && i.network === network)\n ? i\n : {\n ...i,\n name,\n }\n )\n if (localLedger) {\n localStorage.setItem('ledger_addresses', JSON.stringify(localLedger))\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- import type { VaultAccountsContextInterface, VaultAccountsProviderProps } from "./types";
2
- export declare const VaultAccountsContext: import("react").Context<VaultAccountsContextInterface>;
3
- export declare const useVaultAccounts: () => VaultAccountsContextInterface;
1
+ import type { VaultAccountsContextInterface, VaultAccountsProviderProps } from './types';
2
+ export declare const VaultAccountsContext: import("react").Context<VaultAccountsContextInterface>, useVaultAccounts: () => VaultAccountsContextInterface;
4
3
  export declare const VaultAccountsProvider: ({ children, }: VaultAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { ellipsisFn, setStateWithRef } from "@w3ux/utils";
3
- import { createContext, useContext, useRef, useState } from "react";
4
- import { getLocalVaultAccounts, isLocalNetworkAddress } from "./utils";
5
- import { defaultVaultAccountsContext } from "./defaults";
6
- export const VaultAccountsContext = createContext(defaultVaultAccountsContext);
7
- export const useVaultAccounts = () => useContext(VaultAccountsContext);
2
+ import { createSafeContext } from '@w3ux/hooks';
3
+ import { ellipsisFn, setStateWithRef } from '@w3ux/utils';
4
+ import { useRef, useState } from 'react';
5
+ import { getLocalVaultAccounts, isLocalNetworkAddress } from './utils';
6
+ export const [VaultAccountsContext, useVaultAccounts] = createSafeContext();
8
7
  export const VaultAccountsProvider = ({ children, }) => {
9
8
  const [vaultAccounts, seVaultAccountsState] = useState(getLocalVaultAccounts());
10
9
  const vaultAccountsRef = useRef(vaultAccounts);
@@ -16,13 +15,13 @@ export const VaultAccountsProvider = ({ children, }) => {
16
15
  address,
17
16
  network,
18
17
  name: ellipsisFn(address),
19
- source: "vault",
18
+ source: 'vault',
20
19
  index,
21
20
  };
22
21
  newVaultAccounts = [...newVaultAccounts].concat(account);
23
- localStorage.setItem("polkadot_vault_accounts", JSON.stringify(newVaultAccounts));
22
+ localStorage.setItem('polkadot_vault_accounts', JSON.stringify(newVaultAccounts));
24
23
  setStateWithRef(newVaultAccounts.filter((a) => a.network === network), seVaultAccountsState, vaultAccountsRef);
25
- if (typeof callback === "function") {
24
+ if (typeof callback === 'function') {
26
25
  callback();
27
26
  }
28
27
  return account;
@@ -41,13 +40,13 @@ export const VaultAccountsProvider = ({ children, }) => {
41
40
  return false;
42
41
  });
43
42
  if (!newVaultAccounts.length) {
44
- localStorage.removeItem("polkadot_vault_accounts");
43
+ localStorage.removeItem('polkadot_vault_accounts');
45
44
  }
46
45
  else {
47
- localStorage.setItem("polkadot_vault_accounts", JSON.stringify(newVaultAccounts));
46
+ localStorage.setItem('polkadot_vault_accounts', JSON.stringify(newVaultAccounts));
48
47
  }
49
48
  setStateWithRef(newVaultAccounts.filter((a) => a.network === network), seVaultAccountsState, vaultAccountsRef);
50
- if (typeof callback === "function") {
49
+ if (typeof callback === 'function') {
51
50
  callback();
52
51
  }
53
52
  };
@@ -66,7 +65,7 @@ export const VaultAccountsProvider = ({ children, }) => {
66
65
  name: newName,
67
66
  }
68
67
  : a);
69
- localStorage.setItem("polkadot_vault_accounts", JSON.stringify(newVaultAccounts));
68
+ localStorage.setItem('polkadot_vault_accounts', JSON.stringify(newVaultAccounts));
70
69
  setStateWithRef(newVaultAccounts.filter((a) => a.network === network), seVaultAccountsState, vaultAccountsRef);
71
70
  };
72
71
  const getVaultAccounts = (network) => vaultAccountsRef.current.filter((a) => a.network === network);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/VaultAccountsProvider/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 { ellipsisFn, setStateWithRef } from \"@w3ux/utils\";\nimport { createContext, useContext, useRef, useState } from \"react\";\nimport { getLocalVaultAccounts, isLocalNetworkAddress } from \"./utils\";\nimport type {\n VaultAccountsContextInterface,\n VaultAccountsProviderProps,\n} from \"./types\";\nimport { defaultVaultAccountsContext } from \"./defaults\";\nimport { VaultAccount } from \"@w3ux/types\";\n\nexport const VaultAccountsContext =\n createContext<VaultAccountsContextInterface>(defaultVaultAccountsContext);\n\nexport const useVaultAccounts = () => useContext(VaultAccountsContext);\n\nexport const VaultAccountsProvider = ({\n children,\n}: VaultAccountsProviderProps) => {\n const [vaultAccounts, seVaultAccountsState] = useState<VaultAccount[]>(\n getLocalVaultAccounts()\n );\n const vaultAccountsRef = useRef(vaultAccounts);\n\n // Check if a Vault address exists in imported addresses.\n const vaultAccountExists = (network: string, address: string) =>\n !!getLocalVaultAccounts().find((a) =>\n isLocalNetworkAddress(network, a, address)\n );\n\n // Adds a vault account to state and local storage.\n const addVaultAccount = (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => {\n let newVaultAccounts = getLocalVaultAccounts();\n\n if (\n !newVaultAccounts.find((a) => isLocalNetworkAddress(network, a, address))\n ) {\n const account = {\n address,\n network,\n name: ellipsisFn(address),\n source: \"vault\",\n index,\n };\n\n newVaultAccounts = [...newVaultAccounts].concat(account);\n localStorage.setItem(\n \"polkadot_vault_accounts\",\n JSON.stringify(newVaultAccounts)\n );\n\n // store only those accounts on the current network in state.\n setStateWithRef(\n newVaultAccounts.filter((a) => a.network === network),\n seVaultAccountsState,\n vaultAccountsRef\n );\n\n // Handle optional callback function.\n if (typeof callback === \"function\") {\n callback();\n }\n\n return account;\n }\n return null;\n };\n\n const removeVaultAccount = (\n network: string,\n address: string,\n callback?: () => void\n ) => {\n let newVaultAccounts = getLocalVaultAccounts();\n\n newVaultAccounts = newVaultAccounts.filter((a) => {\n if (a.address !== address) {\n return true;\n }\n if (a.network !== network) {\n return true;\n }\n return false;\n });\n\n if (!newVaultAccounts.length) {\n localStorage.removeItem(\"polkadot_vault_accounts\");\n } else {\n localStorage.setItem(\n \"polkadot_vault_accounts\",\n JSON.stringify(newVaultAccounts)\n );\n }\n setStateWithRef(\n newVaultAccounts.filter((a) => a.network === network),\n seVaultAccountsState,\n vaultAccountsRef\n );\n\n // Handle optional callback function.\n if (typeof callback === \"function\") {\n callback();\n }\n };\n\n const getVaultAccount = (network: string, address: string) => {\n const localVaultAccounts = getLocalVaultAccounts();\n if (!localVaultAccounts) {\n return null;\n }\n return (\n localVaultAccounts.find((a) =>\n isLocalNetworkAddress(network, a, address)\n ) ?? null\n );\n };\n\n const renameVaultAccount = (\n network: string,\n address: string,\n newName: string\n ) => {\n let newVaultAccounts = getLocalVaultAccounts();\n\n newVaultAccounts = newVaultAccounts.map((a) =>\n isLocalNetworkAddress(network, a, address)\n ? {\n ...a,\n name: newName,\n }\n : a\n );\n localStorage.setItem(\n \"polkadot_vault_accounts\",\n JSON.stringify(newVaultAccounts)\n );\n setStateWithRef(\n newVaultAccounts.filter((a) => a.network === network),\n seVaultAccountsState,\n vaultAccountsRef\n );\n };\n\n // Gets Vault accounts for a network.\n const getVaultAccounts = (network: string) =>\n vaultAccountsRef.current.filter((a) => a.network === network);\n\n return (\n <VaultAccountsContext.Provider\n value={{\n vaultAccountExists,\n addVaultAccount,\n removeVaultAccount,\n renameVaultAccount,\n getVaultAccount,\n getVaultAccounts,\n vaultAccounts: vaultAccountsRef.current,\n }}\n >\n {children}\n </VaultAccountsContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/VaultAccountsProvider/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 } from '@w3ux/hooks'\nimport type { VaultAccount } from '@w3ux/types'\nimport { ellipsisFn, setStateWithRef } from '@w3ux/utils'\nimport { useRef, useState } from 'react'\nimport type {\n VaultAccountsContextInterface,\n VaultAccountsProviderProps,\n} from './types'\nimport { getLocalVaultAccounts, isLocalNetworkAddress } from './utils'\n\nexport const [VaultAccountsContext, useVaultAccounts] =\n createSafeContext<VaultAccountsContextInterface>()\n\nexport const VaultAccountsProvider = ({\n children,\n}: VaultAccountsProviderProps) => {\n const [vaultAccounts, seVaultAccountsState] = useState<VaultAccount[]>(\n getLocalVaultAccounts()\n )\n const vaultAccountsRef = useRef(vaultAccounts)\n\n // Check if a Vault address exists in imported addresses.\n const vaultAccountExists = (network: string, address: string) =>\n !!getLocalVaultAccounts().find((a) =>\n isLocalNetworkAddress(network, a, address)\n )\n\n // Adds a vault account to state and local storage.\n const addVaultAccount = (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => {\n let newVaultAccounts = getLocalVaultAccounts()\n\n if (\n !newVaultAccounts.find((a) => isLocalNetworkAddress(network, a, address))\n ) {\n const account = {\n address,\n network,\n name: ellipsisFn(address),\n source: 'vault',\n index,\n }\n\n newVaultAccounts = [...newVaultAccounts].concat(account)\n localStorage.setItem(\n 'polkadot_vault_accounts',\n JSON.stringify(newVaultAccounts)\n )\n\n // store only those accounts on the current network in state.\n setStateWithRef(\n newVaultAccounts.filter((a) => a.network === network),\n seVaultAccountsState,\n vaultAccountsRef\n )\n\n // Handle optional callback function.\n if (typeof callback === 'function') {\n callback()\n }\n\n return account\n }\n return null\n }\n\n const removeVaultAccount = (\n network: string,\n address: string,\n callback?: () => void\n ) => {\n let newVaultAccounts = getLocalVaultAccounts()\n\n newVaultAccounts = newVaultAccounts.filter((a) => {\n if (a.address !== address) {\n return true\n }\n if (a.network !== network) {\n return true\n }\n return false\n })\n\n if (!newVaultAccounts.length) {\n localStorage.removeItem('polkadot_vault_accounts')\n } else {\n localStorage.setItem(\n 'polkadot_vault_accounts',\n JSON.stringify(newVaultAccounts)\n )\n }\n setStateWithRef(\n newVaultAccounts.filter((a) => a.network === network),\n seVaultAccountsState,\n vaultAccountsRef\n )\n\n // Handle optional callback function.\n if (typeof callback === 'function') {\n callback()\n }\n }\n\n const getVaultAccount = (network: string, address: string) => {\n const localVaultAccounts = getLocalVaultAccounts()\n if (!localVaultAccounts) {\n return null\n }\n return (\n localVaultAccounts.find((a) =>\n isLocalNetworkAddress(network, a, address)\n ) ?? null\n )\n }\n\n const renameVaultAccount = (\n network: string,\n address: string,\n newName: string\n ) => {\n let newVaultAccounts = getLocalVaultAccounts()\n\n newVaultAccounts = newVaultAccounts.map((a) =>\n isLocalNetworkAddress(network, a, address)\n ? {\n ...a,\n name: newName,\n }\n : a\n )\n localStorage.setItem(\n 'polkadot_vault_accounts',\n JSON.stringify(newVaultAccounts)\n )\n setStateWithRef(\n newVaultAccounts.filter((a) => a.network === network),\n seVaultAccountsState,\n vaultAccountsRef\n )\n }\n\n // Gets Vault accounts for a network.\n const getVaultAccounts = (network: string) =>\n vaultAccountsRef.current.filter((a) => a.network === network)\n\n return (\n <VaultAccountsContext.Provider\n value={{\n vaultAccountExists,\n addVaultAccount,\n removeVaultAccount,\n renameVaultAccount,\n getVaultAccount,\n getVaultAccounts,\n vaultAccounts: vaultAccountsRef.current,\n }}\n >\n {children}\n </VaultAccountsContext.Provider>\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { VaultAccount } from "@w3ux/types";
2
- import { ReactNode } from "react";
1
+ import type { VaultAccount } from '@w3ux/types';
2
+ import type { ReactNode } from 'react';
3
3
  export interface VaultAccountsProviderProps {
4
4
  children: ReactNode;
5
5
  network: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/VaultAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { VaultAccount } from \"@w3ux/types\";\nimport { ReactNode } from \"react\";\n\nexport interface VaultAccountsProviderProps {\n children: ReactNode;\n network: string;\n}\n\nexport interface VaultAccountsContextInterface {\n vaultAccountExists: (network: string, address: string) => boolean;\n addVaultAccount: (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => VaultAccount | null;\n removeVaultAccount: (\n network: string,\n address: string,\n callback?: () => void\n ) => void;\n renameVaultAccount: (\n network: string,\n address: string,\n newName: string\n ) => void;\n getVaultAccount: (network: string, address: string) => VaultAccount | null;\n getVaultAccounts: (network: string) => VaultAccount[];\n vaultAccounts: VaultAccount[];\n}\n"]}
1
+ {"version":3,"sources":["../src/VaultAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { VaultAccount } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface VaultAccountsProviderProps {\n children: ReactNode\n network: string\n}\n\nexport interface VaultAccountsContextInterface {\n vaultAccountExists: (network: string, address: string) => boolean\n addVaultAccount: (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => VaultAccount | null\n removeVaultAccount: (\n network: string,\n address: string,\n callback?: () => void\n ) => void\n renameVaultAccount: (\n network: string,\n address: string,\n newName: string\n ) => void\n getVaultAccount: (network: string, address: string) => VaultAccount | null\n getVaultAccounts: (network: string) => VaultAccount[]\n vaultAccounts: VaultAccount[]\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { VaultAccount } from "@w3ux/types";
1
+ import type { VaultAccount } from '@w3ux/types';
2
2
  export declare const getLocalVaultAccounts: (network?: string) => VaultAccount[];
3
3
  export declare const isLocalNetworkAddress: (chain: string, a: {
4
4
  address: string | undefined;
@@ -1,6 +1,6 @@
1
- import { localStorageOrDefault } from "@w3ux/utils";
1
+ import { localStorageOrDefault } from '@w3ux/utils';
2
2
  export const getLocalVaultAccounts = (network) => {
3
- const localAddresses = localStorageOrDefault("polkadot_vault_accounts", [], true);
3
+ const localAddresses = localStorageOrDefault('polkadot_vault_accounts', [], true);
4
4
  return network
5
5
  ? localAddresses.filter((a) => a.network === network)
6
6
  : localAddresses;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/VaultAccountsProvider/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACxD,MAAM,cAAc,GAAG,qBAAqB,CAC1C,yBAAyB,EACzB,EAAE,EACF,IAAI,CACa,CAAC;IAEpB,OAAO,OAAO;QACZ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QACrD,CAAC,CAAC,cAAc,CAAC;AACrB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAa,EACb,CAAmD,EACnD,OAAe,EACf,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { VaultAccount } from \"@w3ux/types\";\nimport { localStorageOrDefault } from \"@w3ux/utils\";\n\n// Gets imported Vault accounts from local storage.\nexport const getLocalVaultAccounts = (network?: string) => {\n const localAddresses = localStorageOrDefault(\n \"polkadot_vault_accounts\",\n [],\n true\n ) as VaultAccount[];\n\n return network\n ? localAddresses.filter((a) => a.network === network)\n : localAddresses;\n};\n\n// Gets whether an address is a local network address.\nexport const isLocalNetworkAddress = (\n chain: string,\n a: { address: string | undefined; network: string },\n address: string\n) => a.address === address && a.network === chain;\n"]}
1
+ {"version":3,"sources":["../src/VaultAccountsProvider/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACxD,MAAM,cAAc,GAAG,qBAAqB,CAC1C,yBAAyB,EACzB,EAAE,EACF,IAAI,CACa,CAAA;IAEnB,OAAO,OAAO;QACZ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QACrD,CAAC,CAAC,cAAc,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAa,EACb,CAAmD,EACnD,OAAe,EACf,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAA","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { VaultAccount } from '@w3ux/types'\nimport { localStorageOrDefault } from '@w3ux/utils'\n\n// Gets imported Vault accounts from local storage.\nexport const getLocalVaultAccounts = (network?: string) => {\n const localAddresses = localStorageOrDefault(\n 'polkadot_vault_accounts',\n [],\n true\n ) as VaultAccount[]\n\n return network\n ? localAddresses.filter((a) => a.network === network)\n : localAddresses\n}\n\n// Gets whether an address is a local network address.\nexport const isLocalNetworkAddress = (\n chain: string,\n a: { address: string | undefined; network: string },\n address: string\n) => a.address === address && a.network === chain\n"]}
@@ -1,4 +1,3 @@
1
- import type { WCAccountsContextInterface, WCAccountsProviderProps } from "./types";
2
- export declare const WCAccountsContext: import("react").Context<WCAccountsContextInterface>;
3
- export declare const useWcAccounts: () => WCAccountsContextInterface;
1
+ import type { WCAccountsContextInterface, WCAccountsProviderProps } from './types';
2
+ export declare const WCAccountsContext: import("react").Context<WCAccountsContextInterface>, useWcAccounts: () => WCAccountsContextInterface;
4
3
  export declare const WCAccountsProvider: ({ children }: WCAccountsProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { ellipsisFn, setStateWithRef } from "@w3ux/utils";
3
- import { createContext, useContext, useRef, useState } from "react";
4
- import { getLocalWcAccounts, isLocalNetworkAddress } from "./utils";
5
- import { defaultWcAccountsContext } from "./defaults";
6
- export const WCAccountsContext = createContext(defaultWcAccountsContext);
7
- export const useWcAccounts = () => useContext(WCAccountsContext);
2
+ import { createSafeContext } from '@w3ux/hooks';
3
+ import { ellipsisFn, setStateWithRef } from '@w3ux/utils';
4
+ import { useRef, useState } from 'react';
5
+ import { getLocalWcAccounts, isLocalNetworkAddress } from './utils';
6
+ export const [WCAccountsContext, useWcAccounts] = createSafeContext();
8
7
  export const WCAccountsProvider = ({ children }) => {
9
8
  const [wcAccounts, setWcAccountsState] = useState(getLocalWcAccounts());
10
9
  const wcAccountsRef = useRef(wcAccounts);
@@ -16,13 +15,13 @@ export const WCAccountsProvider = ({ children }) => {
16
15
  address,
17
16
  network,
18
17
  name: ellipsisFn(address),
19
- source: "wallet_connect",
18
+ source: 'wallet_connect',
20
19
  index,
21
20
  };
22
21
  newAccounts = [...newAccounts].concat(account);
23
- localStorage.setItem("wallet_connect_accounts", JSON.stringify(newAccounts));
22
+ localStorage.setItem('wallet_connect_accounts', JSON.stringify(newAccounts));
24
23
  setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef);
25
- if (typeof callback === "function") {
24
+ if (typeof callback === 'function') {
26
25
  callback();
27
26
  }
28
27
  return account;
@@ -41,13 +40,13 @@ export const WCAccountsProvider = ({ children }) => {
41
40
  return false;
42
41
  });
43
42
  if (!newAccounts.length) {
44
- localStorage.removeItem("wallet_connect_accounts");
43
+ localStorage.removeItem('wallet_connect_accounts');
45
44
  }
46
45
  else {
47
- localStorage.setItem("wallet_connect_accounts", JSON.stringify(newAccounts));
46
+ localStorage.setItem('wallet_connect_accounts', JSON.stringify(newAccounts));
48
47
  }
49
48
  setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef);
50
- if (typeof callback === "function") {
49
+ if (typeof callback === 'function') {
51
50
  callback();
52
51
  }
53
52
  };
@@ -59,7 +58,7 @@ export const WCAccountsProvider = ({ children }) => {
59
58
  name: newName,
60
59
  }
61
60
  : a);
62
- localStorage.setItem("wallet_connect_accounts", JSON.stringify(newAccounts));
61
+ localStorage.setItem('wallet_connect_accounts', JSON.stringify(newAccounts));
63
62
  setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef);
64
63
  };
65
64
  const getWcAccounts = (network) => wcAccountsRef.current.filter((a) => a.network === network);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/WCAccountsProvider/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 { ellipsisFn, setStateWithRef } from \"@w3ux/utils\";\nimport { createContext, useContext, useRef, useState } from \"react\";\nimport { getLocalWcAccounts, isLocalNetworkAddress } from \"./utils\";\nimport type {\n WCAccountsContextInterface,\n WCAccountsProviderProps,\n} from \"./types\";\nimport { defaultWcAccountsContext } from \"./defaults\";\nimport { WCAccount } from \"@w3ux/types\";\n\nexport const WCAccountsContext = createContext<WCAccountsContextInterface>(\n defaultWcAccountsContext\n);\n\nexport const useWcAccounts = () => useContext(WCAccountsContext);\n\nexport const WCAccountsProvider = ({ children }: WCAccountsProviderProps) => {\n const [wcAccounts, setWcAccountsState] =\n useState<WCAccount[]>(getLocalWcAccounts());\n const wcAccountsRef = useRef(wcAccounts);\n\n // Check if a Wallet Connect address exists in imported addresses.\n const wcAccountExists = (network: string, address: string) =>\n !!wcAccountsRef.current.find((a) =>\n isLocalNetworkAddress(network, a, address)\n );\n\n // Adds a wallet connect account to state and local storage.\n const addWcAccount = (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => {\n let newAccounts = [...wcAccountsRef.current];\n\n if (!newAccounts.find((a) => isLocalNetworkAddress(network, a, address))) {\n const account = {\n address,\n network,\n name: ellipsisFn(address),\n source: \"wallet_connect\",\n index,\n };\n\n newAccounts = [...newAccounts].concat(account);\n localStorage.setItem(\n \"wallet_connect_accounts\",\n JSON.stringify(newAccounts)\n );\n\n // Persist the new accounts to state.\n setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef);\n\n // Handle optional callback function.\n if (typeof callback === \"function\") {\n callback();\n }\n\n return account;\n }\n return null;\n };\n\n const removeWcAccount = (\n network: string,\n address: string,\n callback?: () => void\n ) => {\n let newAccounts = [...wcAccountsRef.current];\n\n newAccounts = newAccounts.filter((a) => {\n if (a.address !== address) {\n return true;\n }\n if (a.network !== network) {\n return true;\n }\n return false;\n });\n\n if (!newAccounts.length) {\n localStorage.removeItem(\"wallet_connect_accounts\");\n } else {\n localStorage.setItem(\n \"wallet_connect_accounts\",\n JSON.stringify(newAccounts)\n );\n }\n setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef);\n\n // Handle optional callback function.\n if (typeof callback === \"function\") {\n callback();\n }\n };\n\n const getWcAccount = (network: string, address: string) =>\n wcAccountsRef.current.find((a) =>\n isLocalNetworkAddress(network, a, address)\n ) ?? null;\n\n const renameWcAccount = (\n network: string,\n address: string,\n newName: string\n ) => {\n const newAccounts = wcAccountsRef.current.map((a) =>\n isLocalNetworkAddress(network, a, address)\n ? {\n ...a,\n name: newName,\n }\n : a\n );\n localStorage.setItem(\n \"wallet_connect_accounts\",\n JSON.stringify(newAccounts)\n );\n\n setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef);\n };\n\n // Gets Wallet Connect accounts for a network.\n const getWcAccounts = (network: string) =>\n wcAccountsRef.current.filter((a) => a.network === network);\n\n return (\n <WCAccountsContext.Provider\n value={{\n wcAccountExists,\n addWcAccount,\n removeWcAccount,\n renameWcAccount,\n getWcAccount,\n getWcAccounts,\n wcAccounts: wcAccountsRef.current,\n }}\n >\n {children}\n </WCAccountsContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/WCAccountsProvider/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 } from '@w3ux/hooks'\nimport type { WCAccount } from '@w3ux/types'\nimport { ellipsisFn, setStateWithRef } from '@w3ux/utils'\nimport { useRef, useState } from 'react'\nimport type {\n WCAccountsContextInterface,\n WCAccountsProviderProps,\n} from './types'\nimport { getLocalWcAccounts, isLocalNetworkAddress } from './utils'\n\nexport const [WCAccountsContext, useWcAccounts] =\n createSafeContext<WCAccountsContextInterface>()\n\nexport const WCAccountsProvider = ({ children }: WCAccountsProviderProps) => {\n const [wcAccounts, setWcAccountsState] =\n useState<WCAccount[]>(getLocalWcAccounts())\n const wcAccountsRef = useRef(wcAccounts)\n\n // Check if a Wallet Connect address exists in imported addresses.\n const wcAccountExists = (network: string, address: string) =>\n !!wcAccountsRef.current.find((a) =>\n isLocalNetworkAddress(network, a, address)\n )\n\n // Adds a wallet connect account to state and local storage.\n const addWcAccount = (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => {\n let newAccounts = [...wcAccountsRef.current]\n\n if (!newAccounts.find((a) => isLocalNetworkAddress(network, a, address))) {\n const account = {\n address,\n network,\n name: ellipsisFn(address),\n source: 'wallet_connect',\n index,\n }\n\n newAccounts = [...newAccounts].concat(account)\n localStorage.setItem(\n 'wallet_connect_accounts',\n JSON.stringify(newAccounts)\n )\n\n // Persist the new accounts to state.\n setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef)\n\n // Handle optional callback function.\n if (typeof callback === 'function') {\n callback()\n }\n\n return account\n }\n return null\n }\n\n const removeWcAccount = (\n network: string,\n address: string,\n callback?: () => void\n ) => {\n let newAccounts = [...wcAccountsRef.current]\n\n newAccounts = newAccounts.filter((a) => {\n if (a.address !== address) {\n return true\n }\n if (a.network !== network) {\n return true\n }\n return false\n })\n\n if (!newAccounts.length) {\n localStorage.removeItem('wallet_connect_accounts')\n } else {\n localStorage.setItem(\n 'wallet_connect_accounts',\n JSON.stringify(newAccounts)\n )\n }\n setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef)\n\n // Handle optional callback function.\n if (typeof callback === 'function') {\n callback()\n }\n }\n\n const getWcAccount = (network: string, address: string) =>\n wcAccountsRef.current.find((a) =>\n isLocalNetworkAddress(network, a, address)\n ) ?? null\n\n const renameWcAccount = (\n network: string,\n address: string,\n newName: string\n ) => {\n const newAccounts = wcAccountsRef.current.map((a) =>\n isLocalNetworkAddress(network, a, address)\n ? {\n ...a,\n name: newName,\n }\n : a\n )\n localStorage.setItem('wallet_connect_accounts', JSON.stringify(newAccounts))\n\n setStateWithRef(newAccounts, setWcAccountsState, wcAccountsRef)\n }\n\n // Gets Wallet Connect accounts for a network.\n const getWcAccounts = (network: string) =>\n wcAccountsRef.current.filter((a) => a.network === network)\n\n return (\n <WCAccountsContext.Provider\n value={{\n wcAccountExists,\n addWcAccount,\n removeWcAccount,\n renameWcAccount,\n getWcAccount,\n getWcAccounts,\n wcAccounts: wcAccountsRef.current,\n }}\n >\n {children}\n </WCAccountsContext.Provider>\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { WCAccount } from "@w3ux/types";
2
- import { ReactNode } from "react";
1
+ import type { WCAccount } from '@w3ux/types';
2
+ import type { ReactNode } from 'react';
3
3
  export interface WCAccountsProviderProps {
4
4
  children: ReactNode;
5
5
  network: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/WCAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { WCAccount } from \"@w3ux/types\";\nimport { ReactNode } from \"react\";\n\nexport interface WCAccountsProviderProps {\n children: ReactNode;\n network: string;\n}\n\nexport interface WCAccountsContextInterface {\n wcAccountExists: (network: string, address: string) => boolean;\n addWcAccount: (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => WCAccount | null;\n removeWcAccount: (\n network: string,\n address: string,\n callback?: () => void\n ) => void;\n renameWcAccount: (network: string, address: string, newName: string) => void;\n getWcAccount: (network: string, address: string) => WCAccount | null;\n getWcAccounts: (network: string) => WCAccount[];\n wcAccounts: WCAccount[];\n}\n"]}
1
+ {"version":3,"sources":["../src/WCAccountsProvider/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { WCAccount } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface WCAccountsProviderProps {\n children: ReactNode\n network: string\n}\n\nexport interface WCAccountsContextInterface {\n wcAccountExists: (network: string, address: string) => boolean\n addWcAccount: (\n network: string,\n address: string,\n index: number,\n callback?: () => void\n ) => WCAccount | null\n removeWcAccount: (\n network: string,\n address: string,\n callback?: () => void\n ) => void\n renameWcAccount: (network: string, address: string, newName: string) => void\n getWcAccount: (network: string, address: string) => WCAccount | null\n getWcAccounts: (network: string) => WCAccount[]\n wcAccounts: WCAccount[]\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { WCAccount } from "@w3ux/types";
1
+ import type { WCAccount } from '@w3ux/types';
2
2
  export declare const getLocalWcAccounts: (network?: string) => WCAccount[];
3
3
  export declare const isLocalNetworkAddress: (chain: string, a: {
4
4
  address: string | undefined;