@w3ux/react-connect-kit 1.2.0 → 1.3.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/cjs/ExtensionAccountsProvider/Extensions.js +129 -0
  2. package/cjs/ExtensionAccountsProvider/Extensions.js.map +1 -0
  3. package/cjs/ExtensionAccountsProvider/defaults.js +20 -0
  4. package/cjs/ExtensionAccountsProvider/defaults.js.map +1 -0
  5. package/cjs/ExtensionAccountsProvider/index.js +242 -0
  6. package/cjs/ExtensionAccountsProvider/index.js.map +1 -0
  7. package/cjs/ExtensionAccountsProvider/snap.js +73 -0
  8. package/cjs/ExtensionAccountsProvider/snap.js.map +1 -0
  9. package/cjs/ExtensionAccountsProvider/types.js +6 -0
  10. package/cjs/ExtensionAccountsProvider/types.js.map +1 -0
  11. package/cjs/ExtensionAccountsProvider/useImportExtension.js +53 -0
  12. package/cjs/ExtensionAccountsProvider/useImportExtension.js.map +1 -0
  13. package/cjs/ExtensionAccountsProvider/utils.js +47 -0
  14. package/cjs/ExtensionAccountsProvider/utils.js.map +1 -0
  15. package/cjs/ExtensionsProvider/defaults.js +16 -0
  16. package/cjs/ExtensionsProvider/defaults.js.map +1 -0
  17. package/cjs/ExtensionsProvider/index.js +117 -0
  18. package/cjs/ExtensionsProvider/index.js.map +1 -0
  19. package/cjs/ExtensionsProvider/types.js +6 -0
  20. package/cjs/ExtensionsProvider/types.js.map +1 -0
  21. package/cjs/ExtensionsProvider/utils.js +40 -0
  22. package/cjs/ExtensionsProvider/utils.js.map +1 -0
  23. package/cjs/LedgerAccountsProvider/defaults.js +16 -0
  24. package/cjs/LedgerAccountsProvider/defaults.js.map +1 -0
  25. package/cjs/LedgerAccountsProvider/index.js +88 -0
  26. package/cjs/LedgerAccountsProvider/index.js.map +1 -0
  27. package/cjs/LedgerAccountsProvider/types.js +6 -0
  28. package/cjs/LedgerAccountsProvider/types.js.map +1 -0
  29. package/cjs/LedgerAccountsProvider/utils.js +34 -0
  30. package/cjs/LedgerAccountsProvider/utils.js.map +1 -0
  31. package/cjs/VaultAccountsProvider/defaults.js +16 -0
  32. package/cjs/VaultAccountsProvider/defaults.js.map +1 -0
  33. package/cjs/VaultAccountsProvider/index.js +88 -0
  34. package/cjs/VaultAccountsProvider/index.js.map +1 -0
  35. package/cjs/VaultAccountsProvider/types.js +6 -0
  36. package/cjs/VaultAccountsProvider/types.js.map +1 -0
  37. package/cjs/VaultAccountsProvider/utils.js +17 -0
  38. package/cjs/VaultAccountsProvider/utils.js.map +1 -0
  39. package/cjs/index.js +24 -0
  40. package/cjs/index.js.map +1 -0
  41. package/cjs/types.js +24 -0
  42. package/cjs/types.js.map +1 -0
  43. package/mjs/ExtensionAccountsProvider/Extensions.d.ts +13 -0
  44. package/mjs/ExtensionAccountsProvider/Extensions.js +114 -0
  45. package/mjs/ExtensionAccountsProvider/Extensions.js.map +1 -0
  46. package/mjs/ExtensionAccountsProvider/defaults.d.ts +10 -0
  47. package/mjs/ExtensionAccountsProvider/defaults.js +17 -0
  48. package/mjs/ExtensionAccountsProvider/defaults.js.map +1 -0
  49. package/mjs/ExtensionAccountsProvider/index.d.ts +5 -0
  50. package/mjs/ExtensionAccountsProvider/index.js +227 -0
  51. package/mjs/ExtensionAccountsProvider/index.js.map +1 -0
  52. package/mjs/ExtensionAccountsProvider/snap.d.ts +2 -0
  53. package/mjs/ExtensionAccountsProvider/snap.js +60 -0
  54. package/mjs/ExtensionAccountsProvider/snap.js.map +1 -0
  55. package/mjs/ExtensionAccountsProvider/types.d.ts +24 -0
  56. package/mjs/ExtensionAccountsProvider/types.js +5 -0
  57. package/mjs/ExtensionAccountsProvider/types.js.map +1 -0
  58. package/mjs/ExtensionAccountsProvider/useImportExtension.d.ts +6 -0
  59. package/mjs/ExtensionAccountsProvider/useImportExtension.js +45 -0
  60. package/mjs/ExtensionAccountsProvider/useImportExtension.js.map +1 -0
  61. package/mjs/ExtensionAccountsProvider/utils.d.ts +8 -0
  62. package/mjs/ExtensionAccountsProvider/utils.js +34 -0
  63. package/mjs/ExtensionAccountsProvider/utils.js.map +1 -0
  64. package/mjs/ExtensionsProvider/defaults.d.ts +2 -0
  65. package/mjs/ExtensionsProvider/defaults.js +13 -0
  66. package/mjs/ExtensionsProvider/defaults.js.map +1 -0
  67. package/mjs/ExtensionsProvider/index.d.ts +11 -0
  68. package/mjs/ExtensionsProvider/index.js +106 -0
  69. package/mjs/ExtensionsProvider/index.js.map +1 -0
  70. package/mjs/ExtensionsProvider/types.d.ts +44 -0
  71. package/mjs/ExtensionsProvider/types.js +5 -0
  72. package/mjs/ExtensionsProvider/types.js.map +1 -0
  73. package/mjs/ExtensionsProvider/utils.d.ts +20 -0
  74. package/mjs/ExtensionsProvider/utils.js +26 -0
  75. package/mjs/ExtensionsProvider/utils.js.map +1 -0
  76. package/mjs/LedgerAccountsProvider/defaults.d.ts +2 -0
  77. package/mjs/LedgerAccountsProvider/defaults.js +13 -0
  78. package/mjs/LedgerAccountsProvider/defaults.js.map +1 -0
  79. package/mjs/LedgerAccountsProvider/index.d.ts +5 -0
  80. package/mjs/LedgerAccountsProvider/index.js +87 -0
  81. package/mjs/LedgerAccountsProvider/index.js.map +1 -0
  82. package/mjs/LedgerAccountsProvider/types.d.ts +21 -0
  83. package/mjs/LedgerAccountsProvider/types.js +5 -0
  84. package/mjs/LedgerAccountsProvider/types.js.map +1 -0
  85. package/mjs/LedgerAccountsProvider/utils.d.ts +9 -0
  86. package/mjs/LedgerAccountsProvider/utils.js +29 -0
  87. package/mjs/LedgerAccountsProvider/utils.js.map +1 -0
  88. package/mjs/VaultAccountsProvider/defaults.d.ts +2 -0
  89. package/mjs/VaultAccountsProvider/defaults.js +13 -0
  90. package/mjs/VaultAccountsProvider/defaults.js.map +1 -0
  91. package/mjs/VaultAccountsProvider/index.d.ts +5 -0
  92. package/mjs/VaultAccountsProvider/index.js +86 -0
  93. package/mjs/VaultAccountsProvider/index.js.map +1 -0
  94. package/mjs/VaultAccountsProvider/types.d.ts +15 -0
  95. package/mjs/VaultAccountsProvider/types.js +5 -0
  96. package/mjs/VaultAccountsProvider/types.js.map +1 -0
  97. package/mjs/VaultAccountsProvider/utils.d.ts +6 -0
  98. package/mjs/VaultAccountsProvider/utils.js +12 -0
  99. package/mjs/VaultAccountsProvider/utils.js.map +1 -0
  100. package/{index.js → mjs/index.d.ts} +0 -2
  101. package/mjs/index.js +8 -0
  102. package/mjs/index.js.map +1 -0
  103. package/mjs/types.d.ts +39 -0
  104. package/{types.js → mjs/types.js} +2 -0
  105. package/mjs/types.js.map +1 -0
  106. package/package.json +12 -5
  107. package/ExtensionAccountsProvider/Extensions.js +0 -206
  108. package/ExtensionAccountsProvider/Extensions.js.map +0 -1
  109. package/ExtensionAccountsProvider/defaults.js +0 -15
  110. package/ExtensionAccountsProvider/defaults.js.map +0 -1
  111. package/ExtensionAccountsProvider/index.js +0 -344
  112. package/ExtensionAccountsProvider/index.js.map +0 -1
  113. package/ExtensionAccountsProvider/snap.js +0 -129
  114. package/ExtensionAccountsProvider/snap.js.map +0 -1
  115. package/ExtensionAccountsProvider/types.js +0 -3
  116. package/ExtensionAccountsProvider/types.js.map +0 -1
  117. package/ExtensionAccountsProvider/useImportExtension.js +0 -65
  118. package/ExtensionAccountsProvider/useImportExtension.js.map +0 -1
  119. package/ExtensionAccountsProvider/utils.js +0 -37
  120. package/ExtensionAccountsProvider/utils.js.map +0 -1
  121. package/ExtensionsProvider/defaults.js +0 -11
  122. package/ExtensionsProvider/defaults.js.map +0 -1
  123. package/ExtensionsProvider/index.js +0 -165
  124. package/ExtensionsProvider/index.js.map +0 -1
  125. package/ExtensionsProvider/types.js +0 -3
  126. package/ExtensionsProvider/types.js.map +0 -1
  127. package/ExtensionsProvider/utils.js +0 -78
  128. package/ExtensionsProvider/utils.js.map +0 -1
  129. package/LedgerAccountsProvider/defaults.js +0 -11
  130. package/LedgerAccountsProvider/defaults.js.map +0 -1
  131. package/LedgerAccountsProvider/index.js +0 -116
  132. package/LedgerAccountsProvider/index.js.map +0 -1
  133. package/LedgerAccountsProvider/types.js +0 -3
  134. package/LedgerAccountsProvider/types.js.map +0 -1
  135. package/LedgerAccountsProvider/utils.js +0 -38
  136. package/LedgerAccountsProvider/utils.js.map +0 -1
  137. package/VaultAccountsProvider/defaults.js +0 -11
  138. package/VaultAccountsProvider/defaults.js.map +0 -1
  139. package/VaultAccountsProvider/index.js +0 -112
  140. package/VaultAccountsProvider/index.js.map +0 -1
  141. package/VaultAccountsProvider/types.js +0 -3
  142. package/VaultAccountsProvider/types.js.map +0 -1
  143. package/VaultAccountsProvider/utils.js +0 -10
  144. package/VaultAccountsProvider/utils.js.map +0 -1
  145. package/index.js.map +0 -1
  146. package/types.js.map +0 -1
  147. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/Extensions.d.ts +0 -0
  148. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/defaults.d.ts +0 -0
  149. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/index.d.ts +0 -0
  150. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/snap.d.ts +0 -0
  151. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/types.d.ts +0 -0
  152. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/useImportExtension.d.ts +0 -0
  153. /package/{ExtensionAccountsProvider → cjs/ExtensionAccountsProvider}/utils.d.ts +0 -0
  154. /package/{ExtensionsProvider → cjs/ExtensionsProvider}/defaults.d.ts +0 -0
  155. /package/{ExtensionsProvider → cjs/ExtensionsProvider}/index.d.ts +0 -0
  156. /package/{ExtensionsProvider → cjs/ExtensionsProvider}/types.d.ts +0 -0
  157. /package/{ExtensionsProvider → cjs/ExtensionsProvider}/utils.d.ts +0 -0
  158. /package/{LedgerAccountsProvider → cjs/LedgerAccountsProvider}/defaults.d.ts +0 -0
  159. /package/{LedgerAccountsProvider → cjs/LedgerAccountsProvider}/index.d.ts +0 -0
  160. /package/{LedgerAccountsProvider → cjs/LedgerAccountsProvider}/types.d.ts +0 -0
  161. /package/{LedgerAccountsProvider → cjs/LedgerAccountsProvider}/utils.d.ts +0 -0
  162. /package/{VaultAccountsProvider → cjs/VaultAccountsProvider}/defaults.d.ts +0 -0
  163. /package/{VaultAccountsProvider → cjs/VaultAccountsProvider}/index.d.ts +0 -0
  164. /package/{VaultAccountsProvider → cjs/VaultAccountsProvider}/types.d.ts +0 -0
  165. /package/{VaultAccountsProvider → cjs/VaultAccountsProvider}/utils.d.ts +0 -0
  166. /package/{index.d.ts → cjs/index.d.ts} +0 -0
  167. /package/{types.d.ts → cjs/types.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/useImportExtension.tsx"],"names":[],"mappings":";;;;;;AAGA,gEAAwC;AACxC,uCAA6C;AAG7C,mCAAuE;AACvE,yCAAwE;AAGjE,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAIrC,MAAM,qBAAqB,GAAG,CAC5B,EAAU,EACV,eAAmC,EACnC,MAAmB,EACnB,WAA+B,EAC/B,OAAe,EACQ,EAAE;;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,uCAA4B,CAAC;QACtC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,aAAa,CAAC,uBAAY,CAAC,CAAC;QAGpC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,CAAC,CAAC;QAG3E,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAGH,MAAM,UAAU,GAAG,IAAA,6BAAqB,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAG/D,MAAM,eAAe,GAAG,eAAe;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAGpE,MAAM,oBAAoB,GACxB,CAAA,MAAA,eAAe,CAAC,IAAI,CAClB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAC5D,0CAAE,OAAO,KAAI,IAAI,CAAC;QAGrB,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACd,CAAC,eAAe,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CACxD,CACJ,CAAC;QAGF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,OAAO;YACP,IAAI;YACJ,MAAM,EAAE,EAAE;YACV,MAAM;SACP,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,WAAW;YACX,IAAI,EAAE;gBACJ,gBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,eAAe,CAAC;gBACrD,oBAAoB;aACrB;SACF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,qBAAqB;KACtB,CAAC;AACJ,CAAC,CAAC;AAtEW,QAAA,kBAAkB,sBAsE7B","file":"useImportExtension.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport Keyring from \"@polkadot/keyring\";\nimport { isValidAddress } from \"@w3ux/utils\";\nimport type { ExtensionAccount } from \"../ExtensionsProvider/types\";\nimport { HandleImportExtension } from \"./types\";\nimport { getActiveAccountLocal, getInExternalAccounts } from \"./utils\";\nimport { DEFAULT_SS58, defaultHandleImportExtension } from \"./defaults\";\nimport { AnyFunction } from \"@w3ux/types\";\n\nexport const useImportExtension = () => {\n // Handles importing of extension accounts.\n //\n // Gets accounts to be imported and commits them to state.\n const handleImportExtension = (\n id: string,\n currentAccounts: ExtensionAccount[],\n signer: AnyFunction,\n newAccounts: ExtensionAccount[],\n network: string\n ): HandleImportExtension => {\n if (!newAccounts.length) {\n return defaultHandleImportExtension;\n }\n\n const keyring = new Keyring();\n keyring.setSS58Format(DEFAULT_SS58);\n\n // Remove accounts that do not contain correctly formatted addresses.\n newAccounts = newAccounts.filter(({ address }) => isValidAddress(address));\n\n // Reformat addresses to ensure default ss58 format.\n newAccounts.map((account) => {\n const { address } = keyring.addFromAddress(account.address);\n account.address = address;\n return account;\n });\n\n // Remove `newAccounts` from local external accounts if present.\n const inExternal = getInExternalAccounts(newAccounts, network);\n\n // Find any accounts that have been removed from this extension.\n const removedAccounts = currentAccounts\n .filter((j) => j.source === id)\n .filter((j) => !newAccounts.find((i) => i.address === j.address));\n\n // Check whether active account is present in forgotten accounts.\n const removedActiveAccount =\n removedAccounts.find(\n ({ address }) => address === getActiveAccountLocal(network)\n )?.address || null;\n\n // Remove accounts that have already been added to `currentAccounts` via another extension.\n newAccounts = newAccounts.filter(\n ({ address }) =>\n !currentAccounts.find(\n (j) => j.address === address && j.source !== \"external\"\n )\n );\n\n // Format accounts properties.\n newAccounts = newAccounts.map(({ address, name }) => ({\n address,\n name,\n source: id,\n signer,\n }));\n\n return {\n newAccounts,\n meta: {\n accountsToRemove: [...inExternal, ...removedAccounts],\n removedActiveAccount,\n },\n };\n };\n\n return {\n handleImportExtension,\n };\n};\n"]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getLocalExternalAccounts = exports.getInExternalAccounts = exports.connectActiveExtensionAccount = exports.getActiveExtensionAccount = exports.getActiveAccountLocal = void 0;
