@sodax/wallet-sdk-react 1.2.7-beta → 1.3.1-beta-rc1

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 CHANGED
@@ -1,6 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var types = require('@sodax/types');
4
+ var nearConnect = require('@hot-labs/near-connect');
5
+ var nearApiJs = require('near-api-js');
4
6
  var viem = require('viem');
5
7
  var actions = require('wagmi/actions');
6
8
  var wagmi = require('wagmi');
@@ -28,7 +30,6 @@ var chains$1 = require('viem/chains');
28
30
  var walletSdkCore = require('@sodax/wallet-sdk-core');
29
31
  var client = require('@mysten/sui/client');
30
32
  var walletAdapterWallets = require('@solana/wallet-adapter-wallets');
31
- var anchor = require('@coral-xyz/anchor');
32
33
 
33
34
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
34
35
 
@@ -62,26 +63,6 @@ function getXChainType(xChainId) {
62
63
  return types.baseChainInfo[xChainId].type;
63
64
  }
64
65
 
65
- // src/actions/getXService.ts
66
- function getXService(xChainType) {
67
- switch (xChainType) {
68
- case "EVM":
69
- return EvmXService.getInstance();
70
- case "SUI":
71
- return SuiXService.getInstance();
72
- case "SOLANA":
73
- return SolanaXService.getInstance();
74
- case "ICON":
75
- return IconXService.getInstance();
76
- case "INJECTIVE":
77
- return InjectiveXService.getInstance();
78
- case "STELLAR":
79
- return StellarXService.getInstance();
80
- default:
81
- throw new Error(`Unsupported chain type: ${xChainType}`);
82
- }
83
- }
84
-
85
66
  // src/core/XService.ts
