@bit-buccaneers/wallet-abstraction 0.0.3 → 0.0.6
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 +302 -70
- package/dist/dev.jsx +310 -73
- package/dist/index.js +302 -70
- package/dist/index.jsx +310 -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 +14 -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 +5 -5
package/dist/dev.jsx
CHANGED
|
@@ -149,6 +149,11 @@ var WALLETS = [
|
|
|
149
149
|
name: "Exodus",
|
|
150
150
|
icon: "https://iconic.dynamic-static-assets.com/icons/sprite.svg#exodus",
|
|
151
151
|
chromeExtensionUrl: "https://chromewebstore.google.com/detail/aholpfdialjgjfhomihkjbmgjidlcdno"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
id: "walletconnect",
|
|
155
|
+
name: "WalletConnect",
|
|
156
|
+
icon: "https://iconic.dynamic-static-assets.com/icons/sprite.svg#walletconnect"
|
|
152
157
|
}
|
|
153
158
|
];
|
|
154
159
|
|
|
@@ -200,8 +205,94 @@ var SOLANA_WC_CONFIG = {
|
|
|
200
205
|
events: WC_EVENTS.SOLANA
|
|
201
206
|
};
|
|
202
207
|
|
|
203
|
-
// src/lib/connectors/shared/
|
|
208
|
+
// src/lib/connectors/shared/injected.ts
|
|
204
209
|
import bs58 from "bs58";
|
|
210
|
+
var connectEvmInjected = async () => {
|
|
211
|
+
if (!window.ethereum) throw new Error("No injected EVM provider");
|
|
212
|
+
const accounts = await window.ethereum.request({
|
|
213
|
+
method: "eth_requestAccounts"
|
|
214
|
+
});
|
|
215
|
+
if (!accounts[0]) throw new Error("No accounts returned");
|
|
216
|
+
const chainId = await window.ethereum.request({ method: "eth_chainId" });
|
|
217
|
+
return connectedResult(accounts[0], { chainId: parseInt(chainId, 16) });
|
|
218
|
+
};
|
|
219
|
+
var connectSolanaInjected = async () => {
|
|
220
|
+
if (!window.solana) throw new Error("No injected Solana provider");
|
|
221
|
+
const response = await window.solana.connect();
|
|
222
|
+
const publicKey = response.publicKey;
|
|
223
|
+
return connectedResult(publicKey.toBase58(), { publicKey: publicKey.toBytes() });
|
|
224
|
+
};
|
|
225
|
+
var signSolanaInjected = async (message) => {
|
|
226
|
+
if (!window.solana?.signMessage) {
|
|
227
|
+
throw new Error("No injected Solana provider or signMessage not supported");
|
|
228
|
+
}
|
|
229
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
230
|
+
const result = await window.solana.signMessage(encodedMessage, "utf8");
|
|
231
|
+
return bs58.encode(new Uint8Array(result.signature));
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
// src/lib/connectors/shared/utils.ts
|
|
235
|
+
var isMobile = () => {
|
|
236
|
+
return typeof window !== "undefined" && /iPhone|iPad|iPod|Android/i.test(window.navigator.userAgent);
|
|
237
|
+
};
|
|
238
|
+
var isInWalletBrowser = (key) => {
|
|
239
|
+
return typeof window !== "undefined" && !!window.ethereum?.[key];
|
|
240
|
+
};
|
|
241
|
+
var openDeeplink = (url) => {
|
|
242
|
+
const link = document.createElement("a");
|
|
243
|
+
link.href = url;
|
|
244
|
+
link.click();
|
|
245
|
+
};
|
|
246
|
+
var waitForValue = (getValue) => {
|
|
247
|
+
return new Promise((resolve) => {
|
|
248
|
+
const check = () => {
|
|
249
|
+
const value = getValue();
|
|
250
|
+
if (value != null) resolve(value);
|
|
251
|
+
else window.setTimeout(check, 50);
|
|
252
|
+
};
|
|
253
|
+
check();
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
// src/lib/connectors/shared/dapp-browser.ts
|
|
258
|
+
var buildBrowseUrl = (baseUrl, stripProtocol) => {
|
|
259
|
+
if (stripProtocol) {
|
|
260
|
+
return `${baseUrl}/${window.location.host}${window.location.pathname}${window.location.search}`;
|
|
261
|
+
}
|
|
262
|
+
return `${baseUrl}/${encodeURIComponent(window.location.href)}`;
|
|
263
|
+
};
|
|
264
|
+
var createDappBrowserSolanaConnector = (config2) => {
|
|
265
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
266
|
+
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
267
|
+
return {
|
|
268
|
+
...walletConfig2,
|
|
269
|
+
type: "solana",
|
|
270
|
+
wallet: {
|
|
271
|
+
_provider: null,
|
|
272
|
+
connect: async () => {
|
|
273
|
+
if (isInWallet() && window.solana) {
|
|
274
|
+
return connectSolanaInjected();
|
|
275
|
+
}
|
|
276
|
+
window.location.href = buildBrowseUrl(config2.browseUrl, config2.stripProtocol);
|
|
277
|
+
return pendingResult();
|
|
278
|
+
},
|
|
279
|
+
disconnect: async () => {
|
|
280
|
+
if (window.solana?.disconnect) {
|
|
281
|
+
await window.solana.disconnect();
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
signMessage: async (message) => {
|
|
285
|
+
if (isInWallet() && window.solana) {
|
|
286
|
+
return signSolanaInjected(message);
|
|
287
|
+
}
|
|
288
|
+
throw new Error("signMessage requires dApp browser");
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
// src/lib/connectors/shared/deeplink.ts
|
|
295
|
+
import bs582 from "bs58";
|
|
205
296
|
import nacl from "tweetnacl";
|
|
206
297
|
var getDappKeyPair = (storageKey) => {
|
|
207
298
|
const stored = storage.get(storageKey);
|
|
@@ -222,7 +313,7 @@ var buildConnectUrl = (config2, params) => {
|
|
|
222
313
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
223
314
|
const url = new URL(config2.connectUrl);
|
|
224
315
|
url.searchParams.set("app_url", params.appUrl);
|
|
225
|
-
url.searchParams.set("dapp_encryption_public_key",
|
|
316
|
+
url.searchParams.set("dapp_encryption_public_key", bs582.encode(keyPair.publicKey));
|
|
226
317
|
url.searchParams.set("redirect_link", params.redirectUrl);
|
|
227
318
|
if (params.cluster) {
|
|
228
319
|
url.searchParams.set("cluster", params.cluster);
|
|
@@ -241,8 +332,8 @@ var parseConnectResponse = (urlParams, config2) => {
|
|
|
241
332
|
}
|
|
242
333
|
try {
|
|
243
334
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
244
|
-
const sharedSecret = nacl.box.before(
|
|
245
|
-
const decrypted = nacl.box.open.after(
|
|
335
|
+
const sharedSecret = nacl.box.before(bs582.decode(walletPublicKey), keyPair.secretKey);
|
|
336
|
+
const decrypted = nacl.box.open.after(bs582.decode(data), bs582.decode(nonce), sharedSecret);
|
|
246
337
|
if (!decrypted) {
|
|
247
338
|
return null;
|
|
248
339
|
}
|
|
@@ -292,7 +383,7 @@ var buildSignMessageUrl = (signUrl, config2, sessionKey, message, redirectUrl) =
|
|
|
292
383
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
293
384
|
const sharedSecret = new Uint8Array(session.sharedSecret);
|
|
294
385
|
const payload = {
|
|
295
|
-
message:
|
|
386
|
+
message: bs582.encode(new TextEncoder().encode(message)),
|
|
296
387
|
session: session.session,
|
|
297
388
|
display: "utf8"
|
|
298
389
|
};
|
|
@@ -303,10 +394,10 @@ var buildSignMessageUrl = (signUrl, config2, sessionKey, message, redirectUrl) =
|
|
|
303
394
|
sharedSecret
|
|
304
395
|
);
|
|
305
396
|
const url = new URL(signUrl);
|
|
306
|
-
url.searchParams.set("dapp_encryption_public_key",
|
|
307
|
-
url.searchParams.set("nonce",
|
|
397
|
+
url.searchParams.set("dapp_encryption_public_key", bs582.encode(keyPair.publicKey));
|
|
398
|
+
url.searchParams.set("nonce", bs582.encode(nonce));
|
|
308
399
|
url.searchParams.set("redirect_link", redirectUrl);
|
|
309
|
-
url.searchParams.set("payload",
|
|
400
|
+
url.searchParams.set("payload", bs582.encode(encrypted));
|
|
310
401
|
return url.toString();
|
|
311
402
|
};
|
|
312
403
|
var parseSignMessageResponse = (config2, sessionKey) => {
|
|
@@ -318,7 +409,7 @@ var parseSignMessageResponse = (config2, sessionKey) => {
|
|
|
318
409
|
if (!session) return null;
|
|
319
410
|
try {
|
|
320
411
|
const sharedSecret = new Uint8Array(session.sharedSecret);
|
|
321
|
-
const decrypted = nacl.box.open.after(
|
|
412
|
+
const decrypted = nacl.box.open.after(bs582.decode(data), bs582.decode(nonce), sharedSecret);
|
|
322
413
|
if (!decrypted) return null;
|
|
323
414
|
const response = JSON.parse(new TextDecoder().decode(decrypted));
|
|
324
415
|
return response.signature;
|
|
@@ -327,32 +418,6 @@ var parseSignMessageResponse = (config2, sessionKey) => {
|
|
|
327
418
|
}
|
|
328
419
|
};
|
|
329
420
|
|
|
330
|
-
// src/lib/connectors/shared/injected.ts
|
|
331
|
-
import bs582 from "bs58";
|
|
332
|
-
var connectEvmInjected = async () => {
|
|
333
|
-
if (!window.ethereum) throw new Error("No injected EVM provider");
|
|
334
|
-
const accounts = await window.ethereum.request({
|
|
335
|
-
method: "eth_requestAccounts"
|
|
336
|
-
});
|
|
337
|
-
if (!accounts[0]) throw new Error("No accounts returned");
|
|
338
|
-
const chainId = await window.ethereum.request({ method: "eth_chainId" });
|
|
339
|
-
return connectedResult(accounts[0], { chainId: parseInt(chainId, 16) });
|
|
340
|
-
};
|
|
341
|
-
var connectSolanaInjected = async () => {
|
|
342
|
-
if (!window.solana) throw new Error("No injected Solana provider");
|
|
343
|
-
const response = await window.solana.connect();
|
|
344
|
-
const publicKey = response.publicKey;
|
|
345
|
-
return connectedResult(publicKey.toBase58(), { publicKey: publicKey.toBytes() });
|
|
346
|
-
};
|
|
347
|
-
var signSolanaInjected = async (message) => {
|
|
348
|
-
if (!window.solana?.signMessage) {
|
|
349
|
-
throw new Error("No injected Solana provider or signMessage not supported");
|
|
350
|
-
}
|
|
351
|
-
const encodedMessage = new TextEncoder().encode(message);
|
|
352
|
-
const result = await window.solana.signMessage(encodedMessage, "utf8");
|
|
353
|
-
return bs582.encode(new Uint8Array(result.signature));
|
|
354
|
-
};
|
|
355
|
-
|
|
356
421
|
// src/lib/connectors/shared/parsers.ts
|
|
357
422
|
var parseEvmAccount = (account) => {
|
|
358
423
|
const [, chainIdStr, address] = account.split(":");
|
|
@@ -362,8 +427,8 @@ var parseEvmAccount = (account) => {
|
|
|
362
427
|
var parseSolanaAccount = async (account) => {
|
|
363
428
|
const address = account.split(":")[2];
|
|
364
429
|
if (!address) throw new Error("Invalid Solana account format");
|
|
365
|
-
const { default:
|
|
366
|
-
return connectedResult(address, { publicKey:
|
|
430
|
+
const { default: bs587 } = await import("bs58");
|
|
431
|
+
return connectedResult(address, { publicKey: bs587.decode(address) });
|
|
367
432
|
};
|
|
368
433
|
var getEvmAccountFromSession = (namespaces) => {
|
|
369
434
|
const account = namespaces.eip155?.accounts?.[0];
|
|
@@ -376,29 +441,6 @@ var getSolanaAccountFromSession = async (namespaces) => {
|
|
|
376
441
|
return parseSolanaAccount(account);
|
|
377
442
|
};
|
|
378
443
|
|
|
379
|
-
// src/lib/connectors/shared/utils.ts
|
|
380
|
-
var isMobile = () => {
|
|
381
|
-
return typeof window !== "undefined" && /iPhone|iPad|iPod|Android/i.test(window.navigator.userAgent);
|
|
382
|
-
};
|
|
383
|
-
var isInWalletBrowser = (key) => {
|
|
384
|
-
return typeof window !== "undefined" && !!window.ethereum?.[key];
|
|
385
|
-
};
|
|
386
|
-
var openDeeplink = (url) => {
|
|
387
|
-
const link = document.createElement("a");
|
|
388
|
-
link.href = url;
|
|
389
|
-
link.click();
|
|
390
|
-
};
|
|
391
|
-
var waitForValue = (getValue) => {
|
|
392
|
-
return new Promise((resolve) => {
|
|
393
|
-
const check = () => {
|
|
394
|
-
const value = getValue();
|
|
395
|
-
if (value != null) resolve(value);
|
|
396
|
-
else window.setTimeout(check, 50);
|
|
397
|
-
};
|
|
398
|
-
check();
|
|
399
|
-
});
|
|
400
|
-
};
|
|
401
|
-
|
|
402
444
|
// src/lib/walletconnect/client.ts
|
|
403
445
|
import { SignClient } from "@walletconnect/sign-client";
|
|
404
446
|
var signClient = null;
|
|
@@ -573,11 +615,11 @@ var disconnectWcOrSolana = async () => {
|
|
|
573
615
|
}
|
|
574
616
|
};
|
|
575
617
|
var createWcEvmConnector = (config2) => {
|
|
576
|
-
const
|
|
618
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
577
619
|
const getDeeplink = createDeeplink(config2.wcDeeplink);
|
|
578
620
|
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
579
621
|
return {
|
|
580
|
-
...
|
|
622
|
+
...walletConfig2,
|
|
581
623
|
type: "evm",
|
|
582
624
|
wallet: {
|
|
583
625
|
_connector: null,
|
|
@@ -618,11 +660,11 @@ var createWcEvmConnector = (config2) => {
|
|
|
618
660
|
};
|
|
619
661
|
};
|
|
620
662
|
var createWcSolanaConnector = (config2) => {
|
|
621
|
-
const
|
|
663
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
622
664
|
const getDeeplink = createDeeplink(config2.wcDeeplink);
|
|
623
665
|
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
624
666
|
return {
|
|
625
|
-
...
|
|
667
|
+
...walletConfig2,
|
|
626
668
|
type: "solana",
|
|
627
669
|
wallet: {
|
|
628
670
|
_provider: null,
|
|
@@ -662,6 +704,11 @@ var createWcSolanaConnector = (config2) => {
|
|
|
662
704
|
var PHANTOM_CONNECT_URL = "https://phantom.app/ul/v1/connect";
|
|
663
705
|
var PHANTOM_SIGN_MESSAGE_URL = "https://phantom.app/ul/v1/signMessage";
|
|
664
706
|
var PHANTOM_BROWSE_URL = "https://phantom.app/ul/browse";
|
|
707
|
+
var createPhantomSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
708
|
+
walletId: "phantom",
|
|
709
|
+
browseUrl: PHANTOM_BROWSE_URL,
|
|
710
|
+
injectedKey: "isPhantom"
|
|
711
|
+
});
|
|
665
712
|
var PHANTOM_CONFIG = {
|
|
666
713
|
connectUrl: PHANTOM_CONNECT_URL,
|
|
667
714
|
storageKeyPrefix: "phantom_mobile",
|
|
@@ -758,11 +805,24 @@ var METAMASK_CONFIG = {
|
|
|
758
805
|
wcDeeplink: "https://metamask.app.link/wc",
|
|
759
806
|
injectedKey: "isMetaMask"
|
|
760
807
|
};
|
|
808
|
+
var METAMASK_BROWSE_URL = "https://metamask.app.link/dapp";
|
|
761
809
|
var createMetaMaskEvmConnector = () => createWcEvmConnector(METAMASK_CONFIG);
|
|
810
|
+
var createMetaMaskSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
811
|
+
walletId: "metamask",
|
|
812
|
+
browseUrl: METAMASK_BROWSE_URL,
|
|
813
|
+
injectedKey: "isMetaMask",
|
|
814
|
+
stripProtocol: true
|
|
815
|
+
});
|
|
762
816
|
|
|
763
817
|
// src/lib/connectors/solflare.ts
|
|
764
818
|
var SOLFLARE_CONNECT_URL = "https://solflare.com/ul/v1/connect";
|
|
765
819
|
var SOLFLARE_SIGN_MESSAGE_URL = "https://solflare.com/ul/v1/signMessage";
|
|
820
|
+
var SOLFLARE_BROWSE_URL = "https://solflare.com/ul/v1/browse";
|
|
821
|
+
var createSolflareSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
822
|
+
walletId: "solflare",
|
|
823
|
+
browseUrl: SOLFLARE_BROWSE_URL,
|
|
824
|
+
injectedKey: "isSolflare"
|
|
825
|
+
});
|
|
766
826
|
var SOLFLARE_CONFIG = {
|
|
767
827
|
connectUrl: SOLFLARE_CONNECT_URL,
|
|
768
828
|
storageKeyPrefix: "solflare_mobile",
|
|
@@ -832,8 +892,14 @@ var TRUST_CONFIG = {
|
|
|
832
892
|
wcDeeplink: "https://link.trustwallet.com/wc",
|
|
833
893
|
injectedKey: "isTrust"
|
|
834
894
|
};
|
|
895
|
+
var TRUST_BROWSE_URL = "https://link.trustwallet.com/open_url";
|
|
835
896
|
var createTrustEvmMobileConnector = () => createWcEvmConnector(TRUST_CONFIG);
|
|
836
897
|
var createTrustSolanaMobileConnector = () => createWcSolanaConnector(TRUST_CONFIG);
|
|
898
|
+
var createTrustSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
899
|
+
walletId: "trust",
|
|
900
|
+
browseUrl: TRUST_BROWSE_URL,
|
|
901
|
+
injectedKey: "isTrust"
|
|
902
|
+
});
|
|
837
903
|
|
|
838
904
|
// src/lib/connectors/rainbow.ts
|
|
839
905
|
var RAINBOW_CONFIG = {
|
|
@@ -849,8 +915,14 @@ var EXODUS_CONFIG = {
|
|
|
849
915
|
wcDeeplink: "https://exodus.com/wc",
|
|
850
916
|
injectedKey: "isExodus"
|
|
851
917
|
};
|
|
918
|
+
var EXODUS_BROWSE_URL = "https://exodus.com/m/browser";
|
|
852
919
|
var createExodusEvmMobileConnector = () => createWcEvmConnector(EXODUS_CONFIG);
|
|
853
920
|
var createExodusSolanaMobileConnector = () => createWcSolanaConnector(EXODUS_CONFIG);
|
|
921
|
+
var createExodusSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
922
|
+
walletId: "exodus",
|
|
923
|
+
browseUrl: EXODUS_BROWSE_URL,
|
|
924
|
+
injectedKey: "isExodus"
|
|
925
|
+
});
|
|
854
926
|
|
|
855
927
|
// src/lib/connectors/binance.ts
|
|
856
928
|
var BINANCE_CONFIG = {
|
|
@@ -858,8 +930,118 @@ var BINANCE_CONFIG = {
|
|
|
858
930
|
wcDeeplink: "bnc://app.binance.com/cedefi/wc",
|
|
859
931
|
injectedKey: "isBinance"
|
|
860
932
|
};
|
|
933
|
+
var BINANCE_BROWSE_URL = "bnc://app.binance.com/cedefi/dapp/browser";
|
|
861
934
|
var createBinanceEvmConnector = () => createWcEvmConnector(BINANCE_CONFIG);
|
|
862
935
|
var createBinanceSolanaConnector = () => createWcSolanaConnector(BINANCE_CONFIG);
|
|
936
|
+
var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
937
|
+
walletId: "binance",
|
|
938
|
+
browseUrl: BINANCE_BROWSE_URL,
|
|
939
|
+
injectedKey: "isBinance"
|
|
940
|
+
});
|
|
941
|
+
|
|
942
|
+
// src/lib/connectors/okx.ts
|
|
943
|
+
var OKX_BROWSE_URL = "https://www.okx.com/download?deeplink=";
|
|
944
|
+
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
945
|
+
walletId: "okx",
|
|
946
|
+
browseUrl: OKX_BROWSE_URL,
|
|
947
|
+
injectedKey: "isOkxWallet"
|
|
948
|
+
});
|
|
949
|
+
|
|
950
|
+
// src/lib/connectors/coinbase.ts
|
|
951
|
+
var COINBASE_BROWSE_URL = "https://go.cb-w.com/dapp";
|
|
952
|
+
var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
953
|
+
walletId: "coinbase",
|
|
954
|
+
browseUrl: COINBASE_BROWSE_URL,
|
|
955
|
+
injectedKey: "isCoinbaseWallet",
|
|
956
|
+
stripProtocol: true
|
|
957
|
+
});
|
|
958
|
+
|
|
959
|
+
// src/lib/connectors/bitget.ts
|
|
960
|
+
var BITGET_BROWSE_URL = "https://bkcode.vip/dapp";
|
|
961
|
+
var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
962
|
+
walletId: "bitget",
|
|
963
|
+
browseUrl: BITGET_BROWSE_URL,
|
|
964
|
+
injectedKey: "isBitKeep",
|
|
965
|
+
stripProtocol: true
|
|
966
|
+
});
|
|
967
|
+
|
|
968
|
+
// src/lib/connectors/walletconnect.ts
|
|
969
|
+
import bs584 from "bs58";
|
|
970
|
+
var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
|
|
971
|
+
var disconnectWc2 = async () => {
|
|
972
|
+
if (getCurrentSession()) {
|
|
973
|
+
await disconnectWalletConnect();
|
|
974
|
+
}
|
|
975
|
+
};
|
|
976
|
+
var createWalletConnectEvmConnector = () => {
|
|
977
|
+
if (isMobile()) return null;
|
|
978
|
+
return {
|
|
979
|
+
id: walletConfig.id,
|
|
980
|
+
name: walletConfig.name,
|
|
981
|
+
icon: walletConfig.icon,
|
|
982
|
+
type: "evm",
|
|
983
|
+
installed: true,
|
|
984
|
+
wallet: {
|
|
985
|
+
_connector: null,
|
|
986
|
+
connect: async () => {
|
|
987
|
+
return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
|
|
988
|
+
},
|
|
989
|
+
disconnect: disconnectWc2,
|
|
990
|
+
signMessage: async (message) => {
|
|
991
|
+
const session = getCurrentSession();
|
|
992
|
+
if (!session) {
|
|
993
|
+
throw new Error("No WalletConnect session");
|
|
994
|
+
}
|
|
995
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
996
|
+
if (!account) {
|
|
997
|
+
throw new Error("No EVM account in session");
|
|
998
|
+
}
|
|
999
|
+
const address = account.split(":")[2];
|
|
1000
|
+
const result = await requestWalletConnect(
|
|
1001
|
+
"personal_sign",
|
|
1002
|
+
[message, address],
|
|
1003
|
+
WC_CHAINS.EVM_MAINNET
|
|
1004
|
+
);
|
|
1005
|
+
return result;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
};
|
|
1009
|
+
};
|
|
1010
|
+
var createWalletConnectSolanaConnector = () => {
|
|
1011
|
+
if (isMobile()) return null;
|
|
1012
|
+
return {
|
|
1013
|
+
id: walletConfig.id,
|
|
1014
|
+
name: walletConfig.name,
|
|
1015
|
+
icon: walletConfig.icon,
|
|
1016
|
+
type: "solana",
|
|
1017
|
+
installed: true,
|
|
1018
|
+
wallet: {
|
|
1019
|
+
_provider: null,
|
|
1020
|
+
connect: async () => {
|
|
1021
|
+
return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
|
|
1022
|
+
},
|
|
1023
|
+
disconnect: disconnectWc2,
|
|
1024
|
+
signMessage: async (message) => {
|
|
1025
|
+
const session = getCurrentSession();
|
|
1026
|
+
if (!session) {
|
|
1027
|
+
throw new Error("No WalletConnect session");
|
|
1028
|
+
}
|
|
1029
|
+
const account = session.namespaces.solana?.accounts?.[0];
|
|
1030
|
+
if (!account) {
|
|
1031
|
+
throw new Error("No Solana account in session");
|
|
1032
|
+
}
|
|
1033
|
+
const pubkey = account.split(":")[2];
|
|
1034
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
1035
|
+
const result = await requestWalletConnect(
|
|
1036
|
+
"solana_signMessage",
|
|
1037
|
+
{ message: bs584.encode(messageBytes), pubkey },
|
|
1038
|
+
WC_CHAINS.SOLANA_MAINNET
|
|
1039
|
+
);
|
|
1040
|
+
return result.signature;
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
};
|
|
1044
|
+
};
|
|
863
1045
|
|
|
864
1046
|
// src/lib/evm/connectors.ts
|
|
865
1047
|
var EVM_FALLBACK_CONNECTORS = [
|
|
@@ -929,7 +1111,7 @@ import {
|
|
|
929
1111
|
isWalletAdapterCompatibleStandardWallet
|
|
930
1112
|
} from "@solana/wallet-adapter-base";
|
|
931
1113
|
import { getWallets } from "@wallet-standard/app";
|
|
932
|
-
import
|
|
1114
|
+
import bs585 from "bs58";
|
|
933
1115
|
var createSolanaConnector = (provider) => {
|
|
934
1116
|
const id = normalizeSolanaWalletId(provider.name.toLowerCase().replace(/\s+/g, "-"));
|
|
935
1117
|
const connector = {
|
|
@@ -973,7 +1155,7 @@ var createSolanaConnector = (provider) => {
|
|
|
973
1155
|
const result = await signFeature.signMessage({ message: encodedMessage, account });
|
|
974
1156
|
const signature = result[0]?.signature;
|
|
975
1157
|
if (!signature) throw new Error("No signature returned");
|
|
976
|
-
return
|
|
1158
|
+
return bs585.encode(signature);
|
|
977
1159
|
}
|
|
978
1160
|
}
|
|
979
1161
|
};
|
|
@@ -990,16 +1172,59 @@ var createSolanaMobileConnector = (connector) => ({
|
|
|
990
1172
|
}
|
|
991
1173
|
}
|
|
992
1174
|
});
|
|
993
|
-
var SOLANA_FALLBACK_CONNECTORS = [
|
|
1175
|
+
var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
|
|
1176
|
+
{
|
|
1177
|
+
id: "phantom",
|
|
1178
|
+
create: () => createSolanaMobileConnector(createPhantomSolanaDappBrowserConnector())
|
|
1179
|
+
},
|
|
1180
|
+
{
|
|
1181
|
+
id: "solflare",
|
|
1182
|
+
create: () => createSolanaMobileConnector(createSolflareSolanaDappBrowserConnector())
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
id: "metamask",
|
|
1186
|
+
create: () => createSolanaMobileConnector(createMetaMaskSolanaDappBrowserConnector())
|
|
1187
|
+
},
|
|
1188
|
+
{
|
|
1189
|
+
id: "okx",
|
|
1190
|
+
create: () => createSolanaMobileConnector(createOkxSolanaDappBrowserConnector())
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
id: "coinbase",
|
|
1194
|
+
create: () => createSolanaMobileConnector(createCoinbaseSolanaDappBrowserConnector())
|
|
1195
|
+
},
|
|
1196
|
+
{
|
|
1197
|
+
id: "bitget",
|
|
1198
|
+
create: () => createSolanaMobileConnector(createBitgetSolanaDappBrowserConnector())
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
id: "trust",
|
|
1202
|
+
create: () => createSolanaMobileConnector(createTrustSolanaDappBrowserConnector())
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
id: "binance",
|
|
1206
|
+
create: () => createSolanaMobileConnector(createBinanceSolanaDappBrowserConnector())
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
id: "exodus",
|
|
1210
|
+
create: () => createSolanaMobileConnector(createExodusSolanaDappBrowserConnector())
|
|
1211
|
+
}
|
|
1212
|
+
] : [
|
|
994
1213
|
{ id: "phantom", create: () => createSolanaMobileConnector(createPhantomSolanaConnector()) },
|
|
995
1214
|
// { id: 'metamask', create: () => createSolanaMobileConnector(createMetaMaskSolanaConnector()) },
|
|
996
1215
|
{
|
|
997
1216
|
id: "solflare",
|
|
998
1217
|
create: () => createSolanaMobileConnector(createSolflareSolanaMobileConnector())
|
|
999
1218
|
},
|
|
1000
|
-
{
|
|
1219
|
+
{
|
|
1220
|
+
id: "trust",
|
|
1221
|
+
create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
|
|
1222
|
+
},
|
|
1001
1223
|
{ id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
|
|
1002
|
-
{
|
|
1224
|
+
{
|
|
1225
|
+
id: "exodus",
|
|
1226
|
+
create: () => createSolanaMobileConnector(createExodusSolanaMobileConnector())
|
|
1227
|
+
}
|
|
1003
1228
|
];
|
|
1004
1229
|
var getSolanaWallets = () => {
|
|
1005
1230
|
const { get } = getWallets();
|
|
@@ -1109,7 +1334,12 @@ var useEvmWallet = (options) => {
|
|
|
1109
1334
|
const [connectedConnector, setConnectedConnector] = createSignal(null);
|
|
1110
1335
|
onMount(() => {
|
|
1111
1336
|
createEvmConfig(options.chains);
|
|
1112
|
-
|
|
1337
|
+
const connectors = getEvmConnectors();
|
|
1338
|
+
const wcConnector = createWalletConnectEvmConnector();
|
|
1339
|
+
if (wcConnector) {
|
|
1340
|
+
connectors.unshift(wcConnector);
|
|
1341
|
+
}
|
|
1342
|
+
setEvmConnectors(connectors);
|
|
1113
1343
|
const unsubscribe = watchEvmConnections((connections) => {
|
|
1114
1344
|
const connection = connections[0];
|
|
1115
1345
|
if (connection && connection.accounts[0]) {
|
|
@@ -1158,7 +1388,12 @@ var useSolanaWallet = () => {
|
|
|
1158
1388
|
null
|
|
1159
1389
|
);
|
|
1160
1390
|
onMount2(() => {
|
|
1161
|
-
|
|
1391
|
+
const connectors = getSolanaWallets();
|
|
1392
|
+
const wcConnector = createWalletConnectSolanaConnector();
|
|
1393
|
+
if (wcConnector) {
|
|
1394
|
+
connectors.unshift(wcConnector);
|
|
1395
|
+
}
|
|
1396
|
+
setSolanaConnectors(connectors);
|
|
1162
1397
|
const unsubscribeWallets = onSolanaWalletsChange(setSolanaConnectors);
|
|
1163
1398
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1164
1399
|
setSolanaConnection(state.connection);
|
|
@@ -1211,7 +1446,7 @@ var useSolanaWallet = () => {
|
|
|
1211
1446
|
};
|
|
1212
1447
|
|
|
1213
1448
|
// src/lib/context/hooks/useWalletConnect.ts
|
|
1214
|
-
import
|
|
1449
|
+
import bs586 from "bs58";
|
|
1215
1450
|
import { onCleanup as onCleanup3, onMount as onMount3 } from "solid-js";
|
|
1216
1451
|
var useWalletConnect = (options) => {
|
|
1217
1452
|
onMount3(async () => {
|
|
@@ -1266,7 +1501,7 @@ var useWalletConnect = (options) => {
|
|
|
1266
1501
|
const messageBytes = new TextEncoder().encode(message);
|
|
1267
1502
|
const result = await requestWalletConnect(
|
|
1268
1503
|
"solana_signMessage",
|
|
1269
|
-
{ message:
|
|
1504
|
+
{ message: bs586.encode(messageBytes), pubkey },
|
|
1270
1505
|
WC_CHAINS.SOLANA_MAINNET
|
|
1271
1506
|
);
|
|
1272
1507
|
return result.signature;
|
|
@@ -1373,11 +1608,13 @@ export {
|
|
|
1373
1608
|
checkPhantomSignCallback,
|
|
1374
1609
|
checkSolflareSignCallback,
|
|
1375
1610
|
createEvmConfig,
|
|
1611
|
+
getCurrentSession,
|
|
1376
1612
|
getEvmConfig,
|
|
1377
1613
|
getEvmConnectors,
|
|
1378
1614
|
getSolanaWallets,
|
|
1379
1615
|
initWalletConnect,
|
|
1380
1616
|
onSolanaWalletsChange,
|
|
1617
|
+
onWalletConnectSessionChange,
|
|
1381
1618
|
reconnectSolana,
|
|
1382
1619
|
useWallet,
|
|
1383
1620
|
watchEvmConnections,
|