@matchain/matchid-sdk-react 0.1.18 → 0.1.20

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.js CHANGED
@@ -40,7 +40,7 @@ __export(src_exports, {
40
40
  module.exports = __toCommonJS(src_exports);
41
41
 
42
42
  // src/MatchContext.tsx
43
- var import_react9 = require("react");
43
+ var import_react19 = require("react");
44
44
 
45
45
  // src/assets/icon/ArrowLeftIcon.tsx
46
46
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -405,8 +405,8 @@ function GithubIcon({
405
405
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
406
406
  "path",
407
407
  {
408
- "fill-rule": "evenodd",
409
- "clip-rule": "evenodd",
408
+ fillRule: "evenodd",
409
+ clipRule: "evenodd",
410
410
  d: "M19.6836 7C16.434 7.00169 13.2909 8.15263 10.8165 10.247C8.34197 12.3414 6.69741 15.2427 6.17684 18.4321C5.65627 21.6215 6.29363 24.8911 7.97496 27.6561C9.6563 30.4211 12.272 32.5013 15.3542 33.5248C16.0343 33.651 16.2904 33.2295 16.2904 32.8712C16.2904 32.5128 16.2768 31.4738 16.2723 30.3379C12.4642 31.1606 11.6596 28.731 11.6596 28.731C11.0385 27.1533 10.1409 26.7386 10.1409 26.7386C8.89876 25.8957 10.2338 25.9115 10.2338 25.9115C11.6097 26.0084 12.3328 27.3156 12.3328 27.3156C13.5523 29.3958 15.5356 28.7941 16.3153 28.4425C16.4377 27.5613 16.7936 26.9618 17.1857 26.6214C14.1438 26.2789 10.9478 25.1114 10.9478 19.8961C10.929 18.5436 11.4338 17.2356 12.3577 16.2428C12.2172 15.9002 11.748 14.5164 12.4914 12.6367C12.4914 12.6367 13.6407 12.2716 16.2564 14.0318C18.5 13.4217 20.8672 13.4217 23.1108 14.0318C25.7243 12.2716 26.8712 12.6367 26.8712 12.6367C27.617 14.5119 27.1478 15.8957 27.0072 16.2428C27.9341 17.2358 28.4399 18.546 28.4194 19.9007C28.4194 25.1272 25.2166 26.2789 22.1701 26.6147C22.6597 27.0384 23.0972 27.8655 23.0972 29.1367C23.0972 30.9577 23.0814 32.4227 23.0814 32.8712C23.0814 33.234 23.3284 33.6577 24.022 33.5248C27.1047 32.5012 29.7206 30.4206 31.4019 27.6551C33.0832 24.8896 33.7202 21.6196 33.1991 18.4299C32.6779 15.2402 31.0325 12.3389 28.5572 10.2449C26.0819 8.15081 22.9381 7.00062 19.6881 7H19.6836Z",
411
411
  fill: "white"
412
412
  }
@@ -513,23 +513,45 @@ function CopyIcon({ size = 20, color = "black", ...props }) {
513
513
  ) });
514
514
  }
515
515
 
516
- // src/components/Modal/index.tsx
516
+ // src/assets/icon/LinkedinIcon.tsx
517
517
  var import_jsx_runtime25 = require("react/jsx-runtime");
518
+ function LinkedinIcon({
519
+ size = 40,
520
+ ...props
521
+ }) {
522
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("svg", { width: size, height: size, ...props, viewBox: "0 0 40 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
523
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("rect", { width: "40", height: "40", rx: "8", fill: "#0A66C2" }),
524
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
525
+ "path",
526
+ {
527
+ d: "M29.376 9H10.624C10.1933 9 9.78023 9.1711 9.47567 9.47567C9.1711 9.78023 9 10.1933 9 10.624V29.376C9 29.8067 9.1711 30.2198 9.47567 30.5243C9.78023 30.8289 10.1933 31 10.624 31H29.376C29.8067 31 30.2198 30.8289 30.5243 30.5243C30.8289 30.2198 31 29.8067 31 29.376V10.624C31 10.1933 30.8289 9.78023 30.5243 9.47567C30.2198 9.1711 29.8067 9 29.376 9ZM15.5572 27.7413H12.2496V17.2347H15.5572V27.7413ZM13.9011 15.7788C13.5259 15.7766 13.1598 15.6634 12.8488 15.4534C12.5379 15.2434 12.2962 14.946 12.1541 14.5987C12.0121 14.2514 11.9761 13.8699 12.0507 13.5022C12.1253 13.1345 12.3072 12.7971 12.5733 12.5326C12.8395 12.2682 13.178 12.0885 13.5462 12.0163C13.9144 11.944 14.2957 11.9825 14.642 12.1267C14.9884 12.271 15.2842 12.5147 15.4923 12.8269C15.7003 13.1392 15.8111 13.5061 15.8108 13.8813C15.8144 14.1324 15.7673 14.3818 15.6724 14.6144C15.5776 14.847 15.4368 15.0582 15.2586 15.2352C15.0804 15.4123 14.8684 15.5517 14.6351 15.6451C14.4019 15.7384 14.1523 15.7839 13.9011 15.7788ZM27.7489 27.7504H24.4428V22.0106C24.4428 20.3178 23.7232 19.7953 22.7943 19.7953C21.8135 19.7953 20.851 20.5347 20.851 22.0533V27.7504H17.5433V17.2424H20.7242V18.6983H20.7669C21.0863 18.0521 22.2046 16.9475 23.9111 16.9475C25.7567 16.9475 27.7504 18.0429 27.7504 21.2513L27.7489 27.7504Z",
528
+ fill: "white"
529
+ }
530
+ )
531
+ ] });
532
+ }
533
+
534
+ // src/components/Modal/index.tsx
535
+ var import_jsx_runtime26 = require("react/jsx-runtime");
518
536
  function Modal({
519
537
  children,
520
538
  isOpen,
521
539
  width = 480,
540
+ zIndex = 100,
522
541
  className = ""
523
542
  }) {
524
- return isOpen ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
543
+ return isOpen ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
525
544
  "div",
526
545
  {
527
546
  className: "matchid-overlay",
528
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `matchid-modal ${className}`, style: {
547
+ style: {
548
+ zIndex
549
+ },
550
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `matchid-modal ${className}`, style: {
529
551
  width
530
552
  }, children })
531
553
  }
532
- ) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment, {});
554
+ ) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_jsx_runtime26.Fragment, {});
533
555
  }
534
556
  function ModalWithHeader({
535
557
  children,
@@ -540,13 +562,13 @@ function ModalWithHeader({
540
562
  showClose = true,
541
563
  ...props
542
564
  }) {
543
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Modal, { ...props, children: [
544
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `matchid-modal-header ${showBorder ? "matchid-modal-header-border" : ""}`, children: [
545
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "matchid-modal-header-content", children: [
546
- onBack && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ArrowLeftIcon, { className: "matchid-modal-header-back", onClick: onBack }),
547
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "matchid-modal-header-title", children: title })
565
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Modal, { ...props, children: [
566
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: `matchid-modal-header ${showBorder ? "matchid-modal-header-border" : ""}`, children: [
567
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "matchid-modal-header-content", children: [
568
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArrowLeftIcon, { className: "matchid-modal-header-back", onClick: onBack }),
569
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "matchid-modal-header-title", children: title })
548
570
  ] }),
549
- onClose && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(CloseRoundIcon, { className: "matchid-modal-header-close", onClick: onClose })
571
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CloseRoundIcon, { className: "matchid-modal-header-close", onClick: onClose })
550
572
  ] }),
551
573
  children
552
574
  ] });
@@ -557,7 +579,7 @@ var import_react5 = require("react");
557
579
 
558
580
  // src/components/Input/index.tsx
559
581
  var import_react = require("react");
560
- var import_jsx_runtime26 = require("react/jsx-runtime");
582
+ var import_jsx_runtime27 = require("react/jsx-runtime");
561
583
  function Input({
562
584
  onChange,
563
585
  type,
@@ -566,22 +588,22 @@ function Input({
566
588
  ...props
567
589
  }) {
568
590
  const [inputType, setInputType] = (0, import_react.useState)(type);
569
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: `matchid-input-box ${props.value.length > 0 ? "matchid-input-has-content" : ""} ${className}`, children: [
570
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("input", { type: inputType, onChange, ...props, className: "matchid-input-field" }),
571
- props.value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DeleteRoundIcon, { onClick: (e) => {
591
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: `matchid-input-box ${props.value.length > 0 ? "matchid-input-has-content" : ""} ${className}`, children: [
592
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("input", { type: inputType, onChange, ...props, className: "matchid-input-field" }),
593
+ props.value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DeleteRoundIcon, { onClick: (e) => {
572
594
  if (onChange) {
573
595
  onChange({ target: { value: "" } });
574
596
  }
575
597
  }, className: "matchid-input-delete-icon", color: "var(--matchid-input-delete-icon-color)" }),
576
- type === "password" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "matchid-input-eye-icon", onClick: () => {
598
+ type === "password" && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "matchid-input-eye-icon", onClick: () => {
577
599
  setInputType(inputType === "password" ? "text" : "password");
578
- }, children: inputType === "password" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CloseEyeIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(OpenEyeIcon, {}) }),
600
+ }, children: inputType === "password" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CloseEyeIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(OpenEyeIcon, {}) }),
579
601
  after
580
602
  ] });
581
603
  }
582
604
 
583
605
  // src/components/Field/index.tsx
584
- var import_jsx_runtime27 = require("react/jsx-runtime");
606
+ var import_jsx_runtime28 = require("react/jsx-runtime");
585
607
  function Field({
586
608
  label,
587
609
  children,
@@ -589,18 +611,18 @@ function Field({
589
611
  required,
590
612
  className = ""
591
613
  }) {
592
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: `matchid-field-box ${className}`, children: [
593
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "matchid-field-label", children: [
594
- required && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "matchid-field-required", children: "*" }),
614
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `matchid-field-box ${className}`, children: [
615
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "matchid-field-label", children: [
616
+ required && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "matchid-field-required", children: "*" }),
595
617
  label
596
618
  ] }),
597
619
  children,
598
- error && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "matchid-field-error", children: error })
620
+ error && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "matchid-field-error", children: error })
599
621
  ] });
600
622
  }
601
623
 
602
624
  // src/components/Button/index.tsx
603
- var import_jsx_runtime28 = require("react/jsx-runtime");
625
+ var import_jsx_runtime29 = require("react/jsx-runtime");
604
626
  function Button({
605
627
  size = "df",
606
628
  disabled = false,
@@ -619,7 +641,7 @@ function Button({
619
641
  onClick && onClick();
620
642
  }
621
643
  };
622
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
644
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
623
645
  "button",
624
646
  {
625
647
  type,
@@ -629,7 +651,7 @@ function Button({
629
651
  ...style
630
652
  },
631
653
  onClick: onAction,
632
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(LoadingIcon_default, { className: "matchid-btn-loading-icon", color: "var(--matchid-btn-loading-color)" }) : children
654
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(LoadingIcon_default, { className: "matchid-btn-loading-icon", color: "var(--matchid-btn-loading-color)" }) : children
633
655
  }
634
656
  );
635
657
  }
@@ -911,6 +933,34 @@ var getAuthInfoApi = () => {
911
933
  method: "GET"
912
934
  });
913
935
  };
936
+ var getWalletNonceApi = ({ address }) => {
937
+ return request_default({
938
+ url: `/api/v1/login/wallet/init`,
939
+ method: "POST",
940
+ data: { address }
941
+ });
942
+ };
943
+ var loginByWalletApi = ({ type, address, signature, message, connector_type, wallet_client_type }) => {
944
+ return request_default({
945
+ url: `/api/v1/login/wallet`,
946
+ method: "POST",
947
+ data: { type, address, signature, message, connector_type, wallet_client_type }
948
+ });
949
+ };
950
+ var getWalletInitApi = ({ address }) => {
951
+ return request_default({
952
+ url: `/api/v1/wallet/init`,
953
+ method: "POST",
954
+ data: { address }
955
+ });
956
+ };
957
+ var toBindWalletApi = ({ type, address, signature, message, connector_type, wallet_client_type }) => {
958
+ return request_default({
959
+ url: `/api/v1/wallet/bind`,
960
+ method: "POST",
961
+ data: { type, address, signature, message, connector_type, wallet_client_type }
962
+ });
963
+ };
914
964
 
915
965
  // src/hooks/eventManager.ts