86
67
  var XService = class {
87
68
  constructor(xChainType) {
@@ -137,6 +118,55 @@ var XService = class {
137
118
  return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
138
119
  }
139
120
  };
121
+ var NearXService = class _NearXService extends XService {
122
+ constructor() {
123
+ super("NEAR");
124
+ this.walletSelector = new nearConnect.NearConnector({
125
+ network: "mainnet",
126
+ logger: console,
127
+ autoConnect: true,
128
+ excludedWallets: ["okx-wallet"]
129
+ });
130
+ }
131
+ static getInstance() {
132
+ if (!_NearXService.instance) {
133
+ _NearXService.instance = new _NearXService();
134
+ }
135
+ return _NearXService.instance;
136
+ }
137
+ async getBalance(address, xToken) {
138
+ const url = "https://1rpc.io/near";
139
+ const provider = new nearApiJs.JsonRpcProvider({ url });
140
+ if (xToken.symbol === "NEAR") {
141
+ const account = await provider.viewAccount({ accountId: address ?? "" });
142
+ return BigInt(account.amount);
143
+ }
144
+ const res = await provider.callFunction({ contractId: xToken.address, method: "ft_balance_of", args: { account_id: address } });
145
+ return BigInt(res ?? 0);
146
+ }
147
+ };
148
+
149
+ // src/actions/getXService.ts
150
+ function getXService(xChainType) {
151
+ switch (xChainType) {
152
+ case "EVM":
153
+ return EvmXService.getInstance();
154
+ case "SUI":
155
+ return SuiXService.getInstance();
156
+ case "SOLANA":
157
+ return SolanaXService.getInstance();
158
+ case "ICON":
159
+ return IconXService.getInstance();
160
+ case "INJECTIVE":
161
+ return InjectiveXService.getInstance();
162
+ case "STELLAR":
163
+ return StellarXService.getInstance();
164
+ case "NEAR":
165
+ return NearXService.getInstance();
166
+ default:
167
+ throw new Error(`Unsupported chain type: ${xChainType}`);
168
+ }
169
+ }
140
170
 
141
171
  // src/core/XConnector.ts
142
172
  var XConnector = class {
@@ -562,7 +592,7 @@ var SolanaXService = class _SolanaXService extends XService {
562
592
  if (!address) return BigInt(0);
563
593
  const connection = this.connection;
564
594
  if (!connection) {
565
- throw new Error("Connection is not initialized");
595
+ return BigInt(0);
566
596
  }
567
597
  try {
568
598
  if (isNativeToken(xToken)) {
@@ -572,10 +602,9 @@ var SolanaXService = class _SolanaXService extends XService {
572
602
  const tokenAccountPubkey = splToken.getAssociatedTokenAddressSync(new web3_js.PublicKey(xToken.address), new web3_js.PublicKey(address));
573
603
  const tokenAccount = await splToken.getAccount(connection, tokenAccountPubkey);
574
604
  return BigInt(tokenAccount.amount);
575
- } catch (e) {
576
- console.log("error", e);
605
+ } catch {
606
+ return BigInt(0);
577
607
  }
578
- return BigInt(0);
579
608
  }
580
609
  };
581
610
 
@@ -840,7 +869,7 @@ var SuiXConnector = class extends XConnector {
840
869
  };
841
870
  var initXServices = () => {
842
871
  const xServices = {};
843
- ["EVM", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON"].forEach((key) => {
872
+ ["EVM", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON", "NEAR"].forEach((key) => {
844
873
  const xChainType = key;
845
874
  switch (xChainType) {
846
875
  // EVM, SUI, Solana wallet connectors are supported by their own sdks. wagmi, @mysten/dapp-kit, @solana/wallet-adapter-react.
@@ -869,6 +898,10 @@ var initXServices = () => {
869
898
  xServices[xChainType] = IconXService.getInstance();
870
899
  xServices[xChainType].setXConnectors([new IconHanaXConnector()]);
871
900
  break;
901
+ case "NEAR":
902
+ xServices[xChainType] = NearXService.getInstance();
903
+ xServices[xChainType].setXConnectors([]);
904
+ break;
872
905
  }
873
906
  });
874
907
  return xServices;
@@ -1084,12 +1117,59 @@ function useXService(xChainType) {
1084
1117
  return xService;
1085
1118
  }
1086
1119
 
1120
+ // src/xchains/near/NearXConnector.ts
1121
+ var NearXConnector = class extends XConnector {
1122
+ constructor(wallet) {
1123
+ super("NEAR", wallet.manifest.name, wallet.manifest.id);
1124
+ this._wallet = wallet;
1125
+ }
1126
+ getXService() {
1127
+ return NearXService.getInstance();
1128
+ }
1129
+ async connect() {
1130
+ const walletSelector = this.getXService().walletSelector;
1131
+ const wallet = await walletSelector.connect({ walletId: this._wallet.manifest.id });
1132
+ const accounts = await wallet.getAccounts();
1133
+ if (accounts.length === 0 || accounts[0] === void 0) {
1134
+ return void 0;
1135
+ }
1136
+ return {
1137
+ address: accounts[0].accountId,
1138
+ xChainType: this.xChainType
1139
+ };
1140
+ }
1141
+ async disconnect() {
1142
+ const walletSelector = this.getXService().walletSelector;
1143
+ await walletSelector.disconnect(this._wallet);
1144
+ }
1145
+ get icon() {
1146
+ return this._wallet.manifest.icon;
1147
+ }
1148
+ };
1149
+
1150
+ // src/xchains/near/useNearXConnectors.ts
1151
+ var useNearXConnectors = () => {
1152
+ const xService = useXService("NEAR");
1153
+ return reactQuery.useQuery({
1154
+ queryKey: ["near-wallets"],
1155
+ queryFn: async () => {
1156
+ if (!xService) {
1157
+ return [];
1158
+ }
1159
+ await xService.walletSelector.whenManifestLoaded;
1160
+ const wallets = xService.walletSelector.availableWallets;
1161
+ return wallets.map((wallet) => new NearXConnector(wallet));
1162
+ }
1163
+ });
1164
+ };
1165
+
1087
1166
  // src/hooks/useXConnectors.ts
1088
1167
  function useXConnectors(xChainType) {
1089
1168
  const xService = useXService(xChainType);
1090
1169
  const evmConnectors = wagmi.useConnectors();
1091
1170
  const suiWallets = dappKit.useWallets();
1092
1171
  const { data: stellarXConnectors } = useStellarXConnectors();
1172
+ const { data: nearXConnectors } = useNearXConnectors();
1093
1173
  const { wallets: solanaWallets } = walletAdapterReact.useWallet();
1094
1174
  const xConnectors = React2.useMemo(() => {
1095
1175
  if (!xChainType || !xService) {
@@ -1104,10 +1184,12 @@ function useXConnectors(xChainType) {
1104
1184
  return stellarXConnectors || [];
1105
1185
  case "SOLANA":
1106
1186
  return solanaWallets.filter((wallet) => wallet.readyState === "Installed").map((wallet) => new SolanaXConnector(wallet));
1187
+ case "NEAR":
1188
+ return nearXConnectors || [];
1107
1189
  default:
1108
1190
  return xService.getXConnectors();
1109
1191
  }
1110
- }, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets]);
1192
+ }, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets, nearXConnectors]);
1111
1193
  return xConnectors;
1112
1194
  }
1113
1195
  function useXDisconnect() {
@@ -1128,6 +1210,11 @@ function useXDisconnect() {
1128
1210
  case "SOLANA":
1129
1211
  await solanaWallet.disconnect();
1130
1212
  break;
1213
+ case "NEAR": {
1214
+ const nearXService = getXService("NEAR");
1215
+ nearXService.walletSelector.disconnect();
1216
+ break;
1217
+ }
1131
1218
  default: {
1132
1219
  const xService = getXService(xChainType);
1133
1220
  const xConnectorId = xConnections[xChainType]?.xConnectorId;
@@ -1156,8 +1243,7 @@ function useXBalances({
1156
1243
  const balances = await xService.getBalances(address, xTokens);
1157
1244
  return balances;
1158
1245
  },
1159
- enabled: !!xService,
1160
- placeholderData: reactQuery.keepPreviousData,
1246
+ enabled: !!xService && !!address && (xTokens?.length ?? 0) > 0,
1161
1247
  refetchInterval: 5e3
1162
1248
  });
1163
1249
  }
@@ -1287,9 +1373,16 @@ function useWalletProvider(spokeChainId) {
1287
1373
  }
1288
1374
  return new walletSdkCore.SolanaWalletProvider({
1289
1375
  wallet: solanaXService.wallet,
1290
- connection: solanaXService.connection
1376
+ endpoint: solanaXService.connection.rpcEndpoint
1291
1377
  });
1292
1378
  }
1379
+ case "NEAR": {
1380
+ const nearXService = xService;
1381
+ if (!nearXService.walletSelector) {
1382
+ return void 0;
1383
+ }
1384
+ return new walletSdkCore.NearWalletProvider({ wallet: nearXService.walletSelector });
1385
+ }
1293
1386
  default:
1294
1387
  return void 0;
1295
1388
  }
@@ -1349,11 +1442,6 @@ function useXSignMessage() {
1349
1442
  }
1350
1443
  });
