@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,339 @@
1
+ 'use strict';
2
+
3
+ var viem = require('viem');
4
+ var ethers = require('ethers');
5
+ var crypto = require('@0xkey-io/crypto');
6
+ var enums = require('../../../__types__/enums.js');
7
+ var encoding = require('@0xkey-io/encoding');
8
+ var utils = require('../../../utils.js');
9
+
10
+ /**
11
+ * Abstract base class for Ethereum wallet implementations.
12
+ *
13
+ * Provides shared logic for:
14
+ * - Provider discovery via EIP-6963 (request/announce events)
15
+ * - Connecting/disconnecting via EIP-1193
16
+ * - Recovering compressed secp256k1 public keys from EIP-191 signatures
17
+ */
18
+ class BaseEthereumWallet {
19
+ constructor() {
20
+ this.interfaceType = enums.WalletInterfaceType.Ethereum;
21
+ /**
22
+ * Retrieves the compressed secp256k1 public key by signing a known message.
23
+ *
24
+ * - Signs the fixed string "GET_PUBLIC_KEY" (EIP-191) and recovers the key.
25
+ * - Returns the compressed public key as a hex string (no 0x prefix).
26
+ *
27
+ * @param provider - The wallet provider to use.
28
+ * @returns A promise that resolves to the compressed public key (hex-encoded).
29
+ */
30
+ this.getPublicKey = async (provider) => {
31
+ const message = "GET_PUBLIC_KEY";
32
+ const signature = await this.sign(message, provider, enums.SignIntent.SignMessage);
33
+ return getCompressedPublicKey(signature, message);
34
+ };
35
+ /**
36
+ * Discovers EIP-1193 providers using the EIP-6963 standard.
37
+ *
38
+ * - Dispatches "eip6963:requestProvider" and listens for "eip6963:announceProvider".
39
+ * - For each discovered provider, attempts to read `eth_accounts` and `eth_chainId`
40
+ * (silently ignored if unavailable), defaulting to chainId "0x1".
41
+ * - Returns providers discovered during this discovery cycle; may be empty.
42
+ *
43
+ * @returns A promise that resolves to a list of available wallet providers.
44
+ */
45
+ this.getProviders = async () => {
46
+ const discovered = [];
47
+ const seenRdns = new Set();
48
+ const providerPromises = [];
49
+ const handler = (ev) => {
50
+ const { provider, info } = ev.detail;
51
+ // some wallets (e.g., Backpack) announce multiple providers. They do this to expose providers
52
+ // that extend EIP-1193 capabilities with additional methods. Since every provider we receive
53
+ // is EIP-1193 compliant, it doesn't matter which one we take. Here we just take the first
54
+ // one to avoid duplicates
55
+ if (info.rdns && seenRdns.has(info.rdns)) {
56
+ return;
57
+ }
58
+ if (info.rdns) {
59
+ seenRdns.add(info.rdns);
60
+ }
61
+ const promise = (async () => {
62
+ let connectedAddresses = [];
63
+ // we default to Ethereum mainnet
64
+ let chainId = "0x1";
65
+ try {
66
+ // wrap provider calls in a timeout to prevent hanging providers from blocking discovery
67
+ const accounts = await utils.withTimeoutFallback(provider.request?.({
68
+ method: "eth_accounts",
69
+ }) ?? Promise.resolve([]), []);
70
+ if (Array.isArray(accounts))
71
+ connectedAddresses = accounts;
72
+ // we only request the chainId if there is a connected account because:
73
+ //
74
+ // 1. if there are no connected accounts, the chainId is irrelevant
75
+ //
76
+ // 2. some non-Ethereum-native wallets (e.g., Cosmos-based wallets) veer off EIP-1193 standards and prompt
77
+ // the user on chain-related RPC calls like `eth_chainId` because they enforce chain-level permissions
78
+ if (connectedAddresses.length > 0) {
79
+ chainId = await utils.withTimeoutFallback(provider.request({
80
+ method: "eth_chainId",
81
+ }), "0x1");
82
+ }
83
+ }
84
+ catch {
85
+ // fail silently
86
+ }
87
+ discovered.push({
88
+ interfaceType: enums.WalletInterfaceType.Ethereum,
89
+ chainInfo: {
90
+ namespace: enums.Chain.Ethereum,
91
+ chainId,
92
+ },
93
+ // Some wallet providers include leading whitespace in their icon URLs.
94
+ // Next.js 15+ and other frameworks are strict about URL formatting,
95
+ // so we trim
96
+ info: {
97
+ ...info,
98
+ ...(info.icon && { icon: info.icon.trim() }),
99
+ },
100
+ provider,
101
+ connectedAddresses,
102
+ });
103
+ })();
104
+ providerPromises.push(promise);
105
+ };
106
+ window.addEventListener("eip6963:announceProvider", handler);
107
+ window.dispatchEvent(new Event("eip6963:requestProvider"));
108
+ window.removeEventListener("eip6963:announceProvider", handler);
109
+ await Promise.all(providerPromises);
110
+ return discovered;
111
+ };
112
+ /**
113
+ * Requests or verifies account connection via `eth_requestAccounts`.
114
+ *
115
+ * - If the wallet is already connected, resolves immediately (no prompt).
116
+ * - If not connected, the wallet will typically prompt the user to authorize.
117
+ *
118
+ * @param provider - The wallet provider to use.
119
+ * @returns A promise that resolves with the connected wallet's address.
120
+ * @throws {Error} If the wallet returns no accounts after the request.
121
+ */
122
+ this.connectWalletAccount = async (provider) => {
123
+ const wallet = asEip1193(provider);
124
+ return await getAccount(wallet);
125
+ };
126
+ /**
127
+ * Attempts to disconnect the wallet by revoking `eth_accounts` permission.
128
+ *
129
+ * - Calls `wallet_revokePermissions` with `{ eth_accounts: {} }`.
130
+ * - Provider behavior is wallet-specific: some implement it, some ignore it,
131
+ * and others (e.g., Phantom) throw “method not supported”.
132
+ *
133
+ * @param provider - The wallet provider to disconnect.
134
+ * @returns A promise that resolves once the request completes (or rejects if the provider errors).
135
+ */
136
+ this.disconnectWalletAccount = async (provider) => {
137
+ const wallet = asEip1193(provider);
138
+ await wallet.request({
139
+ method: "wallet_revokePermissions",
140
+ params: [{ eth_accounts: {} }],
141
+ });
142
+ };
143
+ }
144
+ /**
145
+ * Switches to a new EVM chain, with add-then-switch fallback.
146
+ *
147
+ * - Tries `wallet_switchEthereumChain` first.
148
+ * - If the wallet returns error code 4902 (unknown chain):
149
+ * - If `chainOrId` is a string (hex chainId), throws and asks the caller to pass metadata.
150
+ * - If `chainOrId` is a `SwitchableChain`, calls `wallet_addEthereumChain` and then retries the switch.
151
+ *
152
+ * @param provider - The wallet provider to use.
153
+ * @param chainOrId - Hex chain ID string or full `SwitchableChain` metadata.
154
+ * @throws {Error} If provider is non-EVM, adding/switching fails, or metadata is missing.
155
+ */
156
+ async switchChain(provider, chainOrId) {
157
+ if (provider.chainInfo.namespace !== enums.Chain.Ethereum) {
158
+ throw new Error("Only EVM wallets can switch chains");
159
+ }
160
+ const wallet = asEip1193(provider);
161
+ const chainId = typeof chainOrId === "string" ? chainOrId : chainOrId.id;
162
+ try {
163
+ // first we just try switching
164
+ await wallet.request({
165
+ method: "wallet_switchEthereumChain",
166
+ params: [{ chainId }],
167
+ });
168
+ }
169
+ catch (err) {
170
+ // if the error is not “chain not found”
171
+ // we just re-throw it
172
+ if (err.code !== 4902) {
173
+ throw err;
174
+ }
175
+ // no metadata was provided so we throw an error
176
+ // telling them to pass it in
177
+ if (typeof chainOrId === "string") {
178
+ throw new Error(`Chain ${chainId} not recognized. ` +
179
+ `If you want to add it, call switchChain with a SwitchableChain object.`);
180
+ }
181
+ // we have full metadata and can add the chain and switch
182
+ const { name, rpcUrls, blockExplorerUrls, iconUrls, nativeCurrency } = chainOrId;
183
+ // add the chain
184
+ await wallet.request({
185
+ method: "wallet_addEthereumChain",
186
+ params: [
187
+ {
188
+ chainId,
189
+ chainName: name,
190
+ rpcUrls,
191
+ blockExplorerUrls,
192
+ iconUrls,
193
+ nativeCurrency,
194
+ },
195
+ ],
196
+ });
197
+ // then switch again
198
+ await wallet.request({
199
+ method: "wallet_switchEthereumChain",
200
+ params: [{ chainId }],
201
+ });
202
+ }
203
+ }
204
+ }
205
+ /**
206
+ * EthereumWallet implementation using EIP-1193 compatible providers.
207
+ *
208
+ * Handles message signing and transaction submission.
209
+ */
210
+ class EthereumWallet extends BaseEthereumWallet {
211
+ constructor() {
212
+ super(...arguments);
213
+ /**
214
+ * Signs a message or sends a transaction depending on intent.
215
+ *
216
+ * - `SignMessage` → `personal_sign` (hex signature).
217
+ * - `SignAndSendTransaction` → `eth_sendTransaction` (tx hash).
218
+ * - For transactions, `message` must be a raw tx that `Transaction.from(...)` can parse.
219
+ * - May prompt the user (account access, signing, or send).
220
+ *
221
+ * @param payload - The payload or raw transaction to be signed/sent.
222
+ * @param provider - The wallet provider to use.
223
+ * @param intent - Signing intent (SignMessage or SignAndSendTransaction).
224
+ * @returns A promise that resolves to a hex string (signature or tx hash).
225
+ * @throws {Error} If the intent is unsupported or the wallet rejects the request.
226
+ */
227
+ this.sign = async (payload, provider, intent) => {
228
+ const selectedProvider = asEip1193(provider);
229
+ const account = await getAccount(selectedProvider);
230
+ switch (intent) {
231
+ case enums.SignIntent.SignMessage:
232
+ return await selectedProvider.request({
233
+ method: "personal_sign",
234
+ params: [payload, account],
235
+ });
236
+ case enums.SignIntent.SignAndSendTransaction: {
237
+ const tx = ethers.Transaction.from(payload);
238
+ const base = {
239
+ from: account,
240
+ to: tx.to?.toString(),
241
+ value: viem.toHex(tx.value),
242
+ gas: viem.toHex(tx.gasLimit),
243
+ nonce: viem.toHex(tx.nonce),
244
+ chainId: viem.toHex(tx.chainId),
245
+ data: tx.data?.toString() ?? "0x",
246
+ };
247
+ // Some libs use undefined for legacy, so normalize
248
+ const txType = tx.type ?? 0;
249
+ let txParams;
250
+ if (txType === undefined || txType === 0 || txType === 1) {
251
+ // legacy or EIP-2930 (gasPrice-based)
252
+ if (tx.gasPrice == null) {
253
+ throw new Error("Legacy or EIP-2930 transaction missing gasPrice");
254
+ }
255
+ txParams = {
256
+ ...base,
257
+ gasPrice: viem.toHex(tx.gasPrice),
258
+ };
259
+ }
260
+ else {
261
+ // EIP-1559 or future fee-market types
262
+ if (tx.maxFeePerGas == null || tx.maxPriorityFeePerGas == null) {
263
+ throw new Error("EIP-1559-style transaction missing maxFeePerGas or maxPriorityFeePerGas");
264
+ }
265
+ txParams = {
266
+ ...base,
267
+ maxFeePerGas: viem.toHex(tx.maxFeePerGas),
268
+ maxPriorityFeePerGas: viem.toHex(tx.maxPriorityFeePerGas),
269
+ };
270
+ }
271
+ return await selectedProvider.request({
272
+ method: "eth_sendTransaction",
273
+ params: [txParams],
274
+ });
275
+ }
276
+ default:
277
+ throw new Error(`Unsupported sign intent: ${intent}`);
278
+ }
279
+ };
280
+ }
281
+ }
282
+ /**
283
+ * Retrieves the active Ethereum account from a provider.
284
+ *
285
+ * - Calls `eth_requestAccounts` (usually no prompt).
286
+ *
287
+ * @param provider - EIP-1193 compliant provider.
288
+ * @returns A promise resolving to the connected Ethereum address.
289
+ * @throws {Error} If no connected account is found.
290
+ */
291
+ const getAccount = async (provider) => {
292
+ const [connectedAccount] = await provider.request({
293
+ method: "eth_requestAccounts",
294
+ });
295
+ if (!connectedAccount)
296
+ throw new Error("No connected account found");
297
+ return connectedAccount;
298
+ };
299
+ /**
300
+ * Recovers and compresses the public key from a signed message.
301
+ *
302
+ * - Recovers the secp256k1 public key from an EIP-191 signature and compresses it.
303
+ * - Returns a hex string with no 0x prefix.
304
+ *
305
+ * @param signature - The signature as a hex string.
306
+ * @param message - The original signed message.
307
+ * @returns A promise resolving to the compressed public key (hex-encoded).
308
+ */
309
+ const getCompressedPublicKey = async (signature, message) => {
310
+ const secp256k1PublicKey = await viem.recoverPublicKey({
311
+ hash: viem.hashMessage(message),
312
+ signature: signature,
313
+ });
314
+ const publicKeyHex = secp256k1PublicKey.startsWith("0x")
315
+ ? secp256k1PublicKey.slice(2)
316
+ : secp256k1PublicKey;
317
+ const publicKeyBytes = encoding.uint8ArrayFromHexString(publicKeyHex);
318
+ const publicKeyBytesCompressed = crypto.compressRawPublicKey(publicKeyBytes);
319
+ return encoding.uint8ArrayToHexString(publicKeyBytesCompressed);
320
+ };
321
+ /**
322
+ * Validates and casts a `WalletProvider` to an EIP-1193 provider.
323
+ *
324
+ * - Expects `provider.request` to be a function.
325
+ *
326
+ * @param p - The wallet provider to validate.
327
+ * @returns An EIP-1193 provider.
328
+ * @throws {Error} If the provider does not implement `request()`.
329
+ */
330
+ const asEip1193 = (p) => {
331
+ if (p.provider && typeof p.provider.request === "function") {
332
+ return p.provider;
333
+ }
334
+ throw new Error("Expected an EIP-1193 provider (Ethereum wallet)");
335
+ };
336
+
337
+ exports.BaseEthereumWallet = BaseEthereumWallet;
338
+ exports.EthereumWallet = EthereumWallet;
339
+ //# sourceMappingURL=ethereum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethereum.js","sources":["../../../../src/__wallet__/web/native/ethereum.ts"],"sourcesContent":[null],"names":["WalletInterfaceType","SignIntent","withTimeoutFallback","Chain","Transaction","toHex","recoverPublicKey","hashMessage","uint8ArrayFromHexString","compressRawPublicKey","uint8ArrayToHexString"],"mappings":"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"}