916
966
  var EventManager = class {
@@ -961,6 +1011,24 @@ function truncateAddress(address) {
961
1011
  const end = address.slice(-2);
962
1012
  return `${start}...${end}`;
963
1013
  }
1014
+ function firstUpperCase(str) {
1015
+ return str.toString()[0].toUpperCase() + str.toString().slice(1);
1016
+ }
1017
+
1018
+ // src/store/useModalStore.ts
1019
+ var import_zustand2 = require("zustand");
1020
+ var useEVMModalStore = (0, import_zustand2.create)((set) => ({
1021
+ isOpen: false,
1022
+ type: "",
1023
+ open: (type) => set({ isOpen: true, type }),
1024
+ close: () => set({ isOpen: false })
1025
+ }));
1026
+ var useSOLModalStore = (0, import_zustand2.create)((set) => ({
1027
+ isOpen: false,
1028
+ type: "",
1029
+ open: (type) => set({ isOpen: true, type }),
1030
+ close: () => set({ isOpen: false })
1031
+ }));
964
1032
 
965
1033
  // src/hooks/useUserInfo.tsx
966
1034
  function useUserInfo() {
@@ -976,6 +1044,8 @@ function useUserInfo() {
976
1044
  endpoints
977
1045
  } = useLocalStore_default();
978
1046
  const { events, login } = useMatch();
1047
+ const { open: EVMOpen } = useEVMModalStore();
1048
+ const { open: SOLOpen } = useSOLModalStore();
979
1049
  const isLogin = (0, import_react2.useMemo)(() => !!token, [token]);
980
1050
  const logout = async () => {
981
1051
  try {
@@ -1004,12 +1074,7 @@ function useUserInfo() {
1004
1074
  return loginByMethod("google");
1005
1075
  };
1006
1076
  const loginByWallet = async () => {
1007
- return window.open(
1008
- `${endpoints.auth}login/wallet?appid=${appid}`,
1009
- // Replace with the actual authorization URL
1010
- "_blank"
1011
- // 'width=800,height=600'
1012
- );
1077
+ return EVMOpen("login");
1013
1078
  };
1014
1079
  const loginByTelegram = async () => {
1015
1080
  return window.open(
@@ -1021,8 +1086,10 @@ function useUserInfo() {
1021
1086
  };
1022
1087
  const loginMethod = async (method) => {
1023
1088
  switch (method) {
1024
- case "wallet":
1025
- return await loginByWallet();
1089
+ case "evm":
1090
+ return EVMOpen("login");
1091
+ case "sol":
1092
+ return SOLOpen("login");
1026
1093
  case "telegram":
1027
1094
  return await loginByTelegram();
1028
1095
  case "twitter":
@@ -1030,6 +1097,7 @@ function useUserInfo() {
1030
1097
  case "discord":
1031
1098
  case "github":
1032
1099
  case "linkedin":
1100
+ case "facebook":
1033
1101
  return await loginByMethod(method);
1034
1102
  default:
1035
1103
  throw new Error("unsupported method");
@@ -1079,11 +1147,7 @@ function useUserInfo() {
1079
1147
  if (!token) {
1080
1148
  throw new Error("You must login first");
1081
1149
  }
1082
- const authWindow = window.open(
1083
- `${endpoints.auth}bind/wallet?appid=${appid}&st=` + encodeURIComponent(encodeBase64(token)),
1084
- // Replace with the actual authorization URL
1085
- "_blank"
1086
- );
1150
+ return EVMOpen("bind");
1087
1151
  };
1088
1152
  const bindTelegram = async () => {
1089
1153
  if (!token) {
@@ -1104,9 +1168,14 @@ function useUserInfo() {
1104
1168
  throw new Error(res.message);
1105
1169
  };
1106
1170
  const bind = async (method) => {
1171
+ if (!token) {
1172
+ throw new Error("You must login first");
1173
+ }
1107
1174
  switch (method) {
1108
- case "wallet":
1109
- return await bindWallet();
1175
+ case "evm":
1176
+ return EVMOpen("bind");
1177
+ case "sol":
1178
+ return SOLOpen("bind");
1110
1179
  case "telegram":
1111
1180
  return await bindTelegram();
1112
1181
  case "twitter":
@@ -1170,8 +1239,8 @@ function useMatchEvents(handlers) {
1170
1239
  }
1171
1240
 
1172
1241
  // src/store/useStore.ts
1173
- var import_zustand2 = require("zustand");
1174
- var useStore = (0, import_zustand2.create)((set) => ({
1242
+ var import_zustand3 = require("zustand");
1243
+ var useStore = (0, import_zustand3.create)((set) => ({
1175
1244
  walletIframeInited: false,
1176
1245
  setWalletIframeInited: (inited) => set({ walletIframeInited: inited }),
1177
1246
  recoveryModal: {
@@ -1339,7 +1408,7 @@ function useCopyClipboard(timeout = 500) {
1339
1408
  }
1340
1409
 
1341
1410
  // src/components/PasswordModal/index.tsx
1342
- var import_jsx_runtime29 = require("react/jsx-runtime");
1411
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1343
1412
  function PasswordModal({
1344
1413
  title,
1345
1414
  isOpen,
@@ -1385,13 +1454,13 @@ function PasswordModal({
1385
1454
  setIsSubmitting(false);
1386
1455
  }
1387
1456
  };
1388
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || "Set Password", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "matchid-password-box", children: [
1389
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "matchid-password-header", children: [
1390
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "matchid-password-header-icon", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(PasswordRoundIcon, {}) }),
1391
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "matchid-password-header-content", children: "Please set the wallet password that will be used to recover the wallet" })
1457
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || "Set Password", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "matchid-password-box", children: [
1458
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "matchid-password-header", children: [
1459
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "matchid-password-header-icon", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PasswordRoundIcon, {}) }),
1460
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "matchid-password-header-content", children: "Please set the wallet password that will be used to recover the wallet" })
1392
1461
  ] }),
1393
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "matchid-password-content", children: [
1394
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Field, { label: "Password", error: password.length > 0 && passwordError, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1462
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "matchid-password-content", children: [
1463
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Field, { label: "Password", error: password.length > 0 && passwordError, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1395
1464
  Input,
1396
1465
  {
1397
1466
  placeholder: "Enter the Password",
@@ -1401,7 +1470,7 @@ function PasswordModal({
1401
1470
  value: password
1402
1471
  }
1403
1472
  ) }),
1404
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Field, { label: "Re Password", error: rePassword.length > 0 ? rePasswordError || error : error, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1473
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Field, { label: "Re Password", error: rePassword.length > 0 ? rePasswordError || error : error, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1405
1474
  Input,
1406
1475
  {
1407
1476
  placeholder: "Re Enter the Password",
@@ -1412,7 +1481,7 @@ function PasswordModal({
1412
1481
  }
1413
1482
  ) })
1414
1483
  ] }),
1415
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1484
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1416
1485
  Button,
1417
1486
  {
1418
1487
  disabled: password.length == 0 || !!passwordError || !!rePasswordError,
@@ -1429,7 +1498,7 @@ function PasswordModal({
1429
1498
 
1430
1499
  // src/components/RecoveryModal/index.tsx
1431
1500
  var import_react6 = require("react");
1432
- var import_jsx_runtime30 = require("react/jsx-runtime");
1501
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1433
1502
  function RecoveryModal({
1434
1503
  title,
1435
1504
  isOpen,
@@ -1465,12 +1534,12 @@ function RecoveryModal({
1465
1534
  setIsSubmitting(false);
1466
1535
  }
1467
1536
  };
1468
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || "Recover Wallet", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "matchid-password-box", children: [
1469
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "matchid-password-header", children: [
1470
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "matchid-password-header-icon", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PasswordRoundIcon, {}) }),
1471
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "matchid-password-header-content", children: "Please enter your password to recover your wallet" })
1537
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || "Recover Wallet", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "matchid-password-box", children: [
1538
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "matchid-password-header", children: [
1539
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "matchid-password-header-icon", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PasswordRoundIcon, {}) }),
1540
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "matchid-password-header-content", children: "Please enter your password to recover your wallet" })
1472
1541
  ] }),
1473
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "matchid-password-content", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Field, { label: "Password", error: password.length > 0 ? passwordError || error : error, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1542
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "matchid-password-content", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Field, { label: "Password", error: password.length > 0 ? passwordError || error : error, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1474
1543
  Input,
1475
1544
  {
1476
1545
  placeholder: "Enter the Password",
@@ -1480,7 +1549,7 @@ function RecoveryModal({
1480
1549
  value: password
1481
1550
  }
1482
1551
  ) }) }),
1483
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1552
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1484
1553
  Button,
1485
1554
  {
1486
1555
  disabled: password.length == 0 || !!passwordError,
@@ -1495,907 +1564,1589 @@ function RecoveryModal({
1495
1564
  ] }) });
1496
1565
  }
1497
1566
 
1498
- // src/context/BusinessProvider.tsx
1499
- var import_jsx_runtime31 = require("react/jsx-runtime");
1500
- function BusinessProvider({ children }) {
1501
- const { overview, token } = useUserInfo();
1502
- const { recoveryModal } = useStore_default();
1503
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
1504
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PasswordModal, { isOpen: !!token && !!overview && !overview.address && !!overview.did, showClose: false }),
1505
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1506
- RecoveryModal,
1567
+ // src/components/EVMModal/index.tsx
1568
+ var import_rainbowkit = require("@rainbow-me/rainbowkit");
1569
+ var import_wagmi2 = require("wagmi");
1570
+ var import_wallets = require("@rainbow-me/rainbowkit/wallets");
1571
+ var import_chains = require("wagmi/chains");
1572
+
1573
+ // src/hooks/useEthersSigner.ts
1574
+ var React = __toESM(require("react"));
1575
+ var import_wagmi = require("wagmi");
1576
+ var import_ethers = require("ethers");
1577
+
1578
+ // node_modules/@wagmi/core/dist/esm/version.js
1579
+ var version = "2.16.3";
1580
+
1581
+ // node_modules/@wagmi/core/dist/esm/utils/getVersion.js
1582
+ var getVersion2 = () => `@wagmi/core@${version}`;
1583
+
1584
+ // node_modules/@wagmi/core/dist/esm/errors/base.js
1585
+ var __classPrivateFieldGet = function(receiver, state, kind, f) {
1586
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
1587
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
1588
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
1589
+ };
1590
+ var _BaseError_instances;
1591
+ var _BaseError_walk;
1592
+ var BaseError = class _BaseError extends Error {
1593
+ get docsBaseUrl() {
1594
+ return "https://wagmi.sh/core";
1595
+ }
1596
+ get version() {
1597
+ return getVersion2();
1598
+ }
1599
+ constructor(shortMessage, options = {}) {
1600
+ super();
1601
+ _BaseError_instances.add(this);
1602
+ Object.defineProperty(this, "details", {
1603
+ enumerable: true,
1604
+ configurable: true,
1605
+ writable: true,
1606
+ value: void 0
1607
+ });
1608
+ Object.defineProperty(this, "docsPath", {
1609
+ enumerable: true,
1610
+ configurable: true,
1611
+ writable: true,
1612
+ value: void 0
1613
+ });
1614
+ Object.defineProperty(this, "metaMessages", {
1615
+ enumerable: true,
1616
+ configurable: true,
1617
+ writable: true,
1618
+ value: void 0
1619
+ });
1620
+ Object.defineProperty(this, "shortMessage", {
1621
+ enumerable: true,
1622
+ configurable: true,
1623
+ writable: true,
1624
+ value: void 0
1625
+ });
1626
+ Object.defineProperty(this, "name", {
1627
+ enumerable: true,
1628
+ configurable: true,
1629
+ writable: true,
1630
+ value: "WagmiCoreError"
1631
+ });
1632
+ const details = options.cause instanceof _BaseError ? options.cause.details : options.cause?.message ? options.cause.message : options.details;
1633
+ const docsPath = options.cause instanceof _BaseError ? options.cause.docsPath || options.docsPath : options.docsPath;
1634
+ this.message = [
1635
+ shortMessage || "An error occurred.",
1636
+ "",
1637
+ ...options.metaMessages ? [...options.metaMessages, ""] : [],
1638
+ ...docsPath ? [
1639
+ `Docs: ${this.docsBaseUrl}${docsPath}.html${options.docsSlug ? `#${options.docsSlug}` : ""}`
1640
+ ] : [],
1641
+ ...details ? [`Details: ${details}`] : [],
1642
+ `Version: ${this.version}`
1643
+ ].join("\n");
1644
+ if (options.cause)
1645
+ this.cause = options.cause;
1646
+ this.details = details;
1647
+ this.docsPath = docsPath;
1648
+ this.metaMessages = options.metaMessages;
1649
+ this.shortMessage = shortMessage;
1650
+ }
1651
+ walk(fn) {
1652
+ return __classPrivateFieldGet(this, _BaseError_instances, "m", _BaseError_walk).call(this, this, fn);
1653
+ }
1654
+ };
1655
+ _BaseError_instances = /* @__PURE__ */ new WeakSet(), _BaseError_walk = function _BaseError_walk2(err, fn) {
1656
+ if (fn?.(err))
1657
+ return err;
1658
+ if (err.cause)
1659
+ return __classPrivateFieldGet(this, _BaseError_instances, "m", _BaseError_walk2).call(this, err.cause, fn);
1660
+ return err;
1661
+ };
1662
+
1663
+ // node_modules/@wagmi/core/dist/esm/errors/config.js
1664
+ var ConnectorNotConnectedError = class extends BaseError {
1665
+ constructor() {
1666
+ super("Connector not connected.");
1667
+ Object.defineProperty(this, "name", {
1668
+ enumerable: true,
1669
+ configurable: true,
1670
+ writable: true,
1671
+ value: "ConnectorNotConnectedError"
1672
+ });
1673
+ }
1674
+ };
1675
+ var ConnectorAccountNotFoundError = class extends BaseError {
1676
+ constructor({ address, connector }) {
1677
+ super(`Account "${address}" not found for connector "${connector.name}".`);
1678
+ Object.defineProperty(this, "name", {
1679
+ enumerable: true,
1680
+ configurable: true,
1681
+ writable: true,
1682
+ value: "ConnectorAccountNotFoundError"
1683
+ });
1684
+ }
1685
+ };
1686
+ var ConnectorChainMismatchError = class extends BaseError {
1687
+ constructor({ connectionChainId, connectorChainId }) {
1688
+ super(`The current chain of the connector (id: ${connectorChainId}) does not match the connection's chain (id: ${connectionChainId}).`, {
1689
+ metaMessages: [
1690
+ `Current Chain ID: ${connectorChainId}`,
1691
+ `Expected Chain ID: ${connectionChainId}`
1692
+ ]
1693
+ });
1694
+ Object.defineProperty(this, "name", {
1695
+ enumerable: true,
1696
+ configurable: true,
1697
+ writable: true,
1698
+ value: "ConnectorChainMismatchError"
1699
+ });
1700
+ }
1701
+ };
1702
+ var ConnectorUnavailableReconnectingError = class extends BaseError {
1703
+ constructor({ connector }) {
1704
+ super(`Connector "${connector.name}" unavailable while reconnecting.`, {
1705
+ details: [
1706
+ "During the reconnection step, the only connector methods guaranteed to be available are: `id`, `name`, `type`, `uid`.",
1707
+ "All other methods are not guaranteed to be available until reconnection completes and connectors are fully restored.",
1708
+ "This error commonly occurs for connectors that asynchronously inject after reconnection has already started."
1709
+ ].join(" ")
1710
+ });
1711
+ Object.defineProperty(this, "name", {
1712
+ enumerable: true,
1713
+ configurable: true,
1714
+ writable: true,
1715
+ value: "ConnectorUnavailableReconnectingError"
1716
+ });
1717
+ }
1718
+ };
1719
+
1720
+ // node_modules/@wagmi/core/dist/esm/actions/getConnectorClient.js
1721
+ var import_viem = require("viem");
1722
+ var import_utils3 = require("viem/utils");
1723
+ async function getConnectorClient(config, parameters = {}) {
1724
+ let connection;
1725
+ if (parameters.connector) {
1726
+ const { connector: connector2 } = parameters;
1727
+ if (config.state.status === "reconnecting" && !connector2.getAccounts && !connector2.getChainId)
1728
+ throw new ConnectorUnavailableReconnectingError({ connector: connector2 });
1729
+ const [accounts, chainId2] = await Promise.all([
1730
+ connector2.getAccounts(),
1731
+ connector2.getChainId()
1732
+ ]);
1733
+ connection = {
1734
+ accounts,
1735
+ chainId: chainId2,
1736
+ connector: connector2
1737
+ };
1738
+ } else
1739
+ connection = config.state.connections.get(config.state.current);
1740
+ if (!connection)
1741
+ throw new ConnectorNotConnectedError();
1742
+ const chainId = parameters.chainId ?? connection.chainId;
1743
+ const connectorChainId = await connection.connector.getChainId();
1744
+ if (connectorChainId !== connection.chainId)
1745
+ throw new ConnectorChainMismatchError({
1746
+ connectionChainId: connection.chainId,
1747
+ connectorChainId
1748
+ });
1749
+ const connector = connection.connector;
1750
+ if (connector.getClient)
1751
+ return connector.getClient({ chainId });
1752
+ const account = (0, import_utils3.parseAccount)(parameters.account ?? connection.accounts[0]);
1753
+ account.address = (0, import_utils3.getAddress)(account.address);
1754
+ if (parameters.account && !connection.accounts.some((x) => x.toLowerCase() === account.address.toLowerCase()))
1755
+ throw new ConnectorAccountNotFoundError({
1756
+ address: account.address,
1757
+ connector
1758
+ });
1759
+ const chain = config.chains.find((chain2) => chain2.id === chainId);
1760
+ const provider = await connection.connector.getProvider({ chainId });
1761
+ return (0, import_viem.createClient)({
1762
+ account,
1763
+ chain,
1764
+ name: "Connector Client",
1765
+ transport: (opts) => (0, import_viem.custom)(provider)({ ...opts, retryCount: 0 })
1766
+ });
1767
+ }
1768
+
1769
+ // node_modules/@wagmi/core/dist/esm/exports/index.js
1770
+ var import_viem2 = require("viem");
1771
+
1772
+ // src/hooks/useEthersSigner.ts
1773
+ function clientToSigner(client) {
1774
+ const { account, chain, transport } = client;
1775
+ const network = {
1776
+ chainId: chain.id,
1777
+ name: chain.name,
1778
+ ensAddress: chain.contracts?.ensRegistry?.address
1779
+ };
1780
+ const provider = new import_ethers.providers.Web3Provider(transport, network);
1781
+ const signer = provider.getSigner(account.address);
1782
+ return signer;
1783
+ }
1784
+ async function getEthersSigner(config, { chainId } = {}) {
1785
+ const client = await getConnectorClient(config, { chainId });
1786
+ return clientToSigner(client);
1787
+ }
1788
+
1789
+ // src/components/EVMModal/index.tsx
1790
+ var import_react15 = __toESM(require("react"));
1791
+ var import_siwe = require("siwe");
1792
+
1793
+ // src/components/index.tsx
1794
+ var components_exports = {};
1795
+ __export(components_exports, {
1796
+ Button: () => Button,
1797
+ EVMModal: () => EVMModal,
1798
+ EmailModal: () => EmailModal,
1799
+ Field: () => Field,
1800
+ Input: () => Input,
1801
+ LoginBox: () => LoginBox,
1802
+ LoginButton: () => LoginButton,
1803
+ LoginModal: () => LoginModal,
1804
+ LoginPanel: () => LoginPanel,
1805
+ Modal: () => Modal,
1806
+ ModalWithHeader: () => ModalWithHeader,
1807
+ PasswordModal: () => PasswordModal,
1808
+ Popover: () => Popover,
1809
+ UsernameModal: () => UsernameModal
1810
+ });
1811
+
1812
+ // src/components/EmailModal/index.tsx
1813
+ var import_react9 = require("react");
1814
+
1815
+ // src/components/EmailModal/StepEmail.tsx
1816
+ var import_react7 = require("react");
1817
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1818
+ function StepEmail(props) {
1819
+ const [emailVal, setEmailVal] = (0, import_react7.useState)("");
1820
+ (0, import_react7.useEffect)(() => {
1821
+ if (props.email) {
1822
+ setEmailVal(props.email);
1823
+ }
1824
+ }, []);
1825
+ const canContinue = (0, import_react7.useMemo)(() => {
1826
+ return isValidEmail(emailVal);
1827
+ }, [emailVal]);
1828
+ const onContinue = async () => {
1829
+ props.onContinue(emailVal);
1830
+ };
1831
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "matchid-email-email-box", children: [
1832
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Field, { label: "Email Address", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1833
+ Input,
1507
1834
  {
1508
- isOpen: !!token && !!overview && !!overview.address && recoveryModal.open,
1509
- onClose: recoveryModal.close,
1510
- onSuccess: recoveryModal.success
1835
+ placeholder: "Enter Your Email Address",
1836
+ onChange: (e) => setEmailVal(e.target.value),
1837
+ value: emailVal
1511
1838
  }
1512
- ),
1513
- children
1839
+ ) }),
1840
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { disabled: !canContinue, style: {
1841
+ marginTop: "64px"
1842
+ }, onClick: onContinue, size: "lg", block: true, highlight: true, children: "Continue" })
1514
1843
  ] });
1515
1844
  }
1516
1845
 
1517
- // src/context/index.tsx
1518
- var import_jsx_runtime32 = (
1519
- // <MpcWalletProvider>
1520
- require("react/jsx-runtime")
1521
- );
1522
- var Providers = ({ children }) => {
1523
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(BusinessProvider, { children });
1524
- };
1525
- var context_default = Providers;
1846
+ // src/components/EmailModal/StepVerify.tsx
1847
+ var import_react8 = require("react");
1526
1848
 
1527
- // src/hooks/useWalletInit.ts
1528
- var import_react7 = require("react");
1529
- var AppClientId2 = "react-sdk-" + getVersion();
1530
- function useWalletInit({
1531
- refreshOverview
1532
- }) {
1533
- const { endpoints } = useLocalStore_default();
1534
- const getWalletIframe = () => {
1535
- return document.getElementById("match-wallet");
1849
+ // src/config/index.tsx
1850
+ var EMAIL_INTERVAL = 60;
1851
+ var EMAIL_CODE_LENGTH = 6;
1852
+
1853
+ // src/components/EmailModal/StepVerify.tsx
1854
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1855
+ function StepVerify(props) {
1856
+ const { getLoginEmailCode, loginByEmail } = useUserInfo();
1857
+ const [error, setError] = (0, import_react8.useState)("");
1858
+ const [code, setCode] = (0, import_react8.useState)("");
1859
+ const [sending, setSending] = (0, import_react8.useState)(false);
1860
+ const [submitting, setSubmitting] = (0, import_react8.useState)(false);
1861
+ const sendTimeRef = (0, import_react8.useRef)(0);
1862
+ const [sendBtnText, setSendBtnText] = (0, import_react8.useState)("Send");
1863
+ const intervalTime = EMAIL_INTERVAL;
1864
+ const codeLength = EMAIL_CODE_LENGTH;
1865
+ const intervalRef = (0, import_react8.useRef)(null);
1866
+ const onSend = async () => {
1867
+ if (sendTimeRef.current > 0) {
1868
+ return;
1869
+ }
1870
+ try {
1871
+ setError("");
1872
+ setSending(true);
1873
+ sendTimeRef.current = intervalTime;
1874
+ await getLoginEmailCode(props.email);
1875
+ setSendBtnText(`${sendTimeRef.current}s`);
1876
+ intervalRef.current = setInterval(() => {
1877
+ sendTimeRef.current--;
1878
+ setSendBtnText(`${sendTimeRef.current}s`);
1879
+ if (sendTimeRef.current <= 0) {
1880
+ setSendBtnText("Resend");
1881
+ clearInterval(intervalRef.current);
1882
+ setSending(false);
1883
+ }
1884
+ }, 1e3);
1885
+ } catch (err) {
1886
+ console.error("Send email error", err);
1887
+ setError("Failed to send code:" + err.message);
1888
+ setSending(false);
1889
+ }
1536
1890
  };
1537
- const [walletInited, setWalletInited] = (0, import_react7.useState)(false);
1538
- const { appid, token, overview } = useLocalStore_default();
1539
- const { initWallet, generateWallet } = useWallet();
1540
- (0, import_react7.useEffect)(() => {
1541
- if (endpoints.auth) {
1542
- if (!window.matchWalletMessageIdMap) {
1543
- window.matchWalletMessageIdMap = {};
1891
+ (0, import_react8.useEffect)(() => {
1892
+ onSend();
1893
+ return () => {
1894
+ if (intervalRef.current) {
1895
+ clearInterval(intervalRef.current);
1544
1896
  }
1545
- const existingIframe = getWalletIframe();
1546
- if (!existingIframe) {
1547
- const iframe = document.createElement("iframe");
1548
- iframe.id = "match-wallet";
1549
- iframe.src = endpoints.auth + "wallet";
1550
- iframe.style.display = "none";
1551
- iframe.style.width = "0";
1552
- iframe.style.height = "0";
1553
- document.body.insertBefore(iframe, document.body.firstChild);
1554
- window.sendMatchWalletMessage = (method, data) => {
1555
- const messageId = Date.now().toString() + Math.random().toString().slice(6);
1556
- const message = {
1557
- method,
1558
- data,
1559
- messageId,
1560
- source: "matchid"
1561
- };
1562
- if (document.getElementById("match-wallet")) {
1563
- matchlog_default.log("matchid.sdk.sendMatchWalletMessage", message, endpoints.auth);
1564
- getWalletIframe()?.contentWindow?.postMessage(message, endpoints.auth);
1565
- return messageId;
1566
- }
1567
- console.error("not found iframe");
1568
- return false;
1569
- };
1570
- window.waitMatchUntilWalletMessage = async (method, data, timeout = 3e4) => {
1571
- return new Promise((resolve, reject) => {
1572
- const messageId = window.sendMatchWalletMessage(method, data);
1573
- if (!messageId) {
1574
- console.error("Can't find wallet message");
1575
- reject(new Error("Can't find wallet message"));
1576
- return;
1577
- }
1578
- window.matchWalletMessageIdMap[messageId] = { resolve, reject };
1579
- window.matchWalletMessageIdMap[messageId].timeout = setTimeout(() => {
1580
- console.error("Get wallet result timeout", {
1581
- messageId,
1582
- method,
1583
- data
1584
- });
1585
- delete window.matchWalletMessageIdMap[messageId];
1586
- reject(new Error("Get wallet result timeout"));
1587
- }, timeout);
1588
- });
1589
- };
1590
- } else {
1591
- if (existingIframe.src !== endpoints.auth + "wallet") {
1592
- setWalletInited(false);
1593
- existingIframe.src = endpoints.auth + "wallet";
1594
- }
1595
- }
1596
- }
1597
- }, [endpoints.auth]);
1598
- (0, import_react7.useEffect)(() => {
1599
- const messageHandle = async (e) => {
1600
- if (e.origin !== endpoints.auth.substring(0, endpoints.auth.length - 1)) {
1601
- return;
1602
- }
1603
- const res = e.data;
1604
- if (res.source != "match-wallet") {
1605
- return;
1606
- }
1607
- matchlog_default.log("sdk.wallet.receive", e);
1608
- const messageId = res.messageId;
1609
- if (messageId == "init") {
1610
- matchlog_default.log("wallet init");
1611
- setWalletInited(true);
1612
- return;
1613
- }
1614
- if (messageId && window.matchWalletMessageIdMap[messageId]) {
1615
- const { resolve, reject, timeout } = window.matchWalletMessageIdMap[messageId];
1616
- delete window.matchWalletMessageIdMap[messageId];
1617
- clearTimeout(timeout);
1618
- if (res.status == "success") {
1619
- resolve(res.data);
1620
- } else {
1621
- console.error("qwe-waller-error", res);
1622
- reject(new Error(res.data.message));
1623
- }
1624
- }
1625
- };
1626
- window.addEventListener("message", messageHandle);
1627
- return () => {
1628
- window.removeEventListener("message", messageHandle);
1629
1897
  };
1630
1898
  }, []);
1631
- (0, import_react7.useEffect)(() => {
1632
- if (token && overview && overview.did && walletInited) {
1633
- const did = overview.did.split(":")[2];
1634
- const newUserInit = async () => {
1635
- await window.waitMatchUntilWalletMessage(
1636
- "initCore",
1899
+ const canContinue = (0, import_react8.useMemo)(() => {
1900
+ return code.length === codeLength;
1901
+ }, [code]);
1902
+ const onContinue = async () => {
1903
+ if (submitting) {
1904
+ return;
1905
+ }
1906
+ try {
1907
+ setError("");
1908
+ setSubmitting(true);
1909
+ const res = await loginByEmail({
1910
+ email: props.email,
1911
+ code
1912
+ });
1913
+ if (res) {
1914
+ props.onSuccess && props.onSuccess();
1915
+ }
1916
+ setSubmitting(false);
1917
+ } catch (err) {
1918
+ console.error("Verify email code error", err);
1919
+ setError(err.message);
1920
+ setSubmitting(false);
1921
+ }
1922
+ };
1923
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "matchid-email-verify-box", children: [
1924
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "matchid-email-verify-header", children: [
1925
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "matchid-email-verify-header-icon", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(EmailLineIcon, {}) }),
1926
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "matchid-email-verify-header-content", children: [
1927
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "matchid-email-verify-header-value", children: props.email }),
1928
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "matchid-email-verify-header-tips", children: "We have sent a verification code to your email" })
1929
+ ] })
1930
+ ] }),
1931
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Field, { label: "Verification Code", error, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1932
+ Input,
1933
+ {
1934
+ placeholder: "Enter the code",
1935
+ maxLength: codeLength,
1936
+ onChange: (e) => setCode(e.target.value),
1937
+ value: code,
1938
+ after: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1939
+ Button,
1637
1940
  {
1638
- AppId: appid,
1639
- AppClientId: AppClientId2,
1640
- UserId: did,
1641
- AccessToken: token,
1642
- Address: ""
1941
+ highlight: true,
1942
+ disabled: sending,
1943
+ style: {
1944
+ height: "100%",
1945
+ borderTopLeftRadius: 0,
1946
+ borderBottomLeftRadius: 0,
1947
+ borderTopRightRadius: "inherit",
1948
+ borderBottomRightRadius: "inherit",
1949
+ width: "80px"
1950
+ },
1951
+ onClick: onSend,
1952
+ children: sendBtnText
1643
1953
  }
1644
- );
1645
- };
1646
- if (!overview.address) {
1647
- newUserInit();
1648
- } else {
1649
- initWallet({
1650
- address: overview.address,
1651
- did
1652
- });
1954
+ )
1653
1955
  }
1956
+ ) }),
1957
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button, { disabled: !canContinue, highlight: true, block: true, size: "lg", onClick: onContinue, children: "Continue" })
1958
+ ] });
1959
+ }
1960
+
1961
+ // src/components/EmailModal/index.tsx
1962
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1963
+ function EmailModal({
1964
+ isOpen = false,
1965
+ width = 480,
1966
+ onClose,
1967
+ onBack,
1968
+ onLogin
1969
+ }) {
1970
+ const [step, setStep] = (0, import_react9.useState)("input");
1971
+ const [emailVal, setEmailVal] = (0, import_react9.useState)("");
1972
+ (0, import_react9.useEffect)(() => {
1973
+ if (!isOpen) {
1974
+ setStep("input");
1975
+ setEmailVal("");
1654
1976
  }
1655
- }, [overview, token, walletInited]);
1656
- return {
1657
- walletInited
1658
- };
1977
+ }, [isOpen]);
1978
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1979
+ ModalWithHeader,
1980
+ {
1981
+ isOpen,
1982
+ width,
1983
+ onClose,
1984
+ title: "Email",
1985
+ onBack: step == "verify" ? () => setStep("input") : onBack,
1986
+ children: step === "input" ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StepEmail, { email: emailVal, onContinue: (email) => {
1987
+ setEmailVal(email);
1988
+ setStep("verify");
1989
+ } }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StepVerify, { email: emailVal, onSuccess: onLogin })
1990
+ }
1991
+ );
1659
1992
  }
