@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 +124 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -8
- package/dist/index.d.ts +5 -8
- package/dist/index.mjs +126 -44
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -6
- package/src/Hydrate.ts +0 -7
- package/src/SodaxWalletProvider.tsx +1 -2
- package/src/actions/getXService.ts +3 -0
- package/src/hooks/useWalletProvider.ts +15 -2
- package/src/hooks/useXBalances.ts +2 -3
- package/src/hooks/useXConnectors.ts +6 -3
- package/src/hooks/useXDisconnect.ts +8 -0
- package/src/useXWagmiStore.ts +6 -1
- package/src/xchains/near/NearXConnector.ts +42 -0
- package/src/xchains/near/NearXService.ts +46 -0
- package/src/xchains/near/useNearXConnectors.ts +23 -0
- package/src/xchains/solana/SolanaXService.ts +3 -7
- package/src/xchains/stellar/StellarWalletsKitXConnector.ts +9 -1
- package/src/xchains/stellar/useStellarXConnectors.ts +1 -10
- package/src/xchains/solana/hooks/useAnchorProvider.tsx +0 -9
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
|
-
|
|
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
|
|
576
|
-
|
|
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
|
-
|
|
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();
|