@matchain/matchid-sdk-react 0.1.49 → 0.1.50-alpha.0

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.
@@ -82,7 +82,7 @@ var NumberFormatter = ({
82
82
  }
83
83
  }
84
84
  if (zeroCount < tFixNum) {
85
- return /* @__PURE__ */ jsxs("span", { children: [
85
+ return /* @__PURE__ */ jsxs("span", { className, children: [
86
86
  prefix && /* @__PURE__ */ jsx("span", { className: prefixClassName, children: prefix }),
87
87
  /* @__PURE__ */ jsx("span", { className: intClassName, children: intFormat }),
88
88
  /* @__PURE__ */ jsxs("span", { className: decimalClassName, children: [
@@ -92,7 +92,7 @@ var NumberFormatter = ({
92
92
  suffix
93
93
  ] });
94
94
  }
95
- return /* @__PURE__ */ jsxs("span", { children: [
95
+ return /* @__PURE__ */ jsxs("span", { className, children: [
96
96
  prefix && /* @__PURE__ */ jsx("span", { className: prefixClassName, children: prefix }),
97
97
  /* @__PURE__ */ jsx("span", { className: intClassName, children: intFormat }),
98
98
  /* @__PURE__ */ jsxs("span", { className: decimalClassName, children: [
@@ -118,6 +118,9 @@ var formatDate = (value, formatString = "YYYY-MM-DD HH:mm:ss") => {
118
118
  }
119
119
  return "--";
120
120
  };
121
+ var isInTgApp = () => {
122
+ return !!window.TelegramWebviewProxy;
123
+ };
121
124
 
122
125
  export {
123
126
  getVersion,
@@ -131,6 +134,7 @@ export {
131
134
  getAppClientId,
132
135
  NumberFormatter,
133
136
  formatAddress,
134
- formatDate
137
+ formatDate,
138
+ isInTgApp
135
139
  };
136
- //# sourceMappingURL=chunk-5JHHHLG4.mjs.map
140
+ //# sourceMappingURL=chunk-HLUFAIFV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/index.tsx"],"sourcesContent":["import moment from 'moment';\n\nexport const getVersion = (): string => {\n return \"0.0.2\";\n};\n\nexport function encodeBase64(input: string) {\n return btoa(unescape(encodeURIComponent(input)));\n}\n\nexport function decodeBase64(input: string) {\n return decodeURIComponent(escape(atob(input)));\n}\n\nexport const isValidEmail = (email: string) => {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)\n}\nexport const isValidUsername = (username: string) => {\n //8-32 alpha number - _\n return /^[a-zA-Z0-9_-]+$/.test(username)\n}\n\nexport const deepMerge = (target: any, source: any): any => {\n for (const key in source) {\n if (source[key] instanceof Object && key in target) {\n target[key] = deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nexport function truncateAddress(address: string): string {\n if (address.length <= 6) {\n return address;\n }\n const start = address.slice(0, 4);\n const end = address.slice(-2);\n return `${start}...${end}`;\n}\n\n\nexport function firstUpperCase(str: string): string {\n return str.toString()[0].toUpperCase() + str.toString().slice(1);\n}\n\nexport function getAppClientId() {\n return \"react-sdk-\" + getVersion()\n}\n\n\nfunction convertScientificToDecimal(num: number) {\n let str = num.toFixed(12)\n str = str.replace(/0+$/, '')\n str = str.replace(/\\.$/, '')\n return str\n}\n\ninterface NumberFormatterProps {\n value: number | string | undefined\n prefix?: string\n suffix?: string\n separator?: boolean\n fixNum?: number //number >= 1 fix num\n tFixNum?: number //number < 1 fix num\n intClassName?: string\n decimalClassName?: string\n prefixClassName?: string\n className?: string\n}\n\nexport const NumberFormatter: React.FC<NumberFormatterProps> = ({\n value,\n prefix = '',\n suffix = '',\n separator = true,\n fixNum = 2,\n tFixNum = 4,\n intClassName = \"\",\n decimalClassName = \"\",\n prefixClassName = \"\",\n className = \"\"\n }) => {\n const numberValue =\n typeof value === 'number'\n ? convertScientificToDecimal(value)\n : value\n ? value\n : '0'\n\n const [intPart, decimalPart] = numberValue.toString().split('.')\n\n const intFormat = separator\n ? intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n : intPart\n\n if (Math.abs(parseFloat(numberValue)) >= 1) {\n return (\n <span className={className}>\n {prefix && <span className={prefixClassName}>{prefix}</span>}\n <span className={intClassName}>{intFormat}</span>\n {decimalPart ? (\n <span className={decimalClassName}>\n .{decimalPart.substring(0, fixNum)}\n </span>\n ) : (\n ''\n )}\n {suffix}\n </span>\n )\n }\n\n if (decimalPart) {\n let zeroCount = 0\n for (let i = 0; i < decimalPart.length; i++) {\n if (decimalPart[i] === '0') {\n zeroCount++\n } else {\n break\n }\n }\n if (zeroCount < tFixNum) {\n return (\n <span className={className}>\n {prefix && <span className={prefixClassName}>{prefix}</span>}\n <span className={intClassName}>{intFormat}</span>\n <span className={decimalClassName}>\n .{decimalPart.substring(0, tFixNum)}\n </span>\n {suffix}\n </span>\n )\n }\n return (\n <span className={className}>\n {prefix && <span className={prefixClassName}>{prefix}</span>}\n <span className={intClassName}>{intFormat}</span>\n <span className={decimalClassName}>\n .0<sub>{zeroCount}</sub>\n {decimalPart?.substring(zeroCount, zeroCount + tFixNum - 2)}\n </span>\n {suffix}\n </span>\n )\n }\n return (\n <span className={className}>\n {prefix && <span className={prefixClassName}>{prefix}</span>}\n <span className={intClassName}>{intPart}</span>\n {suffix}\n </span>\n )\n}\n\nexport function formatAddress(address: string, pre = 4, after = 5) {\n return `${address.substring(0, pre)}...${address.substring(address.length - after, address.length)}`\n}\n\nexport const formatDate = (value: any, formatString = 'YYYY-MM-DD HH:mm:ss') => {\n if (value) {\n return moment.unix(value).format(formatString)\n }\n return '--'\n}\nexport const isInTgApp = () => {\n return !!(window.TelegramWebviewProxy)\n}"],"mappings":"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","names":[]}
@@ -24,10 +24,11 @@ import {
24
24
  formatDate,
25
25
  getAppClientId,
26
26
  getVersion,
27
+ isInTgApp,
27
28
  isValidEmail,
28
29
  isValidUsername,
29
30
  truncateAddress
30
- } from "./chunk-5JHHHLG4.mjs";
31
+ } from "./chunk-HLUFAIFV.mjs";
31
32
  import {
32
33
  ArrowDownIcon,
33
34
  ArrowRightIcon,
@@ -530,6 +531,19 @@ var getWalletNftListApi = (data) => {
530
531
  data
531
532
  });
532
533
  };
534
+ var tgAppLoginInitApi = () => {
535
+ return retryRequest({
536
+ url: `/api/v1/tgapp/login/init`,
537
+ method: "GET"
538
+ });
539
+ };
540
+ var getTgAppLoginStatus = (data) => {
541
+ return retryRequest({
542
+ url: `/api/v1/tgapp/login/status`,
543
+ method: "POST",
544
+ data
545
+ });
546
+ };
533
547
 
534
548
  // src/store/useLocalStore.ts
535
549
  var persistedState = persist(
@@ -589,7 +603,7 @@ var useLocalStore_default = useLocalStore;
589
603
  import { useMemo as useMemo7 } from "react";
590
604
 
591
605
  // src/MatchContext.tsx
592
- import { createContext as createContext3, useContext as useContext3 } from "react";
606
+ import { createContext as createContext3, useContext as useContext3, useEffect as useEffect13 } from "react";
593
607
 
594
608
  // src/hooks/index.tsx
595
609
  var hooks_exports = {};
@@ -668,7 +682,9 @@ import {
668
682
  import { create as create2 } from "zustand";
669
683
  var useStore = create2((set) => ({
670
684
  walletReady: false,
671
- setWalletReady: (inited) => set({ walletReady: inited })
685
+ setWalletReady: (inited) => set({ walletReady: inited }),
686
+ tgAppAuthCode: "",
687
+ setTgAppAuthCode: (code) => set({ tgAppAuthCode: code })
672
688
  }));
673
689
  var useStore_default = useStore;
674
690
 
@@ -2425,6 +2441,7 @@ function CEXBindModal({
2425
2441
  }
2426
2442
 
2427
2443
  // src/context/BusinessProvider.tsx
2444
+ import { useQuery as useQuery6 } from "@tanstack/react-query";
2428
2445
  import { Fragment, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
2429
2446
  function BusinessProvider({ children }) {
2430
2447
  const { overview, token } = useUserInfo();
@@ -2434,10 +2451,31 @@ function BusinessProvider({ children }) {
2434
2451
  const { type: BTCType, isOpen: BTCIsOpen, close: BTCClose } = useBTCModalStore();
2435
2452
  const { type: CEXType, isOpen: CEXIsOpen, close: CEXClose } = useCEXBindModalStore();
2436
2453
  const WalletModalStore = useWalletModalStore();
2454
+ const { tgAppAuthCode, setTgAppAuthCode } = useStore_default();
2455
+ const { login } = useMatch();
2437
2456
  const walletModalClose = (func) => {
2438
2457
  WalletModalStore.close();
2439
2458
  func();
2440
2459
  };
2460
+ useQuery6({
2461
+ queryKey: ["matchid-tgapp-login", tgAppAuthCode],
2462
+ queryFn: async () => {
2463
+ const res = await getTgAppLoginStatus({
2464
+ code: tgAppAuthCode
2465
+ });
2466
+ if (isSuccess(res)) {
2467
+ setTgAppAuthCode("");
2468
+ await login({
2469
+ mid: "",
2470
+ token: `${res.data.token_type} ${res.data.access_token}`
2471
+ });
2472
+ return true;
2473
+ }
2474
+ return false;
2475
+ },
2476
+ enabled: !!tgAppAuthCode,
2477
+ refetchInterval: 1e3 * 5
2478
+ });
2441
2479
  return /* @__PURE__ */ jsxs8(Fragment, { children: [
2442
2480
  /* @__PURE__ */ jsx10(
2443
2481
  SOLModal,
@@ -3619,6 +3657,15 @@ var MatchProvider = ({
3619
3657
  useWalletInit({
3620
3658
  config: wallet
3621
3659
  });
3660
+ useEffect13(() => {
3661
+ const script = document.createElement("script");
3662
+ script.src = "https://telegram.org/js/telegram-web-app.js?56";
3663
+ script.async = true;
3664
+ document.body.appendChild(script);
3665
+ return () => {
3666
+ document.body.removeChild(script);
3667
+ };
3668
+ }, []);
3622
3669
  return /* @__PURE__ */ jsx12(IntlProvider, { locale: realLocale, messages: messages[realLocale], children: /* @__PURE__ */ jsx12(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx12(
3623
3670
  MatchContext.Provider,
3624
3671
  {
@@ -3657,6 +3704,7 @@ function useUserInfo() {
3657
3704
  locale,
3658
3705
  refreshOverview
3659
3706
  } = useLocalStore_default();
3707
+ const { setTgAppAuthCode } = useStore_default();
3660
3708
  const { events, login } = useMatch();
3661
3709
  const { open: SOLOpen } = useSOLModalStore();
3662
3710
  const { open: TRONOpen } = useTRONModalStore();
@@ -3695,6 +3743,31 @@ function useUserInfo() {
3695
3743
  return window.open(`${endpoints.auth}login/wallet?appid=${appid}&locale=${locale}`);
3696
3744
  };
3697
3745
  const loginByTelegram = async () => {
3746
+ if (isInTgApp()) {
3747
+ try {
3748
+ const res = await tgAppLoginInitApi();
3749
+ if (!isSuccess(res)) {
3750
+ throw new Error(res.message);
3751
+ }
3752
+ setTgAppAuthCode(res.data.code);
3753
+ const link = res.data.login_url + `?startapp=${res.data.code}_${appid}_${locale}`;
3754
+ console.log("tgAppLoginInitLink", link);
3755
+ if (window.TelegramWebviewProxy) {
3756
+ console.log("in telegram webview");
3757
+ if (!window.Telegram) {
3758
+ throw new Error("Please import telegram-web-app.js first");
3759
+ }
3760
+ window.Telegram.WebApp.openTelegramLink(link);
3761
+ return;
3762
+ }
3763
+ console.log("not in telegram webview");
3764
+ window.open(link);
3765
+ return;
3766
+ } catch (e) {
3767
+ console.error("tgAppLoginInitApi", e);
3768
+ throw e;
3769
+ }
3770
+ }
3698
3771
  return window.open(
3699
3772
  `${endpoints.auth}login/telegram?appid=${appid}&locale=${locale}`,
3700
3773
  // Replace with the actual authorization URL
@@ -4060,9 +4133,9 @@ import { useMemo as useMemo9, useState as useState15 } from "react";
4060
4133
  import { FormattedMessage as FormattedMessage6, useIntl as useIntl7 } from "react-intl";
4061
4134
 
4062
4135
  // src/hooks/useAppConfig.ts
4063
- import { useQuery as useQuery6 } from "@tanstack/react-query";
4136
+ import { useQuery as useQuery7 } from "@tanstack/react-query";
4064
4137
  function useAppConfig() {
4065
- const query = useQuery6({
4138
+ const query = useQuery7({
4066
4139
  queryKey: ["appConfig"],
4067
4140
  queryFn: async () => {
4068
4141
  const res = await getAppConfigApi();
@@ -6385,4 +6458,4 @@ export {
6385
6458
  MatchProvider,
6386
6459
  useMatch
6387
6460
  };
6388
- //# sourceMappingURL=chunk-MXDPJRRH.mjs.map
6461
+ //# sourceMappingURL=chunk-P3WHQUXO.mjs.map