@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.
Files changed (109) hide show
  1. package/dist/index.cjs +1024 -330
  2. package/dist/index.d.cts +172 -6
  3. package/dist/index.d.ts +172 -6
  4. package/dist/index.js +955 -332
  5. package/package.json +4 -2
  6. package/project.json +2 -2
  7. package/src/global.d.ts +7 -0
  8. package/src/index.ts +14 -8
  9. package/src/type.ts +13 -0
  10. package/src/utils/browsers.ts +13 -0
  11. package/src/utils/chainId.ts +1 -1
  12. package/src/utils/isMobile.ts +1 -1
  13. package/src/utils/log.ts +7 -0
  14. package/src/utils/utils.ts +5 -0
  15. package/src/wallet-api/balance.ts +4 -2
  16. package/src/wallet-api/chain.ts +9 -2
  17. package/src/wallet-api/connect.ts +142 -12
  18. package/src/wallet-api/sign-in.ts +23 -26
  19. package/src/wallet-api/sign-message.ts +116 -13
  20. package/src/wallets/Wallet.ts +6 -1
  21. package/src/wallets/default/backpackWallet/backpackWallet.ts +2 -4
  22. package/src/wallets/default/berasigWallet/berasigWallet.ts +2 -4
  23. package/src/wallets/default/binanceWallet/binanceWallet.ts +29 -4
  24. package/src/wallets/default/bitgetWallet/bitgetWallet.ts +12 -4
  25. package/src/wallets/default/bitskiWallet/bitskiWallet.ts +2 -4
  26. package/src/wallets/default/bitverseWallet/bitverseWallet.ts +5 -4
  27. package/src/wallets/default/bloomWallet/bloomWallet.ts +2 -4
  28. package/src/wallets/default/braveWallet/braveWallet.ts +2 -4
  29. package/src/wallets/default/bybitWallet/bybitWallet.ts +7 -4
  30. package/src/wallets/default/clvWallet/clvWallet.ts +2 -4
  31. package/src/wallets/default/coin98Wallet/coin98Wallet.ts +2 -4
  32. package/src/wallets/default/coinbaseWallet/coinbaseWallet.ts +9 -4
  33. package/src/wallets/default/compassWallet/compassWallet.ts +2 -4
  34. package/src/wallets/default/coreWallet/coreWallet.ts +2 -4
  35. package/src/wallets/default/ctrlWallet/ctrlWallet.ts +2 -4
  36. package/src/wallets/default/dawnWallet/dawnWallet.ts +2 -4
  37. package/src/wallets/default/desigWallet/desigWallet.ts +2 -4
  38. package/src/wallets/default/enkryptWallet/enkryptWallet.ts +2 -4
  39. package/src/wallets/default/foxWallet/foxWallet.ts +7 -4
  40. package/src/wallets/default/frameWallet/frameWallet.ts +2 -4
  41. package/src/wallets/default/gateWallet/gateWallet.ts +8 -4
  42. package/src/wallets/default/imTokenWallet/imTokenWallet.ts +11 -4
  43. package/src/wallets/default/injectedWallet/injectedWallet.ts +2 -4
  44. package/src/wallets/default/iopayWallet/iopayWallet.ts +8 -4
  45. package/src/wallets/default/kaiaWallet/kaiaWallet.ts +7 -4
  46. package/src/wallets/default/kaikasWallet/kaikasWallet.ts +7 -4
  47. package/src/wallets/default/krakenWallet/krakenWallet.ts +7 -4
  48. package/src/wallets/default/kresusWallet/kresusWallet.ts +5 -4
  49. package/src/wallets/default/ledgerWallet/ledgerWallet.ts +8 -4
  50. package/src/wallets/default/magicEdenWallet/magicEdenWallet.ts +5 -7
  51. package/src/wallets/default/mathWallet/mathWallet.svg +9 -0
  52. package/src/wallets/default/mathWallet/mathWallet.ts +2 -2
  53. package/src/wallets/default/metaMaskWallet/metaMaskWallet.ts +20 -2
  54. package/src/wallets/default/myDogeWallet/mydogeWallet.ts +1 -1
  55. package/src/wallets/default/nestWallet/nestWallet.ts +2 -4
  56. package/src/wallets/default/novaWallet/novaWallet.ts +2 -4
  57. package/src/wallets/default/oktoWallet/oktoWallet.ts +8 -4
  58. package/src/wallets/default/okxWallet/okxWallet.ts +13 -4
  59. package/src/wallets/default/omniWallet/omniWallet.ts +8 -4
  60. package/src/wallets/default/oneInchWallet/oneInchWallet.svg +30 -1
  61. package/src/wallets/default/oneInchWallet/oneInchWallet.ts +5 -4
  62. package/src/wallets/default/oneKeyWallet/oneKeyWallet.ts +2 -4
  63. package/src/wallets/default/paraSwapWallet/paraswapWallet.ts +7 -4
  64. package/src/wallets/default/petraWallet/petraWallet.svg +5 -0
  65. package/src/wallets/default/petraWallet/petraWallet.ts +24 -0
  66. package/src/wallets/default/phantomWallet/phantomWallet.ts +9 -4
  67. package/src/wallets/default/rabbyWallet/rabbyWallet.ts +2 -4
  68. package/src/wallets/default/rainbowWallet/rainbowWallet.ts +12 -4
  69. package/src/wallets/default/ramperWallet/ramperWallet.ts +2 -4
  70. package/src/wallets/default/readyWallet/readyWallet.ts +2 -4
  71. package/src/wallets/default/roninWallet/roninWallet.ts +2 -4
  72. package/src/wallets/default/safeWallet/safeWallet.ts +2 -4
  73. package/src/wallets/default/safeheronWallet/safeheronWallet.ts +2 -4
  74. package/src/wallets/default/safepalWallet/safepalWallet.ts +2 -4
  75. package/src/wallets/default/seifWallet/seifWallet.ts +2 -4
  76. package/src/wallets/default/solflareWallet/solflareWallet.svg +11 -0
  77. package/src/wallets/default/solflareWallet/solflareWallet.ts +9 -2
  78. package/src/wallets/default/subWallet/subWallet.ts +2 -4
  79. package/src/wallets/default/tahoWallet/tahoWallet.ts +2 -4
  80. package/src/wallets/default/talismanWallet/talismanWallet.ts +2 -4
  81. package/src/wallets/default/tokenPocketWallet/tokenPocketWallet.ts +8 -4
  82. package/src/wallets/default/tokenaryWallet/tokenaryWallet.ts +2 -4
  83. package/src/wallets/default/trezorWallet/trezorWallet.svg +7 -0
  84. package/src/wallets/default/trezorWallet/trezorWallet.ts +2 -2
  85. package/src/wallets/default/trustWallet/trustWallet.ts +9 -5
  86. package/src/wallets/default/uniswapWallet/uniswapWallet.ts +7 -4
  87. package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.svg +13 -1351
  88. package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.ts +2 -2
  89. package/src/wallets/default/valoraWallet/valoraWallet.ts +6 -4
  90. package/src/wallets/default/walletConnectWallet/walletConnectWallet.ts +2 -4
  91. package/src/wallets/default/wigwamWallet/wigwamWallet.ts +2 -4
  92. package/src/wallets/default/xPortalWallet/xPortalWallet.ts +2 -4
  93. package/src/wallets/default/zealWallet/zealWallet.ts +7 -4
  94. package/src/wallets/default/zerionWallet/zerionWallet.ts +8 -4
  95. package/src/wallets/default/zilPayWallet/zilPayWallet.ts +2 -4
  96. package/src/wallets/defaultConnectors.ts +213 -0
  97. package/src/wallets/detector.ts +34 -17
  98. package/src/wallets/index.ts +7 -76
  99. package/src/wallets/providers/WalletConnectProvider.ts +3 -2
  100. package/src/wallets/wallet-standard.ts +147 -47
  101. package/src/wallets/wallet-walletconnect.ts +1 -1
  102. package/tsconfig.json +4 -1
  103. package/tsup.config.ts +55 -0
  104. package/src/wallets/default/mathWallet/icon.ts +0 -2
  105. package/src/wallets/default/metaMaskWallet/icon.ts +0 -2
  106. package/src/wallets/default/myDogeWallet/icon.ts +0 -2
  107. package/src/wallets/default/solflareWallet/icon.ts +0 -2
  108. package/src/wallets/default/trezorWallet/icon.ts +0 -2
  109. 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.1",
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
- "@aptos-labs/ts-sdk": "^5.1.1",
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 src/index.ts --format esm,cjs --dts --treeshake",
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 src/index.ts --format esm,cjs --dts --watch",
17
+ "command": "tsup --watch",
18
18
  "cwd": "packages/wallet-adaptor-base"
