TgM.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import PogHttp, { PogLoginResp } from "../net/PogHttp";
  2. import Utils from "../utils/Utils";
  3. import { Tips } from "./Tips";
  4. import { isTMA } from "@telegram-apps/bridge";
  5. import {
  6. emitEvent,
  7. mockTelegramEnv,
  8. retrieveLaunchParams,
  9. } from "@telegram-apps/bridge";
  10. export default class TgM {
  11. private _shareText: string = `POG ,the powerful platform,has surprise airdrops! 🎁`;
  12. async login(): Promise<PogLoginResp | null> {
  13. let launchParams = retrieveLaunchParams();
  14. console.log("tg launchParams is :", launchParams);
  15. if (!launchParams) {
  16. return null;
  17. }
  18. let initDataRaw: string = launchParams.initDataRaw as string;
  19. console.log("tg initDataRaw is :", initDataRaw);
  20. if (!initDataRaw) {
  21. return null;
  22. }
  23. let tgWebAppStartParam: string = Utils.getQueryString("tgWebAppStartParam");
  24. console.log("tg tgWebAppStartParam is :", tgWebAppStartParam);
  25. let result = await PogHttp.ins.loginByTgParams(
  26. initDataRaw,
  27. tgWebAppStartParam
  28. );
  29. return result;
  30. }
  31. private static _ins: TgM = null!;
  32. public static get ins(): TgM {
  33. return this._ins || new TgM();
  34. }
  35. public async init(): Promise<boolean> {
  36. // await this.mockENV();
  37. // init();
  38. return true;
  39. }
  40. public async isTG(): Promise<boolean> {
  41. // if (Utils.getQueryString("bosi") == "123") {
  42. // return true;
  43. // }
  44. if (await isTMA()) {
  45. console.warn("It's Telegram Mini Apps");
  46. return true;
  47. } else {
  48. console.warn("It's not Telegram Mini Apps");
  49. }
  50. return false;
  51. }
  52. public async shareToTg(shareText: string): Promise<boolean> {
  53. shareText = shareText ? shareText : this._shareText;
  54. let shareLink = "";
  55. // shareLink=Data.user._shareLink
  56. try {
  57. let tgUrl = `https://t.me/share/url?url=${encodeURIComponent(
  58. shareLink
  59. )}&text=${encodeURIComponent(shareText)}`;
  60. this.openTelegramLink(tgUrl);
  61. return true;
  62. } catch (error) {
  63. Tips.show("share failed");
  64. return false;
  65. }
  66. }
  67. public openTelegramLink(url: string, isClose: boolean = false): void {
  68. try {
  69. if (Utils.isNameLink(url, "t.me")) {
  70. window["Telegram"].WebApp.openTelegramLink(url);
  71. if (isClose) {
  72. setTimeout(() => {
  73. window["Telegram"].WebApp.close();
  74. }, 1500);
  75. }
  76. } else {
  77. window.open(url, "_blank");
  78. }
  79. } catch (error) {
  80. window.open(url, "_blank");
  81. }
  82. }
  83. public async mockENV() {
  84. const noInsets = {
  85. left: 0,
  86. top: 0,
  87. bottom: 0,
  88. right: 0,
  89. } as const;
  90. const themeParams = {
  91. accent_text_color: "#6ab2f2",
  92. bg_color: "#17212b",
  93. button_color: "#5288c1",
  94. button_text_color: "#ffffff",
  95. destructive_text_color: "#ec3942",
  96. header_bg_color: "#17212b",
  97. hint_color: "#708499",
  98. link_color: "#6ab3f3",
  99. secondary_bg_color: "#232e3c",
  100. section_bg_color: "#17212b",
  101. section_header_text_color: "#6ab3f3",
  102. subtitle_text_color: "#708499",
  103. text_color: "#f5f5f5",
  104. } as const;
  105. mockTelegramEnv({
  106. launchParams: {
  107. tgWebAppThemeParams: themeParams,
  108. tgWebAppData: new URLSearchParams([
  109. [
  110. "user",
  111. JSON.stringify({
  112. id: 1,
  113. first_name: "Pavel",
  114. }),
  115. ],
  116. ["hash", ""],
  117. ["signature", ""],
  118. ["auth_date", Date.now().toString()],
  119. ]),
  120. tgWebAppStartParam: "debug",
  121. tgWebAppVersion: "8",
  122. tgWebAppPlatform: "tdesktop",
  123. },
  124. onEvent(e) {
  125. if (e[0] === "web_app_request_theme") {
  126. return emitEvent("theme_changed", { theme_params: themeParams });
  127. }
  128. if (e[0] === "web_app_request_viewport") {
  129. return emitEvent("viewport_changed", {
  130. height: window.innerHeight,
  131. width: window.innerWidth,
  132. is_expanded: true,
  133. is_state_stable: true,
  134. });
  135. }
  136. if (e[0] === "web_app_request_content_safe_area") {
  137. return emitEvent("content_safe_area_changed", noInsets);
  138. }
  139. if (e[0] === "web_app_request_safe_area") {
  140. return emitEvent("safe_area_changed", noInsets);
  141. }
  142. },
  143. });
  144. return true;
  145. }
  146. }