@turnkey/core 1.0.0-beta.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 +5 -0
- package/dist/__clients__/core.d.ts +1010 -0
- package/dist/__clients__/core.d.ts.map +1 -0
- package/dist/__clients__/core.js +2358 -0
- package/dist/__clients__/core.js.map +1 -0
- package/dist/__clients__/core.mjs +2356 -0
- package/dist/__clients__/core.mjs.map +1 -0
- package/dist/__generated__/sdk-client-base.d.ts +211 -0
- package/dist/__generated__/sdk-client-base.d.ts.map +1 -0
- package/dist/__generated__/sdk-client-base.js +3219 -0
- package/dist/__generated__/sdk-client-base.js.map +1 -0
- package/dist/__generated__/sdk-client-base.mjs +3217 -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 +5170 -0
- package/dist/__inputs__/public_api.types.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 +20 -0
- package/dist/__stampers__/api/base.d.ts.map +1 -0
- package/dist/__stampers__/api/base.js +67 -0
- package/dist/__stampers__/api/base.js.map +1 -0
- package/dist/__stampers__/api/base.mjs +65 -0
- package/dist/__stampers__/api/base.mjs.map +1 -0
- package/dist/__stampers__/api/mobile/stamper.d.ts +13 -0
- package/dist/__stampers__/api/mobile/stamper.d.ts.map +1 -0
- package/dist/__stampers__/api/mobile/stamper.js +69 -0
- package/dist/__stampers__/api/mobile/stamper.js.map +1 -0
- package/dist/__stampers__/api/mobile/stamper.mjs +67 -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 +212 -0
- package/dist/__stampers__/api/web/stamper.js.map +1 -0
- package/dist/__stampers__/api/web/stamper.mjs +210 -0
- package/dist/__stampers__/api/web/stamper.mjs.map +1 -0
- package/dist/__stampers__/passkey/base.d.ts +18 -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 +74 -0
- package/dist/__storage__/mobile/storage.js.map +1 -0
- package/dist/__storage__/mobile/storage.mjs +72 -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/__types__/base.d.ts +407 -0
- package/dist/__types__/base.d.ts.map +1 -0
- package/dist/__types__/base.js +88 -0
- package/dist/__types__/base.js.map +1 -0
- package/dist/__types__/base.mjs +84 -0
- package/dist/__types__/base.mjs.map +1 -0
- package/dist/__wallet__/base.d.ts +3 -0
- package/dist/__wallet__/base.d.ts.map +1 -0
- package/dist/__wallet__/base.js +24 -0
- package/dist/__wallet__/base.js.map +1 -0
- package/dist/__wallet__/base.mjs +22 -0
- package/dist/__wallet__/base.mjs.map +1 -0
- package/dist/__wallet__/connector.d.ts +33 -0
- package/dist/__wallet__/connector.d.ts.map +1 -0
- package/dist/__wallet__/connector.js +63 -0
- package/dist/__wallet__/connector.js.map +1 -0
- package/dist/__wallet__/connector.mjs +61 -0
- package/dist/__wallet__/connector.mjs.map +1 -0
- package/dist/__wallet__/mobile/manager.d.ts +35 -0
- package/dist/__wallet__/mobile/manager.d.ts.map +1 -0
- package/dist/__wallet__/mobile/manager.js +95 -0
- package/dist/__wallet__/mobile/manager.js.map +1 -0
- package/dist/__wallet__/mobile/manager.mjs +93 -0
- package/dist/__wallet__/mobile/manager.mjs.map +1 -0
- package/dist/__wallet__/stamper.d.ts +19 -0
- package/dist/__wallet__/stamper.d.ts.map +1 -0
- package/dist/__wallet__/stamper.js +116 -0
- package/dist/__wallet__/stamper.js.map +1 -0
- package/dist/__wallet__/stamper.mjs +113 -0
- package/dist/__wallet__/stamper.mjs.map +1 -0
- package/dist/__wallet__/wallet-connect/base.d.ts +83 -0
- package/dist/__wallet__/wallet-connect/base.d.ts.map +1 -0
- package/dist/__wallet__/wallet-connect/base.js +362 -0
- package/dist/__wallet__/wallet-connect/base.js.map +1 -0
- package/dist/__wallet__/wallet-connect/base.mjs +360 -0
- package/dist/__wallet__/wallet-connect/base.mjs.map +1 -0
- package/dist/__wallet__/wallet-connect/client.d.ts +78 -0
- package/dist/__wallet__/wallet-connect/client.d.ts.map +1 -0
- package/dist/__wallet__/wallet-connect/client.js +139 -0
- package/dist/__wallet__/wallet-connect/client.js.map +1 -0
- package/dist/__wallet__/wallet-connect/client.mjs +137 -0
- package/dist/__wallet__/wallet-connect/client.mjs.map +1 -0
- package/dist/__wallet__/web/manager.d.ts +41 -0
- package/dist/__wallet__/web/manager.d.ts.map +1 -0
- package/dist/__wallet__/web/manager.js +115 -0
- package/dist/__wallet__/web/manager.js.map +1 -0
- package/dist/__wallet__/web/manager.mjs +113 -0
- package/dist/__wallet__/web/manager.mjs.map +1 -0
- package/dist/__wallet__/web/native/ethereum.d.ts +67 -0
- package/dist/__wallet__/web/native/ethereum.d.ts.map +1 -0
- package/dist/__wallet__/web/native/ethereum.js +248 -0
- package/dist/__wallet__/web/native/ethereum.js.map +1 -0
- package/dist/__wallet__/web/native/ethereum.mjs +245 -0
- package/dist/__wallet__/web/native/ethereum.mjs.map +1 -0
- package/dist/__wallet__/web/native/solana.d.ts +19 -0
- package/dist/__wallet__/web/native/solana.d.ts.map +1 -0
- package/dist/__wallet__/web/native/solana.js +149 -0
- package/dist/__wallet__/web/native/solana.js.map +1 -0
- package/dist/__wallet__/web/native/solana.mjs +146 -0
- package/dist/__wallet__/web/native/solana.mjs.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +8 -0
- package/dist/index.mjs.map +1 -0
- package/dist/turnkey-helpers.d.ts +68 -0
- package/dist/turnkey-helpers.d.ts.map +1 -0
- package/dist/turnkey-helpers.js +466 -0
- package/dist/turnkey-helpers.js.map +1 -0
- package/dist/turnkey-helpers.mjs +399 -0
- package/dist/turnkey-helpers.mjs.map +1 -0
- package/dist/utils.d.ts +54 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +596 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +574 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var encoding = require('@turnkey/encoding');
|
|
4
|
+
var bs58 = require('bs58');
|
|
5
|
+
var viem = require('viem');
|
|
6
|
+
var crypto = require('@turnkey/crypto');
|
|
7
|
+
var base = require('../../__types__/base.js');
|
|
8
|
+
var ethers = require('ethers');
|
|
9
|
+
|
|
10
|
+
class WalletConnectWallet {
|
|
11
|
+
constructor(client) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
this.interfaceType = base.WalletInterfaceType.WalletConnect;
|
|
14
|
+
this.ethereumNamespaces = [];
|
|
15
|
+
this.solanaNamespaces = [];
|
|
16
|
+
this.client.onSessionDelete(() => { });
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initializes WalletConnect pairing flow with the specified chains.
|
|
20
|
+
* If an active session already exists, pairing is skipped.
|
|
21
|
+
*
|
|
22
|
+
* @param opts.ethereum - Whether to enable Ethereum pairing
|
|
23
|
+
* @param opts.solana - Whether to enable Solana pairing
|
|
24
|
+
* @throws {Error} If no chains are enabled
|
|
25
|
+
*/
|
|
26
|
+
async init(opts) {
|
|
27
|
+
this.ethereumNamespaces = opts.ethereumNamespaces;
|
|
28
|
+
if (this.ethereumNamespaces.length > 0) {
|
|
29
|
+
this.ethChain = this.ethereumNamespaces[0];
|
|
30
|
+
}
|
|
31
|
+
this.solanaNamespaces = opts.solanaNamespaces;
|
|
32
|
+
if (this.solanaNamespaces.length > 0) {
|
|
33
|
+
this.solChain = this.solanaNamespaces[0];
|
|
34
|
+
}
|
|
35
|
+
if (this.ethereumNamespaces.length === 0 &&
|
|
36
|
+
this.solanaNamespaces.length === 0) {
|
|
37
|
+
throw new Error("At least one namespace must be enabled for WalletConnect");
|
|
38
|
+
}
|
|
39
|
+
const session = this.client.getSession();
|
|
40
|
+
if (hasConnectedAccounts(session)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const namespaces = {};
|
|
44
|
+
if (this.ethereumNamespaces.length > 0) {
|
|
45
|
+
namespaces.eip155 = {
|
|
46
|
+
methods: [
|
|
47
|
+
"personal_sign",
|
|
48
|
+
"eth_sendTransaction",
|
|
49
|
+
"eth_chainId",
|
|
50
|
+
"wallet_switchEthereumChain",
|
|
51
|
+
"wallet_addEthereumChain",
|
|
52
|
+
],
|
|
53
|
+
chains: this.ethereumNamespaces,
|
|
54
|
+
events: ["accountsChanged", "chainChanged"],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (this.solanaNamespaces.length > 0) {
|
|
58
|
+
namespaces.solana = {
|
|
59
|
+
methods: [
|
|
60
|
+
"solana_signMessage",
|
|
61
|
+
"solana_signTransaction",
|
|
62
|
+
"solana_sendTransaction",
|
|
63
|
+
],
|
|
64
|
+
chains: this.solanaNamespaces,
|
|
65
|
+
events: ["accountsChanged", "chainChanged"],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
this.uri = await this.client.pair(namespaces);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Returns WalletConnect providers with associated chain/account metadata.
|
|
72
|
+
*/
|
|
73
|
+
async getProviders() {
|
|
74
|
+
const session = this.client.getSession();
|
|
75
|
+
const info = {
|
|
76
|
+
name: "WalletConnect",
|
|
77
|
+
icon: "https://raw.githubusercontent.com/WalletConnect/walletconnect-assets/refs/heads/master/Icon/Blue%20(Default)/Icon.svg",
|
|
78
|
+
};
|
|
79
|
+
const providers = [];
|
|
80
|
+
if (this.ethereumNamespaces.length > 0) {
|
|
81
|
+
providers.push(await this.buildEthProvider(session, info));
|
|
82
|
+
}
|
|
83
|
+
if (this.solanaNamespaces.length > 0) {
|
|
84
|
+
providers.push(this.buildSolProvider(session, info));
|
|
85
|
+
}
|
|
86
|
+
return providers;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Approves the session if needed and ensures at least one account is available.
|
|
90
|
+
*/
|
|
91
|
+
async connectWalletAccount(_provider) {
|
|
92
|
+
const session = await this.client.approve();
|
|
93
|
+
if (!hasConnectedAccounts(session))
|
|
94
|
+
throw new Error("No account found in session");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Switch the user’s WalletConnect session to a new EVM chain.
|
|
98
|
+
*
|
|
99
|
+
* @param provider – the WalletProvider returned by getProviders()
|
|
100
|
+
* @param chainOrId – either:
|
|
101
|
+
* • a CAIP string ("eip155:1", "eip155:137", …)
|
|
102
|
+
* • a SwitchableChain object carrying full metadata
|
|
103
|
+
*/
|
|
104
|
+
async switchChain(provider, chainOrId) {
|
|
105
|
+
if (provider.chainInfo.namespace !== base.Chain.Ethereum) {
|
|
106
|
+
throw new Error("Only EVM wallets support chain switching");
|
|
107
|
+
}
|
|
108
|
+
const session = this.client.getSession();
|
|
109
|
+
if (!session) {
|
|
110
|
+
throw new Error("No active WalletConnect session");
|
|
111
|
+
}
|
|
112
|
+
const hexChainId = typeof chainOrId === "string" ? chainOrId : chainOrId.id;
|
|
113
|
+
const caip = `eip155:${Number.parseInt(hexChainId, 16)}`;
|
|
114
|
+
if (!this.ethereumNamespaces.includes(caip)) {
|
|
115
|
+
throw new Error(`Unsupported chain ${caip}. Supported chains: ${this.ethereumNamespaces.join(", ")}. If you’d like to support ${caip}, add it to the \`ethereumNamespaces\` in your WalletConnect config.`);
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
// first we just try switching
|
|
119
|
+
await this.client.request(this.ethChain, "wallet_switchEthereumChain", [
|
|
120
|
+
{ chainId: hexChainId },
|
|
121
|
+
]);
|
|
122
|
+
this.ethChain = caip;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
throw new Error(`Failed to switch chain: ${err.message || err.toString()}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Signs a message or transaction using the specified provider and intent.
|
|
130
|
+
*
|
|
131
|
+
* @param message - The message or serialized transaction to sign.
|
|
132
|
+
* @param provider - The WalletProvider to use.
|
|
133
|
+
* @param intent - The type of signing intent (message, tx, send).
|
|
134
|
+
*/
|
|
135
|
+
async sign(message, provider, intent) {
|
|
136
|
+
const session = await this.ensureSession();
|
|
137
|
+
if (!hasConnectedAccounts(session)) {
|
|
138
|
+
await this.connectWalletAccount(provider);
|
|
139
|
+
}
|
|
140
|
+
if (provider.chainInfo.namespace === base.Chain.Ethereum) {
|
|
141
|
+
const address = getConnectedEthereum(session);
|
|
142
|
+
if (!address) {
|
|
143
|
+
throw new Error("no Ethereum account to sign with");
|
|
144
|
+
}
|
|
145
|
+
switch (intent) {
|
|
146
|
+
case base.SignIntent.SignMessage:
|
|
147
|
+
return (await this.client.request(this.ethChain, "personal_sign", [
|
|
148
|
+
message,
|
|
149
|
+
address,
|
|
150
|
+
]));
|
|
151
|
+
case base.SignIntent.SignAndSendTransaction:
|
|
152
|
+
const account = provider.connectedAddresses[0];
|
|
153
|
+
const tx = ethers.Transaction.from(message);
|
|
154
|
+
const txParams = {
|
|
155
|
+
from: account,
|
|
156
|
+
to: tx.to?.toString(),
|
|
157
|
+
value: viem.toHex(tx.value),
|
|
158
|
+
gas: viem.toHex(tx.gasLimit),
|
|
159
|
+
maxFeePerGas: viem.toHex(tx.maxFeePerGas ?? 0n),
|
|
160
|
+
maxPriorityFeePerGas: viem.toHex(tx.maxPriorityFeePerGas ?? 0n),
|
|
161
|
+
nonce: viem.toHex(tx.nonce),
|
|
162
|
+
chainId: viem.toHex(tx.chainId),
|
|
163
|
+
data: tx.data?.toString() ?? "0x",
|
|
164
|
+
};
|
|
165
|
+
return (await this.client.request(this.ethChain, "eth_sendTransaction", [txParams]));
|
|
166
|
+
default:
|
|
167
|
+
throw new Error(`Unsupported Ethereum intent: ${intent}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (provider.chainInfo.namespace === base.Chain.Solana) {
|
|
171
|
+
const address = getConnectedSolana(session);
|
|
172
|
+
if (!address) {
|
|
173
|
+
throw new Error("no Solana account to sign with");
|
|
174
|
+
}
|
|
175
|
+
switch (intent) {
|
|
176
|
+
case base.SignIntent.SignMessage: {
|
|
177
|
+
const msgBytes = new TextEncoder().encode(message);
|
|
178
|
+
const msgB58 = bs58.encode(msgBytes);
|
|
179
|
+
const { signature: sigB58 } = await this.client.request(this.solChain, "solana_signMessage", {
|
|
180
|
+
pubkey: address,
|
|
181
|
+
message: msgB58,
|
|
182
|
+
});
|
|
183
|
+
return encoding.uint8ArrayToHexString(bs58.decode(sigB58));
|
|
184
|
+
}
|
|
185
|
+
case base.SignIntent.SignTransaction: {
|
|
186
|
+
const txBytes = encoding.uint8ArrayFromHexString(message);
|
|
187
|
+
const txBase64 = encoding.stringToBase64urlString(String.fromCharCode(...txBytes));
|
|
188
|
+
const { signature: sigB58 } = await this.client.request(this.solChain, "solana_signTransaction", {
|
|
189
|
+
feePayer: address,
|
|
190
|
+
transaction: txBase64,
|
|
191
|
+
});
|
|
192
|
+
return encoding.uint8ArrayToHexString(bs58.decode(sigB58));
|
|
193
|
+
}
|
|
194
|
+
case base.SignIntent.SignAndSendTransaction: {
|
|
195
|
+
const txBytes = encoding.uint8ArrayFromHexString(message);
|
|
196
|
+
const txBase64 = encoding.stringToBase64urlString(String.fromCharCode(...txBytes));
|
|
197
|
+
const sigB58 = await this.client.request(this.solChain, "solana_sendTransaction", {
|
|
198
|
+
feePayer: address,
|
|
199
|
+
transaction: txBase64,
|
|
200
|
+
options: { skipPreflight: false },
|
|
201
|
+
});
|
|
202
|
+
return encoding.uint8ArrayToHexString(bs58.decode(sigB58));
|
|
203
|
+
}
|
|
204
|
+
default:
|
|
205
|
+
throw new Error(`Unsupported Solana intent: ${intent}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
throw new Error("No supported namespace available for signing");
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Retrieves the public key of the connected wallet.
|
|
212
|
+
*
|
|
213
|
+
* @param provider - The WalletProvider to fetch the key from.
|
|
214
|
+
* @returns Compressed public key as a hex string.
|
|
215
|
+
*/
|
|
216
|
+
async getPublicKey(provider) {
|
|
217
|
+
const session = this.client.getSession();
|
|
218
|
+
if (provider.chainInfo.namespace === base.Chain.Ethereum) {
|
|
219
|
+
const address = getConnectedEthereum(session);
|
|
220
|
+
if (!address) {
|
|
221
|
+
throw new Error("No Ethereum account to retrieve public key");
|
|
222
|
+
}
|
|
223
|
+
const sig = await this.client.request(this.ethChain, "personal_sign", [
|
|
224
|
+
"GET_PUBLIC_KEY",
|
|
225
|
+
address,
|
|
226
|
+
]);
|
|
227
|
+
const rawPublicKey = await viem.recoverPublicKey({
|
|
228
|
+
hash: viem.hashMessage("GET_PUBLIC_KEY"),
|
|
229
|
+
signature: sig,
|
|
230
|
+
});
|
|
231
|
+
const publicKeyHex = rawPublicKey.startsWith("0x")
|
|
232
|
+
? rawPublicKey.slice(2)
|
|
233
|
+
: rawPublicKey;
|
|
234
|
+
const publicKeyBytes = encoding.uint8ArrayFromHexString(publicKeyHex);
|
|
235
|
+
const publicKeyBytesCompressed = crypto.compressRawPublicKey(publicKeyBytes);
|
|
236
|
+
return encoding.uint8ArrayToHexString(publicKeyBytesCompressed);
|
|
237
|
+
}
|
|
238
|
+
if (provider.chainInfo.namespace === base.Chain.Solana) {
|
|
239
|
+
const address = getConnectedSolana(session);
|
|
240
|
+
if (!address) {
|
|
241
|
+
throw new Error("No Solana account to retrieve public key");
|
|
242
|
+
}
|
|
243
|
+
const publicKeyBytes = bs58.decode(address);
|
|
244
|
+
return encoding.uint8ArrayToHexString(publicKeyBytes);
|
|
245
|
+
}
|
|
246
|
+
throw new Error("No supported namespace for public key retrieval");
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Disconnects the current session and re-initiates a fresh pairing URI.
|
|
250
|
+
*/
|
|
251
|
+
async disconnectWalletAccount(_provider) {
|
|
252
|
+
await this.client.disconnect();
|
|
253
|
+
const namespaces = {};
|
|
254
|
+
if (this.ethereumNamespaces.length > 0) {
|
|
255
|
+
namespaces.eip155 = {
|
|
256
|
+
methods: [
|
|
257
|
+
"personal_sign",
|
|
258
|
+
"eth_sendTransaction",
|
|
259
|
+
"eth_chainId",
|
|
260
|
+
"wallet_switchEthereumChain",
|
|
261
|
+
"wallet_addEthereumChain",
|
|
262
|
+
],
|
|
263
|
+
chains: this.ethereumNamespaces,
|
|
264
|
+
events: ["accountsChanged", "chainChanged"],
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
if (this.solanaNamespaces.length > 0) {
|
|
268
|
+
namespaces.solana = {
|
|
269
|
+
methods: [
|
|
270
|
+
"solana_signMessage",
|
|
271
|
+
"solana_signTransaction",
|
|
272
|
+
"solana_sendTransaction",
|
|
273
|
+
],
|
|
274
|
+
chains: this.solanaNamespaces,
|
|
275
|
+
events: ["accountsChanged", "chainChanged"],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
await this.client.pair(namespaces).then((newUri) => {
|
|
279
|
+
this.uri = newUri;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Builds a lightweight provider interface for the given chain.
|
|
284
|
+
*
|
|
285
|
+
* @param chainId - The namespace chain ID (e.g., eip155:1)
|
|
286
|
+
* @returns A WalletConnect-compatible provider implementation
|
|
287
|
+
*/
|
|
288
|
+
makeProvider(chainId) {
|
|
289
|
+
return {
|
|
290
|
+
request: ({ method, params }) => {
|
|
291
|
+
return this.client.request(chainId, method, params);
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Ensures there is an active WalletConnect session, initiating approval if necessary.
|
|
297
|
+
*
|
|
298
|
+
* @returns The current WalletConnect session
|
|
299
|
+
* @throws {Error} If approval fails or session is not established
|
|
300
|
+
*/
|
|
301
|
+
async ensureSession() {
|
|
302
|
+
let session = this.client.getSession();
|
|
303
|
+
if (!session) {
|
|
304
|
+
await this.client.approve();
|
|
305
|
+
session = this.client.getSession();
|
|
306
|
+
if (!session)
|
|
307
|
+
throw new Error("WalletConnect: approval failed");
|
|
308
|
+
}
|
|
309
|
+
return session;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Builds a WalletProvider descriptor for an EVM chain.
|
|
313
|
+
*/
|
|
314
|
+
async buildEthProvider(session, info) {
|
|
315
|
+
const raw = session?.namespaces.eip155?.accounts?.[0] ?? "";
|
|
316
|
+
const address = raw.split(":")[2];
|
|
317
|
+
const chainIdString = this.ethChain.split(":")[1] ?? "1";
|
|
318
|
+
const chainIdDecimal = Number(chainIdString);
|
|
319
|
+
const chainidHex = `0x${chainIdDecimal.toString(16)}`;
|
|
320
|
+
return {
|
|
321
|
+
interfaceType: base.WalletInterfaceType.WalletConnect,
|
|
322
|
+
chainInfo: {
|
|
323
|
+
namespace: base.Chain.Ethereum,
|
|
324
|
+
chainId: chainidHex,
|
|
325
|
+
},
|
|
326
|
+
info,
|
|
327
|
+
provider: this.makeProvider(this.ethChain),
|
|
328
|
+
connectedAddresses: address ? [address] : [],
|
|
329
|
+
...(this.uri && { uri: this.uri }),
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Builds a WalletProvider descriptor for Solana.
|
|
334
|
+
*/
|
|
335
|
+
buildSolProvider(session, info) {
|
|
336
|
+
const raw = session?.namespaces.solana?.accounts?.[0] ?? "";
|
|
337
|
+
const address = raw.split(":")[2];
|
|
338
|
+
return {
|
|
339
|
+
interfaceType: base.WalletInterfaceType.WalletConnect,
|
|
340
|
+
chainInfo: { namespace: base.Chain.Solana },
|
|
341
|
+
info,
|
|
342
|
+
provider: this.makeProvider(this.solChain),
|
|
343
|
+
connectedAddresses: address ? [address] : [],
|
|
344
|
+
...(this.uri && { uri: this.uri }),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function hasConnectedAccounts(session) {
|
|
349
|
+
return (!!session &&
|
|
350
|
+
Object.values(session.namespaces).some((ns) => ns.accounts?.length > 0));
|
|
351
|
+
}
|
|
352
|
+
function getConnectedEthereum(session) {
|
|
353
|
+
const acc = session?.namespaces.eip155?.accounts?.[0];
|
|
354
|
+
return acc ? acc.split(":")[2] : undefined;
|
|
355
|
+
}
|
|
356
|
+
function getConnectedSolana(session) {
|
|
357
|
+
const acc = session?.namespaces.solana?.accounts?.[0];
|
|
358
|
+
return acc ? acc.split(":")[2] : undefined;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
exports.WalletConnectWallet = WalletConnectWallet;
|
|
362
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../../src/__wallet__/wallet-connect/base.ts"],"sourcesContent":[null],"names":["WalletInterfaceType","Chain","SignIntent","Transaction","toHex","uint8ArrayToHexString","uint8ArrayFromHexString","stringToBase64urlString","recoverPublicKey","hashMessage","compressRawPublicKey"],"mappings":"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"}
|