@tomo-inc/wallet-adaptor-base 0.0.1 → 0.0.3
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.cjs +1024 -330
- package/dist/index.d.cts +172 -6
- package/dist/index.d.ts +172 -6
- package/dist/index.js +955 -332
- package/package.json +4 -2
- package/project.json +2 -2
- package/src/global.d.ts +7 -0
- package/src/index.ts +14 -8
- package/src/type.ts +13 -0
- package/src/utils/browsers.ts +13 -0
- package/src/utils/chainId.ts +1 -1
- package/src/utils/isMobile.ts +1 -1
- package/src/utils/log.ts +7 -0
- package/src/utils/utils.ts +5 -0
- package/src/wallet-api/balance.ts +4 -2
- package/src/wallet-api/chain.ts +9 -2
- package/src/wallet-api/connect.ts +142 -12
- package/src/wallet-api/sign-in.ts +23 -26
- package/src/wallet-api/sign-message.ts +116 -13
- package/src/wallets/Wallet.ts +6 -1
- package/src/wallets/default/backpackWallet/backpackWallet.ts +2 -4
- package/src/wallets/default/berasigWallet/berasigWallet.ts +2 -4
- package/src/wallets/default/binanceWallet/binanceWallet.ts +29 -4
- package/src/wallets/default/bitgetWallet/bitgetWallet.ts +12 -4
- package/src/wallets/default/bitskiWallet/bitskiWallet.ts +2 -4
- package/src/wallets/default/bitverseWallet/bitverseWallet.ts +5 -4
- package/src/wallets/default/bloomWallet/bloomWallet.ts +2 -4
- package/src/wallets/default/braveWallet/braveWallet.ts +2 -4
- package/src/wallets/default/bybitWallet/bybitWallet.ts +7 -4
- package/src/wallets/default/clvWallet/clvWallet.ts +2 -4
- package/src/wallets/default/coin98Wallet/coin98Wallet.ts +2 -4
- package/src/wallets/default/coinbaseWallet/coinbaseWallet.ts +9 -4
- package/src/wallets/default/compassWallet/compassWallet.ts +2 -4
- package/src/wallets/default/coreWallet/coreWallet.ts +2 -4
- package/src/wallets/default/ctrlWallet/ctrlWallet.ts +2 -4
- package/src/wallets/default/dawnWallet/dawnWallet.ts +2 -4
- package/src/wallets/default/desigWallet/desigWallet.ts +2 -4
- package/src/wallets/default/enkryptWallet/enkryptWallet.ts +2 -4
- package/src/wallets/default/foxWallet/foxWallet.ts +7 -4
- package/src/wallets/default/frameWallet/frameWallet.ts +2 -4
- package/src/wallets/default/gateWallet/gateWallet.ts +8 -4
- package/src/wallets/default/imTokenWallet/imTokenWallet.ts +11 -4
- package/src/wallets/default/injectedWallet/injectedWallet.ts +2 -4
- package/src/wallets/default/iopayWallet/iopayWallet.ts +8 -4
- package/src/wallets/default/kaiaWallet/kaiaWallet.ts +7 -4
- package/src/wallets/default/kaikasWallet/kaikasWallet.ts +7 -4
- package/src/wallets/default/krakenWallet/krakenWallet.ts +7 -4
- package/src/wallets/default/kresusWallet/kresusWallet.ts +5 -4
- package/src/wallets/default/ledgerWallet/ledgerWallet.ts +8 -4
- package/src/wallets/default/magicEdenWallet/magicEdenWallet.ts +5 -7
- package/src/wallets/default/mathWallet/mathWallet.svg +9 -0
- package/src/wallets/default/mathWallet/mathWallet.ts +2 -2
- package/src/wallets/default/metaMaskWallet/metaMaskWallet.ts +20 -2
- package/src/wallets/default/myDogeWallet/mydogeWallet.ts +1 -1
- package/src/wallets/default/nestWallet/nestWallet.ts +2 -4
- package/src/wallets/default/novaWallet/novaWallet.ts +2 -4
- package/src/wallets/default/oktoWallet/oktoWallet.ts +8 -4
- package/src/wallets/default/okxWallet/okxWallet.ts +13 -4
- package/src/wallets/default/omniWallet/omniWallet.ts +8 -4
- package/src/wallets/default/oneInchWallet/oneInchWallet.svg +30 -1
- package/src/wallets/default/oneInchWallet/oneInchWallet.ts +5 -4
- package/src/wallets/default/oneKeyWallet/oneKeyWallet.ts +2 -4
- package/src/wallets/default/paraSwapWallet/paraswapWallet.ts +7 -4
- package/src/wallets/default/petraWallet/petraWallet.svg +5 -0
- package/src/wallets/default/petraWallet/petraWallet.ts +24 -0
- package/src/wallets/default/phantomWallet/phantomWallet.ts +9 -4
- package/src/wallets/default/rabbyWallet/rabbyWallet.ts +2 -4
- package/src/wallets/default/rainbowWallet/rainbowWallet.ts +12 -4
- package/src/wallets/default/ramperWallet/ramperWallet.ts +2 -4
- package/src/wallets/default/readyWallet/readyWallet.ts +2 -4
- package/src/wallets/default/roninWallet/roninWallet.ts +2 -4
- package/src/wallets/default/safeWallet/safeWallet.ts +2 -4
- package/src/wallets/default/safeheronWallet/safeheronWallet.ts +2 -4
- package/src/wallets/default/safepalWallet/safepalWallet.ts +2 -4
- package/src/wallets/default/seifWallet/seifWallet.ts +2 -4
- package/src/wallets/default/solflareWallet/solflareWallet.svg +11 -0
- package/src/wallets/default/solflareWallet/solflareWallet.ts +9 -2
- package/src/wallets/default/subWallet/subWallet.ts +2 -4
- package/src/wallets/default/tahoWallet/tahoWallet.ts +2 -4
- package/src/wallets/default/talismanWallet/talismanWallet.ts +2 -4
- package/src/wallets/default/tokenPocketWallet/tokenPocketWallet.ts +8 -4
- package/src/wallets/default/tokenaryWallet/tokenaryWallet.ts +2 -4
- package/src/wallets/default/trezorWallet/trezorWallet.svg +7 -0
- package/src/wallets/default/trezorWallet/trezorWallet.ts +2 -2
- package/src/wallets/default/trustWallet/trustWallet.ts +9 -5
- package/src/wallets/default/uniswapWallet/uniswapWallet.ts +7 -4
- package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.svg +13 -1351
- package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.ts +2 -2
- package/src/wallets/default/valoraWallet/valoraWallet.ts +6 -4
- package/src/wallets/default/walletConnectWallet/walletConnectWallet.ts +2 -4
- package/src/wallets/default/wigwamWallet/wigwamWallet.ts +2 -4
- package/src/wallets/default/xPortalWallet/xPortalWallet.ts +2 -4
- package/src/wallets/default/zealWallet/zealWallet.ts +7 -4
- package/src/wallets/default/zerionWallet/zerionWallet.ts +8 -4
- package/src/wallets/default/zilPayWallet/zilPayWallet.ts +2 -4
- package/src/wallets/defaultConnectors.ts +213 -0
- package/src/wallets/detector.ts +34 -17
- package/src/wallets/index.ts +7 -76
- package/src/wallets/providers/WalletConnectProvider.ts +3 -2
- package/src/wallets/wallet-standard.ts +147 -47
- package/src/wallets/wallet-walletconnect.ts +1 -1
- package/tsconfig.json +4 -1
- package/tsup.config.ts +55 -0
- package/src/wallets/default/mathWallet/icon.ts +0 -2
- package/src/wallets/default/metaMaskWallet/icon.ts +0 -2
- package/src/wallets/default/myDogeWallet/icon.ts +0 -2
- package/src/wallets/default/solflareWallet/icon.ts +0 -2
- package/src/wallets/default/trezorWallet/icon.ts +0 -2
- package/src/wallets/default/universalProfilesWallet/icon.ts +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tomo-inc/wallet-adaptor-base",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"author": "tomo.inc",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
+
"@aptos-labs/ts-sdk": "^5.1.1",
|
|
20
|
+
"@binance/w3w-utils": "^1.1.6",
|
|
19
21
|
"@solana/spl-token": "^0.4.13",
|
|
20
22
|
"@solana/web3.js": "^1.98.0",
|
|
21
|
-
"@
|
|
23
|
+
"@wallet-standard/core": "^1.1.0",
|
|
22
24
|
"viem": "2.21.54",
|
|
23
25
|
"@tomo-inc/wallet-connect-protocol": "0.0.3"
|
|
24
26
|
},
|
package/project.json
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
"executor": "nx:run-commands",
|
|
8
8
|
"outputs": ["{projectRoot}/dist"],
|
|
9
9
|
"options": {
|
|
10
|
-
"command": "tsup
|
|
10
|
+
"command": "tsup",
|
|
11
11
|
"cwd": "packages/wallet-adaptor-base"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dev": {
|
|
15
15
|
"executor": "nx:run-commands",
|
|
16
16
|
"options": {
|
|
17
|
-
"command": "tsup
|
|
17
|
+
"command": "tsup --watch",
|
|
18
18
|
"cwd": "packages/wallet-adaptor-base"
|
|
19
19
|
}
|
|
20
20
|
},
|
package/src/global.d.ts
ADDED
package/src/index.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AdaptorChainType, Connector, WalletConnectorType } from "./type";
|
|
2
|
+
import { isMobile } from "./utils/isMobile";
|
|
2
3
|
import { uniqueConnectors } from "./utils/utils";
|
|
3
|
-
import { defaultConnectors } from "./wallets";
|
|
4
|
-
import { WagmiWalletConfig, WalletConfig } from "./wallets/Wallet";
|
|
4
|
+
import { defaultConnectors } from "./wallets/defaultConnectors";
|
|
5
5
|
import { connectorDector, supportedWalletConfigTypes, walletConfigAdapter } from "./wallets/detector";
|
|
6
|
+
import { WagmiWalletConfig, WalletConfig } from "./wallets/Wallet";
|
|
6
7
|
import { eip6963Wallets } from "./wallets/wallet-eip6963";
|
|
7
8
|
import { walletStandardWallets } from "./wallets/wallet-standard";
|
|
8
9
|
import { setWalletConnectConfig, walletConnectWallets } from "./wallets/wallet-walletconnect";
|
|
@@ -56,13 +57,13 @@ export async function loadConnectors({
|
|
|
56
57
|
const connectorsFromConfig = uniqueConnectors([...recommonedConnectorsDetected, ...defaultConnectors]);
|
|
57
58
|
|
|
58
59
|
// Include WalletConnect wallets along with other detected wallets
|
|
59
|
-
const
|
|
60
|
+
const connectorsDetecteds = [...evmWallets, ...solanaWallets, ...aptosWallets, ...wcWallets];
|
|
60
61
|
|
|
61
|
-
for (const connector of
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
for (const connector of connectorsDetecteds) {
|
|
63
|
+
const _connector = connectorsFromConfig.find((c) => c.info.name === connector.info.name);
|
|
64
|
+
if (_connector) {
|
|
65
|
+
_connector.isInstalled = true;
|
|
66
|
+
_connector.providers = { ..._connector.providers, ...connector.providers };
|
|
66
67
|
} else {
|
|
67
68
|
connectorsFromConfig.push(connector);
|
|
68
69
|
}
|
|
@@ -91,3 +92,8 @@ export async function loadConnectors({
|
|
|
91
92
|
|
|
92
93
|
//api
|
|
93
94
|
export * from "./wallet-api";
|
|
95
|
+
|
|
96
|
+
// Export all wallets
|
|
97
|
+
export * from "./wallets";
|
|
98
|
+
|
|
99
|
+
export { isMobile };
|
package/src/type.ts
CHANGED
|
@@ -4,6 +4,7 @@ export enum ProviderProtocol {
|
|
|
4
4
|
EIP6963 = "eip6963",
|
|
5
5
|
WALLET_STANDARD = "wallet-standard",
|
|
6
6
|
WALLET_CONNECT = "wallet-connect",
|
|
7
|
+
INJECT = "inject",
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
export enum ProviderChainType {
|
|
@@ -21,11 +22,17 @@ export const SupportedChainTypes = ["evm", "solana", "aptos"];
|
|
|
21
22
|
export interface WalletInfo {
|
|
22
23
|
uuid: string;
|
|
23
24
|
name: string;
|
|
25
|
+
sameNames?: string[];
|
|
24
26
|
namespace?: string;
|
|
25
27
|
icon: string;
|
|
26
28
|
iconBackground?: string;
|
|
27
29
|
rdns?: string;
|
|
28
30
|
isWalletConnect?: boolean;
|
|
31
|
+
deeplink?: string;
|
|
32
|
+
mobile?: {
|
|
33
|
+
getUri?: (uri: string) => string;
|
|
34
|
+
getDeeplink?: (dappUrl?: string, chainId?: number) => string | Promise<string>;
|
|
35
|
+
};
|
|
29
36
|
links: {
|
|
30
37
|
homepage?: string;
|
|
31
38
|
ios_install?: string;
|
|
@@ -62,6 +69,11 @@ export interface Connector {
|
|
|
62
69
|
};
|
|
63
70
|
}
|
|
64
71
|
|
|
72
|
+
export interface ConnectParams {
|
|
73
|
+
dappLink: string;
|
|
74
|
+
useWalletConnect?: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
65
77
|
export interface SignInParams {
|
|
66
78
|
scheme?: "https" | "http";
|
|
67
79
|
domain: string;
|
|
@@ -83,6 +95,7 @@ export interface WalletOptions {
|
|
|
83
95
|
network?: string;
|
|
84
96
|
};
|
|
85
97
|
provider: WalletProvider;
|
|
98
|
+
walletInfo?: WalletInfo;
|
|
86
99
|
}
|
|
87
100
|
|
|
88
101
|
export interface ChainInfo {
|
package/src/utils/browsers.ts
CHANGED
|
@@ -37,3 +37,16 @@ export function getBrowser(): BrowserType {
|
|
|
37
37
|
if (isSafari()) return BrowserType.Safari;
|
|
38
38
|
return BrowserType.Browser;
|
|
39
39
|
}
|
|
40
|
+
|
|
41
|
+
// open uri in new tab or window
|
|
42
|
+
export function openUri(uri: string) {
|
|
43
|
+
if (uri.startsWith("http")) {
|
|
44
|
+
const link = document.createElement("a");
|
|
45
|
+
link.href = uri;
|
|
46
|
+
link.target = "_blank";
|
|
47
|
+
link.rel = "noreferrer noopener";
|
|
48
|
+
link.click();
|
|
49
|
+
} else {
|
|
50
|
+
window.location.href = uri;
|
|
51
|
+
}
|
|
52
|
+
}
|
package/src/utils/chainId.ts
CHANGED
package/src/utils/isMobile.ts
CHANGED
package/src/utils/log.ts
ADDED
package/src/utils/utils.ts
CHANGED
|
@@ -12,3 +12,8 @@ export function uniqueConnectors(allConnectors: Connector[]) {
|
|
|
12
12
|
});
|
|
13
13
|
return connectors;
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
// uint8array to hex
|
|
17
|
+
export function uint8arrayToHex(uint8array: Uint8Array) {
|
|
18
|
+
return Array.from(uint8array, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
19
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PublicKey, Connection } from "@solana/web3.js";
|
|
2
1
|
import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
|
|
2
|
+
import { Connection, PublicKey } from "@solana/web3.js";
|
|
3
3
|
import { WalletOptions } from "type";
|
|
4
4
|
|
|
5
5
|
export interface BalanceParams {
|
|
@@ -41,6 +41,7 @@ export const getBalance = async (
|
|
|
41
41
|
method: "eth_getBalance",
|
|
42
42
|
params: [address, "latest"],
|
|
43
43
|
});
|
|
44
|
+
console.log("getBalance evm res:", chainType, provider, { address, chainId, balance });
|
|
44
45
|
return {
|
|
45
46
|
total: Number(balance || "0") || 0,
|
|
46
47
|
tokenInfo,
|
|
@@ -52,7 +53,7 @@ export const getBalance = async (
|
|
|
52
53
|
const connection = new Connection(rpcUrl);
|
|
53
54
|
|
|
54
55
|
const balances = await connection.getMultipleAccountsInfo([address].map((addr) => new PublicKey(addr)));
|
|
55
|
-
console.log("solana balances", balances);
|
|
56
|
+
console.log("solana balances", chainType, provider, { address, chainId, balances });
|
|
56
57
|
|
|
57
58
|
return {
|
|
58
59
|
total: balances[0]?.lamports || 0,
|
|
@@ -86,6 +87,7 @@ export const getBalance = async (
|
|
|
86
87
|
throw error;
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
console.log("solana balances", chainType, provider, { address, chainId, balance });
|
|
89
91
|
return {
|
|
90
92
|
total: balance,
|
|
91
93
|
tokenInfo,
|
package/src/wallet-api/chain.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ChainInfo, WalletOptions } from "type";
|
|
2
|
+
import { toHex } from "viem";
|
|
2
3
|
import { getAllTypeChainIds } from "../utils/chainId";
|
|
3
4
|
|
|
4
5
|
export const switchChain = async (chainId: string | number, walletOptions: WalletOptions) => {
|
|
@@ -41,8 +42,14 @@ export const addChain = async (chainInfo: ChainInfo, walletOptions: WalletOption
|
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
if (chainType === "evm") {
|
|
44
|
-
if (!chainInfo?.chainId
|
|
45
|
-
throw new Error("Chain ID
|
|
45
|
+
if (!chainInfo?.chainId) {
|
|
46
|
+
throw new Error("Chain ID is required");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!chainInfo?.chainId.startsWith("0x")) {
|
|
50
|
+
const chainId = Number(chainInfo.chainId);
|
|
51
|
+
const chainIdHex = toHex(chainId);
|
|
52
|
+
chainInfo.chainId = chainIdHex;
|
|
46
53
|
}
|
|
47
54
|
try {
|
|
48
55
|
await provider.request({
|
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
import { WalletOptions } from "type";
|
|
1
|
+
import { ConnectParams, WalletInfo, WalletOptions } from "type";
|
|
2
|
+
import { openUri } from "utils/browsers";
|
|
3
|
+
import { isAndroid, isIOS, isMobile } from "../utils/isMobile";
|
|
4
|
+
import { createWalletConnectEVMProvider } from "../wallets/wallet-walletconnect";
|
|
2
5
|
|
|
3
6
|
export const connect = async (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
connectParams: ConnectParams,
|
|
8
|
+
walletOptions: Omit<WalletOptions, "account">,
|
|
9
|
+
): Promise<{ address: string; chainId?: string; network?: string; provider?: any }> => {
|
|
10
|
+
//inject provider/walletconnect provider
|
|
11
|
+
const { provider, chainType, walletInfo } = walletOptions;
|
|
12
|
+
|
|
13
|
+
if (isMobile() && walletInfo?.uuid !== "walletConnect" && !provider) {
|
|
14
|
+
const res = (await connectMobile({
|
|
15
|
+
connectParams,
|
|
16
|
+
walletOptions,
|
|
17
|
+
})) as { address: string; chainId?: string; network?: string; provider?: any };
|
|
18
|
+
const { address, chainId, network, provider: mobileProvider } = res || {};
|
|
19
|
+
return { address, chainId, network, provider: mobileProvider };
|
|
20
|
+
}
|
|
7
21
|
|
|
8
22
|
if (!provider) {
|
|
9
23
|
throw new Error("Provider is required");
|
|
10
24
|
}
|
|
25
|
+
|
|
11
26
|
if (!chainType) {
|
|
12
27
|
throw new Error("Chain type is required");
|
|
13
28
|
}
|
|
@@ -20,25 +35,59 @@ export const connect = async (
|
|
|
20
35
|
address = res?.[0] || "";
|
|
21
36
|
chainId = await provider.request({ method: "eth_chainId" });
|
|
22
37
|
}
|
|
38
|
+
|
|
39
|
+
// console.log("connect request:", chainType, provider);
|
|
23
40
|
if (chainType === "solana") {
|
|
24
41
|
let res = null;
|
|
25
42
|
if (provider?.connect) {
|
|
26
43
|
res = await provider.connect();
|
|
44
|
+
address = res?.publicKey?.toString() || "";
|
|
27
45
|
}
|
|
28
46
|
if (provider?.request) {
|
|
29
47
|
res = await provider.request({
|
|
30
48
|
method: "connect",
|
|
31
49
|
});
|
|
50
|
+
address = res?.publicKey?.toString() || "";
|
|
51
|
+
}
|
|
52
|
+
if (provider?.["standard:connect"]) {
|
|
53
|
+
res = await provider["standard:connect"]?.connect();
|
|
54
|
+
address = res?.accounts?.[0]?.address || "";
|
|
32
55
|
}
|
|
33
|
-
address = provider?.publicKey?.toString() || "";
|
|
34
56
|
network = "mainnet-beta";
|
|
35
57
|
}
|
|
58
|
+
|
|
36
59
|
if (chainType === "aptos") {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
60
|
+
if (provider?.connect) {
|
|
61
|
+
await provider?.connect();
|
|
62
|
+
} else if (provider?.request) {
|
|
63
|
+
await provider.request({ method: "connect" });
|
|
64
|
+
} else if (provider?.["aptos:connect"]) {
|
|
65
|
+
await provider["aptos:connect"]?.connect();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (provider?.account) {
|
|
69
|
+
const account = await provider?.account();
|
|
70
|
+
address = account?.address || "";
|
|
71
|
+
} else if (provider?.["aptos:account"]) {
|
|
72
|
+
const account = await provider?.["aptos:account"]?.account();
|
|
73
|
+
const addressData = account?.address?.data;
|
|
74
|
+
const hexString = addressData
|
|
75
|
+
? Array.from(addressData as Uint8Array)
|
|
76
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
77
|
+
.join("")
|
|
78
|
+
: null;
|
|
79
|
+
address = `0x${hexString}`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// if (provider?.network) {
|
|
83
|
+
// network = ((await provider?.network()) || "Mainnet") as string;
|
|
84
|
+
// }
|
|
85
|
+
// if (provider?.["aptos:network"]) {
|
|
86
|
+
// network = ((await provider?.["aptos:network"]?.network())?.name || "Mainnet") as string;
|
|
87
|
+
// }
|
|
88
|
+
network = "mainnet";
|
|
41
89
|
}
|
|
90
|
+
console.log("connect res:", chainType, provider, { address, chainId, network });
|
|
42
91
|
return { address, chainId, network };
|
|
43
92
|
};
|
|
44
93
|
|
|
@@ -56,10 +105,91 @@ export const disconnect = async (walletOptions: WalletOptions): Promise<boolean>
|
|
|
56
105
|
await provider.request({ method: "wallet_revokePermissions" });
|
|
57
106
|
}
|
|
58
107
|
if (chainType === "solana") {
|
|
59
|
-
|
|
108
|
+
if (provider?.disconnect) {
|
|
109
|
+
await provider.disconnect();
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
if (provider?.["standard:disconnect"]) {
|
|
113
|
+
await provider["standard:disconnect"]?.disconnect();
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
60
116
|
}
|
|
61
117
|
if (chainType === "aptos") {
|
|
62
|
-
|
|
118
|
+
if (provider?.disconnect) {
|
|
119
|
+
await provider.disconnect();
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
if (provider?.["aptos:disconnect"]) {
|
|
123
|
+
await provider["aptos:disconnect"]?.disconnect();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export const connectMobile = async ({
|
|
131
|
+
connectParams,
|
|
132
|
+
walletOptions,
|
|
133
|
+
}: {
|
|
134
|
+
connectParams: ConnectParams;
|
|
135
|
+
walletOptions: Omit<WalletOptions, "account">;
|
|
136
|
+
}) => {
|
|
137
|
+
const { useWalletConnect, dappLink } = connectParams;
|
|
138
|
+
const { mobile, links } = walletOptions.walletInfo as WalletInfo;
|
|
139
|
+
const connectWithWalletConnect = () => {
|
|
140
|
+
return new Promise((resolve, reject) => {
|
|
141
|
+
// const { chainType } = walletOptions;
|
|
142
|
+
const { mobile, uuid } = (walletOptions.walletInfo as WalletInfo) || {};
|
|
143
|
+
|
|
144
|
+
// Wrap async operations in an IIFE
|
|
145
|
+
(async () => {
|
|
146
|
+
try {
|
|
147
|
+
// TODO: support other chain types
|
|
148
|
+
const wcInstance = createWalletConnectEVMProvider();
|
|
149
|
+
// for getting the provider instance
|
|
150
|
+
const mobileProvider = await wcInstance.getProvider();
|
|
151
|
+
const wcUri = wcInstance.connectUri;
|
|
152
|
+
const mobileUri = await mobile?.getUri?.(wcUri);
|
|
153
|
+
|
|
154
|
+
if (!mobileUri) {
|
|
155
|
+
resolve({ address: "", chainId: "" });
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (uuid !== "walletConnect") openUri(mobileUri);
|
|
160
|
+
const res = await wcInstance.connect().catch((error: any) => {
|
|
161
|
+
reject(error);
|
|
162
|
+
});
|
|
163
|
+
const address = res?.[0] || "";
|
|
164
|
+
const chainId = await mobileProvider.request({ method: "eth_chainId" });
|
|
165
|
+
resolve({ address, chainId, provider: mobileProvider });
|
|
166
|
+
} catch (error) {
|
|
167
|
+
reject(error);
|
|
168
|
+
}
|
|
169
|
+
})();
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
if (useWalletConnect) {
|
|
173
|
+
return connectWithWalletConnect();
|
|
174
|
+
} else if (mobile?.getDeeplink) {
|
|
175
|
+
const deeplink = await mobile?.getDeeplink?.(dappLink);
|
|
176
|
+
if (deeplink) {
|
|
177
|
+
openUri(deeplink);
|
|
178
|
+
}
|
|
179
|
+
} else if (mobile?.getUri) {
|
|
180
|
+
return connectWithWalletConnect();
|
|
181
|
+
} else if (links.android_install || links.ios_install || links.homepage) {
|
|
182
|
+
if (isAndroid()) {
|
|
183
|
+
openUri(links.android_install || links.homepage || "");
|
|
184
|
+
} else if (isIOS()) {
|
|
185
|
+
openUri(links.ios_install || links.homepage || "");
|
|
186
|
+
} else {
|
|
187
|
+
openUri(links.homepage || "");
|
|
188
|
+
}
|
|
189
|
+
throw new Error(`${walletOptions.walletInfo?.name} not supported`);
|
|
190
|
+
} else {
|
|
191
|
+
throw new Error(`${walletOptions.walletInfo?.name} not supported`);
|
|
63
192
|
}
|
|
64
|
-
return
|
|
193
|
+
// in mobile, don't return anything, just wait for the mobile wallet to be opened
|
|
194
|
+
return new Promise(() => {});
|
|
65
195
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SignInParams, WalletOptions } from "type";
|
|
2
|
-
|
|
2
|
+
import { uint8arrayToHex } from "utils/utils";
|
|
3
|
+
import { signMessage } from "./sign-message";
|
|
3
4
|
/*
|
|
4
5
|
const params = {
|
|
5
6
|
domain: window.location.host,
|
|
@@ -12,7 +13,10 @@ const params = {
|
|
|
12
13
|
};
|
|
13
14
|
*/
|
|
14
15
|
|
|
15
|
-
export const signInWithWallet = async (
|
|
16
|
+
export const signInWithWallet = async (
|
|
17
|
+
signInData: SignInParams,
|
|
18
|
+
walletOptions: WalletOptions & { isInstalled?: boolean },
|
|
19
|
+
): Promise<string> => {
|
|
16
20
|
const { chainType, account, provider } = walletOptions;
|
|
17
21
|
|
|
18
22
|
if (!provider) {
|
|
@@ -20,23 +24,16 @@ export const signInWithWallet = async (signInData: SignInParams, walletOptions:
|
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
const message = signInMessageBuilder(signInData, walletOptions);
|
|
23
|
-
const { address } = account;
|
|
24
|
-
|
|
25
27
|
if (chainType === "evm") {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
31
|
-
return sign;
|
|
32
|
-
} catch (error) {
|
|
33
|
-
throw error as Error;
|
|
34
|
-
}
|
|
28
|
+
return await signMessage({ message, nonce: signInData.nonce }, walletOptions);
|
|
29
|
+
}
|
|
30
|
+
if (chainType === "aptos") {
|
|
31
|
+
return await signMessage({ message, nonce: signInData.nonce }, walletOptions);
|
|
35
32
|
}
|
|
36
33
|
|
|
37
34
|
if (chainType === "solana") {
|
|
38
35
|
try {
|
|
39
|
-
if (provider?.signIn) {
|
|
36
|
+
if (provider?.signIn || provider?.["solana:signIn"]) {
|
|
40
37
|
// Create params object without address, scheme, and chainId
|
|
41
38
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
42
39
|
const { address: _address, scheme: _scheme, chainId: _chainId, ...signInDataWithoutFields } = signInData;
|
|
@@ -44,25 +41,25 @@ export const signInWithWallet = async (signInData: SignInParams, walletOptions:
|
|
|
44
41
|
const { address: _accountAddress, chainId: _accountChainId, ...accountWithoutFields } = account;
|
|
45
42
|
const params = { ...signInDataWithoutFields, ...accountWithoutFields };
|
|
46
43
|
|
|
47
|
-
const
|
|
44
|
+
const res = provider.signIn ? await provider.signIn(params) : await provider["solana:signIn"]?.signIn(params);
|
|
45
|
+
let signature = "";
|
|
46
|
+
if (typeof res === "object" && res?.signature) {
|
|
47
|
+
signature = res?.signature?.toHex?.() || uint8arrayToHex(res?.signature as Uint8Array) || "";
|
|
48
|
+
} else if (Array.isArray(res)) {
|
|
49
|
+
signature = res?.[0]?.signature?.toHex?.() || uint8arrayToHex(res?.[0]?.signature as Uint8Array) || "";
|
|
50
|
+
} else {
|
|
51
|
+
signature = res || "";
|
|
52
|
+
}
|
|
53
|
+
console.log("signInWithWallet solana res:", chainType, provider, { params, signature });
|
|
48
54
|
return signature;
|
|
49
55
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return signature;
|
|
56
|
+
|
|
57
|
+
return await signMessage({ message, nonce: signInData.nonce }, walletOptions);
|
|
53
58
|
} catch (error) {
|
|
54
59
|
throw error as Error;
|
|
55
60
|
}
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
if (chainType === "aptos") {
|
|
59
|
-
const { signature } = await provider.signMessage({
|
|
60
|
-
message,
|
|
61
|
-
nonce: signInData.nonce,
|
|
62
|
-
});
|
|
63
|
-
return signature;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
63
|
throw new Error(`signInWithWallet not supported in ${chainType}`);
|
|
67
64
|
};
|
|
68
65
|
|