UNPKG

lessenter-tg-web-app

Version:

telegram-web-app.js

1 lines 37.5 kB
!function(){var e={},t="";try{t=location.hash.toString()}catch(r){}var o=u(t),n=m("initParams");if(n)for(var i in n)void 0===o[i]&&(o[i]=n[i]);v("initParams",o);var a,s=!1;try{if(s=null!=window.parent&&window!=window.parent){window.addEventListener("message",function(e){if(e.source===window.parent){try{var t=JSON.parse(e.data)}catch(r){return}if(t&&t.eventType){if("set_custom_style"==t.eventType)"https://web.telegram.org"===e.origin&&(a.innerHTML=t.eventData);else if("reload_iframe"==t.eventType){try{window.parent.postMessage(JSON.stringify({eventType:"iframe_will_reload"}),"*")}catch(o){}location.reload()}else b(t.eventType,t.eventData)}}}),a=document.createElement("style"),document.head.appendChild(a);try{window.parent.postMessage(JSON.stringify({eventType:"iframe_ready",eventData:{reload_supported:!0}}),"*")}catch(p){}}}catch(l){}function c(e){try{return e=e.replace(/\+/g,"%20"),decodeURIComponent(e)}catch(t){return e}}function u(e){e=e.replace(/^#/,"");var t={};if(!e.length)return t;if(0>e.indexOf("=")&&0>e.indexOf("?"))return t._path=c(e),t;var r=e.indexOf("?");if(r>=0){var o=e.substr(0,r);t._path=c(o),e=e.substr(r+1)}var n=f(e);for(var i in n)t[i]=n[i];return t}function f(e){var t,r,o,n,i={};if(!e.length)return i;var a=e.split("&");for(t=0;t<a.length;t++)o=c((r=a[t].split("="))[0]),n=null==r[1]?null:c(r[1]),i[o]=n;return i}function b(e,t){console.log("[Telegram.WebView] < receiveEvent",e,t),d(e,function(r){r(e,t)})}function d(t,r){var o=e[t];if(void 0!==o&&o.length)for(var n=0;n<o.length;n++)try{r(o[n])}catch(i){}}function g(e){if(!e.match(/^(web\+)?tgb?:\/\/./))return!1;if(navigator.userAgent.match(/iOS|iPhone OS|iPhone|iPod|iPad/i)){var t=document.getElementById("tgme_frame_cont")||document.body,r=document.createElement("iframe");t.appendChild(r);var o=!1,n=function(){o=!0};window.addEventListener("pagehide",n,!1),window.addEventListener("blur",n,!1),null!==r&&(r.src=e),setTimeout(function(){o||(window.location=e),window.removeEventListener("pagehide",n,!1),window.removeEventListener("blur",n,!1)},2e3)}else window.location=e;return!0}function v(e,t){try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),!0}catch(r){}return!1}function m(e){try{return JSON.parse(window.sessionStorage.getItem("__telegram__"+e))}catch(t){}return null}window.Telegram||(window.Telegram={}),window.Telegram.WebView={initParams:o,isIframe:s,onEvent:function t(r,o){void 0===e[r]&&(e[r]=[]),-1===e[r].indexOf(o)&&e[r].push(o)},offEvent:function t(r,o){if(void 0!==e[r]){var n=e[r].indexOf(o);-1!==n&&e[r].splice(n,1)}},postEvent:function e(t,r,o){if(r||(r=function(){}),void 0===o&&(o=""),console.log("[Telegram.WebView] > postEvent",t,o),void 0!==window.TelegramWebviewProxy)TelegramWebviewProxy.postEvent(t,JSON.stringify(o)),r();else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:t,eventData:o})),r();else if(s)try{var n="https://web.telegram.org";n="*",window.parent.postMessage(JSON.stringify({eventType:t,eventData:o}),n),r()}catch(i){r(i)}else r({notAvailable:!0})},receiveEvent:b,callEventCallbacks:d},window.Telegram.Utils={urlSafeDecode:c,urlParseQueryString:f,urlParseHashParams:u,urlAppendHashParams:function e(t,r){var o=t.indexOf("#");if(o<0)return t+"#"+r;var n=t.substr(o+1);return n.indexOf("=")>=0||n.indexOf("?")>=0?t+"&"+r:n.length>0?t+"?"+r:t+r},sessionStorageSet:v,sessionStorageGet:m},window.TelegramGameProxy_receiveEvent=b,window.TelegramGameProxy={receiveEvent:b}}(),function(){var e=window.Telegram.Utils,t=window.Telegram.WebView,r=t.initParams,o=t.isIframe,n={},i="",a={},s={},p="light",l="6.0",c="unknown";if(r.tgWebAppData&&r.tgWebAppData.length)for(var u in i=r.tgWebAppData,a=e.urlParseQueryString(i)){var f=a[u];try{("{"==f.substr(0,1)&&"}"==f.substr(-1)||"["==f.substr(0,1)&&"]"==f.substr(-1))&&(a[u]=JSON.parse(f))}catch(b){}}if(r.tgWebAppThemeParams&&r.tgWebAppThemeParams.length){var d=r.tgWebAppThemeParams;try{var g=JSON.parse(d);g&&W(g)}catch(v){}}var g=e.sessionStorageGet("themeParams");g&&W(g),r.tgWebAppVersion&&(l=r.tgWebAppVersion),r.tgWebAppPlatform&&(c=r.tgWebAppPlatform);var m=window.innerHeight;function h(e){m!=window.innerHeight&&(m=window.innerHeight,$("viewportChanged",{isStateStable:!0}))}function y(e){return e.toString().replace(/^\s+|\s+$/g,"")}function $(e){var r=Array.prototype.slice.call(arguments);e=r.shift(),t.callEventCallbacks("webview:"+e,function(e){e.apply(n,r)})}function A(e,r){t.onEvent("webview:"+e,r)}function w(e,r){t.offEvent("webview:"+e,r)}function _(e,t){var r=document.documentElement;r&&r.style&&r.style.setProperty&&r.style.setProperty("--tg-"+e,t)}function W(t){var r;for(var o in"#1c1c1d"==t.bg_color&&t.bg_color==t.secondary_bg_color&&(t.secondary_bg_color="#2c2c2e"),t)(r=G(t[o]))&&(s[o]=r,"bg_color"==o&&_("color-scheme",p=F(r)?"dark":"light"),_(o="theme-"+o.split("_").join("-"),r));e.sessionStorageSet("themeParams",s)}var T={};function k(e){for(var t=100;--t;){for(var r="",o="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",n=o.length,i=0;i<e;i++)r+=o[Math.floor(Math.random()*n)];if(!T[r])return T[r]={},r}throw Error("WebAppCallbackIdGenerateFailed")}var P=!1,x=!1,E=!0;function B(e){var t,r;void 0!==e&&(E=!!e.is_expanded,P=e.height,e.is_state_stable&&(x=e.height),$("viewportChanged",{isStateStable:!!e.is_state_stable})),t=!1!==P?P-J+"px":J?"calc(100vh - "+J+"px)":"100vh",r=!1!==x?x-J+"px":J?"calc(100vh - "+J+"px)":"100vh",_("viewport-height",t),_("viewport-stable-height",r)}var C=!1,I=!0,S="bg_color",q=null,M=null,U=null;function D(){(M!=S||U!=q)&&(M=S,(U=q)?t.postEvent("web_app_set_header_color",!1,{color:q}):t.postEvent("web_app_set_header_color",!1,{color_key:S}))}var H="bg_color";function L(){return"secondary_bg_color"==H?s.secondary_bg_color:"bg_color"==H?s.bg_color:H}var V=null;function R(){var e=L();V!=e&&(V=e,t.postEvent("web_app_set_background_color",!1,{color:e}))}var O="bottom_bar_bg_color";function N(){return"bottom_bar_bg_color"==O?s.bottom_bar_bg_color||s.secondary_bg_color||"#ffffff":"secondary_bg_color"==O?s.secondary_bg_color:"bg_color"==O?s.bg_color:O}var Q=null;function z(){var e=N();Q!=e&&(Q=e,t.postEvent("web_app_set_bottom_bar_color",!1,{color:e})),r.tgWebAppDebug&&er()}function G(e){if(e+="",t=/^\s*#([0-9a-f]{6})\s*$/i.exec(e))return"#"+t[1].toLowerCase();if(t=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(e))return("#"+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]).toLowerCase();if(t=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(e)){var t,r=parseInt(t[1]),o=parseInt(t[2]),n=parseInt(t[3]);return r=(r<16?"0":"")+r.toString(16),"#"+r+(o=(o<16?"0":"")+o.toString(16))+(n=(n<16?"0":"")+n.toString(16))}return!1}function F(e){3==(e=e.replace(/[\s#]/g,"")).length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);var t=parseInt(e.substr(0,2),16),r=parseInt(e.substr(2,2),16),o=parseInt(e.substr(4,2),16);return 120>Math.sqrt(.299*(t*t)+.587*(r*r)+.114*(o*o))}function K(e){return function e(t,r){"string"!=typeof t&&(t=""),"string"!=typeof r&&(r=""),t=t.replace(/^\s+|\s+$/g,"").split("."),r=r.replace(/^\s+|\s+$/g,"").split(".");var o,n,i,a=Math.max(t.length,r.length);for(o=0;o<a;o++)if((n=parseInt(t[o])||0)!=(i=parseInt(r[o])||0)){if(n>i)return 1;return -1}return 0}(l,e)>=0}var X=function(){var e=!1,r={};Object.defineProperty(r,"isVisible",{set:function(e){a({is_visible:e})},get:function(){return e},enumerable:!0});var o=null;function n(){return{is_visible:e}}function i(){return!!K("6.1")||(console.warn("[Telegram.WebApp] BackButton is not supported in version "+l),!1)}function a(a){var s,p,l;return i()&&(void 0!==a.is_visible&&(e=!!a.is_visible),o!==(l=(void 0===(s=p=n())&&(s=n()),JSON.stringify(s)))&&(o=l,t.postEvent("web_app_setup_back_button",!1,p))),r}return t.onEvent("back_button_pressed",function e(){$("backButtonClicked")}),r.onClick=function(e){return i()&&A("backButtonClicked",e),r},r.offClick=function(e){return i()&&w("backButtonClicked",e),r},r.show=function(){return a({is_visible:!0})},r.hide=function(){return a({is_visible:!1})},r}(),j=null,Z={},J=0;if(r.tgWebAppDebug){j=document.createElement("tg-bottom-bar");var Y={display:"flex",gap:"7px",font:"600 14px/18px sans-serif",width:"100%",background:N(),position:"fixed",left:"0",right:"0",bottom:"0",margin:"0",padding:"7px",textAlign:"center",boxSizing:"border-box",zIndex:"10000"};for(var ee in Y)j.style[ee]=Y[ee];document.addEventListener("DOMContentLoaded",function e(t){document.removeEventListener("DOMContentLoaded",e),document.body.appendChild(j)});var et=document.createElement("style");et.innerHTML='tg-bottom-button.shine { position: relative; overflow: hidden; } tg-bottom-button.shine:before { content:""; position: absolute; top: 0; width: 100%; height: 100%; background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .2), transparent); animation: tg-bottom-button-shine 5s ease-in-out infinite; } @-webkit-keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}} @keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}}',j.appendChild(et)}function er(){var e=Z.main._bottomButton,t=Z.secondary._bottomButton;e.isVisible||t.isVisible?(j.style.display="flex",J=58,e.isVisible&&t.isVisible&&("top"==t.position?(j.style.flexDirection="column-reverse",J+=51):"bottom"==t.position?(j.style.flexDirection="column",J+=51):"left"==t.position?j.style.flexDirection="row-reverse":"right"==t.position&&(j.style.flexDirection="row"))):(j.style.display="none",J=0),j.style.background=N(),document.documentElement&&(document.documentElement.style.boxSizing="border-box",document.documentElement.style.paddingBottom=J+"px"),B()}var eo=function(e){var o="main"==e;if(o)var n="web_app_setup_main_button",i="main_button_pressed",a="mainButtonClicked",p="Continue",l=function(){return s.button_color||"#2481cc"},c=function(){return s.button_text_color||"#ffffff"};else var n="web_app_setup_secondary_button",i="secondary_button_pressed",a="secondaryButtonClicked",p="Cancel",l=function(){return N()},c=function(){return s.button_color||"#2481cc"};var u=!1,f=!0,b=!1,d=!1,g=e,v=p,m=!1,h=!1,_="left",W={};Object.defineProperty(W,"type",{get:function(){return g},enumerable:!0}),Object.defineProperty(W,"text",{set:function(e){W.setParams({text:e})},get:function(){return v},enumerable:!0}),Object.defineProperty(W,"color",{set:function(e){W.setParams({color:e})},get:function(){return m||l()},enumerable:!0}),Object.defineProperty(W,"textColor",{set:function(e){W.setParams({text_color:e})},get:function(){return h||c()},enumerable:!0}),Object.defineProperty(W,"isVisible",{set:function(e){W.setParams({is_visible:e})},get:function(){return u},enumerable:!0}),Object.defineProperty(W,"isProgressVisible",{get:function(){return d},enumerable:!0}),Object.defineProperty(W,"isActive",{set:function(e){W.setParams({is_active:e})},get:function(){return f},enumerable:!0}),Object.defineProperty(W,"hasShineEffect",{set:function(e){W.setParams({has_shine_effect:e})},get:function(){return b},enumerable:!0}),o||Object.defineProperty(W,"position",{set:function(e){W.setParams({position:e})},get:function(){return _},enumerable:!0});var T=null;t.onEvent(i,E);var k=null;if(r.tgWebAppDebug){k=document.createElement("tg-bottom-button");var P={display:"none",width:"100%",height:"44px",borderRadius:"0",background:"no-repeat right center",padding:"13px 15px",textAlign:"center",boxSizing:"border-box"};for(var x in P)k.style[x]=P[x];j.appendChild(k),k.addEventListener("click",E,!1),k._bottomButton=W,Z[e]=k}function E(){f&&$(a)}function B(){var e=W.color,t=W.textColor;if(u){var r={is_visible:!0,is_active:f,is_progress_visible:d,text:v,color:e,text_color:t,has_shine_effect:b&&f&&!d};o||(r.position=_)}else var r={is_visible:!1};return r}function C(){var e,o,i=B(),a=(void 0===(o=i)&&(o=B()),JSON.stringify(o));if(T!==a){T=a,t.postEvent(n,!1,i),r.tgWebAppDebug&&(e=i,e.is_visible?(k.style.display="block",k.style.opacity=e.is_active?"1":"0.8",k.style.cursor=e.is_active?"pointer":"auto",k.disabled=!e.is_active,k.innerText=e.text,k.className=e.has_shine_effect?"shine":"",k.style.backgroundImage=e.is_progress_visible?"url('data:image/svg+xml,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewport="0 0 48 48" width="48px" height="48px"><circle cx="50%" cy="50%" stroke="'+e.text_color+'" stroke-width="2.25" stroke-linecap="round" fill="none" stroke-dashoffset="106" r="9" stroke-dasharray="56.52" rotate="-90"><animate attributeName="stroke-dashoffset" attributeType="XML" dur="360s" from="0" to="12500" repeatCount="indefinite"></animate><animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="-90 24 24" to="630 24 24" repeatCount="indefinite"></animateTransform></circle></svg>')+"')":"none",k.style.backgroundColor=e.color,k.style.color=e.text_color):k.style.display="none",er())}}return W.setText=function(e){return W.setParams({text:e})},W.onClick=function(e){return A(a,e),W},W.offClick=function(e){return w(a,e),W},W.show=function(){return W.setParams({is_visible:!0})},W.hide=function(){return W.setParams({is_visible:!1})},W.enable=function(){return W.setParams({is_active:!0})},W.disable=function(){return W.setParams({is_active:!1})},W.showProgress=function(e){return f=!!e,d=!0,C(),W},W.hideProgress=function(){return W.isActive||(f=!0),d=!1,C(),W},W.setParams=function e(t){if(void 0!==t.text){var r=y(t.text);if(!r.length)throw console.error("[Telegram.WebApp] Bottom button text is required",t.text),Error("WebAppBottomButtonParamInvalid");if(r.length>64)throw console.error("[Telegram.WebApp] Bottom button text is too long",r),Error("WebAppBottomButtonParamInvalid");v=r}if(void 0!==t.color){if(!1===t.color||null===t.color)m=!1;else{var n=G(t.color);if(!n)throw console.error("[Telegram.WebApp] Bottom button color format is invalid",t.color),Error("WebAppBottomButtonParamInvalid");m=n}}if(void 0!==t.text_color){if(!1===t.text_color||null===t.text_color)h=!1;else{var i=G(t.text_color);if(!i)throw console.error("[Telegram.WebApp] Bottom button text color format is invalid",t.text_color),Error("WebAppBottomButtonParamInvalid");h=i}}if(void 0!==t.is_visible){if(t.is_visible&&!W.text.length)throw console.error("[Telegram.WebApp] Bottom button text is required"),Error("WebAppBottomButtonParamInvalid");u=!!t.is_visible}if(void 0!==t.has_shine_effect&&(b=!!t.has_shine_effect),!o&&void 0!==t.position){if("left"!=t.position&&"right"!=t.position&&"top"!=t.position&&"bottom"!=t.position)throw console.error("[Telegram.WebApp] Bottom button posiition is invalid",t.position),Error("WebAppBottomButtonParamInvalid");_=t.position}return void 0!==t.is_active&&(f=!!t.is_active),C(),W},W},en=eo("main"),ei=eo("secondary"),ea=function(){var e=!1,r={};Object.defineProperty(r,"isVisible",{set:function(e){a({is_visible:e})},get:function(){return e},enumerable:!0});var o=null;function n(){return{is_visible:e}}function i(){return!!K("6.10")||(console.warn("[Telegram.WebApp] SettingsButton is not supported in version "+l),!1)}function a(a){var s,p,l;return i()&&(void 0!==a.is_visible&&(e=!!a.is_visible),o!==(l=(void 0===(s=p=n())&&(s=n()),JSON.stringify(s)))&&(o=l,t.postEvent("web_app_setup_settings_button",!1,p))),r}return t.onEvent("settings_button_pressed",function e(){$("settingsButtonClicked")}),r.onClick=function(e){return i()&&A("settingsButtonClicked",e),r},r.offClick=function(e){return i()&&w("settingsButtonClicked",e),r},r.show=function(){return a({is_visible:!0})},r.hide=function(){return a({is_visible:!1})},r}(),es=function(){var e={};function r(r){if(!K("6.1"))return console.warn("[Telegram.WebApp] HapticFeedback is not supported in version "+l),e;if("impact"==r.type){if("light"!=r.impact_style&&"medium"!=r.impact_style&&"heavy"!=r.impact_style&&"rigid"!=r.impact_style&&"soft"!=r.impact_style)throw console.error("[Telegram.WebApp] Haptic impact style is invalid",r.impact_style),Error("WebAppHapticImpactStyleInvalid")}else if("notification"==r.type){if("error"!=r.notification_type&&"success"!=r.notification_type&&"warning"!=r.notification_type)throw console.error("[Telegram.WebApp] Haptic notification type is invalid",r.notification_type),Error("WebAppHapticNotificationTypeInvalid")}else if("selection_change"==r.type);else throw console.error("[Telegram.WebApp] Haptic feedback type is invalid",r.type),Error("WebAppHapticFeedbackTypeInvalid");return t.postEvent("web_app_trigger_haptic_feedback",!1,r),e}return e.impactOccurred=function(e){return r({type:"impact",impact_style:e})},e.notificationOccurred=function(e){return r({type:"notification",notification_type:e})},e.selectionChanged=function(){return r({type:"selection_change"})},e}(),ep=function(){var e={};function t(t,r,o){if(!K("6.9"))throw console.error("[Telegram.WebApp] CloudStorage is not supported in version "+l),Error("WebAppMethodUnsupported");return eg(t,r,o),e}return e.setItem=function(e,r,o){return t("saveStorageValue",{key:e,value:r},o)},e.getItem=function(t,r){return e.getItems([t],r?function(e,o){e?r(e):r(null,o[t])}:null)},e.getItems=function(e,r){return t("getStorageValues",{keys:e},r)},e.removeItem=function(t,r){return e.removeItems([t],r)},e.removeItems=function(e,r){return t("deleteStorageValues",{keys:e},r)},e.getKeys=function(e){return t("getStorageKeys",{},e)},e}(),el=function(){var e=!1,r=!1,o="unknown",n=!1,i=!1,a=!1,s="",p={};Object.defineProperty(p,"isInited",{get:function(){return e},enumerable:!0}),Object.defineProperty(p,"isBiometricAvailable",{get:function(){return e&&r},enumerable:!0}),Object.defineProperty(p,"biometricType",{get:function(){return o||"unknown"},enumerable:!0}),Object.defineProperty(p,"isAccessRequested",{get:function(){return n},enumerable:!0}),Object.defineProperty(p,"isAccessGranted",{get:function(){return n&&i},enumerable:!0}),Object.defineProperty(p,"isBiometricTokenSaved",{get:function(){return a},enumerable:!0}),Object.defineProperty(p,"deviceId",{get:function(){return s||""},enumerable:!0});var c={callbacks:[]},u=!1,f=!1,b=!1;function d(){return!!K("7.2")||(console.warn("[Telegram.WebApp] BiometricManager is not supported in version "+l),!1)}function g(){if(!e)throw console.error("[Telegram.WebApp] BiometricManager should be inited before using."),Error("WebAppBiometricManagerNotInited");return!0}return t.onEvent("biometry_info_received",function t(p,l){if(e=!0,l.available?(r=!0,o=l.type||"unknown",l.access_requested?(n=!0,i=!!l.access_granted,a=!!l.token_saved):(n=!1,i=!1,a=!1)):(r=!1,o="unknown",n=!1,i=!1,a=!1),s=l.device_id||"",c.callbacks.length>0)for(var f=0;f<c.callbacks.length;f++)(0,c.callbacks[f])();if(u){var b=u;u=!1,b.callback&&b.callback(i)}$("biometricManagerUpdated")}),t.onEvent("biometry_auth_requested",function e(t,r){var o="authorized"==r.status,n=r.token||"";if(f){var i=f;f=!1,i.callback&&i.callback(o,o?n:null)}$("biometricAuthRequested",o?{isAuthenticated:!0,biometricToken:n}:{isAuthenticated:!1})}),t.onEvent("biometry_token_updated",function e(t,o){var i=!1;if(r&&n&&("updated"==o.status?(a=!0,i=!0):"removed"==o.status&&(a=!1,i=!0)),b){var s=b;b=!1,s.callback&&s.callback(i)}$("biometricTokenUpdated",{isUpdated:i})}),p.init=function(r){return!d()||e||(r&&c.callbacks.push(r),t.postEvent("web_app_biometry_get_info",!1)),p},p.requestAccess=function(e,o){if(!d())return p;if(g(),!r)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(u)throw console.error("[Telegram.WebApp] Access is already requested"),Error("WebAppBiometricManagerAccessRequested");var n={};if(void 0!==e.reason){var i=y(e.reason);if(i.length>128)throw console.error("[Telegram.WebApp] Biometric reason is too long",i),Error("WebAppBiometricRequestAccessParamInvalid");i.length>0&&(n.reason=i)}return u={callback:o},t.postEvent("web_app_biometry_request_access",!1,n),p},p.authenticate=function(e,o){if(!d())return p;if(g(),!r)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!i)throw console.error("[Telegram.WebApp] Biometric access was not granted by the user."),Error("WebAppBiometricManagerBiometricAccessNotGranted");if(f)throw console.error("[Telegram.WebApp] Authentication request is already in progress."),Error("WebAppBiometricManagerAuthenticationRequested");var n={};if(void 0!==e.reason){var a=y(e.reason);if(a.length>128)throw console.error("[Telegram.WebApp] Biometric reason is too long",a),Error("WebAppBiometricRequestAccessParamInvalid");a.length>0&&(n.reason=a)}return f={callback:o},t.postEvent("web_app_biometry_request_auth",!1,n),p},p.updateBiometricToken=function(e,o){if(!d())return p;if((e=e||"").length>1024)throw console.error("[Telegram.WebApp] Token is too long",e),Error("WebAppBiometricManagerTokenInvalid");if(g(),!r)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!i)throw console.error("[Telegram.WebApp] Biometric access was not granted by the user."),Error("WebAppBiometricManagerBiometricAccessNotGranted");if(b)throw console.error("[Telegram.WebApp] Token request is already in progress."),Error("WebAppBiometricManagerTokenUpdateRequested");return b={callback:o},t.postEvent("web_app_biometry_update_token",!1,{token:e}),p},p.openSettings=function(){if(!d())return p;if(g(),!r)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!n)throw console.error("[Telegram.WebApp] Biometric access was not requested yet."),Error("WebAppBiometricManagerBiometricsAccessNotRequested");return i?(console.warn("[Telegram.WebApp] Biometric access was granted by the user, no need to go to settings."),p):(t.postEvent("web_app_biometry_open_settings",!1),p)},p}(),ec={},eu=!1,ef=!1,eb=!1,ed=!1;function eg(e,r,o){if(!K("6.9"))throw console.error("[Telegram.WebApp] Method invokeCustomMethod is not supported in version "+l),Error("WebAppMethodUnsupported");var n=k(16);T[n]={callback:o},t.postEvent("web_app_invoke_custom_method",!1,{req_id:n,method:e,params:r||{}})}window.Telegram||(window.Telegram={}),Object.defineProperty(n,"initData",{get:function(){return i},enumerable:!0}),Object.defineProperty(n,"initDataUnsafe",{get:function(){return a},enumerable:!0}),Object.defineProperty(n,"version",{get:function(){return l},enumerable:!0}),Object.defineProperty(n,"platform",{get:function(){return c},enumerable:!0}),Object.defineProperty(n,"colorScheme",{get:function(){return p},enumerable:!0}),Object.defineProperty(n,"themeParams",{get:function(){return s},enumerable:!0}),Object.defineProperty(n,"isExpanded",{get:function(){return E},enumerable:!0}),Object.defineProperty(n,"viewportHeight",{get:function(){return(!1===P?window.innerHeight:P)-J},enumerable:!0}),Object.defineProperty(n,"viewportStableHeight",{get:function(){return(!1===x?window.innerHeight:x)-J},enumerable:!0}),Object.defineProperty(n,"isClosingConfirmationEnabled",{set:function(e){!function e(r){if(!K("6.2")){console.warn("[Telegram.WebApp] Closing confirmation is not supported in version "+l);return}C=!!r,t.postEvent("web_app_setup_closing_behavior",!1,{need_confirmation:C})}(e)},get:function(){return C},enumerable:!0}),Object.defineProperty(n,"isVerticalSwipesEnabled",{set:function(e){!function e(r){if(!K("7.7")){console.warn("[Telegram.WebApp] Changing swipes behavior is not supported in version "+l);return}I=!!r,t.postEvent("web_app_setup_swipe_behavior",!1,{allow_vertical_swipe:I})}(e)},get:function(){return I},enumerable:!0}),Object.defineProperty(n,"headerColor",{set:function(e){!function e(t){if(!K("6.1")){console.warn("[Telegram.WebApp] Header color is not supported in version "+l);return}!K("6.9")&&(s.bg_color&&s.bg_color==t?t="bg_color":s.secondary_bg_color&&s.secondary_bg_color==t&&(t="secondary_bg_color"));var r=null,o=null;if("bg_color"==t||"secondary_bg_color"==t)o=t;else if(K("6.9")&&!(r=G(t)))throw console.error("[Telegram.WebApp] Header color format is invalid",t),Error("WebAppHeaderColorInvalid");if(!K("6.9")&&"bg_color"!=o&&"secondary_bg_color"!=o)throw console.error("[Telegram.WebApp] Header color key should be one of Telegram.WebApp.themeParams.bg_color, Telegram.WebApp.themeParams.secondary_bg_color, 'bg_color', 'secondary_bg_color'",t),Error("WebAppHeaderColorKeyInvalid");S=o,q=r,D()}(e)},get:function(){return"secondary_bg_color"==S?s.secondary_bg_color:"bg_color"==S?s.bg_color:q},enumerable:!0}),Object.defineProperty(n,"backgroundColor",{set:function(e){!function e(t){var r;if(!K("6.1")){console.warn("[Telegram.WebApp] Background color is not supported in version "+l);return}if("bg_color"==t||"secondary_bg_color"==t)r=t;else if(!(r=G(t)))throw console.error("[Telegram.WebApp] Background color format is invalid",t),Error("WebAppBackgroundColorInvalid");H=r,R()}(e)},get:function(){return L()},enumerable:!0}),Object.defineProperty(n,"bottomBarColor",{set:function(e){!function e(t){var r;if(!K("7.10")){console.warn("[Telegram.WebApp] Bottom bar color is not supported in version "+l);return}if("bg_color"==t||"secondary_bg_color"==t||"bottom_bar_bg_color"==t)r=t;else if(!(r=G(t)))throw console.error("[Telegram.WebApp] Bottom bar color format is invalid",t),Error("WebAppBottomBarColorInvalid");O=r,z(),window.Telegram.WebApp.SecondaryButton.setParams({})}(e)},get:function(){return N()},enumerable:!0}),Object.defineProperty(n,"BackButton",{value:X,enumerable:!0}),Object.defineProperty(n,"MainButton",{value:en,enumerable:!0}),Object.defineProperty(n,"SecondaryButton",{value:ei,enumerable:!0}),Object.defineProperty(n,"SettingsButton",{value:ea,enumerable:!0}),Object.defineProperty(n,"HapticFeedback",{value:es,enumerable:!0}),Object.defineProperty(n,"CloudStorage",{value:ep,enumerable:!0}),Object.defineProperty(n,"BiometricManager",{value:el,enumerable:!0}),n.setHeaderColor=function(e){n.headerColor=e},n.setBackgroundColor=function(e){n.backgroundColor=e},n.setBottomBarColor=function(e){n.bottomBarColor=e},n.enableClosingConfirmation=function(){n.isClosingConfirmationEnabled=!0},n.disableClosingConfirmation=function(){n.isClosingConfirmationEnabled=!1},n.enableVerticalSwipes=function(){n.isVerticalSwipesEnabled=!0},n.disableVerticalSwipes=function(){n.isVerticalSwipesEnabled=!1},n.isVersionAtLeast=function(e){return K(e)},n.onEvent=function(e,t){A(e,t)},n.offEvent=function(e,t){w(e,t)},n.sendData=function(e){if(!e||!e.length)throw console.error("[Telegram.WebApp] Data is required",e),Error("WebAppDataInvalid");if(function e(t){if(window.Blob)try{return new Blob([t]).size}catch(r){}for(var o=t.length,n=t.length-1;n>=0;n--){var i=t.charCodeAt(n);i>127&&i<=2047?o++:i>2047&&i<=65535&&(o+=2),i>=56320&&i<=57343&&n--}return o}(e)>4096)throw console.error("[Telegram.WebApp] Data is too long",e),Error("WebAppDataInvalid");t.postEvent("web_app_data_send",!1,{data:e})},n.switchInlineQuery=function(e,o){if(!K("6.6"))throw console.error("[Telegram.WebApp] Method switchInlineQuery is not supported in version "+l),Error("WebAppMethodUnsupported");if(!r.tgWebAppBotInline)throw console.error("[Telegram.WebApp] Inline mode is disabled for this bot. Read more about inline mode: https://core.telegram.org/bots/inline"),Error("WebAppInlineModeDisabled");if((e=e||"").length>256)throw console.error("[Telegram.WebApp] Inline query is too long",e),Error("WebAppInlineQueryInvalid");var n=[];if(o){if(!Array.isArray(o))throw console.error("[Telegram.WebApp] Choose chat types should be an array",o),Error("WebAppInlineChooseChatTypesInvalid");for(var i={users:1,bots:1,groups:1,channels:1},a=0;a<o.length;a++){var s=o[a];if(!i[s])throw console.error("[Telegram.WebApp] Choose chat type is invalid",s),Error("WebAppInlineChooseChatTypeInvalid");2!=i[s]&&(i[s]=2,n.push(s))}}t.postEvent("web_app_switch_inline_query",!1,{query:e,chat_types:n})},n.openLink=function(e,r){var o=document.createElement("A");if(o.href=e,"http:"!=o.protocol&&"https:"!=o.protocol)throw console.error("[Telegram.WebApp] Url protocol is not supported",e),Error("WebAppTgUrlInvalid");var e=o.href;if(r=r||{},K("6.1")){var n={url:e};K("6.4")&&r.try_instant_view&&(n.try_instant_view=!0),K("7.6")&&r.try_browser&&(n.try_browser=r.try_browser),t.postEvent("web_app_open_link",!1,n)}else window.open(e,"_blank")},n.openTelegramLink=function(e){var r=document.createElement("A");if(r.href=e,"http:"!=r.protocol&&"https:"!=r.protocol)throw console.error("[Telegram.WebApp] Url protocol is not supported",e),Error("WebAppTgUrlInvalid");if("t.me"!=r.hostname)throw console.error("[Telegram.WebApp] Url host is not supported",e),Error("WebAppTgUrlInvalid");var n=r.pathname+r.search;o||K("6.1")?t.postEvent("web_app_open_tg_link",!1,{path_full:n}):location.href="https://t.me"+n},n.openInvoice=function(e,r){var o,n,i=document.createElement("A");if(i.href=e,"http:"!=i.protocol&&"https:"!=i.protocol||"t.me"!=i.hostname||!(o=i.pathname.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/))||!(n=o[2]))throw console.error("[Telegram.WebApp] Invoice url is invalid",e),Error("WebAppInvoiceUrlInvalid");if(!K("6.1"))throw console.error("[Telegram.WebApp] Method openInvoice is not supported in version "+l),Error("WebAppMethodUnsupported");if(ec[n])throw console.error("[Telegram.WebApp] Invoice is already opened"),Error("WebAppInvoiceOpened");ec[n]={url:e,callback:r},t.postEvent("web_app_open_invoice",!1,{slug:n})},n.showPopup=function(e,r){if(!K("6.2"))throw console.error("[Telegram.WebApp] Method showPopup is not supported in version "+l),Error("WebAppMethodUnsupported");if(eu)throw console.error("[Telegram.WebApp] Popup is already opened"),Error("WebAppPopupOpened");var o="",n="",i=[],a={};if(void 0!==e.title){if((o=y(e.title)).length>64)throw console.error("[Telegram.WebApp] Popup title is too long",o),Error("WebAppPopupParamInvalid");o.length>0&&(a.title=o)}if(void 0!==e.message&&(n=y(e.message)),!n.length)throw console.error("[Telegram.WebApp] Popup message is required",e.message),Error("WebAppPopupParamInvalid");if(n.length>256)throw console.error("[Telegram.WebApp] Popup message is too long",n),Error("WebAppPopupParamInvalid");if(a.message=n,void 0!==e.buttons){if(!Array.isArray(e.buttons))throw console.error("[Telegram.WebApp] Popup buttons should be an array",e.buttons),Error("WebAppPopupParamInvalid");for(var s=0;s<e.buttons.length;s++){var p=e.buttons[s],c={},u="";if(void 0!==p.id&&(u=p.id.toString()).length>64)throw console.error("[Telegram.WebApp] Popup button id is too long",u),Error("WebAppPopupParamInvalid");c.id=u;var f=p.type;if(void 0===f&&(f="default"),c.type=f,"ok"==f||"close"==f||"cancel"==f);else if("default"==f||"destructive"==f){var b="";if(void 0!==p.text&&(b=y(p.text)),!b.length)throw console.error("[Telegram.WebApp] Popup button text is required for type "+f,p.text),Error("WebAppPopupParamInvalid");if(b.length>64)throw console.error("[Telegram.WebApp] Popup button text is too long",b),Error("WebAppPopupParamInvalid");c.text=b}else throw console.error("[Telegram.WebApp] Popup button type is invalid",f),Error("WebAppPopupParamInvalid");i.push(c)}}else i.push({id:"",type:"close"});if(i.length<1)throw console.error("[Telegram.WebApp] Popup should have at least one button"),Error("WebAppPopupParamInvalid");if(i.length>3)throw console.error("[Telegram.WebApp] Popup should not have more than 3 buttons"),Error("WebAppPopupParamInvalid");a.buttons=i,eu={callback:r},t.postEvent("web_app_open_popup",!1,a)},n.showAlert=function(e,t){n.showPopup({message:e},t?function(){t()}:null)},n.showConfirm=function(e,t){n.showPopup({message:e,buttons:[{type:"ok",id:"ok"},{type:"cancel"}]},t?function(e){t("ok"==e)}:null)},n.showScanQrPopup=function(e,r){if(!K("6.4"))throw console.error("[Telegram.WebApp] Method showScanQrPopup is not supported in version "+l),Error("WebAppMethodUnsupported");if(ef)throw console.error("[Telegram.WebApp] Popup is already opened"),Error("WebAppScanQrPopupOpened");var o="",n={};if(void 0!==e.text){if((o=y(e.text)).length>64)throw console.error("[Telegram.WebApp] Scan QR popup text is too long",o),Error("WebAppScanQrPopupParamInvalid");o.length>0&&(n.text=o)}ef={callback:r},t.postEvent("web_app_open_scan_qr_popup",!1,n)},n.closeScanQrPopup=function(){if(!K("6.4"))throw console.error("[Telegram.WebApp] Method closeScanQrPopup is not supported in version "+l),Error("WebAppMethodUnsupported");ef=!1,t.postEvent("web_app_close_scan_qr_popup",!1)},n.readTextFromClipboard=function(e){if(!K("6.4"))throw console.error("[Telegram.WebApp] Method readTextFromClipboard is not supported in version "+l),Error("WebAppMethodUnsupported");var r=k(16);T[r]={callback:e},t.postEvent("web_app_read_text_from_clipboard",!1,{req_id:r})},n.requestWriteAccess=function(e){if(!K("6.9"))throw console.error("[Telegram.WebApp] Method requestWriteAccess is not supported in version "+l),Error("WebAppMethodUnsupported");if(eb)throw console.error("[Telegram.WebApp] Write access is already requested"),Error("WebAppWriteAccessRequested");eb={callback:e},t.postEvent("web_app_request_write_access")},n.requestContact=function(e){if(!K("6.9"))throw console.error("[Telegram.WebApp] Method requestContact is not supported in version "+l),Error("WebAppMethodUnsupported");if(ed)throw console.error("[Telegram.WebApp] Contact is already requested"),Error("WebAppContactRequested");ed={callback:e},t.postEvent("web_app_request_phone")},n.shareToStory=function(e,r){if(r=r||{},!K("7.8"))throw console.error("[Telegram.WebApp] Method shareToStory is not supported in version "+l),Error("WebAppMethodUnsupported");var o=document.createElement("A");if(o.href=e,"http:"!=o.protocol&&"https:"!=o.protocol)throw console.error("[Telegram.WebApp] Media url protocol is not supported",url),Error("WebAppMediaUrlInvalid");var n={};if(n.media_url=o.href,void 0!==r.text){var i=y(r.text);if(i.length>2048)throw console.error("[Telegram.WebApp] Text is too long",i),Error("WebAppShareToStoryParamInvalid");i.length>0&&(n.text=i)}if(void 0!==r.widget_link){if(r.widget_link=r.widget_link||{},o.href=r.widget_link.url,"http:"!=o.protocol&&"https:"!=o.protocol)throw console.error("[Telegram.WebApp] Link protocol is not supported",url),Error("WebAppShareToStoryParamInvalid");var a={url:o.href};if(void 0!==r.widget_link.name){var s=y(r.widget_link.name);if(s.length>48)throw console.error("[Telegram.WebApp] Link name is too long",s),Error("WebAppShareToStoryParamInvalid");s.length>0&&(a.name=s)}n.widget_link=a}t.postEvent("web_app_share_to_story",!1,n)},n.invokeCustomMethod=function(e,t,r){eg(e,t,r)},n.ready=function(){t.postEvent("web_app_ready")},n.expand=function(){t.postEvent("web_app_expand")},n.close=function(e){e=e||{};var r={};K("7.6")&&e.return_back&&(r.return_back=!0),t.postEvent("web_app_close",!1,r)},window.Telegram.WebApp=n,D(),R(),z(),B(),r.tgWebAppShowSettings&&ea.show(),window.addEventListener("resize",h),o&&document.addEventListener("click",function e(t){if(!t.metaKey&&!t.ctrlKey){for(var r=t.target;"A"!=r.tagName&&r.parentNode;)r=r.parentNode;"A"==r.tagName&&"_blank"!=r.target&&("http:"==r.protocol||"https:"==r.protocol)&&"t.me"==r.hostname&&(n.openTgLink(r.href),t.preventDefault())}}),t.onEvent("theme_changed",function e(t,r){r.theme_params&&(W(r.theme_params),window.Telegram.WebApp.MainButton.setParams({}),window.Telegram.WebApp.SecondaryButton.setParams({}),D(),R(),z(),$("themeChanged"))}),t.onEvent("viewport_changed",function e(t,r){r.height&&(window.removeEventListener("resize",h),B(r))}),t.onEvent("invoice_closed",function e(t,r){if(r.slug&&ec[r.slug]){var o=ec[r.slug];delete ec[r.slug],o.callback&&o.callback(r.status),$("invoiceClosed",{url:o.url,status:r.status})}}),t.onEvent("popup_closed",function e(t,r){if(eu){var o=eu;eu=!1;var n=null;void 0!==r.button_id&&(n=r.button_id),o.callback&&o.callback(n),$("popupClosed",{button_id:n})}}),t.onEvent("qr_text_received",function e(r,o){if(ef){var n=ef,i=null;void 0!==o.data&&(i=o.data),n.callback&&n.callback(i)&&(ef=!1,t.postEvent("web_app_close_scan_qr_popup",!1)),$("qrTextReceived",{data:i})}}),t.onEvent("scan_qr_popup_closed",function e(t,r){ef=!1,$("scanQrPopupClosed")}),t.onEvent("clipboard_text_received",function e(t,r){if(r.req_id&&T[r.req_id]){var o=T[r.req_id];delete T[r.req_id];var n=null;void 0!==r.data&&(n=r.data),o.callback&&o.callback(n),$("clipboardTextReceived",{data:n})}}),t.onEvent("write_access_requested",function e(t,r){if(eb){var o=eb;eb=!1,o.callback&&o.callback("allowed"==r.status),$("writeAccessRequested",{status:r.status})}}),t.onEvent("phone_requested",function t(r,o){if(ed){var n,i,a,s,p,l=ed;ed=!1;var c="sent"==o.status,u={status:o.status};if(c){n=function(t){if(t&&t.length)for(var r in u.response=t,u.responseUnsafe=e.urlParseQueryString(t),u.responseUnsafe){var o=u.responseUnsafe[r];try{("{"==o.substr(0,1)&&"}"==o.substr(-1)||"["==o.substr(0,1)&&"]"==o.substr(-1))&&(u.responseUnsafe[r]=JSON.parse(o))}catch(n){}}l.callback&&l.callback(c,u),$("contactRequested",u)},s=0,p=function(){eg("getRequestedContact",{},function(e,t){t&&t.length?(clearTimeout(a),n(t)):(s+=50,i=setTimeout(p,s))})},a=setTimeout(function(){clearTimeout(i),n("")},3e3),p()}else l.callback&&l.callback(c,u),$("contactRequested",u)}}),t.onEvent("custom_method_invoked",function e(t,r){if(r.req_id&&T[r.req_id]){var o=T[r.req_id];delete T[r.req_id];var n=null,i=null;void 0!==r.result&&(n=r.result),void 0!==r.error&&(i=r.error),o.callback&&o.callback(i,n)}}),t.postEvent("web_app_request_theme"),t.postEvent("web_app_request_viewport")}();