@0xkey-io/core 0.1.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 (183) hide show
  1. package/LICENSE +201 -0
  2. package/README.MD +7 -0
  3. package/dist/0xkey-helpers.d.ts +68 -0
  4. package/dist/0xkey-helpers.d.ts.map +1 -0
  5. package/dist/0xkey-helpers.js +466 -0
  6. package/dist/0xkey-helpers.js.map +1 -0
  7. package/dist/0xkey-helpers.mjs +399 -0
  8. package/dist/0xkey-helpers.mjs.map +1 -0
  9. package/dist/__clients__/core.d.ts +1201 -0
  10. package/dist/__clients__/core.d.ts.map +1 -0
  11. package/dist/__clients__/core.js +3489 -0
  12. package/dist/__clients__/core.js.map +1 -0
  13. package/dist/__clients__/core.mjs +3487 -0
  14. package/dist/__clients__/core.mjs.map +1 -0
  15. package/dist/__generated__/sdk-client-base.d.ts +281 -0
  16. package/dist/__generated__/sdk-client-base.d.ts.map +1 -0
  17. package/dist/__generated__/sdk-client-base.js +3906 -0
  18. package/dist/__generated__/sdk-client-base.js.map +1 -0
  19. package/dist/__generated__/sdk-client-base.mjs +3904 -0
  20. package/dist/__generated__/sdk-client-base.mjs.map +1 -0
  21. package/dist/__generated__/version.d.ts +2 -0
  22. package/dist/__generated__/version.d.ts.map +1 -0
  23. package/dist/__generated__/version.js +6 -0
  24. package/dist/__generated__/version.js.map +1 -0
  25. package/dist/__generated__/version.mjs +4 -0
  26. package/dist/__generated__/version.mjs.map +1 -0
  27. package/dist/__inputs__/public_api.types.d.ts +6014 -0
  28. package/dist/__inputs__/public_api.types.d.ts.map +1 -0
  29. package/dist/__polyfills__/jest.setup.webcrypto.d.ts +2 -0
  30. package/dist/__polyfills__/jest.setup.webcrypto.d.ts.map +1 -0
  31. package/dist/__polyfills__/window.d.ts +15 -0
  32. package/dist/__polyfills__/window.d.ts.map +1 -0
  33. package/dist/__polyfills__/window.js +30 -0
  34. package/dist/__polyfills__/window.js.map +1 -0
  35. package/dist/__polyfills__/window.mjs +28 -0
  36. package/dist/__polyfills__/window.mjs.map +1 -0
  37. package/dist/__stampers__/api/base.d.ts +27 -0
  38. package/dist/__stampers__/api/base.d.ts.map +1 -0
  39. package/dist/__stampers__/api/base.js +102 -0
  40. package/dist/__stampers__/api/base.js.map +1 -0
  41. package/dist/__stampers__/api/base.mjs +100 -0
  42. package/dist/__stampers__/api/base.mjs.map +1 -0
  43. package/dist/__stampers__/api/mobile/stamper.d.ts +15 -0
  44. package/dist/__stampers__/api/mobile/stamper.d.ts.map +1 -0
  45. package/dist/__stampers__/api/mobile/stamper.js +119 -0
  46. package/dist/__stampers__/api/mobile/stamper.js.map +1 -0
  47. package/dist/__stampers__/api/mobile/stamper.mjs +117 -0
  48. package/dist/__stampers__/api/mobile/stamper.mjs.map +1 -0
  49. package/dist/__stampers__/api/web/stamper.d.ts +14 -0
  50. package/dist/__stampers__/api/web/stamper.d.ts.map +1 -0
  51. package/dist/__stampers__/api/web/stamper.js +201 -0
  52. package/dist/__stampers__/api/web/stamper.js.map +1 -0
  53. package/dist/__stampers__/api/web/stamper.mjs +199 -0
  54. package/dist/__stampers__/api/web/stamper.mjs.map +1 -0
  55. package/dist/__stampers__/passkey/base.d.ts +16 -0
  56. package/dist/__stampers__/passkey/base.d.ts.map +1 -0
  57. package/dist/__stampers__/passkey/base.js +138 -0
  58. package/dist/__stampers__/passkey/base.js.map +1 -0
  59. package/dist/__stampers__/passkey/base.mjs +134 -0
  60. package/dist/__stampers__/passkey/base.mjs.map +1 -0
  61. package/dist/__storage__/base.d.ts +3 -0
  62. package/dist/__storage__/base.d.ts.map +1 -0
  63. package/dist/__storage__/base.js +27 -0
  64. package/dist/__storage__/base.js.map +1 -0
  65. package/dist/__storage__/base.mjs +25 -0
  66. package/dist/__storage__/base.mjs.map +1 -0
  67. package/dist/__storage__/mobile/storage.d.ts +18 -0
  68. package/dist/__storage__/mobile/storage.d.ts.map +1 -0
  69. package/dist/__storage__/mobile/storage.js +76 -0
  70. package/dist/__storage__/mobile/storage.js.map +1 -0
  71. package/dist/__storage__/mobile/storage.mjs +74 -0
  72. package/dist/__storage__/mobile/storage.mjs.map +1 -0
  73. package/dist/__storage__/web/storage.d.ts +19 -0
  74. package/dist/__storage__/web/storage.d.ts.map +1 -0
  75. package/dist/__storage__/web/storage.js +79 -0
  76. package/dist/__storage__/web/storage.js.map +1 -0
  77. package/dist/__storage__/web/storage.mjs +77 -0
  78. package/dist/__storage__/web/storage.mjs.map +1 -0
  79. package/dist/__typedoc-entry__/index.d.ts +3 -0
  80. package/dist/__typedoc-entry__/index.d.ts.map +1 -0
  81. package/dist/__types__/auth.d.ts +120 -0
  82. package/dist/__types__/auth.d.ts.map +1 -0
  83. package/dist/__types__/auth.js +7 -0
  84. package/dist/__types__/auth.js.map +1 -0
  85. package/dist/__types__/auth.mjs +5 -0
  86. package/dist/__types__/auth.mjs.map +1 -0
  87. package/dist/__types__/config.d.ts +145 -0
  88. package/dist/__types__/config.d.ts.map +1 -0
  89. package/dist/__types__/enums.d.ts +59 -0
  90. package/dist/__types__/enums.d.ts.map +1 -0
  91. package/dist/__types__/enums.js +72 -0
  92. package/dist/__types__/enums.js.map +1 -0
  93. package/dist/__types__/enums.mjs +70 -0
  94. package/dist/__types__/enums.mjs.map +1 -0
  95. package/dist/__types__/error.d.ts +13 -0
  96. package/dist/__types__/error.d.ts.map +1 -0
  97. package/dist/__types__/error.js +18 -0
  98. package/dist/__types__/error.js.map +1 -0
  99. package/dist/__types__/error.mjs +16 -0
  100. package/dist/__types__/error.mjs.map +1 -0
  101. package/dist/__types__/export.d.ts +10 -0
  102. package/dist/__types__/export.d.ts.map +1 -0
  103. package/dist/__types__/external-wallets.d.ts +203 -0
  104. package/dist/__types__/external-wallets.d.ts.map +1 -0
  105. package/dist/__types__/http.d.ts +17 -0
  106. package/dist/__types__/http.d.ts.map +1 -0
  107. package/dist/__types__/http.js +11 -0
  108. package/dist/__types__/http.js.map +1 -0
  109. package/dist/__types__/http.mjs +9 -0
  110. package/dist/__types__/http.mjs.map +1 -0
  111. package/dist/__types__/index.d.ts +10 -0
  112. package/dist/__types__/index.d.ts.map +1 -0
  113. package/dist/__types__/method-types/import-export-params.d.ts +38 -0
  114. package/dist/__types__/method-types/import-export-params.d.ts.map +1 -0
  115. package/dist/__types__/method-types/shared.d.ts +378 -0
  116. package/dist/__types__/method-types/shared.d.ts.map +1 -0
  117. package/dist/__wallet__/base.d.ts +14 -0
  118. package/dist/__wallet__/base.d.ts.map +1 -0
  119. package/dist/__wallet__/base.js +35 -0
  120. package/dist/__wallet__/base.js.map +1 -0
  121. package/dist/__wallet__/base.mjs +33 -0
  122. package/dist/__wallet__/base.mjs.map +1 -0
  123. package/dist/__wallet__/connector.d.ts +60 -0
  124. package/dist/__wallet__/connector.d.ts.map +1 -0
  125. package/dist/__wallet__/connector.js +93 -0
  126. package/dist/__wallet__/connector.js.map +1 -0
  127. package/dist/__wallet__/connector.mjs +91 -0
  128. package/dist/__wallet__/connector.mjs.map +1 -0
  129. package/dist/__wallet__/mobile/manager.d.ts +51 -0
  130. package/dist/__wallet__/mobile/manager.d.ts.map +1 -0
  131. package/dist/__wallet__/mobile/manager.js +115 -0
  132. package/dist/__wallet__/mobile/manager.js.map +1 -0
  133. package/dist/__wallet__/mobile/manager.mjs +113 -0
  134. package/dist/__wallet__/mobile/manager.mjs.map +1 -0
  135. package/dist/__wallet__/stamper.d.ts +90 -0
  136. package/dist/__wallet__/stamper.d.ts.map +1 -0
  137. package/dist/__wallet__/stamper.js +183 -0
  138. package/dist/__wallet__/stamper.js.map +1 -0
  139. package/dist/__wallet__/stamper.mjs +180 -0
  140. package/dist/__wallet__/stamper.mjs.map +1 -0
  141. package/dist/__wallet__/wallet-connect/base.d.ts +182 -0
  142. package/dist/__wallet__/wallet-connect/base.d.ts.map +1 -0
  143. package/dist/__wallet__/wallet-connect/base.js +606 -0
  144. package/dist/__wallet__/wallet-connect/base.js.map +1 -0
  145. package/dist/__wallet__/wallet-connect/base.mjs +604 -0
  146. package/dist/__wallet__/wallet-connect/base.mjs.map +1 -0
  147. package/dist/__wallet__/wallet-connect/client.d.ts +132 -0
  148. package/dist/__wallet__/wallet-connect/client.d.ts.map +1 -0
  149. package/dist/__wallet__/wallet-connect/client.js +262 -0
  150. package/dist/__wallet__/wallet-connect/client.js.map +1 -0
  151. package/dist/__wallet__/wallet-connect/client.mjs +260 -0
  152. package/dist/__wallet__/wallet-connect/client.mjs.map +1 -0
  153. package/dist/__wallet__/web/manager.d.ts +70 -0
  154. package/dist/__wallet__/web/manager.d.ts.map +1 -0
  155. package/dist/__wallet__/web/manager.js +177 -0
  156. package/dist/__wallet__/web/manager.js.map +1 -0
  157. package/dist/__wallet__/web/manager.mjs +175 -0
  158. package/dist/__wallet__/web/manager.mjs.map +1 -0
  159. package/dist/__wallet__/web/native/ethereum.d.ts +101 -0
  160. package/dist/__wallet__/web/native/ethereum.d.ts.map +1 -0
  161. package/dist/__wallet__/web/native/ethereum.js +339 -0
  162. package/dist/__wallet__/web/native/ethereum.js.map +1 -0
  163. package/dist/__wallet__/web/native/ethereum.mjs +336 -0
  164. package/dist/__wallet__/web/native/ethereum.mjs.map +1 -0
  165. package/dist/__wallet__/web/native/solana.d.ts +72 -0
  166. package/dist/__wallet__/web/native/solana.d.ts.map +1 -0
  167. package/dist/__wallet__/web/native/solana.js +215 -0
  168. package/dist/__wallet__/web/native/solana.js.map +1 -0
  169. package/dist/__wallet__/web/native/solana.mjs +212 -0
  170. package/dist/__wallet__/web/native/solana.mjs.map +1 -0
  171. package/dist/index.d.ts +19 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +83 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/index.mjs +10 -0
  176. package/dist/index.mjs.map +1 -0
  177. package/dist/utils.d.ts +160 -0
  178. package/dist/utils.d.ts.map +1 -0
  179. package/dist/utils.js +1047 -0
  180. package/dist/utils.js.map +1 -0
  181. package/dist/utils.mjs +1007 -0
  182. package/dist/utils.mjs.map +1 -0
  183. package/package.json +80 -0