1660
1993
 
1661
- // src/hooks/useInit.tsx
1662
- var import_react8 = require("react");
1663
- function useInit({
1664
- theme,
1665
- appid,
1666
- events,
1667
- endpoints
1994
+ // src/components/Popover/index.tsx
1995
+ var import_react10 = require("react");
1996
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1997
+ function Popover({
1998
+ children,
1999
+ content,
2000
+ position = "right",
2001
+ type = "hover",
2002
+ className = "",
2003
+ gap = "20px"
1668
2004
  }) {
1669
- const {
1670
- setAppid,
1671
- setEndpoints,
1672
- setToken,
1673
- setMid,
1674
- token,
1675
- setOverview,
1676
- setTheme
1677
- } = useLocalStore_default();
1678
- const overviewLoadingRef = (0, import_react8.useRef)(false);
1679
- const searchParams = new URLSearchParams(window.location.search);
1680
- const matchToken = searchParams.get("matchToken");
1681
- const realEndpoints = endpoints || env_default.endpoints;
1682
- (0, import_react8.useEffect)(() => {
1683
- setTheme(theme);
1684
- }, [theme]);
1685
- (0, import_react8.useEffect)(() => {
1686
- setAppid(appid);
1687
- }, [appid]);
1688
- (0, import_react8.useEffect)(() => {
1689
- setEndpoints(realEndpoints);
1690
- }, [realEndpoints]);
1691
- (0, import_react8.useEffect)(() => {
1692
- if (matchToken) {
1693
- const tokenData = JSON.parse(atob(matchToken));
1694
- if (tokenData && tokenData.mid && tokenData.token) {
1695
- login({
1696
- mid: tokenData.mid,
1697
- token: "Bearer " + tokenData.token
1698
- });
2005
+ const [active, setActive] = (0, import_react10.useState)(false);
2006
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
2007
+ "div",
2008
+ {
2009
+ onClick: () => {
2010
+ if (type == "click") {
2011
+ setActive(!active);
2012
+ }
2013
+ },
2014
+ className: `matchid-popover-box matchid-popover-${position} matchid-popover-${type} ${className} ${type == "click" && active ? "matchid-popover-click-active" : ""}`,
2015
+ children: [
2016
+ children,
2017
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: {
2018
+ paddingTop: gap
2019
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: `matchid-popover-content`, children: content }) })
2020
+ ]
2021
+ }
2022
+ );
2023
+ }
2024
+
2025
+ // src/components/LoginBox/index.tsx
2026
+ var import_react11 = require("react");
2027
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2028
+ function LoginBox({
2029
+ methods,
2030
+ inModal = false
2031
+ }) {
2032
+ const [emailOpen, setEmailOpen] = (0, import_react11.useState)(false);
2033
+ const { login } = useUserInfo();
2034
+ const defaultMethods = [
2035
+ "evm",
2036
+ "google",
2037
+ "email",
2038
+ "telegram",
2039
+ "twitter"
2040
+ ];
2041
+ const methodList = (0, import_react11.useMemo)(() => {
2042
+ return methods || defaultMethods;
2043
+ }, [methods]);
2044
+ const LoginItem = ({
2045
+ icon,
2046
+ name,
2047
+ onClick
2048
+ }) => {
2049
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "matchid-login-method", onClick, children: [
2050
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "matchid-login-method-content", children: [
2051
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "matchid-login-method-icon", children: icon }),
2052
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "matchid-login-method-name", children: name })
2053
+ ] }),
2054
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ArrowRightIcon, { className: "matchid-login-method-arrow", size: 20, color: "var(--matchid-arrow-color)" })
2055
+ ] });
2056
+ };
2057
+ const methodMap = {
2058
+ evm: {
2059
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(WalletIcon, {}),
2060
+ name: "EVM",
2061
+ onClick: () => login("evm")
2062
+ },
2063
+ email: {
2064
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(EmailIcon, {}),
2065
+ name: "Email",
2066
+ onClick: () => {
2067
+ setEmailOpen(true);
1699
2068
  }
2069
+ },
2070
+ google: {
2071
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(GoogleIcon, {}),
2072
+ name: "Google",
2073
+ onClick: () => login("google")
2074
+ },
2075
+ twitter: {
2076
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(XIcon, {}),
2077
+ name: "X",
2078
+ onClick: () => login("twitter")
2079
+ },
2080
+ telegram: {
2081
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(TelegramIcon, {}),
2082
+ name: "Telegram",
2083
+ onClick: () => login("telegram")
2084
+ },
2085
+ github: {
2086
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(GithubIcon, {}),
2087
+ name: "Github",
2088
+ onClick: () => login("github")
2089
+ },
2090
+ discord: {
2091
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DiscordIcon, {}),
2092
+ name: "Discord",
2093
+ onClick: () => login("discord")
2094
+ },
2095
+ linkedin: {
2096
+ icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(LinkedinIcon, {}),
2097
+ name: "Linkedin",
2098
+ onClick: () => login("linkedin")
2099
+ }
2100
+ };
2101
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
2102
+ (!inModal || !emailOpen) && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "matchid-login-box", children: methodList.map((m) => {
2103
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2104
+ LoginItem,
2105
+ {
2106
+ icon: methodMap[m]?.icon,
2107
+ name: methodMap[m]?.name,
2108
+ onClick: methodMap[m]?.onClick
2109
+ },
2110
+ m
2111
+ );
2112
+ }) }),
2113
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2114
+ EmailModal,
2115
+ {
2116
+ isOpen: emailOpen,
2117
+ onClose: () => {
2118
+ setEmailOpen(false);
2119
+ },
2120
+ onBack: inModal ? () => {
2121
+ setEmailOpen(false);
2122
+ } : void 0
2123
+ }
2124
+ )
2125
+ ] });
2126
+ }
2127
+
2128
+ // src/components/LoginButton/index.tsx
2129
+ var import_react13 = require("react");
2130
+
2131
+ // src/components/LoginPanel/index.tsx
2132
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2133
+ function LoginPanel({
2134
+ header,
2135
+ onClose,
2136
+ ...props
2137
+ }) {
2138
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "matchid-login-panel", children: [
2139
+ header ? header : /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "matchid-login-panel-header", children: [
2140
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "matchid-login-panel-header-content", children: [
2141
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "matchid-login-panel-header-title", children: "Log in / Sign up" }),
2142
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "matchid-login-panel-header-subtilte", children: "You can use the following methods" })
2143
+ ] }),
2144
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "matchid-login-panel-header-close", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CloseRoundIcon, {}) })
2145
+ ] }),
2146
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "matchid-login-panel-divide" }),
2147
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(LoginBox, { ...props })
2148
+ ] });
2149
+ }
2150
+
2151
+ // src/components/LoginModal/index.tsx
2152
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2153
+ function LoginModal({
2154
+ isOpen = false,
2155
+ width = 480,
2156
+ ...props
2157
+ }) {
2158
+ const { isLogin } = useUserInfo();
2159
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2160
+ Modal,
2161
+ {
2162
+ isOpen: isOpen && !isLogin,
2163
+ width,
2164
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(LoginPanel, { ...props, inModal: true })
1700
2165
  }
1701
- }, [matchToken]);
1702
- (0, import_react8.useEffect)(() => {
1703
- const onLoginMessage = (event) => {
1704
- const res = event.data;
1705
- if (res.event === "login" && res.data && (res.data.token || res.data.token_type && res.data.access_token)) {
1706
- login({
1707
- mid: res.data.mid,
1708
- token: res.data.token || `${res.data.token_type} ${res.data.access_token}`
1709
- });
1710
- } else if (res.event == "bind") {
1711
- eventManager_default.emit("onBind", res.data);
1712
- if (events && events.onBind) {
1713
- events.onBind(res.data);
1714
- }
2166
+ );
2167
+ }
2168
+
2169
+ // src/components/UserPopover/index.tsx
2170
+ var import_react12 = require("react");
2171
+
2172
+ // src/assets/icon/ProfileIcon.tsx
2173
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2174
+ function ProfileIcon({ size = 24, color = "black", ...props }) {
2175
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
2176
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2177
+ "path",
2178
+ {
2179
+ fillRule: "evenodd",
2180
+ clipRule: "evenodd",
2181
+ d: "M7.5 6.75C7.5 4.95507 8.95507 3.5 10.75 3.5C12.5449 3.5 14 4.95507 14 6.75C14 8.54493 12.5449 10 10.75 10C8.95507 10 7.5 8.54493 7.5 6.75ZM10.75 2C8.12665 2 6 4.12665 6 6.75C6 9.37335 8.12665 11.5 10.75 11.5C13.3734 11.5 15.5 9.37335 15.5 6.75C15.5 4.12665 13.3734 2 10.75 2ZM8.75 13C5.57436 13 3 15.5744 3 18.75V19.75C3 20.7165 3.7835 21.5 4.75 21.5H13.6646L13.0292 20.8646C12.7764 20.6118 12.5733 20.3185 12.4263 20H4.75C4.61193 20 4.5 19.8881 4.5 19.75V18.75C4.5 16.4028 6.40279 14.5 8.75 14.5H12.6452C13.0508 13.8858 13.676 13.4295 14.4091 13.243C13.8838 13.0849 13.3268 13 12.75 13H8.75Z",
2182
+ fill: color
1715
2183
  }
1716
- };
1717
- window.addEventListener("message", onLoginMessage);
1718
- return () => {
1719
- window.removeEventListener("message", onLoginMessage);
1720
- };
1721
- }, []);
1722
- const loadOverview = async () => {
1723
- matchlog_default.log("loadOverview");
1724
- if (overviewLoadingRef.current) {
1725
- return;
1726
- }
1727
- overviewLoadingRef.current = true;
2184
+ ),
2185
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2186
+ "path",
2187
+ {
2188
+ fillRule: "evenodd",
2189
+ clipRule: "evenodd",
2190
+ d: "M19.0677 22.4771L21.4771 20.0677C21.841 19.7038 21.841 19.1139 21.4771 18.75L17.75 15.0229C17.5753 14.8482 17.3383 14.75 17.0911 14.75H14.6818C14.1672 14.75 13.75 15.1672 13.75 15.6818V18.0911C13.75 18.3383 13.8482 18.5753 14.0229 18.75L17.75 22.4771C18.1139 22.841 18.7038 22.841 19.0677 22.4771ZM15.6135 17.3124C15.9995 17.3124 16.3124 16.9995 16.3124 16.6135C16.3124 16.2276 15.9995 15.9147 15.6135 15.9147C15.2276 15.9147 14.9147 16.2276 14.9147 16.6135C14.9147 16.9995 15.2276 17.3124 15.6135 17.3124Z",
2191
+ fill: color
2192
+ }
2193
+ )
2194
+ ] });
2195
+ }
2196
+
2197
+ // src/components/UserPopover/index.tsx
2198
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2199
+ function UserContent() {
2200
+ const { logout, address, username } = useUserInfo();
2201
+ const [logouting, setLogouting] = (0, import_react12.useState)(false);
2202
+ const onLogout = async () => {
2203
+ if (logouting) return;
1728
2204
  try {
1729
- const res = await getOverviewInfoApi();
1730
- setOverview(res.data);
1731
- return res.data;
1732
- } catch (err) {
1733
- console.error("overview error", err);
2205
+ setLogouting(true);
2206
+ await logout();
2207
+ } catch (error) {
2208
+ console.error(error);
1734
2209
  } finally {
1735
- overviewLoadingRef.current = false;
2210
+ setLogouting(false);
1736
2211
  }
1737
2212
  };
1738
- (0, import_react8.useEffect)(() => {
1739
- if (token) {
1740
- loadOverview();
1741
- }
1742
- }, [token]);
1743
- const login = async ({ mid, token: token2 }) => {
1744
- setMid(mid);
1745
- setToken(token2);
1746
- const overview = await loadOverview();
1747
- eventManager_default.emit("onLogin", {
1748
- mid,
1749
- token: token2,
1750
- did: overview?.did
1751
- });
1752
- if (events && events?.onLogin) {
1753
- events.onLogin({
1754
- mid,
1755
- token: token2,
1756
- did: overview?.did
1757
- });
1758
- }
2213
+ const UserItem = ({
2214
+ children,
2215
+ icon,
2216
+ rightIcon,
2217
+ onClick
2218
+ }) => {
2219
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "matchid-user-popover-item", onClick, children: [
2220
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: `matchid-user-popover-item-content`, children: [
2221
+ icon,
2222
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "matchid-user-popover-item-text", children })
2223
+ ] }),
2224
+ rightIcon
2225
+ ] });
1759
2226
  };