19
19
  }
20
20
  },
@@ -0,0 +1,7 @@
1
+ declare global {
2
+ interface Window {
3
+ ethereum?: any;
4
+ }
5
+ }
6
+
7
+ export {};
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 connectorsDetected = [...evmWallets, ...solanaWallets, ...aptosWallets, ...wcWallets];
60
+ const connectorsDetecteds = [...evmWallets, ...solanaWallets, ...aptosWallets, ...wcWallets];
60
61
 
61
- for (const connector of connectorsDetected) {
62
- const connectorsDetected = connectorsFromConfig.find((c) => c.info.name === connector.info.name);
63
- if (connectorsDetected) {
64
- connectorsDetected.isInstalled = true;
65
- connectorsDetected.providers = { ...connectorsDetected.providers, ...connector.providers };
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 {
@@ -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
+ }
@@ -1,4 +1,4 @@
1
- import { isHex, toHex, fromHex, isAddressEqual } from "viem";
1
+ import { fromHex, isAddressEqual, isHex, toHex } from "viem";
2
2
 
3
3
  export const isHexChainId = (chainIdHex: string) => {
4
4
  return isHex(chainIdHex);
@@ -18,5 +18,5 @@ export function isIOS(): boolean {
18
18
  }
19
19
 
20
20
  export function isMobile(): boolean {
21
- return isAndroid() || isIOS();
21
+ return isAndroid() || isIOS() || isLargeIOS();
22
22
  }
@@ -0,0 +1,7 @@
1
+ const isDebug = true;
2
+
3
+ export function debugLog(...args: any[]) {
4
+ if (isDebug) {
5
+ console.log(...args);
6
+ }
7
+ }
@@ -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,
@@ -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 || !chainInfo?.chainId.startsWith("0x")) {
45
- throw new Error("Chain ID must starting with 0x");
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
- walletOptions: WalletOptions,
5
- ): Promise<{ address: string; chainId?: string; network?: string }> => {
6
- const { provider, chainType } = walletOptions;
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
- await provider?.connect();
38
- const account = await provider?.account();
39
- network = ((await provider?.network()) || "Mainnet") as string;
40
- address = account?.address || "";
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
- await provider.disconnect();
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
- await provider.disconnect();
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 true;
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 (signInData: SignInParams, walletOptions: WalletOptions) => {
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
- try {
27
- const sign: string = await provider.request({
28
- method: "personal_sign",
29
- params: [message, address],
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 { signature } = await provider.signIn(params);
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
- const encodedMessage = new TextEncoder().encode(message);
51
- const { signature } = await provider.signMessage(encodedMessage, "utf8");
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