@matchain/matchid-sdk-react 0.1.48-alpha.1 → 0.1.48-alpha.2
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/{chunk-AFZSANRV.mjs → chunk-6HRRPZPM.mjs} +2 -2
- package/dist/{chunk-A477SJHT.mjs → chunk-D6IUBR7S.mjs} +300 -152
- package/dist/chunk-D6IUBR7S.mjs.map +1 -0
- package/dist/components/index.js +137 -130
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +1 -1
- package/dist/hooks/api/index.js +27 -20
- package/dist/hooks/api/index.js.map +1 -1
- package/dist/hooks/api/index.mjs +2 -2
- package/dist/hooks/index.d.mts +2 -1
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.js +163 -15
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +3 -1
- package/dist/{index-DO5x10pN.d.mts → index-BHVMQGZj.d.mts} +9 -2
- package/dist/{index-Pssz41An.d.ts → index-DgAnNnit.d.ts} +9 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +243 -96
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-A477SJHT.mjs.map +0 -1
- /package/dist/{chunk-AFZSANRV.mjs.map → chunk-6HRRPZPM.mjs.map} +0 -0
|
@@ -79,7 +79,7 @@ __export(components_exports, {
|
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
// src/components/EmailModal/index.tsx
|
|
82
|
-
import { useEffect as
|
|
82
|
+
import { useEffect as useEffect13, useState as useState12 } from "react";
|
|
83
83
|
|
|
84
84
|
// src/components/EmailModal/StepEmail.tsx
|
|
85
85
|
import { useEffect, useMemo, useState } from "react";
|
|
@@ -97,12 +97,12 @@ var isValidEmail = (email) => {
|
|
|
97
97
|
var isValidUsername = (username) => {
|
|
98
98
|
return /^[a-zA-Z0-9_-]+$/.test(username);
|
|
99
99
|
};
|
|
100
|
-
function truncateAddress(
|
|
101
|
-
if (
|
|
102
|
-
return
|
|
100
|
+
function truncateAddress(address2) {
|
|
101
|
+
if (address2.length <= 6) {
|
|
102
|
+
return address2;
|
|
103
103
|
}
|
|
104
|
-
const start =
|
|
105
|
-
const end =
|
|
104
|
+
const start = address2.slice(0, 4);
|
|
105
|
+
const end = address2.slice(-2);
|
|
106
106
|
return `${start}...${end}`;
|
|
107
107
|
}
|
|
108
108
|
function getAppClientId() {
|
|
@@ -370,11 +370,11 @@ var unBindApi = ({ type }) => {
|
|
|
370
370
|
data: { type }
|
|
371
371
|
});
|
|
372
372
|
};
|
|
373
|
-
var unBindWalletApi = ({ address }) => {
|
|
373
|
+
var unBindWalletApi = ({ address: address2 }) => {
|
|
374
374
|
return request_default({
|
|
375
375
|
url: `/api/v1/wallet/unbind`,
|
|
376
376
|
method: "POST",
|
|
377
|
-
data: { address }
|
|
377
|
+
data: { address: address2 }
|
|
378
378
|
});
|
|
379
379
|
};
|
|
380
380
|
var verifyPohApi = ({
|
|
@@ -432,7 +432,7 @@ var getWalletNonceApi = (data) => {
|
|
|
432
432
|
};
|
|
433
433
|
var loginByWalletApi = ({
|
|
434
434
|
type,
|
|
435
|
-
address,
|
|
435
|
+
address: address2,
|
|
436
436
|
signature,
|
|
437
437
|
message,
|
|
438
438
|
connector_type,
|
|
@@ -441,7 +441,7 @@ var loginByWalletApi = ({
|
|
|
441
441
|
return request_default({
|
|
442
442
|
url: `/api/v1/login/wallet`,
|
|
443
443
|
method: "POST",
|
|
444
|
-
data: { type, address, signature, message, connector_type, wallet_client_type }
|
|
444
|
+
data: { type, address: address2, signature, message, connector_type, wallet_client_type }
|
|
445
445
|
});
|
|
446
446
|
};
|
|
447
447
|
var getWalletInitApi = (data) => {
|
|
@@ -453,7 +453,7 @@ var getWalletInitApi = (data) => {
|
|
|
453
453
|
};
|
|
454
454
|
var toBindWalletApi = ({
|
|
455
455
|
type,
|
|
456
|
-
address,
|
|
456
|
+
address: address2,
|
|
457
457
|
signature,
|
|
458
458
|
message,
|
|
459
459
|
connector_type,
|
|
@@ -462,7 +462,7 @@ var toBindWalletApi = ({
|
|
|
462
462
|
return request_default({
|
|
463
463
|
url: `/api/v1/wallet/bind`,
|
|
464
464
|
method: "POST",
|
|
465
|
-
data: { type, address, signature, message, connector_type, wallet_client_type }
|
|
465
|
+
data: { type, address: address2, signature, message, connector_type, wallet_client_type }
|
|
466
466
|
});
|
|
467
467
|
};
|
|
468
468
|
var getAppConfigApi = () => {
|
|
@@ -562,7 +562,7 @@ var persistedState = persist(
|
|
|
562
562
|
setTheme: (theme) => set({ theme }),
|
|
563
563
|
setEndpoints: (endpoints) => set({ endpoints }),
|
|
564
564
|
address: "",
|
|
565
|
-
setAddress: (
|
|
565
|
+
setAddress: (address2) => set({ address: address2 }),
|
|
566
566
|
locale: "en",
|
|
567
567
|
setLocale: (locale) => set({ locale }),
|
|
568
568
|
wallet: {
|
|
@@ -579,7 +579,7 @@ var localStore = useLocalStore;
|
|
|
579
579
|
var useLocalStore_default = useLocalStore;
|
|
580
580
|
|
|
581
581
|
// src/hooks/useUserInfo.tsx
|
|
582
|
-
import { useMemo as
|
|
582
|
+
import { useMemo as useMemo6 } from "react";
|
|
583
583
|
|
|
584
584
|
// src/MatchContext.tsx
|
|
585
585
|
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
@@ -593,6 +593,7 @@ __export(hooks_exports, {
|
|
|
593
593
|
useMatchEvents: () => useMatchEvents,
|
|
594
594
|
useMatchWallet: () => useMatchWallet,
|
|
595
595
|
useModal: () => useModal,
|
|
596
|
+
useReceipt: () => useReceipt,
|
|
596
597
|
useToast: () => useToast,
|
|
597
598
|
useUserInfo: () => useUserInfo,
|
|
598
599
|
useWallet: () => useWallet
|
|
@@ -765,7 +766,7 @@ var useWalletModalStore = create3((set) => ({
|
|
|
765
766
|
// src/hooks/useWallet.tsx
|
|
766
767
|
var AppClientId = "react-sdk-" + getVersion();
|
|
767
768
|
function useWallet() {
|
|
768
|
-
const { address, wallet: walletConfig } = useLocalStore_default();
|
|
769
|
+
const { address: address2, wallet: walletConfig } = useLocalStore_default();
|
|
769
770
|
const { walletReady } = useStore_default();
|
|
770
771
|
const { open: openHashPanel } = useHashPanelStore();
|
|
771
772
|
const isRecovered = async () => {
|
|
@@ -813,8 +814,8 @@ function useWallet() {
|
|
|
813
814
|
}
|
|
814
815
|
};
|
|
815
816
|
const evmAccount = useMemo2(() => {
|
|
816
|
-
return
|
|
817
|
-
address,
|
|
817
|
+
return address2 ? toAccount({
|
|
818
|
+
address: address2,
|
|
818
819
|
async signMessage({ message }) {
|
|
819
820
|
return await signMessage2({
|
|
820
821
|
message,
|
|
@@ -845,7 +846,7 @@ function useWallet() {
|
|
|
845
846
|
return "0x";
|
|
846
847
|
}
|
|
847
848
|
}) : void 0;
|
|
848
|
-
}, [
|
|
849
|
+
}, [address2]);
|
|
849
850
|
useEffect3(() => {
|
|
850
851
|
matchlog_default.log("qwe-evmAccount", evmAccount);
|
|
851
852
|
}, [evmAccount]);
|
|
@@ -938,7 +939,7 @@ function useWallet() {
|
|
|
938
939
|
});
|
|
939
940
|
};
|
|
940
941
|
const writeContract = async (parameters2) => {
|
|
941
|
-
const { abi, address:
|
|
942
|
+
const { abi, address: address3, args, dataSuffix, functionName, ...request3 } = parameters2;
|
|
942
943
|
const data = encodeFunctionData({
|
|
943
944
|
abi,
|
|
944
945
|
args,
|
|
@@ -946,7 +947,7 @@ function useWallet() {
|
|
|
946
947
|
});
|
|
947
948
|
return await sendTransaction({
|
|
948
949
|
data: `${data}${dataSuffix ? dataSuffix.replace("0x", "") : ""}`,
|
|
949
|
-
to:
|
|
950
|
+
to: address3,
|
|
950
951
|
...request3
|
|
951
952
|
});
|
|
952
953
|
};
|
|
@@ -960,7 +961,7 @@ function useWallet() {
|
|
|
960
961
|
return {
|
|
961
962
|
walletReady,
|
|
962
963
|
evmAccount,
|
|
963
|
-
address,
|
|
964
|
+
address: address2,
|
|
964
965
|
signMessage: signMessage2,
|
|
965
966
|
signTransaction,
|
|
966
967
|
isRecovered,
|
|
@@ -1236,19 +1237,20 @@ function useMatchChain() {
|
|
|
1236
1237
|
|
|
1237
1238
|
// src/hooks/useMatchWallet.tsx
|
|
1238
1239
|
import { QRCode } from "react-qrcode";
|
|
1240
|
+
import { useEffect as useEffect6, useState as useState7 } from "react";
|
|
1239
1241
|
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1240
1242
|
function useMatchWallet() {
|
|
1241
1243
|
const modal = useModal();
|
|
1242
|
-
const { address } = useWallet();
|
|
1244
|
+
const { address: address2 } = useWallet();
|
|
1243
1245
|
const chain = useMatchChain();
|
|
1244
1246
|
const [copied, setCopied] = useCopyClipboard();
|
|
1245
1247
|
const toast = useToast();
|
|
1246
1248
|
const onCopy = () => {
|
|
1247
|
-
setCopied(
|
|
1249
|
+
setCopied(address2);
|
|
1248
1250
|
toast.success("Copied!");
|
|
1249
1251
|
};
|
|
1250
1252
|
const showReceiveModal = () => {
|
|
1251
|
-
const chainLink = chain.explorerLink("address/" +
|
|
1253
|
+
const chainLink = chain.explorerLink("address/" + address2);
|
|
1252
1254
|
const ReceiveModal = () => {
|
|
1253
1255
|
return /* @__PURE__ */ jsxs5("div", { className: `matchid-receive-modal`, children: [
|
|
1254
1256
|
/* @__PURE__ */ jsxs5("div", { className: "matchid-receive-container", children: [
|
|
@@ -1258,7 +1260,7 @@ function useMatchWallet() {
|
|
|
1258
1260
|
{
|
|
1259
1261
|
margin: "0",
|
|
1260
1262
|
className: `matchid-qr-code`,
|
|
1261
|
-
value:
|
|
1263
|
+
value: address2
|
|
1262
1264
|
}
|
|
1263
1265
|
) }),
|
|
1264
1266
|
/* @__PURE__ */ jsx6(
|
|
@@ -1267,7 +1269,7 @@ function useMatchWallet() {
|
|
|
1267
1269
|
href: chainLink,
|
|
1268
1270
|
target: "_blank",
|
|
1269
1271
|
className: `matchid-receive-link`,
|
|
1270
|
-
children:
|
|
1272
|
+
children: address2
|
|
1271
1273
|
}
|
|
1272
1274
|
)
|
|
1273
1275
|
] }),
|
|
@@ -1284,8 +1286,153 @@ function useMatchWallet() {
|
|
|
1284
1286
|
};
|
|
1285
1287
|
}
|
|
1286
1288
|
|
|
1289
|
+
// src/hooks/useReceipt.tsx
|
|
1290
|
+
import { useState as useState8, useCallback as useCallback4, useEffect as useEffect7 } from "react";
|
|
1291
|
+
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
1292
|
+
import { createPublicClient, defineChain, http } from "viem";
|
|
1293
|
+
var CACHE_TTL = 86400 * 30 * 1e3;
|
|
1294
|
+
var MAX_CACHE_SIZE = 500;
|
|
1295
|
+
var STORAGE_KEY = "match_receipt_logs";
|
|
1296
|
+
function useReceiptCache() {
|
|
1297
|
+
const [cache, setCache] = useState8(/* @__PURE__ */ new Map());
|
|
1298
|
+
const isLocalStorageAvailable = (() => {
|
|
1299
|
+
try {
|
|
1300
|
+
const testKey = "__test__";
|
|
1301
|
+
localStorage.setItem(testKey, "1");
|
|
1302
|
+
localStorage.removeItem(testKey);
|
|
1303
|
+
return true;
|
|
1304
|
+
} catch (e) {
|
|
1305
|
+
return false;
|
|
1306
|
+
}
|
|
1307
|
+
})();
|
|
1308
|
+
useEffect7(() => {
|
|
1309
|
+
if (isLocalStorageAvailable) {
|
|
1310
|
+
try {
|
|
1311
|
+
const storedData = localStorage.getItem(STORAGE_KEY);
|
|
1312
|
+
if (storedData) {
|
|
1313
|
+
try {
|
|
1314
|
+
const parsed = JSON.parse(storedData);
|
|
1315
|
+
const now = Date.now();
|
|
1316
|
+
const validEntries = Object.entries(parsed).filter(([_, entry]) => typeof entry === "object" && entry !== null && "timestamp" in entry && now - entry.timestamp <= CACHE_TTL).map(([key, entry]) => [key, entry]);
|
|
1317
|
+
setCache(new Map(validEntries));
|
|
1318
|
+
} catch (e) {
|
|
1319
|
+
console.error("Failed to parse cache from localStorage:", e);
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
} catch (e) {
|
|
1323
|
+
console.error("Failed to load cache from localStorage:", e);
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
}, []);
|
|
1327
|
+
const updateLocalStorage = useCallback4((updatedCache) => {
|
|
1328
|
+
if (isLocalStorageAvailable) {
|
|
1329
|
+
try {
|
|
1330
|
+
const storedData = localStorage.getItem(STORAGE_KEY);
|
|
1331
|
+
let parsed = {};
|
|
1332
|
+
if (storedData) {
|
|
1333
|
+
parsed = JSON.parse(storedData);
|
|
1334
|
+
}
|
|
1335
|
+
updatedCache.forEach((entry, key) => {
|
|
1336
|
+
parsed[key] = entry;
|
|
1337
|
+
});
|
|
1338
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(parsed));
|
|
1339
|
+
} catch (e) {
|
|
1340
|
+
console.error("Failed to update localStorage:", e);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
}, []);
|
|
1344
|
+
const set = useCallback4((key, value) => {
|
|
1345
|
+
const now = Date.now();
|
|
1346
|
+
const newCache = new Map(cache);
|
|
1347
|
+
newCache.forEach((entry, k) => {
|
|
1348
|
+
if (now - entry.timestamp > CACHE_TTL) {
|
|
1349
|
+
newCache.delete(k);
|
|
1350
|
+
}
|
|
1351
|
+
});
|
|
1352
|
+
if (newCache.size >= MAX_CACHE_SIZE) {
|
|
1353
|
+
const firstKey = newCache.keys().next().value;
|
|
1354
|
+
if (firstKey !== void 0) {
|
|
1355
|
+
newCache.delete(firstKey);
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
newCache.set(key, { value, timestamp: now });
|
|
1359
|
+
setCache(newCache);
|
|
1360
|
+
updateLocalStorage(newCache);
|
|
1361
|
+
}, [cache, updateLocalStorage]);
|
|
1362
|
+
const get = useCallback4((key) => {
|
|
1363
|
+
const entry = cache.get(key);
|
|
1364
|
+
if (entry) {
|
|
1365
|
+
if (Date.now() - entry.timestamp > CACHE_TTL) {
|
|
1366
|
+
const newCache = new Map(cache);
|
|
1367
|
+
newCache.delete(key);
|
|
1368
|
+
setCache(newCache);
|
|
1369
|
+
updateLocalStorage(newCache);
|
|
1370
|
+
return void 0;
|
|
1371
|
+
}
|
|
1372
|
+
return entry.value;
|
|
1373
|
+
}
|
|
1374
|
+
return void 0;
|
|
1375
|
+
}, [cache, updateLocalStorage]);
|
|
1376
|
+
const del = useCallback4((key) => {
|
|
1377
|
+
if (cache.has(key)) {
|
|
1378
|
+
const newCache = new Map(cache);
|
|
1379
|
+
newCache.delete(key);
|
|
1380
|
+
setCache(newCache);
|
|
1381
|
+
updateLocalStorage(newCache);
|
|
1382
|
+
}
|
|
1383
|
+
}, [cache, updateLocalStorage]);
|
|
1384
|
+
const clear = useCallback4(() => {
|
|
1385
|
+
setCache(/* @__PURE__ */ new Map());
|
|
1386
|
+
if (isLocalStorageAvailable) {
|
|
1387
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
1388
|
+
}
|
|
1389
|
+
}, [isLocalStorageAvailable]);
|
|
1390
|
+
return { set, get, del, clear };
|
|
1391
|
+
}
|
|
1392
|
+
function useReceipt({
|
|
1393
|
+
chainId,
|
|
1394
|
+
hash
|
|
1395
|
+
}) {
|
|
1396
|
+
const { list } = useMatchChain();
|
|
1397
|
+
const cache = useReceiptCache();
|
|
1398
|
+
const chain = list?.find((item) => item.id === chainId);
|
|
1399
|
+
const [shouldRefetch, setShouldRefetch] = useState8(true);
|
|
1400
|
+
const query = useQuery2({
|
|
1401
|
+
queryKey: ["match-tx-receipt", hash, chain],
|
|
1402
|
+
queryFn: async () => {
|
|
1403
|
+
if (!chain || !hash) return false;
|
|
1404
|
+
const cacheKey = `${chain.id}-${hash}`;
|
|
1405
|
+
if (cache.get(cacheKey)) {
|
|
1406
|
+
return cache.get(cacheKey);
|
|
1407
|
+
}
|
|
1408
|
+
try {
|
|
1409
|
+
const publicClient = createPublicClient({
|
|
1410
|
+
//@ts-ignore
|
|
1411
|
+
chain: defineChain(chain),
|
|
1412
|
+
transport: http()
|
|
1413
|
+
});
|
|
1414
|
+
const receipt = await publicClient.getTransaction({ hash });
|
|
1415
|
+
if (!receipt) {
|
|
1416
|
+
return false;
|
|
1417
|
+
}
|
|
1418
|
+
cache.set(cacheKey, receipt);
|
|
1419
|
+
return receipt;
|
|
1420
|
+
} catch (e) {
|
|
1421
|
+
return false;
|
|
1422
|
+
}
|
|
1423
|
+
},
|
|
1424
|
+
refetchInterval: shouldRefetch ? 1e4 : false
|
|
1425
|
+
});
|
|
1426
|
+
useEffect7(() => {
|
|
1427
|
+
if (query.data) {
|
|
1428
|
+
setShouldRefetch(false);
|
|
1429
|
+
}
|
|
1430
|
+
}, [query.data]);
|
|
1431
|
+
return query;
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1287
1434
|
// src/components/CEXBindModal/index.tsx
|
|
1288
|
-
import { useEffect as
|
|
1435
|
+
import { useEffect as useEffect8, useMemo as useMemo5, useState as useState9 } from "react";
|
|
1289
1436
|
import { FormattedMessage as FormattedMessage2, useIntl as useIntl2 } from "react-intl";
|
|
1290
1437
|
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1291
1438
|
function CEXBindModal({
|
|
@@ -1296,16 +1443,16 @@ function CEXBindModal({
|
|
|
1296
1443
|
}) {
|
|
1297
1444
|
const intl = useIntl2();
|
|
1298
1445
|
const { events } = useMatch();
|
|
1299
|
-
const [APIPassphrase, setAPIPassphrase] =
|
|
1446
|
+
const [APIPassphrase, setAPIPassphrase] = useState9("");
|
|
1300
1447
|
const { refreshOverview } = useUserInfo();
|
|
1301
|
-
const [loading, setLoading] =
|
|
1302
|
-
const [key, setKey] =
|
|
1303
|
-
const [secret, setSecret] =
|
|
1304
|
-
const [error, setError] =
|
|
1305
|
-
const needPassphrase =
|
|
1448
|
+
const [loading, setLoading] = useState9(false);
|
|
1449
|
+
const [key, setKey] = useState9("");
|
|
1450
|
+
const [secret, setSecret] = useState9("");
|
|
1451
|
+
const [error, setError] = useState9("");
|
|
1452
|
+
const needPassphrase = useMemo5(() => {
|
|
1306
1453
|
return ["bitget", "okx"].includes(type.toLowerCase());
|
|
1307
1454
|
}, [type]);
|
|
1308
|
-
|
|
1455
|
+
useEffect8(() => {
|
|
1309
1456
|
if (isOpen) {
|
|
1310
1457
|
setSecret("");
|
|
1311
1458
|
setKey("");
|
|
@@ -1485,7 +1632,7 @@ var Providers = ({ children }) => {
|
|
|
1485
1632
|
var context_default = Providers;
|
|
1486
1633
|
|
|
1487
1634
|
// src/hooks/useWalletInit.ts
|
|
1488
|
-
import { useEffect as
|
|
1635
|
+
import { useEffect as useEffect9, useRef } from "react";
|
|
1489
1636
|
|
|
1490
1637
|
// src/utils/wallet.ts
|
|
1491
1638
|
var sendMessage = ({ method, data, resolve, reject, timeout }) => {
|
|
@@ -1519,10 +1666,10 @@ function useWalletInit({
|
|
|
1519
1666
|
const { endpoints, token, overview, setWallet, wallet, appid, locale, refreshOverview } = useLocalStore_default();
|
|
1520
1667
|
const { setWalletReady, walletReady } = useStore_default();
|
|
1521
1668
|
const iframeReadyRef = useRef(walletReady);
|
|
1522
|
-
|
|
1669
|
+
useEffect9(() => {
|
|
1523
1670
|
setWallet(config);
|
|
1524
1671
|
}, [config]);
|
|
1525
|
-
|
|
1672
|
+
useEffect9(() => {
|
|
1526
1673
|
matchlog_default.log("sdk.mpc.status", walletReady, iframeReadyRef.current);
|
|
1527
1674
|
iframeReadyRef.current = walletReady;
|
|
1528
1675
|
if (iframeReadyRef.current) {
|
|
@@ -1539,7 +1686,7 @@ function useWalletInit({
|
|
|
1539
1686
|
onReady();
|
|
1540
1687
|
}
|
|
1541
1688
|
}, [walletReady]);
|
|
1542
|
-
|
|
1689
|
+
useEffect9(() => {
|
|
1543
1690
|
if (!endpoints.auth || !appid || !token || !config) {
|
|
1544
1691
|
const existingIframe = getWalletIframe();
|
|
1545
1692
|
if (existingIframe) {
|
|
@@ -1639,7 +1786,7 @@ function useWalletInit({
|
|
|
1639
1786
|
}
|
|
1640
1787
|
}
|
|
1641
1788
|
}, [endpoints.auth, appid, token, config]);
|
|
1642
|
-
|
|
1789
|
+
useEffect9(() => {
|
|
1643
1790
|
const messageHandle = async (e) => {
|
|
1644
1791
|
if (e.origin !== endpoints.auth.substring(0, endpoints.auth.length - 1)) {
|
|
1645
1792
|
return;
|
|
@@ -1720,7 +1867,7 @@ function useWalletInit({
|
|
|
1720
1867
|
}
|
|
1721
1868
|
|
|
1722
1869
|
// src/hooks/useInit.tsx
|
|
1723
|
-
import { useEffect as
|
|
1870
|
+
import { useEffect as useEffect10, useRef as useRef2 } from "react";
|
|
1724
1871
|
function useInit({
|
|
1725
1872
|
theme,
|
|
1726
1873
|
appid,
|
|
@@ -1744,19 +1891,19 @@ function useInit({
|
|
|
1744
1891
|
const searchParams = new URLSearchParams(window.location.search);
|
|
1745
1892
|
const matchToken = searchParams.get("matchToken");
|
|
1746
1893
|
const realEndpoints = endpoints || env_default.endpoints;
|
|
1747
|
-
|
|
1894
|
+
useEffect10(() => {
|
|
1748
1895
|
setTheme(theme);
|
|
1749
1896
|
}, [theme]);
|
|
1750
|
-
|
|
1897
|
+
useEffect10(() => {
|
|
1751
1898
|
setAppid(appid);
|
|
1752
1899
|
}, [appid]);
|
|
1753
|
-
|
|
1900
|
+
useEffect10(() => {
|
|
1754
1901
|
setEndpoints(realEndpoints);
|
|
1755
1902
|
}, [realEndpoints]);
|
|
1756
|
-
|
|
1903
|
+
useEffect10(() => {
|
|
1757
1904
|
setLocale(locale || "en");
|
|
1758
1905
|
}, [locale]);
|
|
1759
|
-
|
|
1906
|
+
useEffect10(() => {
|
|
1760
1907
|
if (matchToken) {
|
|
1761
1908
|
const tokenData = JSON.parse(atob(matchToken));
|
|
1762
1909
|
if (tokenData && tokenData.mid && tokenData.token) {
|
|
@@ -1767,7 +1914,7 @@ function useInit({
|
|
|
1767
1914
|
}
|
|
1768
1915
|
}
|
|
1769
1916
|
}, [matchToken]);
|
|
1770
|
-
|
|
1917
|
+
useEffect10(() => {
|
|
1771
1918
|
const onLoginMessage = (event) => {
|
|
1772
1919
|
const res = event.data;
|
|
1773
1920
|
if (res.event === "login" && res.data && (res.data.token || res.data.token_type && res.data.access_token)) {
|
|
@@ -1804,7 +1951,7 @@ function useInit({
|
|
|
1804
1951
|
overviewLoadingRef.current = false;
|
|
1805
1952
|
}
|
|
1806
1953
|
};
|
|
1807
|
-
|
|
1954
|
+
useEffect10(() => {
|
|
1808
1955
|
if (token) {
|
|
1809
1956
|
loadOverview();
|
|
1810
1957
|
}
|
|
@@ -2375,7 +2522,7 @@ function useUserInfo() {
|
|
|
2375
2522
|
logout: logoutStore,
|
|
2376
2523
|
setOverview,
|
|
2377
2524
|
overview,
|
|
2378
|
-
address,
|
|
2525
|
+
address: address2,
|
|
2379
2526
|
endpoints,
|
|
2380
2527
|
locale,
|
|
2381
2528
|
refreshOverview
|
|
@@ -2387,7 +2534,7 @@ function useUserInfo() {
|
|
|
2387
2534
|
const { open: BTCOpen } = useBTCModalStore();
|
|
2388
2535
|
const { open: CEXBindOpen } = useCEXBindModalStore();
|
|
2389
2536
|
const walletModalStore = useWalletModalStore();
|
|
2390
|
-
const isLogin =
|
|
2537
|
+
const isLogin = useMemo6(() => !!token && !!overview, [token, overview]);
|
|
2391
2538
|
const logout = async () => {
|
|
2392
2539
|
try {
|
|
2393
2540
|
await toLogoutApi();
|
|
@@ -2603,7 +2750,7 @@ function useUserInfo() {
|
|
|
2603
2750
|
token,
|
|
2604
2751
|
mid,
|
|
2605
2752
|
did,
|
|
2606
|
-
address,
|
|
2753
|
+
address: address2,
|
|
2607
2754
|
isLogin,
|
|
2608
2755
|
logout,
|
|
2609
2756
|
getLoginEmailCode,
|
|
@@ -2619,7 +2766,7 @@ function useUserInfo() {
|
|
|
2619
2766
|
}
|
|
2620
2767
|
|
|
2621
2768
|
// src/components/EmailModal/StepVerify.tsx
|
|
2622
|
-
import { useEffect as
|
|
2769
|
+
import { useEffect as useEffect12, useMemo as useMemo7, useRef as useRef3, useState as useState11 } from "react";
|
|
2623
2770
|
|
|
2624
2771
|
// src/config/index.tsx
|
|
2625
2772
|
var EMAIL_INTERVAL = 60;
|
|
@@ -2631,12 +2778,12 @@ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
|
2631
2778
|
function StepVerify(props) {
|
|
2632
2779
|
const intl = useIntl3();
|
|
2633
2780
|
const { getLoginEmailCode, loginByEmail } = useUserInfo();
|
|
2634
|
-
const [error, setError] =
|
|
2635
|
-
const [code, setCode] =
|
|
2636
|
-
const [sending, setSending] =
|
|
2637
|
-
const [submitting, setSubmitting] =
|
|
2781
|
+
const [error, setError] = useState11("");
|
|
2782
|
+
const [code, setCode] = useState11("");
|
|
2783
|
+
const [sending, setSending] = useState11(false);
|
|
2784
|
+
const [submitting, setSubmitting] = useState11(false);
|
|
2638
2785
|
const sendTimeRef = useRef3(0);
|
|
2639
|
-
const [sendBtnText, setSendBtnText] =
|
|
2786
|
+
const [sendBtnText, setSendBtnText] = useState11(intl.formatMessage({
|
|
2640
2787
|
id: "send"
|
|
2641
2788
|
}));
|
|
2642
2789
|
const intervalTime = EMAIL_INTERVAL;
|
|
@@ -2672,7 +2819,7 @@ function StepVerify(props) {
|
|
|
2672
2819
|
setSending(false);
|
|
2673
2820
|
}
|
|
2674
2821
|
};
|
|
2675
|
-
|
|
2822
|
+
useEffect12(() => {
|
|
2676
2823
|
onSend();
|
|
2677
2824
|
return () => {
|
|
2678
2825
|
if (intervalRef.current) {
|
|
@@ -2680,7 +2827,7 @@ function StepVerify(props) {
|
|
|
2680
2827
|
}
|
|
2681
2828
|
};
|
|
2682
2829
|
}, []);
|
|
2683
|
-
const canContinue =
|
|
2830
|
+
const canContinue = useMemo7(() => {
|
|
2684
2831
|
return code.length === codeLength;
|
|
2685
2832
|
}, [code]);
|
|
2686
2833
|
const onContinue = async () => {
|
|
@@ -2757,10 +2904,10 @@ function EmailModal({
|
|
|
2757
2904
|
onBack,
|
|
2758
2905
|
onLogin
|
|
2759
2906
|
}) {
|
|
2760
|
-
const [step, setStep] =
|
|
2761
|
-
const [emailVal, setEmailVal] =
|
|
2907
|
+
const [step, setStep] = useState12("input");
|
|
2908
|
+
const [emailVal, setEmailVal] = useState12("");
|
|
2762
2909
|
const intl = useIntl4();
|
|
2763
|
-
|
|
2910
|
+
useEffect13(() => {
|
|
2764
2911
|
if (!isOpen) {
|
|
2765
2912
|
setStep("input");
|
|
2766
2913
|
setEmailVal("");
|
|
@@ -2785,13 +2932,13 @@ function EmailModal({
|
|
|
2785
2932
|
}
|
|
2786
2933
|
|
|
2787
2934
|
// src/components/LoginBox/index.tsx
|
|
2788
|
-
import { useMemo as
|
|
2935
|
+
import { useMemo as useMemo8, useState as useState13 } from "react";
|
|
2789
2936
|
import { FormattedMessage as FormattedMessage4, useIntl as useIntl5 } from "react-intl";
|
|
2790
2937
|
|
|
2791
2938
|
// src/hooks/useAppConfig.ts
|
|
2792
|
-
import { useQuery as
|
|
2939
|
+
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
2793
2940
|
function useAppConfig() {
|
|
2794
|
-
const query =
|
|
2941
|
+
const query = useQuery3({
|
|
2795
2942
|
queryKey: ["appConfig"],
|
|
2796
2943
|
queryFn: async () => {
|
|
2797
2944
|
const res = await getAppConfigApi();
|
|
@@ -2856,7 +3003,7 @@ function LoginBox({
|
|
|
2856
3003
|
inModal = false
|
|
2857
3004
|
}) {
|
|
2858
3005
|
const config = useAppConfig();
|
|
2859
|
-
const methodConfig =
|
|
3006
|
+
const methodConfig = useMemo8(() => {
|
|
2860
3007
|
if (recommendMethods || methods || walletMethods) {
|
|
2861
3008
|
return {
|
|
2862
3009
|
recommendMethods: recommendMethods ? recommendMethods : walletMethods ? ["wallet"] : [],
|
|
@@ -2898,9 +3045,9 @@ function LoginBox({
|
|
|
2898
3045
|
walletMethods: walletMethodList
|
|
2899
3046
|
};
|
|
2900
3047
|
}, [config.platform, recommendMethods, methods, walletMethods]);
|
|
2901
|
-
const [emailOpen, setEmailOpen] =
|
|
3048
|
+
const [emailOpen, setEmailOpen] = useState13(false);
|
|
2902
3049
|
const { login } = useUserInfo();
|
|
2903
|
-
const [showWallet, setShowWallet] =
|
|
3050
|
+
const [showWallet, setShowWallet] = useState13(false);
|
|
2904
3051
|
const intl = useIntl5();
|
|
2905
3052
|
const isDownMd = useDownMd();
|
|
2906
3053
|
const methodMap = {
|
|
@@ -3048,7 +3195,7 @@ function LoginBox({
|
|
|
3048
3195
|
}
|
|
3049
3196
|
|
|
3050
3197
|
// src/components/LoginButton/index.tsx
|
|
3051
|
-
import { useState as
|
|
3198
|
+
import { useState as useState15 } from "react";
|
|
3052
3199
|
|
|
3053
3200
|
// src/components/LoginPanel/index.tsx
|
|
3054
3201
|
import { FormattedMessage as FormattedMessage5 } from "react-intl";
|
|
@@ -3091,7 +3238,7 @@ function LoginModal({
|
|
|
3091
3238
|
}
|
|
3092
3239
|
|
|
3093
3240
|
// src/components/UserPopover/index.tsx
|
|
3094
|
-
import { useState as
|
|
3241
|
+
import { useState as useState14 } from "react";
|
|
3095
3242
|
|
|
3096
3243
|
// src/assets/icon/ProfileIcon.tsx
|
|
3097
3244
|
import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
@@ -3122,8 +3269,8 @@ function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
|
3122
3269
|
import { FormattedMessage as FormattedMessage6, useIntl as useIntl6 } from "react-intl";
|
|
3123
3270
|
import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3124
3271
|
function UserContent() {
|
|
3125
|
-
const { logout, address, username } = useUserInfo();
|
|
3126
|
-
const [logouting, setLogouting] =
|
|
3272
|
+
const { logout, address: address2, username } = useUserInfo();
|
|
3273
|
+
const [logouting, setLogouting] = useState14(false);
|
|
3127
3274
|
const onLogout = async () => {
|
|
3128
3275
|
if (logouting) return;
|
|
3129
3276
|
try {
|
|
@@ -3152,14 +3299,14 @@ function UserContent() {
|
|
|
3152
3299
|
const UserDivider = () => {
|
|
3153
3300
|
return /* @__PURE__ */ jsx17("div", { className: `matchid-user-popover-divider` });
|
|
3154
3301
|
};
|
|
3155
|
-
const [usernameOpen, setUsernameOpen] =
|
|
3302
|
+
const [usernameOpen, setUsernameOpen] = useState14(false);
|
|
3156
3303
|
const [copied, setCopied] = useCopyClipboard();
|
|
3157
3304
|
const intl = useIntl6();
|
|
3158
3305
|
return /* @__PURE__ */ jsxs12("div", { className: "matchid-user-popover-content", children: [
|
|
3159
3306
|
/* @__PURE__ */ jsxs12("div", { className: "matchid-user-popover-list", children: [
|
|
3160
3307
|
/* @__PURE__ */ jsx17(UserItem, { onClick: () => {
|
|
3161
|
-
setCopied(
|
|
3162
|
-
}, icon: copied ? /* @__PURE__ */ jsx17(CheckIcon, { size: 20, color: "#0ecb81" }) : /* @__PURE__ */ jsx17(CopyIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ jsx17(CheckIcon, { size: 20, color: "var(--icon-color)" }), children: truncateAddress(
|
|
3308
|
+
setCopied(address2);
|
|
3309
|
+
}, icon: copied ? /* @__PURE__ */ jsx17(CheckIcon, { size: 20, color: "#0ecb81" }) : /* @__PURE__ */ jsx17(CopyIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ jsx17(CheckIcon, { size: 20, color: "var(--icon-color)" }), children: truncateAddress(address2) }),
|
|
3163
3310
|
/* @__PURE__ */ jsx17(UserDivider, {}),
|
|
3164
3311
|
/* @__PURE__ */ jsx17(UserItem, { onClick: () => {
|
|
3165
3312
|
setUsernameOpen(true);
|
|
@@ -3198,7 +3345,7 @@ function LoginButton({
|
|
|
3198
3345
|
}) {
|
|
3199
3346
|
const intl = useIntl7();
|
|
3200
3347
|
const { isLogin, username } = useUserInfo();
|
|
3201
|
-
const [loginOpen, setLoginOpen] =
|
|
3348
|
+
const [loginOpen, setLoginOpen] = useState15(false);
|
|
3202
3349
|
if (!isLogin) {
|
|
3203
3350
|
return /* @__PURE__ */ jsxs13(Fragment3, { children: [
|
|
3204
3351
|
/* @__PURE__ */ jsx18(
|
|
@@ -3226,7 +3373,7 @@ function LoginButton({
|
|
|
3226
3373
|
}
|
|
3227
3374
|
|
|
3228
3375
|
// src/components/UsernameModal/index.tsx
|
|
3229
|
-
import { useEffect as
|
|
3376
|
+
import { useEffect as useEffect14, useMemo as useMemo9, useState as useState16 } from "react";
|
|
3230
3377
|
|
|
3231
3378
|
// src/assets/icon/InfoRoundIcon.tsx
|
|
3232
3379
|
import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
@@ -3270,23 +3417,23 @@ function UsernameModal({
|
|
|
3270
3417
|
}) {
|
|
3271
3418
|
const { username, refreshOverview } = useUserInfo();
|
|
3272
3419
|
const { isLogin } = useUserInfo();
|
|
3273
|
-
const [val, setVal] =
|
|
3274
|
-
const [error, setError] =
|
|
3420
|
+
const [val, setVal] = useState16(username);
|
|
3421
|
+
const [error, setError] = useState16("");
|
|
3275
3422
|
const isDownMd = useDownMd();
|
|
3276
|
-
|
|
3423
|
+
useEffect14(() => {
|
|
3277
3424
|
if (isOpen) {
|
|
3278
3425
|
setVal(username);
|
|
3279
3426
|
setError("");
|
|
3280
3427
|
}
|
|
3281
3428
|
}, [isOpen]);
|
|
3282
|
-
const isValid =
|
|
3429
|
+
const isValid = useMemo9(() => {
|
|
3283
3430
|
return isValidUsername(val);
|
|
3284
3431
|
}, [val]);
|
|
3285
|
-
const isLength =
|
|
3432
|
+
const isLength = useMemo9(() => {
|
|
3286
3433
|
return val.length >= 2 && val.length <= 32;
|
|
3287
3434
|
}, [val]);
|
|
3288
3435
|
const isSafe = isValid && isLength;
|
|
3289
|
-
const [isSubmitting, setIsSubmitting] =
|
|
3436
|
+
const [isSubmitting, setIsSubmitting] = useState16(false);
|
|
3290
3437
|
const onSubmit = async () => {
|
|
3291
3438
|
if (isSubmitting) return;
|
|
3292
3439
|
try {
|
|
@@ -3349,7 +3496,7 @@ function UsernameModal({
|
|
|
3349
3496
|
}
|
|
3350
3497
|
|
|
3351
3498
|
// src/components/SOLModal/index.tsx
|
|
3352
|
-
import React7, { useEffect as
|
|
3499
|
+
import React7, { useEffect as useEffect15, useState as useState17 } from "react";
|
|
3353
3500
|
import { clusterApiUrl } from "@solana/web3.js";
|
|
3354
3501
|
import { useWallet as useWallet2, WalletProvider, ConnectionProvider } from "@solana/wallet-adapter-react";
|
|
3355
3502
|
import { WalletModalProvider, useWalletModal } from "@solana/wallet-adapter-react-ui";
|
|
@@ -3403,7 +3550,7 @@ import "@solana/wallet-adapter-react-ui/styles.css";
|
|
|
3403
3550
|
import { useIntl as useIntl9 } from "react-intl";
|
|
3404
3551
|
|
|
3405
3552
|
// src/components/WalletModalContent/index.tsx
|
|
3406
|
-
import { useMemo as
|
|
3553
|
+
import { useMemo as useMemo10 } from "react";
|
|
3407
3554
|
|
|
3408
3555
|
// src/assets/wallet.ts
|
|
3409
3556
|
var walletErrorImage = "data:image/png;base64,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";
|
|
@@ -3421,10 +3568,10 @@ function WalletModalContent({
|
|
|
3421
3568
|
setError,
|
|
3422
3569
|
setVisible,
|
|
3423
3570
|
visible,
|
|
3424
|
-
address,
|
|
3571
|
+
address: address2,
|
|
3425
3572
|
connected
|
|
3426
3573
|
}) {
|
|
3427
|
-
const pageData =
|
|
3574
|
+
const pageData = useMemo10(() => {
|
|
3428
3575
|
if (status == "success") {
|
|
3429
3576
|
return {
|
|
3430
3577
|
btnText: "Disconnect Wallet",
|
|
@@ -3482,7 +3629,7 @@ function WalletModalContent({
|
|
|
3482
3629
|
text: "Please Connect your wallet",
|
|
3483
3630
|
statusImage: walletConnectImage
|
|
3484
3631
|
};
|
|
3485
|
-
}, [visible, connected, status, error,
|
|
3632
|
+
}, [visible, connected, status, error, address2]);
|
|
3486
3633
|
return /* @__PURE__ */ jsx21("div", { className: "matchid-wallet-container", children: /* @__PURE__ */ jsxs16("div", { className: `matchid-wallet-box`, children: [
|
|
3487
3634
|
/* @__PURE__ */ jsxs16("div", { className: `matchid-wallet-content`, children: [
|
|
3488
3635
|
/* @__PURE__ */ jsx21("img", { src: pageData.statusImage }),
|
|
@@ -3511,17 +3658,17 @@ function WalletContent({
|
|
|
3511
3658
|
const { setVisible, visible } = useWalletModal();
|
|
3512
3659
|
const wallet = useWallet2();
|
|
3513
3660
|
const { events, login } = useMatch();
|
|
3514
|
-
const [status, setStatus] =
|
|
3661
|
+
const [status, setStatus] = useState17("");
|
|
3515
3662
|
const statusRef = React7.useRef(status);
|
|
3516
|
-
const [error, setError] =
|
|
3517
|
-
|
|
3663
|
+
const [error, setError] = useState17("");
|
|
3664
|
+
useEffect15(() => {
|
|
3518
3665
|
const init = async () => {
|
|
3519
3666
|
await wallet.disconnect();
|
|
3520
3667
|
setVisible(true);
|
|
3521
3668
|
};
|
|
3522
3669
|
init();
|
|
3523
3670
|
}, []);
|
|
3524
|
-
|
|
3671
|
+
useEffect15(() => {
|
|
3525
3672
|
if (wallet.connected) {
|
|
3526
3673
|
console.log("wallet.connected", wallet.connected);
|
|
3527
3674
|
toLoginInWallet();
|
|
@@ -3529,14 +3676,14 @@ function WalletContent({
|
|
|
3529
3676
|
}, [wallet.connected]);
|
|
3530
3677
|
const toLoginInWallet = async () => {
|
|
3531
3678
|
if (statusRef.current) return;
|
|
3532
|
-
const
|
|
3679
|
+
const address2 = wallet.publicKey?.toBase58() || "";
|
|
3533
3680
|
try {
|
|
3534
3681
|
setStatus("nonce");
|
|
3535
3682
|
statusRef.current = "nonce";
|
|
3536
3683
|
const res = type == "bind" ? await getWalletInitApi({
|
|
3537
|
-
address,
|
|
3684
|
+
address: address2,
|
|
3538
3685
|
type: "SOL"
|
|
3539
|
-
}) : await getWalletNonceApi({ address, type: "SOL" });
|
|
3686
|
+
}) : await getWalletNonceApi({ address: address2, type: "SOL" });
|
|
3540
3687
|
if (!isSuccess(res)) {
|
|
3541
3688
|
throw new Error(res.message);
|
|
3542
3689
|
}
|
|
@@ -3549,7 +3696,7 @@ function WalletContent({
|
|
|
3549
3696
|
const signedMessage = await wallet.signMessage(encodedMessage);
|
|
3550
3697
|
let obj = {
|
|
3551
3698
|
type: "SOL",
|
|
3552
|
-
address,
|
|
3699
|
+
address: address2,
|
|
3553
3700
|
signature: Buffer.from(signedMessage).toString("base64"),
|
|
3554
3701
|
message,
|
|
3555
3702
|
connector_type: "SOL",
|
|
@@ -3657,7 +3804,7 @@ function SOLModal(props) {
|
|
|
3657
3804
|
}
|
|
3658
3805
|
|
|
3659
3806
|
// src/components/TRONModal/index.tsx
|
|
3660
|
-
import React8, { useEffect as
|
|
3807
|
+
import React8, { useEffect as useEffect17, useMemo as useMemo11, useState as useState19 } from "react";
|
|
3661
3808
|
import { useIntl as useIntl10 } from "react-intl";
|
|
3662
3809
|
|
|
3663
3810
|
// src/lib/tron/TronLinkAdapter.ts
|
|
@@ -3691,7 +3838,7 @@ var TronLinkAdapter = class {
|
|
|
3691
3838
|
};
|
|
3692
3839
|
|
|
3693
3840
|
// src/hooks/useTRONWallet.ts
|
|
3694
|
-
import { useEffect as
|
|
3841
|
+
import { useEffect as useEffect16, useState as useState18 } from "react";
|
|
3695
3842
|
|
|
3696
3843
|
// src/lib/tron/BitgetAdapter.ts
|
|
3697
3844
|
var BitgetAdapter = class {
|
|
@@ -3736,9 +3883,9 @@ var OKXAdapter = class {
|
|
|
3736
3883
|
// src/hooks/useTRONWallet.ts
|
|
3737
3884
|
var useTRONWallet = () => {
|
|
3738
3885
|
const wallets2 = [new TronLinkAdapter(), new BitgetAdapter(), new OKXAdapter()];
|
|
3739
|
-
const [installedWallets, setInstalledWallets] =
|
|
3740
|
-
const [
|
|
3741
|
-
|
|
3886
|
+
const [installedWallets, setInstalledWallets] = useState18([]);
|
|
3887
|
+
const [address2, setAddress] = useState18(null);
|
|
3888
|
+
useEffect16(() => {
|
|
3742
3889
|
const getInstalled = async () => {
|
|
3743
3890
|
const installed = await Promise.all(wallets2.map((wallet2) => wallet2.isInstalled().then((isInstalled) => ({
|
|
3744
3891
|
wallet: wallet2,
|
|
@@ -3748,11 +3895,11 @@ var useTRONWallet = () => {
|
|
|
3748
3895
|
};
|
|
3749
3896
|
getInstalled();
|
|
3750
3897
|
}, []);
|
|
3751
|
-
const [wallet, chooseWallet] =
|
|
3898
|
+
const [wallet, chooseWallet] = useState18(null);
|
|
3752
3899
|
const onConnect = async () => {
|
|
3753
3900
|
setAddress(await wallet.connect());
|
|
3754
3901
|
};
|
|
3755
|
-
|
|
3902
|
+
useEffect16(() => {
|
|
3756
3903
|
if (!wallet) {
|
|
3757
3904
|
setAddress(null);
|
|
3758
3905
|
}
|
|
@@ -3762,7 +3909,7 @@ var useTRONWallet = () => {
|
|
|
3762
3909
|
wallets: wallets2,
|
|
3763
3910
|
chooseWallet,
|
|
3764
3911
|
wallet,
|
|
3765
|
-
address,
|
|
3912
|
+
address: address2,
|
|
3766
3913
|
onConnect
|
|
3767
3914
|
};
|
|
3768
3915
|
};
|
|
@@ -3776,19 +3923,19 @@ function TRONConnectModal({
|
|
|
3776
3923
|
}) {
|
|
3777
3924
|
const isDownMd = useDownMd();
|
|
3778
3925
|
const intl = useIntl10();
|
|
3779
|
-
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address, onConnect } = useTRONWallet();
|
|
3926
|
+
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address: address2, onConnect } = useTRONWallet();
|
|
3780
3927
|
const iconMaps = {
|
|
3781
3928
|
tronlink: /* @__PURE__ */ jsx23(TronLinkIcon, { size: isDownMd ? 36 : 40 }),
|
|
3782
3929
|
bitget: /* @__PURE__ */ jsx23(BitgetIcon, { size: isDownMd ? 36 : 40 }),
|
|
3783
3930
|
okx: /* @__PURE__ */ jsx23(OKXIcon, { size: isDownMd ? 36 : 40 })
|
|
3784
3931
|
};
|
|
3785
3932
|
const { events, login } = useMatch();
|
|
3786
|
-
const [status, setStatus] =
|
|
3933
|
+
const [status, setStatus] = useState19("");
|
|
3787
3934
|
const statusRef = React8.useRef(status);
|
|
3788
|
-
const [error, setError] =
|
|
3789
|
-
const connected =
|
|
3790
|
-
return !!
|
|
3791
|
-
}, [
|
|
3935
|
+
const [error, setError] = useState19("");
|
|
3936
|
+
const connected = useMemo11(() => {
|
|
3937
|
+
return !!address2;
|
|
3938
|
+
}, [address2]);
|
|
3792
3939
|
const disconnect = async () => {
|
|
3793
3940
|
setStatus("");
|
|
3794
3941
|
chooseWallet(null);
|
|
@@ -3802,11 +3949,11 @@ function TRONConnectModal({
|
|
|
3802
3949
|
setError("");
|
|
3803
3950
|
};
|
|
3804
3951
|
const toLoginInWallet = async () => {
|
|
3805
|
-
if (statusRef.current || !
|
|
3952
|
+
if (statusRef.current || !address2 || !wallet) return;
|
|
3806
3953
|
try {
|
|
3807
3954
|
setStatus("nonce");
|
|
3808
3955
|
statusRef.current = "nonce";
|
|
3809
|
-
const res = type == "bind" ? await getWalletInitApi({ address, type: "TRON" }) : await getWalletNonceApi({ address, type: "TRON" });
|
|
3956
|
+
const res = type == "bind" ? await getWalletInitApi({ address: address2, type: "TRON" }) : await getWalletNonceApi({ address: address2, type: "TRON" });
|
|
3810
3957
|
if (!isSuccess(res)) {
|
|
3811
3958
|
throw new Error(res.message);
|
|
3812
3959
|
}
|
|
@@ -3818,7 +3965,7 @@ function TRONConnectModal({
|
|
|
3818
3965
|
const signedMessage = await wallet.signMessage(message);
|
|
3819
3966
|
let obj = {
|
|
3820
3967
|
type: "TRON",
|
|
3821
|
-
address,
|
|
3968
|
+
address: address2,
|
|
3822
3969
|
signature: signedMessage,
|
|
3823
3970
|
message,
|
|
3824
3971
|
connector_type: "TRON",
|
|
@@ -3854,7 +4001,7 @@ function TRONConnectModal({
|
|
|
3854
4001
|
statusRef.current = "";
|
|
3855
4002
|
}
|
|
3856
4003
|
};
|
|
3857
|
-
|
|
4004
|
+
useEffect17(() => {
|
|
3858
4005
|
if (wallet) {
|
|
3859
4006
|
console.log("onConnect");
|
|
3860
4007
|
onConnect();
|
|
@@ -3862,12 +4009,12 @@ function TRONConnectModal({
|
|
|
3862
4009
|
setStatus("");
|
|
3863
4010
|
}
|
|
3864
4011
|
}, [wallet]);
|
|
3865
|
-
|
|
3866
|
-
if (
|
|
4012
|
+
useEffect17(() => {
|
|
4013
|
+
if (address2) {
|
|
3867
4014
|
toLoginInWallet();
|
|
3868
4015
|
}
|
|
3869
|
-
}, [
|
|
3870
|
-
|
|
4016
|
+
}, [address2]);
|
|
4017
|
+
useEffect17(() => {
|
|
3871
4018
|
if (!props.isOpen) {
|
|
3872
4019
|
disconnect();
|
|
3873
4020
|
}
|
|
@@ -3883,7 +4030,7 @@ function TRONConnectModal({
|
|
|
3883
4030
|
setError,
|
|
3884
4031
|
status,
|
|
3885
4032
|
disconnect,
|
|
3886
|
-
address:
|
|
4033
|
+
address: address2 || "",
|
|
3887
4034
|
connected,
|
|
3888
4035
|
visible: true,
|
|
3889
4036
|
setVisible: () => {
|
|
@@ -3925,7 +4072,7 @@ function TRONModal(props) {
|
|
|
3925
4072
|
}
|
|
3926
4073
|
|
|
3927
4074
|
// src/components/TONModal/index.tsx
|
|
3928
|
-
import React9, { useEffect as
|
|
4075
|
+
import React9, { useEffect as useEffect18, useState as useState20 } from "react";
|
|
3929
4076
|
import { useIntl as useIntl11 } from "react-intl";
|
|
3930
4077
|
import {
|
|
3931
4078
|
TonConnectUIProvider,
|
|
@@ -3940,15 +4087,15 @@ function WalletContent2({
|
|
|
3940
4087
|
type
|
|
3941
4088
|
}) {
|
|
3942
4089
|
const { events, login } = useMatch();
|
|
3943
|
-
const [connected, setConnected] =
|
|
4090
|
+
const [connected, setConnected] = useState20(false);
|
|
3944
4091
|
const wallet = useTonWallet();
|
|
3945
4092
|
const userFriendlyAddress = useTonAddress();
|
|
3946
4093
|
const [tonConnectUI] = useTonConnectUI();
|
|
3947
4094
|
const { state, open, close } = useTonConnectModal();
|
|
3948
|
-
const [status, setStatus] =
|
|
4095
|
+
const [status, setStatus] = useState20("");
|
|
3949
4096
|
const statusRef = React9.useRef(status);
|
|
3950
|
-
const [error, setError] =
|
|
3951
|
-
|
|
4097
|
+
const [error, setError] = useState20("");
|
|
4098
|
+
useEffect18(() => {
|
|
3952
4099
|
const init = async () => {
|
|
3953
4100
|
if (wallet) {
|
|
3954
4101
|
await tonConnectUI.disconnect();
|
|
@@ -4021,7 +4168,7 @@ function WalletContent2({
|
|
|
4021
4168
|
}
|
|
4022
4169
|
});
|
|
4023
4170
|
}, []);
|
|
4024
|
-
|
|
4171
|
+
useEffect18(() => {
|
|
4025
4172
|
if (wallet) {
|
|
4026
4173
|
setConnected(true);
|
|
4027
4174
|
console.log("Wallet connected:", wallet);
|
|
@@ -4032,7 +4179,7 @@ function WalletContent2({
|
|
|
4032
4179
|
setStatus("");
|
|
4033
4180
|
}
|
|
4034
4181
|
}, [wallet]);
|
|
4035
|
-
|
|
4182
|
+
useEffect18(() => {
|
|
4036
4183
|
console.log({
|
|
4037
4184
|
state,
|
|
4038
4185
|
wallet
|
|
@@ -4112,7 +4259,7 @@ function TONModal(props) {
|
|
|
4112
4259
|
}
|
|
4113
4260
|
|
|
4114
4261
|
// src/components/BTCModal/index.tsx
|
|
4115
|
-
import React10, { useEffect as
|
|
4262
|
+
import React10, { useEffect as useEffect20, useMemo as useMemo12, useState as useState22 } from "react";
|
|
4116
4263
|
import { useIntl as useIntl12 } from "react-intl";
|
|
4117
4264
|
|
|
4118
4265
|
// src/lib/btc/UnisatAdapter.ts
|
|
@@ -4204,7 +4351,7 @@ var XverseAdapter = class {
|
|
|
4204
4351
|
matchlog_default.log("getAccounts ~ response:", response);
|
|
4205
4352
|
if (response.status === "success") {
|
|
4206
4353
|
const ordinalsAddressItem = response.result.find(
|
|
4207
|
-
(
|
|
4354
|
+
(address2) => address2.purpose === AddressPurpose.Ordinals
|
|
4208
4355
|
);
|
|
4209
4356
|
this.address = ordinalsAddressItem?.address || "";
|
|
4210
4357
|
return ordinalsAddressItem?.address || "";
|
|
@@ -4267,12 +4414,12 @@ var LeatherAdapter = class {
|
|
|
4267
4414
|
};
|
|
4268
4415
|
|
|
4269
4416
|
// src/hooks/useBTCWallet.ts
|
|
4270
|
-
import { useEffect as
|
|
4417
|
+
import { useEffect as useEffect19, useState as useState21 } from "react";
|
|
4271
4418
|
var useBTCWallet = () => {
|
|
4272
4419
|
const wallets2 = [new UnisatAdapter(), new XverseAdapter(), new LeatherAdapter()];
|
|
4273
|
-
const [installedWallets, setInstalledWallets] =
|
|
4274
|
-
const [
|
|
4275
|
-
|
|
4420
|
+
const [installedWallets, setInstalledWallets] = useState21([]);
|
|
4421
|
+
const [address2, setAddress] = useState21(null);
|
|
4422
|
+
useEffect19(() => {
|
|
4276
4423
|
const getInstalled = async () => {
|
|
4277
4424
|
const installed = await Promise.all(wallets2.map((wallet2) => wallet2.isInstalled().then((isInstalled) => ({
|
|
4278
4425
|
wallet: wallet2,
|
|
@@ -4282,11 +4429,11 @@ var useBTCWallet = () => {
|
|
|
4282
4429
|
};
|
|
4283
4430
|
getInstalled();
|
|
4284
4431
|
}, []);
|
|
4285
|
-
const [wallet, chooseWallet] =
|
|
4432
|
+
const [wallet, chooseWallet] = useState21(null);
|
|
4286
4433
|
const onConnect = async () => {
|
|
4287
4434
|
setAddress(await wallet.connect());
|
|
4288
4435
|
};
|
|
4289
|
-
|
|
4436
|
+
useEffect19(() => {
|
|
4290
4437
|
if (!wallet) {
|
|
4291
4438
|
setAddress(null);
|
|
4292
4439
|
}
|
|
@@ -4296,7 +4443,7 @@ var useBTCWallet = () => {
|
|
|
4296
4443
|
wallets: wallets2,
|
|
4297
4444
|
chooseWallet,
|
|
4298
4445
|
wallet,
|
|
4299
|
-
address,
|
|
4446
|
+
address: address2,
|
|
4300
4447
|
onConnect
|
|
4301
4448
|
};
|
|
4302
4449
|
};
|
|
@@ -4310,19 +4457,19 @@ function BTCConnectModal({
|
|
|
4310
4457
|
}) {
|
|
4311
4458
|
const isDownMd = useDownMd();
|
|
4312
4459
|
const intl = useIntl12();
|
|
4313
|
-
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address, onConnect } = useBTCWallet();
|
|
4460
|
+
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address: address2, onConnect } = useBTCWallet();
|
|
4314
4461
|
const iconMaps = {
|
|
4315
4462
|
leather: /* @__PURE__ */ jsx25(LeatherIcon, { size: isDownMd ? 36 : 40 }),
|
|
4316
4463
|
unisat: /* @__PURE__ */ jsx25(UnisatIcon, { size: isDownMd ? 36 : 40 }),
|
|
4317
4464
|
xverse: /* @__PURE__ */ jsx25(XverseIcon, { size: isDownMd ? 36 : 40 })
|
|
4318
4465
|
};
|
|
4319
4466
|
const { events, login } = useMatch();
|
|
4320
|
-
const [status, setStatus] =
|
|
4467
|
+
const [status, setStatus] = useState22("");
|
|
4321
4468
|
const statusRef = React10.useRef(status);
|
|
4322
|
-
const [error, setError] =
|
|
4323
|
-
const connected =
|
|
4324
|
-
return !!
|
|
4325
|
-
}, [
|
|
4469
|
+
const [error, setError] = useState22("");
|
|
4470
|
+
const connected = useMemo12(() => {
|
|
4471
|
+
return !!address2;
|
|
4472
|
+
}, [address2]);
|
|
4326
4473
|
const disconnect = async () => {
|
|
4327
4474
|
wallet && wallet.disconnet && wallet.disconnet();
|
|
4328
4475
|
setStatus("");
|
|
@@ -4331,11 +4478,11 @@ function BTCConnectModal({
|
|
|
4331
4478
|
setError("");
|
|
4332
4479
|
};
|
|
4333
4480
|
const toLoginInWallet = async () => {
|
|
4334
|
-
if (statusRef.current || !
|
|
4481
|
+
if (statusRef.current || !address2 || !wallet) return;
|
|
4335
4482
|
try {
|
|
4336
4483
|
setStatus("nonce");
|
|
4337
4484
|
statusRef.current = "nonce";
|
|
4338
|
-
const res = type == "bind" ? await getWalletInitApi({ address, type: "BTC" }) : await getWalletNonceApi({ address, type: "BTC" });
|
|
4485
|
+
const res = type == "bind" ? await getWalletInitApi({ address: address2, type: "BTC" }) : await getWalletNonceApi({ address: address2, type: "BTC" });
|
|
4339
4486
|
if (!isSuccess(res)) {
|
|
4340
4487
|
throw new Error(res.message);
|
|
4341
4488
|
}
|
|
@@ -4347,7 +4494,7 @@ function BTCConnectModal({
|
|
|
4347
4494
|
const signedMessage = await wallet.signMessage(message);
|
|
4348
4495
|
let obj = {
|
|
4349
4496
|
type: "BTC",
|
|
4350
|
-
address,
|
|
4497
|
+
address: address2,
|
|
4351
4498
|
signature: signedMessage,
|
|
4352
4499
|
message,
|
|
4353
4500
|
connector_type: "BTC",
|
|
@@ -4384,7 +4531,7 @@ function BTCConnectModal({
|
|
|
4384
4531
|
statusRef.current = "";
|
|
4385
4532
|
}
|
|
4386
4533
|
};
|
|
4387
|
-
|
|
4534
|
+
useEffect20(() => {
|
|
4388
4535
|
if (wallet) {
|
|
4389
4536
|
console.log("onConnect");
|
|
4390
4537
|
try {
|
|
@@ -4397,12 +4544,12 @@ function BTCConnectModal({
|
|
|
4397
4544
|
setStatus("");
|
|
4398
4545
|
}
|
|
4399
4546
|
}, [wallet]);
|
|
4400
|
-
|
|
4401
|
-
if (
|
|
4547
|
+
useEffect20(() => {
|
|
4548
|
+
if (address2) {
|
|
4402
4549
|
toLoginInWallet();
|
|
4403
4550
|
}
|
|
4404
|
-
}, [
|
|
4405
|
-
|
|
4551
|
+
}, [address2]);
|
|
4552
|
+
useEffect20(() => {
|
|
4406
4553
|
if (!props.isOpen) {
|
|
4407
4554
|
disconnect();
|
|
4408
4555
|
}
|
|
@@ -4425,7 +4572,7 @@ function BTCConnectModal({
|
|
|
4425
4572
|
setError,
|
|
4426
4573
|
status,
|
|
4427
4574
|
disconnect,
|
|
4428
|
-
address:
|
|
4575
|
+
address: address2 || "",
|
|
4429
4576
|
connected,
|
|
4430
4577
|
visible: true,
|
|
4431
4578
|
setVisible: () => {
|
|
@@ -4467,7 +4614,7 @@ function BTCModal(props) {
|
|
|
4467
4614
|
}
|
|
4468
4615
|
|
|
4469
4616
|
// src/components/WalletModal/index.tsx
|
|
4470
|
-
import { useMemo as
|
|
4617
|
+
import { useMemo as useMemo13 } from "react";
|
|
4471
4618
|
import { useIntl as useIntl13 } from "react-intl";
|
|
4472
4619
|
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
4473
4620
|
function WalletConnectModal({
|
|
@@ -4479,7 +4626,7 @@ function WalletConnectModal({
|
|
|
4479
4626
|
const { walletMap } = useWalletConfig();
|
|
4480
4627
|
const { bind, login } = useUserInfo();
|
|
4481
4628
|
const config = useAppConfig();
|
|
4482
|
-
const methods =
|
|
4629
|
+
const methods = useMemo13(() => {
|
|
4483
4630
|
if (_methods) return _methods;
|
|
4484
4631
|
if (!config.platform) {
|
|
4485
4632
|
return [];
|
|
@@ -4542,8 +4689,9 @@ export {
|
|
|
4542
4689
|
WalletModal,
|
|
4543
4690
|
components_exports,
|
|
4544
4691
|
useMatchWallet,
|
|
4692
|
+
useReceipt,
|
|
4545
4693
|
hooks_exports,
|
|
4546
4694
|
MatchProvider,
|
|
4547
4695
|
useMatch
|
|
4548
4696
|
};
|
|
4549
|
-
//# sourceMappingURL=chunk-
|
|
4697
|
+
//# sourceMappingURL=chunk-D6IUBR7S.mjs.map
|