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