1760
- return {
1761
- loadOverview,
1762
- login,
1763
- endpoints: realEndpoints
2227
+ const UserDivider = () => {
2228
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: `matchid-user-popover-divider` });
1764
2229
  };
2230
+ const [usernameOpen, setUsernameOpen] = (0, import_react12.useState)(false);
2231
+ const [copied, setCopied] = useCopyClipboard();
2232
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "matchid-user-popover-content", children: [
2233
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "matchid-user-popover-list", children: [
2234
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(UserItem, { onClick: () => {
2235
+ setCopied(address);
2236
+ }, icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(CheckIcon, { size: 20, color: "#0ecb81" }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(CopyIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(CheckIcon, { size: 20, color: "var(--icon-color)" }), children: truncateAddress(address) }),
2237
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(UserDivider, {}),
2238
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(UserItem, { onClick: () => {
2239
+ setUsernameOpen(true);
2240
+ }, icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ProfileIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ArrowRightIcon, { size: 20, color: "var(--icon-color)" }), children: username || "Set a username" })
2241
+ ] }),
2242
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Button, { onClick: onLogout, loading: logouting, children: "Disconnect" }),
2243
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(UsernameModal, { isOpen: usernameOpen, onClose: () => {
2244
+ setUsernameOpen(false);
2245
+ }, onSuccess: () => {
2246
+ setUsernameOpen(false);
2247
+ } })
2248
+ ] });
2249
+ }
2250
+ function UserPopover({
2251
+ children,
2252
+ ...props
2253
+ }) {
2254
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Popover, { ...props, content: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(UserContent, {}), children });
1765
2255
  }
1766
2256
 
1767
- // src/MatchContext.tsx
1768
- var import_react_query = require("@tanstack/react-query");
1769
- var import_jsx_runtime33 = require("react/jsx-runtime");
1770
- var queryClient = new import_react_query.QueryClient();
1771
- var MatchContext = (0, import_react9.createContext)(void 0);
1772
- var MatchProvider = ({ children, appid, events, theme = "light", endpoints }) => {
1773
- const { loadOverview, login, endpoints: realEndPoints } = useInit({
1774
- theme,
1775
- appid,
1776
- events,
1777
- endpoints
1778
- });
1779
- useWalletInit({
1780
- refreshOverview: loadOverview
1781
- });
1782
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_query.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1783
- MatchContext.Provider,
1784
- {
1785
- value: {
1786
- appid,
1787
- endpoints: realEndPoints,
1788
- events,
1789
- login,
1790
- theme
1791
- },
1792
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(context_default, { children })
1793
- }
1794
- ) });
1795
- };
1796
- var useMatch = () => {
1797
- const context = (0, import_react9.useContext)(MatchContext);
1798
- if (context === void 0) {
1799
- throw new Error("useMatch must be used within a MatchProvider");
2257
+ // src/components/LoginButton/index.tsx
2258
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2259
+ function LoginButton({
2260
+ loginRender,
2261
+ methods,
2262
+ onLoginClick,
2263
+ popoverPosition = "right",
2264
+ popoverType = "hover",
2265
+ popoverGap = 20,
2266
+ ...props
2267
+ }) {
2268
+ const { isLogin, username } = useUserInfo();
2269
+ const [loginOpen, setLoginOpen] = (0, import_react13.useState)(false);
2270
+ if (!isLogin) {
2271
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
2272
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(LoginModal, { methods, isOpen: loginOpen, onClose: () => setLoginOpen(false) }),
2273
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Button, { className: "matchid-unlogin-btn", ...props, highlight: true, onClick: () => setLoginOpen(true), children: [
2274
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(UnLoginIcon_default, {}),
2275
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { children: "Login" })
2276
+ ] })
2277
+ ] });
1800
2278
  }
1801
- return context;
1802
- };
2279
+ return loginRender ? { loginRender } : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(UserPopover, { position: popoverPosition, type: popoverType, gap: popoverGap, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Button, { onClick: onLoginClick, className: "matchid-login-btn", ...props, children: [
2280
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(LoginIcon_default, {}),
2281
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { children: username ? truncateAddress(username) : "MatchID User" })
2282
+ ] }) });
2283
+ }
1803
2284
 
