@sodax/wallet-sdk-react 1.2.6-beta → 1.3.0-beta
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 +118 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/index.mjs +119 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -5
- package/src/actions/getXService.ts +3 -0
- package/src/hooks/useWalletProvider.ts +14 -1
- 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/stellar/StellarWalletsKitXConnector.ts +9 -1
- package/src/xchains/stellar/useStellarXConnectors.ts +1 -10
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');
|
|
@@ -62,26 +64,6 @@ function getXChainType(xChainId) {
|
|
|
62
64
|
return types.baseChainInfo[xChainId].type;
|
|
63
65
|
}
|
|
64
66
|
|
|
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
67
|
// src/core/XService.ts
|
|
86
68
|
var XService = class {
|
|
87
69
|
constructor(xChainType) {
|
|
@@ -137,6 +119,55 @@ var XService = class {
|
|
|
137
119
|
return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
|
|
138
120
|
}
|
|
139
121
|
};
|
|
122
|
+
var NearXService = class _NearXService extends XService {
|
|
123
|
+
constructor() {
|
|
124
|
+
super("NEAR");
|
|
125
|
+
this.walletSelector = new nearConnect.NearConnector({
|
|
126
|
+
network: "mainnet",
|
|
127
|
+
logger: console,
|
|
128
|
+
autoConnect: true,
|
|
129
|
+
excludedWallets: ["okx-wallet"]
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
static getInstance() {
|
|
133
|
+
if (!_NearXService.instance) {
|
|
134
|
+
_NearXService.instance = new _NearXService();
|
|
135
|
+
}
|
|
136
|
+
return _NearXService.instance;
|
|
137
|
+
}
|
|
138
|
+
async getBalance(address, xToken) {
|
|
139
|
+
const url = "https://1rpc.io/near";
|
|
140
|
+
const provider = new nearApiJs.JsonRpcProvider({ url });
|
|
141
|
+
if (xToken.symbol === "NEAR") {
|
|
142
|
+
const account = await provider.viewAccount({ accountId: address ?? "" });
|
|
143
|
+
return BigInt(account.amount);
|
|
144
|
+
}
|
|
145
|
+
const res = await provider.callFunction({ contractId: xToken.address, method: "ft_balance_of", args: { account_id: address } });
|
|
146
|
+
return BigInt(res ?? 0);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// src/actions/getXService.ts
|
|
151
|
+
function getXService(xChainType) {
|
|
152
|
+
switch (xChainType) {
|
|
153
|
+
case "EVM":
|
|
154
|
+
return EvmXService.getInstance();
|
|
155
|
+
case "SUI":
|
|
156
|
+
return SuiXService.getInstance();
|
|
157
|
+
case "SOLANA":
|
|
158
|
+
return SolanaXService.getInstance();
|
|
159
|
+
case "ICON":
|
|
160
|
+
return IconXService.getInstance();
|
|
161
|
+
case "INJECTIVE":
|
|
162
|
+
return InjectiveXService.getInstance();
|
|
163
|
+
case "STELLAR":
|
|
164
|
+
return StellarXService.getInstance();
|
|
165
|
+
case "NEAR":
|
|
166
|
+
return NearXService.getInstance();
|
|
167
|
+
default:
|
|
168
|
+
throw new Error(`Unsupported chain type: ${xChainType}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
140
171
|
|
|
141
172
|
// src/core/XConnector.ts
|
|
142
173
|
var XConnector = class {
|
|
@@ -840,7 +871,7 @@ var SuiXConnector = class extends XConnector {
|
|
|
840
871
|
};
|
|
841
872
|
var initXServices = () => {
|
|
842
873
|
const xServices = {};
|
|
843
|
-
["EVM", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON"].forEach((key) => {
|
|
874
|
+
["EVM", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON", "NEAR"].forEach((key) => {
|
|
844
875
|
const xChainType = key;
|
|
845
876
|
switch (xChainType) {
|
|
846
877
|
// EVM, SUI, Solana wallet connectors are supported by their own sdks. wagmi, @mysten/dapp-kit, @solana/wallet-adapter-react.
|
|
@@ -869,6 +900,10 @@ var initXServices = () => {
|
|
|
869
900
|
xServices[xChainType] = IconXService.getInstance();
|
|
870
901
|
xServices[xChainType].setXConnectors([new IconHanaXConnector()]);
|
|
871
902
|
break;
|
|
903
|
+
case "NEAR":
|
|
904
|
+
xServices[xChainType] = NearXService.getInstance();
|
|
905
|
+
xServices[xChainType].setXConnectors([]);
|
|
906
|
+
break;
|
|
872
907
|
}
|
|
873
908
|
});
|
|
874
909
|
return xServices;
|
|
@@ -1084,12 +1119,59 @@ function useXService(xChainType) {
|
|
|
1084
1119
|
return xService;
|
|
1085
1120
|
}
|
|
1086
1121
|
|
|
1122
|
+
// src/xchains/near/NearXConnector.ts
|
|
1123
|
+
var NearXConnector = class extends XConnector {
|
|
1124
|
+
constructor(wallet) {
|
|
1125
|
+
super("NEAR", wallet.manifest.name, wallet.manifest.id);
|
|
1126
|
+
this._wallet = wallet;
|
|
1127
|
+
}
|
|
1128
|
+
getXService() {
|
|
1129
|
+
return NearXService.getInstance();
|
|
1130
|
+
}
|
|
1131
|
+
async connect() {
|
|
1132
|
+
const walletSelector = this.getXService().walletSelector;
|
|
1133
|
+
const wallet = await walletSelector.connect({ walletId: this._wallet.manifest.id });
|
|
1134
|
+
const accounts = await wallet.getAccounts();
|
|
1135
|
+
if (accounts.length === 0 || accounts[0] === void 0) {
|
|
1136
|
+
return void 0;
|
|
1137
|
+
}
|
|
1138
|
+
return {
|
|
1139
|
+
address: accounts[0].accountId,
|
|
1140
|
+
xChainType: this.xChainType
|
|
1141
|
+
};
|
|
1142
|
+
}
|
|
1143
|
+
async disconnect() {
|
|
1144
|
+
const walletSelector = this.getXService().walletSelector;
|
|
1145
|
+
await walletSelector.disconnect(this._wallet);
|
|
1146
|
+
}
|
|
1147
|
+
get icon() {
|
|
1148
|
+
return this._wallet.manifest.icon;
|
|
1149
|
+
}
|
|
1150
|
+
};
|
|
1151
|
+
|
|
1152
|
+
// src/xchains/near/useNearXConnectors.ts
|
|
1153
|
+
var useNearXConnectors = () => {
|
|
1154
|
+
const xService = useXService("NEAR");
|
|
1155
|
+
return reactQuery.useQuery({
|
|
1156
|
+
queryKey: ["near-wallets"],
|
|
1157
|
+
queryFn: async () => {
|
|
1158
|
+
if (!xService) {
|
|
1159
|
+
return [];
|
|
1160
|
+
}
|
|
1161
|
+
await xService.walletSelector.whenManifestLoaded;
|
|
1162
|
+
const wallets = xService.walletSelector.availableWallets;
|
|
1163
|
+
return wallets.map((wallet) => new NearXConnector(wallet));
|
|
1164
|
+
}
|
|
1165
|
+
});
|
|
1166
|
+
};
|
|
1167
|
+
|
|
1087
1168
|
// src/hooks/useXConnectors.ts
|
|
1088
1169
|
function useXConnectors(xChainType) {
|
|
1089
1170
|
const xService = useXService(xChainType);
|
|
1090
1171
|
const evmConnectors = wagmi.useConnectors();
|
|
1091
1172
|
const suiWallets = dappKit.useWallets();
|
|
1092
1173
|
const { data: stellarXConnectors } = useStellarXConnectors();
|
|
1174
|
+
const { data: nearXConnectors } = useNearXConnectors();
|
|
1093
1175
|
const { wallets: solanaWallets } = walletAdapterReact.useWallet();
|
|
1094
1176
|
const xConnectors = React2.useMemo(() => {
|
|
1095
1177
|
if (!xChainType || !xService) {
|
|
@@ -1104,10 +1186,12 @@ function useXConnectors(xChainType) {
|
|
|
1104
1186
|
return stellarXConnectors || [];
|
|
1105
1187
|
case "SOLANA":
|
|
1106
1188
|
return solanaWallets.filter((wallet) => wallet.readyState === "Installed").map((wallet) => new SolanaXConnector(wallet));
|
|
1189
|
+
case "NEAR":
|
|
1190
|
+
return nearXConnectors || [];
|
|
1107
1191
|
default:
|
|
1108
1192
|
return xService.getXConnectors();
|
|
1109
1193
|
}
|
|
1110
|
-
}, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets]);
|
|
1194
|
+
}, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets, nearXConnectors]);
|
|
1111
1195
|
return xConnectors;
|
|
1112
1196
|
}
|
|
1113
1197
|
function useXDisconnect() {
|
|
@@ -1128,6 +1212,11 @@ function useXDisconnect() {
|
|
|
1128
1212
|
case "SOLANA":
|
|
1129
1213
|
await solanaWallet.disconnect();
|
|
1130
1214
|
break;
|
|
1215
|
+
case "NEAR": {
|
|
1216
|
+
const nearXService = getXService("NEAR");
|
|
1217
|
+
nearXService.walletSelector.disconnect();
|
|
1218
|
+
break;
|
|
1219
|
+
}
|
|
1131
1220
|
default: {
|
|
1132
1221
|
const xService = getXService(xChainType);
|
|
1133
1222
|
const xConnectorId = xConnections[xChainType]?.xConnectorId;
|
|
@@ -1290,6 +1379,13 @@ function useWalletProvider(spokeChainId) {
|
|
|
1290
1379
|
connection: solanaXService.connection
|
|
1291
1380
|
});
|
|
1292
1381
|
}
|
|
1382
|
+
case "NEAR": {
|
|
1383
|
+
const nearXService = xService;
|
|
1384
|
+
if (!nearXService.walletSelector) {
|
|
1385
|
+
return void 0;
|
|
1386
|
+
}
|
|
1387
|
+
return new walletSdkCore.NearWalletProvider({ wallet: nearXService.walletSelector });
|
|
1388
|
+
}
|
|
1293
1389
|
default:
|
|
1294
1390
|
return void 0;
|
|
1295
1391
|
}
|