@bit-buccaneers/wallet-abstraction 0.0.4 → 0.0.7
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/dist/dev.js +306 -70
- package/dist/dev.jsx +314 -73
- package/dist/index.js +306 -70
- package/dist/index.jsx +314 -73
- package/dist/lib/connectors/binance.d.ts +1 -0
- package/dist/lib/connectors/bitget.d.ts +2 -0
- package/dist/lib/connectors/coinbase.d.ts +2 -0
- package/dist/lib/connectors/exodus.d.ts +1 -0
- package/dist/lib/connectors/index.d.ts +10 -6
- package/dist/lib/connectors/metamask.d.ts +1 -0
- package/dist/lib/connectors/okx.d.ts +2 -0
- package/dist/lib/connectors/phantom.d.ts +1 -0
- package/dist/lib/connectors/shared/dapp-browser.d.ts +10 -0
- package/dist/lib/connectors/shared/index.d.ts +1 -0
- package/dist/lib/connectors/solflare.d.ts +1 -0
- package/dist/lib/connectors/trust.d.ts +1 -0
- package/dist/lib/connectors/walletconnect.d.ts +4 -0
- package/dist/lib/core/types.d.ts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/wallets/config.d.ts +2 -2
- package/package.json +1 -1
package/dist/dev.js
CHANGED
|
@@ -2,7 +2,7 @@ import { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';
|
|
|
2
2
|
import { createConfig, getConnectors, signMessage, disconnect, connect, watchConnections } from '@wagmi/core';
|
|
3
3
|
import { http } from 'viem';
|
|
4
4
|
import { mainnet } from 'viem/chains';
|
|
5
|
-
import
|
|
5
|
+
import bs582 from 'bs58';
|
|
6
6
|
import nacl from 'tweetnacl';
|
|
7
7
|
import { SignClient } from '@walletconnect/sign-client';
|
|
8
8
|
import { isWalletAdapterCompatibleStandardWallet } from '@solana/wallet-adapter-base';
|
|
@@ -154,6 +154,11 @@ var WALLETS = [
|
|
|
154
154
|
name: "Exodus",
|
|
155
155
|
icon: "https://iconic.dynamic-static-assets.com/icons/sprite.svg#exodus",
|
|
156
156
|
chromeExtensionUrl: "https://chromewebstore.google.com/detail/aholpfdialjgjfhomihkjbmgjidlcdno"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
id: "walletconnect",
|
|
160
|
+
name: "WalletConnect",
|
|
161
|
+
icon: "https://iconic.dynamic-static-assets.com/icons/sprite.svg#walletconnect"
|
|
157
162
|
}
|
|
158
163
|
];
|
|
159
164
|
|
|
@@ -204,6 +209,90 @@ var SOLANA_WC_CONFIG = {
|
|
|
204
209
|
methods: WC_METHODS.SOLANA,
|
|
205
210
|
events: WC_EVENTS.SOLANA
|
|
206
211
|
};
|
|
212
|
+
var connectEvmInjected = async () => {
|
|
213
|
+
if (!window.ethereum) throw new Error("No injected EVM provider");
|
|
214
|
+
const accounts = await window.ethereum.request({
|
|
215
|
+
method: "eth_requestAccounts"
|
|
216
|
+
});
|
|
217
|
+
if (!accounts[0]) throw new Error("No accounts returned");
|
|
218
|
+
const chainId = await window.ethereum.request({ method: "eth_chainId" });
|
|
219
|
+
return connectedResult(accounts[0], { chainId: parseInt(chainId, 16) });
|
|
220
|
+
};
|
|
221
|
+
var connectSolanaInjected = async () => {
|
|
222
|
+
if (!window.solana) throw new Error("No injected Solana provider");
|
|
223
|
+
const response = await window.solana.connect();
|
|
224
|
+
const publicKey = response.publicKey;
|
|
225
|
+
return connectedResult(publicKey.toBase58(), { publicKey: publicKey.toBytes() });
|
|
226
|
+
};
|
|
227
|
+
var signSolanaInjected = async (message) => {
|
|
228
|
+
if (!window.solana?.signMessage) {
|
|
229
|
+
throw new Error("No injected Solana provider or signMessage not supported");
|
|
230
|
+
}
|
|
231
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
232
|
+
const result = await window.solana.signMessage(encodedMessage, "utf8");
|
|
233
|
+
return bs582.encode(new Uint8Array(result.signature));
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
// src/lib/connectors/shared/utils.ts
|
|
237
|
+
var isMobile = () => {
|
|
238
|
+
return typeof window !== "undefined" && /iPhone|iPad|iPod|Android/i.test(window.navigator.userAgent);
|
|
239
|
+
};
|
|
240
|
+
var isInWalletBrowser = (key) => {
|
|
241
|
+
return typeof window !== "undefined" && !!window.ethereum?.[key];
|
|
242
|
+
};
|
|
243
|
+
var openDeeplink = (url) => {
|
|
244
|
+
const link = document.createElement("a");
|
|
245
|
+
link.href = url;
|
|
246
|
+
link.click();
|
|
247
|
+
};
|
|
248
|
+
var waitForValue = (getValue) => {
|
|
249
|
+
return new Promise((resolve) => {
|
|
250
|
+
const check = () => {
|
|
251
|
+
const value = getValue();
|
|
252
|
+
if (value != null) resolve(value);
|
|
253
|
+
else window.setTimeout(check, 50);
|
|
254
|
+
};
|
|
255
|
+
check();
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
// src/lib/connectors/shared/dapp-browser.ts
|
|
260
|
+
var buildBrowseUrl = (config2) => {
|
|
261
|
+
if (config2.buildUrl) return config2.buildUrl();
|
|
262
|
+
if (config2.stripProtocol) {
|
|
263
|
+
return `${config2.browseUrl}/${window.location.host}${window.location.pathname}${window.location.search}`;
|
|
264
|
+
}
|
|
265
|
+
return `${config2.browseUrl}/${encodeURIComponent(window.location.href)}`;
|
|
266
|
+
};
|
|
267
|
+
var createDappBrowserSolanaConnector = (config2) => {
|
|
268
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
269
|
+
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
270
|
+
return {
|
|
271
|
+
...walletConfig2,
|
|
272
|
+
type: "solana",
|
|
273
|
+
wallet: {
|
|
274
|
+
_provider: null,
|
|
275
|
+
connect: async () => {
|
|
276
|
+
if (isInWallet() && window.solana) {
|
|
277
|
+
return connectSolanaInjected();
|
|
278
|
+
}
|
|
279
|
+
window.location.href = buildBrowseUrl(config2);
|
|
280
|
+
return pendingResult();
|
|
281
|
+
},
|
|
282
|
+
disconnect: async () => {
|
|
283
|
+
if (window.solana?.disconnect) {
|
|
284
|
+
await window.solana.disconnect();
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
signMessage: async (message) => {
|
|
288
|
+
if (isInWallet() && window.solana) {
|
|
289
|
+
return signSolanaInjected(message);
|
|
290
|
+
}
|
|
291
|
+
throw new Error("signMessage requires dApp browser");
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
};
|
|
207
296
|
var getDappKeyPair = (storageKey) => {
|
|
208
297
|
const stored = storage.get(storageKey);
|
|
209
298
|
if (stored) {
|
|
@@ -223,7 +312,7 @@ var buildConnectUrl = (config2, params) => {
|
|
|
223
312
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
224
313
|
const url = new URL(config2.connectUrl);
|
|
225
314
|
url.searchParams.set("app_url", params.appUrl);
|
|
226
|
-
url.searchParams.set("dapp_encryption_public_key",
|
|
315
|
+
url.searchParams.set("dapp_encryption_public_key", bs582.encode(keyPair.publicKey));
|
|
227
316
|
url.searchParams.set("redirect_link", params.redirectUrl);
|
|
228
317
|
if (params.cluster) {
|
|
229
318
|
url.searchParams.set("cluster", params.cluster);
|
|
@@ -242,8 +331,8 @@ var parseConnectResponse = (urlParams, config2) => {
|
|
|
242
331
|
}
|
|
243
332
|
try {
|
|
244
333
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
245
|
-
const sharedSecret = nacl.box.before(
|
|
246
|
-
const decrypted = nacl.box.open.after(
|
|
334
|
+
const sharedSecret = nacl.box.before(bs582.decode(walletPublicKey), keyPair.secretKey);
|
|
335
|
+
const decrypted = nacl.box.open.after(bs582.decode(data), bs582.decode(nonce), sharedSecret);
|
|
247
336
|
if (!decrypted) {
|
|
248
337
|
return null;
|
|
249
338
|
}
|
|
@@ -293,7 +382,7 @@ var buildSignMessageUrl = (signUrl, config2, sessionKey, message, redirectUrl) =
|
|
|
293
382
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
294
383
|
const sharedSecret = new Uint8Array(session.sharedSecret);
|
|
295
384
|
const payload = {
|
|
296
|
-
message:
|
|
385
|
+
message: bs582.encode(new TextEncoder().encode(message)),
|
|
297
386
|
session: session.session,
|
|
298
387
|
display: "utf8"
|
|
299
388
|
};
|
|
@@ -304,10 +393,10 @@ var buildSignMessageUrl = (signUrl, config2, sessionKey, message, redirectUrl) =
|
|
|
304
393
|
sharedSecret
|
|
305
394
|
);
|
|
306
395
|
const url = new URL(signUrl);
|
|
307
|
-
url.searchParams.set("dapp_encryption_public_key",
|
|
308
|
-
url.searchParams.set("nonce",
|
|
396
|
+
url.searchParams.set("dapp_encryption_public_key", bs582.encode(keyPair.publicKey));
|
|
397
|
+
url.searchParams.set("nonce", bs582.encode(nonce));
|
|
309
398
|
url.searchParams.set("redirect_link", redirectUrl);
|
|
310
|
-
url.searchParams.set("payload",
|
|
399
|
+
url.searchParams.set("payload", bs582.encode(encrypted));
|
|
311
400
|
return url.toString();
|
|
312
401
|
};
|
|
313
402
|
var parseSignMessageResponse = (config2, sessionKey) => {
|
|
@@ -319,7 +408,7 @@ var parseSignMessageResponse = (config2, sessionKey) => {
|
|
|
319
408
|
if (!session) return null;
|
|
320
409
|
try {
|
|
321
410
|
const sharedSecret = new Uint8Array(session.sharedSecret);
|
|
322
|
-
const decrypted = nacl.box.open.after(
|
|
411
|
+
const decrypted = nacl.box.open.after(bs582.decode(data), bs582.decode(nonce), sharedSecret);
|
|
323
412
|
if (!decrypted) return null;
|
|
324
413
|
const response = JSON.parse(new TextDecoder().decode(decrypted));
|
|
325
414
|
return response.signature;
|
|
@@ -327,29 +416,6 @@ var parseSignMessageResponse = (config2, sessionKey) => {
|
|
|
327
416
|
return null;
|
|
328
417
|
}
|
|
329
418
|
};
|
|
330
|
-
var connectEvmInjected = async () => {
|
|
331
|
-
if (!window.ethereum) throw new Error("No injected EVM provider");
|
|
332
|
-
const accounts = await window.ethereum.request({
|
|
333
|
-
method: "eth_requestAccounts"
|
|
334
|
-
});
|
|
335
|
-
if (!accounts[0]) throw new Error("No accounts returned");
|
|
336
|
-
const chainId = await window.ethereum.request({ method: "eth_chainId" });
|
|
337
|
-
return connectedResult(accounts[0], { chainId: parseInt(chainId, 16) });
|
|
338
|
-
};
|
|
339
|
-
var connectSolanaInjected = async () => {
|
|
340
|
-
if (!window.solana) throw new Error("No injected Solana provider");
|
|
341
|
-
const response = await window.solana.connect();
|
|
342
|
-
const publicKey = response.publicKey;
|
|
343
|
-
return connectedResult(publicKey.toBase58(), { publicKey: publicKey.toBytes() });
|
|
344
|
-
};
|
|
345
|
-
var signSolanaInjected = async (message) => {
|
|
346
|
-
if (!window.solana?.signMessage) {
|
|
347
|
-
throw new Error("No injected Solana provider or signMessage not supported");
|
|
348
|
-
}
|
|
349
|
-
const encodedMessage = new TextEncoder().encode(message);
|
|
350
|
-
const result = await window.solana.signMessage(encodedMessage, "utf8");
|
|
351
|
-
return bs58.encode(new Uint8Array(result.signature));
|
|
352
|
-
};
|
|
353
419
|
|
|
354
420
|
// src/lib/connectors/shared/parsers.ts
|
|
355
421
|
var parseEvmAccount = (account) => {
|
|
@@ -360,8 +426,8 @@ var parseEvmAccount = (account) => {
|
|
|
360
426
|
var parseSolanaAccount = async (account) => {
|
|
361
427
|
const address = account.split(":")[2];
|
|
362
428
|
if (!address) throw new Error("Invalid Solana account format");
|
|
363
|
-
const { default:
|
|
364
|
-
return connectedResult(address, { publicKey:
|
|
429
|
+
const { default: bs587 } = await import('bs58');
|
|
430
|
+
return connectedResult(address, { publicKey: bs587.decode(address) });
|
|
365
431
|
};
|
|
366
432
|
var getEvmAccountFromSession = (namespaces) => {
|
|
367
433
|
const account = namespaces.eip155?.accounts?.[0];
|
|
@@ -373,29 +439,6 @@ var getSolanaAccountFromSession = async (namespaces) => {
|
|
|
373
439
|
if (!account) throw new Error("No Solana accounts returned");
|
|
374
440
|
return parseSolanaAccount(account);
|
|
375
441
|
};
|
|
376
|
-
|
|
377
|
-
// src/lib/connectors/shared/utils.ts
|
|
378
|
-
var isMobile = () => {
|
|
379
|
-
return typeof window !== "undefined" && /iPhone|iPad|iPod|Android/i.test(window.navigator.userAgent);
|
|
380
|
-
};
|
|
381
|
-
var isInWalletBrowser = (key) => {
|
|
382
|
-
return typeof window !== "undefined" && !!window.ethereum?.[key];
|
|
383
|
-
};
|
|
384
|
-
var openDeeplink = (url) => {
|
|
385
|
-
const link = document.createElement("a");
|
|
386
|
-
link.href = url;
|
|
387
|
-
link.click();
|
|
388
|
-
};
|
|
389
|
-
var waitForValue = (getValue) => {
|
|
390
|
-
return new Promise((resolve) => {
|
|
391
|
-
const check = () => {
|
|
392
|
-
const value = getValue();
|
|
393
|
-
if (value != null) resolve(value);
|
|
394
|
-
else window.setTimeout(check, 50);
|
|
395
|
-
};
|
|
396
|
-
check();
|
|
397
|
-
});
|
|
398
|
-
};
|
|
399
442
|
var signClient = null;
|
|
400
443
|
var currentSession = null;
|
|
401
444
|
var sessionChangeCallbacks = /* @__PURE__ */ new Set();
|
|
@@ -565,11 +608,11 @@ var disconnectWcOrSolana = async () => {
|
|
|
565
608
|
}
|
|
566
609
|
};
|
|
567
610
|
var createWcEvmConnector = (config2) => {
|
|
568
|
-
const
|
|
611
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
569
612
|
const getDeeplink = createDeeplink(config2.wcDeeplink);
|
|
570
613
|
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
571
614
|
return {
|
|
572
|
-
...
|
|
615
|
+
...walletConfig2,
|
|
573
616
|
type: "evm",
|
|
574
617
|
wallet: {
|
|
575
618
|
_connector: null,
|
|
@@ -610,11 +653,11 @@ var createWcEvmConnector = (config2) => {
|
|
|
610
653
|
};
|
|
611
654
|
};
|
|
612
655
|
var createWcSolanaConnector = (config2) => {
|
|
613
|
-
const
|
|
656
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
614
657
|
const getDeeplink = createDeeplink(config2.wcDeeplink);
|
|
615
658
|
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
616
659
|
return {
|
|
617
|
-
...
|
|
660
|
+
...walletConfig2,
|
|
618
661
|
type: "solana",
|
|
619
662
|
wallet: {
|
|
620
663
|
_provider: null,
|
|
@@ -641,7 +684,7 @@ var createWcSolanaConnector = (config2) => {
|
|
|
641
684
|
const messageBytes = new TextEncoder().encode(message);
|
|
642
685
|
const result = await requestWalletConnect(
|
|
643
686
|
"solana_signMessage",
|
|
644
|
-
{ message:
|
|
687
|
+
{ message: bs582.encode(messageBytes), pubkey },
|
|
645
688
|
WC_CHAINS.SOLANA_MAINNET
|
|
646
689
|
);
|
|
647
690
|
return result.signature;
|
|
@@ -654,6 +697,11 @@ var createWcSolanaConnector = (config2) => {
|
|
|
654
697
|
var PHANTOM_CONNECT_URL = "https://phantom.app/ul/v1/connect";
|
|
655
698
|
var PHANTOM_SIGN_MESSAGE_URL = "https://phantom.app/ul/v1/signMessage";
|
|
656
699
|
var PHANTOM_BROWSE_URL = "https://phantom.app/ul/browse";
|
|
700
|
+
var createPhantomSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
701
|
+
walletId: "phantom",
|
|
702
|
+
browseUrl: PHANTOM_BROWSE_URL,
|
|
703
|
+
injectedKey: "isPhantom"
|
|
704
|
+
});
|
|
657
705
|
var PHANTOM_CONFIG = {
|
|
658
706
|
connectUrl: PHANTOM_CONNECT_URL,
|
|
659
707
|
storageKeyPrefix: "phantom_mobile",
|
|
@@ -750,11 +798,24 @@ var METAMASK_CONFIG = {
|
|
|
750
798
|
wcDeeplink: "https://metamask.app.link/wc",
|
|
751
799
|
injectedKey: "isMetaMask"
|
|
752
800
|
};
|
|
801
|
+
var METAMASK_BROWSE_URL = "https://metamask.app.link/dapp";
|
|
753
802
|
var createMetaMaskEvmConnector = () => createWcEvmConnector(METAMASK_CONFIG);
|
|
803
|
+
var createMetaMaskSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
804
|
+
walletId: "metamask",
|
|
805
|
+
browseUrl: METAMASK_BROWSE_URL,
|
|
806
|
+
injectedKey: "isMetaMask",
|
|
807
|
+
stripProtocol: true
|
|
808
|
+
});
|
|
754
809
|
|
|
755
810
|
// src/lib/connectors/solflare.ts
|
|
756
811
|
var SOLFLARE_CONNECT_URL = "https://solflare.com/ul/v1/connect";
|
|
757
812
|
var SOLFLARE_SIGN_MESSAGE_URL = "https://solflare.com/ul/v1/signMessage";
|
|
813
|
+
var SOLFLARE_BROWSE_URL = "https://solflare.com/ul/v1/browse";
|
|
814
|
+
var createSolflareSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
815
|
+
walletId: "solflare",
|
|
816
|
+
browseUrl: SOLFLARE_BROWSE_URL,
|
|
817
|
+
injectedKey: "isSolflare"
|
|
818
|
+
});
|
|
758
819
|
var SOLFLARE_CONFIG = {
|
|
759
820
|
connectUrl: SOLFLARE_CONNECT_URL,
|
|
760
821
|
storageKeyPrefix: "solflare_mobile",
|
|
@@ -824,8 +885,14 @@ var TRUST_CONFIG = {
|
|
|
824
885
|
wcDeeplink: "https://link.trustwallet.com/wc",
|
|
825
886
|
injectedKey: "isTrust"
|
|
826
887
|
};
|
|
888
|
+
var TRUST_BROWSE_URL = "https://link.trustwallet.com/open_url";
|
|
827
889
|
var createTrustEvmMobileConnector = () => createWcEvmConnector(TRUST_CONFIG);
|
|
828
890
|
var createTrustSolanaMobileConnector = () => createWcSolanaConnector(TRUST_CONFIG);
|
|
891
|
+
var createTrustSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
892
|
+
walletId: "trust",
|
|
893
|
+
browseUrl: TRUST_BROWSE_URL,
|
|
894
|
+
injectedKey: "isTrust"
|
|
895
|
+
});
|
|
829
896
|
|
|
830
897
|
// src/lib/connectors/rainbow.ts
|
|
831
898
|
var RAINBOW_CONFIG = {
|
|
@@ -841,8 +908,14 @@ var EXODUS_CONFIG = {
|
|
|
841
908
|
wcDeeplink: "https://exodus.com/wc",
|
|
842
909
|
injectedKey: "isExodus"
|
|
843
910
|
};
|
|
911
|
+
var EXODUS_BROWSE_URL = "https://exodus.com/m/browser";
|
|
844
912
|
var createExodusEvmMobileConnector = () => createWcEvmConnector(EXODUS_CONFIG);
|
|
845
913
|
var createExodusSolanaMobileConnector = () => createWcSolanaConnector(EXODUS_CONFIG);
|
|
914
|
+
var createExodusSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
915
|
+
walletId: "exodus",
|
|
916
|
+
browseUrl: EXODUS_BROWSE_URL,
|
|
917
|
+
injectedKey: "isExodus"
|
|
918
|
+
});
|
|
846
919
|
|
|
847
920
|
// src/lib/connectors/binance.ts
|
|
848
921
|
var BINANCE_CONFIG = {
|
|
@@ -850,8 +923,118 @@ var BINANCE_CONFIG = {
|
|
|
850
923
|
wcDeeplink: "bnc://app.binance.com/cedefi/wc",
|
|
851
924
|
injectedKey: "isBinance"
|
|
852
925
|
};
|
|
926
|
+
var buildBinanceBrowseUrl = () => `bnc://app.binance.com/cedefi/dapp?url=${encodeURIComponent(window.location.href)}`;
|
|
853
927
|
var createBinanceEvmConnector = () => createWcEvmConnector(BINANCE_CONFIG);
|
|
854
928
|
var createBinanceSolanaConnector = () => createWcSolanaConnector(BINANCE_CONFIG);
|
|
929
|
+
var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
930
|
+
walletId: "binance",
|
|
931
|
+
injectedKey: "isBinance",
|
|
932
|
+
buildUrl: buildBinanceBrowseUrl
|
|
933
|
+
});
|
|
934
|
+
|
|
935
|
+
// src/lib/connectors/okx.ts
|
|
936
|
+
var buildOkxBrowseUrl = () => {
|
|
937
|
+
const dappUrl = window.location.href;
|
|
938
|
+
const deepLink = `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(dappUrl)}`;
|
|
939
|
+
return `https://web3.okx.com/download?deeplink=${encodeURIComponent(deepLink)}`;
|
|
940
|
+
};
|
|
941
|
+
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
942
|
+
walletId: "okx",
|
|
943
|
+
injectedKey: "isOkxWallet",
|
|
944
|
+
buildUrl: buildOkxBrowseUrl
|
|
945
|
+
});
|
|
946
|
+
|
|
947
|
+
// src/lib/connectors/coinbase.ts
|
|
948
|
+
var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
|
|
949
|
+
var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
950
|
+
walletId: "coinbase",
|
|
951
|
+
injectedKey: "isCoinbaseWallet",
|
|
952
|
+
buildUrl: buildCoinbaseBrowseUrl
|
|
953
|
+
});
|
|
954
|
+
|
|
955
|
+
// src/lib/connectors/bitget.ts
|
|
956
|
+
var BITGET_BROWSE_URL = "https://bkcode.vip/dapp";
|
|
957
|
+
var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
958
|
+
walletId: "bitget",
|
|
959
|
+
browseUrl: BITGET_BROWSE_URL,
|
|
960
|
+
injectedKey: "isBitKeep",
|
|
961
|
+
stripProtocol: true
|
|
962
|
+
});
|
|
963
|
+
var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
|
|
964
|
+
var disconnectWc2 = async () => {
|
|
965
|
+
if (getCurrentSession()) {
|
|
966
|
+
await disconnectWalletConnect();
|
|
967
|
+
}
|
|
968
|
+
};
|
|
969
|
+
var createWalletConnectEvmConnector = () => {
|
|
970
|
+
if (isMobile()) return null;
|
|
971
|
+
return {
|
|
972
|
+
id: walletConfig.id,
|
|
973
|
+
name: walletConfig.name,
|
|
974
|
+
icon: walletConfig.icon,
|
|
975
|
+
type: "evm",
|
|
976
|
+
installed: false,
|
|
977
|
+
wallet: {
|
|
978
|
+
_connector: null,
|
|
979
|
+
connect: async () => {
|
|
980
|
+
return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
|
|
981
|
+
},
|
|
982
|
+
disconnect: disconnectWc2,
|
|
983
|
+
signMessage: async (message) => {
|
|
984
|
+
const session = getCurrentSession();
|
|
985
|
+
if (!session) {
|
|
986
|
+
throw new Error("No WalletConnect session");
|
|
987
|
+
}
|
|
988
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
989
|
+
if (!account) {
|
|
990
|
+
throw new Error("No EVM account in session");
|
|
991
|
+
}
|
|
992
|
+
const address = account.split(":")[2];
|
|
993
|
+
const result = await requestWalletConnect(
|
|
994
|
+
"personal_sign",
|
|
995
|
+
[message, address],
|
|
996
|
+
WC_CHAINS.EVM_MAINNET
|
|
997
|
+
);
|
|
998
|
+
return result;
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
};
|
|
1002
|
+
};
|
|
1003
|
+
var createWalletConnectSolanaConnector = () => {
|
|
1004
|
+
if (isMobile()) return null;
|
|
1005
|
+
return {
|
|
1006
|
+
id: walletConfig.id,
|
|
1007
|
+
name: walletConfig.name,
|
|
1008
|
+
icon: walletConfig.icon,
|
|
1009
|
+
type: "solana",
|
|
1010
|
+
installed: false,
|
|
1011
|
+
wallet: {
|
|
1012
|
+
_provider: null,
|
|
1013
|
+
connect: async () => {
|
|
1014
|
+
return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
|
|
1015
|
+
},
|
|
1016
|
+
disconnect: disconnectWc2,
|
|
1017
|
+
signMessage: async (message) => {
|
|
1018
|
+
const session = getCurrentSession();
|
|
1019
|
+
if (!session) {
|
|
1020
|
+
throw new Error("No WalletConnect session");
|
|
1021
|
+
}
|
|
1022
|
+
const account = session.namespaces.solana?.accounts?.[0];
|
|
1023
|
+
if (!account) {
|
|
1024
|
+
throw new Error("No Solana account in session");
|
|
1025
|
+
}
|
|
1026
|
+
const pubkey = account.split(":")[2];
|
|
1027
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
1028
|
+
const result = await requestWalletConnect(
|
|
1029
|
+
"solana_signMessage",
|
|
1030
|
+
{ message: bs582.encode(messageBytes), pubkey },
|
|
1031
|
+
WC_CHAINS.SOLANA_MAINNET
|
|
1032
|
+
);
|
|
1033
|
+
return result.signature;
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
};
|
|
1037
|
+
};
|
|
855
1038
|
|
|
856
1039
|
// src/lib/evm/connectors.ts
|
|
857
1040
|
var EVM_FALLBACK_CONNECTORS = [
|
|
@@ -955,7 +1138,7 @@ var createSolanaConnector = (provider) => {
|
|
|
955
1138
|
const result = await signFeature.signMessage({ message: encodedMessage, account });
|
|
956
1139
|
const signature = result[0]?.signature;
|
|
957
1140
|
if (!signature) throw new Error("No signature returned");
|
|
958
|
-
return
|
|
1141
|
+
return bs582.encode(signature);
|
|
959
1142
|
}
|
|
960
1143
|
}
|
|
961
1144
|
};
|
|
@@ -972,16 +1155,59 @@ var createSolanaMobileConnector = (connector) => ({
|
|
|
972
1155
|
}
|
|
973
1156
|
}
|
|
974
1157
|
});
|
|
975
|
-
var SOLANA_FALLBACK_CONNECTORS = [
|
|
1158
|
+
var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
|
|
1159
|
+
{
|
|
1160
|
+
id: "phantom",
|
|
1161
|
+
create: () => createSolanaMobileConnector(createPhantomSolanaDappBrowserConnector())
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
id: "solflare",
|
|
1165
|
+
create: () => createSolanaMobileConnector(createSolflareSolanaDappBrowserConnector())
|
|
1166
|
+
},
|
|
1167
|
+
{
|
|
1168
|
+
id: "metamask",
|
|
1169
|
+
create: () => createSolanaMobileConnector(createMetaMaskSolanaDappBrowserConnector())
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
id: "okx",
|
|
1173
|
+
create: () => createSolanaMobileConnector(createOkxSolanaDappBrowserConnector())
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
id: "coinbase",
|
|
1177
|
+
create: () => createSolanaMobileConnector(createCoinbaseSolanaDappBrowserConnector())
|
|
1178
|
+
},
|
|
1179
|
+
{
|
|
1180
|
+
id: "bitget",
|
|
1181
|
+
create: () => createSolanaMobileConnector(createBitgetSolanaDappBrowserConnector())
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
id: "trust",
|
|
1185
|
+
create: () => createSolanaMobileConnector(createTrustSolanaDappBrowserConnector())
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
id: "binance",
|
|
1189
|
+
create: () => createSolanaMobileConnector(createBinanceSolanaDappBrowserConnector())
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
id: "exodus",
|
|
1193
|
+
create: () => createSolanaMobileConnector(createExodusSolanaDappBrowserConnector())
|
|
1194
|
+
}
|
|
1195
|
+
] : [
|
|
976
1196
|
{ id: "phantom", create: () => createSolanaMobileConnector(createPhantomSolanaConnector()) },
|
|
977
1197
|
// { id: 'metamask', create: () => createSolanaMobileConnector(createMetaMaskSolanaConnector()) },
|
|
978
1198
|
{
|
|
979
1199
|
id: "solflare",
|
|
980
1200
|
create: () => createSolanaMobileConnector(createSolflareSolanaMobileConnector())
|
|
981
1201
|
},
|
|
982
|
-
{
|
|
1202
|
+
{
|
|
1203
|
+
id: "trust",
|
|
1204
|
+
create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
|
|
1205
|
+
},
|
|
983
1206
|
{ id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
|
|
984
|
-
{
|
|
1207
|
+
{
|
|
1208
|
+
id: "exodus",
|
|
1209
|
+
create: () => createSolanaMobileConnector(createExodusSolanaMobileConnector())
|
|
1210
|
+
}
|
|
985
1211
|
];
|
|
986
1212
|
var getSolanaWallets = () => {
|
|
987
1213
|
const { get } = getWallets();
|
|
@@ -1082,7 +1308,12 @@ var useEvmWallet = (options) => {
|
|
|
1082
1308
|
const [connectedConnector, setConnectedConnector] = createSignal(null);
|
|
1083
1309
|
onMount(() => {
|
|
1084
1310
|
createEvmConfig(options.chains);
|
|
1085
|
-
|
|
1311
|
+
const connectors = getEvmConnectors();
|
|
1312
|
+
const wcConnector = createWalletConnectEvmConnector();
|
|
1313
|
+
if (wcConnector) {
|
|
1314
|
+
connectors.unshift(wcConnector);
|
|
1315
|
+
}
|
|
1316
|
+
setEvmConnectors(connectors);
|
|
1086
1317
|
const unsubscribe = watchEvmConnections((connections) => {
|
|
1087
1318
|
const connection = connections[0];
|
|
1088
1319
|
if (connection && connection.accounts[0]) {
|
|
@@ -1128,7 +1359,12 @@ var useSolanaWallet = () => {
|
|
|
1128
1359
|
null
|
|
1129
1360
|
);
|
|
1130
1361
|
onMount(() => {
|
|
1131
|
-
|
|
1362
|
+
const connectors = getSolanaWallets();
|
|
1363
|
+
const wcConnector = createWalletConnectSolanaConnector();
|
|
1364
|
+
if (wcConnector) {
|
|
1365
|
+
connectors.unshift(wcConnector);
|
|
1366
|
+
}
|
|
1367
|
+
setSolanaConnectors(connectors);
|
|
1132
1368
|
const unsubscribeWallets = onSolanaWalletsChange(setSolanaConnectors);
|
|
1133
1369
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1134
1370
|
setSolanaConnection(state.connection);
|
|
@@ -1232,7 +1468,7 @@ var useWalletConnect = (options) => {
|
|
|
1232
1468
|
const messageBytes = new TextEncoder().encode(message);
|
|
1233
1469
|
const result = await requestWalletConnect(
|
|
1234
1470
|
"solana_signMessage",
|
|
1235
|
-
{ message:
|
|
1471
|
+
{ message: bs582.encode(messageBytes), pubkey },
|
|
1236
1472
|
WC_CHAINS.SOLANA_MAINNET
|
|
1237
1473
|
);
|
|
1238
1474
|
return result.signature;
|
|
@@ -1341,4 +1577,4 @@ function useWallet() {
|
|
|
1341
1577
|
return context;
|
|
1342
1578
|
}
|
|
1343
1579
|
|
|
1344
|
-
export { WALLETS, WalletProvider, checkPhantomSignCallback, checkSolflareSignCallback, createEvmConfig, getEvmConfig, getEvmConnectors, getSolanaWallets, initWalletConnect, onSolanaWalletsChange, reconnectSolana, useWallet, watchEvmConnections, watchSolanaConnection };
|
|
1580
|
+
export { WALLETS, WalletProvider, checkPhantomSignCallback, checkSolflareSignCallback, createEvmConfig, getCurrentSession, getEvmConfig, getEvmConnectors, getSolanaWallets, initWalletConnect, onSolanaWalletsChange, onWalletConnectSessionChange, reconnectSolana, useWallet, watchEvmConnections, watchSolanaConnection };
|