1804
- // src/components/index.tsx
1805
- var components_exports = {};
1806
- __export(components_exports, {
1807
- Button: () => Button,
1808
- EmailModal: () => EmailModal,
1809
- Field: () => Field,
1810
- Input: () => Input,
1811
- LoginBox: () => LoginBox,
1812
- LoginButton: () => LoginButton,
1813
- LoginModal: () => LoginModal,
1814
- LoginPanel: () => LoginPanel,
1815
- Modal: () => Modal,
1816
- ModalWithHeader: () => ModalWithHeader,
1817
- PasswordModal: () => PasswordModal,
1818
- Popover: () => Popover,
1819
- UsernameModal: () => UsernameModal
1820
- });
2285
+ // src/components/UsernameModal/index.tsx
2286
+ var import_react14 = require("react");
1821
2287
 
1822
- // src/components/EmailModal/index.tsx
1823
- var import_react12 = require("react");
2288
+ // src/assets/icon/InfoRoundIcon.tsx
2289
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2290
+ function InfoRoundIcon({
2291
+ size,
2292
+ color = "#6E6E6E",
2293
+ ...props
2294
+ }) {
2295
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("svg", { width: size, height: size, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
2296
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("g", { clipPath: "url(#clip0_418_7746)", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2297
+ "path",
2298
+ {
2299
+ fillRule: "evenodd",
2300
+ clipRule: "evenodd",
2301
+ d: "M7.99984 0.666504C3.94975 0.666504 0.666504 3.94975 0.666504 7.99984C0.666504 12.0499 3.94975 15.3332 7.99984 15.3332C12.0499 15.3332 15.3332 12.0499 15.3332 7.99984C15.3332 3.94975 12.0499 0.666504 7.99984 0.666504ZM1.99984 7.99984C1.99984 4.68613 4.68613 1.99984 7.99984 1.99984C11.3135 1.99984 13.9998 4.68613 13.9998 7.99984C13.9998 11.3135 11.3135 13.9998 7.99984 13.9998C4.68613 13.9998 1.99984 11.3135 1.99984 7.99984ZM8.6665 7.33317C8.6665 6.96498 8.36803 6.6665 7.99984 6.6665C7.63165 6.6665 7.33317 6.96498 7.33317 7.33317V11.3332C7.33317 11.7014 7.63165 11.9998 7.99984 11.9998C8.36803 11.9998 8.6665 11.7014 8.6665 11.3332V7.33317ZM7.99984 5.33317C8.36803 5.33317 8.6665 5.03469 8.6665 4.6665C8.6665 4.29831 8.36803 3.99984 7.99984 3.99984C7.63165 3.99984 7.33317 4.29831 7.33317 4.6665C7.33317 5.03469 7.63165 5.33317 7.99984 5.33317Z",
2302
+ fill: color
2303
+ }
2304
+ ) }),
2305
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("clipPath", { id: "clip0_418_7746", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("rect", { width: "16", height: "16", fill: "white" }) }) })
2306
+ ] });
2307
+ }
1824
2308
 
1825
- // src/components/EmailModal/StepEmail.tsx
1826
- var import_react10 = require("react");
1827
- var import_jsx_runtime34 = require("react/jsx-runtime");
1828
- function StepEmail(props) {
1829
- const [emailVal, setEmailVal] = (0, import_react10.useState)("");
1830
- (0, import_react10.useEffect)(() => {
1831
- if (props.email) {
1832
- setEmailVal(props.email);
2309
+ // src/components/UsernameModal/index.tsx
2310
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2311
+ var ValidItem = ({
2312
+ success = false,
2313
+ text
2314
+ }) => {
2315
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: `matchid-valid-status-item matchid-valid-status-${success ? "success" : "error"}`, children: [
2316
+ success ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(CheckRoundIcon, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(InfoRoundIcon, { size: 16 }),
2317
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { children: text })
2318
+ ] });
2319
+ };
2320
+ function UsernameModal({
2321
+ title,
2322
+ isOpen,
2323
+ onSuccess,
2324
+ ...props
2325
+ }) {
2326
+ const { username, refreshOverview } = useUserInfo();
2327
+ const { isLogin } = useUserInfo();
2328
+ const [val, setVal] = (0, import_react14.useState)(username);
2329
+ const [error, setError] = (0, import_react14.useState)("");
2330
+ (0, import_react14.useEffect)(() => {
2331
+ if (isOpen) {
2332
+ setVal(username);
2333
+ setError("");
2334
+ }
2335
+ }, [isOpen]);
2336
+ const isValid = (0, import_react14.useMemo)(() => {
2337
+ return isValidUsername(val);
2338
+ }, [val]);
2339
+ const isLength = (0, import_react14.useMemo)(() => {
2340
+ return val.length >= 2 && val.length <= 32;
2341
+ }, [val]);
2342
+ const isSafe = isValid && isLength;
2343
+ const [isSubmitting, setIsSubmitting] = (0, import_react14.useState)(false);
2344
+ const onSubmit = async () => {
2345
+ if (isSubmitting) return;
2346
+ try {
2347
+ setIsSubmitting(true);
2348
+ const res = await setUserNameApi({
2349
+ username: val
2350
+ });
2351
+ if (isSuccess(res)) {
2352
+ await refreshOverview();
2353
+ onSuccess && onSuccess();
2354
+ } else {
2355
+ setError(res.message);
2356
+ }
2357
+ } catch (error2) {
2358
+ setError(error2.message);
2359
+ } finally {
2360
+ setIsSubmitting(false);
1833
2361
  }
1834
- }, []);
1835
- const canContinue = (0, import_react10.useMemo)(() => {
1836
- return isValidEmail(emailVal);
1837
- }, [emailVal]);
1838
- const onContinue = async () => {
1839
- props.onContinue(emailVal);
1840
2362
  };
1841
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "matchid-email-email-box", children: [
1842
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Field, { label: "Email Address", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2363
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || (username ? "Edit User Name" : "Set User Name"), children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "matchid-username-box", children: [
2364
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Field, { label: "User Name", error, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
1843
2365
  Input,
1844
2366
  {
1845
- placeholder: "Enter Your Email Address",
1846
- onChange: (e) => setEmailVal(e.target.value),
1847
- value: emailVal
2367
+ placeholder: "Enter Your User Name",
2368
+ onChange: (e) => {
2369
+ setVal(e.target.value);
2370
+ setError("");
2371
+ },
2372
+ value: val
1848
2373
  }
1849
2374
  ) }),
1850
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { disabled: !canContinue, style: {
2375
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "matchid-valid", children: [
2376
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2377
+ ValidItem,
2378
+ {
2379
+ success: isValid,
2380
+ text: "Name can be composed of numbers and letters as well as characters"
2381
+ }
2382
+ ),
2383
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ValidItem, { success: isLength, text: "No less than 2 characters" })
2384
+ ] }),
2385
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button, { disabled: !isSafe, loading: isSubmitting, style: {
1851
2386
  marginTop: "64px"
1852
- }, onClick: onContinue, size: "lg", block: true, highlight: true, children: "Continue" })
1853
- ] });
2387
+ }, onClick: onSubmit, size: "lg", block: true, highlight: true, children: "Confirm" }),
2388
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button, { style: {
2389
+ marginTop: "24px"
2390
+ }, onClick: props.onClose, size: "lg", block: true, children: "Next Time" })
2391
+ ] }) });
1854
2392
  }
1855
2393
 
1856
- // src/components/EmailModal/StepVerify.tsx
1857
- var import_react11 = require("react");
2394
+ // src/components/EVMModal/index.tsx
2395
+ var import_styles = require("@rainbow-me/rainbowkit/styles.css");
1858
2396
 
1859
- // src/config/index.tsx
1860
- var EMAIL_INTERVAL = 60;
1861
- var EMAIL_CODE_LENGTH = 6;
2397
+ // src/assets/wallet.ts
2398
+ var walletErrorImage = "data:image/png;base64,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";
2399
+ var walletConnectedImage = "data:image/png;base64,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";
2400
+ var walletConnectingImage = "data:image/png;base64,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";
2401
+ var walletConnectImage = "data:image/png;base64,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";
2402
+ var walletSigningImage = "data:image/png;base64,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";
1862
2403
 
1863
- // src/components/EmailModal/StepVerify.tsx
1864
- var import_jsx_runtime35 = require("react/jsx-runtime");
1865
- function StepVerify(props) {
1866
- const { getLoginEmailCode, loginByEmail } = useUserInfo();
1867
- const [error, setError] = (0, import_react11.useState)("");
1868
- const [code, setCode] = (0, import_react11.useState)("");
1869
- const [sending, setSending] = (0, import_react11.useState)(false);
1870
- const [submitting, setSubmitting] = (0, import_react11.useState)(false);
1871
- const sendTimeRef = (0, import_react11.useRef)(0);
1872
- const [sendBtnText, setSendBtnText] = (0, import_react11.useState)("Send");
1873
- const intervalTime = EMAIL_INTERVAL;
1874
- const codeLength = EMAIL_CODE_LENGTH;
1875
- const intervalRef = (0, import_react11.useRef)(null);
1876
- const onSend = async () => {
1877
- if (sendTimeRef.current > 0) {
1878
- return;
2404
+ // src/components/EVMModal/index.tsx
2405
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2406
+ var wagmiConfig = (0, import_rainbowkit.getDefaultConfig)({
2407
+ appName: "MatchID",
2408
+ projectId: "9ac6ea7e07860f04616fb311b447dee9",
2409
+ wallets: [
2410
+ {
2411
+ groupName: "Recommended",
2412
+ wallets: [
2413
+ import_wallets.metaMaskWallet,
2414
+ import_wallets.walletConnectWallet,
2415
+ import_wallets.okxWallet,
2416
+ import_wallets.bitgetWallet,
2417
+ import_wallets.injectedWallet
2418
+ ]
1879
2419
  }
1880
- try {
1881
- setError("");
1882
- setSending(true);
1883
- sendTimeRef.current = intervalTime;
1884
- await getLoginEmailCode(props.email);
1885
- setSendBtnText(`${sendTimeRef.current}s`);
1886
- intervalRef.current = setInterval(() => {
1887
- sendTimeRef.current--;
1888
- setSendBtnText(`${sendTimeRef.current}s`);
1889
- if (sendTimeRef.current <= 0) {
1890
- setSendBtnText("Resend");
1891
- clearInterval(intervalRef.current);
1892
- setSending(false);
1893
- }
1894
- }, 1e3);
1895
- } catch (err) {
1896
- console.error("Send email error", err);
1897
- setError("Failed to send code:" + err.message);
1898
- setSending(false);
2420
+ ],
2421
+ chains: [import_chains.bsc]
2422
+ });
2423
+ function WalletContent({
2424
+ onSuccess,
2425
+ type
2426
+ }) {
2427
+ const config = (0, import_wagmi2.useConfig)();
2428
+ const { openConnectModal, connectModalOpen } = (0, import_rainbowkit.useConnectModal)();
2429
+ const { address } = (0, import_wagmi2.useAccount)();
2430
+ const { disconnect } = (0, import_wagmi2.useDisconnect)({ config });
2431
+ const chainId = (0, import_wagmi2.useChainId)();
2432
+ const { events, login } = useMatch();
2433
+ const [status, setStatus] = (0, import_react15.useState)("");
2434
+ const statusRef = import_react15.default.useRef(status);
2435
+ const [error, setError] = (0, import_react15.useState)("");
2436
+ (0, import_react15.useEffect)(() => {
2437
+ if (openConnectModal) {
2438
+ disconnect();
2439
+ openConnectModal && openConnectModal();
1899
2440
  }
1900
- };
1901
- (0, import_react11.useEffect)(() => {
1902
- onSend();
1903
2441
  return () => {
1904
- if (intervalRef.current) {
1905
- clearInterval(intervalRef.current);
1906
- }
2442
+ address && disconnect();
1907
2443
  };
1908
- }, []);
1909
- const canContinue = (0, import_react11.useMemo)(() => {
1910
- return code.length === codeLength;
1911
- }, [code]);
1912
- const onContinue = async () => {
1913
- if (submitting) {
1914
- return;
2444
+ }, [openConnectModal]);
2445
+ (0, import_wagmi2.useAccountEffect)({
2446
+ onDisconnect() {
2447
+ matchlog_default.log("onDisconnect");
2448
+ setStatus("");
2449
+ statusRef.current = "";
2450
+ },
2451
+ onConnect(data) {
2452
+ matchlog_default.log("onConnect", data, status);
2453
+ setStatus("");
2454
+ statusRef.current = "";
2455
+ toLoginInWallet(data);
1915
2456
  }
2457
+ });
2458
+ const toLoginInWallet = async (data) => {
2459
+ if (statusRef.current) return;
1916
2460
  try {
1917
- setError("");
1918
- setSubmitting(true);
1919
- const res = await loginByEmail({
1920
- email: props.email,
1921
- code
1922
- });
1923
- if (res) {
1924
- props.onSuccess && props.onSuccess();
2461
+ const signer = await getEthersSigner(config);
2462
+ if (!signer || !chainId || !data.address) return;
2463
+ setStatus("nonce");
2464
+ statusRef.current = "nonce";
2465
+ const res = type == "bind" ? await getWalletInitApi({ address: data.address }) : await getWalletNonceApi({ address: data.address });
2466
+ if (!isSuccess(res)) {
2467
+ throw new Error(res.message);
1925
2468
  }
1926
- setSubmitting(false);
1927
- } catch (err) {
1928
- console.error("Verify email code error", err);
1929
- setError(err.message);
1930
- setSubmitting(false);
1931
- }
1932
- };
1933
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "matchid-email-verify-box", children: [
1934
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "matchid-email-verify-header", children: [
1935
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "matchid-email-verify-header-icon", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(EmailLineIcon, {}) }),
1936
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "matchid-email-verify-header-content", children: [
1937
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "matchid-email-verify-header-value", children: props.email }),
1938
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "matchid-email-verify-header-tips", children: "We have sent a verification code to your email" })
1939
- ] })
1940
- ] }),
1941
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Field, { label: "Verification Code", error, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1942
- Input,
1943
- {
1944
- placeholder: "Enter the code",
1945
- maxLength: codeLength,
1946
- onChange: (e) => setCode(e.target.value),
1947
- value: code,
1948
- after: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1949
- Button,
1950
- {
1951
- highlight: true,
1952
- disabled: sending,
1953
- style: {
1954
- height: "100%",
1955
- borderTopLeftRadius: 0,
1956
- borderBottomLeftRadius: 0,
1957
- borderTopRightRadius: "inherit",
1958
- borderBottomRightRadius: "inherit",
1959
- width: "80px"
1960
- },
1961
- onClick: onSend,
1962
- children: sendBtnText
2469
+ const domain = window.location.host;
2470
+ const origin = window.location.origin;
2471
+ const nonce = res.code >= 0 ? res.data.nonce : null;
2472
+ if (nonce) {
2473
+ setStatus("signer");
2474
+ statusRef.current = "signer";
2475
+ const params = {
2476
+ domain,
2477
+ address: data.address,
2478
+ statement: "By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.",
2479
+ uri: origin,
2480
+ nonce,
2481
+ version: "1",
2482
+ chainId
2483
+ };
2484
+ const message = new import_siwe.SiweMessage({ ...params });
2485
+ const signature = await signer.signMessage(message.prepareMessage());
2486
+ let obj = {
2487
+ type: "EVM",
2488
+ address: data.address,
2489
+ signature,
2490
+ message: `${message.prepareMessage()}`,
2491
+ connector_type: data.connector.type || "",
2492
+ wallet_client_type: data.connector.name || ""
2493
+ };
2494
+ const res2 = type == "bind" ? await toBindWalletApi(obj) : await loginByWalletApi(obj);
2495
+ if (res2) {
2496
+ if (!isSuccess(res2)) {
2497
+ throw new Error(res2.message);
1963
2498
  }
1964
- )
1965
- }
1966
- ) }),
1967
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Button, { disabled: !canContinue, highlight: true, block: true, size: "lg", onClick: onContinue, children: "Continue" })
1968
- ] });
1969
- }
1970
-
1971
- // src/components/EmailModal/index.tsx
1972
- var import_jsx_runtime36 = require("react/jsx-runtime");
1973
- function EmailModal({
1974
- isOpen = false,
1975
- width = 480,
1976
- onClose,
1977
- onBack,
1978
- onLogin
1979
- }) {
1980
- const [step, setStep] = (0, import_react12.useState)("input");
1981
- const [emailVal, setEmailVal] = (0, import_react12.useState)("");
1982
- (0, import_react12.useEffect)(() => {
1983
- if (!isOpen) {
1984
- setStep("input");
1985
- setEmailVal("");
1986
- }
1987
- }, [isOpen]);
1988
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1989
- ModalWithHeader,
1990
- {
1991
- isOpen,
1992
- width,
1993
- onClose,
1994
- title: "Email",
1995
- onBack: step == "verify" ? () => setStep("input") : onBack,
1996
- children: step === "input" ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(StepEmail, { email: emailVal, onContinue: (email) => {
1997
- setEmailVal(email);
1998
- setStep("verify");
1999
- } }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(StepVerify, { email: emailVal, onSuccess: onLogin })
2000
- }
2001
- );
2002
- }
2003
-
2004
- // src/components/Popover/index.tsx
2005
- var import_react13 = require("react");
2006
- var import_jsx_runtime37 = require("react/jsx-runtime");
2007
- function Popover({
2008
- children,
2009
- content,
2010
- position = "right",
2011
- type = "hover",
2012
- className = "",
2013
- gap = "20px"
2014
- }) {
2015
- const [active, setActive] = (0, import_react13.useState)(false);
2016
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2017
- "div",
2018
- {
2019
- onClick: () => {
2020
- if (type == "click") {
2021
- setActive(!active);
2499
+ matchlog_default.log(res2);
2500
+ setStatus("success");
2501
+ statusRef.current = "success";
2502
+ if (type == "bind") {
2503
+ events.onBind && events.onBind({
2504
+ type: "evm"
2505
+ });
2506
+ eventManager_default.emit("onBind", {
2507
+ type: "evm"
2508
+ });
2509
+ } else {
2510
+ await login({
2511
+ mid: res2.data.mid,
2512
+ token: `${res2.data.token_type} ${res2.data.access_token}`
2513
+ });
2514
+ }
2515
+ onSuccess && onSuccess();
2022
2516
  }
2023
- },
2024
- className: `matchid-popover-box matchid-popover-${position} matchid-popover-${type} ${className} ${type == "click" && active ? "matchid-popover-click-active" : ""}`,
2025
- children: [
2026
- children,
2027
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { style: {
2028
- paddingTop: gap
2029
- }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: `matchid-popover-content`, children: content }) })
2030
- ]
2031
- }
2032
- );
2033
- }
2034
-
2035
- // src/components/LoginBox/index.tsx
2036
- var import_react14 = require("react");
2037
- var import_jsx_runtime38 = require("react/jsx-runtime");
2038
- function LoginBox({
2039
- methods,
2040
- inModal = false
2041
- }) {
2042
- const [emailOpen, setEmailOpen] = (0, import_react14.useState)(false);
2043
- const { login } = useUserInfo();
2044
- const defaultMethods = [
2045
- "wallet",
2046
- "google",
2047
- "email",
2048
- "telegram",
2049
- "twitter"
2050
- ];
2051
- const methodList = (0, import_react14.useMemo)(() => {
2052
- return methods || defaultMethods;
2053
- }, [methods]);
2054
- const LoginItem = ({
2055
- icon,
2056
- name,
2057
- onClick
2058
- }) => {
2059
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "matchid-login-method", onClick, children: [
2060
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "matchid-login-method-content", children: [
2061
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "matchid-login-method-icon", children: icon }),
2062
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "matchid-login-method-name", children: name })
2063
- ] }),
2064
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ArrowRightIcon, { className: "matchid-login-method-arrow", size: 20, color: "var(--matchid-arrow-color)" })
2065
- ] });
2066
- };
2067
- const methodMap = {
2068
- wallet: {
2069
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(WalletIcon, {}),
2070
- name: "Wallet",
2071
- onClick: () => login("wallet")
2072
- },
2073
- email: {
2074
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(EmailIcon, {}),
2075
- name: "Email",
2076
- onClick: () => {
2077
- setEmailOpen(true);
2078
2517
  }
2079
- },
2080
- google: {
2081
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(GoogleIcon, {}),
2082
- name: "Google",
2083
- onClick: () => login("google")
2084
- },
2085
- twitter: {
2086
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(XIcon, {}),
2087
- name: "X",
2088
- onClick: () => login("twitter")
2089
- },
2090
- telegram: {
2091
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TelegramIcon, {}),
2092
- name: "Telegram",
2093
- onClick: () => login("telegram")
2094
- },
2095
- github: {
2096
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(GithubIcon, {}),
2097
- name: "Github",
2098
- onClick: () => login("github")
2099
- },
2100
- discord: {
2101
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(DiscordIcon, {}),
2102
- name: "Discord",
2103
- onClick: () => login("discord")
2518
+ } catch (error2) {
2519
+ setStatus("error");
2520
+ setError(error2.message);
2521
+ statusRef.current = "";
2104
2522
  }
