@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/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,95 @@ 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 = (config2) => {
|
|
259
|
+
if (config2.buildUrl) return config2.buildUrl();
|
|
260
|
+
if (config2.stripProtocol) {
|
|
261
|
+
return `${config2.browseUrl}/${window.location.host}${window.location.pathname}${window.location.search}`;
|
|
262
|
+
}
|
|
263
|
+
return `${config2.browseUrl}/${encodeURIComponent(window.location.href)}`;
|
|
264
|
+
};
|
|
265
|
+
var createDappBrowserSolanaConnector = (config2) => {
|
|
266
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
267
|
+
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
268
|
+
return {
|
|
269
|
+
...walletConfig2,
|
|
270
|
+
type: "solana",
|
|
271
|
+
wallet: {
|
|
272
|
+
_provider: null,
|
|
273
|
+
connect: async () => {
|
|
274
|
+
if (isInWallet() && window.solana) {
|
|
275
|
+
return connectSolanaInjected();
|
|
276
|
+
}
|
|
277
|
+
window.location.href = buildBrowseUrl(config2);
|
|
278
|
+
return pendingResult();
|
|
279
|
+
},
|
|
280
|
+
disconnect: async () => {
|
|
281
|
+
if (window.solana?.disconnect) {
|
|
282
|
+
await window.solana.disconnect();
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
signMessage: async (message) => {
|
|
286
|
+
if (isInWallet() && window.solana) {
|
|
287
|
+
return signSolanaInjected(message);
|
|
288
|
+
}
|
|
289
|
+
throw new Error("signMessage requires dApp browser");
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
// src/lib/connectors/shared/deeplink.ts
|
|
296
|
+
import bs582 from "bs58";
|
|
205
297
|
import nacl from "tweetnacl";
|
|
206
298
|
var getDappKeyPair = (storageKey) => {
|
|
207
299
|
const stored = storage.get(storageKey);
|
|
@@ -222,7 +314,7 @@ var buildConnectUrl = (config2, params) => {
|
|
|
222
314
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
223
315
|
const url = new URL(config2.connectUrl);
|
|
224
316
|
url.searchParams.set("app_url", params.appUrl);
|
|
225
|
-
url.searchParams.set("dapp_encryption_public_key",
|
|
317
|
+
url.searchParams.set("dapp_encryption_public_key", bs582.encode(keyPair.publicKey));
|
|
226
318
|
url.searchParams.set("redirect_link", params.redirectUrl);
|
|
227
319
|
if (params.cluster) {
|
|
228
320
|
url.searchParams.set("cluster", params.cluster);
|
|
@@ -241,8 +333,8 @@ var parseConnectResponse = (urlParams, config2) => {
|
|
|
241
333
|
}
|
|
242
334
|
try {
|
|
243
335
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
244
|
-
const sharedSecret = nacl.box.before(
|
|
245
|
-
const decrypted = nacl.box.open.after(
|
|
336
|
+
const sharedSecret = nacl.box.before(bs582.decode(walletPublicKey), keyPair.secretKey);
|
|
337
|
+
const decrypted = nacl.box.open.after(bs582.decode(data), bs582.decode(nonce), sharedSecret);
|
|
246
338
|
if (!decrypted) {
|
|
247
339
|
return null;
|
|
248
340
|
}
|
|
@@ -292,7 +384,7 @@ var buildSignMessageUrl = (signUrl, config2, sessionKey, message, redirectUrl) =
|
|
|
292
384
|
const keyPair = getDappKeyPair(`${config2.storageKeyPrefix}_keypair`);
|
|
293
385
|
const sharedSecret = new Uint8Array(session.sharedSecret);
|
|
294
386
|
const payload = {
|
|
295
|
-
message:
|
|
387
|
+
message: bs582.encode(new TextEncoder().encode(message)),
|
|
296
388
|
session: session.session,
|
|
297
389
|
display: "utf8"
|
|
298
390
|
};
|
|
@@ -303,10 +395,10 @@ var buildSignMessageUrl = (signUrl, config2, sessionKey, message, redirectUrl) =
|
|
|
303
395
|
sharedSecret
|
|
304
396
|
);
|
|
305
397
|
const url = new URL(signUrl);
|
|
306
|
-
url.searchParams.set("dapp_encryption_public_key",
|
|
307
|
-
url.searchParams.set("nonce",
|
|
398
|
+
url.searchParams.set("dapp_encryption_public_key", bs582.encode(keyPair.publicKey));
|
|
399
|
+
url.searchParams.set("nonce", bs582.encode(nonce));
|
|
308
400
|
url.searchParams.set("redirect_link", redirectUrl);
|
|
309
|
-
url.searchParams.set("payload",
|
|
401
|
+
url.searchParams.set("payload", bs582.encode(encrypted));
|
|
310
402
|
return url.toString();
|
|
311
403
|
};
|
|
312
404
|
var parseSignMessageResponse = (config2, sessionKey) => {
|
|
@@ -318,7 +410,7 @@ var parseSignMessageResponse = (config2, sessionKey) => {
|
|
|
318
410
|
if (!session) return null;
|
|
319
411
|
try {
|
|
320
412
|
const sharedSecret = new Uint8Array(session.sharedSecret);
|
|
321
|
-
const decrypted = nacl.box.open.after(
|
|
413
|
+
const decrypted = nacl.box.open.after(bs582.decode(data), bs582.decode(nonce), sharedSecret);
|
|
322
414
|
if (!decrypted) return null;
|
|
323
415
|
const response = JSON.parse(new TextDecoder().decode(decrypted));
|
|
324
416
|
return response.signature;
|
|
@@ -327,32 +419,6 @@ var parseSignMessageResponse = (config2, sessionKey) => {
|
|
|
327
419
|
}
|
|
328
420
|
};
|
|
329
421
|
|
|
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
422
|
// src/lib/connectors/shared/parsers.ts
|
|
357
423
|
var parseEvmAccount = (account) => {
|
|
358
424
|
const [, chainIdStr, address] = account.split(":");
|
|
@@ -362,8 +428,8 @@ var parseEvmAccount = (account) => {
|
|
|
362
428
|
var parseSolanaAccount = async (account) => {
|
|
363
429
|
const address = account.split(":")[2];
|
|
364
430
|
if (!address) throw new Error("Invalid Solana account format");
|
|
365
|
-
const { default:
|
|
366
|
-
return connectedResult(address, { publicKey:
|
|
431
|
+
const { default: bs587 } = await import("bs58");
|
|
432
|
+
return connectedResult(address, { publicKey: bs587.decode(address) });
|
|
367
433
|
};
|
|
368
434
|
var getEvmAccountFromSession = (namespaces) => {
|
|
369
435
|
const account = namespaces.eip155?.accounts?.[0];
|
|
@@ -376,29 +442,6 @@ var getSolanaAccountFromSession = async (namespaces) => {
|
|
|
376
442
|
return parseSolanaAccount(account);
|
|
377
443
|
};
|
|
378
444
|
|
|
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
445
|
// src/lib/walletconnect/client.ts
|
|
403
446
|
import { SignClient } from "@walletconnect/sign-client";
|
|
404
447
|
var signClient = null;
|
|
@@ -568,11 +611,11 @@ var disconnectWcOrSolana = async () => {
|
|
|
568
611
|
}
|
|
569
612
|
};
|
|
570
613
|
var createWcEvmConnector = (config2) => {
|
|
571
|
-
const
|
|
614
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
572
615
|
const getDeeplink = createDeeplink(config2.wcDeeplink);
|
|
573
616
|
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
574
617
|
return {
|
|
575
|
-
...
|
|
618
|
+
...walletConfig2,
|
|
576
619
|
type: "evm",
|
|
577
620
|
wallet: {
|
|
578
621
|
_connector: null,
|
|
@@ -613,11 +656,11 @@ var createWcEvmConnector = (config2) => {
|
|
|
613
656
|
};
|
|
614
657
|
};
|
|
615
658
|
var createWcSolanaConnector = (config2) => {
|
|
616
|
-
const
|
|
659
|
+
const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
|
|
617
660
|
const getDeeplink = createDeeplink(config2.wcDeeplink);
|
|
618
661
|
const isInWallet = () => isInWalletBrowser(config2.injectedKey);
|
|
619
662
|
return {
|
|
620
|
-
...
|
|
663
|
+
...walletConfig2,
|
|
621
664
|
type: "solana",
|
|
622
665
|
wallet: {
|
|
623
666
|
_provider: null,
|
|
@@ -657,6 +700,11 @@ var createWcSolanaConnector = (config2) => {
|
|
|
657
700
|
var PHANTOM_CONNECT_URL = "https://phantom.app/ul/v1/connect";
|
|
658
701
|
var PHANTOM_SIGN_MESSAGE_URL = "https://phantom.app/ul/v1/signMessage";
|
|
659
702
|
var PHANTOM_BROWSE_URL = "https://phantom.app/ul/browse";
|
|
703
|
+
var createPhantomSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
704
|
+
walletId: "phantom",
|
|
705
|
+
browseUrl: PHANTOM_BROWSE_URL,
|
|
706
|
+
injectedKey: "isPhantom"
|
|
707
|
+
});
|
|
660
708
|
var PHANTOM_CONFIG = {
|
|
661
709
|
connectUrl: PHANTOM_CONNECT_URL,
|
|
662
710
|
storageKeyPrefix: "phantom_mobile",
|
|
@@ -753,11 +801,24 @@ var METAMASK_CONFIG = {
|
|
|
753
801
|
wcDeeplink: "https://metamask.app.link/wc",
|
|
754
802
|
injectedKey: "isMetaMask"
|
|
755
803
|
};
|
|
804
|
+
var METAMASK_BROWSE_URL = "https://metamask.app.link/dapp";
|
|
756
805
|
var createMetaMaskEvmConnector = () => createWcEvmConnector(METAMASK_CONFIG);
|
|
806
|
+
var createMetaMaskSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
807
|
+
walletId: "metamask",
|
|
808
|
+
browseUrl: METAMASK_BROWSE_URL,
|
|
809
|
+
injectedKey: "isMetaMask",
|
|
810
|
+
stripProtocol: true
|
|
811
|
+
});
|
|
757
812
|
|
|
758
813
|
// src/lib/connectors/solflare.ts
|
|
759
814
|
var SOLFLARE_CONNECT_URL = "https://solflare.com/ul/v1/connect";
|
|
760
815
|
var SOLFLARE_SIGN_MESSAGE_URL = "https://solflare.com/ul/v1/signMessage";
|
|
816
|
+
var SOLFLARE_BROWSE_URL = "https://solflare.com/ul/v1/browse";
|
|
817
|
+
var createSolflareSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
818
|
+
walletId: "solflare",
|
|
819
|
+
browseUrl: SOLFLARE_BROWSE_URL,
|
|
820
|
+
injectedKey: "isSolflare"
|
|
821
|
+
});
|
|
761
822
|
var SOLFLARE_CONFIG = {
|
|
762
823
|
connectUrl: SOLFLARE_CONNECT_URL,
|
|
763
824
|
storageKeyPrefix: "solflare_mobile",
|
|
@@ -827,8 +888,14 @@ var TRUST_CONFIG = {
|
|
|
827
888
|
wcDeeplink: "https://link.trustwallet.com/wc",
|
|
828
889
|
injectedKey: "isTrust"
|
|
829
890
|
};
|
|
891
|
+
var TRUST_BROWSE_URL = "https://link.trustwallet.com/open_url";
|
|
830
892
|
var createTrustEvmMobileConnector = () => createWcEvmConnector(TRUST_CONFIG);
|
|
831
893
|
var createTrustSolanaMobileConnector = () => createWcSolanaConnector(TRUST_CONFIG);
|
|
894
|
+
var createTrustSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
895
|
+
walletId: "trust",
|
|
896
|
+
browseUrl: TRUST_BROWSE_URL,
|
|
897
|
+
injectedKey: "isTrust"
|
|
898
|
+
});
|
|
832
899
|
|
|
833
900
|
// src/lib/connectors/rainbow.ts
|
|
834
901
|
var RAINBOW_CONFIG = {
|
|
@@ -844,8 +911,14 @@ var EXODUS_CONFIG = {
|
|
|
844
911
|
wcDeeplink: "https://exodus.com/wc",
|
|
845
912
|
injectedKey: "isExodus"
|
|
846
913
|
};
|
|
914
|
+
var EXODUS_BROWSE_URL = "https://exodus.com/m/browser";
|
|
847
915
|
var createExodusEvmMobileConnector = () => createWcEvmConnector(EXODUS_CONFIG);
|
|
848
916
|
var createExodusSolanaMobileConnector = () => createWcSolanaConnector(EXODUS_CONFIG);
|
|
917
|
+
var createExodusSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
918
|
+
walletId: "exodus",
|
|
919
|
+
browseUrl: EXODUS_BROWSE_URL,
|
|
920
|
+
injectedKey: "isExodus"
|
|
921
|
+
});
|
|
849
922
|
|
|
850
923
|
// src/lib/connectors/binance.ts
|
|
851
924
|
var BINANCE_CONFIG = {
|
|
@@ -853,8 +926,121 @@ var BINANCE_CONFIG = {
|
|
|
853
926
|
wcDeeplink: "bnc://app.binance.com/cedefi/wc",
|
|
854
927
|
injectedKey: "isBinance"
|
|
855
928
|
};
|
|
929
|
+
var buildBinanceBrowseUrl = () => `bnc://app.binance.com/cedefi/dapp?url=${encodeURIComponent(window.location.href)}`;
|
|
856
930
|
var createBinanceEvmConnector = () => createWcEvmConnector(BINANCE_CONFIG);
|
|
857
931
|
var createBinanceSolanaConnector = () => createWcSolanaConnector(BINANCE_CONFIG);
|
|
932
|
+
var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
933
|
+
walletId: "binance",
|
|
934
|
+
injectedKey: "isBinance",
|
|
935
|
+
buildUrl: buildBinanceBrowseUrl
|
|
936
|
+
});
|
|
937
|
+
|
|
938
|
+
// src/lib/connectors/okx.ts
|
|
939
|
+
var buildOkxBrowseUrl = () => {
|
|
940
|
+
const dappUrl = window.location.href;
|
|
941
|
+
const deepLink = `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(dappUrl)}`;
|
|
942
|
+
return `https://web3.okx.com/download?deeplink=${encodeURIComponent(deepLink)}`;
|
|
943
|
+
};
|
|
944
|
+
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
945
|
+
walletId: "okx",
|
|
946
|
+
injectedKey: "isOkxWallet",
|
|
947
|
+
buildUrl: buildOkxBrowseUrl
|
|
948
|
+
});
|
|
949
|
+
|
|
950
|
+
// src/lib/connectors/coinbase.ts
|
|
951
|
+
var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
|
|
952
|
+
var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
953
|
+
walletId: "coinbase",
|
|
954
|
+
injectedKey: "isCoinbaseWallet",
|
|
955
|
+
buildUrl: buildCoinbaseBrowseUrl
|
|
956
|
+
});
|
|
957
|
+
|
|
958
|
+
// src/lib/connectors/bitget.ts
|
|
959
|
+
var BITGET_BROWSE_URL = "https://bkcode.vip/dapp";
|
|
960
|
+
var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
961
|
+
walletId: "bitget",
|
|
962
|
+
browseUrl: BITGET_BROWSE_URL,
|
|
963
|
+
injectedKey: "isBitKeep",
|
|
964
|
+
stripProtocol: true
|
|
965
|
+
});
|
|
966
|
+
|
|
967
|
+
// src/lib/connectors/walletconnect.ts
|
|
968
|
+
import bs584 from "bs58";
|
|
969
|
+
var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
|
|
970
|
+
var disconnectWc2 = async () => {
|
|
971
|
+
if (getCurrentSession()) {
|
|
972
|
+
await disconnectWalletConnect();
|
|
973
|
+
}
|
|
974
|
+
};
|
|
975
|
+
var createWalletConnectEvmConnector = () => {
|
|
976
|
+
if (isMobile()) return null;
|
|
977
|
+
return {
|
|
978
|
+
id: walletConfig.id,
|
|
979
|
+
name: walletConfig.name,
|
|
980
|
+
icon: walletConfig.icon,
|
|
981
|
+
type: "evm",
|
|
982
|
+
installed: false,
|
|
983
|
+
wallet: {
|
|
984
|
+
_connector: null,
|
|
985
|
+
connect: async () => {
|
|
986
|
+
return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
|
|
987
|
+
},
|
|
988
|
+
disconnect: disconnectWc2,
|
|
989
|
+
signMessage: async (message) => {
|
|
990
|
+
const session = getCurrentSession();
|
|
991
|
+
if (!session) {
|
|
992
|
+
throw new Error("No WalletConnect session");
|
|
993
|
+
}
|
|
994
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
995
|
+
if (!account) {
|
|
996
|
+
throw new Error("No EVM account in session");
|
|
997
|
+
}
|
|
998
|
+
const address = account.split(":")[2];
|
|
999
|
+
const result = await requestWalletConnect(
|
|
1000
|
+
"personal_sign",
|
|
1001
|
+
[message, address],
|
|
1002
|
+
WC_CHAINS.EVM_MAINNET
|
|
1003
|
+
);
|
|
1004
|
+
return result;
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
};
|
|
1008
|
+
};
|
|
1009
|
+
var createWalletConnectSolanaConnector = () => {
|
|
1010
|
+
if (isMobile()) return null;
|
|
1011
|
+
return {
|
|
1012
|
+
id: walletConfig.id,
|
|
1013
|
+
name: walletConfig.name,
|
|
1014
|
+
icon: walletConfig.icon,
|
|
1015
|
+
type: "solana",
|
|
1016
|
+
installed: false,
|
|
1017
|
+
wallet: {
|
|
1018
|
+
_provider: null,
|
|
1019
|
+
connect: async () => {
|
|
1020
|
+
return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
|
|
1021
|
+
},
|
|
1022
|
+
disconnect: disconnectWc2,
|
|
1023
|
+
signMessage: async (message) => {
|
|
1024
|
+
const session = getCurrentSession();
|
|
1025
|
+
if (!session) {
|
|
1026
|
+
throw new Error("No WalletConnect session");
|
|
1027
|
+
}
|
|
1028
|
+
const account = session.namespaces.solana?.accounts?.[0];
|
|
1029
|
+
if (!account) {
|
|
1030
|
+
throw new Error("No Solana account in session");
|
|
1031
|
+
}
|
|
1032
|
+
const pubkey = account.split(":")[2];
|
|
1033
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
1034
|
+
const result = await requestWalletConnect(
|
|
1035
|
+
"solana_signMessage",
|
|
1036
|
+
{ message: bs584.encode(messageBytes), pubkey },
|
|
1037
|
+
WC_CHAINS.SOLANA_MAINNET
|
|
1038
|
+
);
|
|
1039
|
+
return result.signature;
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
};
|
|
1043
|
+
};
|
|
858
1044
|
|
|
859
1045
|
// src/lib/evm/connectors.ts
|
|
860
1046
|
var EVM_FALLBACK_CONNECTORS = [
|
|
@@ -924,7 +1110,7 @@ import {
|
|
|
924
1110
|
isWalletAdapterCompatibleStandardWallet
|
|
925
1111
|
} from "@solana/wallet-adapter-base";
|
|
926
1112
|
import { getWallets } from "@wallet-standard/app";
|
|
927
|
-
import
|
|
1113
|
+
import bs585 from "bs58";
|
|
928
1114
|
var createSolanaConnector = (provider) => {
|
|
929
1115
|
const id = normalizeSolanaWalletId(provider.name.toLowerCase().replace(/\s+/g, "-"));
|
|
930
1116
|
const connector = {
|
|
@@ -968,7 +1154,7 @@ var createSolanaConnector = (provider) => {
|
|
|
968
1154
|
const result = await signFeature.signMessage({ message: encodedMessage, account });
|
|
969
1155
|
const signature = result[0]?.signature;
|
|
970
1156
|
if (!signature) throw new Error("No signature returned");
|
|
971
|
-
return
|
|
1157
|
+
return bs585.encode(signature);
|
|
972
1158
|
}
|
|
973
1159
|
}
|
|
974
1160
|
};
|
|
@@ -985,16 +1171,59 @@ var createSolanaMobileConnector = (connector) => ({
|
|
|
985
1171
|
}
|
|
986
1172
|
}
|
|
987
1173
|
});
|
|
988
|
-
var SOLANA_FALLBACK_CONNECTORS = [
|
|
1174
|
+
var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
|
|
1175
|
+
{
|
|
1176
|
+
id: "phantom",
|
|
1177
|
+
create: () => createSolanaMobileConnector(createPhantomSolanaDappBrowserConnector())
|
|
1178
|
+
},
|
|
1179
|
+
{
|
|
1180
|
+
id: "solflare",
|
|
1181
|
+
create: () => createSolanaMobileConnector(createSolflareSolanaDappBrowserConnector())
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
id: "metamask",
|
|
1185
|
+
create: () => createSolanaMobileConnector(createMetaMaskSolanaDappBrowserConnector())
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
id: "okx",
|
|
1189
|
+
create: () => createSolanaMobileConnector(createOkxSolanaDappBrowserConnector())
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
id: "coinbase",
|
|
1193
|
+
create: () => createSolanaMobileConnector(createCoinbaseSolanaDappBrowserConnector())
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
id: "bitget",
|
|
1197
|
+
create: () => createSolanaMobileConnector(createBitgetSolanaDappBrowserConnector())
|
|
1198
|
+
},
|
|
1199
|
+
{
|
|
1200
|
+
id: "trust",
|
|
1201
|
+
create: () => createSolanaMobileConnector(createTrustSolanaDappBrowserConnector())
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
id: "binance",
|
|
1205
|
+
create: () => createSolanaMobileConnector(createBinanceSolanaDappBrowserConnector())
|
|
1206
|
+
},
|
|
1207
|
+
{
|
|
1208
|
+
id: "exodus",
|
|
1209
|
+
create: () => createSolanaMobileConnector(createExodusSolanaDappBrowserConnector())
|
|
1210
|
+
}
|
|
1211
|
+
] : [
|
|
989
1212
|
{ id: "phantom", create: () => createSolanaMobileConnector(createPhantomSolanaConnector()) },
|
|
990
1213
|
// { id: 'metamask', create: () => createSolanaMobileConnector(createMetaMaskSolanaConnector()) },
|
|
991
1214
|
{
|
|
992
1215
|
id: "solflare",
|
|
993
1216
|
create: () => createSolanaMobileConnector(createSolflareSolanaMobileConnector())
|
|
994
1217
|
},
|
|
995
|
-
{
|
|
1218
|
+
{
|
|
1219
|
+
id: "trust",
|
|
1220
|
+
create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
|
|
1221
|
+
},
|
|
996
1222
|
{ id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
|
|
997
|
-
{
|
|
1223
|
+
{
|
|
1224
|
+
id: "exodus",
|
|
1225
|
+
create: () => createSolanaMobileConnector(createExodusSolanaMobileConnector())
|
|
1226
|
+
}
|
|
998
1227
|
];
|
|
999
1228
|
var getSolanaWallets = () => {
|
|
1000
1229
|
const { get } = getWallets();
|
|
@@ -1104,7 +1333,12 @@ var useEvmWallet = (options) => {
|
|
|
1104
1333
|
const [connectedConnector, setConnectedConnector] = createSignal(null);
|
|
1105
1334
|
onMount(() => {
|
|
1106
1335
|
createEvmConfig(options.chains);
|
|
1107
|
-
|
|
1336
|
+
const connectors = getEvmConnectors();
|
|
1337
|
+
const wcConnector = createWalletConnectEvmConnector();
|
|
1338
|
+
if (wcConnector) {
|
|
1339
|
+
connectors.unshift(wcConnector);
|
|
1340
|
+
}
|
|
1341
|
+
setEvmConnectors(connectors);
|
|
1108
1342
|
const unsubscribe = watchEvmConnections((connections) => {
|
|
1109
1343
|
const connection = connections[0];
|
|
1110
1344
|
if (connection && connection.accounts[0]) {
|
|
@@ -1153,7 +1387,12 @@ var useSolanaWallet = () => {
|
|
|
1153
1387
|
null
|
|
1154
1388
|
);
|
|
1155
1389
|
onMount2(() => {
|
|
1156
|
-
|
|
1390
|
+
const connectors = getSolanaWallets();
|
|
1391
|
+
const wcConnector = createWalletConnectSolanaConnector();
|
|
1392
|
+
if (wcConnector) {
|
|
1393
|
+
connectors.unshift(wcConnector);
|
|
1394
|
+
}
|
|
1395
|
+
setSolanaConnectors(connectors);
|
|
1157
1396
|
const unsubscribeWallets = onSolanaWalletsChange(setSolanaConnectors);
|
|
1158
1397
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1159
1398
|
setSolanaConnection(state.connection);
|
|
@@ -1206,7 +1445,7 @@ var useSolanaWallet = () => {
|
|
|
1206
1445
|
};
|
|
1207
1446
|
|
|
1208
1447
|
// src/lib/context/hooks/useWalletConnect.ts
|
|
1209
|
-
import
|
|
1448
|
+
import bs586 from "bs58";
|
|
1210
1449
|
import { onCleanup as onCleanup3, onMount as onMount3 } from "solid-js";
|
|
1211
1450
|
var useWalletConnect = (options) => {
|
|
1212
1451
|
onMount3(async () => {
|
|
@@ -1261,7 +1500,7 @@ var useWalletConnect = (options) => {
|
|
|
1261
1500
|
const messageBytes = new TextEncoder().encode(message);
|
|
1262
1501
|
const result = await requestWalletConnect(
|
|
1263
1502
|
"solana_signMessage",
|
|
1264
|
-
{ message:
|
|
1503
|
+
{ message: bs586.encode(messageBytes), pubkey },
|
|
1265
1504
|
WC_CHAINS.SOLANA_MAINNET
|
|
1266
1505
|
);
|
|
1267
1506
|
return result.signature;
|
|
@@ -1368,11 +1607,13 @@ export {
|
|
|
1368
1607
|
checkPhantomSignCallback,
|
|
1369
1608
|
checkSolflareSignCallback,
|
|
1370
1609
|
createEvmConfig,
|
|
1610
|
+
getCurrentSession,
|
|
1371
1611
|
getEvmConfig,
|
|
1372
1612
|
getEvmConnectors,
|
|
1373
1613
|
getSolanaWallets,
|
|
1374
1614
|
initWalletConnect,
|
|
1375
1615
|
onSolanaWalletsChange,
|
|
1616
|
+
onWalletConnectSessionChange,
|
|
1376
1617
|
reconnectSolana,
|
|
1377
1618
|
useWallet,
|
|
1378
1619
|
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;
|
|
@@ -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;
|
|
@@ -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,10 @@
|
|
|
1
|
+
import type { SolanaWalletConnector } from '../../solana';
|
|
2
|
+
import { type WalletId } from '../../wallets';
|
|
3
|
+
export interface DappBrowserConfig {
|
|
4
|
+
walletId: WalletId;
|
|
5
|
+
injectedKey: string;
|
|
6
|
+
browseUrl?: string;
|
|
7
|
+
stripProtocol?: boolean;
|
|
8
|
+
buildUrl?: () => string;
|
|
9
|
+
}
|
|
10
|
+
export declare const createDappBrowserSolanaConnector: (config: DappBrowserConfig) => SolanaWalletConnector;
|
|
@@ -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;
|