@bit-buccaneers/wallet-abstraction 0.0.4 → 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/index.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/deeplink.ts
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", bs58.encode(keyPair.publicKey));
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(bs58.decode(walletPublicKey), keyPair.secretKey);
245
- const decrypted = nacl.box.open.after(bs58.decode(data), bs58.decode(nonce), sharedSecret);
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: bs58.encode(new TextEncoder().encode(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", bs58.encode(keyPair.publicKey));
307
- url.searchParams.set("nonce", bs58.encode(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", bs58.encode(encrypted));
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(bs58.decode(data), bs58.decode(nonce), sharedSecret);
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: bs586 } = await import("bs58");
366
- return connectedResult(address, { publicKey: bs586.decode(address) });
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;
@@ -568,11 +610,11 @@ var disconnectWcOrSolana = async () => {
568
610
  }
569
611
  };
570
612
  var createWcEvmConnector = (config2) => {
571
- const walletConfig = WALLETS.find((w) => w.id === config2.walletId);
613
+ const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
572
614
  const getDeeplink = createDeeplink(config2.wcDeeplink);
573
615
  const isInWallet = () => isInWalletBrowser(config2.injectedKey);
574
616
  return {
575
- ...walletConfig,
617
+ ...walletConfig2,
576
618
  type: "evm",
577
619
  wallet: {
578
620
  _connector: null,
@@ -613,11 +655,11 @@ var createWcEvmConnector = (config2) => {
613
655
  };
614
656
  };
615
657
  var createWcSolanaConnector = (config2) => {
616
- const walletConfig = WALLETS.find((w) => w.id === config2.walletId);
658
+ const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
617
659
  const getDeeplink = createDeeplink(config2.wcDeeplink);
618
660
  const isInWallet = () => isInWalletBrowser(config2.injectedKey);
619
661
  return {
620
- ...walletConfig,
662
+ ...walletConfig2,
621
663
  type: "solana",
622
664
  wallet: {
623
665
  _provider: null,
@@ -657,6 +699,11 @@ var createWcSolanaConnector = (config2) => {
657
699
  var PHANTOM_CONNECT_URL = "https://phantom.app/ul/v1/connect";
658
700
  var PHANTOM_SIGN_MESSAGE_URL = "https://phantom.app/ul/v1/signMessage";
659
701
  var PHANTOM_BROWSE_URL = "https://phantom.app/ul/browse";
702
+ var createPhantomSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
703
+ walletId: "phantom",
704
+ browseUrl: PHANTOM_BROWSE_URL,
705
+ injectedKey: "isPhantom"
706
+ });
660
707
  var PHANTOM_CONFIG = {
661
708
  connectUrl: PHANTOM_CONNECT_URL,
662
709
  storageKeyPrefix: "phantom_mobile",
@@ -753,11 +800,24 @@ var METAMASK_CONFIG = {
753
800
  wcDeeplink: "https://metamask.app.link/wc",
754
801
  injectedKey: "isMetaMask"
755
802
  };
803
+ var METAMASK_BROWSE_URL = "https://metamask.app.link/dapp";
756
804
  var createMetaMaskEvmConnector = () => createWcEvmConnector(METAMASK_CONFIG);
805
+ var createMetaMaskSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
806
+ walletId: "metamask",
807
+ browseUrl: METAMASK_BROWSE_URL,
808
+ injectedKey: "isMetaMask",
809
+ stripProtocol: true
810
+ });
757
811
 
758
812
  // src/lib/connectors/solflare.ts
759
813
  var SOLFLARE_CONNECT_URL = "https://solflare.com/ul/v1/connect";
760
814
  var SOLFLARE_SIGN_MESSAGE_URL = "https://solflare.com/ul/v1/signMessage";
815
+ var SOLFLARE_BROWSE_URL = "https://solflare.com/ul/v1/browse";
816
+ var createSolflareSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
817
+ walletId: "solflare",
818
+ browseUrl: SOLFLARE_BROWSE_URL,
819
+ injectedKey: "isSolflare"
820
+ });
761
821
  var SOLFLARE_CONFIG = {
762
822
  connectUrl: SOLFLARE_CONNECT_URL,
763
823
  storageKeyPrefix: "solflare_mobile",
@@ -827,8 +887,14 @@ var TRUST_CONFIG = {
827
887
  wcDeeplink: "https://link.trustwallet.com/wc",
828
888
  injectedKey: "isTrust"
829
889
  };
890
+ var TRUST_BROWSE_URL = "https://link.trustwallet.com/open_url";
830
891
  var createTrustEvmMobileConnector = () => createWcEvmConnector(TRUST_CONFIG);
831
892
  var createTrustSolanaMobileConnector = () => createWcSolanaConnector(TRUST_CONFIG);
893
+ var createTrustSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
894
+ walletId: "trust",
895
+ browseUrl: TRUST_BROWSE_URL,
896
+ injectedKey: "isTrust"
897
+ });
832
898
 
833
899
  // src/lib/connectors/rainbow.ts
834
900
  var RAINBOW_CONFIG = {
@@ -844,8 +910,14 @@ var EXODUS_CONFIG = {
844
910
  wcDeeplink: "https://exodus.com/wc",
845
911
  injectedKey: "isExodus"
846
912
  };
913
+ var EXODUS_BROWSE_URL = "https://exodus.com/m/browser";
847
914
  var createExodusEvmMobileConnector = () => createWcEvmConnector(EXODUS_CONFIG);
848
915
  var createExodusSolanaMobileConnector = () => createWcSolanaConnector(EXODUS_CONFIG);
916
+ var createExodusSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
917
+ walletId: "exodus",
918
+ browseUrl: EXODUS_BROWSE_URL,
919
+ injectedKey: "isExodus"
920
+ });
849
921
 
850
922
  // src/lib/connectors/binance.ts
851
923
  var BINANCE_CONFIG = {
@@ -853,8 +925,118 @@ var BINANCE_CONFIG = {
853
925
  wcDeeplink: "bnc://app.binance.com/cedefi/wc",
854
926
  injectedKey: "isBinance"
855
927
  };
928
+ var BINANCE_BROWSE_URL = "bnc://app.binance.com/cedefi/dapp/browser";
856
929
  var createBinanceEvmConnector = () => createWcEvmConnector(BINANCE_CONFIG);
857
930
  var createBinanceSolanaConnector = () => createWcSolanaConnector(BINANCE_CONFIG);
931
+ var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
932
+ walletId: "binance",
933
+ browseUrl: BINANCE_BROWSE_URL,
934
+ injectedKey: "isBinance"
935
+ });
936
+
937
+ // src/lib/connectors/okx.ts
938
+ var OKX_BROWSE_URL = "https://www.okx.com/download?deeplink=";
939
+ var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
940
+ walletId: "okx",
941
+ browseUrl: OKX_BROWSE_URL,
942
+ injectedKey: "isOkxWallet"
943
+ });
944
+
945
+ // src/lib/connectors/coinbase.ts
946
+ var COINBASE_BROWSE_URL = "https://go.cb-w.com/dapp";
947
+ var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
948
+ walletId: "coinbase",
949
+ browseUrl: COINBASE_BROWSE_URL,
950
+ injectedKey: "isCoinbaseWallet",
951
+ stripProtocol: true
952
+ });
953
+
954
+ // src/lib/connectors/bitget.ts
955
+ var BITGET_BROWSE_URL = "https://bkcode.vip/dapp";
956
+ var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
957
+ walletId: "bitget",
958
+ browseUrl: BITGET_BROWSE_URL,
959
+ injectedKey: "isBitKeep",
960
+ stripProtocol: true
961
+ });
962
+
963
+ // src/lib/connectors/walletconnect.ts
964
+ import bs584 from "bs58";
965
+ var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
966
+ var disconnectWc2 = async () => {
967
+ if (getCurrentSession()) {
968
+ await disconnectWalletConnect();
969
+ }
970
+ };
971
+ var createWalletConnectEvmConnector = () => {
972
+ if (isMobile()) return null;
973
+ return {
974
+ id: walletConfig.id,
975
+ name: walletConfig.name,
976
+ icon: walletConfig.icon,
977
+ type: "evm",
978
+ installed: true,
979
+ wallet: {
980
+ _connector: null,
981
+ connect: async () => {
982
+ return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
983
+ },
984
+ disconnect: disconnectWc2,
985
+ signMessage: async (message) => {
986
+ const session = getCurrentSession();
987
+ if (!session) {
988
+ throw new Error("No WalletConnect session");
989
+ }
990
+ const account = session.namespaces.eip155?.accounts?.[0];
991
+ if (!account) {
992
+ throw new Error("No EVM account in session");
993
+ }
994
+ const address = account.split(":")[2];
995
+ const result = await requestWalletConnect(
996
+ "personal_sign",
997
+ [message, address],
998
+ WC_CHAINS.EVM_MAINNET
999
+ );
1000
+ return result;
1001
+ }
1002
+ }
1003
+ };
1004
+ };
1005
+ var createWalletConnectSolanaConnector = () => {
1006
+ if (isMobile()) return null;
1007
+ return {
1008
+ id: walletConfig.id,
1009
+ name: walletConfig.name,
1010
+ icon: walletConfig.icon,
1011
+ type: "solana",
1012
+ installed: true,
1013
+ wallet: {
1014
+ _provider: null,
1015
+ connect: async () => {
1016
+ return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
1017
+ },
1018
+ disconnect: disconnectWc2,
1019
+ signMessage: async (message) => {
1020
+ const session = getCurrentSession();
1021
+ if (!session) {
1022
+ throw new Error("No WalletConnect session");
1023
+ }
1024
+ const account = session.namespaces.solana?.accounts?.[0];
1025
+ if (!account) {
1026
+ throw new Error("No Solana account in session");
1027
+ }
1028
+ const pubkey = account.split(":")[2];
1029
+ const messageBytes = new TextEncoder().encode(message);
1030
+ const result = await requestWalletConnect(
1031
+ "solana_signMessage",
1032
+ { message: bs584.encode(messageBytes), pubkey },
1033
+ WC_CHAINS.SOLANA_MAINNET
1034
+ );
1035
+ return result.signature;
1036
+ }
1037
+ }
1038
+ };
1039
+ };
858
1040
 