2105
2523
  };
2106
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
2107
- (!inModal || !emailOpen) && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "matchid-login-box", children: methodList.map((m) => {
2108
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2109
- LoginItem,
2110
- {
2111
- icon: methodMap[m].icon,
2112
- name: methodMap[m].name,
2113
- onClick: methodMap[m].onClick
2524
+ const pageData = (0, import_react15.useMemo)(() => {
2525
+ if (status == "success") {
2526
+ return {
2527
+ btnText: "Disconnect Wallet",
2528
+ btnClick: () => {
2529
+ disconnect();
2114
2530
  },
2115
- m
2116
- );
2117
- }) }),
2118
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2119
- EmailModal,
2531
+ text: "Wallet connection successful!",
2532
+ statusImage: walletConnectedImage
2533
+ };
2534
+ }
2535
+ if (status == "error") {
2536
+ return {
2537
+ text: error,
2538
+ btnText: "Reconnect Wallet",
2539
+ btnClick: async () => {
2540
+ setError("");
2541
+ disconnect();
2542
+ openConnectModal && openConnectModal();
2543
+ },
2544
+ statusImage: walletErrorImage,
2545
+ isError: true
2546
+ };
2547
+ }
2548
+ if (status == "nonce") {
2549
+ return {
2550
+ btnLoading: true,
2551
+ text: "Connecting",
2552
+ statusImage: walletConnectingImage
2553
+ };
2554
+ }
2555
+ if (status == "signer") {
2556
+ return {
2557
+ btnLoading: true,
2558
+ text: "Signing",
2559
+ statusImage: walletSigningImage
2560
+ };
2561
+ }
2562
+ if (connectModalOpen) {
2563
+ return {
2564
+ btnLoading: true,
2565
+ text: "Connecting",
2566
+ statusImage: walletConnectingImage
2567
+ };
2568
+ }
2569
+ return {
2570
+ btnText: "Connect Wallet",
2571
+ btnClick: () => {
2572
+ openConnectModal && openConnectModal();
2573
+ },
2574
+ text: "Please Connect your wallet",
2575
+ statusImage: walletConnectImage
2576
+ };
2577
+ }, [connectModalOpen, status, error, address]);
2578
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "matchid-wallet-container", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: `matchid-wallet-box`, children: [
2579
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: `matchid-wallet-content`, children: [
2580
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("img", { src: pageData.statusImage }),
2581
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: pageData.isError ? "text-[#F7585E]" : "", children: pageData.text })
2582
+ ] }),
2583
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2584
+ Button,
2120
2585
  {
2121
- isOpen: emailOpen,
2122
- onClose: () => {
2123
- setEmailOpen(false);
2124
- },
2125
- onBack: inModal ? () => {
2126
- setEmailOpen(false);
2127
- } : void 0
2586
+ block: true,
2587
+ size: "lg",
2588
+ onClick: pageData.btnClick,
2589
+ loading: pageData.btnLoading,
2590
+ disabled: pageData.btnDisabled,
2591
+ children: pageData.btnText
2128
2592
  }
2129
2593
  )
2130
- ] });
2594
+ ] }) });
2131
2595
  }
2132
-
2133
- // src/components/LoginButton/index.tsx
2134
- var import_react16 = require("react");
2135
-
2136
- // src/components/LoginPanel/index.tsx
2137
- var import_jsx_runtime39 = require("react/jsx-runtime");
2138
- function LoginPanel({
2139
- header,
2140
- onClose,
2596
+ function EVMModal({
2597
+ type = "login",
2598
+ onSuccess,
2141
2599
  ...props
2142
2600
  }) {
2143
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "matchid-login-panel", children: [
2144
- header ? header : /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "matchid-login-panel-header", children: [
2145
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "matchid-login-panel-header-content", children: [
2146
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "matchid-login-panel-header-title", children: "Log in / Sign up" }),
2147
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "matchid-login-panel-header-subtilte", children: "You can use the following methods" })
2148
- ] }),
2149
- onClose && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "matchid-login-panel-header-close", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(CloseRoundIcon, {}) })
2150
- ] }),
2151
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "matchid-login-panel-divide" }),
2152
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(LoginBox, { ...props })
2153
- ] });
2601
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ModalWithHeader, { ...props, title: props.title || firstUpperCase(type + " EVM Wallet"), children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_wagmi2.WagmiProvider, { config: wagmiConfig, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_rainbowkit.RainbowKitProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(WalletContent, { onSuccess, type }) }) }) });
2154
2602
  }
2155
2603
 