1351
1444
  }
1352
- function useAnchorProvider() {
1353
- const { connection } = walletAdapterReact.useConnection();
1354
- const wallet = walletAdapterReact.useWallet();
1355
- return new anchor.AnchorProvider(connection, wallet, { commitment: "confirmed" });
1356
- }
1357
1445
  var Hydrate = () => {
1358
1446
  const suiClient = dappKit.useSuiClient();
1359
1447
  React2.useEffect(() => {
@@ -1375,7 +1463,6 @@ var Hydrate = () => {
1375
1463
  }, [suiAccount]);
1376
1464
  const { connection: solanaConnection } = walletAdapterReact.useConnection();
1377
1465
  const solanaWallet = walletAdapterReact.useWallet();
1378
- const solanaProvider = useAnchorProvider();
1379
1466
  React2.useEffect(() => {
1380
1467
  if (solanaConnection) {
1381
1468
  SolanaXService.getInstance().connection = solanaConnection;
@@ -1386,11 +1473,6 @@ var Hydrate = () => {
1386
1473
  SolanaXService.getInstance().wallet = solanaWallet;
1387
1474
  }
1388
1475
  }, [solanaWallet]);
1389
- React2.useEffect(() => {
1390
- if (solanaProvider) {
1391
- SolanaXService.getInstance().provider = solanaProvider;
1392
- }
1393
- }, [solanaProvider]);
1394
1476
  const wagmiConfig = wagmi.useConfig();
1395
1477
  React2.useEffect(() => {
1396
1478
  if (wagmiConfig) {
@@ -1451,7 +1533,7 @@ var SodaxWalletProvider = ({ children, rpcConfig }) => {
1451
1533
  return createWagmiConfig(rpcConfig);
1452
1534
  }, [rpcConfig]);
1453
1535
  const wallets = React2.useMemo(() => [new walletAdapterWallets.UnsafeBurnerWalletAdapter()], []);
1454
- return /* @__PURE__ */ React2__default.default.createElement(reactQuery.QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React2__default.default.createElement(wagmi.WagmiProvider, { reconnectOnMount: false, config: wagmiConfig }, /* @__PURE__ */ React2__default.default.createElement(dappKit.SuiClientProvider, { networks: { mainnet: { url: client.getFullnodeUrl("mainnet") } }, defaultNetwork: "mainnet" }, /* @__PURE__ */ React2__default.default.createElement(dappKit.WalletProvider, { autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: rpcConfig["solana"] ?? "" }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(Hydrate, null), children))))));
1536
+ return /* @__PURE__ */ React2__default.default.createElement(reactQuery.QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React2__default.default.createElement(wagmi.WagmiProvider, { reconnectOnMount: false, config: wagmiConfig }, /* @__PURE__ */ React2__default.default.createElement(dappKit.SuiClientProvider, { networks: { mainnet: { url: client.getFullnodeUrl("mainnet") } }, defaultNetwork: "mainnet" }, /* @__PURE__ */ React2__default.default.createElement(dappKit.WalletProvider, { autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: rpcConfig["solana"] ?? "https://api.mainnet-beta.solana.com" }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(Hydrate, null), children))))));
1455
1537
  };
1456
1538
  reconnectIcon();
1457
1539
  reconnectStellar();