859
1041
  // src/lib/evm/connectors.ts
860
1042
  var EVM_FALLBACK_CONNECTORS = [
@@ -924,7 +1106,7 @@ import {
924
1106
  isWalletAdapterCompatibleStandardWallet
925
1107
  } from "@solana/wallet-adapter-base";
926
1108
  import { getWallets } from "@wallet-standard/app";
927
- import bs584 from "bs58";
1109
+ import bs585 from "bs58";
928
1110
  var createSolanaConnector = (provider) => {
929
1111
  const id = normalizeSolanaWalletId(provider.name.toLowerCase().replace(/\s+/g, "-"));
930
1112
  const connector = {
@@ -968,7 +1150,7 @@ var createSolanaConnector = (provider) => {
968
1150
  const result = await signFeature.signMessage({ message: encodedMessage, account });
969
1151
  const signature = result[0]?.signature;
970
1152
  if (!signature) throw new Error("No signature returned");
971
- return bs584.encode(signature);
1153
+ return bs585.encode(signature);
972
1154
  }
973
1155
  }
974
1156
  };
@@ -985,16 +1167,59 @@ var createSolanaMobileConnector = (connector) => ({
985
1167
  }
986
1168
  }
987
1169
  });
988
- var SOLANA_FALLBACK_CONNECTORS = [
1170
+ var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
1171
+ {
1172
+ id: "phantom",
1173
+ create: () => createSolanaMobileConnector(createPhantomSolanaDappBrowserConnector())
1174
+ },
1175
+ {
1176
+ id: "solflare",
1177
+ create: () => createSolanaMobileConnector(createSolflareSolanaDappBrowserConnector())
1178
+ },
1179
+ {
1180
+ id: "metamask",
1181
+ create: () => createSolanaMobileConnector(createMetaMaskSolanaDappBrowserConnector())
1182
+ },
1183
+ {
1184
+ id: "okx",
1185
+ create: () => createSolanaMobileConnector(createOkxSolanaDappBrowserConnector())
1186
+ },
1187
+ {
1188
+ id: "coinbase",
1189
+ create: () => createSolanaMobileConnector(createCoinbaseSolanaDappBrowserConnector())
1190
+ },
1191
+ {
1192
+ id: "bitget",
1193
+ create: () => createSolanaMobileConnector(createBitgetSolanaDappBrowserConnector())
1194
+ },
1195
+ {
1196
+ id: "trust",
1197
+ create: () => createSolanaMobileConnector(createTrustSolanaDappBrowserConnector())
1198
+ },
1199
+ {
1200
+ id: "binance",
1201
+ create: () => createSolanaMobileConnector(createBinanceSolanaDappBrowserConnector())
1202
+ },
1203
+ {
1204
+ id: "exodus",
1205
+ create: () => createSolanaMobileConnector(createExodusSolanaDappBrowserConnector())
1206
+ }
1207
+ ] : [
989
1208
  { id: "phantom", create: () => createSolanaMobileConnector(createPhantomSolanaConnector()) },
990
1209
  // { id: 'metamask', create: () => createSolanaMobileConnector(createMetaMaskSolanaConnector()) },
991
1210
  {
992
1211
  id: "solflare",
993
1212
  create: () => createSolanaMobileConnector(createSolflareSolanaMobileConnector())
994
1213
  },
995
- { id: "trust", create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector()) },
1214
+ {
1215
+ id: "trust",
1216
+ create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
1217
+ },
996
1218
  { id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
997
- { id: "exodus", create: () => createSolanaMobileConnector(createExodusSolanaMobileConnector()) }
1219
+ {
1220
+ id: "exodus",
1221
+ create: () => createSolanaMobileConnector(createExodusSolanaMobileConnector())
1222
+ }
998
1223
  ];