2156
- // src/components/LoginModal/index.tsx
2157
- var import_jsx_runtime40 = require("react/jsx-runtime");
2158
- function LoginModal({
2159
- isOpen = false,
2160
- width = 480,
2161
- ...props
2604
+ // src/components/SOLModal/index.tsx
2605
+ var import_react16 = __toESM(require("react"));
2606
+ var import_web3 = require("@solana/web3.js");
2607
+ var import_wallet_adapter_react = require("@solana/wallet-adapter-react");
2608
+ var import_wallet_adapter_react_ui = require("@solana/wallet-adapter-react-ui");
2609
+
2610
+ // node_modules/@solana/wallet-adapter-base/lib/esm/types.js
2611
+ var WalletAdapterNetwork;
2612
+ (function(WalletAdapterNetwork2) {
2613
+ WalletAdapterNetwork2["Mainnet"] = "mainnet-beta";
2614
+ WalletAdapterNetwork2["Testnet"] = "testnet";
2615
+ WalletAdapterNetwork2["Devnet"] = "devnet";
2616
+ })(WalletAdapterNetwork || (WalletAdapterNetwork = {}));
2617
+
2618
+ // src/components/SOLModal/index.tsx
2619
+ var import_wallet_adapter_wallets = require("@solana/wallet-adapter-wallets");
2620
+ var import_styles2 = require("@solana/wallet-adapter-react-ui/styles.css");
2621
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2622
+ function WalletContent2({
2623
+ onSuccess,
2624
+ type
2162
2625
  }) {
2163
- const { isLogin } = useUserInfo();
2164
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2165
- Modal,
2166
- {
2167
- isOpen: isOpen && !isLogin,
2168
- width,
2169
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(LoginPanel, { ...props, inModal: true })
2626
+ const { setVisible, visible } = (0, import_wallet_adapter_react_ui.useWalletModal)();
2627
+ const wallet = (0, import_wallet_adapter_react.useWallet)();
2628
+ const { events, login } = useMatch();
2629
+ const [status, setStatus] = (0, import_react16.useState)("");
2630
+ const statusRef = import_react16.default.useRef(status);
2631
+ const [error, setError] = (0, import_react16.useState)("");
2632
+ (0, import_react16.useEffect)(() => {
2633
+ const init = async () => {
2634
+ await wallet.disconnect();
2635
+ setVisible(true);
2636
+ };
2637
+ init();
2638
+ }, []);
2639
+ (0, import_react16.useEffect)(() => {
2640
+ if (wallet.connected) {
2641
+ console.log("wallet.connected", wallet.connected);
2642
+ toLoginInWallet();
2643
+ }
2644
+ }, [wallet.connected]);
2645
+ const toLoginInWallet = async () => {
2646
+ if (statusRef.current) return;
2647
+ const address = wallet.publicKey?.toBase58() || "";
2648
+ try {
2649
+ setStatus("nonce");
2650
+ statusRef.current = "nonce";
2651
+ const res = type == "bind" ? await getWalletInitApi({ address }) : await getWalletNonceApi({ address });
2652
+ if (!isSuccess(res)) {
2653
+ throw new Error(res.message);
2654
+ }
2655
+ const nonce = res.code >= 0 ? res.data.nonce : null;
2656
+ if (nonce) {
2657
+ setStatus("signer");
2658
+ statusRef.current = "signer";
2659
+ const message = "By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.Nonce:" + res.data.nonce;
2660
+ const encodedMessage = new TextEncoder().encode(message);
2661
+ const signedMessage = await wallet.signMessage(encodedMessage);
2662
+ let obj = {
2663
+ type: "SOL",
2664
+ address,
2665
+ signature: Buffer.from(signedMessage).toString("base64"),
2666
+ message,
2667
+ connector_type: "SOL",
2668
+ wallet_client_type: wallet.wallet?.adapter.name || ""
2669
+ };
2670
+ const res1 = type == "bind" ? await toBindWalletApi(obj) : await loginByWalletApi(obj);
2671
+ if (res1) {
2672
+ if (!isSuccess(res1)) {
2673
+ throw new Error(res1.message);
2674
+ }
2675
+ matchlog_default.log(res1);
2676
+ setStatus("success");
2677
+ statusRef.current = "success";
2678
+ if (type == "bind") {
2679
+ events.onBind && events.onBind({
2680
+ type: "sol"
2681
+ });
2682
+ eventManager_default.emit("onBind", {
2683
+ type: "sol"
2684
+ });
2685
+ } else {
2686
+ await login({
2687
+ mid: res1.data.mid,
2688
+ token: `${res1.data.token_type} ${res1.data.access_token}`
2689
+ });
2690
+ }
2691
+ onSuccess && onSuccess();
2692
+ }
2693
+ }
2694
+ } catch (error2) {
2695
+ setStatus("error");
2696
+ setError(error2.message);
2697
+ statusRef.current = "";
2170
2698
  }
2171
- );
2699
+ };
2700
+ const pageData = (0, import_react16.useMemo)(() => {
2701
+ if (status == "success") {
2702
+ return {
2703
+ btnText: "Disconnect Wallet",
2704
+ btnClick: async () => {
2705
+ await wallet.disconnect();
2706
+ },
2707
+ text: "Wallet connection successful!",
2708
+ statusImage: walletConnectedImage
2709
+ };
2710
+ }
2711
+ if (status == "error") {
2712
+ return {
2713
+ text: error,
2714
+ btnText: "Reconnect Wallet",
2715
+ btnClick: async () => {
2716
+ setError("");
2717
+ await wallet.disconnect();
2718
+ setVisible(true);
2719
+ },
2720
+ statusImage: walletErrorImage,
2721
+ isError: true
2722
+ };
2723
+ }
2724
+ if (status == "nonce") {
2725
+ return {
2726
+ btnLoading: true,
2727
+ text: "Connecting",
2728
+ statusImage: walletConnectingImage
2729
+ };
2730
+ }
2731
+ if (status == "signer") {
2732
+ return {
2733
+ btnLoading: true,
2734
+ text: "Signing",
2735
+ statusImage: walletSigningImage
2736
+ };
2737
+ }
2738
+ if (visible) {
2739
+ return {
2740
+ btnLoading: true,
2741
+ text: "Connecting",
2742
+ statusImage: walletConnectingImage
2743
+ };
2744
+ }
2745
+ return {
2746
+ btnText: "Connect Wallet",
2747
+ btnClick: () => {
2748
+ setVisible(true);
2749
+ },
2750
+ text: "Please Connect your wallet",
2751
+ statusImage: walletConnectImage
2752
+ };
2753
+ }, [visible, wallet.connected, status, error, wallet.publicKey]);
2754
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "matchid-wallet-container", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: `matchid-wallet-box`, children: [
2755
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: `matchid-wallet-content`, children: [
2756
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("img", { src: pageData.statusImage }),
2757
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: pageData.isError ? "text-[#F7585E]" : "", children: pageData.text })
2758
+ ] }),
2759
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2760
+ Button,
2761
+ {
2762
+ block: true,
2763
+ size: "lg",
2764
+ onClick: pageData.btnClick,
2765
+ loading: pageData.btnLoading,
2766
+ disabled: pageData.btnDisabled,
2767
+ children: pageData.btnText
2768
+ }
2769
+ )
2770
+ ] }) });
2771
+ }
2772
+ var wallets = [
2773
+ new import_wallet_adapter_wallets.PhantomWalletAdapter(),
2774
+ new import_wallet_adapter_wallets.SolflareWalletAdapter(),
2775
+ new import_wallet_adapter_wallets.WalletConnectWalletAdapter({
2776
+ network: WalletAdapterNetwork.Mainnet,
2777
+ options: {
2778
+ relayUrl: "wss://relay.walletconnect.com"
2779
+ }
2780
+ }),
2781
+ new import_wallet_adapter_wallets.AlphaWalletAdapter(),
2782
+ new import_wallet_adapter_wallets.AvanaWalletAdapter(),
2783
+ new import_wallet_adapter_wallets.BitgetWalletAdapter(),
2784
+ new import_wallet_adapter_wallets.BitpieWalletAdapter(),
2785
+ new import_wallet_adapter_wallets.CloverWalletAdapter(),
2786
+ new import_wallet_adapter_wallets.Coin98WalletAdapter(),
2787
+ new import_wallet_adapter_wallets.CoinbaseWalletAdapter(),
2788
+ new import_wallet_adapter_wallets.CoinhubWalletAdapter(),
2789
+ new import_wallet_adapter_wallets.FractalWalletAdapter(),
2790
+ new import_wallet_adapter_wallets.HuobiWalletAdapter(),
2791
+ new import_wallet_adapter_wallets.HyperPayWalletAdapter(),
2792
+ new import_wallet_adapter_wallets.KeystoneWalletAdapter(),
2793
+ new import_wallet_adapter_wallets.KrystalWalletAdapter(),
2794
+ new import_wallet_adapter_wallets.LedgerWalletAdapter(),
2795
+ new import_wallet_adapter_wallets.MathWalletAdapter(),
2796
+ new import_wallet_adapter_wallets.NekoWalletAdapter(),
2797
+ new import_wallet_adapter_wallets.NightlyWalletAdapter(),
2798
+ new import_wallet_adapter_wallets.NufiWalletAdapter(),
2799
+ new import_wallet_adapter_wallets.OntoWalletAdapter(),
2800
+ new import_wallet_adapter_wallets.ParticleAdapter(),
2801
+ new import_wallet_adapter_wallets.SafePalWalletAdapter(),
2802
+ new import_wallet_adapter_wallets.SaifuWalletAdapter(),
2803
+ new import_wallet_adapter_wallets.SalmonWalletAdapter(),
2804
+ new import_wallet_adapter_wallets.SkyWalletAdapter(),
2805
+ new import_wallet_adapter_wallets.SolongWalletAdapter(),
2806
+ new import_wallet_adapter_wallets.SpotWalletAdapter(),
2807
+ new import_wallet_adapter_wallets.TokenaryWalletAdapter(),
2808
+ new import_wallet_adapter_wallets.TokenPocketWalletAdapter(),
2809
+ new import_wallet_adapter_wallets.TorusWalletAdapter(),
2810
+ new import_wallet_adapter_wallets.TrezorWalletAdapter(),
2811
+ new import_wallet_adapter_wallets.TrustWalletAdapter(),
2812
+ new import_wallet_adapter_wallets.XDEFIWalletAdapter()
2813
+ ];
2814
+ function SOLModal({
2815
+ type = "login",
2816
+ onSuccess,
2817
+ ...props
2818
+ }) {
2819
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ModalWithHeader, { ...props, title: props.title || firstUpperCase(type + " SOL Wallet"), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_wallet_adapter_react.ConnectionProvider, { endpoint: (0, import_web3.clusterApiUrl)("devnet"), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_wallet_adapter_react.WalletProvider, { wallets, autoConnect: true, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_wallet_adapter_react_ui.WalletModalProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(WalletContent2, { onSuccess, type }) }) }) }) });
2172
2820
  }
2173
2821
 
2174
- // src/components/UserPopover/index.tsx
2175
- var import_react15 = require("react");
2176
-
2177
- // src/assets/icon/ProfileIcon.tsx
2178
- var import_jsx_runtime41 = require("react/jsx-runtime");
2179
- function ProfileIcon({ size = 24, color = "black", ...props }) {
2180
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
2181
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2182
- "path",
2822
+ // src/context/BusinessProvider.tsx
2823
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2824
+ function BusinessProvider({ children }) {
2825
+ const { overview, token } = useUserInfo();
2826
+ const { recoveryModal } = useStore_default();
2827
+ const { type: EVMType, isOpen: EVMIsOpen, close: EVMClose } = useEVMModalStore();
2828
+ const { type: SOLType, isOpen: SOLIsOpen, close: SOLClose } = useSOLModalStore();
2829
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
2830
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PasswordModal, { isOpen: !!token && !!overview && !overview.address && !!overview.did, showClose: false }),
2831
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2832
+ RecoveryModal,
2183
2833
  {
2184
- fillRule: "evenodd",
2185
- clipRule: "evenodd",
2186
- d: "M7.5 6.75C7.5 4.95507 8.95507 3.5 10.75 3.5C12.5449 3.5 14 4.95507 14 6.75C14 8.54493 12.5449 10 10.75 10C8.95507 10 7.5 8.54493 7.5 6.75ZM10.75 2C8.12665 2 6 4.12665 6 6.75C6 9.37335 8.12665 11.5 10.75 11.5C13.3734 11.5 15.5 9.37335 15.5 6.75C15.5 4.12665 13.3734 2 10.75 2ZM8.75 13C5.57436 13 3 15.5744 3 18.75V19.75C3 20.7165 3.7835 21.5 4.75 21.5H13.6646L13.0292 20.8646C12.7764 20.6118 12.5733 20.3185 12.4263 20H4.75C4.61193 20 4.5 19.8881 4.5 19.75V18.75C4.5 16.4028 6.40279 14.5 8.75 14.5H12.6452C13.0508 13.8858 13.676 13.4295 14.4091 13.243C13.8838 13.0849 13.3268 13 12.75 13H8.75Z",
2187
- fill: color
2834
+ isOpen: !!token && !!overview && !!overview.address && recoveryModal.open,
2835
+ onClose: recoveryModal.close,
2836
+ onSuccess: recoveryModal.success
2188
2837
  }
2189
2838
  ),
2190
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2191
- "path",
2839
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2840
+ EVMModal,
2192
2841
  {
2193
- fillRule: "evenodd",
2194
- clipRule: "evenodd",
2195
- d: "M19.0677 22.4771L21.4771 20.0677C21.841 19.7038 21.841 19.1139 21.4771 18.75L17.75 15.0229C17.5753 14.8482 17.3383 14.75 17.0911 14.75H14.6818C14.1672 14.75 13.75 15.1672 13.75 15.6818V18.0911C13.75 18.3383 13.8482 18.5753 14.0229 18.75L17.75 22.4771C18.1139 22.841 18.7038 22.841 19.0677 22.4771ZM15.6135 17.3124C15.9995 17.3124 16.3124 16.9995 16.3124 16.6135C16.3124 16.2276 15.9995 15.9147 15.6135 15.9147C15.2276 15.9147 14.9147 16.2276 14.9147 16.6135C14.9147 16.9995 15.2276 17.3124 15.6135 17.3124Z",
2196
- fill: color
2842
+ isOpen: EVMIsOpen && (EVMType == "login" && !overview && !token || EVMType == "bind" && !!token && !!overview),
2843
+ onClose: EVMClose,
2844
+ type: EVMType,
2845
+ onSuccess: EVMClose,
2846
+ zIndex: 199
2197
2847
  }
2198
- )
2848
+ ),
2849
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2850
+ SOLModal,
2851
+ {
2852
+ isOpen: SOLIsOpen && (SOLType == "login" && !overview && !token || SOLType == "bind" && !!token && !!overview),
2853
+ onClose: SOLClose,
2854
+ type: SOLType,
2855
+ onSuccess: SOLClose,
2856
+ zIndex: 199
2857
+ }
2858
+ ),
2859
+ children
2199
2860
  ] });
2200
2861
  }
2201
2862
 
2202
- // src/components/UserPopover/index.tsx
2203
- var import_jsx_runtime42 = require("react/jsx-runtime");
2204
- function UserContent() {
2205
- const { logout, address, username } = useUserInfo();
2206
- const [logouting, setLogouting] = (0, import_react15.useState)(false);
2207
- const onLogout = async () => {
2208
- if (logouting) return;
2209
- try {
2210
- setLogouting(true);
2211
- await logout();
2212
- } catch (error) {
2213
- console.error(error);
2214
- } finally {
2215
- setLogouting(false);
2863
+ // src/context/index.tsx
2864
+ var import_jsx_runtime47 = (
2865
+ // <MpcWalletProvider>
2866
+ require("react/jsx-runtime")
2867
+ );
2868
+ var Providers = ({ children }) => {
2869
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(BusinessProvider, { children });
2870
+ };
2871
+ var context_default = Providers;
2872
+
2873
+ // src/hooks/useWalletInit.ts
2874
+ var import_react17 = require("react");
2875
+ var AppClientId2 = "react-sdk-" + getVersion();
2876
+ function useWalletInit({
2877
+ refreshOverview
2878
+ }) {
2879
+ const { endpoints } = useLocalStore_default();
2880
+ const getWalletIframe = () => {
2881
+ return document.getElementById("match-wallet");
2882
+ };
2883
+ const [walletInited, setWalletInited] = (0, import_react17.useState)(false);
2884
+ const { appid, token, overview } = useLocalStore_default();
2885
+ const { initWallet, generateWallet } = useWallet();
2886
+ (0, import_react17.useEffect)(() => {
2887
+ if (endpoints.auth) {
2888
+ if (!window.matchWalletMessageIdMap) {
2889
+ window.matchWalletMessageIdMap = {};
2890
+ }
2891
+ const existingIframe = getWalletIframe();
2892
+ if (!existingIframe) {
2893
+ const iframe = document.createElement("iframe");
2894
+ iframe.id = "match-wallet";
2895
+ iframe.src = endpoints.auth + "wallet";
2896
+ iframe.style.display = "none";
2897
+ iframe.style.width = "0";
2898
+ iframe.style.height = "0";
2899
+ document.body.insertBefore(iframe, document.body.firstChild);
2900
+ window.sendMatchWalletMessage = (method, data) => {
2901
+ const messageId = Date.now().toString() + Math.random().toString().slice(6);
2902
+ const message = {
2903
+ method,
2904
+ data,
2905
+ messageId,
2906
+ source: "matchid"
2907
+ };
2908
+ if (document.getElementById("match-wallet")) {
2909
+ matchlog_default.log("matchid.sdk.sendMatchWalletMessage", message, endpoints.auth);
2910
+ getWalletIframe()?.contentWindow?.postMessage(message, endpoints.auth);
2911
+ return messageId;
2912
+ }
2913
+ console.error("not found iframe");
2914
+ return false;
2915
+ };
2916
+ window.waitMatchUntilWalletMessage = async (method, data, timeout = 3e4) => {
2917
+ return new Promise((resolve, reject) => {
2918
+ const messageId = window.sendMatchWalletMessage(method, data);
2919
+ if (!messageId) {
2920
+ console.error("Can't find wallet message");
2921
+ reject(new Error("Can't find wallet message"));
2922
+ return;
2923
+ }
2924
+ window.matchWalletMessageIdMap[messageId] = { resolve, reject };
2925
+ window.matchWalletMessageIdMap[messageId].timeout = setTimeout(() => {
2926
+ console.error("Get wallet result timeout", {
2927
+ messageId,
2928
+ method,
2929
+ data
2930
+ });
2931
+ delete window.matchWalletMessageIdMap[messageId];
2932
+ reject(new Error("Get wallet result timeout"));
2933
+ }, timeout);
2934
+ });
2935
+ };
2936
+ } else {
2937
+ if (existingIframe.src !== endpoints.auth + "wallet") {
2938
+ setWalletInited(false);
2939
+ existingIframe.src = endpoints.auth + "wallet";
2940
+ }
2941
+ }
2942
+ }
2943
+ }, [endpoints.auth]);
2944
+ (0, import_react17.useEffect)(() => {
2945
+ const messageHandle = async (e) => {
2946
+ if (e.origin !== endpoints.auth.substring(0, endpoints.auth.length - 1)) {
2947
+ return;
2948
+ }
2949
+ const res = e.data;
2950
+ if (res.source != "match-wallet") {
2951
+ return;
2952
+ }
2953
+ matchlog_default.log("sdk.wallet.receive", e);
2954
+ const messageId = res.messageId;
2955
+ if (messageId == "init") {
2956
+ matchlog_default.log("wallet init");
2957
+ setWalletInited(true);
2958
+ return;
2959
+ }
2960
+ if (messageId && window.matchWalletMessageIdMap[messageId]) {
2961
+ const { resolve, reject, timeout } = window.matchWalletMessageIdMap[messageId];
2962
+ delete window.matchWalletMessageIdMap[messageId];
2963
+ clearTimeout(timeout);
2964
+ if (res.status == "success") {
2965
+ resolve(res.data);
2966
+ } else {
2967
+ console.error("qwe-waller-error", res);
2968
+ reject(new Error(res.data.message));
2969
+ }
2970
+ }
2971
+ };
2972
+ window.addEventListener("message", messageHandle);
2973
+ return () => {
2974
+ window.removeEventListener("message", messageHandle);
2975
+ };
2976
+ }, []);
2977
+ (0, import_react17.useEffect)(() => {
2978
+ if (token && overview && overview.did && walletInited) {
2979
+ const did = overview.did.split(":")[2];
2980
+ const newUserInit = async () => {
2981
+ await window.waitMatchUntilWalletMessage(
2982
+ "initCore",
2983
+ {
2984
+ AppId: appid,
2985
+ AppClientId: AppClientId2,
2986
+ UserId: did,
2987
+ AccessToken: token,
2988
+ Address: ""
2989
+ }
2990
+ );
2991
+ };
2992
+ if (!overview.address) {
2993
+ newUserInit();
2994
+ } else {
2995
+ initWallet({
2996
+ address: overview.address,
2997
+ did
2998
+ });
2999
+ }
2216
3000
  }
3001
+ }, [overview, token, walletInited]);
3002
+ return {
3003
+ walletInited
2217
3004
  };
2218
- const UserItem = ({
2219
- children,
2220
- icon,
2221
- rightIcon,
2222
- onClick
2223
- }) => {
2224
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "matchid-user-popover-item", onClick, children: [
2225
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: `matchid-user-popover-item-content`, children: [
2226
- icon,
2227
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "matchid-user-popover-item-text", children })
2228
- ] }),
2229
- rightIcon
2230
- ] });
2231
- };
2232
- const UserDivider = () => {
2233
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: `matchid-user-popover-divider` });
2234
- };
2235
- const [usernameOpen, setUsernameOpen] = (0, import_react15.useState)(false);
2236
- const [copied, setCopied] = useCopyClipboard();
2237
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "matchid-user-popover-content", children: [
2238
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "matchid-user-popover-list", children: [
2239
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(UserItem, { onClick: () => {
2240
- setCopied(address);
2241
- }, icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(CheckIcon, { size: 20, color: "#0ecb81" }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(CopyIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(CheckIcon, { size: 20, color: "var(--icon-color)" }), children: truncateAddress(address) }),
2242
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(UserDivider, {}),
2243
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(UserItem, { onClick: () => {
2244
- setUsernameOpen(true);
2245
- }, icon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ProfileIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ArrowRightIcon, { size: 20, color: "var(--icon-color)" }), children: username || "Set a username" })
2246
- ] }),
2247
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Button, { onClick: onLogout, loading: logouting, children: "Disconnect" }),
2248
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(UsernameModal, { isOpen: usernameOpen, onClose: () => {
2249
- setUsernameOpen(false);
2250
- }, onSuccess: () => {
2251
- setUsernameOpen(false);
2252
- } })
2253
- ] });
2254
- }
2255
- function UserPopover({
2256
- children,
2257
- ...props
2258
- }) {
2259
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Popover, { ...props, content: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(UserContent, {}), children });
2260
3005
  }