@@ -0,0 +1,70 @@
1
+ import { CrossPlatformWalletStamper } from "../stamper";
2
+ import { CrossPlatformWalletConnector } from "../connector";
3
+ import { TWalletManagerConfig, WalletInterface, WalletProvider, WalletInterfaceType, Chain } from "../../__types__";
4
+ export declare class WebWalletManager {
5
+ private initializers;
6
+ private wcClient?;
7
+ readonly wallets: Partial<Record<WalletInterfaceType, WalletInterface>>;
8
+ private chainToInterfaces;
9
+ readonly stamper?: CrossPlatformWalletStamper;
10
+ readonly connector?: CrossPlatformWalletConnector;
11
+ /**
12
+ * Constructs a WebWalletManager instance based on the provided configuration.
13
+ *
14
+ * - Enables native Ethereum and/or Solana wallet support if configured.
15
+ * - Enables WalletConnect support for Ethereum and/or Solana chains if namespaces are provided.
16
+ * - Sets up `CrossPlatformWalletStamper` and `CrossPlatformWalletConnector` if auth or connecting features are enabled.
17
+ *
18
+ * @param cfg - Wallet manager configuration.
19
+ */
20
+ constructor(cfg: TWalletManagerConfig);
21
+ private wcInitPromise?;
22
+ /**
23
+ * Initializes WalletConnect components and any registered wallet interfaces.
24
+ *
25
+ * - Initializes the low-level WalletConnect client with the provided config.
26
+ * - Runs any registered async wallet initializers (currently only `WalletConnectWallet`).
27
+ * - WalletConnect initialization happens in the background and does not block this method.
28
+ *
29
+ * @param cfg - Wallet manager configuration used for initializing the WalletConnect client.
30
+ */
31
+ init(cfg: TWalletManagerConfig): Promise<void>;
32
+ /**
33
+ * Ensures WalletConnect is fully initialized before proceeding.
34
+ * This should be called before any WalletConnect operations.
35
+ *
36
+ * @returns A promise that resolves when WalletConnect is ready.
37
+ */
38
+ ensureWalletConnectReady(): Promise<void>;
39
+ /**
40
+ * Retrieves available wallet providers, optionally filtered by chain.
41
+ *
42
+ * - If a chain is specified, filters wallet interfaces that support that chain.
43
+ * - Aggregates providers across all wallet interfaces and filters WalletConnect results accordingly.
44
+ * - Returns native wallet providers immediately without waiting for WalletConnect.
45
+ * - WalletConnect providers will only be included if WalletConnect has already initialized.
46
+ *
47
+ * @param chain - Optional chain to filter providers by (e.g., Ethereum, Solana).
48
+ * @returns A promise that resolves to an array of `WalletProvider` objects.
49
+ * @throws {Error} If no wallet interface is registered for the given chain.
50
+ */
51
+ getProviders(chain?: Chain): Promise<WalletProvider[]>;
52
+ /**
53
+ * Registers a wallet interface type as supporting a specific blockchain chain.
54
+ *
55
+ * @param chain - Chain (e.g., Ethereum, Solana).
56
+ * @param interfaceType - Wallet interface type to associate with the chain.
57
+ */
58
+ private addChainInterface;
59
+ /**
60
+ * Removes a wallet interface from the manager.
61
+ *
62
+ * - Deletes the wallet instance from the wallets map.
63
+ * - Cleans up references to the wallet interface in chainToInterfaces.
64
+ * - Removes the chain entry entirely if no interfaces remain.
65
+ *
66
+ * @param type - The WalletInterfaceType to remove.
67
+ */
68
+ private removeWalletInterface;
69
+ }
70
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/__wallet__/web/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,KAAK,EACN,MAAM,iBAAiB,CAAC;AAKzB,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,YAAY,CAAkC;IAGtD,OAAO,CAAC,QAAQ,CAAC,CAAsB;IAGvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAM;IAG7E,OAAO,CAAC,iBAAiB,CAAqD;IAG9E,QAAQ,CAAC,OAAO,CAAC,EAAE,0BAA0B,CAAC;IAG9C,QAAQ,CAAC,SAAS,CAAC,EAAE,4BAA4B,CAAC;IAElD;;;;;;;;OAQG;gBACS,GAAG,EAAE,oBAAoB;IAsErC,OAAO,CAAC,aAAa,CAAC,CAAgB;IAEtC;;;;;;;;OAQG;IACG,IAAI,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD;;;;;OAKG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/C;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4B5D;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAMvB;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;CAe9B"}
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ var stamper = require('../stamper.js');
4
+ var connector = require('../connector.js');
5
+ var ethereum = require('./native/ethereum.js');
6
+ var solana = require('./native/solana.js');
7
+ var enums = require('../../__types__/enums.js');
8
+ var client = require('../wallet-connect/client.js');
9
+ var base = require('../wallet-connect/base.js');
10
+ var utils = require('../../utils.js');
11
+
12
+ class WebWalletManager {
13
+ /**
14
+ * Constructs a WebWalletManager instance based on the provided configuration.
15
+ *
16
+ * - Enables native Ethereum and/or Solana wallet support if configured.
17
+ * - Enables WalletConnect support for Ethereum and/or Solana chains if namespaces are provided.
18
+ * - Sets up `CrossPlatformWalletStamper` and `CrossPlatformWalletConnector` if auth or connecting features are enabled.
19
+ *
20
+ * @param cfg - Wallet manager configuration.
21
+ */
22
+ constructor(cfg) {
23
+ // queue of async initialization functions
24
+ this.initializers = [];
25
+ // mapping of wallet interface types to their wallet instances
26
+ this.wallets = {};
27
+ // maps a blockchain chain to its corresponding wallet interface types
28
+ this.chainToInterfaces = {};
29
+ /**
30
+ * Registers a wallet interface type as supporting a specific blockchain chain.
31
+ *
32
+ * @param chain - Chain (e.g., Ethereum, Solana).
33
+ * @param interfaceType - Wallet interface type to associate with the chain.
34
+ */
35
+ this.addChainInterface = (chain, interfaceType) => {
36
+ if (!this.chainToInterfaces[chain])
37
+ this.chainToInterfaces[chain] = [];
38
+ this.chainToInterfaces[chain].push(interfaceType);
39
+ };
40
+ const enableNativeEvm = cfg.chains.ethereum?.native ?? false;
41
+ const enableNativeSol = cfg.chains.solana?.native ?? false;
42
+ const ethereumNamespaces = cfg.chains.ethereum?.walletConnectNamespaces ?? [];
43
+ const solanaNamespaces = cfg.chains.solana?.walletConnectNamespaces ?? [];
44
+ const enableWalletConnectEvm = ethereumNamespaces.length > 0;
45
+ const enableWalletConnectSol = solanaNamespaces.length > 0;
46
+ const enableWalletConnect = enableWalletConnectEvm || enableWalletConnectSol;
47
+ // set up native Ethereum wallet support
48
+ if (enableNativeEvm) {
49
+ this.wallets[enums.WalletInterfaceType.Ethereum] = new ethereum.EthereumWallet();
50
+ this.addChainInterface(enums.Chain.Ethereum, enums.WalletInterfaceType.Ethereum);
51
+ }
52
+ // set up native Solana wallet support
53
+ if (enableNativeSol) {
54
+ this.wallets[enums.WalletInterfaceType.Solana] = new solana.SolanaWallet();
55
+ this.addChainInterface(enums.Chain.Solana, enums.WalletInterfaceType.Solana);
56
+ }
57
+ // if WalletConnect is configured, set it up
58
+ if (cfg.walletConnect && enableWalletConnect) {
59
+ this.wcClient = new client.WalletConnectClient();
60
+ const wcUnified = new base.WalletConnectWallet(this.wcClient, () => this.ensureWalletConnectReady(), { ethereumNamespaces, solanaNamespaces });
61
+ this.wallets[enums.WalletInterfaceType.WalletConnect] = wcUnified;
62
+ // add async init step to the initializer queue
63
+ this.initializers.push(() => utils.withTimeout(wcUnified.init(), 15000, "WalletConnect wallet").catch((err) => {
64
+ // WalletConnect can be a bit unreliable, we don't want to load forever
65
+ // so we limit the initialization time to 15 seconds. After that we emit a
66
+ // failure event and remove WalletConnect from the available wallets
67
+ wcUnified.abortInit(err);
68
+ this.removeWalletInterface(enums.WalletInterfaceType.WalletConnect);
69
+ }));
70
+ // register WalletConnect as a wallet interface for each enabled chain
71
+ if (enableWalletConnectEvm)
72
+ this.addChainInterface(enums.Chain.Ethereum, enums.WalletInterfaceType.WalletConnect);
73
+ if (enableWalletConnectSol)
74
+ this.addChainInterface(enums.Chain.Solana, enums.WalletInterfaceType.WalletConnect);
75
+ }
76
+ if (cfg.features?.auth) {
77
+ this.stamper = new stamper.CrossPlatformWalletStamper(this.wallets);
78
+ }
79
+ if (cfg.features?.connecting) {
80
+ this.connector = new connector.CrossPlatformWalletConnector(this.wallets);
81
+ }
82
+ }
83
+ /**
84
+ * Initializes WalletConnect components and any registered wallet interfaces.
85
+ *
86
+ * - Initializes the low-level WalletConnect client with the provided config.
87
+ * - Runs any registered async wallet initializers (currently only `WalletConnectWallet`).
88
+ * - WalletConnect initialization happens in the background and does not block this method.
89
+ *
90
+ * @param cfg - Wallet manager configuration used for initializing the WalletConnect client.
91
+ */
92
+ async init(cfg) {
93
+ if (this.wcClient) {
94
+ // we start WalletConnect initialization in the background (this is non-blocking)
95
+ this.wcInitPromise = (async () => {
96
+ try {
97
+ await this.wcClient.init(cfg.walletConnect);
98
+ // initialize the high-level WalletConnectWallet after client is ready
99
+ await Promise.all(this.initializers.map((fn) => fn()));
100
+ }
101
+ catch (error) {
102
+ // WalletConnect can be a bit unreliable, so instead of throwing an error
103
+ // we handle failures silently to avoid blocking the rest of the client
104
+ // from initializing. If setup fails, we also remove WalletConnect
105
+ // from the available wallets list
106
+ console.error("Failed to initialize WalletConnect", error);
107
+ this.removeWalletInterface(enums.WalletInterfaceType.WalletConnect);
108
+ }
109
+ })();
110
+ }
111
+ }
112
+ /**
113
+ * Ensures WalletConnect is fully initialized before proceeding.
114
+ * This should be called before any WalletConnect operations.
115
+ *
116
+ * @returns A promise that resolves when WalletConnect is ready.
117
+ */
118
+ async ensureWalletConnectReady() {
119
+ if (this.wcInitPromise) {
120
+ await this.wcInitPromise;
121
+ }
122
+ }
123
+ /**
124
+ * Retrieves available wallet providers, optionally filtered by chain.
125
+ *
126
+ * - If a chain is specified, filters wallet interfaces that support that chain.
127
+ * - Aggregates providers across all wallet interfaces and filters WalletConnect results accordingly.
128
+ * - Returns native wallet providers immediately without waiting for WalletConnect.
129
+ * - WalletConnect providers will only be included if WalletConnect has already initialized.
130
+ *
131
+ * @param chain - Optional chain to filter providers by (e.g., Ethereum, Solana).
132
+ * @returns A promise that resolves to an array of `WalletProvider` objects.
133
+ * @throws {Error} If no wallet interface is registered for the given chain.
134
+ */
135
+ async getProviders(chain) {
136
+ if (chain) {
137
+ const interfaceTypes = this.chainToInterfaces[chain];
138
+ if (!interfaceTypes || interfaceTypes.length === 0)
139
+ throw new Error(`No wallet supports chain: ${chain}`);
140
+ const walletsToQuery = interfaceTypes
141
+ .map((iface) => this.wallets[iface])
142
+ .filter(Boolean);
143
+ const providersArrays = await Promise.all(walletsToQuery.map((wallet) => wallet.getProviders()));
144
+ // we still need to filter by chain because WalletConnect can return providers for multiple chains
145
+ return providersArrays
146
+ .flat()
147
+ .filter((p) => p.chainInfo.namespace === chain);
148
+ }
149
+ // collect all providers from all initialized wallets
150
+ const providersArrays = await Promise.all(Object.values(this.wallets).map((wallet) => wallet.getProviders()));
151
+ return providersArrays.flat();
152
+ }
153
+ /**
154
+ * Removes a wallet interface from the manager.
155
+ *
156
+ * - Deletes the wallet instance from the wallets map.
157
+ * - Cleans up references to the wallet interface in chainToInterfaces.
158
+ * - Removes the chain entry entirely if no interfaces remain.
159
+ *
160
+ * @param type - The WalletInterfaceType to remove.
161
+ */
162
+ removeWalletInterface(type) {
163
+ delete this.wallets[type];
164
+ for (const chain of Object.keys(this.chainToInterfaces)) {
165
+ const filtered = (this.chainToInterfaces[chain] ?? []).filter((interfaceType) => interfaceType !== type);
166
+ if (filtered.length > 0) {
167
+ this.chainToInterfaces[chain] = filtered;
168
+ }
169
+ else {
170
+ delete this.chainToInterfaces[chain];
171
+ }
172
+ }
173
+ }
174
+ }
175
+
176
+ exports.WebWalletManager = WebWalletManager;
177
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sources":["../../../src/__wallet__/web/manager.ts"],"sourcesContent":[null],"names":["WalletInterfaceType","EthereumWallet","Chain","SolanaWallet","WalletConnectClient","WalletConnectWallet","withTimeout","CrossPlatformWalletStamper","CrossPlatformWalletConnector"],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { CrossPlatformWalletStamper } from '../stamper.mjs';
2
+ import { CrossPlatformWalletConnector } from '../connector.mjs';
3
+ import { EthereumWallet } from './native/ethereum.mjs';
4
+ import { SolanaWallet } from './native/solana.mjs';
5
+ import { WalletInterfaceType, Chain } from '../../__types__/enums.mjs';
6
+ import { WalletConnectClient } from '../wallet-connect/client.mjs';
7
+ import { WalletConnectWallet } from '../wallet-connect/base.mjs';
8
+ import { withTimeout } from '../../utils.mjs';
9
+
10
+ class WebWalletManager {
11
+ /**
12
+ * Constructs a WebWalletManager instance based on the provided configuration.
13
+ *
14
+ * - Enables native Ethereum and/or Solana wallet support if configured.
15
+ * - Enables WalletConnect support for Ethereum and/or Solana chains if namespaces are provided.
16
+ * - Sets up `CrossPlatformWalletStamper` and `CrossPlatformWalletConnector` if auth or connecting features are enabled.
17
+ *
18
+ * @param cfg - Wallet manager configuration.
19
+ */
20
+ constructor(cfg) {
21
+ // queue of async initialization functions
22
+ this.initializers = [];
23
+ // mapping of wallet interface types to their wallet instances
24
+ this.wallets = {};
25
+ // maps a blockchain chain to its corresponding wallet interface types
26
+ this.chainToInterfaces = {};
27
+ /**
28
+ * Registers a wallet interface type as supporting a specific blockchain chain.
29
+ *
30
+ * @param chain - Chain (e.g., Ethereum, Solana).
31
+ * @param interfaceType - Wallet interface type to associate with the chain.
32
+ */
33
+ this.addChainInterface = (chain, interfaceType) => {
34
+ if (!this.chainToInterfaces[chain])
35
+ this.chainToInterfaces[chain] = [];
36
+ this.chainToInterfaces[chain].push(interfaceType);
37
+ };
38
+ const enableNativeEvm = cfg.chains.ethereum?.native ?? false;
39
+ const enableNativeSol = cfg.chains.solana?.native ?? false;
40
+ const ethereumNamespaces = cfg.chains.ethereum?.walletConnectNamespaces ?? [];
41
+ const solanaNamespaces = cfg.chains.solana?.walletConnectNamespaces ?? [];
42
+ const enableWalletConnectEvm = ethereumNamespaces.length > 0;
43
+ const enableWalletConnectSol = solanaNamespaces.length > 0;
44
+ const enableWalletConnect = enableWalletConnectEvm || enableWalletConnectSol;
45
+ // set up native Ethereum wallet support
46
+ if (enableNativeEvm) {
47
+ this.wallets[WalletInterfaceType.Ethereum] = new EthereumWallet();
48
+ this.addChainInterface(Chain.Ethereum, WalletInterfaceType.Ethereum);
49
+ }
50
+ // set up native Solana wallet support
51
+ if (enableNativeSol) {
52
+ this.wallets[WalletInterfaceType.Solana] = new SolanaWallet();
53
+ this.addChainInterface(Chain.Solana, WalletInterfaceType.Solana);
54
+ }
55
+ // if WalletConnect is configured, set it up
56
+ if (cfg.walletConnect && enableWalletConnect) {
57
+ this.wcClient = new WalletConnectClient();
58
+ const wcUnified = new WalletConnectWallet(this.wcClient, () => this.ensureWalletConnectReady(), { ethereumNamespaces, solanaNamespaces });
59
+ this.wallets[WalletInterfaceType.WalletConnect] = wcUnified;
60
+ // add async init step to the initializer queue
61
+ this.initializers.push(() => withTimeout(wcUnified.init(), 15000, "WalletConnect wallet").catch((err) => {
62
+ // WalletConnect can be a bit unreliable, we don't want to load forever
63
+ // so we limit the initialization time to 15 seconds. After that we emit a
64
+ // failure event and remove WalletConnect from the available wallets
65
+ wcUnified.abortInit(err);
66
+ this.removeWalletInterface(WalletInterfaceType.WalletConnect);
67
+ }));
68
+ // register WalletConnect as a wallet interface for each enabled chain
69
+ if (enableWalletConnectEvm)
70
+ this.addChainInterface(Chain.Ethereum, WalletInterfaceType.WalletConnect);
71
+ if (enableWalletConnectSol)
72
+ this.addChainInterface(Chain.Solana, WalletInterfaceType.WalletConnect);
73
+ }
74
+ if (cfg.features?.auth) {
75
+ this.stamper = new CrossPlatformWalletStamper(this.wallets);
76
+ }
77
+ if (cfg.features?.connecting) {
78
+ this.connector = new CrossPlatformWalletConnector(this.wallets);
79
+ }
80
+ }
81
+ /**
82
+ * Initializes WalletConnect components and any registered wallet interfaces.
83
+ *
84
+ * - Initializes the low-level WalletConnect client with the provided config.
85
+ * - Runs any registered async wallet initializers (currently only `WalletConnectWallet`).
86
+ * - WalletConnect initialization happens in the background and does not block this method.
87
+ *
88
+ * @param cfg - Wallet manager configuration used for initializing the WalletConnect client.
89
+ */
90
+ async init(cfg) {
91
+ if (this.wcClient) {
92
+ // we start WalletConnect initialization in the background (this is non-blocking)
93
+ this.wcInitPromise = (async () => {
94
+ try {
95
+ await this.wcClient.init(cfg.walletConnect);
96
+ // initialize the high-level WalletConnectWallet after client is ready
97
+ await Promise.all(this.initializers.map((fn) => fn()));
98
+ }
99
+ catch (error) {
100
+ // WalletConnect can be a bit unreliable, so instead of throwing an error
101
+ // we handle failures silently to avoid blocking the rest of the client
102
+ // from initializing. If setup fails, we also remove WalletConnect
103
+ // from the available wallets list
104
+ console.error("Failed to initialize WalletConnect", error);
105
+ this.removeWalletInterface(WalletInterfaceType.WalletConnect);
106
+ }
107
+ })();
108
+ }
109
+ }
110
+ /**
111
+ * Ensures WalletConnect is fully initialized before proceeding.
112
+ * This should be called before any WalletConnect operations.
113
+ *
114
+ * @returns A promise that resolves when WalletConnect is ready.
115
+ */
116
+ async ensureWalletConnectReady() {
117
+ if (this.wcInitPromise) {
118
+ await this.wcInitPromise;
119
+ }
120
+ }
121
+ /**
122
+ * Retrieves available wallet providers, optionally filtered by chain.
123
+ *
124
+ * - If a chain is specified, filters wallet interfaces that support that chain.
125
+ * - Aggregates providers across all wallet interfaces and filters WalletConnect results accordingly.
126
+ * - Returns native wallet providers immediately without waiting for WalletConnect.
127
+ * - WalletConnect providers will only be included if WalletConnect has already initialized.
128
+ *
129
+ * @param chain - Optional chain to filter providers by (e.g., Ethereum, Solana).
130
+ * @returns A promise that resolves to an array of `WalletProvider` objects.
131
+ * @throws {Error} If no wallet interface is registered for the given chain.
132
+ */
133
+ async getProviders(chain) {
134
+ if (chain) {
135
+ const interfaceTypes = this.chainToInterfaces[chain];
136
+ if (!interfaceTypes || interfaceTypes.length === 0)
137
+ throw new Error(`No wallet supports chain: ${chain}`);
138
+ const walletsToQuery = interfaceTypes
139
+ .map((iface) => this.wallets[iface])
140
+ .filter(Boolean);
141
+ const providersArrays = await Promise.all(walletsToQuery.map((wallet) => wallet.getProviders()));
142
+ // we still need to filter by chain because WalletConnect can return providers for multiple chains
143
+ return providersArrays
144
+ .flat()
145
+ .filter((p) => p.chainInfo.namespace === chain);
146
+ }
147
+ // collect all providers from all initialized wallets
148
+ const providersArrays = await Promise.all(Object.values(this.wallets).map((wallet) => wallet.getProviders()));
149
+ return providersArrays.flat();
150
+ }
151
+ /**
152
+ * Removes a wallet interface from the manager.
153
+ *
154
+ * - Deletes the wallet instance from the wallets map.
155
+ * - Cleans up references to the wallet interface in chainToInterfaces.
156
+ * - Removes the chain entry entirely if no interfaces remain.
157
+ *
158
+ * @param type - The WalletInterfaceType to remove.
159
+ */
160
+ removeWalletInterface(type) {
161
+ delete this.wallets[type];
162
+ for (const chain of Object.keys(this.chainToInterfaces)) {
163
+ const filtered = (this.chainToInterfaces[chain] ?? []).filter((interfaceType) => interfaceType !== type);
164
+ if (filtered.length > 0) {
165
+ this.chainToInterfaces[chain] = filtered;
166
+ }
167
+ else {
168
+ delete this.chainToInterfaces[chain];
169
+ }
170
+ }
171
+ }
172
+ }
173
+
174
+ export { WebWalletManager };
175
+ //# sourceMappingURL=manager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.mjs","sources":["../../../src/__wallet__/web/manager.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;MAea,gBAAgB,CAAA;AAmB3B;;;;;;;;AAQG;AACH,IAAA,WAAA,CAAY,GAAyB,EAAA;;QA1B7B,IAAA,CAAA,YAAY,GAA+B,EAAE;;QAM5C,IAAA,CAAA,OAAO,GAA0D,EAAE;;QAGpE,IAAA,CAAA,iBAAiB,GAAkD,EAAE;AA0K7E;;;;;AAKG;AACK,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAC1B,KAAY,EACZ,aAAkC,KAChC;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE;YACtE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,aAAa,CAAC;AACpD,QAAA,CAAC;QApKC,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK;QAC5D,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK;QAE1D,MAAM,kBAAkB,GACtB,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,IAAI,EAAE;QACpD,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,IAAI,EAAE;AAEzE,QAAA,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAC5D,QAAA,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAE1D,QAAA,MAAM,mBAAmB,GACvB,sBAAsB,IAAI,sBAAsB;;QAGlD,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI,cAAc,EAAE;YACjE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC;QACtE;;QAGA,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI,YAAY,EAAE;YAC7D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;QAClE;;AAGA,QAAA,IAAI,GAAG,CAAC,aAAa,IAAI,mBAAmB,EAAE;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE;YACzC,MAAM,SAAS,GAAG,IAAI,mBAAmB,CACvC,IAAI,CAAC,QAAQ,EACb,MAAM,IAAI,CAAC,wBAAwB,EAAE,EACrC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CACzC;YAED,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,SAAS;;YAG3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MACrB,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,KAAK,CAChE,CAAC,GAAG,KAAI;;;;AAIN,gBAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AACxB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,aAAa,CAAC;YAC/D,CAAC,CACF,CACF;;AAGD,YAAA,IAAI,sBAAsB;gBACxB,IAAI,CAAC,iBAAiB,CACpB,KAAK,CAAC,QAAQ,EACd,mBAAmB,CAAC,aAAa,CAClC;AACH,YAAA,IAAI,sBAAsB;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,aAAa,CAAC;QAC3E;AAEA,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7D;AAEA,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC;QACjE;IACF;AAKA;;;;;;;;AAQG;IACH,MAAM,IAAI,CAAC,GAAyB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEjB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,YAAW;AAC/B,gBAAA,IAAI;oBACF,MAAM,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,GAAG,CAAC,aAAc,CAAC;;AAE7C,oBAAA,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxD;gBAAE,OAAO,KAAK,EAAE;;;;;AAKd,oBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC1D,oBAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,aAAa,CAAC;gBAC/D;YACF,CAAC,GAAG;QACN;IACF;AAEA;;;;;AAKG;AACH,IAAA,MAAM,wBAAwB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,IAAI,CAAC,aAAa;QAC1B;IACF;AAEA;;;;;;;;;;;AAWG;IACH,MAAM,YAAY,CAAC,KAAa,EAAA;QAC9B,IAAI,KAAK,EAAE;YACT,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;AAChD,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAA,CAAE,CAAC;YAEvD,MAAM,cAAc,GAAG;AACpB,iBAAA,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;iBAClC,MAAM,CAAC,OAAO,CAAsB;YAEvC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC,CACtD;;AAGD,YAAA,OAAO;AACJ,iBAAA,IAAI;AACJ,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC;QACnD;;AAGA,QAAA,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC,CACnE;AAED,QAAA,OAAO,eAAe,CAAC,IAAI,EAAE;IAC/B;AAgBA;;;;;;;;AAQG;AACK,IAAA,qBAAqB,CAAC,IAAyB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAEzB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAY,EAAE;YAClE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAC3D,CAAC,aAAa,KAAK,aAAa,KAAK,IAAI,CAC1C;AAED,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,QAAQ;YAC1C;iBAAO;AACL,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACtC;QACF;IACF;AACD;;;;"}
@@ -0,0 +1,101 @@
1
+ import { Hex } from "viem";
2
+ import { EthereumWalletInterface, SignIntent, SwitchableChain, WalletInterfaceType, WalletProvider } from "../../../__types__";
3
+ /**
4
+ * Abstract base class for Ethereum wallet implementations.
5
+ *
6
+ * Provides shared logic for:
7
+ * - Provider discovery via EIP-6963 (request/announce events)
8
+ * - Connecting/disconnecting via EIP-1193
9
+ * - Recovering compressed secp256k1 public keys from EIP-191 signatures
10
+ */
11
+ export declare abstract class BaseEthereumWallet implements EthereumWalletInterface {
12
+ readonly interfaceType = WalletInterfaceType.Ethereum;
13
+ /**
14
+ * Signs a message using the specified wallet provider.
15
+ *
16
+ * @param message - The message to be signed, as a string or hex.
17
+ * @param provider - The wallet provider to use for signing.
18
+ * @param intent - The intent of the signature (e.g. message signing or transaction sending).
19
+ * @returns A promise resolving to a hex-encoded signature string.
20
+ */
21
+ abstract sign(payload: string | Hex, provider: WalletProvider, intent: SignIntent): Promise<Hex>;
22
+ /**
23
+ * Retrieves the compressed secp256k1 public key by signing a known message.
24
+ *
25
+ * - Signs the fixed string "GET_PUBLIC_KEY" (EIP-191) and recovers the key.
26
+ * - Returns the compressed public key as a hex string (no 0x prefix).
27
+ *
28
+ * @param provider - The wallet provider to use.
29
+ * @returns A promise that resolves to the compressed public key (hex-encoded).
30
+ */
31
+ getPublicKey: (provider: WalletProvider) => Promise<string>;
32
+ /**
33
+ * Discovers EIP-1193 providers using the EIP-6963 standard.
34
+ *
35
+ * - Dispatches "eip6963:requestProvider" and listens for "eip6963:announceProvider".
36
+ * - For each discovered provider, attempts to read `eth_accounts` and `eth_chainId`
37
+ * (silently ignored if unavailable), defaulting to chainId "0x1".
38
+ * - Returns providers discovered during this discovery cycle; may be empty.
39
+ *
40
+ * @returns A promise that resolves to a list of available wallet providers.
41
+ */
42
+ getProviders: () => Promise<WalletProvider[]>;
43
+ /**
44
+ * Requests or verifies account connection via `eth_requestAccounts`.
45
+ *
46
+ * - If the wallet is already connected, resolves immediately (no prompt).
47
+ * - If not connected, the wallet will typically prompt the user to authorize.
48
+ *
49
+ * @param provider - The wallet provider to use.
50
+ * @returns A promise that resolves with the connected wallet's address.
51
+ * @throws {Error} If the wallet returns no accounts after the request.
52
+ */
53
+ connectWalletAccount: (provider: WalletProvider) => Promise<string>;
54
+ /**
55
+ * Attempts to disconnect the wallet by revoking `eth_accounts` permission.
56
+ *
57
+ * - Calls `wallet_revokePermissions` with `{ eth_accounts: {} }`.
58
+ * - Provider behavior is wallet-specific: some implement it, some ignore it,
59
+ * and others (e.g., Phantom) throw “method not supported”.
60
+ *
61
+ * @param provider - The wallet provider to disconnect.
62
+ * @returns A promise that resolves once the request completes (or rejects if the provider errors).
63
+ */
64
+ disconnectWalletAccount: (provider: WalletProvider) => Promise<void>;
65
+ /**
66
+ * Switches to a new EVM chain, with add-then-switch fallback.
67
+ *
68
+ * - Tries `wallet_switchEthereumChain` first.
69
+ * - If the wallet returns error code 4902 (unknown chain):
70
+ * - If `chainOrId` is a string (hex chainId), throws and asks the caller to pass metadata.
71
+ * - If `chainOrId` is a `SwitchableChain`, calls `wallet_addEthereumChain` and then retries the switch.
72
+ *
73
+ * @param provider - The wallet provider to use.
74
+ * @param chainOrId - Hex chain ID string or full `SwitchableChain` metadata.
75
+ * @throws {Error} If provider is non-EVM, adding/switching fails, or metadata is missing.
76
+ */
77
+ switchChain(provider: WalletProvider, chainOrId: string | SwitchableChain): Promise<void>;
78
+ }
79
+ /**
80
+ * EthereumWallet implementation using EIP-1193 compatible providers.
81
+ *
82
+ * Handles message signing and transaction submission.
83
+ */
84
+ export declare class EthereumWallet extends BaseEthereumWallet {
85
+ /**
86
+ * Signs a message or sends a transaction depending on intent.
87
+ *
88
+ * - `SignMessage` → `personal_sign` (hex signature).
89
+ * - `SignAndSendTransaction` → `eth_sendTransaction` (tx hash).
90
+ * - For transactions, `message` must be a raw tx that `Transaction.from(...)` can parse.
91
+ * - May prompt the user (account access, signing, or send).
92
+ *
93
+ * @param payload - The payload or raw transaction to be signed/sent.
94
+ * @param provider - The wallet provider to use.
95
+ * @param intent - Signing intent (SignMessage or SignAndSendTransaction).
96
+ * @returns A promise that resolves to a hex string (signature or tx hash).
97
+ * @throws {Error} If the intent is unsupported or the wallet rejects the request.
98
+ */
99
+ sign: (payload: string, provider: WalletProvider, intent: SignIntent) => Promise<Hex>;
100
+ }
101
+ //# sourceMappingURL=ethereum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethereum.d.ts","sourceRoot":"","sources":["../../../../src/__wallet__/web/native/ethereum.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,GAAG,EAIJ,MAAM,MAAM,CAAC;AAGd,OAAO,EAIL,uBAAuB,EACvB,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EAGf,MAAM,oBAAoB,CAAC;AAO5B;;;;;;;GAOG;AACH,8BAAsB,kBAAmB,YAAW,uBAAuB;IACzE,QAAQ,CAAC,aAAa,gCAAgC;IAEtD;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,CACX,OAAO,EAAE,MAAM,GAAG,GAAG,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,GAAG,CAAC;IAEf;;;;;;;;OAQG;IACH,YAAY,aAAoB,cAAc,KAAG,QAAQ,MAAM,CAAC,CAQ9D;IAEF;;;;;;;;;OASG;IACH,YAAY,QAAa,QAAQ,cAAc,EAAE,CAAC,CA4FhD;IAEF;;;;;;;;;OASG;IACH,oBAAoB,aAAoB,cAAc,KAAG,QAAQ,MAAM,CAAC,CAGtE;IAEF;;;;;;;;;OASG;IACH,uBAAuB,aAAoB,cAAc,KAAG,QAAQ,IAAI,CAAC,CAMvE;IAEF;;;;;;;;;;;OAWG;IACG,WAAW,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,GAAG,eAAe,GAClC,OAAO,CAAC,IAAI,CAAC;CAwDjB;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;IACpD;;;;;;;;;;;;;OAaG;IACH,IAAI,YACO,MAAM,YACL,cAAc,UAChB,UAAU,KACjB,QAAQ,GAAG,CAAC,CA+Db;CACH"}