@tma.js/sdk-react 2.2.5 → 2.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +115 -102
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Mt=require("react/jsx-runtime"),l=require("react");var qs=Object.defineProperty,Bs=(e,t,s)=>t in e?qs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,c=(e,t,s)=>Bs(e,typeof t!="symbol"?t+"":t,s);function Nt(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 ct(e){const t=Q(),{count:s}=t;t.unsubscribe(e),s&&!t.count&&Ws()}function Vt(e){return Q().subscribe(e),()=>ct(e)}class Os{constructor(t,s={}){this.scope=t,this.options=s}print(t,...s){const n=new Date,i=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(n),{textColor:r,bgColor:o}=this.options,a="font-weight: bold;padding: 0 5px;border-radius:5px";console[t](`%c${i}%c / %c${this.scope}`,`${a};background-color: lightblue;color:black`,"",`${a};${r?`color:${r};`:""}${o?`background-color:${o}`:""}`,...s)}error(...t){this.print("error",...t)}log(...t){this.print("log",...t)}}const ht=new Os("SDK",{bgColor:"forestgreen",textColor:"white"});let rt=!1;const qt=({name:e,payload:t})=>{ht.log("Event received:",t?{name:e,payload:t}:{name:e})};function Lt(e){rt!==e&&(rt=e,e?Vt(qt):ct(qt))}function Ds(...e){rt&&ht.log(...e)}class I{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(n=>n({event:t,args:s})),(this.listeners.get(t)||[]).forEach(([n,i])=>{n(...s),i&&this.off(t,n)})}on(t,s,n){let i=this.listeners.get(t);return i||this.listeners.set(t,i=[]),i.push([s,n]),this.listenersCount+=1,()=>this.off(t,s)}off(t,s){const n=this.listeners.get(t)||[];for(let i=0;i<n.length;i+=1)if(s===n[i][0]){n.splice(i,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 ot(e,t,s){return window.addEventListener(e,t,s),()=>window.removeEventListener(e,t,s)}function ut(...e){let t=!1;const s=[...e];return[n=>!t&&s.push(n),()=>{t||(t=!0,s.forEach(n=>n()))},t]}class $ extends Error{constructor(t,s,n){super(s,{cause:n}),this.type=t,Object.setPrototypeOf(this,$.prototype)}}function b(e,t,s){return new $(e,t,s)}const $t="ERR_METHOD_UNSUPPORTED",Ut="ERR_METHOD_PARAMETER_UNSUPPORTED",Ht="ERR_UNKNOWN_ENV",Wt="ERR_INVOKE_CUSTOM_METHOD_RESPONSE",jt="ERR_TIMED_OUT",Gt="ERR_UNEXPECTED_TYPE",pt="ERR_PARSE",Kt="ERR_NAVIGATION_LIST_EMPTY",zt="ERR_NAVIGATION_CURSOR_INVALID",Ms="ERR_NAVIGATION_ITEM_INVALID",Ns="ERR_SSR_INIT",Ft="ERR_INVALID_PATH_BASE";function k(){return b(Gt,"Value has unexpected type")}class z{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 b(pt,`Unable to parse value${this.type?` as ${this.type}`:""}`,s)}}optional(){return this.isOptional=!0,this}}function q(e,t){return()=>new z(e,!1,t)}const R=q(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 k()},"boolean");function Qt(e,t){const s={};for(const n in e){const i=e[n];if(!i)continue;let r,o;if(typeof i=="function"||"parse"in i)r=n,o=typeof i=="function"?i:i.parse.bind(i);else{const{type:a}=i;r=i.from||n,o=typeof a=="function"?a:a.parse.bind(a)}try{const a=o(t(r));a!==void 0&&(s[n]=a)}catch(a){throw b(pt,`Unable to parse field "${n}"`,a)}}return s}function lt(e){let t=e;if(typeof t=="string"&&(t=JSON.parse(t)),typeof t!="object"||t===null||Array.isArray(t))throw k();return t}function d(e,t){return new z(s=>{const n=lt(s);return Qt(e,i=>n[i])},!1,t)}const S=q(e=>{if(typeof e=="number")return e;if(typeof e=="string"){const t=Number(e);if(!Number.isNaN(t))return t}throw k()},"number");function F(e){return/^#[\da-f]{6}$/i.test(e)}function Jt(e){return/^#[\da-f]{3}$/i.test(e)}function dt(e){const t=e.replace(/\s/g,"").toLowerCase();if(F(t))return t;if(Jt(t)){let n="#";for(let i=0;i<3;i+=1)n+=t[1+i].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,i)=>{const r=parseInt(i,10).toString(16);return n+(r.length===1?"0":"")+r},"#")}const h=q(e=>{if(typeof e=="string"||typeof e=="number")return e.toString();throw k()},"string"),_t=q(e=>dt(h().parse(e)),"rgb");function Yt(e){return d({eventType:h(),eventData:t=>t}).parse(e)}function Vs(){["TelegramGameProxy_receiveEvent","TelegramGameProxy","Telegram"].forEach(e=>{delete window[e]})}function at(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}function Ls(){[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=window;e.forEach((s,n,i)=>{if(n===i.length-1){t[s]=at;return}s in t||(t[s]={}),t=t[s]})})}const $s={clipboard_text_received:d({req_id:h(),data:e=>e===null?e:h().optional().parse(e)}),custom_method_invoked:d({req_id:h(),result:e=>e,error:h().optional()}),invoice_closed:d({slug:h(),status:h()}),phone_requested:d({status:h()}),popup_closed:{parse(e){return d({button_id:t=>t==null?void 0:h().parse(t)}).parse(e??{})}},qr_text_received:d({data:h().optional()}),theme_changed:d({theme_params:e=>{const t=_t().optional();return Object.entries(lt(e)).reduce((s,[n,i])=>(s[n]=t.parse(i),s),{})}}),viewport_changed:d({height:S(),width:e=>e==null?window.innerWidth:S().parse(e),is_state_stable:R(),is_expanded:R()}),write_access_requested:d({status:h()})};function Us(){const e=new I,t=new I;t.subscribe(n=>{e.emit("event",{name:n.event,payload:n.args[0]})}),Ls();const[,s]=ut(Vs,ot("resize",()=>{t.emit("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),ot("message",n=>{if(n.source!==window.parent)return;let i;try{i=Yt(n.data)}catch{return}const{eventType:r,eventData:o}=i,a=$s[r];try{const u=a?a.parse(o):o;t.emit(...u?[r,u]:[r])}catch(u){ht.error(`An error occurred processing the "${r}" event from the Telegram application. Please, file an issue here: https://github.com/Telegram-Mini-Apps/tma.js/issues/new/choose`,i,u)}}),()=>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[Hs,Ws]=Nt(e=>{const[t,s]=Us(),n=t.off.bind(t);return t.off=(i,r)=>{const{count:o}=t;n(i,r),o&&!t.count&&e()},[t,s]},([,e])=>e());function Q(){return Hs()[0]}function U(e,t){Q().off(e,t)}function y(e,t,s){return Q().on(e,t,s)}function H(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Zt(e,t){const s=e.split("."),n=t.split("."),i=Math.max(s.length,n.length);for(let r=0;r<i;r+=1){const o=parseInt(s[r]||"0",10),a=parseInt(n[r]||"0",10);if(o!==a)return o>a?1:-1}return 0}function E(e,t){return Zt(e,t)<=0}function x(e,t,s){if(typeof s=="string"){if(e==="web_app_open_link"&&t==="try_instant_view")return E("6.4",s);if(e==="web_app_set_header_color"&&t==="color")return E("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 E("6.1",t);case"web_app_open_popup":return E("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 E("6.4",t);case"web_app_switch_inline_query":return E("6.7",t);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return E("6.9",t);case"web_app_setup_settings_button":return E("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 E("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 Xt(e){return"external"in e&&H(e.external)&&"notify"in e.external&&typeof e.external.notify=="function"}function te(e){return"TelegramWebviewProxy"in e&&H(e.TelegramWebviewProxy)&&"postEvent"in e.TelegramWebviewProxy&&typeof e.TelegramWebviewProxy.postEvent=="function"}function J(){try{return window.self!==window.top}catch{return!0}}let ee="https://web.telegram.org";function js(e){ee=e}function se(){return ee}function A(e,t,s){let n={},i;t===void 0&&s===void 0?n={}:t!==void 0&&s!==void 0?(n=s,i=t):t!==void 0&&("targetOrigin"in t?n=t:i=t);const{targetOrigin:r=se()}=n;if(Ds("Posting event:",i?{event:e,data:i}:{event:e}),J()){window.parent.postMessage(JSON.stringify({eventType:e,eventData:i}),r);return}if(Xt(window)){window.external.notify(JSON.stringify({eventType:e,eventData:i}));return}if(te(window)){window.TelegramWebviewProxy.postEvent(e,JSON.stringify(i));return}throw b(Ht,"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 ne(e){return(t,s)=>{if(!x(t,e))throw b($t,`Method "${t}" is unsupported in Mini Apps version ${e}`);if(H(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&&!x(t,n,e))throw b(Ut,`Parameter "${n}" of "${t}" method is unsupported in Mini Apps version ${e}`)}return A(t,s)}}function wt(e){return({req_id:t})=>t===e}function ie(e){return b(jt,`Timeout reached: ${e}ms`)}function gt(e,t){return Promise.race([typeof e=="function"?e():e,new Promise((s,n)=>{setTimeout(()=>{n(ie(t))},t)})])}async function _(e){let t;const s=new Promise(a=>{t=a}),{event:n,capture:i,timeout:r}=e,[,o]=ut(...(Array.isArray(n)?n:[n]).map(a=>y(a,u=>(!i||i(u))&&t(u))));try{return(e.postEvent||A)(e.method,e.params),await(r?gt(s,r):s)}finally{o()}}async function T(e,t,s,n={}){const{result:i,error:r}=await _({...n,method:"web_app_invoke_custom_method",event:"custom_method_invoked",params:{method:e,params:t,req_id:s},capture:wt(s)});if(r)throw b(Wt,r);return i}function G(...e){return e.map(t=>{if(typeof t=="string")return t;if(H(t))return G(Object.entries(t).map(s=>s[1]&&s[0]));if(Array.isArray(t))return G(...t)}).filter(Boolean).join(" ")}function Gs(...e){return e.reduce((t,s)=>(H(s)&&Object.entries(s).forEach(([n,i])=>{const r=G(t[n],i);r.length&&(t[n]=r)}),t),{})}function ft(e){const t=dt(e);return Math.sqrt([.299,.587,.114].reduce((s,n,i)=>{const r=parseInt(t.slice(1+i*2,1+(i+1)*2),16);return s+r*r*n},0))<120}class Ks{constructor(t){c(this,"ee",new I),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((n,[i,r])=>this.state[i]===r||r===void 0?n:(this.state[i]=r,this.ee.emit(`change:${i}`,r),!0),!1)&&this.ee.emit("change",this.state)}get(t){return this.state[t]}}class mt{constructor(t){c(this,"state"),c(this,"get"),c(this,"set"),c(this,"clone"),this.state=new Ks(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 re(e,t){return s=>x(t[s],e)}class bt extends mt{constructor(t,s,n){super(t),c(this,"supports"),this.supports=re(s,n)}}class oe extends bt{constructor(t,s,n){super({isVisible:t},s,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"}),c(this,"on",(i,r)=>i==="click"?y("back_button_pressed",r):this.state.on(i,r)),c(this,"off",(i,r)=>i==="click"?U("back_button_pressed",r):this.state.off(i,r)),this.postEvent=n}set isVisible(t){this.set("isVisible",t),this.postEvent("web_app_setup_back_button",{is_visible:t})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const vt=q(e=>e instanceof Date?e:new Date(S().parse(e)*1e3),"Date");function Y(e,t){return new z(s=>{if(typeof s!="string"&&!(s instanceof URLSearchParams))throw k();const n=typeof s=="string"?new URLSearchParams(s):s;return Qt(e,i=>{const r=n.get(i);return r===null?void 0:r})},!1,t)}const zs=d({id:S(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat").optional(),Bt=d({addedToAttachmentMenu:{type:R().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:R().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:S(),isBot:{type:R().optional(),from:"is_bot"},isPremium:{type:R().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 ae(){return Y({authDate:{type:vt(),from:"auth_date"},canSendAfter:{type:S().optional(),from:"can_send_after"},chat:zs,chatInstance:{type:h().optional(),from:"chat_instance"},chatType:{type:h().optional(),from:"chat_type"},hash:h(),queryId:{type:h().optional(),from:"query_id"},receiver:Bt,startParam:{type:h().optional(),from:"start_param"},user:Bt},"InitData")}function Fs(e){return e.replace(/_[a-z]/g,t=>t[1].toUpperCase())}function Qs(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}const ce=q(e=>{const t=_t().optional();return Object.entries(lt(e)).reduce((s,[n,i])=>(s[Fs(n)]=t.parse(i),s),{})},"ThemeParams");function Z(e){return Y({botInline:{type:R().optional(),from:"tgWebAppBotInline"},initData:{type:ae().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:R().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:ce(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}}).parse(e)}function he(e){return Z(e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&"))}function Js(){return he(window.location.href)}function ue(){return performance.getEntriesByType("navigation")[0]}function Ys(){const e=ue();if(!e)throw new Error("Unable to get first navigation entry.");return he(e.name)}function pe(e){return`tma.js/${e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}`}function le(e,t){sessionStorage.setItem(pe(e),JSON.stringify(t))}function de(e){const t=sessionStorage.getItem(pe(e));try{return t?JSON.parse(t):void 0}catch{}}function Zs(){return Z(de("launchParams")||"")}function yt(e){return JSON.stringify(Object.fromEntries(Object.entries(e).map(([t,s])=>[Qs(t),s])))}function _e(e){const{initDataRaw:t,themeParams:s,platform:n,version:i,showSettings:r,startParam:o,botInline:a}=e,u=new URLSearchParams;return u.set("tgWebAppPlatform",n),u.set("tgWebAppThemeParams",yt(s)),u.set("tgWebAppVersion",i),t&&u.set("tgWebAppData",t),o&&u.set("tgWebAppStartParam",o),typeof r=="boolean"&&u.set("tgWebAppShowSettings",r?"1":"0"),typeof a=="boolean"&&u.set("tgWebAppBotInline",a?"1":"0"),u.toString()}function we(e){le("launchParams",_e(e))}function K(){for(const e of[Js,Ys,Zs])try{const t=e();return we(t),t}catch{}throw new Error("Unable to retrieve launch parameters from any known source.")}function Et(){const e=ue();return!!(e&&e.type==="reload")}function Xs(){let e=0;return()=>(e+=1).toString()}const[tn]=Nt(Xs);function w(e,t){return()=>{const s=K(),n={...s,postEvent:ne(s.version),createRequestId:tn()};if(typeof e=="function")return e(n);const[i,r,o]=ut(),a=t({...n,state:Et()?de(e):void 0,addCleanup:i}),u=p=>(o||i(p.on("change",C=>{le(e,C)})),p);return[a instanceof Promise?a.then(u):u(a),r]}}const ge=w("backButton",({postEvent:e,version:t,state:s={isVisible:!1}})=>new oe(s.isVisible,t,e));class W extends bt{constructor(){super(...arguments),c(this,"on",this.state.on.bind(this.state)),c(this,"off",this.state.off.bind(this.state))}}function fe(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 me extends W{constructor({postEvent:t,version:s,...n}){super(n,s,{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=t}get available(){return this.get("available")}get accessGranted(){return this.get("accessGranted")}get accessRequested(){return this.get("accessRequested")}async authenticate({reason:t,...s}){return this.authPromise||(this.authPromise=_({...s,method:"web_app_biometry_request_auth",event:"biometry_auth_requested",postEvent:this.postEvent,params:{reason:(t||"").trim()}}).then(({token:n})=>n).finally(()=>this.authPromise=void 0)),this.authPromise}get deviceId(){return this.get("deviceId")}openSettings(){this.postEvent("web_app_biometry_open_settings")}requestAccess({reason:t,...s}={}){return this.accessPromise||(this.accessPromise=_({...s,postEvent:this.postEvent,method:"web_app_biometry_request_access",event:"biometry_info_received",params:{reason:t||""}}).then(n=>{const i=fe(n);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:t,...s}={}){return["removed","updated"].includes((await _({...s,postEvent:this.postEvent,method:"web_app_biometry_update_token",event:"biometry_token_updated",params:{token:t||""}})).status)}}async function be(e){return fe(await _({...e||{},method:"web_app_biometry_get_info",event:"biometry_info_received"}))}const ve=w("biometryManager",async({postEvent:e,version:t,state:s})=>new me({...s||x("web_app_biometry_get_info",t)?s||await be({timeout:1e3}):{available:!1,accessGranted:!1,accessRequested:!1,tokenSaved:!1,deviceId:""},version:t,postEvent:e}));class Rt extends mt{constructor(){super(...arguments),c(this,"on",this.state.on.bind(this.state)),c(this,"off",this.state.off.bind(this.state))}}class ye extends Rt{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 Ee=w("closingBehavior",({postEvent:e,state:t={isConfirmationNeeded:!1}})=>new ye(t.isConfirmationNeeded,e));class Pt{constructor(t,s){c(this,"supports"),this.supports=re(t,s)}}function en(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 k()}class sn extends z{constructor(t,s,n){super(en,s,n),c(this,"itemParser"),this.itemParser=typeof t=="function"?t:t.parse.bind(t)}parse(t){const s=super.parse(t);return s===void 0?s:s.map(this.itemParser)}of(t){return this.itemParser=typeof t=="function"?t:t.parse.bind(t),this}}function Re(e){return new sn(t=>t,!1,e)}function Ot(e,t){return Object.fromEntries(e.map(s=>[s,t]))}class Pe extends Pt{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 T("deleteStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent})}async getKeys(t={}){return Re().of(h()).parse(await T("getStorageKeys",{},this.createRequestId(),{...t,postEvent:this.postEvent}))}async get(t,s={}){const n=Array.isArray(t)?t:[t];if(!n.length)return Ot(n,"");const i=await T("getStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent}),r=d(Ot(n,h()),"CloudStorageData").parse(i);return Array.isArray(t)?r:r[t]}async set(t,s,n={}){await T("saveStorageValue",{key:t,value:s},this.createRequestId(),{...n,postEvent:this.postEvent})}}const Se=w(({createRequestId:e,postEvent:t,version:s})=>new Pe(s,e,t));class xe extends Pt{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 Ce=w(({version:e,postEvent:t})=>new xe(e,t));class Te{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 Ie=w(({initData:e})=>e?new Te(e):void 0);function nn(e){return ae().parse(e)}class Ae extends W{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:i,pathname:r}=new URL(t,window.location.href);if(i!=="t.me")throw new Error(`Incorrect hostname: ${i}`);const o=r.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 _({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 ke=w(({version:e,postEvent:t})=>new Ae(!1,e,t));class qe extends mt{constructor({postEvent:t,...s}){super(s),c(this,"postEvent"),c(this,"on",(n,i)=>n==="click"?y("main_button_pressed",i):this.state.on(n,i)),c(this,"off",(n,i)=>n==="click"?U("main_button_pressed",i):this.state.off(n,i)),this.postEvent=t}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(t){this.setParams({isEnabled:t})}get isEnabled(){return this.get("isEnabled")}set isLoaderVisible(t){this.setParams({isLoaderVisible:t})}get isLoaderVisible(){return this.get("isLoaderVisible")}set isVisible(t){this.setParams({isVisible:t})}get isVisible(){return this.get("isVisible")}show(){return this.isVisible=!0,this}showLoader(){return this.isLoaderVisible=!0,this}setText(t){return this.setParams({text:t})}setTextColor(t){return this.setParams({textColor:t})}setBgColor(t){return this.setParams({bgColor:t})}setParams(t){return this.set(t),this.commit(),this}get text(){return this.get("text")}get textColor(){return this.get("textColor")}}const Be=w("mainButton",({postEvent:e,themeParams:t,state:s={isVisible:!1,isEnabled:!1,text:"",isLoaderVisible:!1,textColor:t.buttonTextColor||"#ffffff",bgColor:t.buttonColor||"#000000"}})=>new qe({...s,postEvent:e}));function rn(){return Y({contact:d({userId:{type:S(),from:"user_id"},phoneNumber:{type:h(),from:"phone_number"},firstName:{type:h(),from:"first_name"},lastName:{type:h().optional(),from:"last_name"}}),authDate:{type:vt(),from:"auth_date"},hash:h()},"RequestedContact")}function Oe(e,t){return s=>{const[n,i]=t[s];return x(n,i,e)}}function on(e){return new Promise(t=>{setTimeout(t,e)})}class De extends W{constructor({postEvent:t,createRequestId:s,version:n,botInline:i,...r}){super(r,n,{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=s,this.postEvent=t,this.botInline=i;const o=this.supports.bind(this);this.supports=a=>o(a)?a!=="switchInlineQuery"||i:!1,this.supportsParam=Oe(n,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact({timeout:t=1e4}={}){return rn().parse(await T("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:t}))}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 ft(this.bgColor)}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:t=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+t;let n=50;return gt(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await on(n),n+=50}throw ie(t)},t)}async requestPhoneAccess(t={}){return this.requestPhoneAccessPromise||(this.requestPhoneAccessPromise=_({...t,method:"web_app_request_phone",event:"phone_requested",postEvent:this.postEvent}).then(({status:s})=>s).finally(()=>this.requestPhoneAccessPromise=void 0)),this.requestPhoneAccessPromise}async requestWriteAccess(t={}){return this.requestWriteAccessPromise||(this.requestWriteAccessPromise=_({...t,method:"web_app_request_write_access",event:"write_access_requested",postEvent:this.postEvent}).then(({status:s})=>s).finally(()=>this.requestWriteAccessPromise=void 0)),this.requestWriteAccessPromise}sendData(t){const{size:s}=new Blob([t]);if(!s||s>4096)throw new Error(`Passed data has incorrect size: ${s}`);this.postEvent("web_app_data_send",{data:t})}setHeaderColor(t){this.postEvent("web_app_set_header_color",F(t)?{color:t}:{color_key:t}),this.set("headerColor",t)}setBgColor(t){this.postEvent("web_app_set_background_color",{color:t}),this.set("bgColor",t)}switchInlineQuery(t,s=[]){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:t,chat_types:s})}}const Me=w("miniApp",({themeParams:e,botInline:t=!1,state:s={bgColor:e.bgColor||"#ffffff",headerColor:e.headerBgColor||"#000000"},...n})=>new De({...n,...s,botInline:t}));function an(e){const t=e.message.trim(),s=(e.title||"").trim(),n=e.buttons||[];let i;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?i=n.map(r=>{const{id:o=""}=r;if(o.length>64)throw new Error(`Button ID has incorrect size: ${o}`);if(!r.type||r.type==="default"||r.type==="destructive"){const a=r.text.trim();if(!a.length||a.length>64){const u=r.type||"default";throw new Error(`Button text with type "${u}" has incorrect size: ${r.text.length}`)}return{...r,text:a,id:o}}return{...r,id:o}}):i=[{type:"close",id:""}],{title:s,message:t,buttons:i}}class Ne extends W{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 _({event:"popup_closed",method:"web_app_open_popup",postEvent:this.postEvent,params:an(t)});return s}finally{this.isOpened=!1}}}const Ve=w(({postEvent:e,version:t})=>new Ne(!1,t,e));class Le extends W{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 _({method:"web_app_open_scan_qr_popup",event:["qr_text_received","scan_qr_popup_closed"],postEvent:this.postEvent,params:{text:s},capture(r){return r.event==="scan_qr_popup_closed"||!n||n(r.payload)}})||{}).data||null;return i&&this.close(),i}catch(i){throw this.isOpened=!1,i}}}const $e=w(({version:e,postEvent:t})=>new Le(!1,e,t));class Ue extends bt{constructor(t,s,n){super({isVisible:t},s,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"}),c(this,"on",(i,r)=>i==="click"?y("settings_button_pressed",r):this.state.on(i,r)),c(this,"off",(i,r)=>i==="click"?U("settings_button_pressed",r):this.state.off(i,r)),this.postEvent=n}set isVisible(t){this.set("isVisible",t),this.postEvent("web_app_setup_settings_button",{is_visible:t})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const He=w("settingsButton",({version:e,postEvent:t,state:s={isVisible:!1}})=>new Ue(s.isVisible,e,t));function St(e){return ce().parse(e)}class We extends Rt{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||ft(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 y("theme_changed",t=>{this.set(St(t.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}const je=w("themeParams",({themeParams:e,state:t=e,addCleanup:s})=>{const n=new We(t);return s(n.listen()),n});function cn(e={}){return _({...e,method:"web_app_request_theme",event:"theme_changed"}).then(St)}class Ge extends Pt{constructor(t,s,n){super(t,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),c(this,"supportsParam"),this.version=t,this.createRequestId=s,this.postEvent=n,this.supportsParam=Oe(t,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(t,s){const n=new URL(t,window.location.href).toString();if(!x("web_app_open_link",this.version)){window.open(n,"_blank");return}this.postEvent("web_app_open_link",{url:n,...typeof s=="boolean"?{try_instant_view:s}:{}})}openTelegramLink(t){const{hostname:s,pathname:n,search:i}=new URL(t,"https://t.me");if(s!=="t.me")throw new Error(`URL has not allowed hostname: ${s}. Only "t.me" is allowed`);if(!x("web_app_open_tg_link",this.version)){window.location.href=t;return}this.postEvent("web_app_open_tg_link",{path_full:n+i})}async readTextFromClipboard(){const t=this.createRequestId(),{data:s=null}=await _({method:"web_app_read_text_from_clipboard",event:"clipboard_text_received",postEvent:this.postEvent,params:{req_id:t},capture:wt(t)});return s}shareURL(t,s){this.openTelegramLink("https://t.me/share/url?"+new URLSearchParams({url:t,text:s||""}).toString())}}const Ke=w(({version:e,postEvent:t,createRequestId:s})=>new Ge(e,s,t));async function xt(e={}){const{is_expanded:t,is_state_stable:s,...n}=await _({...e,method:"web_app_request_viewport",event:"viewport_changed"});return{...n,isExpanded:t,isStateStable:s}}function D(e){return e<0?0:e}class ze extends Rt{constructor({postEvent:t,stableHeight:s,height:n,width:i,isExpanded:r}){super({height:D(n),isExpanded:r,stableHeight:D(s),width:D(i)}),c(this,"postEvent"),this.postEvent=t}async sync(t){const{isStateStable:s,...n}=await xt(t);this.set({...n,stableHeight:s?n.height:this.get("stableHeight")})}get height(){return this.get("height")}get stableHeight(){return this.get("stableHeight")}listen(){return y("viewport_changed",t=>{const{height:s,width:n,is_expanded:i,is_state_stable:r}=t,o=D(s);this.set({height:o,isExpanded:i,width:D(n),...r?{stableHeight:o}:{}})})}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 Fe=w("viewport",async({state:e,platform:t,postEvent:s,addCleanup:n})=>{let i=!1,r=0,o=0,a=0;if(e)i=e.isExpanded,r=e.height,o=e.width,a=e.stableHeight;else if(["macos","tdesktop","unigram","webk","weba","web"].includes(t))i=!0,r=window.innerHeight,o=window.innerWidth,a=window.innerHeight;else{const p=await xt({timeout:1e3,postEvent:s});i=p.isExpanded,r=p.height,o=p.width,a=p.isStateStable?r:0}const u=new ze({postEvent:s,height:r,width:o,stableHeight:a,isExpanded:i});return n(u.listen()),u});function P(e,t){document.documentElement.style.setProperty(e,t)}function hn(e,t,s){s||(s=a=>`--tg-${a}-color`);const n=s("header"),i=s("bg"),r=()=>{const{headerColor:a}=e;if(F(a))P(n,a);else{const{bgColor:u,secondaryBgColor:p}=t;a==="bg_color"&&u?P(n,u):a==="secondary_bg_color"&&p&&P(n,p)}P(i,e.bgColor)},o=[t.on("change",r),e.on("change",r)];return r(),()=>o.forEach(a=>a())}function un(e,t){t||(t=n=>`--tg-theme-${n.replace(/[A-Z]/g,i=>`-${i.toLowerCase()}`)}`);const s=()=>{Object.entries(e.getState()).forEach(([n,i])=>{i&&P(t(n),i)})};return s(),e.on("change",s)}function pn(e,t){t||(t=p=>`--tg-viewport-${p}`);const[s,n,i]=["height","width","stable-height"].map(p=>t(p)),r=()=>P(s,`${e.height}px`),o=()=>P(n,`${e.width}px`),a=()=>P(i,`${e.stableHeight}px`),u=[e.on("change:height",r),e.on("change:width",o),e.on("change:stableHeight",a)];return r(),o(),a(),()=>u.forEach(p=>p())}function Qe(e=!0){const t=[y("reload_iframe",()=>{A("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(y("set_custom_style",i=>{n.innerHTML=i}),()=>document.head.removeChild(n))}return A("iframe_ready",{reload_supported:!0}),s}function Je(){return typeof window>"u"}async function ln(){if(te(window))return!0;try{return await _({method:"web_app_request_theme",event:"theme_changed",timeout:100}),!0}catch{return!1}}function dn(e){const t=typeof e=="string"?Z(e):e;we(t);function s(i){if(typeof i=="string")try{const{eventType:r}=Yt(i);r==="web_app_request_theme"&&at("theme_changed",{theme_params:JSON.parse(yt(t.themeParams))}),r==="web_app_request_viewport"&&at("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}catch{}}if(J()){const i=window.parent.postMessage.bind(window.parent);window.parent.postMessage=r=>{s(r),i(r)};return}if(Xt(window)){const i=window.external.notify.bind(window.external);window.external.notify=r=>{s(r),i(r)};return}const n=window.TelegramWebviewProxy;window.TelegramWebviewProxy={...n||{},postEvent(...i){s(JSON.stringify({eventType:i[0],eventData:i[1]})),n&&n.postEvent(...i)}}}function Ye(e){return e instanceof $}function _n(e,t){return Ye(e)&&e.type===t}function tt(e,t){let s,n,i;return typeof e=="string"?s=e:(s=e.pathname===void 0?t:e.pathname,n=e.params,i=e.id),Object.freeze({id:i||(Math.random()*2**14|0).toString(16),pathname:s,params:n})}class Ze{constructor(t,s,n=A){if(c(this,"history"),c(this,"ee",new I),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)),this._index=s,this.postEvent=n,t.length===0)throw b(Kt,"History should not be empty.");if(s<0||s>=t.length)throw b(zt,"Index should not be zero and higher or equal than history size.");this.history=t.map(i=>tt(i,""))}attach(){this.attached||(this.attached=!0,this.sync(),y("back_button_pressed",this.back))}get current(){return this.history[this.index]}detach(){this.attached=!1,U("back_button_pressed",this.back)}forward(){this.go(1)}go(t,s){const n=this.index+t,i=Math.min(Math.max(0,n),this.history.length-1);(n===i||s)&&this.replaceAndMove(i,this.history[i])}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,tt(t,this.current.pathname))}replace(t){this.replaceAndMove(this.index,tt(t,this.current.pathname))}replaceAndMove(t,s){const n=t-this.index;if(!n&&this.current===s)return;const i=this.current;if(this.index!==t){const r=this._index;this._index=t,this.attached&&r>0!=t>0&&this.sync()}this.history[t]=s,this.ee.emit("change",{navigator:this,from:i,to:this.current,delta:n})}sync(){this.postEvent("web_app_setup_back_button",{is_visible:!!this.index})}}function et({params:e,...t}){return{...e||{hash:"",search:""},...t}}function N(e,t){return e.startsWith(t)?e:`${t}${e}`}function V(e){return new URL(typeof e=="string"?e:`${e.pathname||""}${N(e.search||"","?")}${N(e.hash||"","#")}`,"http://a")}function L(e){const t=typeof e=="string"?e.startsWith("/"):!!(e.pathname&&e.pathname.startsWith("/")),s=V(e);return`${t?s.pathname:s.pathname.slice(1)}${s.search}${s.hash}`}function st(e,t,s){let n,i;typeof e=="string"?n=e:(n=L(e),s=e.state,i=e.id);const{pathname:r,search:o,hash:a}=new URL(n,`http://a${N(t,"/")}`);return{id:i,pathname:r,params:{hash:a,search:o,state:s}}}async function M(e){return e===0?!0:Promise.race([new Promise(t=>{const s=ot("popstate",()=>{s(),t(!0)});window.history.go(e)}),new Promise(t=>{setTimeout(t,50,!1)})])}async function wn(){if(window.history.length<=1||(window.history.pushState(null,""),await M(1-window.history.length)))return;let e=await M(-1);for(;e;)e=await M(-1)}function Ct(e){return V(e).pathname}const Dt=0,nt=1,it=2;class Tt{constructor(t,s,{postEvent:n,hashMode:i="classic",base:r}={}){c(this,"navigator"),c(this,"ee",new I),c(this,"hashMode"),c(this,"base"),c(this,"attached",!1),c(this,"onPopState",({state:o})=>{if(o===null)return this.push(this.parsePath(window.location.href));o===Dt?window.history.forward():o===nt&&this.back(),o===it&&this.forward()}),c(this,"onNavigatorChange",async({to:o,from:a,delta:u})=>{this.attached&&await this.syncHistory(),this.ee.emit("change",{delta:u,from:et(a),to:et(o),navigator:this})}),c(this,"on",this.ee.on.bind(this.ee)),c(this,"off",this.ee.off.bind(this.ee)),this.navigator=new Ze(t.map(o=>st(o,"/")),s,n),this.navigator.on("change",o=>{this.onNavigatorChange(o)}),this.hashMode=i,this.base=Ct(r||"")}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(et)}get path(){return L(this)}get pathname(){return this.navigator.current.pathname}parsePath(t){let s=V(t);return this.hashMode&&(s=V(s.hash.slice(1))),{pathname:s.pathname,search:s.search,hash:s.hash}}push(t,s){const n=st(t,this.path),{state:i=s}=n.params;this.navigator.push({...n,params:{...n.params,state:i}})}replace(t,s){const n=st(t,this.path),{state:i=s}=n.params;this.navigator.replace({...n,params:{...n.params,state:i}})}renderPath(t){const s=(this.base.length===1?"":this.base)+N(L(t),"/");return this.hashMode?N(s.slice(1),this.hashMode==="classic"?"#":"#/"):s}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const{state:t}=this,s=this.renderPath(this);await wn(),this.hasPrev&&this.hasNext?(window.history.replaceState(nt,""),window.history.pushState(t,"",s),window.history.pushState(it,""),await M(-1)):this.hasPrev?(window.history.replaceState(nt,""),window.history.pushState(t,"",s)):this.hasNext?(window.history.replaceState(t,s),window.history.pushState(it,""),await M(-1)):(window.history.replaceState(Dt,""),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 Xe(e){e||(e={});const{href:t,hash:s}=window.location;let n=L(e.hashMode===null?t:s.includes("?")?s.slice(1):`?${s.slice(1)}`);const i=e.base?Ct(e.base):void 0;if(i){if(!n.startsWith(i))throw b(Ft,`Path "${n}" expected to be starting with "${i}"`);n=n.slice(i.length)}return new Tt([n],0,e)}function gn(e){const t=e.match(/#(.+)/);return t?t[1]:null}function fn(e,t){if(Et()){const s=sessionStorage.getItem(e);if(s)try{const{index:n,history:i}=JSON.parse(s);return new Tt(i,n,t)}catch(n){console.error("Unable to restore hash navigator state.",n)}}return Xe(t)}function mn(e,t){const s=fn(e,t),n=()=>sessionStorage.setItem(e,JSON.stringify({index:s.index,history:s.history}));return s.on("change",n),n(),s}function g(e,t){function s(n){return function(r,o,a){return u=>{const p={...u,[r]:n(o)};return Mt.jsx(a,{...p})}}}return[s(e),s(t)]}const ts=l.createContext(void 0);function es(){const e=l.useContext(ts);if(!e)throw new Error("useSDK was used outside the SDKProvider.");return e}function f(e){function t(n){const i=es(),[r,o]=l.useState(n?void 0:()=>{if(Je())throw new Error("Using hooks on the server side, you must explicitly specify ssr = true option");return i.use(e)});return l.useEffect(()=>{o(i.use(e))},[i]),r}function s(n){const i=t(n);if(i){if("error"in i)throw i.error;return i.result}}return[t,s]}const[ss,ns]=f(ge),[bn,vn]=g(ss,ns),[is,rs]=f(ve),[yn,En]=g(is,rs),[os,as]=f(Ee),[Rn,Pn]=g(os,as),[cs,hs]=f(Se),[Sn,xn]=g(cs,hs),[us,ps]=f(Ce),[Cn,Tn]=g(us,ps),[ls,ds]=f(Ie),[In,An]=g(ls,ds),[_s,ws]=f(ke),[kn,qn]=g(_s,ws),[gs,fs]=f(Be),[Bn,On]=g(gs,fs),[ms,bs]=f(Me),[Dn,Mn]=g(ms,bs),[vs,ys]=f(Ve),[Nn,Vn]=g(vs,ys),[Es,Rs]=f($e),[Ln,$n]=g(Es,Rs),[Ps,Ss]=f(He),[Un,Hn]=g(Ps,Ss),[xs,Cs]=f(je),[Wn,jn]=g(xs,Cs);function Gn(e){const[t,s]=l.useState(()=>e?void 0:K());return l.useEffect(()=>{e&&s(K())},[]),t}const[Ts,Is]=f(Ke),[Kn,zn]=g(Ts,Is),[As,ks]=f(Fe),[Fn,Qn]=g(As,ks);function Jn({children:e,acceptCustomStyles:t,debug:s}){const n=l.useRef(!0),[i,r]=l.useState(new Map),o=l.useRef(i),a=l.useCallback(p=>{n.current&&r(C=>(p&&p(C),new Map(C)))},[]),u=l.useMemo(()=>({use(p,...C){const It=i.get(p);if(It)return It;let v,X;try{v=p(...C)}catch(m){X=m}function j(m){return i.set(p,m),m}if(X)return j({error:X});let B;if(Array.isArray(v)&&(B=v[1],v=v[0]),!v)return j({result:v,cleanup:B});function At(m){if("on"in m){const O=m.on("change",()=>a()),kt=B;B=()=>{kt&&kt(),O()}}return{result:m,cleanup:B}}return v instanceof Promise?(v.then(m=>a(O=>O.set(p,At(m))),m=>a(O=>O.set(p,{error:m}))),j({})):j(At(v))}}),[i]);return l.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[]),l.useEffect(()=>{if(J())return Qe(t)},[t]),l.useEffect(()=>{Lt(s||!1)},[s]),l.useEffect(()=>{o.current=i},[i]),l.useEffect(()=>()=>{o.current.forEach(p=>{"cleanup"in p&&p.cleanup&&p.cleanup()})},[]),Mt.jsx(ts.Provider,{value:u,children:e})}exports.BackButton=oe;exports.BasicNavigator=Ze;exports.BiometryManager=me;exports.BrowserNavigator=Tt;exports.ClosingBehavior=ye;exports.CloudStorage=Pe;exports.ERR_INVALID_PATH_BASE=Ft;exports.ERR_INVOKE_CUSTOM_METHOD_RESPONSE=Wt;exports.ERR_METHOD_PARAMETER_UNSUPPORTED=Ut;exports.ERR_METHOD_UNSUPPORTED=$t;exports.ERR_NAVIGATION_HISTORY_EMPTY=Kt;exports.ERR_NAVIGATION_INDEX_INVALID=zt;exports.ERR_NAVIGATION_ITEM_INVALID=Ms;exports.ERR_PARSE=pt;exports.ERR_SSR_INIT=Ns;exports.ERR_TIMED_OUT=jt;exports.ERR_UNEXPECTED_TYPE=Gt;exports.ERR_UNKNOWN_ENV=Ht;exports.EventEmitter=I;exports.HapticFeedback=xe;exports.InitData=Te;exports.Invoice=Ae;exports.MainButton=qe;exports.MiniApp=De;exports.Popup=Ne;exports.QRScanner=Le;exports.SDKError=$;exports.SDKProvider=Jn;exports.SettingsButton=Ue;exports.ThemeParams=We;exports.Utils=Ge;exports.Viewport=ze;exports.array=Re;exports.bindMiniAppCSSVars=hn;exports.bindThemeParamsCSSVars=un;exports.bindViewportCSSVars=pn;exports.boolean=R;exports.captureSameReq=wt;exports.classNames=G;exports.compareVersions=Zt;exports.createBrowserNavigatorFromLocation=Xe;exports.createPostEvent=ne;exports.createSafeURL=V;exports.date=vt;exports.getHash=gn;exports.getPathname=Ct;exports.initBackButton=ge;exports.initBiometryManager=ve;exports.initClosingBehavior=Ee;exports.initCloudStorage=Se;exports.initHapticFeedback=Ce;exports.initInitData=Ie;exports.initInvoice=ke;exports.initMainButton=Be;exports.initMiniApp=Me;exports.initNavigator=mn;exports.initPopup=Ve;exports.initQRScanner=$e;exports.initSettingsButton=He;exports.initThemeParams=je;exports.initUtils=Ke;exports.initViewport=Fe;exports.initWeb=Qe;exports.invokeCustomMethod=T;exports.isColorDark=ft;exports.isIframe=J;exports.isPageReload=Et;exports.isRGB=F;exports.isRGBShort=Jt;exports.isSDKError=Ye;exports.isSDKErrorOfType=_n;exports.isSSR=Je;exports.isTMA=ln;exports.json=d;exports.mergeClassNames=Gs;exports.mockTelegramEnv=dn;exports.number=S;exports.off=U;exports.on=y;exports.parseInitData=nn;exports.parseLaunchParams=Z;exports.parseThemeParams=St;exports.postEvent=A;exports.request=_;exports.requestBiometryInfo=be;exports.requestThemeParams=cn;exports.requestViewport=xt;exports.retrieveLaunchParams=K;exports.rgb=_t;exports.searchParams=Y;exports.serializeLaunchParams=_e;exports.serializeThemeParams=yt;exports.setCSSVar=P;exports.setDebug=Lt;exports.setTargetOrigin=js;exports.string=h;exports.subscribe=Vt;exports.supports=x;exports.targetOrigin=se;exports.toRGB=dt;exports.unsubscribe=ct;exports.urlToPath=L;exports.useBackButton=ns;exports.useBackButtonRaw=ss;exports.useBiometryManager=rs;exports.useBiometryManagerRaw=is;exports.useClosingBehavior=as;exports.useClosingBehaviorRaw=os;exports.useCloudStorage=hs;exports.useCloudStorageRaw=cs;exports.useHapticFeedback=ps;exports.useHapticFeedbackRaw=us;exports.useInitData=ds;exports.useInitDataRaw=ls;exports.useInvoice=ws;exports.useInvoiceRaw=_s;exports.useLaunchParams=Gn;exports.useMainButton=fs;exports.useMainButtonRaw=gs;exports.useMiniApp=bs;exports.useMiniAppRaw=ms;exports.usePopup=ys;exports.usePopupRaw=vs;exports.useQRScanner=Rs;exports.useQRScannerRaw=Es;exports.useSDK=es;exports.useSettingsButton=Ss;exports.useSettingsButtonRaw=Ps;exports.useThemeParams=Cs;exports.useThemeParamsRaw=xs;exports.useUtils=Is;exports.useUtilsRaw=Ts;exports.useViewport=ks;exports.useViewportRaw=As;exports.withBackButton=vn;exports.withBackButtonRaw=bn;exports.withBiometryManager=En;exports.withBiometryManagerRaw=yn;exports.withClosingBehavior=Pn;exports.withClosingBehaviorRaw=Rn;exports.withCloudStorage=xn;exports.withCloudStorageRaw=Sn;exports.withHapticFeedback=Tn;exports.withHapticFeedbackRaw=Cn;exports.withInitData=An;exports.withInitDataRaw=In;exports.withInvoice=qn;exports.withInvoiceRaw=kn;exports.withMainButton=On;exports.withMainButtonRaw=Bn;exports.withMiniApp=Mn;exports.withMiniAppRaw=Dn;exports.withPopup=Vn;exports.withPopupRaw=Nn;exports.withQRScanner=$n;exports.withQRScannerRaw=Ln;exports.withSettingsButton=Hn;exports.withSettingsButtonRaw=Un;exports.withThemeParams=jn;exports.withThemeParamsRaw=Wn;exports.withTimeout=gt;exports.withUtils=zn;exports.withUtilsRaw=Kn;exports.withViewport=Qn;exports.withViewportRaw=Fn;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Mt=require("react/jsx-runtime"),l=require("react");var qs=Object.defineProperty,Bs=(e,t,s)=>t in e?qs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,c=(e,t,s)=>Bs(e,typeof t!="symbol"?t+"":t,s);function Nt(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 ct(e){const t=J(),{count:s}=t;t.unsubscribe(e),s&&!t.count&&Ws()}function Vt(e){return J().subscribe(e),()=>ct(e)}class Os{constructor(t,s={}){this.scope=t,this.options=s}print(t,...s){const n=new Date,i=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(n),{textColor:r,bgColor:o}=this.options,a="font-weight: bold;padding: 0 5px;border-radius:5px";console[t](`%c${i}%c / %c${this.scope}`,`${a};background-color: lightblue;color:black`,"",`${a};${r?`color:${r};`:""}${o?`background-color:${o}`:""}`,...s)}error(...t){this.print("error",...t)}log(...t){this.print("log",...t)}}const ht=new Os("SDK",{bgColor:"forestgreen",textColor:"white"});let rt=!1;const qt=({name:e,payload:t})=>{ht.log("Event received:",t?{name:e,payload:t}:{name:e})};function Lt(e){rt!==e&&(rt=e,e?Vt(qt):ct(qt))}function Ds(...e){rt&&ht.log(...e)}class I{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(n=>n({event:t,args:s})),(this.listeners.get(t)||[]).forEach(([n,i])=>{n(...s),i&&this.off(t,n)})}on(t,s,n){let i=this.listeners.get(t);return i||this.listeners.set(t,i=[]),i.push([s,n]),this.listenersCount+=1,()=>this.off(t,s)}off(t,s){const n=this.listeners.get(t)||[];for(let i=0;i<n.length;i+=1)if(s===n[i][0]){n.splice(i,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 ot(e,t,s){return window.addEventListener(e,t,s),()=>window.removeEventListener(e,t,s)}function ut(...e){let t=!1;const s=[...e];return[n=>!t&&s.push(n),()=>{t||(t=!0,s.forEach(n=>n()))},t]}class $ extends Error{constructor(t,s,n){super(s,{cause:n}),this.type=t,Object.setPrototypeOf(this,$.prototype)}}function v(e,t,s){return new $(e,t,s)}const $t="ERR_METHOD_UNSUPPORTED",Ht="ERR_METHOD_PARAMETER_UNSUPPORTED",Ut="ERR_UNKNOWN_ENV",Wt="ERR_INVOKE_CUSTOM_METHOD_RESPONSE",jt="ERR_TIMED_OUT",Gt="ERR_UNEXPECTED_TYPE",pt="ERR_PARSE",Kt="ERR_NAVIGATION_LIST_EMPTY",zt="ERR_NAVIGATION_CURSOR_INVALID",Ms="ERR_NAVIGATION_ITEM_INVALID",Ns="ERR_SSR_INIT",Ft="ERR_INVALID_PATH_BASE";function A(){return v(Gt,"Value has unexpected type")}class z{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 v(pt,`Unable to parse value${this.type?` as ${this.type}`:""}`,s)}}optional(){return this.isOptional=!0,this}}function q(e,t){return()=>new z(e,!1,t)}const R=q(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 A()},"boolean");function Jt(e,t){const s={};for(const n in e){const i=e[n];if(!i)continue;let r,o;if(typeof i=="function"||"parse"in i)r=n,o=typeof i=="function"?i:i.parse.bind(i);else{const{type:a}=i;r=i.from||n,o=typeof a=="function"?a:a.parse.bind(a)}try{const a=o(t(r));a!==void 0&&(s[n]=a)}catch(a){throw v(pt,`Unable to parse field "${n}"`,a)}}return s}function lt(e){let t=e;if(typeof t=="string"&&(t=JSON.parse(t)),typeof t!="object"||t===null||Array.isArray(t))throw A();return t}function d(e,t){return new z(s=>{const n=lt(s);return Jt(e,i=>n[i])},!1,t)}const S=q(e=>{if(typeof e=="number")return e;if(typeof e=="string"){const t=Number(e);if(!Number.isNaN(t))return t}throw A()},"number");function F(e){return/^#[\da-f]{6}$/i.test(e)}function Qt(e){return/^#[\da-f]{3}$/i.test(e)}function dt(e){const t=e.replace(/\s/g,"").toLowerCase();if(F(t))return t;if(Qt(t)){let n="#";for(let i=0;i<3;i+=1)n+=t[1+i].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,i)=>{const r=parseInt(i,10).toString(16);return n+(r.length===1?"0":"")+r},"#")}const h=q(e=>{if(typeof e=="string"||typeof e=="number")return e.toString();throw A()},"string"),_t=q(e=>dt(h().parse(e)),"rgb");function Yt(e){return d({eventType:h(),eventData:t=>t}).parse(e)}function Vs(){["TelegramGameProxy_receiveEvent","TelegramGameProxy","Telegram"].forEach(e=>{delete window[e]})}function at(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}function Ls(){[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=window;e.forEach((s,n,i)=>{if(n===i.length-1){t[s]=at;return}s in t||(t[s]={}),t=t[s]})})}const $s={clipboard_text_received:d({req_id:h(),data:e=>e===null?e:h().optional().parse(e)}),custom_method_invoked:d({req_id:h(),result:e=>e,error:h().optional()}),invoice_closed:d({slug:h(),status:h()}),phone_requested:d({status:h()}),popup_closed:{parse(e){return d({button_id:t=>t==null?void 0:h().parse(t)}).parse(e??{})}},qr_text_received:d({data:h().optional()}),theme_changed:d({theme_params:e=>{const t=_t().optional();return Object.entries(lt(e)).reduce((s,[n,i])=>(s[n]=t.parse(i),s),{})}}),viewport_changed:d({height:S(),width:e=>e==null?window.innerWidth:S().parse(e),is_state_stable:R(),is_expanded:R()}),write_access_requested:d({status:h()})};function Hs(){const e=new I,t=new I;t.subscribe(n=>{e.emit("event",{name:n.event,payload:n.args[0]})}),Ls();const[,s]=ut(Vs,ot("resize",()=>{t.emit("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),ot("message",n=>{if(n.source!==window.parent)return;let i;try{i=Yt(n.data)}catch{return}const{eventType:r,eventData:o}=i,a=$s[r];try{const u=a?a.parse(o):o;t.emit(...u?[r,u]:[r])}catch(u){ht.error(`An error occurred processing the "${r}" event from the Telegram application. Please, file an issue here: https://github.com/Telegram-Mini-Apps/tma.js/issues/new/choose`,i,u)}}),()=>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[Us,Ws]=Nt(e=>{const[t,s]=Hs(),n=t.off.bind(t);return t.off=(i,r)=>{const{count:o}=t;n(i,r),o&&!t.count&&e()},[t,s]},([,e])=>e());function J(){return Us()[0]}function H(e,t){J().off(e,t)}function E(e,t,s){return J().on(e,t,s)}function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Zt(e,t){const s=e.split("."),n=t.split("."),i=Math.max(s.length,n.length);for(let r=0;r<i;r+=1){const o=parseInt(s[r]||"0",10),a=parseInt(n[r]||"0",10);if(o!==a)return o>a?1:-1}return 0}function b(e,t){return Zt(e,t)<=0}function x(e,t,s){if(typeof s=="string"){if(e==="web_app_open_link"){if(t==="try_instant_view")return b("6.4",s);if(t==="try_browser")return b("7.6",s)}if(e==="web_app_set_header_color"&&t==="color")return b("6.9",s);if(e==="web_app_close"&&t==="return_back")return b("7.6",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 Xt(e){return"external"in e&&U(e.external)&&"notify"in e.external&&typeof e.external.notify=="function"}function te(e){return"TelegramWebviewProxy"in e&&U(e.TelegramWebviewProxy)&&"postEvent"in e.TelegramWebviewProxy&&typeof e.TelegramWebviewProxy.postEvent=="function"}function Q(){try{return window.self!==window.top}catch{return!0}}let ee="https://web.telegram.org";function js(e){ee=e}function se(){return ee}function k(e,t,s){let n={},i;t===void 0&&s===void 0?n={}:t!==void 0&&s!==void 0?(n=s,i=t):t!==void 0&&("targetOrigin"in t?n=t:i=t);const{targetOrigin:r=se()}=n;if(Ds("Posting event:",i?{event:e,data:i}:{event:e}),Q()){window.parent.postMessage(JSON.stringify({eventType:e,eventData:i}),r);return}if(Xt(window)){window.external.notify(JSON.stringify({eventType:e,eventData:i}));return}if(te(window)){window.TelegramWebviewProxy.postEvent(e,JSON.stringify(i));return}throw v(Ut,"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 ne(e){return(t,s)=>{if(!x(t,e))throw v($t,`Method "${t}" is unsupported in Mini Apps version ${e}`);if(U(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&&!x(t,n,e))throw v(Ht,`Parameter "${n}" of "${t}" method is unsupported in Mini Apps version ${e}`)}return k(t,s)}}function wt(e){return({req_id:t})=>t===e}function ie(e){return v(jt,`Timeout reached: ${e}ms`)}function gt(e,t){return Promise.race([typeof e=="function"?e():e,new Promise((s,n)=>{setTimeout(()=>{n(ie(t))},t)})])}async function _(e){let t;const s=new Promise(a=>{t=a}),{event:n,capture:i,timeout:r}=e,[,o]=ut(...(Array.isArray(n)?n:[n]).map(a=>E(a,u=>(!i||i(u))&&t(u))));try{return(e.postEvent||k)(e.method,e.params),await(r?gt(s,r):s)}finally{o()}}async function T(e,t,s,n={}){const{result:i,error:r}=await _({...n,method:"web_app_invoke_custom_method",event:"custom_method_invoked",params:{method:e,params:t,req_id:s},capture:wt(s)});if(r)throw v(Wt,r);return i}function G(...e){return e.map(t=>{if(typeof t=="string")return t;if(U(t))return G(Object.entries(t).map(s=>s[1]&&s[0]));if(Array.isArray(t))return G(...t)}).filter(Boolean).join(" ")}function Gs(...e){return e.reduce((t,s)=>(U(s)&&Object.entries(s).forEach(([n,i])=>{const r=G(t[n],i);r.length&&(t[n]=r)}),t),{})}function ft(e){const t=dt(e);return Math.sqrt([.299,.587,.114].reduce((s,n,i)=>{const r=parseInt(t.slice(1+i*2,1+(i+1)*2),16);return s+r*r*n},0))<120}class Ks{constructor(t){c(this,"ee",new I),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((n,[i,r])=>this.state[i]===r||r===void 0?n:(this.state[i]=r,this.ee.emit(`change:${i}`,r),!0),!1)&&this.ee.emit("change",this.state)}get(t){return this.state[t]}}class mt{constructor(t){c(this,"state"),c(this,"get"),c(this,"set"),c(this,"clone"),this.state=new Ks(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 re(e,t){return s=>x(t[s],e)}class bt extends mt{constructor(t,s,n){super(t),c(this,"supports"),this.supports=re(s,n)}}class oe extends bt{constructor(t,s,n){super({isVisible:t},s,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"}),c(this,"on",(i,r)=>i==="click"?E("back_button_pressed",r):this.state.on(i,r)),c(this,"off",(i,r)=>i==="click"?H("back_button_pressed",r):this.state.off(i,r)),this.postEvent=n}set isVisible(t){this.set("isVisible",t),this.postEvent("web_app_setup_back_button",{is_visible:t})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const vt=q(e=>e instanceof Date?e:new Date(S().parse(e)*1e3),"Date");function Y(e,t){return new z(s=>{if(typeof s!="string"&&!(s instanceof URLSearchParams))throw A();const n=typeof s=="string"?new URLSearchParams(s):s;return Jt(e,i=>{const r=n.get(i);return r===null?void 0:r})},!1,t)}const zs=d({id:S(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat").optional(),Bt=d({addedToAttachmentMenu:{type:R().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:R().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:S(),isBot:{type:R().optional(),from:"is_bot"},isPremium:{type:R().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 ae(){return Y({authDate:{type:vt(),from:"auth_date"},canSendAfter:{type:S().optional(),from:"can_send_after"},chat:zs,chatInstance:{type:h().optional(),from:"chat_instance"},chatType:{type:h().optional(),from:"chat_type"},hash:h(),queryId:{type:h().optional(),from:"query_id"},receiver:Bt,startParam:{type:h().optional(),from:"start_param"},user:Bt},"InitData")}function Fs(e){return e.replace(/_[a-z]/g,t=>t[1].toUpperCase())}function Js(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}const ce=q(e=>{const t=_t().optional();return Object.entries(lt(e)).reduce((s,[n,i])=>(s[Fs(n)]=t.parse(i),s),{})},"ThemeParams");function Z(e){return Y({botInline:{type:R().optional(),from:"tgWebAppBotInline"},initData:{type:ae().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:R().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:ce(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}}).parse(e)}function he(e){return Z(e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&"))}function Qs(){return he(window.location.href)}function ue(){return performance.getEntriesByType("navigation")[0]}function Ys(){const e=ue();if(!e)throw new Error("Unable to get first navigation entry.");return he(e.name)}function pe(e){return`tma.js/${e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}`}function le(e,t){sessionStorage.setItem(pe(e),JSON.stringify(t))}function de(e){const t=sessionStorage.getItem(pe(e));try{return t?JSON.parse(t):void 0}catch{}}function Zs(){return Z(de("launchParams")||"")}function yt(e){return JSON.stringify(Object.fromEntries(Object.entries(e).map(([t,s])=>[Js(t),s])))}function _e(e){const{initDataRaw:t,themeParams:s,platform:n,version:i,showSettings:r,startParam:o,botInline:a}=e,u=new URLSearchParams;return u.set("tgWebAppPlatform",n),u.set("tgWebAppThemeParams",yt(s)),u.set("tgWebAppVersion",i),t&&u.set("tgWebAppData",t),o&&u.set("tgWebAppStartParam",o),typeof r=="boolean"&&u.set("tgWebAppShowSettings",r?"1":"0"),typeof a=="boolean"&&u.set("tgWebAppBotInline",a?"1":"0"),u.toString()}function we(e){le("launchParams",_e(e))}function K(){for(const e of[Qs,Ys,Zs])try{const t=e();return we(t),t}catch{}throw new Error("Unable to retrieve launch parameters from any known source.")}function Et(){const e=ue();return!!(e&&e.type==="reload")}function Xs(){let e=0;return()=>(e+=1).toString()}const[tn]=Nt(Xs);function w(e,t){return()=>{const s=K(),n={...s,postEvent:ne(s.version),createRequestId:tn()};if(typeof e=="function")return e(n);const[i,r,o]=ut(),a=t({...n,state:Et()?de(e):void 0,addCleanup:i}),u=p=>(o||i(p.on("change",C=>{le(e,C)})),p);return[a instanceof Promise?a.then(u):u(a),r]}}const ge=w("backButton",({postEvent:e,version:t,state:s={isVisible:!1}})=>new oe(s.isVisible,t,e));class W extends bt{constructor(){super(...arguments),c(this,"on",this.state.on.bind(this.state)),c(this,"off",this.state.off.bind(this.state))}}function fe(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 me extends W{constructor({postEvent:t,version:s,...n}){super(n,s,{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=t}get available(){return this.get("available")}get accessGranted(){return this.get("accessGranted")}get accessRequested(){return this.get("accessRequested")}async authenticate({reason:t,...s}){return this.authPromise||(this.authPromise=_({...s,method:"web_app_biometry_request_auth",event:"biometry_auth_requested",postEvent:this.postEvent,params:{reason:(t||"").trim()}}).then(({token:n})=>n).finally(()=>this.authPromise=void 0)),this.authPromise}get deviceId(){return this.get("deviceId")}openSettings(){this.postEvent("web_app_biometry_open_settings")}requestAccess({reason:t,...s}={}){return this.accessPromise||(this.accessPromise=_({...s,postEvent:this.postEvent,method:"web_app_biometry_request_access",event:"biometry_info_received",params:{reason:t||""}}).then(n=>{const i=fe(n);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:t,...s}={}){return["removed","updated"].includes((await _({...s,postEvent:this.postEvent,method:"web_app_biometry_update_token",event:"biometry_token_updated",params:{token:t||""}})).status)}}async function be(e){return fe(await _({...e||{},method:"web_app_biometry_get_info",event:"biometry_info_received"}))}const ve=w("biometryManager",async({postEvent:e,version:t,state:s})=>new me({...s||x("web_app_biometry_get_info",t)?s||await be({timeout:1e3}):{available:!1,accessGranted:!1,accessRequested:!1,tokenSaved:!1,deviceId:""},version:t,postEvent:e}));class Rt extends mt{constructor(){super(...arguments),c(this,"on",this.state.on.bind(this.state)),c(this,"off",this.state.off.bind(this.state))}}class ye extends Rt{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 Ee=w("closingBehavior",({postEvent:e,state:t={isConfirmationNeeded:!1}})=>new ye(t.isConfirmationNeeded,e));class Pt{constructor(t,s){c(this,"supports"),this.supports=re(t,s)}}function en(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 A()}class sn extends z{constructor(t,s,n){super(en,s,n),c(this,"itemParser"),this.itemParser=typeof t=="function"?t:t.parse.bind(t)}parse(t){const s=super.parse(t);return s===void 0?s:s.map(this.itemParser)}of(t){return this.itemParser=typeof t=="function"?t:t.parse.bind(t),this}}function Re(e){return new sn(t=>t,!1,e)}function Ot(e,t){return Object.fromEntries(e.map(s=>[s,t]))}class Pe extends Pt{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 T("deleteStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent})}async getKeys(t={}){return Re().of(h()).parse(await T("getStorageKeys",{},this.createRequestId(),{...t,postEvent:this.postEvent}))}async get(t,s={}){const n=Array.isArray(t)?t:[t];if(!n.length)return Ot(n,"");const i=await T("getStorageValues",{keys:n},this.createRequestId(),{...s,postEvent:this.postEvent}),r=d(Ot(n,h()),"CloudStorageData").parse(i);return Array.isArray(t)?r:r[t]}async set(t,s,n={}){await T("saveStorageValue",{key:t,value:s},this.createRequestId(),{...n,postEvent:this.postEvent})}}const Se=w(({createRequestId:e,postEvent:t,version:s})=>new Pe(s,e,t));class xe extends Pt{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 Ce=w(({version:e,postEvent:t})=>new xe(e,t));class Te{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 Ie=w(({initData:e})=>e?new Te(e):void 0);function nn(e){return ae().parse(e)}class ke extends W{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:i,pathname:r}=new URL(t,window.location.href);if(i!=="t.me")throw new Error(`Incorrect hostname: ${i}`);const o=r.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 _({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 Ae=w(({version:e,postEvent:t})=>new ke(!1,e,t));class qe extends mt{constructor({postEvent:t,...s}){super(s),c(this,"postEvent"),c(this,"on",(n,i)=>n==="click"?E("main_button_pressed",i):this.state.on(n,i)),c(this,"off",(n,i)=>n==="click"?H("main_button_pressed",i):this.state.off(n,i)),this.postEvent=t}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(t){this.setParams({isEnabled:t})}get isEnabled(){return this.get("isEnabled")}set isLoaderVisible(t){this.setParams({isLoaderVisible:t})}get isLoaderVisible(){return this.get("isLoaderVisible")}set isVisible(t){this.setParams({isVisible:t})}get isVisible(){return this.get("isVisible")}show(){return this.isVisible=!0,this}showLoader(){return this.isLoaderVisible=!0,this}setText(t){return this.setParams({text:t})}setTextColor(t){return this.setParams({textColor:t})}setBgColor(t){return this.setParams({bgColor:t})}setParams(t){return this.set(t),this.commit(),this}get text(){return this.get("text")}get textColor(){return this.get("textColor")}}const Be=w("mainButton",({postEvent:e,themeParams:t,state:s={isVisible:!1,isEnabled:!1,text:"",isLoaderVisible:!1,textColor:t.buttonTextColor||"#ffffff",bgColor:t.buttonColor||"#000000"}})=>new qe({...s,postEvent:e}));function rn(){return Y({contact:d({userId:{type:S(),from:"user_id"},phoneNumber:{type:h(),from:"phone_number"},firstName:{type:h(),from:"first_name"},lastName:{type:h().optional(),from:"last_name"}}),authDate:{type:vt(),from:"auth_date"},hash:h()},"RequestedContact")}function Oe(e,t){return s=>{const[n,i]=t[s];return x(n,i,e)}}function on(e){return new Promise(t=>{setTimeout(t,e)})}class De extends W{constructor({postEvent:t,createRequestId:s,version:n,botInline:i,...r}){super(r,n,{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=s,this.postEvent=t,this.botInline=i;const o=this.supports.bind(this);this.supports=a=>o(a)?a!=="switchInlineQuery"||i:!1,this.supportsParam=Oe(n,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact({timeout:t=1e4}={}){return rn().parse(await T("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:t}))}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 ft(this.bgColor)}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:t=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+t;let n=50;return gt(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await on(n),n+=50}throw ie(t)},t)}async requestPhoneAccess(t={}){return this.requestPhoneAccessPromise||(this.requestPhoneAccessPromise=_({...t,method:"web_app_request_phone",event:"phone_requested",postEvent:this.postEvent}).then(({status:s})=>s).finally(()=>this.requestPhoneAccessPromise=void 0)),this.requestPhoneAccessPromise}async requestWriteAccess(t={}){return this.requestWriteAccessPromise||(this.requestWriteAccessPromise=_({...t,method:"web_app_request_write_access",event:"write_access_requested",postEvent:this.postEvent}).then(({status:s})=>s).finally(()=>this.requestWriteAccessPromise=void 0)),this.requestWriteAccessPromise}sendData(t){const{size:s}=new Blob([t]);if(!s||s>4096)throw new Error(`Passed data has incorrect size: ${s}`);this.postEvent("web_app_data_send",{data:t})}setHeaderColor(t){this.postEvent("web_app_set_header_color",F(t)?{color:t}:{color_key:t}),this.set("headerColor",t)}setBgColor(t){this.postEvent("web_app_set_background_color",{color:t}),this.set("bgColor",t)}switchInlineQuery(t,s=[]){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:t,chat_types:s})}}const Me=w("miniApp",({themeParams:e,botInline:t=!1,state:s={bgColor:e.bgColor||"#ffffff",headerColor:e.headerBgColor||"#000000"},...n})=>new De({...n,...s,botInline:t}));function an(e){const t=e.message.trim(),s=(e.title||"").trim(),n=e.buttons||[];let i;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?i=n.map(r=>{const{id:o=""}=r;if(o.length>64)throw new Error(`Button ID has incorrect size: ${o}`);if(!r.type||r.type==="default"||r.type==="destructive"){const a=r.text.trim();if(!a.length||a.length>64){const u=r.type||"default";throw new Error(`Button text with type "${u}" has incorrect size: ${r.text.length}`)}return{...r,text:a,id:o}}return{...r,id:o}}):i=[{type:"close",id:""}],{title:s,message:t,buttons:i}}class Ne extends W{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 _({event:"popup_closed",method:"web_app_open_popup",postEvent:this.postEvent,params:an(t)});return s}finally{this.isOpened=!1}}}const Ve=w(({postEvent:e,version:t})=>new Ne(!1,t,e));class Le extends W{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("The scanner is already opened");const{text:s,capture:n}=(typeof t=="string"?{text:t}:t)||{};this.isOpened=!0;try{const i=(await _({method:"web_app_open_scan_qr_popup",event:["qr_text_received","scan_qr_popup_closed"],postEvent:this.postEvent,params:{text:s},capture(r){return r.event==="scan_qr_popup_closed"||!n||n(r.payload)}})||{}).data||null;return i&&this.close(),i}finally{this.isOpened=!1}}}const $e=w(({version:e,postEvent:t})=>new Le(!1,e,t));class He extends bt{constructor(t,s,n){super({isVisible:t},s,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"}),c(this,"on",(i,r)=>i==="click"?E("settings_button_pressed",r):this.state.on(i,r)),c(this,"off",(i,r)=>i==="click"?H("settings_button_pressed",r):this.state.off(i,r)),this.postEvent=n}set isVisible(t){this.set("isVisible",t),this.postEvent("web_app_setup_settings_button",{is_visible:t})}get isVisible(){return this.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}const Ue=w("settingsButton",({version:e,postEvent:t,state:s={isVisible:!1}})=>new He(s.isVisible,e,t));function St(e){return ce().parse(e)}class We extends Rt{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||ft(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")}get sectionSeparatorColor(){return this.get("sectionHeaderTextColor")}listen(){return E("theme_changed",t=>{this.set(St(t.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}const je=w("themeParams",({themeParams:e,state:t=e,addCleanup:s})=>{const n=new We(t);return s(n.listen()),n});function cn(e={}){return _({...e,method:"web_app_request_theme",event:"theme_changed"}).then(St)}class Ge extends Pt{constructor(t,s,n){super(t,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),c(this,"supportsParam"),this.version=t,this.createRequestId=s,this.postEvent=n,this.supportsParam=Oe(t,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(t,s){const n=new URL(t,window.location.href).toString();if(!x("web_app_open_link",this.version)){window.open(n,"_blank");return}this.postEvent("web_app_open_link",{url:n,...typeof s=="boolean"?{try_instant_view:s}:{}})}openTelegramLink(t){const{hostname:s,pathname:n,search:i}=new URL(t,"https://t.me");if(s!=="t.me")throw new Error(`URL has not allowed hostname: ${s}. Only "t.me" is allowed`);if(!x("web_app_open_tg_link",this.version)){window.location.href=t;return}this.postEvent("web_app_open_tg_link",{path_full:n+i})}async readTextFromClipboard(){const t=this.createRequestId(),{data:s=null}=await _({method:"web_app_read_text_from_clipboard",event:"clipboard_text_received",postEvent:this.postEvent,params:{req_id:t},capture:wt(t)});return s}shareURL(t,s){this.openTelegramLink("https://t.me/share/url?"+new URLSearchParams({url:t,text:s||""}).toString())}}const Ke=w(({version:e,postEvent:t,createRequestId:s})=>new Ge(e,s,t));async function xt(e={}){const{is_expanded:t,is_state_stable:s,...n}=await _({...e,method:"web_app_request_viewport",event:"viewport_changed"});return{...n,isExpanded:t,isStateStable:s}}function D(e){return e<0?0:e}class ze extends Rt{constructor({postEvent:t,stableHeight:s,height:n,width:i,isExpanded:r}){super({height:D(n),isExpanded:r,stableHeight:D(s),width:D(i)}),c(this,"postEvent"),this.postEvent=t}async sync(t){const{isStateStable:s,...n}=await xt(t);this.set({...n,stableHeight:s?n.height:this.get("stableHeight")})}get height(){return this.get("height")}get stableHeight(){return this.get("stableHeight")}listen(){return E("viewport_changed",t=>{const{height:s,width:n,is_expanded:i,is_state_stable:r}=t,o=D(s);this.set({height:o,isExpanded:i,width:D(n),...r?{stableHeight:o}:{}})})}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 Fe=w("viewport",async({state:e,platform:t,postEvent:s,addCleanup:n})=>{let i=!1,r=0,o=0,a=0;if(e)i=e.isExpanded,r=e.height,o=e.width,a=e.stableHeight;else if(["macos","tdesktop","unigram","webk","weba","web"].includes(t))i=!0,r=window.innerHeight,o=window.innerWidth,a=window.innerHeight;else{const p=await xt({timeout:1e3,postEvent:s});i=p.isExpanded,r=p.height,o=p.width,a=p.isStateStable?r:0}const u=new ze({postEvent:s,height:r,width:o,stableHeight:a,isExpanded:i});return n(u.listen()),u});function P(e,t){document.documentElement.style.setProperty(e,t)}function hn(e,t,s){s||(s=a=>`--tg-${a}-color`);const n=s("header"),i=s("bg"),r=()=>{const{headerColor:a}=e;if(F(a))P(n,a);else{const{bgColor:u,secondaryBgColor:p}=t;a==="bg_color"&&u?P(n,u):a==="secondary_bg_color"&&p&&P(n,p)}P(i,e.bgColor)},o=[t.on("change",r),e.on("change",r)];return r(),()=>o.forEach(a=>a())}function un(e,t){t||(t=n=>`--tg-theme-${n.replace(/[A-Z]/g,i=>`-${i.toLowerCase()}`)}`);const s=()=>{Object.entries(e.getState()).forEach(([n,i])=>{i&&P(t(n),i)})};return s(),e.on("change",s)}function pn(e,t){t||(t=p=>`--tg-viewport-${p}`);const[s,n,i]=["height","width","stable-height"].map(p=>t(p)),r=()=>P(s,`${e.height}px`),o=()=>P(n,`${e.width}px`),a=()=>P(i,`${e.stableHeight}px`),u=[e.on("change:height",r),e.on("change:width",o),e.on("change:stableHeight",a)];return r(),o(),a(),()=>u.forEach(p=>p())}function Je(e=!0){const t=[E("reload_iframe",()=>{k("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(E("set_custom_style",i=>{n.innerHTML=i}),()=>document.head.removeChild(n))}return k("iframe_ready",{reload_supported:!0}),s}function Qe(){return typeof window>"u"}async function ln(){if(te(window))return!0;try{return await _({method:"web_app_request_theme",event:"theme_changed",timeout:100}),!0}catch{return!1}}function dn(e){const t=typeof e=="string"?Z(e):e;we(t);function s(i){if(typeof i=="string")try{const{eventType:r}=Yt(i);r==="web_app_request_theme"&&at("theme_changed",{theme_params:JSON.parse(yt(t.themeParams))}),r==="web_app_request_viewport"&&at("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}catch{}}if(Q()){const i=window.parent.postMessage.bind(window.parent);window.parent.postMessage=r=>{s(r),i(r)};return}if(Xt(window)){const i=window.external.notify.bind(window.external);window.external.notify=r=>{s(r),i(r)};return}const n=window.TelegramWebviewProxy;window.TelegramWebviewProxy={...n||{},postEvent(...i){s(JSON.stringify({eventType:i[0],eventData:i[1]})),n&&n.postEvent(...i)}}}function Ye(e){return e instanceof $}function _n(e,t){return Ye(e)&&e.type===t}function tt(e,t){let s,n,i;return typeof e=="string"?s=e:(s=e.pathname===void 0?t:e.pathname,n=e.params,i=e.id),Object.freeze({id:i||(Math.random()*2**14|0).toString(16),pathname:s,params:n})}class Ze{constructor(t,s,n=k){if(c(this,"history"),c(this,"ee",new I),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)),this._index=s,this.postEvent=n,t.length===0)throw v(Kt,"History should not be empty.");if(s<0||s>=t.length)throw v(zt,"Index should not be zero and higher or equal than history size.");this.history=t.map(i=>tt(i,""))}attach(){this.attached||(this.attached=!0,this.sync(),E("back_button_pressed",this.back))}get current(){return this.history[this.index]}detach(){this.attached=!1,H("back_button_pressed",this.back)}forward(){this.go(1)}go(t,s){const n=this.index+t,i=Math.min(Math.max(0,n),this.history.length-1);(n===i||s)&&this.replaceAndMove(i,this.history[i])}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,tt(t,this.current.pathname))}replace(t){this.replaceAndMove(this.index,tt(t,this.current.pathname))}replaceAndMove(t,s){const n=t-this.index;if(!n&&this.current===s)return;const i=this.current;if(this.index!==t){const r=this._index;this._index=t,this.attached&&r>0!=t>0&&this.sync()}this.history[t]=s,this.ee.emit("change",{navigator:this,from:i,to:this.current,delta:n})}sync(){this.postEvent("web_app_setup_back_button",{is_visible:!!this.index})}}function et({params:e,...t}){return{...e||{hash:"",search:""},...t}}function N(e,t){return e.startsWith(t)?e:`${t}${e}`}function V(e){return new URL(typeof e=="string"?e:`${e.pathname||""}${N(e.search||"","?")}${N(e.hash||"","#")}`,"http://a")}function L(e){const t=typeof e=="string"?e.startsWith("/"):!!(e.pathname&&e.pathname.startsWith("/")),s=V(e);return`${t?s.pathname:s.pathname.slice(1)}${s.search}${s.hash}`}function st(e,t,s){let n,i;typeof e=="string"?n=e:(n=L(e),s=e.state,i=e.id);const{pathname:r,search:o,hash:a}=new URL(n,`http://a${N(t,"/")}`);return{id:i,pathname:r,params:{hash:a,search:o,state:s}}}async function M(e){return e===0?!0:Promise.race([new Promise(t=>{const s=ot("popstate",()=>{s(),t(!0)});window.history.go(e)}),new Promise(t=>{setTimeout(t,50,!1)})])}async function wn(){if(window.history.length<=1||(window.history.pushState(null,""),await M(1-window.history.length)))return;let e=await M(-1);for(;e;)e=await M(-1)}function Ct(e){return V(e).pathname}const Dt=0,nt=1,it=2;class Tt{constructor(t,s,{postEvent:n,hashMode:i="classic",base:r}={}){c(this,"navigator"),c(this,"ee",new I),c(this,"hashMode"),c(this,"base"),c(this,"attached",!1),c(this,"onPopState",({state:o})=>{if(o===null)return this.push(this.parsePath(window.location.href));o===Dt?window.history.forward():o===nt&&this.back(),o===it&&this.forward()}),c(this,"onNavigatorChange",async({to:o,from:a,delta:u})=>{this.attached&&await this.syncHistory(),this.ee.emit("change",{delta:u,from:et(a),to:et(o),navigator:this})}),c(this,"on",this.ee.on.bind(this.ee)),c(this,"off",this.ee.off.bind(this.ee)),this.navigator=new Ze(t.map(o=>st(o,"/")),s,n),this.navigator.on("change",o=>{this.onNavigatorChange(o)}),this.hashMode=i,this.base=Ct(r||"")}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(et)}get path(){return L(this)}get pathname(){return this.navigator.current.pathname}parsePath(t){let s=V(t);return this.hashMode&&(s=V(s.hash.slice(1))),{pathname:s.pathname,search:s.search,hash:s.hash}}push(t,s){const n=st(t,this.path),{state:i=s}=n.params;this.navigator.push({...n,params:{...n.params,state:i}})}replace(t,s){const n=st(t,this.path),{state:i=s}=n.params;this.navigator.replace({...n,params:{...n.params,state:i}})}renderPath(t){const s=(this.base.length===1?"":this.base)+N(L(t),"/");return this.hashMode?N(s.slice(1),this.hashMode==="classic"?"#":"#/"):s}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const{state:t}=this,s=this.renderPath(this);await wn(),this.hasPrev&&this.hasNext?(window.history.replaceState(nt,""),window.history.pushState(t,"",s),window.history.pushState(it,""),await M(-1)):this.hasPrev?(window.history.replaceState(nt,""),window.history.pushState(t,"",s)):this.hasNext?(window.history.replaceState(t,s),window.history.pushState(it,""),await M(-1)):(window.history.replaceState(Dt,""),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 Xe(e){e||(e={});const{href:t,hash:s}=window.location;let n=L(e.hashMode===null?t:s.includes("?")?s.slice(1):`?${s.slice(1)}`);const i=e.base?Ct(e.base):void 0;if(i){if(!n.startsWith(i))throw v(Ft,`Path "${n}" expected to be starting with "${i}"`);n=n.slice(i.length)}return new Tt([n],0,e)}function gn(e){const t=e.match(/#(.+)/);return t?t[1]:null}function fn(e,t){if(Et()){const s=sessionStorage.getItem(e);if(s)try{const{index:n,history:i}=JSON.parse(s);return new Tt(i,n,t)}catch(n){console.error("Unable to restore hash navigator state.",n)}}return Xe(t)}function mn(e,t){const s=fn(e,t),n=()=>sessionStorage.setItem(e,JSON.stringify({index:s.index,history:s.history}));return s.on("change",n),n(),s}function g(e,t){function s(n){return function(r,o,a){return u=>{const p={...u,[r]:n(o)};return Mt.jsx(a,{...p})}}}return[s(e),s(t)]}const ts=l.createContext(void 0);function es(){const e=l.useContext(ts);if(!e)throw new Error("useSDK was used outside the SDKProvider.");return e}function f(e){function t(n){const i=es(),[r,o]=l.useState(n?void 0:()=>{if(Qe())throw new Error("Using hooks on the server side, you must explicitly specify ssr = true option");return i.use(e)});return l.useEffect(()=>{o(i.use(e))},[i]),r}function s(n){const i=t(n);if(i){if("error"in i)throw i.error;return i.result}}return[t,s]}const[ss,ns]=f(ge),[bn,vn]=g(ss,ns),[is,rs]=f(ve),[yn,En]=g(is,rs),[os,as]=f(Ee),[Rn,Pn]=g(os,as),[cs,hs]=f(Se),[Sn,xn]=g(cs,hs),[us,ps]=f(Ce),[Cn,Tn]=g(us,ps),[ls,ds]=f(Ie),[In,kn]=g(ls,ds),[_s,ws]=f(Ae),[An,qn]=g(_s,ws),[gs,fs]=f(Be),[Bn,On]=g(gs,fs),[ms,bs]=f(Me),[Dn,Mn]=g(ms,bs),[vs,ys]=f(Ve),[Nn,Vn]=g(vs,ys),[Es,Rs]=f($e),[Ln,$n]=g(Es,Rs),[Ps,Ss]=f(Ue),[Hn,Un]=g(Ps,Ss),[xs,Cs]=f(je),[Wn,jn]=g(xs,Cs);function Gn(e){const[t,s]=l.useState(()=>e?void 0:K());return l.useEffect(()=>{e&&s(K())},[]),t}const[Ts,Is]=f(Ke),[Kn,zn]=g(Ts,Is),[ks,As]=f(Fe),[Fn,Jn]=g(ks,As);function Qn({children:e,acceptCustomStyles:t,debug:s}){const n=l.useRef(!0),[i,r]=l.useState(new Map),o=l.useRef(i),a=l.useCallback(p=>{n.current&&r(C=>(p&&p(C),new Map(C)))},[]),u=l.useMemo(()=>({use(p,...C){const It=i.get(p);if(It)return It;let y,X;try{y=p(...C)}catch(m){X=m}function j(m){return i.set(p,m),m}if(X)return j({error:X});let B;if(Array.isArray(y)&&(B=y[1],y=y[0]),!y)return j({result:y,cleanup:B});function kt(m){if("on"in m){const O=m.on("change",()=>a()),At=B;B=()=>{At&&At(),O()}}return{result:m,cleanup:B}}return y instanceof Promise?(y.then(m=>a(O=>O.set(p,kt(m))),m=>a(O=>O.set(p,{error:m}))),j({})):j(kt(y))}}),[i]);return l.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[]),l.useEffect(()=>{if(Q())return Je(t)},[t]),l.useEffect(()=>{Lt(s||!1)},[s]),l.useEffect(()=>{o.current=i},[i]),l.useEffect(()=>()=>{o.current.forEach(p=>{"cleanup"in p&&p.cleanup&&p.cleanup()})},[]),Mt.jsx(ts.Provider,{value:u,children:e})}exports.BackButton=oe;exports.BasicNavigator=Ze;exports.BiometryManager=me;exports.BrowserNavigator=Tt;exports.ClosingBehavior=ye;exports.CloudStorage=Pe;exports.ERR_INVALID_PATH_BASE=Ft;exports.ERR_INVOKE_CUSTOM_METHOD_RESPONSE=Wt;exports.ERR_METHOD_PARAMETER_UNSUPPORTED=Ht;exports.ERR_METHOD_UNSUPPORTED=$t;exports.ERR_NAVIGATION_HISTORY_EMPTY=Kt;exports.ERR_NAVIGATION_INDEX_INVALID=zt;exports.ERR_NAVIGATION_ITEM_INVALID=Ms;exports.ERR_PARSE=pt;exports.ERR_SSR_INIT=Ns;exports.ERR_TIMED_OUT=jt;exports.ERR_UNEXPECTED_TYPE=Gt;exports.ERR_UNKNOWN_ENV=Ut;exports.EventEmitter=I;exports.HapticFeedback=xe;exports.InitData=Te;exports.Invoice=ke;exports.MainButton=qe;exports.MiniApp=De;exports.Popup=Ne;exports.QRScanner=Le;exports.SDKError=$;exports.SDKProvider=Qn;exports.SettingsButton=He;exports.ThemeParams=We;exports.Utils=Ge;exports.Viewport=ze;exports.array=Re;exports.bindMiniAppCSSVars=hn;exports.bindThemeParamsCSSVars=un;exports.bindViewportCSSVars=pn;exports.boolean=R;exports.captureSameReq=wt;exports.classNames=G;exports.compareVersions=Zt;exports.createBrowserNavigatorFromLocation=Xe;exports.createPostEvent=ne;exports.createSafeURL=V;exports.date=vt;exports.getHash=gn;exports.getPathname=Ct;exports.initBackButton=ge;exports.initBiometryManager=ve;exports.initClosingBehavior=Ee;exports.initCloudStorage=Se;exports.initHapticFeedback=Ce;exports.initInitData=Ie;exports.initInvoice=Ae;exports.initMainButton=Be;exports.initMiniApp=Me;exports.initNavigator=mn;exports.initPopup=Ve;exports.initQRScanner=$e;exports.initSettingsButton=Ue;exports.initThemeParams=je;exports.initUtils=Ke;exports.initViewport=Fe;exports.initWeb=Je;exports.invokeCustomMethod=T;exports.isColorDark=ft;exports.isIframe=Q;exports.isPageReload=Et;exports.isRGB=F;exports.isRGBShort=Qt;exports.isSDKError=Ye;exports.isSDKErrorOfType=_n;exports.isSSR=Qe;exports.isTMA=ln;exports.json=d;exports.mergeClassNames=Gs;exports.mockTelegramEnv=dn;exports.number=S;exports.off=H;exports.on=E;exports.parseInitData=nn;exports.parseLaunchParams=Z;exports.parseThemeParams=St;exports.postEvent=k;exports.request=_;exports.requestBiometryInfo=be;exports.requestThemeParams=cn;exports.requestViewport=xt;exports.retrieveLaunchParams=K;exports.rgb=_t;exports.searchParams=Y;exports.serializeLaunchParams=_e;exports.serializeThemeParams=yt;exports.setCSSVar=P;exports.setDebug=Lt;exports.setTargetOrigin=js;exports.string=h;exports.subscribe=Vt;exports.supports=x;exports.targetOrigin=se;exports.toRGB=dt;exports.unsubscribe=ct;exports.urlToPath=L;exports.useBackButton=ns;exports.useBackButtonRaw=ss;exports.useBiometryManager=rs;exports.useBiometryManagerRaw=is;exports.useClosingBehavior=as;exports.useClosingBehaviorRaw=os;exports.useCloudStorage=hs;exports.useCloudStorageRaw=cs;exports.useHapticFeedback=ps;exports.useHapticFeedbackRaw=us;exports.useInitData=ds;exports.useInitDataRaw=ls;exports.useInvoice=ws;exports.useInvoiceRaw=_s;exports.useLaunchParams=Gn;exports.useMainButton=fs;exports.useMainButtonRaw=gs;exports.useMiniApp=bs;exports.useMiniAppRaw=ms;exports.usePopup=ys;exports.usePopupRaw=vs;exports.useQRScanner=Rs;exports.useQRScannerRaw=Es;exports.useSDK=es;exports.useSettingsButton=Ss;exports.useSettingsButtonRaw=Ps;exports.useThemeParams=Cs;exports.useThemeParamsRaw=xs;exports.useUtils=Is;exports.useUtilsRaw=Ts;exports.useViewport=As;exports.useViewportRaw=ks;exports.withBackButton=vn;exports.withBackButtonRaw=bn;exports.withBiometryManager=En;exports.withBiometryManagerRaw=yn;exports.withClosingBehavior=Pn;exports.withClosingBehaviorRaw=Rn;exports.withCloudStorage=xn;exports.withCloudStorageRaw=Sn;exports.withHapticFeedback=Tn;exports.withHapticFeedbackRaw=Cn;exports.withInitData=kn;exports.withInitDataRaw=In;exports.withInvoice=qn;exports.withInvoiceRaw=An;exports.withMainButton=On;exports.withMainButtonRaw=Bn;exports.withMiniApp=Mn;exports.withMiniAppRaw=Dn;exports.withPopup=Vn;exports.withPopupRaw=Nn;exports.withQRScanner=$n;exports.withQRScannerRaw=Ln;exports.withSettingsButton=Un;exports.withSettingsButtonRaw=Hn;exports.withThemeParams=jn;exports.withThemeParamsRaw=Wn;exports.withTimeout=gt;exports.withUtils=zn;exports.withUtilsRaw=Kn;exports.withViewport=Jn;exports.withViewportRaw=Fn;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|