2261
3006
 
2262
- // src/components/LoginButton/index.tsx
2263
- var import_jsx_runtime43 = require("react/jsx-runtime");
2264
- function LoginButton({
2265
- loginRender,
2266
- methods,
2267
- onLoginClick,
2268
- popoverPosition = "right",
2269
- popoverType = "hover",
2270
- popoverGap = 20,
2271
- ...props
2272
- }) {
2273
- const { isLogin, username } = useUserInfo();
2274
- const [loginOpen, setLoginOpen] = (0, import_react16.useState)(false);
2275
- if (!isLogin) {
2276
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
2277
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(LoginModal, { methods, isOpen: loginOpen, onClose: () => setLoginOpen(false) }),
2278
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Button, { className: "matchid-unlogin-btn", ...props, highlight: true, onClick: () => setLoginOpen(true), children: [
2279
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(UnLoginIcon_default, {}),
2280
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { children: "Login" })
2281
- ] })
2282
- ] });
2283
- }
2284
- return loginRender ? { loginRender } : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(UserPopover, { position: popoverPosition, type: popoverType, gap: popoverGap, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(Button, { onClick: onLoginClick, className: "matchid-login-btn", ...props, children: [
2285
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(LoginIcon_default, {}),
2286
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { children: username ? truncateAddress(username) : "MatchID User" })
2287
- ] }) });
2288
- }
2289
-
2290
- // src/components/UsernameModal/index.tsx
2291
- var import_react17 = require("react");
2292
-
2293
- // src/assets/icon/InfoRoundIcon.tsx
2294
- var import_jsx_runtime44 = require("react/jsx-runtime");
2295
- function InfoRoundIcon({
2296
- size,
2297
- color = "#6E6E6E",
2298
- ...props
3007
+ // src/hooks/useInit.tsx
3008
+ var import_react18 = require("react");
3009
+ function useInit({
3010
+ theme,
3011
+ appid,
3012
+ events,
3013
+ endpoints
2299
3014
  }) {
2300
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("svg", { width: size, height: size, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
2301
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("g", { clipPath: "url(#clip0_418_7746)", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2302
- "path",
2303
- {
2304
- fillRule: "evenodd",
2305
- clipRule: "evenodd",
2306
- d: "M7.99984 0.666504C3.94975 0.666504 0.666504 3.94975 0.666504 7.99984C0.666504 12.0499 3.94975 15.3332 7.99984 15.3332C12.0499 15.3332 15.3332 12.0499 15.3332 7.99984C15.3332 3.94975 12.0499 0.666504 7.99984 0.666504ZM1.99984 7.99984C1.99984 4.68613 4.68613 1.99984 7.99984 1.99984C11.3135 1.99984 13.9998 4.68613 13.9998 7.99984C13.9998 11.3135 11.3135 13.9998 7.99984 13.9998C4.68613 13.9998 1.99984 11.3135 1.99984 7.99984ZM8.6665 7.33317C8.6665 6.96498 8.36803 6.6665 7.99984 6.6665C7.63165 6.6665 7.33317 6.96498 7.33317 7.33317V11.3332C7.33317 11.7014 7.63165 11.9998 7.99984 11.9998C8.36803 11.9998 8.6665 11.7014 8.6665 11.3332V7.33317ZM7.99984 5.33317C8.36803 5.33317 8.6665 5.03469 8.6665 4.6665C8.6665 4.29831 8.36803 3.99984 7.99984 3.99984C7.63165 3.99984 7.33317 4.29831 7.33317 4.6665C7.33317 5.03469 7.63165 5.33317 7.99984 5.33317Z",
2307
- fill: color
3015
+ const {
3016
+ setAppid,
3017
+ setEndpoints,
3018
+ setToken,
3019
+ setMid,
3020
+ token,
3021
+ setOverview,
3022
+ setTheme
3023
+ } = useLocalStore_default();
3024
+ const overviewLoadingRef = (0, import_react18.useRef)(false);
3025
+ const searchParams = new URLSearchParams(window.location.search);
3026
+ const matchToken = searchParams.get("matchToken");
3027
+ const realEndpoints = endpoints || env_default.endpoints;
3028
+ (0, import_react18.useEffect)(() => {
3029
+ setTheme(theme);
3030
+ }, [theme]);
3031
+ (0, import_react18.useEffect)(() => {
3032
+ setAppid(appid);
3033
+ }, [appid]);
3034
+ (0, import_react18.useEffect)(() => {
3035
+ setEndpoints(realEndpoints);
3036
+ }, [realEndpoints]);
3037
+ (0, import_react18.useEffect)(() => {
3038
+ if (matchToken) {
3039
+ const tokenData = JSON.parse(atob(matchToken));
3040
+ if (tokenData && tokenData.mid && tokenData.token) {
3041
+ login({
3042
+ mid: tokenData.mid,
3043
+ token: "Bearer " + tokenData.token
3044
+ });
2308
3045
  }
2309
- ) }),
2310
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("clipPath", { id: "clip0_418_7746", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("rect", { width: "16", height: "16", fill: "white" }) }) })
2311
- ] });
2312
- }
2313
-
2314
- // src/components/UsernameModal/index.tsx
2315
- var import_jsx_runtime45 = require("react/jsx-runtime");
2316
- var ValidItem = ({
2317
- success = false,
2318
- text
2319
- }) => {
2320
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: `matchid-valid-status-item matchid-valid-status-${success ? "success" : "error"}`, children: [
2321
- success ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(CheckRoundIcon, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(InfoRoundIcon, { size: 16 }),
2322
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { children: text })
2323
- ] });
2324
- };
2325
- function UsernameModal({
2326
- title,
2327
- isOpen,
2328
- onSuccess,
2329
- ...props
2330
- }) {
2331
- const { username, refreshOverview } = useUserInfo();
2332
- const { isLogin } = useUserInfo();
2333
- const [val, setVal] = (0, import_react17.useState)(username);
2334
- const [error, setError] = (0, import_react17.useState)("");
2335
- (0, import_react17.useEffect)(() => {
2336
- if (isOpen) {
2337
- setVal(username);
2338
- setError("");
2339
3046
  }
2340
- }, [isOpen]);
2341
- const isValid = (0, import_react17.useMemo)(() => {
2342
- return isValidUsername(val);
2343
- }, [val]);
2344
- const isLength = (0, import_react17.useMemo)(() => {
2345
- return val.length >= 2 && val.length <= 32;
2346
- }, [val]);
2347
- const isSafe = isValid && isLength;
2348
- const [isSubmitting, setIsSubmitting] = (0, import_react17.useState)(false);
2349
- const onSubmit = async () => {
2350
- if (isSubmitting) return;
2351
- try {
2352
- setIsSubmitting(true);
2353
- const res = await setUserNameApi({
2354
- username: val
2355
- });
2356
- if (isSuccess(res)) {
2357
- await refreshOverview();
2358
- onSuccess && onSuccess();
2359
- } else {
2360
- setError(res.message);
3047
+ }, [matchToken]);
3048
+ (0, import_react18.useEffect)(() => {
3049
+ const onLoginMessage = (event) => {
3050
+ const res = event.data;
3051
+ if (res.event === "login" && res.data && (res.data.token || res.data.token_type && res.data.access_token)) {
3052
+ login({
3053
+ mid: res.data.mid,
3054
+ token: res.data.token || `${res.data.token_type} ${res.data.access_token}`
3055
+ });
3056
+ } else if (res.event == "bind") {
3057
+ eventManager_default.emit("onBind", res.data);
3058
+ if (events && events.onBind) {
3059
+ events.onBind(res.data);
3060
+ }
2361
3061
  }
2362
- } catch (error2) {
2363
- setError(error2.message);
3062
+ };
3063
+ window.addEventListener("message", onLoginMessage);
3064
+ return () => {
3065
+ window.removeEventListener("message", onLoginMessage);
3066
+ };
3067
+ }, []);
3068
+ const loadOverview = async () => {
3069
+ matchlog_default.log("loadOverview");
3070
+ if (overviewLoadingRef.current) {
3071
+ return;
3072
+ }
3073
+ overviewLoadingRef.current = true;
3074
+ try {
3075
+ const res = await getOverviewInfoApi();
3076
+ setOverview(res.data);
3077
+ return res.data;
3078
+ } catch (err) {
3079
+ console.error("overview error", err);
2364
3080
  } finally {
2365
- setIsSubmitting(false);
3081
+ overviewLoadingRef.current = false;
2366
3082
  }
2367
3083
  };
2368
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || (username ? "Edit User Name" : "Set User Name"), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "matchid-username-box", children: [
2369
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Field, { label: "User Name", error, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2370
- Input,
2371
- {
2372
- placeholder: "Enter Your User Name",
2373
- onChange: (e) => {
2374
- setVal(e.target.value);
2375
- setError("");
2376
- },
2377
- value: val
2378
- }
2379
- ) }),
2380
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "matchid-valid", children: [
2381
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2382
- ValidItem,
2383
- {
2384
- success: isValid,
2385
- text: "Name can be composed of numbers and letters as well as characters"
2386
- }
2387
- ),
2388
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ValidItem, { success: isLength, text: "No less than 2 characters" })
2389
- ] }),
2390
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { disabled: !isSafe, loading: isSubmitting, style: {
2391
- marginTop: "64px"
2392
- }, onClick: onSubmit, size: "lg", block: true, highlight: true, children: "Confirm" }),
2393
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { style: {
2394
- marginTop: "24px"
2395
- }, onClick: props.onClose, size: "lg", block: true, children: "Next Time" })
2396
- ] }) });
3084
+ (0, import_react18.useEffect)(() => {
3085
+ if (token) {
3086
+ loadOverview();
3087
+ }
3088
+ }, [token]);
3089
+ const login = async ({ mid, token: token2 }) => {
3090
+ setMid(mid);
3091
+ setToken(token2);
3092
+ const overview = await loadOverview();
3093
+ eventManager_default.emit("onLogin", {
3094
+ mid,
3095
+ token: token2,
3096
+ did: overview?.did
3097
+ });
3098
+ if (events && events?.onLogin) {
3099
+ events.onLogin({
3100
+ mid,
3101
+ token: token2,
3102
+ did: overview?.did
3103
+ });
3104
+ }
3105
+ };
3106
+ return {
3107
+ loadOverview,
3108
+ login,
3109
+ endpoints: realEndpoints
3110
+ };
2397
3111
  }
2398
3112
 
3113
+ // src/MatchContext.tsx
3114
+ var import_react_query = require("@tanstack/react-query");
3115
+ var import_jsx_runtime48 = require("react/jsx-runtime");
3116
+ var queryClient = new import_react_query.QueryClient();
3117
+ var MatchContext = (0, import_react19.createContext)(void 0);
3118
+ var MatchProvider = ({ children, appid, events, theme = "light", endpoints }) => {
3119
+ const { loadOverview, login, endpoints: realEndPoints } = useInit({
3120
+ theme,
3121
+ appid,
3122
+ events,
3123
+ endpoints
3124
+ });
3125
+ useWalletInit({
3126
+ refreshOverview: loadOverview
3127
+ });
3128
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_react_query.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3129
+ MatchContext.Provider,
3130
+ {
3131
+ value: {
3132
+ appid,
3133
+ endpoints: realEndPoints,
3134
+ events,
3135
+ login,
3136
+ theme
3137
+ },
3138
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(context_default, { children })
3139
+ }
3140
+ ) });
3141
+ };
3142
+ var useMatch = () => {
3143
+ const context = (0, import_react19.useContext)(MatchContext);
3144
+ if (context === void 0) {
3145
+ throw new Error("useMatch must be used within a MatchProvider");
3146
+ }
3147
+ return context;
3148
+ };
3149
+
2399
3150
  // src/hooks/api/index.ts
2400
3151
  var api_exports = {};
2401
3152
  __export(api_exports, {
@@ -2474,8 +3225,8 @@ __export(chains_exports, {
2474
3225
  });
2475
3226
 
2476
3227
  // src/config/chains/MatchMain.ts
2477
- var import_viem = require("viem");
2478
- var matchMain = /* @__PURE__ */ (0, import_viem.defineChain)({
3228
+ var import_viem3 = require("viem");
3229
+ var matchMain = /* @__PURE__ */ (0, import_viem3.defineChain)({
2479
3230
  //定义match链
2480
3231
  id: 698,
2481
3232
  name: "Matchain",
@@ -2502,8 +3253,8 @@ var matchMain = /* @__PURE__ */ (0, import_viem.defineChain)({
2502
3253
  });
2503
3254
 
2504
3255
  // src/config/chains/MatchTest.ts
2505
- var import_viem2 = require("viem");
2506
- var matchTest = /* @__PURE__ */ (0, import_viem2.defineChain)({
3256
+ var import_viem4 = require("viem");
3257
+ var matchTest = /* @__PURE__ */ (0, import_viem4.defineChain)({
2507
3258
  //定义matchTest链
2508
3259
  id: 699,
2509
3260
  name: "MatchTest",