7
+ const utils_1 = require("@w3ux/utils");
8
+ const keyring_1 = __importDefault(require("@polkadot/keyring"));
9
+ const defaults_1 = require("./defaults");
10
+ const getActiveAccountLocal = (network) => {
11
+ const keyring = new keyring_1.default();
12
+ keyring.setSS58Format(defaults_1.DEFAULT_SS58);
13
+ let account = (0, utils_1.localStorageOrDefault)(`${network}_active_account`, null);
14
+ if (account !== null) {
15
+ account = keyring.addFromAddress(account).address;
16
+ }
17
+ return account;
18
+ };
19
+ exports.getActiveAccountLocal = getActiveAccountLocal;
20
+ const getActiveExtensionAccount = (network, accounts) => {
21
+ var _a;
22
+ return (_a = accounts.find(({ address }) => address === (0, exports.getActiveAccountLocal)(network))) !== null && _a !== void 0 ? _a : null;
23
+ };
24
+ exports.getActiveExtensionAccount = getActiveExtensionAccount;
25
+ const connectActiveExtensionAccount = (account, callback) => {
26
+ if (account !== null) {
27
+ callback(account);
28
+ }
29
+ };
30
+ exports.connectActiveExtensionAccount = connectActiveExtensionAccount;
31
+ const getInExternalAccounts = (accounts, network) => {
32
+ const localExternalAccounts = (0, exports.getLocalExternalAccounts)(network);
33
+ return (localExternalAccounts.filter((a) => (accounts || []).find((b) => b.address === a.address) !== undefined) || []);
34
+ };
35
+ exports.getInExternalAccounts = getInExternalAccounts;
36
+ const getLocalExternalAccounts = (network) => {
37
+ let localAccounts = (0, utils_1.localStorageOrDefault)("external_accounts", [], true);
38
+ if (network) {
39
+ localAccounts = localAccounts.filter((l) => l.network === network);
40
+ }
41
+ return localAccounts;
42
+ };
43
+ exports.getLocalExternalAccounts = getLocalExternalAccounts;
44
+
45
+ //# sourceMappingURL=utils.js.map
46
+
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ExtensionAccountsProvider/utils.ts"],"names":[],"mappings":";;;;;;AAGA,uCAAoD;AACpD,gEAAwC;AAGxC,yCAA0C;AAQnC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAE,EAAE;IACvD,MAAM,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,aAAa,CAAC,uBAAY,CAAC,CAAC;IAEpC,IAAI,OAAO,GAAG,IAAA,6BAAqB,EAAC,GAAG,OAAO,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACvE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAVW,QAAA,qBAAqB,yBAUhC;AAGK,MAAM,yBAAyB,GAAG,CACvC,OAAe,EACf,QAA4B,EAC5B,EAAE;;IACF,OAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC,mCAC1E,IAAI,CAAA;CAAA,CAAC;AALM,QAAA,yBAAyB,6BAK/B;AAGA,MAAM,6BAA6B,GAAG,CAC3C,OAAgC,EAChC,QAAqB,EACrB,EAAE;IACF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAPW,QAAA,6BAA6B,iCAOxC;AAOK,MAAM,qBAAqB,GAAG,CACnC,QAA4B,EAC5B,OAAe,EACf,EAAE;IACF,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,EAAC,OAAO,CAAC,CAAC;IAEhE,OAAO,CACL,qBAAqB,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAC3E,IAAI,EAAE,CACR,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,qBAAqB,yBAWhC;AAGK,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC3D,IAAI,aAAa,GAAG,IAAA,6BAAqB,EACvC,mBAAmB,EACnB,EAAE,EACF,IAAI,CACgB,CAAC;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from \"@w3ux/utils\";\nimport Keyring from \"@polkadot/keyring\";\nimport { ExtensionAccount } from \"../ExtensionsProvider/types\";\nimport { ExternalAccount } from \"../types\";\nimport { DEFAULT_SS58 } from \"./defaults\";\nimport { AnyFunction } from \"@w3ux/types\";\n\n/*------------------------------------------------------------\n Active account utils.\n ------------------------------------------------------------*/\n\n// Gets local `active_acount` for a network.\nexport const getActiveAccountLocal = (network: string) => {\n const keyring = new Keyring();\n keyring.setSS58Format(DEFAULT_SS58);\n\n let account = localStorageOrDefault(`${network}_active_account`, null);\n if (account !== null) {\n account = keyring.addFromAddress(account).address;\n }\n\n return account;\n};\n\n// Checks if the local active account is the provided accounts.\nexport const getActiveExtensionAccount = (\n network: string,\n accounts: ExtensionAccount[]\n) =>\n accounts.find(({ address }) => address === getActiveAccountLocal(network)) ??\n null;\n\n// Connects to active account, and calls an optional callback, if provided.\nexport const connectActiveExtensionAccount = (\n account: ExtensionAccount | null,\n callback: AnyFunction\n) => {\n if (account !== null) {\n callback(account);\n }\n};\n\n/*------------------------------------------------------------\n External account utils.\n ------------------------------------------------------------*/\n\n// Gets accounts that exist in local `external_accounts`.\nexport const getInExternalAccounts = (\n accounts: ExtensionAccount[],\n network: string\n) => {\n const localExternalAccounts = getLocalExternalAccounts(network);\n\n return (\n localExternalAccounts.filter(\n (a) => (accounts || []).find((b) => b.address === a.address) !== undefined\n ) || []\n );\n};\n\n// Gets local external accounts for a network.\nexport const getLocalExternalAccounts = (network?: string) => {\n let localAccounts = localStorageOrDefault<ExternalAccount[]>(\n \"external_accounts\",\n [],\n true\n ) as ExternalAccount[];\n if (network) {\n localAccounts = localAccounts.filter((l) => l.network === network);\n }\n return localAccounts;\n};\n"]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultExtensionsContext = void 0;
4
+ exports.defaultExtensionsContext = {
5
+ checkingInjectedWeb3: false,
6
+ extensionsStatus: {},
7
+ setExtensionStatus: (id, status) => { },
8
+ removeExtensionStatus: (id) => { },
9
+ extensionInstalled: (id) => false,
10
+ extensionCanConnect: (id) => false,
11
+ extensionHasFeature: (id, feature) => false,
12
+ };
13
+
14
+ //# sourceMappingURL=defaults.js.map
15
+
16
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ExtensionsProvider/defaults.ts"],"names":[],"mappings":";;;AAMa,QAAA,wBAAwB,GAA+B;IAClE,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,CAAC;IACtC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAE,CAAC;IACjC,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK;IACjC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK;IAClC,mBAAmB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK;CAC5C,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function, no-unused-vars */\n\nimport type { ExtensionsContextInterface } from \"./types\";\n\nexport const defaultExtensionsContext: ExtensionsContextInterface = {\n checkingInjectedWeb3: false,\n extensionsStatus: {},\n setExtensionStatus: (id, status) => {},\n removeExtensionStatus: (id) => {},\n extensionInstalled: (id) => false,\n extensionCanConnect: (id) => false,\n extensionHasFeature: (id, feature) => false,\n};\n"]}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ExtensionsProvider = exports.useExtensions = exports.ExtensionsContext = void 0;
16
+ const jsx_runtime_1 = require("react/jsx-runtime");
17
+ const utils_1 = require("@w3ux/utils");
18
+ const react_1 = require("react");
19
+ const defaults_1 = require("./defaults");
20
+ const utils_2 = require("./utils");
21
+ const extension_assets_1 = __importDefault(require("@w3ux/extension-assets"));
22
+ const extension_dapp_1 = require("@polkagate/extension-dapp");
23
+ exports.ExtensionsContext = (0, react_1.createContext)(defaults_1.defaultExtensionsContext);
24
+ const useExtensions = () => (0, react_1.useContext)(exports.ExtensionsContext);
25
+ exports.useExtensions = useExtensions;
26
+ const ExtensionsProvider = ({ children, options, }) => {
27
+ const [checkingInjectedWeb3, setCheckingInjectedWeb3] = (0, react_1.useState)(true);
28
+ const checkingInjectedWeb3Ref = (0, react_1.useRef)(checkingInjectedWeb3);
29
+ const intervalInitialisedRef = (0, react_1.useRef)(false);
30
+ const [extensionsStatus, setExtensionsStatus] = (0, react_1.useState)({});
31
+ const extensionsStatusRef = (0, react_1.useRef)(extensionsStatus);
32
+ const [chainSafeSnapEnabled] = (0, react_1.useState)((options === null || options === void 0 ? void 0 : options.chainSafeSnapEnabled) || false);
33
+ const [polkaGateSnapEnabled] = (0, react_1.useState)((options === null || options === void 0 ? void 0 : options.polkagateSnapEnabled) || false);
34
+ let injectedWeb3Interval;
35
+ const injectCounter = (0, react_1.useRef)(0);
36
+ const handleClearInterval = (hasInjectedWeb3) => {
37
+ clearInterval(injectedWeb3Interval);
38
+ handleSnapInjection(hasInjectedWeb3);
39
+ };
40
+ const handleSnapInjection = (hasInjectedWeb3) => __awaiter(void 0, void 0, void 0, function* () {
41
+ const snapAvailable = (yield (0, utils_2.polkadotSnapAvailable)()) && chainSafeSnapEnabled;
42
+ if (polkaGateSnapEnabled) {
43
+ yield (0, utils_1.withTimeout)(500, (0, extension_dapp_1.web3Enable)("snap_only"));
44
+ }
45
+ if (hasInjectedWeb3 || snapAvailable) {
46
+ (0, utils_1.setStateWithRef)(getExtensionsStatus(snapAvailable), setExtensionsStatus, extensionsStatusRef);
47
+ }
48
+ (0, utils_1.setStateWithRef)(false, setCheckingInjectedWeb3, checkingInjectedWeb3Ref);
49
+ });
50
+ const setExtensionStatus = (id, status) => {
51
+ (0, utils_1.setStateWithRef)(Object.assign(Object.assign({}, extensionsStatusRef.current), { [id]: status }), setExtensionsStatus, extensionsStatusRef);
52
+ };
53
+ const removeExtensionStatus = (id) => {
54
+ const newExtensionsStatus = Object.assign({}, extensionsStatusRef.current);
55
+ delete newExtensionsStatus[id];
56
+ (0, utils_1.setStateWithRef)(newExtensionsStatus, setExtensionsStatus, extensionsStatusRef);
57
+ };
58
+ const getExtensionsStatus = (snapAvailable) => {
59
+ const { injectedWeb3 } = window;
60
+ const newExtensionsStatus = Object.assign({}, extensionsStatus);
61
+ if (snapAvailable) {
62
+ newExtensionsStatus["metamask-polkadot-snap"] = "installed";
63
+ }
64
+ const extensionsAsArray = Object.entries(extension_assets_1.default).map(([key, value]) => (Object.assign({ id: key }, value)));
65
+ extensionsAsArray.forEach((e) => {
66
+ if (injectedWeb3[e.id] !== undefined) {
67
+ newExtensionsStatus[e.id] = "installed";
68
+ }
69
+ });
70
+ return newExtensionsStatus;
71
+ };
72
+ const extensionInstalled = (id) => extensionsStatus[id] !== undefined;
73
+ const extensionCanConnect = (id) => extensionInstalled(id) && extensionsStatus[id] !== "connected";
74
+ const extensionHasFeature = (id, feature) => {
75
+ const { features } = extension_assets_1.default[id];
76
+ if (features === "*" || features.includes(feature)) {
77
+ return true;
78
+ }
79
+ else {
80
+ return false;
81
+ }
82
+ };
83
+ const checkEveryMs = 300;
84
+ const totalChecks = 10;
85
+ (0, react_1.useEffect)(() => {
86
+ if (!intervalInitialisedRef.current) {
87
+ intervalInitialisedRef.current = true;
88
+ injectedWeb3Interval = setInterval(() => {
89
+ injectCounter.current++;
90
+ if (injectCounter.current === totalChecks) {
91
+ handleClearInterval(false);
92
+ }
93
+ else {
94
+ const injectedWeb3 = (window === null || window === void 0 ? void 0 : window.injectedWeb3) || null;
95
+ if (injectedWeb3 !== null) {
96
+ handleClearInterval(true);
97
+ }
98
+ }
99
+ }, checkEveryMs);
100
+ }
101
+ return () => clearInterval(injectedWeb3Interval);
102
+ });
103
+ return ((0, jsx_runtime_1.jsx)(exports.ExtensionsContext.Provider, { value: {
104
+ extensionsStatus: extensionsStatusRef.current,
105
+ checkingInjectedWeb3,
106
+ setExtensionStatus,
107
+ removeExtensionStatus,
108
+ extensionInstalled,
109
+ extensionCanConnect,
110
+ extensionHasFeature,
111
+ }, children: children }));
112
+ };
113
+ exports.ExtensionsProvider = ExtensionsProvider;
114
+
115
+ //# sourceMappingURL=index.js.map
116
+
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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 { setStateWithRef, withTimeout } from \"@w3ux/utils\";\nimport {\n ReactNode,\n useEffect,\n useRef,\n useState,\n createContext,\n useContext,\n} from \"react\";\nimport type { ExtensionStatus, ExtensionsContextInterface } from \"./types\";\nimport { defaultExtensionsContext } from \"./defaults\";\nimport { polkadotSnapAvailable } from \"./utils\";\nimport extensions from \"@w3ux/extension-assets\";\nimport { web3Enable } from \"@polkagate/extension-dapp\";\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 [chainSafeSnapEnabled] = useState<boolean>(\n options?.chainSafeSnapEnabled || false\n );\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 = (hasInjectedWeb3: boolean) => {\n clearInterval(injectedWeb3Interval);\n // Check if Metamask Polkadot Snap is available.\n handleSnapInjection(hasInjectedWeb3);\n };\n\n // Handle injecting of `metamask-polkadot-snap` into injectedWeb3 if avaialble, and complete\n // `injectedWeb3` syncing process.\n const handleSnapInjection = async (hasInjectedWeb3: boolean) => {\n // Inject ChainSafe Snap if enabled.\n const snapAvailable =\n (await polkadotSnapAvailable()) && chainSafeSnapEnabled;\n\n // Inject PolkaGate Snap if enabled.\n if (polkaGateSnapEnabled) {\n await withTimeout(500, web3Enable(\"snap_only\"));\n }\n\n if (hasInjectedWeb3 || snapAvailable) {\n setStateWithRef(\n getExtensionsStatus(snapAvailable),\n setExtensionsStatus,\n extensionsStatusRef\n );\n }\n\n setStateWithRef(false, setCheckingInjectedWeb3, checkingInjectedWeb3Ref);\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 // 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 = (snapAvailable: boolean) => {\n const { injectedWeb3 } = window;\n\n const newExtensionsStatus = { ...extensionsStatus };\n if (snapAvailable) {\n newExtensionsStatus[\"metamask-polkadot-snap\"] = \"installed\";\n }\n\n const extensionsAsArray = Object.entries(extensions).map(\n ([key, value]) => ({\n id: key,\n ...value,\n })\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 // 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\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"]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=types.js.map
5
+
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +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 { ExternalAccountAddedBy } from \"../types\";\nimport { AnyJson, 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: AnyJson;\n metadata: AnyJson;\n signer: AnyJson;\n}\n\n// Required properties returned after subscribing to accounts.\nexport interface ExtensionAccount extends ExtensionMetadata {\n address: string;\n meta?: AnyJson;\n name: string;\n signer?: AnyJson;\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\n// Miscellaneous metadata added to an extension.\nexport interface ExtensionMetadata {\n addedBy?: ExternalAccountAddedBy;\n source: string;\n}\n\nexport type ExtensionStatus = \"installed\" | \"not_authenticated\" | \"connected\";\n"]}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.polkadotSnapAvailable = void 0;
13
+ const utils_1 = require("@chainsafe/metamask-polkadot-adapter/src/utils");
14
+ const utils_2 = require("@w3ux/utils");
15
+ const getWalletSnaps = () => __awaiter(void 0, void 0, void 0, function* () {
16
+ var _a;
17
+ const ethRequest = ((_a = window === null || window === void 0 ? void 0 : window.ethereum) === null || _a === void 0 ? void 0 : _a.request) ? true : false;
18
+ if (ethRequest) {
19
+ const response = yield (0, utils_2.withTimeout)(200, window.ethereum.request({ method: "wallet_getSnaps" }));
20
+ return response;
21
+ }
22
+ return;
23
+ });
24
+ const polkadotSnapAvailable = () => __awaiter(void 0, void 0, void 0, function* () {
25
+ if (!(0, utils_1.hasMetaMask)()) {
26
+ return false;
27
+ }
28
+ try {
29
+ yield getWalletSnaps();
30
+ return true;
31
+ }
32
+ catch (e) {
33
+ return false;
34
+ }
35
+ });
36
+ exports.polkadotSnapAvailable = polkadotSnapAvailable;
37
+
38
+ //# sourceMappingURL=utils.js.map
39
+
40
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ExtensionsProvider/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,0EAGwD;AAGxD,uCAA0C;AAwB1C,MAAM,cAAc,GAAG,GAAoC,EAAE;;IAC3D,MAAM,UAAU,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAE,OAAO,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAW,EAChC,GAAG,EACH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CACvD,CAAC;QACF,OAAO,QAAqC,CAAC;IAC/C,CAAC;IACD,OAAO;AACT,CAAC,CAAA,CAAC;AAGK,MAAM,qBAAqB,GAAG,GAA2B,EAAE;IAChE,IAAI,CAAC,IAAA,mBAAW,GAAE,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,qBAAqB,yBAWhC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport {\n GetSnapsResponse,\n hasMetaMask,\n} from \"@chainsafe/metamask-polkadot-adapter/src/utils\";\nimport { SnapRpcMethodRequest } from \"@chainsafe/metamask-polkadot-types\";\nimport { AnyJson } from \"@w3ux/types\";\nimport { withTimeout } from \"@w3ux/utils\";\n\n// Workaround for current `ethereum` snap types. See\n// https://github.com/ChainSafe/metamask-snap-polkadot/blob/e0f3d4fc0be7366c62211e29d3a276e4fab5669e/packages/adapter/src/types.ts#L40\n// for full type.\ndeclare global {\n interface Window {\n injectedWeb3?: AnyJson;\n ethereum: {\n isMetaMask: boolean;\n send: (\n request: SnapRpcMethodRequest | { method: string; params?: never[] }\n ) => Promise<unknown>;\n on: (eventName: unknown, callback: unknown) => unknown;\n request: <T>(\n request: SnapRpcMethodRequest | { method: string; params?: AnyJson }\n ) => Promise<T>;\n };\n }\n}\n\n// Checks if snaps are supported. Note that other extensions may inject `window.ethereum`, which may\n// break the request. We wrap the request in a timeout to ensure it doesn't hang the extension\n// discovery process.\nconst getWalletSnaps = async (): Promise<GetSnapsResponse> => {\n const ethRequest = window?.ethereum?.request ? true : false;\n if (ethRequest) {\n const response = await withTimeout(\n 200,\n window.ethereum.request({ method: \"wallet_getSnaps\" })\n );\n return response as Promise<GetSnapsResponse>;\n }\n return;\n};\n\n// Determines if Metamask Polkadot Snap is available and supported.\nexport const polkadotSnapAvailable = async (): Promise<boolean> => {\n if (!hasMetaMask()) {\n return false;\n }\n\n try {\n await getWalletSnaps();\n return true;\n } catch (e) {\n return false;\n }\n};\n"]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultLedgerAccountsContext = void 0;
4
+ exports.defaultLedgerAccountsContext = {
5
+ ledgerAccountExists: (network, address) => false,
6
+ addLedgerAccount: (network, address, index, callback) => null,
7
+ removeLedgerAccount: (network, address, callback) => { },
8
+ renameLedgerAccount: (network, address, newName) => { },
9
+ getLedgerAccount: (network, address) => null,
10
+ getLedgerAccounts: (network) => [],
11
+ ledgerAccounts: [],
12
+ };
13
+
14
+ //# sourceMappingURL=defaults.js.map
15
+
16
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/LedgerAccountsProvider/defaults.ts"],"names":[],"mappings":";;;AAMa,QAAA,4BAA4B,GAAmC;IAC1E,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK;IAChD,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI;IAC7D,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAE,CAAC;IACvD,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAE,CAAC;IACtD,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI;IAC5C,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;IAClC,cAAc,EAAE,EAAE;CACnB,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function, no-unused-vars */\n\nimport { LedgerAccountsContextInterface } from \"./types\";\n\nexport const defaultLedgerAccountsContext: LedgerAccountsContextInterface = {\n ledgerAccountExists: (network, address) => false,\n addLedgerAccount: (network, address, index, callback) => null,\n removeLedgerAccount: (network, address, callback) => {},\n renameLedgerAccount: (network, address, newName) => {},\n getLedgerAccount: (network, address) => null,\n getLedgerAccounts: (network) => [],\n ledgerAccounts: [],\n};\n"]}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LedgerAccountsProvider = exports.useLedgerAccounts = exports.LedgerAccountsContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const defaults_1 = require("./defaults");
7
+ const utils_1 = require("./utils");
8
+ const utils_2 = require("@w3ux/utils");
9
+ exports.LedgerAccountsContext = (0, react_1.createContext)(defaults_1.defaultLedgerAccountsContext);
10
+ const useLedgerAccounts = () => (0, react_1.useContext)(exports.LedgerAccountsContext);
11
+ exports.useLedgerAccounts = useLedgerAccounts;
12
+ const LedgerAccountsProvider = ({ children, }) => {
13
+ const [ledgerAccounts, setLedgerAccountsState] = (0, react_1.useState)((0, utils_1.getLocalLedgerAccounts)());
14
+ const ledgerAccountsRef = (0, react_1.useRef)(ledgerAccounts);
15
+ const ledgerAccountExists = (network, address) => !!(0, utils_1.getLocalLedgerAccounts)().find((account) => (0, utils_1.isLocalLedgerAccount)(network, account, address));
16
+ const addLedgerAccount = (network, address, index, callback) => {
17
+ let newLedgerAccounts = (0, utils_1.getLocalLedgerAccounts)();
18
+ const ledgerAddress = (0, utils_1.getLocalLedgerAddresses)().find((a) => (0, utils_1.isLocalLedgerAccount)(network, a, address));
19
+ if (ledgerAddress &&
20
+ !newLedgerAccounts.find((account) => (0, utils_1.isLocalLedgerAccount)(network, account, address))) {
21
+ const newAccount = {
22
+ address,
23
+ network,
24
+ name: ledgerAddress.name,
25
+ source: "ledger",
26
+ index,
27
+ };
28
+ newLedgerAccounts = [...newLedgerAccounts].concat(newAccount);
29
+ localStorage.setItem("ledger_accounts", JSON.stringify(newLedgerAccounts));
30
+ (0, utils_2.setStateWithRef)(newLedgerAccounts.filter((account) => account.network === network), setLedgerAccountsState, ledgerAccountsRef);
31
+ if (typeof callback === "function") {
32
+ callback();
33
+ }
34
+ return newAccount;
35
+ }
36
+ return null;
37
+ };
38
+ const removeLedgerAccount = (network, address, callback) => {
39
+ const newLedgerAccounts = (0, utils_1.getLocalLedgerAccounts)().filter((account) => {
40
+ if (account.address !== address) {
41
+ return true;
42
+ }
43
+ if (account.network !== network) {
44
+ return true;
45
+ }
46
+ return false;
47
+ });
48
+ if (!newLedgerAccounts.length) {
49
+ localStorage.removeItem("ledger_accounts");
50
+ }
51
+ else {
52
+ localStorage.setItem("ledger_accounts", JSON.stringify(newLedgerAccounts));
53
+ }
54
+ (0, utils_2.setStateWithRef)(newLedgerAccounts.filter((account) => account.network === network), setLedgerAccountsState, ledgerAccountsRef);
55
+ if (typeof callback === "function") {
56
+ callback();
57
+ }
58
+ };
59
+ const renameLedgerAccount = (network, address, newName) => {
60
+ const newLedgerAccounts = (0, utils_1.getLocalLedgerAccounts)().map((account) => (0, utils_1.isLocalLedgerAccount)(network, account, address)
61
+ ? Object.assign(Object.assign({}, account), { name: newName }) : account);
62
+ (0, utils_1.renameLocalLedgerAddress)(address, newName, network);
63
+ localStorage.setItem("ledger_accounts", JSON.stringify(newLedgerAccounts));
64
+ (0, utils_2.setStateWithRef)(newLedgerAccounts.filter((account) => account.network === network), setLedgerAccountsState, ledgerAccountsRef);
65
+ };
66
+ const getLedgerAccount = (network, address) => {
67
+ const localLedgerAccounts = (0, utils_1.getLocalLedgerAccounts)();
68
+ if (!localLedgerAccounts) {
69
+ return null;
70
+ }
71
+ return (localLedgerAccounts.find((account) => (0, utils_1.isLocalLedgerAccount)(network, account, address)) || null);
72
+ };
73
+ const getLedgerAccounts = (network) => ledgerAccountsRef.current.filter((a) => a.network === network);
74
+ return ((0, jsx_runtime_1.jsx)(exports.LedgerAccountsContext.Provider, { value: {
75
+ ledgerAccountExists,
76
+ getLedgerAccount,
77
+ addLedgerAccount,
78
+ removeLedgerAccount,
79
+ renameLedgerAccount,
80
+ getLedgerAccounts,
81
+ ledgerAccounts: ledgerAccountsRef.current,
82
+ }, children: children }));
83
+ };
84
+ exports.LedgerAccountsProvider = LedgerAccountsProvider;
85
+
86
+ //# sourceMappingURL=index.js.map
87
+
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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 { LedgerAccount } from \"../types\";\nimport {\n getLocalLedgerAccounts,\n getLocalLedgerAddresses,\n isLocalLedgerAccount,\n renameLocalLedgerAddress,\n} from \"./utils\";\nimport { setStateWithRef } from \"@w3ux/utils\";\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"]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=types.js.map
5
+
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +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 { ReactNode } from \"react\";\nimport { LedgerAccount } from \"../types\";\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"]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renameLocalLedgerAddress = exports.getLocalLedgerAddresses = exports.isLocalLedgerAccount = exports.getLocalLedgerAccounts = void 0;
4
+ const utils_1 = require("@w3ux/utils");
5
+ const getLocalLedgerAccounts = (network) => {
6
+ const localAddresses = (0, utils_1.localStorageOrDefault)("ledger_accounts", [], true);
7
+ return network
8
+ ? localAddresses.filter((a) => a.network === network)
9
+ : localAddresses;
10
+ };
11
+ exports.getLocalLedgerAccounts = getLocalLedgerAccounts;
12
+ const isLocalLedgerAccount = (network, account, address) => account.address === address && account.network === network;
13
+ exports.isLocalLedgerAccount = isLocalLedgerAccount;
14
+ const getLocalLedgerAddresses = (network) => {
15
+ const localAddresses = (0, utils_1.localStorageOrDefault)("ledger_addresses", [], true);
16
+ return network
17
+ ? localAddresses.filter((a) => a.network === network)
18
+ : localAddresses;
19
+ };
20
+ exports.getLocalLedgerAddresses = getLocalLedgerAddresses;
21
+ const renameLocalLedgerAddress = (address, name, network) => {
22
+ var _a;
23
+ const localLedger = (_a = (0, utils_1.localStorageOrDefault)("ledger_addresses", [], true)) === null || _a === void 0 ? void 0 : _a.map((i) => !(i.address === address && i.network === network)
24
+ ? i
25
+ : Object.assign(Object.assign({}, i), { name }));
26
+ if (localLedger) {
27
+ localStorage.setItem("ledger_addresses", JSON.stringify(localLedger));
28
+ }
29
+ };
30
+ exports.renameLocalLedgerAddress = renameLocalLedgerAddress;
31
+
32
+ //# sourceMappingURL=utils.js.map
33
+
34
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/LedgerAccountsProvider/utils.ts"],"names":[],"mappings":";;;AAGA,uCAAoD;AAK7C,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAmB,EAAE;IAC1E,MAAM,cAAc,GAAG,IAAA,6BAAqB,EAC1C,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;AAVW,QAAA,sBAAsB,0BAUjC;AAGK,MAAM,oBAAoB,GAAG,CAClC,OAAe,EACf,OAAoD,EACpD,OAAe,EACf,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC;AAJnD,QAAA,oBAAoB,wBAI+B;AAGzD,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC1D,MAAM,cAAc,GAAG,IAAA,6BAAqB,EAC1C,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;AAVW,QAAA,uBAAuB,2BAUlC;AAGK,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACf,IAAY,EACZ,OAAe,EACf,EAAE;;IACF,MAAM,WAAW,GAAG,MAClB,IAAA,6BAAqB,EAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,CACnD,0CAAE,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,iCACM,CAAC,KACJ,IAAI,GACL,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;AAlBW,QAAA,wBAAwB,4BAkBnC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from \"@w3ux/utils\";\nimport { LedgerAccount } from \"../types\";\nimport { 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"]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultVaultAccountsContext = void 0;
4
+ exports.defaultVaultAccountsContext = {
5
+ vaultAccountExists: (network, address) => false,
6
+ addVaultAccount: (network, address, index, callback) => null,
7
+ removeVaultAccount: (network, address, callback) => { },
8
+ renameVaultAccount: (network, address, newName) => { },
9
+ getVaultAccount: (network, address) => null,
10
+ getVaultAccounts: (network) => [],
11
+ vaultAccounts: [],
12
+ };
13
+
14
+ //# sourceMappingURL=defaults.js.map
15
+
16
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/VaultAccountsProvider/defaults.ts"],"names":[],"mappings":";;;AAMa,QAAA,2BAA2B,GAAkC;IACxE,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK;IAC/C,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI;IAC5D,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAE,CAAC;IACtD,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAE,CAAC;IACrD,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI;IAC3C,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;IACjC,aAAa,EAAE,EAAE;CAClB,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function, no-unused-vars */\n\nimport type { VaultAccountsContextInterface } from \"./types\";\n\nexport const defaultVaultAccountsContext: VaultAccountsContextInterface = {\n vaultAccountExists: (network, address) => false,\n addVaultAccount: (network, address, index, callback) => null,\n removeVaultAccount: (network, address, callback) => {},\n renameVaultAccount: (network, address, newName) => {},\n getVaultAccount: (network, address) => null,\n getVaultAccounts: (network) => [],\n vaultAccounts: [],\n};\n"]}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VaultAccountsProvider = exports.useVaultAccounts = exports.VaultAccountsContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const utils_1 = require("@w3ux/utils");
6
+ const react_1 = require("react");
7
+ const utils_2 = require("./utils");
8
+ const defaults_1 = require("./defaults");
9
+ exports.VaultAccountsContext = (0, react_1.createContext)(defaults_1.defaultVaultAccountsContext);
10
+ const useVaultAccounts = () => (0, react_1.useContext)(exports.VaultAccountsContext);
11
+ exports.useVaultAccounts = useVaultAccounts;
12
+ const VaultAccountsProvider = ({ children, }) => {
13
+ const [vaultAccounts, seVaultAccountsState] = (0, react_1.useState)((0, utils_2.getLocalVaultAccounts)());
14
+ const vaultAccountsRef = (0, react_1.useRef)(vaultAccounts);
15
+ const vaultAccountExists = (network, address) => !!(0, utils_2.getLocalVaultAccounts)().find((a) => (0, utils_2.isLocalNetworkAddress)(network, a, address));
16
+ const addVaultAccount = (network, address, index, callback) => {
17
+ let newVaultAccounts = (0, utils_2.getLocalVaultAccounts)();
18
+ if (!newVaultAccounts.find((a) => (0, utils_2.isLocalNetworkAddress)(network, a, address))) {
19
+ const account = {
20
+ address,
21
+ network,
22
+ name: (0, utils_1.ellipsisFn)(address),
23
+ source: "vault",
24
+ index,
25
+ };
26
+ newVaultAccounts = [...newVaultAccounts].concat(account);
27
+ localStorage.setItem("polkadot_vault_accounts", JSON.stringify(newVaultAccounts));
28
+ (0, utils_1.setStateWithRef)(newVaultAccounts.filter((a) => a.network === network), seVaultAccountsState, vaultAccountsRef);
29
+ if (typeof callback === "function") {
30
+ callback();
31
+ }
32
+ return account;
33
+ }
34
+ return null;
35
+ };
36
+ const removeVaultAccount = (network, address, callback) => {
37
+ let newVaultAccounts = (0, utils_2.getLocalVaultAccounts)();
38
+ newVaultAccounts = newVaultAccounts.filter((a) => {
39
+ if (a.address !== address) {
40
+ return true;
41
+ }
42
+ if (a.network !== network) {
43
+ return true;
44
+ }
45
+ return false;
46
+ });
47
+ if (!newVaultAccounts.length) {
48
+ localStorage.removeItem("polkadot_vault_accounts");
49
+ }
50
+ else {
51
+ localStorage.setItem("polkadot_vault_accounts", JSON.stringify(newVaultAccounts));
52
+ }
53
+ (0, utils_1.setStateWithRef)(newVaultAccounts.filter((a) => a.network === network), seVaultAccountsState, vaultAccountsRef);
54
+ if (typeof callback === "function") {
55
+ callback();
56
+ }
57
+ };
58
+ const getVaultAccount = (network, address) => {
59
+ var _a;
60
+ const localVaultAccounts = (0, utils_2.getLocalVaultAccounts)();
61
+ if (!localVaultAccounts) {
62
+ return null;
63
+ }
64
+ return ((_a = localVaultAccounts.find((a) => (0, utils_2.isLocalNetworkAddress)(network, a, address))) !== null && _a !== void 0 ? _a : null);
65
+ };
66
+ const renameVaultAccount = (network, address, newName) => {
67
+ let newVaultAccounts = (0, utils_2.getLocalVaultAccounts)();
68
+ newVaultAccounts = newVaultAccounts.map((a) => (0, utils_2.isLocalNetworkAddress)(network, a, address)
69
+ ? Object.assign(Object.assign({}, a), { name: newName }) : a);
70
+ localStorage.setItem("polkadot_vault_accounts", JSON.stringify(newVaultAccounts));
71
+ (0, utils_1.setStateWithRef)(newVaultAccounts.filter((a) => a.network === network), seVaultAccountsState, vaultAccountsRef);
72
+ };
73
+ const getVaultAccounts = (network) => vaultAccountsRef.current.filter((a) => a.network === network);
74
+ return ((0, jsx_runtime_1.jsx)(exports.VaultAccountsContext.Provider, { value: {
75
+ vaultAccountExists,
76
+ addVaultAccount,
77
+ removeVaultAccount,
78
+ renameVaultAccount,
79
+ getVaultAccount,
80
+ getVaultAccounts,
81
+ vaultAccounts: vaultAccountsRef.current,
82
+ }, children: children }));
83
+ };
84
+ exports.VaultAccountsProvider = VaultAccountsProvider;
85
+
86
+ //# sourceMappingURL=index.js.map
87
+
88
+ //# sourceMappingURL=index.js.map