999
1224
  var getSolanaWallets = () => {
1000
1225
  const { get } = getWallets();
@@ -1104,7 +1329,12 @@ var useEvmWallet = (options) => {
1104
1329
  const [connectedConnector, setConnectedConnector] = createSignal(null);
1105
1330
  onMount(() => {
1106
1331
  createEvmConfig(options.chains);
1107
- setEvmConnectors(getEvmConnectors());
1332
+ const connectors = getEvmConnectors();
1333
+ const wcConnector = createWalletConnectEvmConnector();
1334
+ if (wcConnector) {
1335
+ connectors.unshift(wcConnector);
1336
+ }
1337
+ setEvmConnectors(connectors);
1108
1338
  const unsubscribe = watchEvmConnections((connections) => {
1109
1339
  const connection = connections[0];
1110
1340
  if (connection && connection.accounts[0]) {
@@ -1153,7 +1383,12 @@ var useSolanaWallet = () => {
1153
1383
  null
1154
1384
  );
1155
1385
  onMount2(() => {
1156
- setSolanaConnectors(getSolanaWallets());
1386
+ const connectors = getSolanaWallets();
1387
+ const wcConnector = createWalletConnectSolanaConnector();
1388
+ if (wcConnector) {
1389
+ connectors.unshift(wcConnector);
1390
+ }
1391
+ setSolanaConnectors(connectors);
1157
1392
  const unsubscribeWallets = onSolanaWalletsChange(setSolanaConnectors);
1158
1393
  const unsubscribeConnection = watchSolanaConnection((state) => {
1159
1394
  setSolanaConnection(state.connection);
@@ -1206,7 +1441,7 @@ var useSolanaWallet = () => {
1206
1441
  };
1207
1442
 
1208
1443
  // src/lib/context/hooks/useWalletConnect.ts
1209
- import bs585 from "bs58";
1444
+ import bs586 from "bs58";
1210
1445
  import { onCleanup as onCleanup3, onMount as onMount3 } from "solid-js";
1211
1446
  var useWalletConnect = (options) => {
1212
1447
  onMount3(async () => {
@@ -1261,7 +1496,7 @@ var useWalletConnect = (options) => {
1261
1496
  const messageBytes = new TextEncoder().encode(message);
1262
1497
  const result = await requestWalletConnect(
1263
1498
  "solana_signMessage",
1264
- { message: bs585.encode(messageBytes), pubkey },
1499
+ { message: bs586.encode(messageBytes), pubkey },
1265
1500
  WC_CHAINS.SOLANA_MAINNET
1266
1501
  );
1267
1502
  return result.signature;
@@ -1368,11 +1603,13 @@ export {
1368
1603
  checkPhantomSignCallback,
1369
1604
  checkSolflareSignCallback,
1370
1605
  createEvmConfig,
1606
+ getCurrentSession,
1371
1607
  getEvmConfig,
1372
1608
  getEvmConnectors,
1373
1609
  getSolanaWallets,
1374
1610
  initWalletConnect,
1375
1611
  onSolanaWalletsChange,
1612
+ onWalletConnectSessionChange,
1376
1613
  reconnectSolana,
1377
1614
  useWallet,
1378
1615
  watchEvmConnections,
@@ -2,3 +2,4 @@ import type { EvmWalletConnector } from '../evm';
2
2
  import type { SolanaWalletConnector } from '../solana';
3
3
  export declare const createBinanceEvmConnector: () => EvmWalletConnector;
4
4
  export declare const createBinanceSolanaConnector: () => SolanaWalletConnector;
5
+ export declare const createBinanceSolanaDappBrowserConnector: () => SolanaWalletConnector;
@@ -0,0 +1,2 @@
1
+ import type { SolanaWalletConnector } from '../solana';
2
+ export declare const createBitgetSolanaDappBrowserConnector: () => SolanaWalletConnector;
@@ -0,0 +1,2 @@
1
+ import type { SolanaWalletConnector } from '../solana';
2
+ export declare const createCoinbaseSolanaDappBrowserConnector: () => SolanaWalletConnector;
@@ -2,3 +2,4 @@ import type { EvmWalletConnector } from '../evm';
2
2
  import type { SolanaWalletConnector } from '../solana';
3
3
  export declare const createExodusEvmMobileConnector: () => EvmWalletConnector;
4
4
  export declare const createExodusSolanaMobileConnector: () => SolanaWalletConnector;
5
+ export declare const createExodusSolanaDappBrowserConnector: () => SolanaWalletConnector;
@@ -1,7 +1,11 @@
1
- export { createPhantomEvmConnector, createPhantomSolanaConnector, isPhantomMobilePending, handlePhantomMobileCallback, restorePhantomMobileSession, isPhantomSignPending, handlePhantomSignCallback, } from './phantom';
2
- export { createMetaMaskEvmConnector, createMetaMaskSolanaConnector } from './metamask';
3
- export { createSolflareSolanaMobileConnector, isSolflareMobilePending, handleSolflareMobileCallback, restoreSolflareMobileSession, isSolflareSignPending, handleSolflareSignCallback, } from './solflare';
4
- export { createTrustEvmMobileConnector, createTrustSolanaMobileConnector } from './trust';
1
+ export { createPhantomEvmConnector, createPhantomSolanaConnector, createPhantomSolanaDappBrowserConnector, isPhantomMobilePending, handlePhantomMobileCallback, restorePhantomMobileSession, isPhantomSignPending, handlePhantomSignCallback, } from './phantom';
2
+ export { createMetaMaskEvmConnector, createMetaMaskSolanaConnector, createMetaMaskSolanaDappBrowserConnector, } from './metamask';
3
+ export { createSolflareSolanaMobileConnector, createSolflareSolanaDappBrowserConnector, isSolflareMobilePending, handleSolflareMobileCallback, restoreSolflareMobileSession, isSolflareSignPending, handleSolflareSignCallback, } from './solflare';
4
+ export { createTrustEvmMobileConnector, createTrustSolanaMobileConnector, createTrustSolanaDappBrowserConnector, } from './trust';
5
5
  export { createRainbowEvmMobileConnector } from './rainbow';
6
- export { createExodusEvmMobileConnector, createExodusSolanaMobileConnector } from './exodus';
7
- export { createBinanceEvmConnector, createBinanceSolanaConnector } from './binance';
6
+ export { createExodusEvmMobileConnector, createExodusSolanaMobileConnector, createExodusSolanaDappBrowserConnector, } from './exodus';
7
+ export { createBinanceEvmConnector, createBinanceSolanaConnector, createBinanceSolanaDappBrowserConnector, } from './binance';
8
+ export { createOkxSolanaDappBrowserConnector } from './okx';
9
+ export { createCoinbaseSolanaDappBrowserConnector } from './coinbase';
10
+ export { createBitgetSolanaDappBrowserConnector } from './bitget';
11
+ export { createWalletConnectEvmConnector, createWalletConnectSolanaConnector, } from './walletconnect';
@@ -2,3 +2,4 @@ import type { EvmWalletConnector } from '../evm';
2
2
  import type { SolanaWalletConnector } from '../solana';
3
3
  export declare const createMetaMaskEvmConnector: () => EvmWalletConnector;
4
4
  export declare const createMetaMaskSolanaConnector: () => SolanaWalletConnector;
5
+ export declare const createMetaMaskSolanaDappBrowserConnector: () => SolanaWalletConnector;
@@ -0,0 +1,2 @@
1
+ import type { SolanaWalletConnector } from '../solana';
2
+ export declare const createOkxSolanaDappBrowserConnector: () => SolanaWalletConnector;
@@ -1,6 +1,7 @@
1
1
  import { type ConnectedResult } from '../core';
2
2
  import type { EvmWalletConnector } from '../evm';
3
3
  import type { SolanaWalletConnector } from '../solana';
4
+ export declare const createPhantomSolanaDappBrowserConnector: () => SolanaWalletConnector;
4
5
  export declare const createPhantomEvmConnector: () => EvmWalletConnector;
5
6
  export declare const createPhantomSolanaConnector: () => SolanaWalletConnector;
6
7
  export declare const isPhantomMobilePending: () => boolean;
@@ -0,0 +1,14 @@
1
+ import type { SolanaWalletConnector } from '../../solana';
2
+ import { type WalletId } from '../../wallets';
3
+ export interface DappBrowserConfig {
4
+ walletId: WalletId;
5
+ browseUrl: string;
6
+ injectedKey: string;
7
+ /** If true, URL is passed without protocol (e.g. MetaMask: host:port/path) */
8
+ stripProtocol?: boolean;
9
+ }
10
+ /**
11
+ * Create a Solana connector that opens the site in wallet's dApp browser.
12
+ * Inside the dApp browser, uses injected window.solana for connect/sign.
13
+ */
14
+ export declare const createDappBrowserSolanaConnector: (config: DappBrowserConfig) => SolanaWalletConnector;
@@ -1,4 +1,5 @@
1
1
  export * from './constants';
2
+ export * from './dapp-browser';
2
3
  export * from './deeplink';
3
4
  export * from './injected';
4
5
  export * from './parsers';
@@ -1,6 +1,7 @@
1
1
  import { type ConnectedResult } from '../core';
2
2
  import type { SolanaWalletConnector } from '../solana';
3
3
  import { type StoredSession } from './shared';
4
+ export declare const createSolflareSolanaDappBrowserConnector: () => SolanaWalletConnector;
4
5
  export declare const createSolflareSolanaMobileConnector: () => SolanaWalletConnector;
5
6
  export declare const isSolflareMobilePending: () => boolean;
6
7
  export declare const handleSolflareMobileCallback: () => ConnectedResult | null;
@@ -2,3 +2,4 @@ import type { EvmWalletConnector } from '../evm';
2
2
  import type { SolanaWalletConnector } from '../solana';
3
3
  export declare const createTrustEvmMobileConnector: () => EvmWalletConnector;
4
4
  export declare const createTrustSolanaMobileConnector: () => SolanaWalletConnector;
5
+ export declare const createTrustSolanaDappBrowserConnector: () => SolanaWalletConnector;