@tma.js/sdk 2.4.0 → 2.5.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.
@@ -36,6 +36,16 @@ export declare class Utils extends WithSupports<'readTextFromClipboard'> {
36
36
  * - Access to clipboard is not allowed
37
37
  */
38
38
  readTextFromClipboard(): Promise<string | null>;
39
+ /**
40
+ * Shares specified URL with the passed to the chats, selected by user. After being called,
41
+ * it closes the mini application.
42
+ *
43
+ * This method uses Telegram's Share Links.
44
+ * @param url - URL to share.
45
+ * @param text - text to append after the URL.
46
+ * @see https://core.telegram.org/api/links#share-links
47
+ */
48
+ shareURL(url: string, text?: string): void;
39
49
  /**
40
50
  * Checks if specified method parameter is supported by current component.
41
51
  */
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var Pe=Object.defineProperty;var Se=(e,t,s)=>t in e?Pe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var c=(e,t,s)=>(Se(e,typeof t!="symbol"?t+"":t,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function vt(e,t){let s;const n=()=>{s!==void 0&&t&&t(s),s=void 0};return[()=>s===void 0?s=e(n):s,n]}function Y(e){const t=L(),{count:s}=t;t.unsubscribe(e),s&&!t.count&&Me()}function Pt(e){return L().subscribe(e),()=>Y(e)}class Re{constructor(t,s={}){this.scope=t,this.options=s}print(t,...s){const n=new Date,r=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(n),{textColor:i,bgColor:o}=this.options,a="font-weight: bold;padding: 0 5px;border-radius:5px";console[t](`%c${r}%c / %c${this.scope}`,`${a};background-color: lightblue;color:black`,"",`${a};${i?`color:${i};`:""}${o?`background-color:${o}`:""}`,...s)}error(...t){this.print("error",...t)}log(...t){this.print("log",...t)}}const K=new Re("SDK",{bgColor:"forestgreen",textColor:"white"});let F=!1;const wt=({name:e,payload:t})=>{K.log("Event received:",t?{name:e,payload:t}:{name:e})};function Te(e){F!==e&&(F=e,e?Pt(wt):Y(wt))}function Ce(...e){F&&K.log(...e)}class P{constructor(){c(this,"listeners",new Map);c(this,"listenersCount",0);c(this,"subscribeListeners",[])}clear(){this.listeners.clear(),this.subscribeListeners=[]}get count(){return this.listenersCount+this.subscribeListeners.length}emit(t,...s){this.subscribeListeners.forEach(r=>r({event:t,args:s})),(this.listeners.get(t)||[]).forEach(([r,i])=>{r(...s),i&&this.off(t,r)})}on(t,s,n){let r=this.listeners.get(t);return r||this.listeners.set(t,r=[]),r.push([s,n]),this.listenersCount+=1,()=>this.off(t,s)}off(t,s){const n=this.listeners.get(t)||[];for(let r=0;r<n.length;r+=1)if(s===n[r][0]){n.splice(r,1),this.listenersCount-=1;return}}subscribe(t){return this.subscribeListeners.push(t),()=>this.unsubscribe(t)}unsubscribe(t){for(let s=0;s<this.subscribeListeners.length;s+=1)if(this.subscribeListeners[s]===t){this.subscribeListeners.splice(s,1);return}}}function J(e,t,s){return window.addEventListener(e,t,s),()=>window.removeEventListener(e,t,s)}function X(...e){let t=!1;const s=[...e];return[n=>!t&&s.push(n),()=>{t||(t=!0,s.forEach(n=>n()))},t]}class q extends Error{constructor(t,s,n){super(s,{cause:n}),this.type=t,Object.setPrototypeOf(this,q.prototype)}}function f(e,t,s){return new q(e,t,s)}const St="ERR_METHOD_UNSUPPORTED",Rt="ERR_METHOD_PARAMETER_UNSUPPORTED",Tt="ERR_UNKNOWN_ENV",Ct="ERR_INVOKE_CUSTOM_METHOD_RESPONSE",xt="ERR_TIMED_OUT",At="ERR_UNEXPECTED_TYPE",Z="ERR_PARSE",It="ERR_NAVIGATION_LIST_EMPTY",Nt="ERR_NAVIGATION_CURSOR_INVALID",xe="ERR_NAVIGATION_ITEM_INVALID",Ae="ERR_SSR_INIT",qt="ERR_INVALID_PATH_BASE";function R(){return f(At,"Value has unexpected type")}class B{constructor(t,s,n){this.parser=t,this.isOptional=s,this.type=n}parse(t){if(!(this.isOptional&&t===void 0))try{return this.parser(t)}catch(s){throw f(Z,`Unable to parse value${this.type?` as ${this.type}`:""}`,s)}}optional(){return this.isOptional=!0,this}}function T(e,t){return()=>new B(e,!1,t)}const w=T(e=>{if(typeof e=="boolean")return e;const t=String(e);if(t==="1"||t==="true")return!0;if(t==="0"||t==="false")return!1;throw R()},"boolean");function Dt(e,t){const s={};for(const n in e){const r=e[n];if(!r)continue;let i,o;if(typeof r=="function"||"parse"in r)i=n,o=typeof r=="function"?r:r.parse.bind(r);else{const{type:a}=r;i=r.from||n,o=typeof a=="function"?a:a.parse.bind(a)}try{const a=o(t(i));a!==void 0&&(s[n]=a)}catch(a){throw f(Z,`Unable to parse field "${n}"`,a)}}return s}function tt(e){let t=e;if(typeof t=="string"&&(t=JSON.parse(t)),typeof t!="object"||t===null||Array.isArray(t))throw R();return t}function l(e,t){return new B(s=>{const n=tt(s);return Dt(e,r=>n[r])},!1,t)}const y=T(e=>{if(typeof e=="number")return e;if(typeof e=="string"){const t=Number(e);if(!Number.isNaN(t))return t}throw R()},"number");function O(e){return/^#[\da-f]{6}$/i.test(e)}function kt(e){return/^#[\da-f]{3}$/i.test(e)}function et(e){const t=e.replace(/\s/g,"").toLowerCase();if(O(t))return t;if(kt(t)){let n="#";for(let r=0;r<3;r+=1)n+=t[1+r].repeat(2);return n}const s=t.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||t.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(!s)throw new Error(`Value "${e}" does not satisfy any of known RGB formats.`);return s.slice(1).reduce((n,r)=>{const i=parseInt(r,10).toString(16);return n+(i.length===1?"0":"")+i},"#")}const h=T(e=>{if(typeof e=="string"||typeof e=="number")return e.toString();throw R()},"string"),st=T(e=>et(h().parse(e)),"rgb");function Mt(e){return l({eventType:h(),eventData:t=>t}).parse(e)}function Ie(){["TelegramGameProxy_receiveEvent","TelegramGameProxy","Telegram"].forEach(e=>{delete window[e]})}function Q(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}function Ne(){[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=window;e.forEach((s,n,r)=>{if(n===r.length-1){t[s]=Q;return}s in t||(t[s]={}),t=t[s]})})}const qe={clipboard_text_received:l({req_id:h(),data:e=>e===null?e:h().optional().parse(e)}),custom_method_invoked:l({req_id:h(),result:e=>e,error:h().optional()}),invoice_closed:l({slug:h(),status:h()}),phone_requested:l({status:h()}),popup_closed:{parse(e){return l({button_id:t=>t==null?void 0:h().parse(t)}).parse(e??{})}},qr_text_received:l({data:h().optional()}),theme_changed:l({theme_params:e=>{const t=st().optional();return Object.entries(tt(e)).reduce((s,[n,r])=>(s[n]=t.parse(r),s),{})}}),viewport_changed:l({height:y(),width:e=>e==null?window.innerWidth:y().parse(e),is_state_stable:w(),is_expanded:w()}),write_access_requested:l({status:h()})};function De(){const e=new P,t=new P;t.subscribe(n=>{e.emit("event",{name:n.event,payload:n.args[0]})}),Ne();const[,s]=X(Ie,J("resize",()=>{t.emit("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),J("message",n=>{if(n.source!==window.parent)return;let r;try{r=Mt(n.data)}catch{return}const{eventType:i,eventData:o}=r,a=qe[i];try{const p=a?a.parse(o):o;t.emit(...p?[i,p]:[i])}catch(p){K.error(`An error occurred processing the "${i}" event from the Telegram application. Please, file an issue here: https://github.com/Telegram-Mini-Apps/tma.js/issues/new/choose`,r,p)}}),()=>e.clear(),()=>t.clear());return[{on:t.on.bind(t),off:t.off.bind(t),subscribe(n){return e.on("event",n)},unsubscribe(n){e.off("event",n)},get count(){return t.count+e.count}},s]}const[ke,Me]=vt(e=>{const[t,s]=De(),n=t.off.bind(t);return t.off=(r,i)=>{const{count:o}=t;n(r,i),o&&!t.count&&e()},[t,s]},([,e])=>e());function L(){return ke()[0]}function D(e,t){L().off(e,t)}function g(e,t,s){return L().on(e,t,s)}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vt(e,t){const s=e.split("."),n=t.split("."),r=Math.max(s.length,n.length);for(let i=0;i<r;i+=1){const o=parseInt(s[i]||"0",10),a=parseInt(n[i]||"0",10);if(o!==a)return o>a?1:-1}return 0}function b(e,t){return Vt(e,t)<=0}function E(e,t,s){if(typeof s=="string"){if(e==="web_app_open_link"&&t==="try_instant_view")return b("6.4",s);if(e==="web_app_set_header_color"&&t==="color")return b("6.9",s)}switch(e){case"web_app_open_tg_link":case"web_app_open_invoice":case"web_app_setup_back_button":case"web_app_set_background_color":case"web_app_set_header_color":case"web_app_trigger_haptic_feedback":return b("6.1",t);case"web_app_open_popup":return b("6.2",t);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return b("6.4",t);case"web_app_switch_inline_query":return b("6.7",t);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return b("6.9",t);case"web_app_setup_settings_button":return b("6.10",t);case"web_app_biometry_get_info":case"web_app_biometry_open_settings":case"web_app_biometry_request_access":case"web_app_biometry_request_auth":case"web_app_biometry_update_token":return b("7.2",t);default:return["iframe_ready","iframe_will_reload","web_app_close","web_app_data_send","web_app_expand","web_app_open_link","web_app_ready","web_app_request_theme","web_app_request_viewport","web_app_setup_main_button","web_app_setup_closing_behavior"].includes(e)}}function Bt(e){return"external"in e&&k(e.external)&&"notify"in e.external&&typeof e.external.notify=="function"}function Ot(e){return"TelegramWebviewProxy"in e&&k(e.TelegramWebviewProxy)&&"postEvent"in e.TelegramWebviewProxy&&typeof e.TelegramWebviewProxy.postEvent=="function"}function nt(){try{return window.self!==window.top}catch{return!0}}let Lt="https://web.telegram.org";function Ve(e){Lt=e}function $t(){return Lt}function S(e,t,s){let n={},r;t===void 0&&s===void 0?n={}:t!==void 0&&s!==void 0?(n=s,r=t):t!==void 0&&("targetOrigin"in t?n=t:r=t);const{targetOrigin:i=$t()}=n;if(Ce("Posting event:",r?{event:e,data:r}:{event:e}),nt()){window.parent.postMessage(JSON.stringify({eventType:e,eventData:r}),i);return}if(Bt(window)){window.external.notify(JSON.stringify({eventType:e,eventData:r}));return}if(Ot(window)){window.TelegramWebviewProxy.postEvent(e,JSON.stringify(r));return}throw f(Tt,"Unable to determine current environment and possible way to send event. You are probably trying to use Mini Apps method outside of Telegram application environment.")}function Ut(e){return(t,s)=>{if(!E(t,e))throw f(St,`Method "${t}" is unsupported in Mini Apps version ${e}`);if(k(s)){let n;if(t==="web_app_open_link"&&"try_instant_view"in s?n="try_instant_view":t==="web_app_set_header_color"&&"color"in s&&(n="color"),n&&!E(t,n,e))throw f(Rt,`Parameter "${n}" of "${t}" method is unsupported in Mini Apps version ${e}`)}return S(t,s)}}function rt(e){return({req_id:t})=>t===e}function Wt(e){return f(xt,`Timeout reached: ${e}ms`)}function it(e,t){return Promise.race([typeof e=="function"?e():e,new Promise((s,n)=>{setTimeout(()=>{n(Wt(t))},t)})])}async function d(e){let t;const s=new Promise(a=>{t=a}),{event:n,capture:r,timeout:i}=e,[,o]=X(...(Array.isArray(n)?n:[n]).map(a=>g(a,p=>(!r||r(p))&&t(p))));try{return(e.postEvent||S)(e.method,e.params),await(i?it(s,i):s)}finally{o()}}async function v(e,t,s,n={}){const{result:r,error:i}=await d({...n,method:"web_app_invoke_custom_method",event:"custom_method_invoked",params:{method:e,params:t,req_id:s},capture:rt(s)});if(i)throw f(Ct,i);return r}function V(...e){return e.map(t=>{if(typeof t=="string")return t;if(k(t))return V(Object.entries(t).map(s=>s[1]&&s[0]));if(Array.isArray(t))return V(...t)}).filter(Boolean).join(" ")}function Be(...e){return e.reduce((t,s)=>(k(s)&&Object.entries(s).forEach(([n,r])=>{const i=V(t[n],r);i.length&&(t[n]=i)}),t),{})}function ot(e){const t=et(e);return Math.sqrt([.299,.587,.114].reduce((s,n,r)=>{const i=parseInt(t.slice(1+r*2,1+(r+1)*2),16);return s+i*i*n},0))<120}class Oe{constructor(t){c(this,"ee",new P);c(this,"on",this.ee.on.bind(this.ee));c(this,"off",this.ee.off.bind(this.ee));this.state=t}clone(){return{...this.state}}set(t,s){Object.entries(typeof t=="string"?{[t]:s}:t).reduce((r,[i,o])=>this.state[i]===o||o===void 0?r:(this.state[i]=o,this.ee.emit(`change:${i}`,o),!0),!1)&&this.ee.emit("change",this.state)}get(t){return this.state[t]}}class at{constructor(t){c(this,"state");c(this,"get");c(this,"set");c(this,"clone");this.state=new Oe(t),this.set=this.state.set.bind(this.state),this.get=this.state.get.bind(this.state),this.clone=this.state.clone.bind(this.state)}}function Ht(e,t){return s=>E(t[s],e)}class ct extends at{constructor(s,n,r){super(s);c(this,"supports");this.supports=Ht(n,r)}}class Gt extends ct{constructor(s,n,r){super({isVisible:s},n,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"});c(this,"on",(s,n)=>s==="click"?g("back_button_pressed",n):this.state.on(s,n));c(this,"off",(s,n)=>s==="click"?D("back_button_pressed",n):this.state.off(s,n));this.postEvent=r}set isVisible(s){this.set("isVisible",s),this.postEvent("web_app_setup_back_button",{is_visible:s})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const ht=T(e=>e instanceof Date?e:new Date(y().parse(e)*1e3),"Date");function $(e,t){return new B(s=>{if(typeof s!="string"&&!(s instanceof URLSearchParams))throw R();const n=typeof s=="string"?new URLSearchParams(s):s;return Dt(e,r=>{const i=n.get(r);return i===null?void 0:i})},!1,t)}const Le=l({id:y(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat").optional(),mt=l({addedToAttachmentMenu:{type:w().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:w().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:y(),isBot:{type:w().optional(),from:"is_bot"},isPremium:{type:w().optional(),from:"is_premium"},languageCode:{type:h().optional(),from:"language_code"},lastName:{type:h().optional(),from:"last_name"},photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"User").optional();function jt(){return $({authDate:{type:ht(),from:"auth_date"},canSendAfter:{type:y().optional(),from:"can_send_after"},chat:Le,chatInstance:{type:h().optional(),from:"chat_instance"},chatType:{type:h().optional(),from:"chat_type"},hash:h(),queryId:{type:h().optional(),from:"query_id"},receiver:mt,startParam:{type:h().optional(),from:"start_param"},user:mt},"InitData")}function $e(e){return e.replace(/_[a-z]/g,t=>t[1].toUpperCase())}function Ue(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}const zt=T(e=>{const t=st().optional();return Object.entries(tt(e)).reduce((s,[n,r])=>(s[$e(n)]=t.parse(r),s),{})},"ThemeParams");function U(e){return $({botInline:{type:w().optional(),from:"tgWebAppBotInline"},initData:{type:jt().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:w().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:zt(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}}).parse(e)}function Ft(e){return U(e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&"))}function We(){return Ft(window.location.href)}function Jt(){return performance.getEntriesByType("navigation")[0]}function He(){const e=Jt();if(!e)throw new Error("Unable to get first navigation entry.");return Ft(e.name)}function Qt(e){return`tma.js/${e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}`}function Yt(e,t){sessionStorage.setItem(Qt(e),JSON.stringify(t))}function Kt(e){const t=sessionStorage.getItem(Qt(e));try{return t?JSON.parse(t):void 0}catch{}}function Ge(){return U(Kt("launchParams")||"")}function pt(e){return JSON.stringify(Object.fromEntries(Object.entries(e).map(([t,s])=>[Ue(t),s])))}function Xt(e){const{initDataRaw:t,themeParams:s,platform:n,version:r,showSettings:i,startParam:o,botInline:a}=e,p=new URLSearchParams;return p.set("tgWebAppPlatform",n),p.set("tgWebAppThemeParams",pt(s)),p.set("tgWebAppVersion",r),t&&p.set("tgWebAppData",t),o&&p.set("tgWebAppStartParam",o),typeof i=="boolean"&&p.set("tgWebAppShowSettings",i?"1":"0"),typeof a=="boolean"&&p.set("tgWebAppBotInline",a?"1":"0"),p.toString()}function Zt(e){Yt("launchParams",Xt(e))}function te(){for(const e of[We,He,Ge])try{const t=e();return Zt(t),t}catch{}throw new Error("Unable to retrieve launch parameters from any known source.")}function ut(){const e=Jt();return!!(e&&e.type==="reload")}function je(){let e=0;return()=>(e+=1).toString()}const[ze]=vt(je);function _(e,t){return()=>{const s=te(),n={...s,postEvent:Ut(s.version),createRequestId:ze()};if(typeof e=="function")return e(n);const[r,i,o]=X(),a=t({...n,state:ut()?Kt(e):void 0,addCleanup:r}),p=u=>(o||r(u.on("change",ve=>{Yt(e,ve)})),u);return[a instanceof Promise?a.then(p):p(a),i]}}const Fe=_("backButton",({postEvent:e,version:t,state:s={isVisible:!1}})=>new Gt(s.isVisible,t,e));class M extends ct{constructor(){super(...arguments);c(this,"on",this.state.on.bind(this.state));c(this,"off",this.state.off.bind(this.state))}}function ee(e){const t=e.available?e:{available:!1,device_id:"",token_saved:!1,access_requested:!1,access_granted:!1,type:""};return{available:!0,type:t.type,deviceId:t.device_id,tokenSaved:t.token_saved,accessRequested:t.access_requested,accessGranted:t.access_granted}}class se extends M{constructor({postEvent:s,version:n,...r}){super(r,n,{auth:"web_app_biometry_request_auth",openSettings:"web_app_biometry_open_settings",requestAccess:"web_app_biometry_request_access",updateToken:"web_app_biometry_update_token"});c(this,"postEvent");c(this,"authPromise");c(this,"accessPromise");this.postEvent=s}get available(){return this.get("available")}get accessGranted(){return this.get("accessGranted")}get accessRequested(){return this.get("accessRequested")}async authenticate({reason:s,...n}){return this.authPromise||(this.authPromise=d({...n,method:"web_app_biometry_request_auth",event:"biometry_auth_requested",postEvent:this.postEvent,params:{reason:(s||"").trim()}}).then(({token:r})=>r).finally(()=>this.authPromise=void 0)),this.authPromise}get deviceId(){return this.get("deviceId")}openSettings(){this.postEvent("web_app_biometry_open_settings")}requestAccess({reason:s,...n}={}){return this.accessPromise||(this.accessPromise=d({...n,postEvent:this.postEvent,method:"web_app_biometry_request_access",event:"biometry_info_received",params:{reason:s||""}}).then(r=>{const i=ee(r);return this.set(i),i.accessGranted}).finally(()=>this.accessPromise=void 0)),this.accessPromise}get biometryType(){return this.get("biometryType")}get tokenSaved(){return this.get("tokenSaved")}async updateToken({token:s,...n}={}){return["removed","updated"].includes((await d({...n,postEvent:this.postEvent,method:"web_app_biometry_update_token",event:"biometry_token_updated",params:{token:s||""}})).status)}}async function ne(e){return ee(await d({...e||{},method:"web_app_biometry_get_info",event:"biometry_info_received"}))}const Je=_("biometryManager",async({postEvent:e,version:t,state:s})=>new se({...s||E("web_app_biometry_get_info",t)?s||await ne({timeout:1e3}):{available:!1,accessGranted:!1,accessRequested:!1,tokenSaved:!1,deviceId:""},version:t,postEvent:e}));class lt extends at{constructor(){super(...arguments);c(this,"on",this.state.on.bind(this.state));c(this,"off",this.state.off.bind(this.state))}}class re extends lt{constructor(t,s){super({isConfirmationNeeded:t}),this.postEvent=s}set isConfirmationNeeded(t){this.set("isConfirmationNeeded",t),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:t})}get isConfirmationNeeded(){return this.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}const Qe=_("closingBehavior",({postEvent:e,state:t={isConfirmationNeeded:!1}})=>new re(t.isConfirmationNeeded,e));class dt{constructor(t,s){c(this,"supports");this.supports=Ht(t,s)}}function Ye(e){if(Array.isArray(e))return e;if(typeof e=="string")try{const t=JSON.parse(e);if(Array.isArray(t))return t}catch{}throw R()}class Ke extends B{constructor(s,n,r){super(Ye,n,r);c(this,"itemParser");this.itemParser=typeof s=="function"?s:s.parse.bind(s)}parse(s){const n=super.parse(s);return n===void 0?n:n.map(this.itemParser)}of(s){return this.itemParser=typeof s=="function"?s:s.parse.bind(s),this}}function ie(e){return new Ke(t=>t,!1,e)}function yt(e,t){return Object.fromEntries(e.map(s=>[s,t]))}class oe extends dt{constructor(t,s,n){super(t,{delete:"web_app_invoke_custom_method",get:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",set:"web_app_invoke_custom_method"}),this.createRequestId=s,this.postEvent=n}async delete(t,s={}){const n=Array.isArray(t)?t:[t];n.length&&await v("deleteStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent})}async getKeys(t={}){return ie().of(h()).parse(await v("getStorageKeys",{},this.createRequestId(),{...t,postEvent:this.postEvent}))}async get(t,s={}){const n=Array.isArray(t)?t:[t];if(!n.length)return yt(n,"");const r=await v("getStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent}),i=l(yt(n,h()),"CloudStorageData").parse(r);return Array.isArray(t)?i:i[t]}async set(t,s,n={}){await v("saveStorageValue",{key:t,value:s},this.createRequestId(),{...n,postEvent:this.postEvent})}}const Xe=_(({createRequestId:e,postEvent:t,version:s})=>new oe(s,e,t));class ae extends dt{constructor(t,s){super(t,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"}),this.postEvent=s}impactOccurred(t){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:t})}notificationOccurred(t){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:t})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}const Ze=_(({version:e,postEvent:t})=>new ae(e,t));class ce{constructor(t){this.initData=t}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:t}=this;return t?new Date(this.authDate.getTime()+t*1e3):void 0}get chat(){return this.initData.chat}get chatType(){return this.initData.chatType}get chatInstance(){return this.initData.chatInstance}get hash(){return this.initData.hash}get queryId(){return this.initData.queryId}get receiver(){return this.initData.receiver}get startParam(){return this.initData.startParam}get user(){return this.initData.user}}const ts=_(({initData:e})=>e?new ce(e):void 0);function es(e){return jt().parse(e)}class he extends M{constructor(t,s,n){super({isOpened:t},s,{open:"web_app_open_invoice"}),this.postEvent=n}set isOpened(t){this.set("isOpened",t)}get isOpened(){return this.get("isOpened")}async open(t,s){if(this.isOpened)throw new Error("Invoice is already opened");let n;if(!s)n=t;else{const{hostname:r,pathname:i}=new URL(t,window.location.href);if(r!=="t.me")throw new Error(`Incorrect hostname: ${r}`);const o=i.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(!o)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');[,,n]=o}this.isOpened=!0;try{return(await d({method:"web_app_open_invoice",event:"invoice_closed",params:{slug:n},postEvent:this.postEvent,capture(i){return n===i.slug}})).status}finally{this.isOpened=!1}}}const ss=_(({version:e,postEvent:t})=>new he(!1,e,t));class pe extends at{constructor({postEvent:s,...n}){super(n);c(this,"postEvent");c(this,"on",(s,n)=>s==="click"?g("main_button_pressed",n):this.state.on(s,n));c(this,"off",(s,n)=>s==="click"?D("main_button_pressed",n):this.state.off(s,n));this.postEvent=s}get bgColor(){return this.get("bgColor")}commit(){this.text!==""&&this.postEvent("web_app_setup_main_button",{is_visible:this.isVisible,is_active:this.isEnabled,is_progress_visible:this.isLoaderVisible,text:this.text,color:this.bgColor,text_color:this.textColor})}disable(){return this.isEnabled=!1,this}enable(){return this.isEnabled=!0,this}hide(){return this.isVisible=!1,this}hideLoader(){return this.isLoaderVisible=!1,this}set isEnabled(s){this.setParams({isEnabled:s})}get isEnabled(){return this.get("isEnabled")}set isLoaderVisible(s){this.setParams({isLoaderVisible:s})}get isLoaderVisible(){return this.get("isLoaderVisible")}set isVisible(s){this.setParams({isVisible:s})}get isVisible(){return this.get("isVisible")}show(){return this.isVisible=!0,this}showLoader(){return this.isLoaderVisible=!0,this}setText(s){return this.setParams({text:s})}setTextColor(s){return this.setParams({textColor:s})}setBgColor(s){return this.setParams({bgColor:s})}setParams(s){return this.set(s),this.commit(),this}get text(){return this.get("text")}get textColor(){return this.get("textColor")}}const ns=_("mainButton",({postEvent:e,themeParams:t,state:s={isVisible:!1,isEnabled:!1,text:"",isLoaderVisible:!1,textColor:t.buttonTextColor||"#ffffff",bgColor:t.buttonColor||"#000000"}})=>new pe({...s,postEvent:e}));function rs(){return $({contact:l({userId:{type:y(),from:"user_id"},phoneNumber:{type:h(),from:"phone_number"},firstName:{type:h(),from:"first_name"},lastName:{type:h().optional(),from:"last_name"}}),authDate:{type:ht(),from:"auth_date"},hash:h()},"RequestedContact")}function ue(e,t){return s=>{const[n,r]=t[s];return E(n,r,e)}}function is(e){return new Promise(t=>{setTimeout(t,e)})}class le extends M{constructor({postEvent:s,createRequestId:n,version:r,botInline:i,...o}){super(o,r,{requestPhoneAccess:"web_app_request_phone",requestWriteAccess:"web_app_request_write_access",switchInlineQuery:"web_app_switch_inline_query",setHeaderColor:"web_app_set_header_color",setBackgroundColor:"web_app_set_background_color"});c(this,"botInline");c(this,"postEvent");c(this,"createRequestId");c(this,"requestPhoneAccessPromise");c(this,"requestWriteAccessPromise");c(this,"supportsParam");this.createRequestId=n,this.postEvent=s,this.botInline=i;const a=this.supports.bind(this);this.supports=p=>a(p)?p!=="switchInlineQuery"||i:!1,this.supportsParam=ue(r,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact({timeout:s=1e4}={}){return rs().parse(await v("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:s}))}get bgColor(){return this.get("bgColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return ot(this.bgColor)}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:s=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const r=Date.now()+s;let i=50;return it(async()=>{for(;Date.now()<r;){try{return await this.getRequestedContact()}catch{}await is(i),i+=50}throw Wt(s)},s)}async requestPhoneAccess(s={}){return this.requestPhoneAccessPromise||(this.requestPhoneAccessPromise=d({...s,method:"web_app_request_phone",event:"phone_requested",postEvent:this.postEvent}).then(({status:n})=>n).finally(()=>this.requestPhoneAccessPromise=void 0)),this.requestPhoneAccessPromise}async requestWriteAccess(s={}){return this.requestWriteAccessPromise||(this.requestWriteAccessPromise=d({...s,method:"web_app_request_write_access",event:"write_access_requested",postEvent:this.postEvent}).then(({status:n})=>n).finally(()=>this.requestWriteAccessPromise=void 0)),this.requestWriteAccessPromise}sendData(s){const{size:n}=new Blob([s]);if(!n||n>4096)throw new Error(`Passed data has incorrect size: ${n}`);this.postEvent("web_app_data_send",{data:s})}setHeaderColor(s){this.postEvent("web_app_set_header_color",O(s)?{color:s}:{color_key:s}),this.set("headerColor",s)}setBgColor(s){this.postEvent("web_app_set_background_color",{color:s}),this.set("bgColor",s)}switchInlineQuery(s,n=[]){if(!this.supports("switchInlineQuery")&&!this.isBotInline)throw new Error("Method is unsupported because Mini App should be launched in inline mode.");this.postEvent("web_app_switch_inline_query",{query:s,chat_types:n})}}const os=_("miniApp",({themeParams:e,botInline:t=!1,state:s={bgColor:e.bgColor||"#ffffff",headerColor:e.headerBgColor||"#000000"},...n})=>new le({...n,...s,botInline:t}));function as(e){const t=e.message.trim(),s=(e.title||"").trim(),n=e.buttons||[];let r;if(s.length>64)throw new Error(`Title has incorrect size: ${s.length}`);if(!t.length||t.length>256)throw new Error(`Message has incorrect size: ${t.length}`);if(n.length>3)throw new Error(`Buttons have incorrect size: ${n.length}`);return n.length?r=n.map(i=>{const{id:o=""}=i;if(o.length>64)throw new Error(`Button ID has incorrect size: ${o}`);if(!i.type||i.type==="default"||i.type==="destructive"){const a=i.text.trim();if(!a.length||a.length>64){const p=i.type||"default";throw new Error(`Button text with type "${p}" has incorrect size: ${i.text.length}`)}return{...i,text:a,id:o}}return{...i,id:o}}):r=[{type:"close",id:""}],{title:s,message:t,buttons:r}}class de extends M{constructor(t,s,n){super({isOpened:t},s,{open:"web_app_open_popup"}),this.postEvent=n}set isOpened(t){this.set("isOpened",t)}get isOpened(){return this.get("isOpened")}async open(t){if(this.isOpened)throw new Error("Popup is already opened.");this.isOpened=!0;try{const{button_id:s=null}=await d({event:"popup_closed",method:"web_app_open_popup",postEvent:this.postEvent,params:as(t)});return s}finally{this.isOpened=!1}}}const cs=_(({postEvent:e,version:t})=>new de(!1,t,e));class _e extends M{constructor(t,s,n){super({isOpened:t},s,{close:"web_app_close_scan_qr_popup",open:"web_app_open_scan_qr_popup"}),this.postEvent=n}close(){this.postEvent("web_app_close_scan_qr_popup"),this.isOpened=!1}set isOpened(t){this.set("isOpened",t)}get isOpened(){return this.get("isOpened")}async open(t){if(this.isOpened)throw new Error("QR scanner is already opened.");const{text:s,capture:n}=(typeof t=="string"?{text:t}:t)||{};this.isOpened=!0;try{const i=(await d({method:"web_app_open_scan_qr_popup",event:["qr_text_received","scan_qr_popup_closed"],postEvent:this.postEvent,params:{text:s},capture(o){return o.event==="scan_qr_popup_closed"||!n||n(o.payload)}})||{}).data||null;return i&&this.close(),i}catch(r){throw this.isOpened=!1,r}}}const hs=_(({version:e,postEvent:t})=>new _e(!1,e,t));class fe extends ct{constructor(s,n,r){super({isVisible:s},n,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"});c(this,"on",(s,n)=>s==="click"?g("settings_button_pressed",n):this.state.on(s,n));c(this,"off",(s,n)=>s==="click"?D("settings_button_pressed",n):this.state.off(s,n));this.postEvent=r}set isVisible(s){this.set("isVisible",s),this.postEvent("web_app_setup_settings_button",{is_visible:s})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const ps=_("settingsButton",({version:e,postEvent:t,state:s={isVisible:!1}})=>new fe(s.isVisible,e,t));function _t(e){return zt().parse(e)}class ge extends lt{get accentTextColor(){return this.get("accentTextColor")}get bgColor(){return this.get("bgColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}getState(){return this.clone()}get headerBgColor(){return this.get("headerBgColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.bgColor||ot(this.bgColor)}get linkColor(){return this.get("linkColor")}get secondaryBgColor(){return this.get("secondaryBgColor")}get sectionBgColor(){return this.get("sectionBgColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return g("theme_changed",t=>{this.set(_t(t.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}const us=_("themeParams",({themeParams:e,state:t=e,addCleanup:s})=>{const n=new ge(t);return s(n.listen()),n});function ls(e={}){return d({...e,method:"web_app_request_theme",event:"theme_changed"}).then(_t)}class be extends dt{constructor(s,n,r){super(s,{readTextFromClipboard:"web_app_read_text_from_clipboard"});c(this,"supportsParam");this.version=s,this.createRequestId=n,this.postEvent=r,this.supportsParam=ue(s,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(s,n){const r=new URL(s,window.location.href).toString();if(!E("web_app_open_link",this.version)){window.open(r,"_blank");return}this.postEvent("web_app_open_link",{url:r,...typeof n=="boolean"?{try_instant_view:n}:{}})}openTelegramLink(s){const{hostname:n,pathname:r,search:i}=new URL(s,window.location.href);if(n!=="t.me")throw new Error(`URL has not allowed hostname: ${n}. Only "t.me" is allowed`);if(!E("web_app_open_tg_link",this.version)){window.location.href=s;return}this.postEvent("web_app_open_tg_link",{path_full:r+i})}async readTextFromClipboard(){const s=this.createRequestId(),{data:n=null}=await d({method:"web_app_read_text_from_clipboard",event:"clipboard_text_received",postEvent:this.postEvent,params:{req_id:s},capture:rt(s)});return n}}const ds=_(({version:e,postEvent:t,createRequestId:s})=>new be(e,s,t));async function ft(e={}){const{is_expanded:t,is_state_stable:s,...n}=await d({...e,method:"web_app_request_viewport",event:"viewport_changed"});return{...n,isExpanded:t,isStateStable:s}}function C(e){return e<0?0:e}class we extends lt{constructor({postEvent:s,stableHeight:n,height:r,width:i,isExpanded:o}){super({height:C(r),isExpanded:o,stableHeight:C(n),width:C(i)});c(this,"postEvent");this.postEvent=s}async sync(s){const{isStateStable:n,...r}=await ft(s);this.set({...r,stableHeight:n?r.height:this.get("stableHeight")})}get height(){return this.get("height")}get stableHeight(){return this.get("stableHeight")}listen(){return g("viewport_changed",s=>{const{height:n,width:r,is_expanded:i,is_state_stable:o}=s,a=C(n);this.set({height:a,isExpanded:i,width:C(r),...o?{stableHeight:a}:{}})})}get isExpanded(){return this.get("isExpanded")}get width(){return this.get("width")}expand(){this.postEvent("web_app_expand"),this.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}const _s=_("viewport",async({state:e,platform:t,postEvent:s,addCleanup:n})=>{let r=!1,i=0,o=0,a=0;if(e)r=e.isExpanded,i=e.height,o=e.width,a=e.stableHeight;else if(["macos","tdesktop","unigram","webk","weba","web"].includes(t))r=!0,i=window.innerHeight,o=window.innerWidth,a=window.innerHeight;else{const u=await ft({timeout:1e3,postEvent:s});r=u.isExpanded,i=u.height,o=u.width,a=u.isStateStable?i:0}const p=new we({postEvent:s,height:i,width:o,stableHeight:a,isExpanded:r});return n(p.listen()),p});function m(e,t){document.documentElement.style.setProperty(e,t)}function fs(e,t,s){s||(s=a=>`--tg-${a}-color`);const n=s("header"),r=s("bg"),i=()=>{const{headerColor:a}=e;if(O(a))m(n,a);else{const{bgColor:p,secondaryBgColor:u}=t;a==="bg_color"&&p?m(n,p):a==="secondary_bg_color"&&u&&m(n,u)}m(r,e.bgColor)},o=[t.on("change",i),e.on("change",i)];return i(),()=>o.forEach(a=>a())}function gs(e,t){t||(t=n=>`--tg-theme-${n.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}`);const s=()=>{Object.entries(e.getState()).forEach(([n,r])=>{r&&m(t(n),r)})};return s(),e.on("change",s)}function bs(e,t){t||(t=u=>`--tg-viewport-${u}`);const[s,n,r]=["height","width","stable-height"].map(u=>t(u)),i=()=>m(s,`${e.height}px`),o=()=>m(n,`${e.width}px`),a=()=>m(r,`${e.stableHeight}px`),p=[e.on("change:height",i),e.on("change:width",o),e.on("change:stableHeight",a)];return i(),o(),a(),()=>p.forEach(u=>u())}function ws(e=!0){const t=[g("reload_iframe",()=>{S("iframe_will_reload"),window.location.reload()})],s=()=>t.forEach(n=>n());if(e){const n=document.createElement("style");n.id="telegram-custom-styles",document.head.appendChild(n),t.push(g("set_custom_style",r=>{n.innerHTML=r}),()=>document.head.removeChild(n))}return S("iframe_ready",{reload_supported:!0}),s}function ms(){return typeof window>"u"}async function ys(){if(Ot(window))return!0;try{return await d({method:"web_app_request_theme",event:"theme_changed",timeout:100}),!0}catch{return!1}}function Es(e){const t=typeof e=="string"?U(e):e;Zt(t);function s(r){if(typeof r=="string")try{const{eventType:i}=Mt(r);i==="web_app_request_theme"&&Q("theme_changed",{theme_params:JSON.parse(pt(t.themeParams))}),i==="web_app_request_viewport"&&Q("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}catch{}}if(nt()){const r=window.parent.postMessage.bind(window.parent);window.parent.postMessage=i=>{s(i),r(i)};return}if(Bt(window)){const r=window.external.notify.bind(window.external);window.external.notify=i=>{s(i),r(i)};return}const n=window.TelegramWebviewProxy;window.TelegramWebviewProxy={...n||{},postEvent(...r){s(JSON.stringify({eventType:r[0],eventData:r[1]})),n&&n.postEvent(...r)}}}function me(e){return e instanceof q}function vs(e,t){return me(e)&&e.type===t}function W(e,t){let s,n,r;return typeof e=="string"?s=e:(s=e.pathname===void 0?t:e.pathname,n=e.params,r=e.id),Object.freeze({id:r||(Math.random()*2**14|0).toString(16),pathname:s,params:n})}class ye{constructor(t,s,n=S){c(this,"history");c(this,"ee",new P);c(this,"attached",!1);c(this,"back",()=>this.go(-1));c(this,"on",this.ee.on.bind(this.ee));c(this,"off",this.ee.off.bind(this.ee));if(this._index=s,this.postEvent=n,t.length===0)throw f(It,"History should not be empty.");if(s<0||s>=t.length)throw f(Nt,"Index should not be zero and higher or equal than history size.");this.history=t.map(r=>W(r,""))}attach(){this.attached||(this.attached=!0,this.sync(),g("back_button_pressed",this.back))}get current(){return this.history[this.index]}detach(){this.attached=!1,D("back_button_pressed",this.back)}forward(){this.go(1)}go(t,s){const n=this.index+t,r=Math.min(Math.max(0,n),this.history.length-1);(n===r||s)&&this.replaceAndMove(r,this.history[r])}goTo(t,s){this.go(t-this.index,s)}get hasPrev(){return this.index>0}get hasNext(){return this.index!==this.history.length-1}get index(){return this._index}push(t){this.hasNext&&this.history.splice(this.index+1),this.replaceAndMove(this.index+1,W(t,this.current.pathname))}replace(t){this.replaceAndMove(this.index,W(t,this.current.pathname))}replaceAndMove(t,s){const n=t-this.index;if(!n&&this.current===s)return;const r=this.current;if(this.index!==t){const i=this._index;this._index=t,this.attached&&i>0!=t>0&&this.sync()}this.history[t]=s,this.ee.emit("change",{navigator:this,from:r,to:this.current,delta:n})}sync(){this.postEvent("web_app_setup_back_button",{is_visible:!!this.index})}}function H({params:e,...t}){return{...e||{hash:"",search:""},...t}}function A(e,t){return e.startsWith(t)?e:`${t}${e}`}function I(e){return new URL(typeof e=="string"?e:`${e.pathname||""}${A(e.search||"","?")}${A(e.hash||"","#")}`,"http://a")}function N(e){const t=typeof e=="string"?e.startsWith("/"):!!(e.pathname&&e.pathname.startsWith("/")),s=I(e);return`${t?s.pathname:s.pathname.slice(1)}${s.search}${s.hash}`}function G(e,t,s){let n,r;typeof e=="string"?n=e:(n=N(e),s=e.state,r=e.id);const{pathname:i,search:o,hash:a}=new URL(n,`http://a${A(t,"/")}`);return{id:r,pathname:i,params:{hash:a,search:o,state:s}}}async function x(e){return e===0?!0:Promise.race([new Promise(t=>{const s=J("popstate",()=>{s(),t(!0)});window.history.go(e)}),new Promise(t=>{setTimeout(t,50,!1)})])}async function Ps(){if(window.history.length<=1||(window.history.pushState(null,""),await x(1-window.history.length)))return;let t=await x(-1);for(;t;)t=await x(-1)}function gt(e){return I(e).pathname}const Et=0,j=1,z=2;class bt{constructor(t,s,{postEvent:n,hashMode:r="classic",base:i}={}){c(this,"navigator");c(this,"ee",new P);c(this,"hashMode");c(this,"base");c(this,"attached",!1);c(this,"onPopState",({state:t})=>{if(t===null)return this.push(this.parsePath(window.location.href));t===Et?window.history.forward():t===j&&this.back(),t===z&&this.forward()});c(this,"onNavigatorChange",async({to:t,from:s,delta:n})=>{this.attached&&await this.syncHistory(),this.ee.emit("change",{delta:n,from:H(s),to:H(t),navigator:this})});c(this,"on",this.ee.on.bind(this.ee));c(this,"off",this.ee.off.bind(this.ee));this.navigator=new ye(t.map(o=>G(o,"/")),s,n),this.navigator.on("change",this.onNavigatorChange),this.hashMode=r,this.base=gt(i||"")}async attach(){this.attached||(this.attached=!0,this.navigator.attach(),window.addEventListener("popstate",this.onPopState),await this.syncHistory())}back(){this.navigator.back()}detach(){this.attached=!1,this.navigator.detach(),window.removeEventListener("popstate",this.onPopState)}forward(){return this.navigator.forward()}get index(){return this.navigator.index}get id(){return this.navigator.current.id}go(t,s){return this.navigator.go(t,s)}goTo(t,s){this.navigator.goTo(t,s)}get hash(){return(this.navigator.current.params||{}).hash||""}get hasPrev(){return this.navigator.hasPrev}get hasNext(){return this.navigator.hasNext}get history(){return this.navigator.history.map(H)}get path(){return N(this)}get pathname(){return this.navigator.current.pathname}parsePath(t){let s=I(t);return this.hashMode&&(s=I(s.hash.slice(1))),{pathname:s.pathname,search:s.search,hash:s.hash}}push(t,s){const n=G(t,this.path),{state:r=s}=n.params;this.navigator.push({...n,params:{...n.params,state:r}})}replace(t,s){const n=G(t,this.path),{state:r=s}=n.params;this.navigator.replace({...n,params:{...n.params,state:r}})}renderPath(t){const s=(this.base.length===1?"":this.base)+A(N(t),"/");return this.hashMode?A(s.slice(1),this.hashMode==="classic"?"#":"#/"):s}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const{state:t}=this,s=this.renderPath(this);await Ps(),this.hasPrev&&this.hasNext?(window.history.replaceState(j,""),window.history.pushState(t,"",s),window.history.pushState(z,""),await x(-1)):this.hasPrev?(window.history.replaceState(j,""),window.history.pushState(t,"",s)):this.hasNext?(window.history.replaceState(t,s),window.history.pushState(z,""),await x(-1)):(window.history.replaceState(Et,""),window.history.pushState(t,"",s)),window.addEventListener("popstate",this.onPopState)}get search(){return(this.navigator.current.params||{}).search||""}get state(){return(this.navigator.current.params||{}).state}}function Ee(e){e||(e={});const{href:t,hash:s}=window.location;let n=N(e.hashMode===null?t:s.includes("?")?s.slice(1):`?${s.slice(1)}`);const r=e.base?gt(e.base):void 0;if(r){if(!n.startsWith(r))throw f(qt,`Path "${n}" expected to be starting with "${r}"`);n=n.slice(r.length)}return new bt([n],0,e)}function Ss(e){const t=e.match(/#(.+)/);return t?t[1]:null}function Rs(e,t){if(ut()){const s=sessionStorage.getItem(e);if(s)try{const{index:n,history:r}=JSON.parse(s);return new bt(r,n,t)}catch(n){console.error("Unable to restore hash navigator state.",n)}}return Ee(t)}function Ts(e,t){const s=Rs(e,t),n=()=>sessionStorage.setItem(e,JSON.stringify({index:s.index,history:s.history}));return s.on("change",n),n(),s}exports.BackButton=Gt;exports.BasicNavigator=ye;exports.BiometryManager=se;exports.BrowserNavigator=bt;exports.ClosingBehavior=re;exports.CloudStorage=oe;exports.ERR_INVALID_PATH_BASE=qt;exports.ERR_INVOKE_CUSTOM_METHOD_RESPONSE=Ct;exports.ERR_METHOD_PARAMETER_UNSUPPORTED=Rt;exports.ERR_METHOD_UNSUPPORTED=St;exports.ERR_NAVIGATION_HISTORY_EMPTY=It;exports.ERR_NAVIGATION_INDEX_INVALID=Nt;exports.ERR_NAVIGATION_ITEM_INVALID=xe;exports.ERR_PARSE=Z;exports.ERR_SSR_INIT=Ae;exports.ERR_TIMED_OUT=xt;exports.ERR_UNEXPECTED_TYPE=At;exports.ERR_UNKNOWN_ENV=Tt;exports.EventEmitter=P;exports.HapticFeedback=ae;exports.InitData=ce;exports.Invoice=he;exports.MainButton=pe;exports.MiniApp=le;exports.Popup=de;exports.QRScanner=_e;exports.SDKError=q;exports.SettingsButton=fe;exports.ThemeParams=ge;exports.Utils=be;exports.Viewport=we;exports.array=ie;exports.bindMiniAppCSSVars=fs;exports.bindThemeParamsCSSVars=gs;exports.bindViewportCSSVars=bs;exports.boolean=w;exports.captureSameReq=rt;exports.classNames=V;exports.compareVersions=Vt;exports.createBrowserNavigatorFromLocation=Ee;exports.createPostEvent=Ut;exports.createSafeURL=I;exports.date=ht;exports.getHash=Ss;exports.getPathname=gt;exports.initBackButton=Fe;exports.initBiometryManager=Je;exports.initClosingBehavior=Qe;exports.initCloudStorage=Xe;exports.initHapticFeedback=Ze;exports.initInitData=ts;exports.initInvoice=ss;exports.initMainButton=ns;exports.initMiniApp=os;exports.initNavigator=Ts;exports.initPopup=cs;exports.initQRScanner=hs;exports.initSettingsButton=ps;exports.initThemeParams=us;exports.initUtils=ds;exports.initViewport=_s;exports.initWeb=ws;exports.invokeCustomMethod=v;exports.isColorDark=ot;exports.isIframe=nt;exports.isPageReload=ut;exports.isRGB=O;exports.isRGBShort=kt;exports.isSDKError=me;exports.isSDKErrorOfType=vs;exports.isSSR=ms;exports.isTMA=ys;exports.json=l;exports.mergeClassNames=Be;exports.mockTelegramEnv=Es;exports.number=y;exports.off=D;exports.on=g;exports.parseInitData=es;exports.parseLaunchParams=U;exports.parseThemeParams=_t;exports.postEvent=S;exports.request=d;exports.requestBiometryInfo=ne;exports.requestThemeParams=ls;exports.requestViewport=ft;exports.retrieveLaunchParams=te;exports.rgb=st;exports.searchParams=$;exports.serializeLaunchParams=Xt;exports.serializeThemeParams=pt;exports.setCSSVar=m;exports.setDebug=Te;exports.setTargetOrigin=Ve;exports.string=h;exports.subscribe=Pt;exports.supports=E;exports.targetOrigin=$t;exports.toRGB=et;exports.unsubscribe=Y;exports.urlToPath=N;exports.withTimeout=it;
1
+ "use strict";var Se=Object.defineProperty;var Pe=(e,t,s)=>t in e?Se(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var c=(e,t,s)=>(Pe(e,typeof t!="symbol"?t+"":t,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function vt(e,t){let s;const n=()=>{s!==void 0&&t&&t(s),s=void 0};return[()=>s===void 0?s=e(n):s,n]}function Y(e){const t=O(),{count:s}=t;t.unsubscribe(e),s&&!t.count&&Me()}function St(e){return O().subscribe(e),()=>Y(e)}class Re{constructor(t,s={}){this.scope=t,this.options=s}print(t,...s){const n=new Date,r=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(n),{textColor:i,bgColor:o}=this.options,a="font-weight: bold;padding: 0 5px;border-radius:5px";console[t](`%c${r}%c / %c${this.scope}`,`${a};background-color: lightblue;color:black`,"",`${a};${i?`color:${i};`:""}${o?`background-color:${o}`:""}`,...s)}error(...t){this.print("error",...t)}log(...t){this.print("log",...t)}}const K=new Re("SDK",{bgColor:"forestgreen",textColor:"white"});let F=!1;const wt=({name:e,payload:t})=>{K.log("Event received:",t?{name:e,payload:t}:{name:e})};function Te(e){F!==e&&(F=e,e?St(wt):Y(wt))}function Ce(...e){F&&K.log(...e)}class S{constructor(){c(this,"listeners",new Map);c(this,"listenersCount",0);c(this,"subscribeListeners",[])}clear(){this.listeners.clear(),this.subscribeListeners=[]}get count(){return this.listenersCount+this.subscribeListeners.length}emit(t,...s){this.subscribeListeners.forEach(r=>r({event:t,args:s})),(this.listeners.get(t)||[]).forEach(([r,i])=>{r(...s),i&&this.off(t,r)})}on(t,s,n){let r=this.listeners.get(t);return r||this.listeners.set(t,r=[]),r.push([s,n]),this.listenersCount+=1,()=>this.off(t,s)}off(t,s){const n=this.listeners.get(t)||[];for(let r=0;r<n.length;r+=1)if(s===n[r][0]){n.splice(r,1),this.listenersCount-=1;return}}subscribe(t){return this.subscribeListeners.push(t),()=>this.unsubscribe(t)}unsubscribe(t){for(let s=0;s<this.subscribeListeners.length;s+=1)if(this.subscribeListeners[s]===t){this.subscribeListeners.splice(s,1);return}}}function J(e,t,s){return window.addEventListener(e,t,s),()=>window.removeEventListener(e,t,s)}function X(...e){let t=!1;const s=[...e];return[n=>!t&&s.push(n),()=>{t||(t=!0,s.forEach(n=>n()))},t]}class q extends Error{constructor(t,s,n){super(s,{cause:n}),this.type=t,Object.setPrototypeOf(this,q.prototype)}}function f(e,t,s){return new q(e,t,s)}const Pt="ERR_METHOD_UNSUPPORTED",Rt="ERR_METHOD_PARAMETER_UNSUPPORTED",Tt="ERR_UNKNOWN_ENV",Ct="ERR_INVOKE_CUSTOM_METHOD_RESPONSE",xt="ERR_TIMED_OUT",At="ERR_UNEXPECTED_TYPE",Z="ERR_PARSE",It="ERR_NAVIGATION_LIST_EMPTY",Nt="ERR_NAVIGATION_CURSOR_INVALID",xe="ERR_NAVIGATION_ITEM_INVALID",Ae="ERR_SSR_INIT",qt="ERR_INVALID_PATH_BASE";function R(){return f(At,"Value has unexpected type")}class B{constructor(t,s,n){this.parser=t,this.isOptional=s,this.type=n}parse(t){if(!(this.isOptional&&t===void 0))try{return this.parser(t)}catch(s){throw f(Z,`Unable to parse value${this.type?` as ${this.type}`:""}`,s)}}optional(){return this.isOptional=!0,this}}function T(e,t){return()=>new B(e,!1,t)}const w=T(e=>{if(typeof e=="boolean")return e;const t=String(e);if(t==="1"||t==="true")return!0;if(t==="0"||t==="false")return!1;throw R()},"boolean");function Dt(e,t){const s={};for(const n in e){const r=e[n];if(!r)continue;let i,o;if(typeof r=="function"||"parse"in r)i=n,o=typeof r=="function"?r:r.parse.bind(r);else{const{type:a}=r;i=r.from||n,o=typeof a=="function"?a:a.parse.bind(a)}try{const a=o(t(i));a!==void 0&&(s[n]=a)}catch(a){throw f(Z,`Unable to parse field "${n}"`,a)}}return s}function tt(e){let t=e;if(typeof t=="string"&&(t=JSON.parse(t)),typeof t!="object"||t===null||Array.isArray(t))throw R();return t}function l(e,t){return new B(s=>{const n=tt(s);return Dt(e,r=>n[r])},!1,t)}const y=T(e=>{if(typeof e=="number")return e;if(typeof e=="string"){const t=Number(e);if(!Number.isNaN(t))return t}throw R()},"number");function L(e){return/^#[\da-f]{6}$/i.test(e)}function kt(e){return/^#[\da-f]{3}$/i.test(e)}function et(e){const t=e.replace(/\s/g,"").toLowerCase();if(L(t))return t;if(kt(t)){let n="#";for(let r=0;r<3;r+=1)n+=t[1+r].repeat(2);return n}const s=t.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||t.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(!s)throw new Error(`Value "${e}" does not satisfy any of known RGB formats.`);return s.slice(1).reduce((n,r)=>{const i=parseInt(r,10).toString(16);return n+(i.length===1?"0":"")+i},"#")}const h=T(e=>{if(typeof e=="string"||typeof e=="number")return e.toString();throw R()},"string"),st=T(e=>et(h().parse(e)),"rgb");function Mt(e){return l({eventType:h(),eventData:t=>t}).parse(e)}function Ie(){["TelegramGameProxy_receiveEvent","TelegramGameProxy","Telegram"].forEach(e=>{delete window[e]})}function Q(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}function Ne(){[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=window;e.forEach((s,n,r)=>{if(n===r.length-1){t[s]=Q;return}s in t||(t[s]={}),t=t[s]})})}const qe={clipboard_text_received:l({req_id:h(),data:e=>e===null?e:h().optional().parse(e)}),custom_method_invoked:l({req_id:h(),result:e=>e,error:h().optional()}),invoice_closed:l({slug:h(),status:h()}),phone_requested:l({status:h()}),popup_closed:{parse(e){return l({button_id:t=>t==null?void 0:h().parse(t)}).parse(e??{})}},qr_text_received:l({data:h().optional()}),theme_changed:l({theme_params:e=>{const t=st().optional();return Object.entries(tt(e)).reduce((s,[n,r])=>(s[n]=t.parse(r),s),{})}}),viewport_changed:l({height:y(),width:e=>e==null?window.innerWidth:y().parse(e),is_state_stable:w(),is_expanded:w()}),write_access_requested:l({status:h()})};function De(){const e=new S,t=new S;t.subscribe(n=>{e.emit("event",{name:n.event,payload:n.args[0]})}),Ne();const[,s]=X(Ie,J("resize",()=>{t.emit("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),J("message",n=>{if(n.source!==window.parent)return;let r;try{r=Mt(n.data)}catch{return}const{eventType:i,eventData:o}=r,a=qe[i];try{const p=a?a.parse(o):o;t.emit(...p?[i,p]:[i])}catch(p){K.error(`An error occurred processing the "${i}" event from the Telegram application. Please, file an issue here: https://github.com/Telegram-Mini-Apps/tma.js/issues/new/choose`,r,p)}}),()=>e.clear(),()=>t.clear());return[{on:t.on.bind(t),off:t.off.bind(t),subscribe(n){return e.on("event",n)},unsubscribe(n){e.off("event",n)},get count(){return t.count+e.count}},s]}const[ke,Me]=vt(e=>{const[t,s]=De(),n=t.off.bind(t);return t.off=(r,i)=>{const{count:o}=t;n(r,i),o&&!t.count&&e()},[t,s]},([,e])=>e());function O(){return ke()[0]}function D(e,t){O().off(e,t)}function g(e,t,s){return O().on(e,t,s)}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vt(e,t){const s=e.split("."),n=t.split("."),r=Math.max(s.length,n.length);for(let i=0;i<r;i+=1){const o=parseInt(s[i]||"0",10),a=parseInt(n[i]||"0",10);if(o!==a)return o>a?1:-1}return 0}function b(e,t){return Vt(e,t)<=0}function E(e,t,s){if(typeof s=="string"){if(e==="web_app_open_link"&&t==="try_instant_view")return b("6.4",s);if(e==="web_app_set_header_color"&&t==="color")return b("6.9",s)}switch(e){case"web_app_open_tg_link":case"web_app_open_invoice":case"web_app_setup_back_button":case"web_app_set_background_color":case"web_app_set_header_color":case"web_app_trigger_haptic_feedback":return b("6.1",t);case"web_app_open_popup":return b("6.2",t);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return b("6.4",t);case"web_app_switch_inline_query":return b("6.7",t);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return b("6.9",t);case"web_app_setup_settings_button":return b("6.10",t);case"web_app_biometry_get_info":case"web_app_biometry_open_settings":case"web_app_biometry_request_access":case"web_app_biometry_request_auth":case"web_app_biometry_update_token":return b("7.2",t);default:return["iframe_ready","iframe_will_reload","web_app_close","web_app_data_send","web_app_expand","web_app_open_link","web_app_ready","web_app_request_theme","web_app_request_viewport","web_app_setup_main_button","web_app_setup_closing_behavior"].includes(e)}}function Bt(e){return"external"in e&&k(e.external)&&"notify"in e.external&&typeof e.external.notify=="function"}function Lt(e){return"TelegramWebviewProxy"in e&&k(e.TelegramWebviewProxy)&&"postEvent"in e.TelegramWebviewProxy&&typeof e.TelegramWebviewProxy.postEvent=="function"}function nt(){try{return window.self!==window.top}catch{return!0}}let Ot="https://web.telegram.org";function Ve(e){Ot=e}function Ut(){return Ot}function P(e,t,s){let n={},r;t===void 0&&s===void 0?n={}:t!==void 0&&s!==void 0?(n=s,r=t):t!==void 0&&("targetOrigin"in t?n=t:r=t);const{targetOrigin:i=Ut()}=n;if(Ce("Posting event:",r?{event:e,data:r}:{event:e}),nt()){window.parent.postMessage(JSON.stringify({eventType:e,eventData:r}),i);return}if(Bt(window)){window.external.notify(JSON.stringify({eventType:e,eventData:r}));return}if(Lt(window)){window.TelegramWebviewProxy.postEvent(e,JSON.stringify(r));return}throw f(Tt,"Unable to determine current environment and possible way to send event. You are probably trying to use Mini Apps method outside of Telegram application environment.")}function $t(e){return(t,s)=>{if(!E(t,e))throw f(Pt,`Method "${t}" is unsupported in Mini Apps version ${e}`);if(k(s)){let n;if(t==="web_app_open_link"&&"try_instant_view"in s?n="try_instant_view":t==="web_app_set_header_color"&&"color"in s&&(n="color"),n&&!E(t,n,e))throw f(Rt,`Parameter "${n}" of "${t}" method is unsupported in Mini Apps version ${e}`)}return P(t,s)}}function rt(e){return({req_id:t})=>t===e}function Wt(e){return f(xt,`Timeout reached: ${e}ms`)}function it(e,t){return Promise.race([typeof e=="function"?e():e,new Promise((s,n)=>{setTimeout(()=>{n(Wt(t))},t)})])}async function d(e){let t;const s=new Promise(a=>{t=a}),{event:n,capture:r,timeout:i}=e,[,o]=X(...(Array.isArray(n)?n:[n]).map(a=>g(a,p=>(!r||r(p))&&t(p))));try{return(e.postEvent||P)(e.method,e.params),await(i?it(s,i):s)}finally{o()}}async function v(e,t,s,n={}){const{result:r,error:i}=await d({...n,method:"web_app_invoke_custom_method",event:"custom_method_invoked",params:{method:e,params:t,req_id:s},capture:rt(s)});if(i)throw f(Ct,i);return r}function V(...e){return e.map(t=>{if(typeof t=="string")return t;if(k(t))return V(Object.entries(t).map(s=>s[1]&&s[0]));if(Array.isArray(t))return V(...t)}).filter(Boolean).join(" ")}function Be(...e){return e.reduce((t,s)=>(k(s)&&Object.entries(s).forEach(([n,r])=>{const i=V(t[n],r);i.length&&(t[n]=i)}),t),{})}function ot(e){const t=et(e);return Math.sqrt([.299,.587,.114].reduce((s,n,r)=>{const i=parseInt(t.slice(1+r*2,1+(r+1)*2),16);return s+i*i*n},0))<120}class Le{constructor(t){c(this,"ee",new S);c(this,"on",this.ee.on.bind(this.ee));c(this,"off",this.ee.off.bind(this.ee));this.state=t}clone(){return{...this.state}}set(t,s){Object.entries(typeof t=="string"?{[t]:s}:t).reduce((r,[i,o])=>this.state[i]===o||o===void 0?r:(this.state[i]=o,this.ee.emit(`change:${i}`,o),!0),!1)&&this.ee.emit("change",this.state)}get(t){return this.state[t]}}class at{constructor(t){c(this,"state");c(this,"get");c(this,"set");c(this,"clone");this.state=new Le(t),this.set=this.state.set.bind(this.state),this.get=this.state.get.bind(this.state),this.clone=this.state.clone.bind(this.state)}}function Ht(e,t){return s=>E(t[s],e)}class ct extends at{constructor(s,n,r){super(s);c(this,"supports");this.supports=Ht(n,r)}}class Gt extends ct{constructor(s,n,r){super({isVisible:s},n,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"});c(this,"on",(s,n)=>s==="click"?g("back_button_pressed",n):this.state.on(s,n));c(this,"off",(s,n)=>s==="click"?D("back_button_pressed",n):this.state.off(s,n));this.postEvent=r}set isVisible(s){this.set("isVisible",s),this.postEvent("web_app_setup_back_button",{is_visible:s})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const ht=T(e=>e instanceof Date?e:new Date(y().parse(e)*1e3),"Date");function U(e,t){return new B(s=>{if(typeof s!="string"&&!(s instanceof URLSearchParams))throw R();const n=typeof s=="string"?new URLSearchParams(s):s;return Dt(e,r=>{const i=n.get(r);return i===null?void 0:i})},!1,t)}const Oe=l({id:y(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat").optional(),mt=l({addedToAttachmentMenu:{type:w().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:w().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:y(),isBot:{type:w().optional(),from:"is_bot"},isPremium:{type:w().optional(),from:"is_premium"},languageCode:{type:h().optional(),from:"language_code"},lastName:{type:h().optional(),from:"last_name"},photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"User").optional();function jt(){return U({authDate:{type:ht(),from:"auth_date"},canSendAfter:{type:y().optional(),from:"can_send_after"},chat:Oe,chatInstance:{type:h().optional(),from:"chat_instance"},chatType:{type:h().optional(),from:"chat_type"},hash:h(),queryId:{type:h().optional(),from:"query_id"},receiver:mt,startParam:{type:h().optional(),from:"start_param"},user:mt},"InitData")}function Ue(e){return e.replace(/_[a-z]/g,t=>t[1].toUpperCase())}function $e(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}const zt=T(e=>{const t=st().optional();return Object.entries(tt(e)).reduce((s,[n,r])=>(s[Ue(n)]=t.parse(r),s),{})},"ThemeParams");function $(e){return U({botInline:{type:w().optional(),from:"tgWebAppBotInline"},initData:{type:jt().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:w().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:zt(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}}).parse(e)}function Ft(e){return $(e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&"))}function We(){return Ft(window.location.href)}function Jt(){return performance.getEntriesByType("navigation")[0]}function He(){const e=Jt();if(!e)throw new Error("Unable to get first navigation entry.");return Ft(e.name)}function Qt(e){return`tma.js/${e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}`}function Yt(e,t){sessionStorage.setItem(Qt(e),JSON.stringify(t))}function Kt(e){const t=sessionStorage.getItem(Qt(e));try{return t?JSON.parse(t):void 0}catch{}}function Ge(){return $(Kt("launchParams")||"")}function pt(e){return JSON.stringify(Object.fromEntries(Object.entries(e).map(([t,s])=>[$e(t),s])))}function Xt(e){const{initDataRaw:t,themeParams:s,platform:n,version:r,showSettings:i,startParam:o,botInline:a}=e,p=new URLSearchParams;return p.set("tgWebAppPlatform",n),p.set("tgWebAppThemeParams",pt(s)),p.set("tgWebAppVersion",r),t&&p.set("tgWebAppData",t),o&&p.set("tgWebAppStartParam",o),typeof i=="boolean"&&p.set("tgWebAppShowSettings",i?"1":"0"),typeof a=="boolean"&&p.set("tgWebAppBotInline",a?"1":"0"),p.toString()}function Zt(e){Yt("launchParams",Xt(e))}function te(){for(const e of[We,He,Ge])try{const t=e();return Zt(t),t}catch{}throw new Error("Unable to retrieve launch parameters from any known source.")}function ut(){const e=Jt();return!!(e&&e.type==="reload")}function je(){let e=0;return()=>(e+=1).toString()}const[ze]=vt(je);function _(e,t){return()=>{const s=te(),n={...s,postEvent:$t(s.version),createRequestId:ze()};if(typeof e=="function")return e(n);const[r,i,o]=X(),a=t({...n,state:ut()?Kt(e):void 0,addCleanup:r}),p=u=>(o||r(u.on("change",ve=>{Yt(e,ve)})),u);return[a instanceof Promise?a.then(p):p(a),i]}}const Fe=_("backButton",({postEvent:e,version:t,state:s={isVisible:!1}})=>new Gt(s.isVisible,t,e));class M extends ct{constructor(){super(...arguments);c(this,"on",this.state.on.bind(this.state));c(this,"off",this.state.off.bind(this.state))}}function ee(e){const t=e.available?e:{available:!1,device_id:"",token_saved:!1,access_requested:!1,access_granted:!1,type:""};return{available:!0,type:t.type,deviceId:t.device_id,tokenSaved:t.token_saved,accessRequested:t.access_requested,accessGranted:t.access_granted}}class se extends M{constructor({postEvent:s,version:n,...r}){super(r,n,{auth:"web_app_biometry_request_auth",openSettings:"web_app_biometry_open_settings",requestAccess:"web_app_biometry_request_access",updateToken:"web_app_biometry_update_token"});c(this,"postEvent");c(this,"authPromise");c(this,"accessPromise");this.postEvent=s}get available(){return this.get("available")}get accessGranted(){return this.get("accessGranted")}get accessRequested(){return this.get("accessRequested")}async authenticate({reason:s,...n}){return this.authPromise||(this.authPromise=d({...n,method:"web_app_biometry_request_auth",event:"biometry_auth_requested",postEvent:this.postEvent,params:{reason:(s||"").trim()}}).then(({token:r})=>r).finally(()=>this.authPromise=void 0)),this.authPromise}get deviceId(){return this.get("deviceId")}openSettings(){this.postEvent("web_app_biometry_open_settings")}requestAccess({reason:s,...n}={}){return this.accessPromise||(this.accessPromise=d({...n,postEvent:this.postEvent,method:"web_app_biometry_request_access",event:"biometry_info_received",params:{reason:s||""}}).then(r=>{const i=ee(r);return this.set(i),i.accessGranted}).finally(()=>this.accessPromise=void 0)),this.accessPromise}get biometryType(){return this.get("biometryType")}get tokenSaved(){return this.get("tokenSaved")}async updateToken({token:s,...n}={}){return["removed","updated"].includes((await d({...n,postEvent:this.postEvent,method:"web_app_biometry_update_token",event:"biometry_token_updated",params:{token:s||""}})).status)}}async function ne(e){return ee(await d({...e||{},method:"web_app_biometry_get_info",event:"biometry_info_received"}))}const Je=_("biometryManager",async({postEvent:e,version:t,state:s})=>new se({...s||E("web_app_biometry_get_info",t)?s||await ne({timeout:1e3}):{available:!1,accessGranted:!1,accessRequested:!1,tokenSaved:!1,deviceId:""},version:t,postEvent:e}));class lt extends at{constructor(){super(...arguments);c(this,"on",this.state.on.bind(this.state));c(this,"off",this.state.off.bind(this.state))}}class re extends lt{constructor(t,s){super({isConfirmationNeeded:t}),this.postEvent=s}set isConfirmationNeeded(t){this.set("isConfirmationNeeded",t),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:t})}get isConfirmationNeeded(){return this.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}const Qe=_("closingBehavior",({postEvent:e,state:t={isConfirmationNeeded:!1}})=>new re(t.isConfirmationNeeded,e));class dt{constructor(t,s){c(this,"supports");this.supports=Ht(t,s)}}function Ye(e){if(Array.isArray(e))return e;if(typeof e=="string")try{const t=JSON.parse(e);if(Array.isArray(t))return t}catch{}throw R()}class Ke extends B{constructor(s,n,r){super(Ye,n,r);c(this,"itemParser");this.itemParser=typeof s=="function"?s:s.parse.bind(s)}parse(s){const n=super.parse(s);return n===void 0?n:n.map(this.itemParser)}of(s){return this.itemParser=typeof s=="function"?s:s.parse.bind(s),this}}function ie(e){return new Ke(t=>t,!1,e)}function yt(e,t){return Object.fromEntries(e.map(s=>[s,t]))}class oe extends dt{constructor(t,s,n){super(t,{delete:"web_app_invoke_custom_method",get:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",set:"web_app_invoke_custom_method"}),this.createRequestId=s,this.postEvent=n}async delete(t,s={}){const n=Array.isArray(t)?t:[t];n.length&&await v("deleteStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent})}async getKeys(t={}){return ie().of(h()).parse(await v("getStorageKeys",{},this.createRequestId(),{...t,postEvent:this.postEvent}))}async get(t,s={}){const n=Array.isArray(t)?t:[t];if(!n.length)return yt(n,"");const r=await v("getStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent}),i=l(yt(n,h()),"CloudStorageData").parse(r);return Array.isArray(t)?i:i[t]}async set(t,s,n={}){await v("saveStorageValue",{key:t,value:s},this.createRequestId(),{...n,postEvent:this.postEvent})}}const Xe=_(({createRequestId:e,postEvent:t,version:s})=>new oe(s,e,t));class ae extends dt{constructor(t,s){super(t,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"}),this.postEvent=s}impactOccurred(t){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:t})}notificationOccurred(t){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:t})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}const Ze=_(({version:e,postEvent:t})=>new ae(e,t));class ce{constructor(t){this.initData=t}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:t}=this;return t?new Date(this.authDate.getTime()+t*1e3):void 0}get chat(){return this.initData.chat}get chatType(){return this.initData.chatType}get chatInstance(){return this.initData.chatInstance}get hash(){return this.initData.hash}get queryId(){return this.initData.queryId}get receiver(){return this.initData.receiver}get startParam(){return this.initData.startParam}get user(){return this.initData.user}}const ts=_(({initData:e})=>e?new ce(e):void 0);function es(e){return jt().parse(e)}class he extends M{constructor(t,s,n){super({isOpened:t},s,{open:"web_app_open_invoice"}),this.postEvent=n}set isOpened(t){this.set("isOpened",t)}get isOpened(){return this.get("isOpened")}async open(t,s){if(this.isOpened)throw new Error("Invoice is already opened");let n;if(!s)n=t;else{const{hostname:r,pathname:i}=new URL(t,window.location.href);if(r!=="t.me")throw new Error(`Incorrect hostname: ${r}`);const o=i.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(!o)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');[,,n]=o}this.isOpened=!0;try{return(await d({method:"web_app_open_invoice",event:"invoice_closed",params:{slug:n},postEvent:this.postEvent,capture(i){return n===i.slug}})).status}finally{this.isOpened=!1}}}const ss=_(({version:e,postEvent:t})=>new he(!1,e,t));class pe extends at{constructor({postEvent:s,...n}){super(n);c(this,"postEvent");c(this,"on",(s,n)=>s==="click"?g("main_button_pressed",n):this.state.on(s,n));c(this,"off",(s,n)=>s==="click"?D("main_button_pressed",n):this.state.off(s,n));this.postEvent=s}get bgColor(){return this.get("bgColor")}commit(){this.text!==""&&this.postEvent("web_app_setup_main_button",{is_visible:this.isVisible,is_active:this.isEnabled,is_progress_visible:this.isLoaderVisible,text:this.text,color:this.bgColor,text_color:this.textColor})}disable(){return this.isEnabled=!1,this}enable(){return this.isEnabled=!0,this}hide(){return this.isVisible=!1,this}hideLoader(){return this.isLoaderVisible=!1,this}set isEnabled(s){this.setParams({isEnabled:s})}get isEnabled(){return this.get("isEnabled")}set isLoaderVisible(s){this.setParams({isLoaderVisible:s})}get isLoaderVisible(){return this.get("isLoaderVisible")}set isVisible(s){this.setParams({isVisible:s})}get isVisible(){return this.get("isVisible")}show(){return this.isVisible=!0,this}showLoader(){return this.isLoaderVisible=!0,this}setText(s){return this.setParams({text:s})}setTextColor(s){return this.setParams({textColor:s})}setBgColor(s){return this.setParams({bgColor:s})}setParams(s){return this.set(s),this.commit(),this}get text(){return this.get("text")}get textColor(){return this.get("textColor")}}const ns=_("mainButton",({postEvent:e,themeParams:t,state:s={isVisible:!1,isEnabled:!1,text:"",isLoaderVisible:!1,textColor:t.buttonTextColor||"#ffffff",bgColor:t.buttonColor||"#000000"}})=>new pe({...s,postEvent:e}));function rs(){return U({contact:l({userId:{type:y(),from:"user_id"},phoneNumber:{type:h(),from:"phone_number"},firstName:{type:h(),from:"first_name"},lastName:{type:h().optional(),from:"last_name"}}),authDate:{type:ht(),from:"auth_date"},hash:h()},"RequestedContact")}function ue(e,t){return s=>{const[n,r]=t[s];return E(n,r,e)}}function is(e){return new Promise(t=>{setTimeout(t,e)})}class le extends M{constructor({postEvent:s,createRequestId:n,version:r,botInline:i,...o}){super(o,r,{requestPhoneAccess:"web_app_request_phone",requestWriteAccess:"web_app_request_write_access",switchInlineQuery:"web_app_switch_inline_query",setHeaderColor:"web_app_set_header_color",setBackgroundColor:"web_app_set_background_color"});c(this,"botInline");c(this,"postEvent");c(this,"createRequestId");c(this,"requestPhoneAccessPromise");c(this,"requestWriteAccessPromise");c(this,"supportsParam");this.createRequestId=n,this.postEvent=s,this.botInline=i;const a=this.supports.bind(this);this.supports=p=>a(p)?p!=="switchInlineQuery"||i:!1,this.supportsParam=ue(r,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact({timeout:s=1e4}={}){return rs().parse(await v("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:s}))}get bgColor(){return this.get("bgColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return ot(this.bgColor)}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:s=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const r=Date.now()+s;let i=50;return it(async()=>{for(;Date.now()<r;){try{return await this.getRequestedContact()}catch{}await is(i),i+=50}throw Wt(s)},s)}async requestPhoneAccess(s={}){return this.requestPhoneAccessPromise||(this.requestPhoneAccessPromise=d({...s,method:"web_app_request_phone",event:"phone_requested",postEvent:this.postEvent}).then(({status:n})=>n).finally(()=>this.requestPhoneAccessPromise=void 0)),this.requestPhoneAccessPromise}async requestWriteAccess(s={}){return this.requestWriteAccessPromise||(this.requestWriteAccessPromise=d({...s,method:"web_app_request_write_access",event:"write_access_requested",postEvent:this.postEvent}).then(({status:n})=>n).finally(()=>this.requestWriteAccessPromise=void 0)),this.requestWriteAccessPromise}sendData(s){const{size:n}=new Blob([s]);if(!n||n>4096)throw new Error(`Passed data has incorrect size: ${n}`);this.postEvent("web_app_data_send",{data:s})}setHeaderColor(s){this.postEvent("web_app_set_header_color",L(s)?{color:s}:{color_key:s}),this.set("headerColor",s)}setBgColor(s){this.postEvent("web_app_set_background_color",{color:s}),this.set("bgColor",s)}switchInlineQuery(s,n=[]){if(!this.supports("switchInlineQuery")&&!this.isBotInline)throw new Error("Method is unsupported because Mini App should be launched in inline mode.");this.postEvent("web_app_switch_inline_query",{query:s,chat_types:n})}}const os=_("miniApp",({themeParams:e,botInline:t=!1,state:s={bgColor:e.bgColor||"#ffffff",headerColor:e.headerBgColor||"#000000"},...n})=>new le({...n,...s,botInline:t}));function as(e){const t=e.message.trim(),s=(e.title||"").trim(),n=e.buttons||[];let r;if(s.length>64)throw new Error(`Title has incorrect size: ${s.length}`);if(!t.length||t.length>256)throw new Error(`Message has incorrect size: ${t.length}`);if(n.length>3)throw new Error(`Buttons have incorrect size: ${n.length}`);return n.length?r=n.map(i=>{const{id:o=""}=i;if(o.length>64)throw new Error(`Button ID has incorrect size: ${o}`);if(!i.type||i.type==="default"||i.type==="destructive"){const a=i.text.trim();if(!a.length||a.length>64){const p=i.type||"default";throw new Error(`Button text with type "${p}" has incorrect size: ${i.text.length}`)}return{...i,text:a,id:o}}return{...i,id:o}}):r=[{type:"close",id:""}],{title:s,message:t,buttons:r}}class de extends M{constructor(t,s,n){super({isOpened:t},s,{open:"web_app_open_popup"}),this.postEvent=n}set isOpened(t){this.set("isOpened",t)}get isOpened(){return this.get("isOpened")}async open(t){if(this.isOpened)throw new Error("Popup is already opened.");this.isOpened=!0;try{const{button_id:s=null}=await d({event:"popup_closed",method:"web_app_open_popup",postEvent:this.postEvent,params:as(t)});return s}finally{this.isOpened=!1}}}const cs=_(({postEvent:e,version:t})=>new de(!1,t,e));class _e extends M{constructor(t,s,n){super({isOpened:t},s,{close:"web_app_close_scan_qr_popup",open:"web_app_open_scan_qr_popup"}),this.postEvent=n}close(){this.postEvent("web_app_close_scan_qr_popup"),this.isOpened=!1}set isOpened(t){this.set("isOpened",t)}get isOpened(){return this.get("isOpened")}async open(t){if(this.isOpened)throw new Error("QR scanner is already opened.");const{text:s,capture:n}=(typeof t=="string"?{text:t}:t)||{};this.isOpened=!0;try{const i=(await d({method:"web_app_open_scan_qr_popup",event:["qr_text_received","scan_qr_popup_closed"],postEvent:this.postEvent,params:{text:s},capture(o){return o.event==="scan_qr_popup_closed"||!n||n(o.payload)}})||{}).data||null;return i&&this.close(),i}catch(r){throw this.isOpened=!1,r}}}const hs=_(({version:e,postEvent:t})=>new _e(!1,e,t));class fe extends ct{constructor(s,n,r){super({isVisible:s},n,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"});c(this,"on",(s,n)=>s==="click"?g("settings_button_pressed",n):this.state.on(s,n));c(this,"off",(s,n)=>s==="click"?D("settings_button_pressed",n):this.state.off(s,n));this.postEvent=r}set isVisible(s){this.set("isVisible",s),this.postEvent("web_app_setup_settings_button",{is_visible:s})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const ps=_("settingsButton",({version:e,postEvent:t,state:s={isVisible:!1}})=>new fe(s.isVisible,e,t));function _t(e){return zt().parse(e)}class ge extends lt{get accentTextColor(){return this.get("accentTextColor")}get bgColor(){return this.get("bgColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}getState(){return this.clone()}get headerBgColor(){return this.get("headerBgColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.bgColor||ot(this.bgColor)}get linkColor(){return this.get("linkColor")}get secondaryBgColor(){return this.get("secondaryBgColor")}get sectionBgColor(){return this.get("sectionBgColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return g("theme_changed",t=>{this.set(_t(t.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}const us=_("themeParams",({themeParams:e,state:t=e,addCleanup:s})=>{const n=new ge(t);return s(n.listen()),n});function ls(e={}){return d({...e,method:"web_app_request_theme",event:"theme_changed"}).then(_t)}class be extends dt{constructor(s,n,r){super(s,{readTextFromClipboard:"web_app_read_text_from_clipboard"});c(this,"supportsParam");this.version=s,this.createRequestId=n,this.postEvent=r,this.supportsParam=ue(s,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(s,n){const r=new URL(s,window.location.href).toString();if(!E("web_app_open_link",this.version)){window.open(r,"_blank");return}this.postEvent("web_app_open_link",{url:r,...typeof n=="boolean"?{try_instant_view:n}:{}})}openTelegramLink(s){const{hostname:n,pathname:r,search:i}=new URL(s,"https://t.me");if(n!=="t.me")throw new Error(`URL has not allowed hostname: ${n}. Only "t.me" is allowed`);if(!E("web_app_open_tg_link",this.version)){window.location.href=s;return}this.postEvent("web_app_open_tg_link",{path_full:r+i})}async readTextFromClipboard(){const s=this.createRequestId(),{data:n=null}=await d({method:"web_app_read_text_from_clipboard",event:"clipboard_text_received",postEvent:this.postEvent,params:{req_id:s},capture:rt(s)});return n}shareURL(s,n){this.openTelegramLink("https://t.me/share?"+new URLSearchParams({url:s,text:n||""}).toString())}}const ds=_(({version:e,postEvent:t,createRequestId:s})=>new be(e,s,t));async function ft(e={}){const{is_expanded:t,is_state_stable:s,...n}=await d({...e,method:"web_app_request_viewport",event:"viewport_changed"});return{...n,isExpanded:t,isStateStable:s}}function C(e){return e<0?0:e}class we extends lt{constructor({postEvent:s,stableHeight:n,height:r,width:i,isExpanded:o}){super({height:C(r),isExpanded:o,stableHeight:C(n),width:C(i)});c(this,"postEvent");this.postEvent=s}async sync(s){const{isStateStable:n,...r}=await ft(s);this.set({...r,stableHeight:n?r.height:this.get("stableHeight")})}get height(){return this.get("height")}get stableHeight(){return this.get("stableHeight")}listen(){return g("viewport_changed",s=>{const{height:n,width:r,is_expanded:i,is_state_stable:o}=s,a=C(n);this.set({height:a,isExpanded:i,width:C(r),...o?{stableHeight:a}:{}})})}get isExpanded(){return this.get("isExpanded")}get width(){return this.get("width")}expand(){this.postEvent("web_app_expand"),this.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}const _s=_("viewport",async({state:e,platform:t,postEvent:s,addCleanup:n})=>{let r=!1,i=0,o=0,a=0;if(e)r=e.isExpanded,i=e.height,o=e.width,a=e.stableHeight;else if(["macos","tdesktop","unigram","webk","weba","web"].includes(t))r=!0,i=window.innerHeight,o=window.innerWidth,a=window.innerHeight;else{const u=await ft({timeout:1e3,postEvent:s});r=u.isExpanded,i=u.height,o=u.width,a=u.isStateStable?i:0}const p=new we({postEvent:s,height:i,width:o,stableHeight:a,isExpanded:r});return n(p.listen()),p});function m(e,t){document.documentElement.style.setProperty(e,t)}function fs(e,t,s){s||(s=a=>`--tg-${a}-color`);const n=s("header"),r=s("bg"),i=()=>{const{headerColor:a}=e;if(L(a))m(n,a);else{const{bgColor:p,secondaryBgColor:u}=t;a==="bg_color"&&p?m(n,p):a==="secondary_bg_color"&&u&&m(n,u)}m(r,e.bgColor)},o=[t.on("change",i),e.on("change",i)];return i(),()=>o.forEach(a=>a())}function gs(e,t){t||(t=n=>`--tg-theme-${n.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}`);const s=()=>{Object.entries(e.getState()).forEach(([n,r])=>{r&&m(t(n),r)})};return s(),e.on("change",s)}function bs(e,t){t||(t=u=>`--tg-viewport-${u}`);const[s,n,r]=["height","width","stable-height"].map(u=>t(u)),i=()=>m(s,`${e.height}px`),o=()=>m(n,`${e.width}px`),a=()=>m(r,`${e.stableHeight}px`),p=[e.on("change:height",i),e.on("change:width",o),e.on("change:stableHeight",a)];return i(),o(),a(),()=>p.forEach(u=>u())}function ws(e=!0){const t=[g("reload_iframe",()=>{P("iframe_will_reload"),window.location.reload()})],s=()=>t.forEach(n=>n());if(e){const n=document.createElement("style");n.id="telegram-custom-styles",document.head.appendChild(n),t.push(g("set_custom_style",r=>{n.innerHTML=r}),()=>document.head.removeChild(n))}return P("iframe_ready",{reload_supported:!0}),s}function ms(){return typeof window>"u"}async function ys(){if(Lt(window))return!0;try{return await d({method:"web_app_request_theme",event:"theme_changed",timeout:100}),!0}catch{return!1}}function Es(e){const t=typeof e=="string"?$(e):e;Zt(t);function s(r){if(typeof r=="string")try{const{eventType:i}=Mt(r);i==="web_app_request_theme"&&Q("theme_changed",{theme_params:JSON.parse(pt(t.themeParams))}),i==="web_app_request_viewport"&&Q("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}catch{}}if(nt()){const r=window.parent.postMessage.bind(window.parent);window.parent.postMessage=i=>{s(i),r(i)};return}if(Bt(window)){const r=window.external.notify.bind(window.external);window.external.notify=i=>{s(i),r(i)};return}const n=window.TelegramWebviewProxy;window.TelegramWebviewProxy={...n||{},postEvent(...r){s(JSON.stringify({eventType:r[0],eventData:r[1]})),n&&n.postEvent(...r)}}}function me(e){return e instanceof q}function vs(e,t){return me(e)&&e.type===t}function W(e,t){let s,n,r;return typeof e=="string"?s=e:(s=e.pathname===void 0?t:e.pathname,n=e.params,r=e.id),Object.freeze({id:r||(Math.random()*2**14|0).toString(16),pathname:s,params:n})}class ye{constructor(t,s,n=P){c(this,"history");c(this,"ee",new S);c(this,"attached",!1);c(this,"back",()=>this.go(-1));c(this,"on",this.ee.on.bind(this.ee));c(this,"off",this.ee.off.bind(this.ee));if(this._index=s,this.postEvent=n,t.length===0)throw f(It,"History should not be empty.");if(s<0||s>=t.length)throw f(Nt,"Index should not be zero and higher or equal than history size.");this.history=t.map(r=>W(r,""))}attach(){this.attached||(this.attached=!0,this.sync(),g("back_button_pressed",this.back))}get current(){return this.history[this.index]}detach(){this.attached=!1,D("back_button_pressed",this.back)}forward(){this.go(1)}go(t,s){const n=this.index+t,r=Math.min(Math.max(0,n),this.history.length-1);(n===r||s)&&this.replaceAndMove(r,this.history[r])}goTo(t,s){this.go(t-this.index,s)}get hasPrev(){return this.index>0}get hasNext(){return this.index!==this.history.length-1}get index(){return this._index}push(t){this.hasNext&&this.history.splice(this.index+1),this.replaceAndMove(this.index+1,W(t,this.current.pathname))}replace(t){this.replaceAndMove(this.index,W(t,this.current.pathname))}replaceAndMove(t,s){const n=t-this.index;if(!n&&this.current===s)return;const r=this.current;if(this.index!==t){const i=this._index;this._index=t,this.attached&&i>0!=t>0&&this.sync()}this.history[t]=s,this.ee.emit("change",{navigator:this,from:r,to:this.current,delta:n})}sync(){this.postEvent("web_app_setup_back_button",{is_visible:!!this.index})}}function H({params:e,...t}){return{...e||{hash:"",search:""},...t}}function A(e,t){return e.startsWith(t)?e:`${t}${e}`}function I(e){return new URL(typeof e=="string"?e:`${e.pathname||""}${A(e.search||"","?")}${A(e.hash||"","#")}`,"http://a")}function N(e){const t=typeof e=="string"?e.startsWith("/"):!!(e.pathname&&e.pathname.startsWith("/")),s=I(e);return`${t?s.pathname:s.pathname.slice(1)}${s.search}${s.hash}`}function G(e,t,s){let n,r;typeof e=="string"?n=e:(n=N(e),s=e.state,r=e.id);const{pathname:i,search:o,hash:a}=new URL(n,`http://a${A(t,"/")}`);return{id:r,pathname:i,params:{hash:a,search:o,state:s}}}async function x(e){return e===0?!0:Promise.race([new Promise(t=>{const s=J("popstate",()=>{s(),t(!0)});window.history.go(e)}),new Promise(t=>{setTimeout(t,50,!1)})])}async function Ss(){if(window.history.length<=1||(window.history.pushState(null,""),await x(1-window.history.length)))return;let t=await x(-1);for(;t;)t=await x(-1)}function gt(e){return I(e).pathname}const Et=0,j=1,z=2;class bt{constructor(t,s,{postEvent:n,hashMode:r="classic",base:i}={}){c(this,"navigator");c(this,"ee",new S);c(this,"hashMode");c(this,"base");c(this,"attached",!1);c(this,"onPopState",({state:t})=>{if(t===null)return this.push(this.parsePath(window.location.href));t===Et?window.history.forward():t===j&&this.back(),t===z&&this.forward()});c(this,"onNavigatorChange",async({to:t,from:s,delta:n})=>{this.attached&&await this.syncHistory(),this.ee.emit("change",{delta:n,from:H(s),to:H(t),navigator:this})});c(this,"on",this.ee.on.bind(this.ee));c(this,"off",this.ee.off.bind(this.ee));this.navigator=new ye(t.map(o=>G(o,"/")),s,n),this.navigator.on("change",o=>{this.onNavigatorChange(o)}),this.hashMode=r,this.base=gt(i||"")}async attach(){this.attached||(this.attached=!0,this.navigator.attach(),window.addEventListener("popstate",this.onPopState),await this.syncHistory())}back(){this.navigator.back()}detach(){this.attached=!1,this.navigator.detach(),window.removeEventListener("popstate",this.onPopState)}forward(){return this.navigator.forward()}get index(){return this.navigator.index}get id(){return this.navigator.current.id}go(t,s){return this.navigator.go(t,s)}goTo(t,s){this.navigator.goTo(t,s)}get hash(){return(this.navigator.current.params||{}).hash||""}get hasPrev(){return this.navigator.hasPrev}get hasNext(){return this.navigator.hasNext}get history(){return this.navigator.history.map(H)}get path(){return N(this)}get pathname(){return this.navigator.current.pathname}parsePath(t){let s=I(t);return this.hashMode&&(s=I(s.hash.slice(1))),{pathname:s.pathname,search:s.search,hash:s.hash}}push(t,s){const n=G(t,this.path),{state:r=s}=n.params;this.navigator.push({...n,params:{...n.params,state:r}})}replace(t,s){const n=G(t,this.path),{state:r=s}=n.params;this.navigator.replace({...n,params:{...n.params,state:r}})}renderPath(t){const s=(this.base.length===1?"":this.base)+A(N(t),"/");return this.hashMode?A(s.slice(1),this.hashMode==="classic"?"#":"#/"):s}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const{state:t}=this,s=this.renderPath(this);await Ss(),this.hasPrev&&this.hasNext?(window.history.replaceState(j,""),window.history.pushState(t,"",s),window.history.pushState(z,""),await x(-1)):this.hasPrev?(window.history.replaceState(j,""),window.history.pushState(t,"",s)):this.hasNext?(window.history.replaceState(t,s),window.history.pushState(z,""),await x(-1)):(window.history.replaceState(Et,""),window.history.pushState(t,"",s)),window.addEventListener("popstate",this.onPopState)}get search(){return(this.navigator.current.params||{}).search||""}get state(){return(this.navigator.current.params||{}).state}}function Ee(e){e||(e={});const{href:t,hash:s}=window.location;let n=N(e.hashMode===null?t:s.includes("?")?s.slice(1):`?${s.slice(1)}`);const r=e.base?gt(e.base):void 0;if(r){if(!n.startsWith(r))throw f(qt,`Path "${n}" expected to be starting with "${r}"`);n=n.slice(r.length)}return new bt([n],0,e)}function Ps(e){const t=e.match(/#(.+)/);return t?t[1]:null}function Rs(e,t){if(ut()){const s=sessionStorage.getItem(e);if(s)try{const{index:n,history:r}=JSON.parse(s);return new bt(r,n,t)}catch(n){console.error("Unable to restore hash navigator state.",n)}}return Ee(t)}function Ts(e,t){const s=Rs(e,t),n=()=>sessionStorage.setItem(e,JSON.stringify({index:s.index,history:s.history}));return s.on("change",n),n(),s}exports.BackButton=Gt;exports.BasicNavigator=ye;exports.BiometryManager=se;exports.BrowserNavigator=bt;exports.ClosingBehavior=re;exports.CloudStorage=oe;exports.ERR_INVALID_PATH_BASE=qt;exports.ERR_INVOKE_CUSTOM_METHOD_RESPONSE=Ct;exports.ERR_METHOD_PARAMETER_UNSUPPORTED=Rt;exports.ERR_METHOD_UNSUPPORTED=Pt;exports.ERR_NAVIGATION_HISTORY_EMPTY=It;exports.ERR_NAVIGATION_INDEX_INVALID=Nt;exports.ERR_NAVIGATION_ITEM_INVALID=xe;exports.ERR_PARSE=Z;exports.ERR_SSR_INIT=Ae;exports.ERR_TIMED_OUT=xt;exports.ERR_UNEXPECTED_TYPE=At;exports.ERR_UNKNOWN_ENV=Tt;exports.EventEmitter=S;exports.HapticFeedback=ae;exports.InitData=ce;exports.Invoice=he;exports.MainButton=pe;exports.MiniApp=le;exports.Popup=de;exports.QRScanner=_e;exports.SDKError=q;exports.SettingsButton=fe;exports.ThemeParams=ge;exports.Utils=be;exports.Viewport=we;exports.array=ie;exports.bindMiniAppCSSVars=fs;exports.bindThemeParamsCSSVars=gs;exports.bindViewportCSSVars=bs;exports.boolean=w;exports.captureSameReq=rt;exports.classNames=V;exports.compareVersions=Vt;exports.createBrowserNavigatorFromLocation=Ee;exports.createPostEvent=$t;exports.createSafeURL=I;exports.date=ht;exports.getHash=Ps;exports.getPathname=gt;exports.initBackButton=Fe;exports.initBiometryManager=Je;exports.initClosingBehavior=Qe;exports.initCloudStorage=Xe;exports.initHapticFeedback=Ze;exports.initInitData=ts;exports.initInvoice=ss;exports.initMainButton=ns;exports.initMiniApp=os;exports.initNavigator=Ts;exports.initPopup=cs;exports.initQRScanner=hs;exports.initSettingsButton=ps;exports.initThemeParams=us;exports.initUtils=ds;exports.initViewport=_s;exports.initWeb=ws;exports.invokeCustomMethod=v;exports.isColorDark=ot;exports.isIframe=nt;exports.isPageReload=ut;exports.isRGB=L;exports.isRGBShort=kt;exports.isSDKError=me;exports.isSDKErrorOfType=vs;exports.isSSR=ms;exports.isTMA=ys;exports.json=l;exports.mergeClassNames=Be;exports.mockTelegramEnv=Es;exports.number=y;exports.off=D;exports.on=g;exports.parseInitData=es;exports.parseLaunchParams=$;exports.parseThemeParams=_t;exports.postEvent=P;exports.request=d;exports.requestBiometryInfo=ne;exports.requestThemeParams=ls;exports.requestViewport=ft;exports.retrieveLaunchParams=te;exports.rgb=st;exports.searchParams=U;exports.serializeLaunchParams=Xt;exports.serializeThemeParams=pt;exports.setCSSVar=m;exports.setDebug=Te;exports.setTargetOrigin=Ve;exports.string=h;exports.subscribe=St;exports.supports=E;exports.targetOrigin=Ut;exports.toRGB=et;exports.unsubscribe=Y;exports.urlToPath=N;exports.withTimeout=it;
2
2
  //# sourceMappingURL=index.cjs.map