@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.
- package/LICENSE +201 -0
- package/README.MD +7 -0
- package/dist/0xkey-helpers.d.ts +68 -0
- package/dist/0xkey-helpers.d.ts.map +1 -0
- package/dist/0xkey-helpers.js +466 -0
- package/dist/0xkey-helpers.js.map +1 -0
- package/dist/0xkey-helpers.mjs +399 -0
- package/dist/0xkey-helpers.mjs.map +1 -0
- package/dist/__clients__/core.d.ts +1201 -0
- package/dist/__clients__/core.d.ts.map +1 -0
- package/dist/__clients__/core.js +3489 -0
- package/dist/__clients__/core.js.map +1 -0
- package/dist/__clients__/core.mjs +3487 -0
- package/dist/__clients__/core.mjs.map +1 -0
- package/dist/__generated__/sdk-client-base.d.ts +281 -0
- package/dist/__generated__/sdk-client-base.d.ts.map +1 -0
- package/dist/__generated__/sdk-client-base.js +3906 -0
- package/dist/__generated__/sdk-client-base.js.map +1 -0
- package/dist/__generated__/sdk-client-base.mjs +3904 -0
- package/dist/__generated__/sdk-client-base.mjs.map +1 -0
- package/dist/__generated__/version.d.ts +2 -0
- package/dist/__generated__/version.d.ts.map +1 -0
- package/dist/__generated__/version.js +6 -0
- package/dist/__generated__/version.js.map +1 -0
- package/dist/__generated__/version.mjs +4 -0
- package/dist/__generated__/version.mjs.map +1 -0
- package/dist/__inputs__/public_api.types.d.ts +6014 -0
- package/dist/__inputs__/public_api.types.d.ts.map +1 -0
- package/dist/__polyfills__/jest.setup.webcrypto.d.ts +2 -0
- package/dist/__polyfills__/jest.setup.webcrypto.d.ts.map +1 -0
- package/dist/__polyfills__/window.d.ts +15 -0
- package/dist/__polyfills__/window.d.ts.map +1 -0
- package/dist/__polyfills__/window.js +30 -0
- package/dist/__polyfills__/window.js.map +1 -0
- package/dist/__polyfills__/window.mjs +28 -0
- package/dist/__polyfills__/window.mjs.map +1 -0
- package/dist/__stampers__/api/base.d.ts +27 -0
- package/dist/__stampers__/api/base.d.ts.map +1 -0
- package/dist/__stampers__/api/base.js +102 -0
- package/dist/__stampers__/api/base.js.map +1 -0
- package/dist/__stampers__/api/base.mjs +100 -0
- package/dist/__stampers__/api/base.mjs.map +1 -0
- package/dist/__stampers__/api/mobile/stamper.d.ts +15 -0
- package/dist/__stampers__/api/mobile/stamper.d.ts.map +1 -0
- package/dist/__stampers__/api/mobile/stamper.js +119 -0
- package/dist/__stampers__/api/mobile/stamper.js.map +1 -0
- package/dist/__stampers__/api/mobile/stamper.mjs +117 -0
- package/dist/__stampers__/api/mobile/stamper.mjs.map +1 -0
- package/dist/__stampers__/api/web/stamper.d.ts +14 -0
- package/dist/__stampers__/api/web/stamper.d.ts.map +1 -0
- package/dist/__stampers__/api/web/stamper.js +201 -0
- package/dist/__stampers__/api/web/stamper.js.map +1 -0
- package/dist/__stampers__/api/web/stamper.mjs +199 -0
- package/dist/__stampers__/api/web/stamper.mjs.map +1 -0
- package/dist/__stampers__/passkey/base.d.ts +16 -0
- package/dist/__stampers__/passkey/base.d.ts.map +1 -0
- package/dist/__stampers__/passkey/base.js +138 -0
- package/dist/__stampers__/passkey/base.js.map +1 -0
- package/dist/__stampers__/passkey/base.mjs +134 -0
- package/dist/__stampers__/passkey/base.mjs.map +1 -0
- package/dist/__storage__/base.d.ts +3 -0
- package/dist/__storage__/base.d.ts.map +1 -0
- package/dist/__storage__/base.js +27 -0
- package/dist/__storage__/base.js.map +1 -0
- package/dist/__storage__/base.mjs +25 -0
- package/dist/__storage__/base.mjs.map +1 -0
- package/dist/__storage__/mobile/storage.d.ts +18 -0
- package/dist/__storage__/mobile/storage.d.ts.map +1 -0
- package/dist/__storage__/mobile/storage.js +76 -0
- package/dist/__storage__/mobile/storage.js.map +1 -0
- package/dist/__storage__/mobile/storage.mjs +74 -0
- package/dist/__storage__/mobile/storage.mjs.map +1 -0
- package/dist/__storage__/web/storage.d.ts +19 -0
- package/dist/__storage__/web/storage.d.ts.map +1 -0
- package/dist/__storage__/web/storage.js +79 -0
- package/dist/__storage__/web/storage.js.map +1 -0
- package/dist/__storage__/web/storage.mjs +77 -0
- package/dist/__storage__/web/storage.mjs.map +1 -0
- package/dist/__typedoc-entry__/index.d.ts +3 -0
- package/dist/__typedoc-entry__/index.d.ts.map +1 -0
- package/dist/__types__/auth.d.ts +120 -0
- package/dist/__types__/auth.d.ts.map +1 -0
- package/dist/__types__/auth.js +7 -0
- package/dist/__types__/auth.js.map +1 -0
- package/dist/__types__/auth.mjs +5 -0
- package/dist/__types__/auth.mjs.map +1 -0
- package/dist/__types__/config.d.ts +145 -0
- package/dist/__types__/config.d.ts.map +1 -0
- package/dist/__types__/enums.d.ts +59 -0
- package/dist/__types__/enums.d.ts.map +1 -0
- package/dist/__types__/enums.js +72 -0
- package/dist/__types__/enums.js.map +1 -0
- package/dist/__types__/enums.mjs +70 -0
- package/dist/__types__/enums.mjs.map +1 -0
- package/dist/__types__/error.d.ts +13 -0
- package/dist/__types__/error.d.ts.map +1 -0
- package/dist/__types__/error.js +18 -0
- package/dist/__types__/error.js.map +1 -0
- package/dist/__types__/error.mjs +16 -0
- package/dist/__types__/error.mjs.map +1 -0
- package/dist/__types__/export.d.ts +10 -0
- package/dist/__types__/export.d.ts.map +1 -0
- package/dist/__types__/external-wallets.d.ts +203 -0
- package/dist/__types__/external-wallets.d.ts.map +1 -0
- package/dist/__types__/http.d.ts +17 -0
- package/dist/__types__/http.d.ts.map +1 -0
- package/dist/__types__/http.js +11 -0
- package/dist/__types__/http.js.map +1 -0
- package/dist/__types__/http.mjs +9 -0
- package/dist/__types__/http.mjs.map +1 -0
- package/dist/__types__/index.d.ts +10 -0
- package/dist/__types__/index.d.ts.map +1 -0
- package/dist/__types__/method-types/import-export-params.d.ts +38 -0
- package/dist/__types__/method-types/import-export-params.d.ts.map +1 -0
- package/dist/__types__/method-types/shared.d.ts +378 -0
- package/dist/__types__/method-types/shared.d.ts.map +1 -0
- package/dist/__wallet__/base.d.ts +14 -0
- package/dist/__wallet__/base.d.ts.map +1 -0
- package/dist/__wallet__/base.js +35 -0
- package/dist/__wallet__/base.js.map +1 -0
- package/dist/__wallet__/base.mjs +33 -0
- package/dist/__wallet__/base.mjs.map +1 -0
- package/dist/__wallet__/connector.d.ts +60 -0
- package/dist/__wallet__/connector.d.ts.map +1 -0
- package/dist/__wallet__/connector.js +93 -0
- package/dist/__wallet__/connector.js.map +1 -0
- package/dist/__wallet__/connector.mjs +91 -0
- package/dist/__wallet__/connector.mjs.map +1 -0
- package/dist/__wallet__/mobile/manager.d.ts +51 -0
- package/dist/__wallet__/mobile/manager.d.ts.map +1 -0
- package/dist/__wallet__/mobile/manager.js +115 -0
- package/dist/__wallet__/mobile/manager.js.map +1 -0
- package/dist/__wallet__/mobile/manager.mjs +113 -0
- package/dist/__wallet__/mobile/manager.mjs.map +1 -0
- package/dist/__wallet__/stamper.d.ts +90 -0
- package/dist/__wallet__/stamper.d.ts.map +1 -0
- package/dist/__wallet__/stamper.js +183 -0
- package/dist/__wallet__/stamper.js.map +1 -0
- package/dist/__wallet__/stamper.mjs +180 -0
- package/dist/__wallet__/stamper.mjs.map +1 -0
- package/dist/__wallet__/wallet-connect/base.d.ts +182 -0
- package/dist/__wallet__/wallet-connect/base.d.ts.map +1 -0
- package/dist/__wallet__/wallet-connect/base.js +606 -0
- package/dist/__wallet__/wallet-connect/base.js.map +1 -0
- package/dist/__wallet__/wallet-connect/base.mjs +604 -0
- package/dist/__wallet__/wallet-connect/base.mjs.map +1 -0
- package/dist/__wallet__/wallet-connect/client.d.ts +132 -0
- package/dist/__wallet__/wallet-connect/client.d.ts.map +1 -0
- package/dist/__wallet__/wallet-connect/client.js +262 -0
- package/dist/__wallet__/wallet-connect/client.js.map +1 -0
- package/dist/__wallet__/wallet-connect/client.mjs +260 -0
- package/dist/__wallet__/wallet-connect/client.mjs.map +1 -0
- package/dist/__wallet__/web/manager.d.ts +70 -0
- package/dist/__wallet__/web/manager.d.ts.map +1 -0
- package/dist/__wallet__/web/manager.js +177 -0
- package/dist/__wallet__/web/manager.js.map +1 -0
- package/dist/__wallet__/web/manager.mjs +175 -0
- package/dist/__wallet__/web/manager.mjs.map +1 -0
- package/dist/__wallet__/web/native/ethereum.d.ts +101 -0
- package/dist/__wallet__/web/native/ethereum.d.ts.map +1 -0
- package/dist/__wallet__/web/native/ethereum.js +339 -0
- package/dist/__wallet__/web/native/ethereum.js.map +1 -0
- package/dist/__wallet__/web/native/ethereum.mjs +336 -0
- package/dist/__wallet__/web/native/ethereum.mjs.map +1 -0
- package/dist/__wallet__/web/native/solana.d.ts +72 -0
- package/dist/__wallet__/web/native/solana.d.ts.map +1 -0
- package/dist/__wallet__/web/native/solana.js +215 -0
- package/dist/__wallet__/web/native/solana.js.map +1 -0
- package/dist/__wallet__/web/native/solana.mjs +212 -0
- package/dist/__wallet__/web/native/solana.mjs.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/utils.d.ts +160 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1047 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +1007 -0
- package/dist/utils.mjs.map +1 -0
- 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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"}
|