@tma.js/sdk 1.4.7 → 1.4.9

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.
Files changed (149) hide show
  1. package/dist/dts/bridge/errors/MethodUnsupportedError.d.ts +2 -2
  2. package/dist/dts/bridge/errors/ParameterUnsupportedError.d.ts +2 -2
  3. package/dist/dts/bridge/events/events.d.ts +13 -3
  4. package/dist/dts/bridge/events/on.d.ts +5 -3
  5. package/dist/dts/bridge/events/parsers/clipboardTextReceived.d.ts +2 -2
  6. package/dist/dts/bridge/events/parsers/customMethodInvoked.d.ts +2 -2
  7. package/dist/dts/bridge/events/parsers/invoiceClosed.d.ts +1 -1
  8. package/dist/dts/bridge/events/parsers/phoneRequested.d.ts +1 -1
  9. package/dist/dts/bridge/events/parsers/popupClosed.d.ts +1 -1
  10. package/dist/dts/bridge/events/parsers/qrTextReceived.d.ts +1 -1
  11. package/dist/dts/bridge/events/parsers/theme-changed.d.ts +2 -2
  12. package/dist/dts/bridge/events/parsers/viewportChanged.d.ts +1 -1
  13. package/dist/dts/bridge/events/parsers/writeAccessRequested.d.ts +1 -1
  14. package/dist/dts/bridge/events/singletonEmitter.d.ts +1 -1
  15. package/dist/dts/bridge/invokeCustomMethod.d.ts +2 -2
  16. package/dist/dts/bridge/methods/createPostEvent.d.ts +1 -1
  17. package/dist/dts/bridge/methods/custom-methods.d.ts +1 -1
  18. package/dist/dts/bridge/methods/methods.d.ts +5 -2
  19. package/dist/dts/bridge/request.d.ts +5 -3
  20. package/dist/dts/classnames/mergeClassNames.d.ts +2 -18
  21. package/dist/dts/{back-button → components/back-button}/BackButton.d.ts +4 -4
  22. package/dist/dts/{back-button → components/back-button}/types.d.ts +2 -2
  23. package/dist/dts/{closing-behavior → components/closing-behavior}/ClosingBehavior.d.ts +6 -3
  24. package/dist/dts/{closing-behavior → components/closing-behavior}/types.d.ts +1 -1
  25. package/dist/dts/{cloud-storage → components/cloud-storage}/CloudStorage.d.ts +5 -4
  26. package/dist/dts/{haptic-feedback → components/haptic-feedback}/HapticFeedback.d.ts +4 -3
  27. package/dist/dts/components/init-data/chatParser.d.ts +6 -0
  28. package/dist/dts/components/init-data/initDataParser.d.ts +6 -0
  29. package/dist/dts/components/init-data/userParser.d.ts +6 -0
  30. package/dist/dts/{invoice → components/invoice}/Invoice.d.ts +9 -5
  31. package/dist/dts/{invoice → components/invoice}/types.d.ts +1 -1
  32. package/dist/dts/{main-button → components/main-button}/MainButton.d.ts +2 -2
  33. package/dist/dts/{main-button → components/main-button}/types.d.ts +3 -3
  34. package/dist/dts/{mini-app → components/mini-app}/MiniApp.d.ts +11 -6
  35. package/dist/dts/components/mini-app/contactParser.d.ts +2 -0
  36. package/dist/dts/{mini-app → components/mini-app}/types.d.ts +6 -5
  37. package/dist/dts/{popup → components/popup}/Popup.d.ts +8 -5
  38. package/dist/dts/{popup → components/popup}/preparePopupParams.d.ts +1 -1
  39. package/dist/dts/{popup → components/popup}/types.d.ts +1 -1
  40. package/dist/dts/{qr-scanner → components/qr-scanner}/QRScanner.d.ts +8 -5
  41. package/dist/dts/{qr-scanner → components/qr-scanner}/types.d.ts +1 -1
  42. package/dist/dts/{settings-button → components/settings-button}/SettingsButton.d.ts +4 -4
  43. package/dist/dts/{settings-button → components/settings-button}/types.d.ts +2 -2
  44. package/dist/dts/{theme-params → components/theme-params}/ThemeParams.d.ts +8 -4
  45. package/dist/dts/{theme-params → components/theme-params}/requestThemeParams.d.ts +1 -1
  46. package/dist/dts/components/theme-params/themeParamsParser.d.ts +3 -0
  47. package/dist/dts/{theme-params → components/theme-params}/types.d.ts +2 -2
  48. package/dist/dts/{utils → components/utils}/Utils.d.ts +4 -4
  49. package/dist/dts/{viewport → components/viewport}/Viewport.d.ts +8 -4
  50. package/dist/dts/{viewport → components/viewport}/isStableViewportPlatform.d.ts +1 -1
  51. package/dist/dts/{viewport → components/viewport}/requestViewport.d.ts +1 -1
  52. package/dist/dts/{viewport → components/viewport}/types.d.ts +2 -2
  53. package/dist/dts/css/bindMiniAppCSSVars.d.ts +2 -2
  54. package/dist/dts/css/bindThemeCSSVars.d.ts +1 -1
  55. package/dist/dts/css/bindViewportCSSVars.d.ts +1 -1
  56. package/dist/dts/event-emitter/types.d.ts +1 -1
  57. package/dist/dts/globals.d.ts +1 -1
  58. package/dist/dts/index.d.ts +142 -27
  59. package/dist/dts/init/creators/createBackButton.d.ts +2 -2
  60. package/dist/dts/init/creators/createClosingBehavior.d.ts +2 -2
  61. package/dist/dts/init/creators/createMainButton.d.ts +3 -3
  62. package/dist/dts/init/creators/createMiniApp.d.ts +5 -5
  63. package/dist/dts/init/creators/createRequestIdGenerator.d.ts +1 -1
  64. package/dist/dts/init/creators/createSettingsButton.d.ts +2 -2
  65. package/dist/dts/init/creators/createThemeParams.d.ts +2 -1
  66. package/dist/dts/init/creators/createViewport.d.ts +3 -3
  67. package/dist/dts/init/css/processCSSVarsOption.d.ts +3 -3
  68. package/dist/dts/init/types.d.ts +16 -16
  69. package/dist/dts/launch-params/launchParamsParser.d.ts +2 -1
  70. package/dist/dts/launch-params/types.d.ts +3 -3
  71. package/dist/dts/navigation/HashNavigator/HashNavigator.d.ts +6 -3
  72. package/dist/dts/navigation/HashNavigator/types.d.ts +1 -2
  73. package/dist/dts/navigation/Navigator/Navigator.d.ts +1 -1
  74. package/dist/dts/parsing/ValueParser.d.ts +1 -1
  75. package/dist/dts/parsing/parsers/array.d.ts +2 -2
  76. package/dist/dts/parsing/parsers/boolean.d.ts +2 -1
  77. package/dist/dts/parsing/parsers/date.d.ts +2 -1
  78. package/dist/dts/parsing/parsers/number.d.ts +2 -1
  79. package/dist/dts/parsing/parsers/rgb.d.ts +3 -1
  80. package/dist/dts/parsing/parsers/string.d.ts +2 -1
  81. package/dist/dts/state/State.d.ts +2 -2
  82. package/dist/dts/state/types.d.ts +1 -1
  83. package/dist/dts/storage.d.ts +2 -2
  84. package/dist/dts/supports/createSupportsFunc.d.ts +2 -2
  85. package/dist/dts/supports/createSupportsParamFunc.d.ts +2 -2
  86. package/dist/dts/supports/supports.d.ts +2 -2
  87. package/dist/dts/supports/types.d.ts +3 -0
  88. package/dist/dts/types/logical.d.ts +16 -0
  89. package/dist/dts/types/methods.d.ts +1 -1
  90. package/dist/dts/types/unions.d.ts +20 -0
  91. package/dist/dts/types/utils.d.ts +0 -28
  92. package/dist/dts/version/compareVersions.d.ts +2 -1
  93. package/dist/dts/version/types.d.ts +1 -0
  94. package/dist/index.cjs +1 -1
  95. package/dist/index.iife.js +1 -1
  96. package/dist/index.mjs +1527 -1525
  97. package/package.json +1 -1
  98. package/dist/dts/back-button/index.d.ts +0 -2
  99. package/dist/dts/bridge/env/index.d.ts +0 -2
  100. package/dist/dts/bridge/errors/index.d.ts +0 -2
  101. package/dist/dts/bridge/events/index.d.ts +0 -9
  102. package/dist/dts/bridge/events/parsers/index.d.ts +0 -9
  103. package/dist/dts/bridge/index.d.ts +0 -7
  104. package/dist/dts/bridge/methods/index.d.ts +0 -6
  105. package/dist/dts/classnames/index.d.ts +0 -2
  106. package/dist/dts/closing-behavior/index.d.ts +0 -2
  107. package/dist/dts/cloud-storage/index.d.ts +0 -1
  108. package/dist/dts/colors/index.d.ts +0 -5
  109. package/dist/dts/css/index.d.ts +0 -4
  110. package/dist/dts/event-emitter/index.d.ts +0 -2
  111. package/dist/dts/haptic-feedback/index.d.ts +0 -1
  112. package/dist/dts/init/creators/index.d.ts +0 -8
  113. package/dist/dts/init/css/index.d.ts +0 -1
  114. package/dist/dts/init/index.d.ts +0 -2
  115. package/dist/dts/init-data/chatParser.d.ts +0 -5
  116. package/dist/dts/init-data/index.d.ts +0 -6
  117. package/dist/dts/init-data/initDataParser.d.ts +0 -5
  118. package/dist/dts/init-data/userParser.d.ts +0 -5
  119. package/dist/dts/invoice/index.d.ts +0 -2
  120. package/dist/dts/launch-params/index.d.ts +0 -10
  121. package/dist/dts/logger/index.d.ts +0 -1
  122. package/dist/dts/main-button/index.d.ts +0 -2
  123. package/dist/dts/mini-app/contactParser.d.ts +0 -2
  124. package/dist/dts/mini-app/index.d.ts +0 -2
  125. package/dist/dts/misc/index.d.ts +0 -5
  126. package/dist/dts/navigation/HashNavigator/index.d.ts +0 -2
  127. package/dist/dts/navigation/Navigator/index.d.ts +0 -2
  128. package/dist/dts/navigation/index.d.ts +0 -4
  129. package/dist/dts/parsing/index.d.ts +0 -10
  130. package/dist/dts/parsing/parsers/index.d.ts +0 -8
  131. package/dist/dts/popup/index.d.ts +0 -2
  132. package/dist/dts/qr-scanner/index.d.ts +0 -2
  133. package/dist/dts/settings-button/index.d.ts +0 -2
  134. package/dist/dts/state/index.d.ts +0 -2
  135. package/dist/dts/supports/index.d.ts +0 -4
  136. package/dist/dts/theme-params/index.d.ts +0 -6
  137. package/dist/dts/theme-params/themeParamsParser.d.ts +0 -2
  138. package/dist/dts/timeout/index.d.ts +0 -4
  139. package/dist/dts/types/index.d.ts +0 -4
  140. package/dist/dts/utils/index.d.ts +0 -1
  141. package/dist/dts/version/index.d.ts +0 -2
  142. package/dist/dts/viewport/index.d.ts +0 -4
  143. /package/dist/dts/{init-data → components/init-data}/InitData.d.ts +0 -0
  144. /package/dist/dts/{init-data → components/init-data}/parseInitData.d.ts +0 -0
  145. /package/dist/dts/{init-data → components/init-data}/types.d.ts +0 -0
  146. /package/dist/dts/{theme-params → components/theme-params}/keys.d.ts +0 -0
  147. /package/dist/dts/{theme-params → components/theme-params}/parseThemeParams.d.ts +0 -0
  148. /package/dist/dts/{theme-params → components/theme-params}/serializeThemeParams.d.ts +0 -0
  149. /package/dist/dts/{viewport → components/viewport}/utils.d.ts +0 -0
@@ -1 +1,4 @@
1
+ /**
2
+ * Function which returns true in case, specified method is supported.
3
+ */
1
4
  export type SupportsFunc<M extends string> = (method: M) => boolean;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Represents classic "if" condition.
3
+ */
4
+ export type If<Cond extends boolean, True, False> = Cond extends true ? True : False;
5
+ /**
6
+ * Represents classic "not" logical operation.
7
+ */
8
+ export type Not<Cond extends boolean> = If<Cond, false, true>;
9
+ /**
10
+ * Represents classic "and" logical operation.
11
+ */
12
+ export type And<A extends boolean, B extends boolean> = A extends true ? B extends true ? true : false : false;
13
+ /**
14
+ * Represents classic "or" logical operation.
15
+ */
16
+ export type Or<A extends boolean, B extends boolean> = A extends true ? true : (B extends true ? true : false);
@@ -1,4 +1,4 @@
1
- import type { PostEvent } from '../bridge/index.js';
1
+ import type { PostEvent } from '../bridge/methods/postEvent.js';
2
2
  export interface ExecuteWithTimeout {
3
3
  /**
4
4
  * Timeout to execute method.
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Returns union keys removing those, which values are not strings.
3
+ */
4
+ export type UnionStringKeys<U> = U extends U ? {
5
+ [K in keyof U]-?: U[K] extends string | undefined ? K : never;
6
+ }[keyof U] : never;
7
+ /**
8
+ * Returns union required keys.
9
+ */
10
+ export type UnionRequiredKeys<U> = U extends U ? {
11
+ [K in UnionStringKeys<U>]: ({} extends Pick<U, K> ? never : K);
12
+ }[UnionStringKeys<U>] : never;
13
+ /**
14
+ * Returns union optional keys.
15
+ */
16
+ export type UnionOptionalKeys<U> = Exclude<UnionStringKeys<U>, UnionRequiredKeys<U>>;
17
+ /**
18
+ * Returns union object keys.
19
+ */
20
+ export type UnionKeys<T> = T extends T ? keyof T : never;
@@ -2,34 +2,6 @@
2
2
  * Returns true in case, T is never.
3
3
  */
4
4
  export type IsNever<T> = [T] extends [never] ? true : false;
5
- /**
6
- * Represents classic "if" condition.
7
- */
8
- export type If<Cond extends boolean, True, False> = Cond extends true ? True : False;
9
- /**
10
- * Represents classic "not" bitwise operation.
11
- */
12
- export type Not<Cond extends boolean> = If<Cond, false, true>;
13
- /**
14
- * Represents classic "and" bitwise operation.
15
- */
16
- export type And<A extends boolean, B extends boolean> = A extends true ? B extends true ? true : false : false;
17
- /**
18
- * Represents classic "or" bitwise operation.
19
- */
20
- export type Or<A extends boolean, B extends boolean> = A extends true ? true : (B extends true ? true : false);
21
- /**
22
- * True if value includes undefined.
23
- */
24
- export type HasUndefined<T> = undefined extends T ? true : false;
25
- /**
26
- * Returns true if specified property in type is marked as optional.
27
- */
28
- export type IsOptional<Type, Key extends keyof Type> = {} extends Pick<Type, Key> ? true : false;
29
- /**
30
- * Returns union object keys.
31
- */
32
- export type UnionKeys<T> = T extends T ? keyof T : never;
33
5
  /**
34
6
  * Returns object string keys.
35
7
  */
@@ -1,3 +1,4 @@
1
+ import type { Version } from './types.js';
1
2
  /**
2
3
  * Returns 1 in case, version "a" is greater than "b".
3
4
  * Returns 0 in case, version "a" equal to "b".
@@ -5,4 +6,4 @@
5
6
  * @param a - first version.
6
7
  * @param b - second version.
7
8
  */
8
- export declare function compareVersions(a: string, b: string): number;
9
+ export declare function compareVersions(a: Version, b: Version): number;
@@ -1,4 +1,5 @@
1
1
  /**
2
2
  * Telegram Mini Apps version in format like "\d+.\d+".
3
+ * @example "7.0"
3
4
  */
4
5
  export type Version = string;
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var ot=Object.defineProperty;var at=(r,e,t)=>e in r?ot(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e,t)=>(at(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function ve(){return performance.getEntriesByType("navigation")[0]}function ie(){try{return window.self!==window.top}catch{return!0}}function oe(){var r;return((r=ve())==null?void 0:r.type)==="reload"}function V(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function B(){return new TypeError("Value has unexpected type")}class U extends Error{constructor(t,{cause:s,type:n}={}){super(`Unable to parse value${n?` as ${n}`:""}`,{cause:s});o(this,"type");this.value=t,Object.setPrototypeOf(this,U.prototype),this.type=n}}class J{constructor(e,t,s){this.parser=e,this.isOptional=t,this.type=s}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(t){throw new U(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}}function ct(r){if(Array.isArray(r))return r;if(typeof r=="string")try{const e=JSON.parse(r);if(Array.isArray(e))return e}catch{}throw B()}class ht extends J{constructor(t,s,n){super(ct,s,n);o(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 $(r,e){return()=>new J(r,!1,e)}class M extends Error{constructor(e,{cause:t,type:s}={}){super(`Unable to parse field "${e}"${s?` as ${s}`:""}`,{cause:t}),Object.setPrototypeOf(this,M.prototype)}}function Pe(r,e){const t={};for(const s in r){const n=r[s];if(!n)continue;let i,a;if(typeof n=="function"||"parse"in n)i=s,a=typeof n=="function"?n:n.parse.bind(n);else{const{type:p}=n;i=n.from||s,a=typeof p=="function"?p:p.parse.bind(p)}let c;const u=e(i);try{c=a(u)}catch(p){throw p instanceof U?new M(i,{type:p.type,cause:p}):new M(i,{cause:p})}c!==void 0&&(t[s]=c)}return t}function Se(r){return new ht(e=>e,!1,r)}const E=$(r=>{if(typeof r=="boolean")return r;const e=String(r);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw B()},"boolean"),x=$(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const e=Number(r);if(!Number.isNaN(e))return e}throw B()},"number"),ae=$(r=>r instanceof Date?r:new Date(x().parse(r)*1e3),"Date");function ce(r){let e=r;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw B();return e}function f(r,e){return new J(t=>{const s=ce(t);return Pe(r,n=>s[n])},!1,e)}function Q(r){return/^#[\da-f]{6}$/i.test(r)}function ke(r){return/^#[\da-f]{3}$/i.test(r)}function he(r){const e=r.replace(/\s/g,"").toLowerCase();if(Q(e))return e;if(ke(e)){let s="#";for(let n=0;n<3;n+=1)s+=e[1+n].repeat(2);return s}const t=e.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||e.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(t===null)throw new Error(`Value "${r}" does not satisfy any of known RGB formats.`);return t.slice(1).reduce((s,n)=>{const i=parseInt(n,10).toString(16);return s+(i.length===1?"0":"")+i},"#")}function ue(r){const e=he(r);return Math.sqrt([.299,.587,.114].reduce((s,n,i)=>{const a=parseInt(e.slice(1+i*2,1+(i+1)*2),16);return s+a*a*n},0))<120}const h=$(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw B()},"string"),pe=$(r=>he(h().parse(r)),"rgb");function Z(r,e){return new J(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw B();const s=typeof t=="string"?new URLSearchParams(t):t;return Pe(r,n=>{const i=s.get(n);return i===null?void 0:i})},!1,e)}function xe(){return f({id:x(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat")}class qe{constructor(e){this.initData=e}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:e}=this;return e===void 0?void 0:new Date(this.authDate.getTime()+e*1e3)}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}}function se(){return f({addedToAttachmentMenu:{type:E().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:E().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:x(),isBot:{type:E().optional(),from:"is_bot"},isPremium:{type:E().optional(),from:"is_premium"},languageCode:{type:h().optional(),from:"language_code"},lastName:{type:h().optional(),from:"last_name"},photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"User")}function le(){return Z({authDate:{type:ae(),from:"auth_date"},canSendAfter:{type:x().optional(),from:"can_send_after"},chat:xe().optional(),chatInstance:{type:h().optional(),from:"chat_instance"},chatType:{type:h().optional(),from:"chat_type"},hash:h(),queryId:{type:h().optional(),from:"query_id"},receiver:se().optional(),startParam:{type:h().optional(),from:"start_param"},user:se().optional()},"InitData")}function ut(r){return le().parse(r)}function pt(r){return r.replace(/(^|_)bg/,(e,t)=>`${t}background`).replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function lt(r){return r.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const de=$(r=>{const e=pe().optional();return Object.entries(ce(r)).reduce((t,[s,n])=>(t[pt(s)]=e.parse(n),t),{})},"ThemeParams");function fe(r){return de().parse(r)}function dt(r={}){return b("web_app_request_theme","theme_changed",r).then(fe)}function Ae(r){return JSON.stringify(Object.entries(r).reduce((e,[t,s])=>(s&&(e[lt(t)]=s),e),{}))}class w{constructor(){o(this,"listeners",new Map);o(this,"subscribeListeners",[])}addListener(e,t,s){let n=this.listeners.get(e);return n||(n=[],this.listeners.set(e,n)),n.push([t,s]),()=>this.off(e,t)}emit(e,...t){this.subscribeListeners.forEach(n=>n(e,...t));const s=this.listeners.get(e);s&&s.forEach(([n,i],a)=>{n(...t),i&&s.splice(a,1)})}on(e,t){return this.addListener(e,t,!1)}once(e,t){return this.addListener(e,t,!0)}off(e,t){const s=this.listeners.get(e);if(s){for(let n=0;n<s.length;n+=1)if(t===s[n][0]){s.splice(n,1);return}}}subscribe(e){return this.subscribeListeners.push(e),()=>this.unsubscribe(e)}unsubscribe(e){for(let t=0;t<this.subscribeListeners.length;t+=1)if(this.subscribeListeners[t]===e){this.subscribeListeners.splice(t,1);return}}}class m{constructor(e,t){this.state=e,this.ee=t}internalSet(e,t){return this.state[e]===t||t===void 0?!1:(this.state[e]=t,this.ee.emit(`change:${e}`,t),!0)}clone(){return{...this.state}}set(e,t){let s=!1;if(typeof e=="string")s=this.internalSet(e,t);else for(const n in e)this.internalSet(n,e[n])&&(s=!0);s&&this.ee.emit("change")}get(e){return this.state[e]}}class Ve{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.state=new m(e,this.ee)}get accentTextColor(){return this.get("accentTextColor")}get backgroundColor(){return this.get("backgroundColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}get(e){return this.state.get(e)}getState(){return this.state.clone()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.backgroundColor||ue(this.backgroundColor)}get linkColor(){return this.get("linkColor")}get secondaryBackgroundColor(){return this.get("secondaryBackgroundColor")}get sectionBackgroundColor(){return this.get("sectionBackgroundColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return y("theme_changed",e=>{this.state.set(fe(e.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}function Re(){return Z({botInline:{type:E().optional(),from:"tgWebAppBotInline"},initData:{type:le().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:E().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:de(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}},"LaunchParams")}function ge(r){return Re().parse(r)}function Te(r){const e=r.includes("?")?r.replace("#","&").slice(r.indexOf("?")+1):r.slice(r.indexOf("#")+1);return ge(e)}function ft(){return Te(window.location.href)}function gt(){const r=ve();if(!r)throw new Error("Unable to get first navigation entry.");return Te(r.name)}class Ie{constructor(e,t){this.prefix=e,this.enabled=t}print(e,...t){if(!this.enabled)return;const s=new Date,n=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(s);console[e](`[${n}]`,this.prefix,...t)}disable(){this.enabled=!1}error(...e){this.print("error",...e)}enable(){this.enabled=!0}log(...e){this.print("log",...e)}warn(...e){this.print("warn",...e)}}let Le="https://web.telegram.org";const A=new Ie("[SDK]",!1);function wt(r){if(r){A.enable();return}A.disable()}function _t(r){Le=r}function bt(){return Le}function Be(r){const{initDataRaw:e,themeParams:t,platform:s,version:n,showSettings:i,startParam:a,botInline:c}=r,u=new URLSearchParams;return e&&u.set("tgWebAppData",e),u.set("tgWebAppPlatform",s),u.set("tgWebAppThemeParams",Ae(t)),u.set("tgWebAppVersion",n),a&&u.set("tgWebAppStartParam",n),typeof i=="boolean"&&u.set("tgWebAppShowSettings",i?"1":"0"),typeof c=="boolean"&&u.set("tgWebAppBotInline",c?"1":"0"),u.toString()}const $e="telegram-mini-apps-launch-params";function mt(){return ge(sessionStorage.getItem($e)||"")}function yt(r){sessionStorage.setItem($e,Be(r))}function K(){const r=[];for(const e of[ft,gt,mt])try{const t=e();return yt(t),t}catch(t){r.push(t)}throw A.error("Unable to extract launch parameters. Received errors:",r),new Error("Unable to retrieve launch parameters from any known source.")}function Et(){return{launchParams:K(),isPageReload:oe()}}function Ct(){try{return K(),!0}catch{return!1}}function vt(r){return"external"in r&&V(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function Pt(r){return"TelegramWebviewProxy"in r&&V(r.TelegramWebviewProxy)&&"postEvent"in r.TelegramWebviewProxy&&typeof r.TelegramWebviewProxy.postEvent=="function"}class Y extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,Y.prototype)}}class X extends Error{constructor(e,t,s){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${s}.`),Object.setPrototypeOf(this,X.prototype)}}const St=f({eventType:h(),eventData:r=>r});function De(r){return St.parse(r)}function kt(r,e){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:r,eventData:e}),source:window.parent}))}function xt(){const r=window;"TelegramGameProxy_receiveEvent"in r||[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=r;e.forEach((s,n,i)=>{if(n===i.length-1){t[s]=kt;return}s in t||(t[s]={}),t=t[s]})})}function qt(r){xt(),window.addEventListener("message",e=>{if(e.source===window.parent)try{const{eventType:t,eventData:s}=De(e.data);r(t,s)}catch{}})}function At(){return f({req_id:h(),data:r=>r===null?r:h().optional().parse(r)})}function Vt(){return f({req_id:h(),result:r=>r,error:h().optional()})}function Rt(){return f({slug:h(),status:h()})}function Tt(){return f({status:h()})}function It(){return f({button_id:r=>r==null?void 0:h().parse(r)})}function Lt(){return f({data:h().optional()})}function Bt(){return f({theme_params:r=>{const e=pe().optional();return Object.entries(ce(r)).reduce((t,[s,n])=>(t[s]=e.parse(n),t),{})}})}function $t(){return f({height:x(),width:r=>r==null?window.innerWidth:x().parse(r),is_state_stable:E(),is_expanded:E()})}function Dt(){return f({status:h()})}function Nt(){const r=new w,e=(t,...s)=>{A.log("Emitting processed event:",t,...s),r.emit(t,...s)};return window.addEventListener("resize",()=>{e("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),qt((t,s)=>{A.log("Received raw event:",t,s);try{switch(t){case"viewport_changed":return e(t,$t().parse(s));case"theme_changed":return e(t,Bt().parse(s));case"popup_closed":return s==null?e(t,{}):e(t,It().parse(s));case"set_custom_style":return e(t,h().parse(s));case"qr_text_received":return e(t,Lt().parse(s));case"clipboard_text_received":return e(t,At().parse(s));case"invoice_closed":return e(t,Rt().parse(s));case"phone_requested":return e("phone_requested",Tt().parse(s));case"custom_method_invoked":return e("custom_method_invoked",Vt().parse(s));case"write_access_requested":return e("write_access_requested",Dt().parse(s));case"main_button_pressed":case"back_button_pressed":case"settings_button_pressed":case"scan_qr_popup_closed":case"reload_iframe":return e(t);default:return e(t,s)}}catch(n){A.error("Error processing event:",n)}}),r}const ee="telegram-mini-apps-cached-emitter";function G(){const r=window;return r[ee]===void 0&&(r[ee]=Nt()),r[ee]}function T(r,e){G().off(r,e)}function y(r,e){return G().on(r,e),()=>T(r,e)}function Ht(r,e){return G().once(r,e),()=>T(r,e)}function Ne(r){G().unsubscribe(r)}function Ot(r){return G().subscribe(r),()=>Ne(r)}function He(r,e){const t=r.split("."),s=e.split("."),n=Math.max(t.length,s.length);for(let i=0;i<n;i+=1){const a=parseInt(t[i]||"0",10),c=parseInt(s[i]||"0",10);if(a!==c)return a>c?1:-1}return 0}function k(r,e){return He(r,e)<=0}function R(r,e,t){if(typeof t=="string"){if(r==="web_app_open_link"&&e==="try_instant_view")return k("6.4",t);if(r==="web_app_set_header_color"&&e==="color")return k("6.9",t)}switch(r){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 k("6.1",e);case"web_app_open_popup":return k("6.2",e);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return k("6.4",e);case"web_app_switch_inline_query":return k("6.7",e);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return k("6.9",e);case"web_app_setup_settings_button":return k("6.10",e);default:return!0}}function v(r,e){return t=>R(e[t],r)}function Oe(r,e){return t=>{const[s,n]=e[t];return R(s,n,r)}}function d(r,e,t){let s={},n;e===void 0&&t===void 0?s={}:e!==void 0&&t!==void 0?(s=t,n=e):e!==void 0&&("targetOrigin"in e?s=e:n=e);const{targetOrigin:i=bt()}=s;if(A.log(`Calling method "${r}"`,n),ie()){window.parent.postMessage(JSON.stringify({eventType:r,eventData:n}),i);return}if(vt(window)){window.external.notify(JSON.stringify({eventType:r,eventData:n}));return}if(Pt(window)){window.TelegramWebviewProxy.postEvent(r,JSON.stringify(n));return}throw new Error("Unable to determine current environment and possible way to send event.")}function We(r){return(e,t)=>{if(!R(e,r))throw new Y(e,r);if(V(t)){let s;if(e==="web_app_open_link"&&"try_instant_view"in t?s="try_instant_view":e==="web_app_set_header_color"&&"color"in t&&(s="color"),s&&!R(e,s,r))throw new X(e,s,r)}return d(e,t)}}class j extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,j.prototype)}}function Wt(r){return r instanceof j}function Mt(r){return new Promise(e=>{setTimeout(e,r)})}function Ut(r){return new Promise((e,t)=>{setTimeout(t,r,new j(r))})}function we(r,e){return Promise.race([r(),Ut(e)])}function b(r,e,t,s){let n,i,a,c;typeof e=="string"||Array.isArray(e)?(a=Array.isArray(e)?e:[e],n=t):(i=e,a=Array.isArray(t)?t:[t],n=s),V(i)&&typeof i.req_id=="string"&&(c=i.req_id);const{postEvent:u=d,timeout:p}=n||{},g=n&&"capture"in n?n.capture:null,_=()=>new Promise((I,l)=>{const P=a.map(S=>y(S,F=>{c&&(!V(F)||F.req_id!==c)||typeof g=="function"&&!g(F)||(q(),I(F))})),q=()=>P.forEach(S=>S());try{u(r,i)}catch(S){q(),l(S)}});return typeof p=="number"?we(_,p):_()}async function L(r,e,t,s={}){const{result:n,error:i}=await b("web_app_invoke_custom_method",{method:r,params:e,req_id:t},"custom_method_invoked",s);if(i)throw new Error(i);return n}class Me{constructor(e,t,s=d){o(this,"ee",new w);o(this,"state");o(this,"on",(e,t)=>e==="click"?y("back_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?T("back_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new m({isVisible:e},this.ee),this.supports=v(t,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_back_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function me(r,e){return r+(r.length>0&&e.length>0?` ${e}`:e)}function Ue(...r){return r.reduce((e,t)=>{let s="";return typeof t=="string"?s=t:typeof t=="object"&&t!==null&&(s=Object.entries(t).reduce((n,[i,a])=>a?me(n,i):n,"")),me(e,s)},"")}function Gt(...r){return r.reduce((e,t)=>(V(t)&&Object.entries(t).forEach(([s,n])=>{const i=Ue(e[s],n);i.length>0&&(e[s]=i)}),e),{})}class Ge{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.postEvent=t,this.state=new m({isConfirmationNeeded:e},this.ee)}set isConfirmationNeeded(e){this.state.set("isConfirmationNeeded",e),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:e})}get isConfirmationNeeded(){return this.state.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}function ye(r,e){return r.reduce((t,s)=>(t[s]=e,t),{})}class je{constructor(e,t,s=d){o(this,"supports");this.createRequestId=t,this.postEvent=s,this.supports=v(e,{delete:"web_app_invoke_custom_method",get:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",set:"web_app_invoke_custom_method"})}async delete(e,t={}){const s=Array.isArray(e)?e:[e];s.length!==0&&await L("deleteStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent})}async getKeys(e={}){const t=await L("getStorageKeys",{},this.createRequestId(),{...e,postEvent:this.postEvent});return Se().of(h()).parse(t)}async get(e,t={}){const s=Array.isArray(e)?e:[e];if(s.length===0)return ye(s,"");const n=f(ye(s,h())),i=await L("getStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent}).then(a=>n.parse(a));return Array.isArray(e)?i:i[e]}async set(e,t,s={}){await L("saveStorageValue",{key:e,value:t},this.createRequestId(),{...s,postEvent:this.postEvent})}}function C(r,e){document.documentElement.style.setProperty(r,e)}function Fe(r,e){const t=()=>{C("--tg-background-color",r.backgroundColor)},s=()=>{const{backgroundColor:n,secondaryBackgroundColor:i}=e;if(Q(r.headerColor)){C("--tg-header-color",r.headerColor);return}if(r.headerColor==="bg_color"&&n){C("--tg-header-color",n);return}r.headerColor==="secondary_bg_color"&&i&&C("--tg-header-color",i)};e.on("change",s),r.on("change:backgroundColor",t),r.on("change:headerColor",s),t(),s()}function ze(r){const e=()=>{const t=r.getState();Object.entries(t).forEach(([s,n])=>{if(n){const i=s.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`);C(`--tg-theme-${i}`,n)}})};r.on("change",e),e()}function ne(r){const e=()=>C("--tg-viewport-height",`${r.height}px`),t=()=>C("--tg-viewport-width",`${r.width}px`),s=()=>C("--tg-viewport-stable-height",`${r.stableHeight}px`);r.on("change:height",e),r.on("change:width",t),r.on("change:stableHeight",s),e(),t(),s()}class Je{constructor(e,t=d){o(this,"supports");this.postEvent=t,this.supports=v(e,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"})}impactOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:e})}notificationOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:e})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}function jt(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),y("set_custom_style",e=>{r.innerHTML=e})}function Qe(r){return`telegram-mini-apps-${r}`}function D(r,e){sessionStorage.setItem(Qe(r),JSON.stringify(e))}function N(r){const e=sessionStorage.getItem(Qe(r));return e?JSON.parse(e):null}function Ft(r,e,t){const{isVisible:s=!1}=r?N("back-button")||{}:{},n=new Me(s,e,t);return n.on("change",()=>{D("back-button",{isVisible:n.isVisible})}),n}function zt(r,e){const{isConfirmationNeeded:t=!1}=r?N("closing-behavior")||{}:{},s=new Ge(t,e);return s.on("change",()=>D("closing-behavior",{isConfirmationNeeded:s.isConfirmationNeeded})),s}class Ze{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"postEvent");o(this,"on",(e,t)=>e==="click"?y("main_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?T("main_button_pressed",t):this.ee.off(e,t));const{postEvent:t=d,text:s,textColor:n,backgroundColor:i,isEnabled:a,isVisible:c,isLoaderVisible:u}=e;this.postEvent=t,this.state=new m({backgroundColor:i,isEnabled:a,isVisible:c,isLoaderVisible:u,text:s,textColor:n},this.ee)}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(e){this.setParams({isEnabled:e})}get isEnabled(){return this.state.get("isEnabled")}set isLoaderVisible(e){this.setParams({isLoaderVisible:e})}get isLoaderVisible(){return this.state.get("isLoaderVisible")}set isVisible(e){this.setParams({isVisible:e})}get isVisible(){return this.state.get("isVisible")}get backgroundColor(){return this.state.get("backgroundColor")}get text(){return this.state.get("text")}get textColor(){return this.state.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(e){return this.setParams({text:e})}setTextColor(e){return this.setParams({textColor:e})}setBackgroundColor(e){return this.setParams({backgroundColor:e})}setParams(e){return this.state.set(e),this.commit(),this}}function Jt(r,e,t,s){const{backgroundColor:n=e,isEnabled:i=!1,isVisible:a=!1,isLoaderVisible:c=!1,textColor:u=t,text:p=""}=r?N("main-button")||{}:{},g=new Ze({backgroundColor:n,isEnabled:i,isLoaderVisible:c,isVisible:a,postEvent:s,text:p,textColor:u}),_=()=>D("main-button",{backgroundColor:g.backgroundColor,isEnabled:g.isEnabled,isLoaderVisible:g.isLoaderVisible,isVisible:g.isVisible,text:g.text,textColor:g.textColor});return g.on("change",_),g}const Qt=Z({contact:f({userId:{type:x(),from:"user_id"},phoneNumber:{type:h(),from:"phone_number"},firstName:{type:h(),from:"first_name"},lastName:{type:h().optional(),from:"last_name"}}),authDate:{type:ae(),from:"auth_date"},hash:h()});class Ke{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"botInline");o(this,"postEvent");o(this,"createRequestId");o(this,"requestingPhoneAccess",!1);o(this,"requestingWriteAccess",!1);o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");o(this,"supportsParam");const{postEvent:t=d,headerColor:s,backgroundColor:n,version:i,botInline:a,createRequestId:c}=e,u=v(i,{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"});this.postEvent=t,this.botInline=a,this.createRequestId=c,this.supports=p=>!(!u(p)||p==="switchInlineQuery"&&!a),this.state=new m({backgroundColor:n,headerColor:s},this.ee),this.supportsParam=Oe(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact(){return L("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:1e4}).then(e=>Qt.parse(e))}get backgroundColor(){return this.state.get("backgroundColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.state.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return ue(this.backgroundColor)}get isRequestingPhoneAccess(){return this.requestingPhoneAccess}get isRequestingWriteAccess(){return this.requestingWriteAccess}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:e=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+e;let n=50;return we(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await Mt(n),n+=50}throw new Error("Unable to retrieve requested contact.")},e)}requestPhoneAccess(e={}){if(this.requestingPhoneAccess)throw new Error("Phone access is already being requested.");return this.requestingPhoneAccess=!0,b("web_app_request_phone","phone_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingPhoneAccess=!1})}requestWriteAccess(e={}){if(this.requestingWriteAccess)throw new Error("Write access is already being requested.");return this.requestingWriteAccess=!0,b("web_app_request_write_access","write_access_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingWriteAccess=!1})}sendData(e){const{size:t}=new Blob([e]);if(t===0||t>4096)throw new Error(`Passed data has incorrect size: ${t}`);this.postEvent("web_app_data_send",{data:e})}setHeaderColor(e){this.postEvent("web_app_set_header_color",Q(e)?{color:e}:{color_key:e}),this.state.set("headerColor",e)}setBackgroundColor(e){this.postEvent("web_app_set_background_color",{color:e}),this.state.set("backgroundColor",e)}switchInlineQuery(e,t=[]){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:e,chat_types:t})}}function Zt(r,e,t,s,n,i){const{backgroundColor:a=e,headerColor:c="bg_color"}=r?N("mini-app")||{}:{},u=new Ke({headerColor:c,backgroundColor:a,version:t,botInline:s,createRequestId:n,postEvent:i}),p=()=>D("mini-app",{backgroundColor:u.backgroundColor,headerColor:u.headerColor});return u.on("change",p),u}function Kt(){let r=0;return()=>(r+=1,r.toString())}class Ye{constructor(e,t,s=d){o(this,"ee",new w);o(this,"state");o(this,"on",(e,t)=>e==="click"?y("settings_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?T("settings_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new m({isVisible:e},this.ee),this.supports=v(t,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_settings_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Yt(r,e,t){const{isVisible:s=!1}=r?N("settings-button")||{}:{},n=new Ye(s,e,t);return n.on("change",()=>{D("settings-button",{isVisible:n.isVisible})}),n}function Xt(r){const e=new Ve(r);return e.listen(),e}function Xe(r){return["macos","tdesktop","unigram","web","weba"].includes(r)}async function _e(r){const e=await b("web_app_request_viewport","viewport_changed",r);return{height:e.height,width:e.width,isExpanded:e.is_expanded,isStateStable:e.is_state_stable}}function H(r){return r<0?0:r}class et{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"postEvent");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));const{height:t,isExpanded:s,width:n,stableHeight:i,postEvent:a=d}=e;this.postEvent=a,this.state=new m({height:H(t),isExpanded:s,stableHeight:H(i),width:H(n)},this.ee)}sync(e){return _e(e).then(({height:t,isExpanded:s,width:n,isStateStable:i})=>{this.state.set({height:t,width:n,isExpanded:s,stableHeight:i?t:this.state.get("stableHeight")})})}get height(){return this.state.get("height")}get stableHeight(){return this.state.get("stableHeight")}listen(){return y("viewport_changed",e=>{const{height:t,width:s,is_expanded:n,is_state_stable:i}=e,a={height:H(t),isExpanded:n,width:H(s)};i&&(a.stableHeight=a.height),this.state.set(a)})}get isExpanded(){return this.state.get("isExpanded")}get width(){return this.state.get("width")}expand(){this.postEvent("web_app_expand"),this.state.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}function z(r){const e=new et(r);return e.on("change",()=>D("viewport",{height:e.height,isExpanded:e.isExpanded,stableHeight:e.stableHeight,width:e.width})),e.listen(),e}function er(r,e,t,s){const n=r?N("viewport"):null;if(n)return z({...n,postEvent:t});if(Xe(e))return z({height:window.innerHeight,isExpanded:!0,postEvent:t,stableHeight:window.innerHeight,width:window.innerWidth});if(s)return _e({postEvent:t,timeout:5e3}).then(({height:a,isStateStable:c,...u})=>z({...u,height:a,stableHeight:c?a:0}));const i=z({width:0,height:0,isExpanded:!1,postEvent:t,stableHeight:0});return i.sync({postEvent:t,timeout:5e3}).catch(a=>{console.error("Unable to actualize viewport state",a)}),i}function tr(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function Ee(r,e,t,s){const n=tr(r);n.miniApp&&Fe(e,t),n.themeParams&&ze(t),n.viewport&&(s instanceof Promise?s.then(ne):ne(s))}function rr(r){const{hostname:e,pathname:t}=new URL(r,window.location.href);if(e!=="t.me")throw new Error(`Incorrect hostname: ${e}`);const s=t.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(s===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');return s[2]}class tt{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new m({isOpened:!1},this.ee),this.supports=v(e,{open:"web_app_open_invoice"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e,t){if(this.isOpened)throw new Error("Invoice is already opened");const s=t?rr(e):e;this.isOpened=!0;try{return(await b("web_app_open_invoice",{slug:s},"invoice_closed",{postEvent:this.postEvent,capture(i){return s===i.slug}})).status}finally{this.isOpened=!1}}}function sr(r){const e=r.message.trim(),t=(r.title||"").trim(),s=r.buttons||[];let n;if(t.length>64)throw new Error(`Title has incorrect size: ${t.length}`);if(e.length===0||e.length>256)throw new Error(`Message has incorrect size: ${e.length}`);if(s.length>3)throw new Error(`Buttons have incorrect size: ${s.length}`);return s.length===0?n=[{type:"close",id:""}]:n=s.map(i=>{const{id:a=""}=i;if(a.length>64)throw new Error(`Button ID has incorrect size: ${a}`);if(i.type===void 0||i.type==="default"||i.type==="destructive"){const c=i.text.trim();if(c.length===0||c.length>64){const u=i.type||"default";throw new Error(`Button text with type "${u}" has incorrect size: ${i.text.length}`)}return{...i,text:c,id:a}}return{...i,id:a}}),{title:t,message:e,buttons:n}}class rt{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new m({isOpened:!1},this.ee),this.supports=v(e,{open:"web_app_open_popup"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}open(e){if(this.isOpened)throw new Error("Popup is already opened.");return this.isOpened=!0,b("web_app_open_popup",sr(e),"popup_closed",{postEvent:this.postEvent}).then(({button_id:t=null})=>t).finally(()=>{this.isOpened=!1})}}class st{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new m({isOpened:!1},this.ee),this.supports=v(e,{close:"web_app_close_scan_qr_popup",open:"web_app_open_scan_qr_popup"})}close(){this.postEvent("web_app_close_scan_qr_popup"),this.isOpened=!1}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e){if(this.isOpened)throw new Error("QR scanner is already opened.");this.isOpened=!0;try{const t=await b("web_app_open_scan_qr_popup",{text:e},["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent});return typeof t=="object"&&typeof t.data=="string"?t.data:null}finally{this.isOpened=!1}}}class nt{constructor(e,t,s=d){o(this,"supports");o(this,"supportsParam");this.version=e,this.createRequestId=t,this.postEvent=s,this.supports=v(e,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),this.supportsParam=Oe(e,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(e,t){const s=new URL(e,window.location.href).toString();if(!R("web_app_open_link",this.version)){window.open(s,"_blank");return}this.postEvent("web_app_open_link",{url:s,...typeof t=="boolean"?{try_instant_view:t}:{}})}openTelegramLink(e){const{hostname:t,pathname:s,search:n}=new URL(e,window.location.href);if(t!=="t.me")throw new Error(`URL has not allowed hostname: ${t}. Only "t.me" is allowed`);if(!R("web_app_open_tg_link",this.version)){window.location.href=e;return}this.postEvent("web_app_open_tg_link",{path_full:s+n})}readTextFromClipboard(){return b("web_app_read_text_from_clipboard",{req_id:this.createRequestId()},"clipboard_text_received",{postEvent:this.postEvent}).then(({data:e=null})=>e)}}function nr(r={}){const{async:e=!1,complete:t=e,cssVars:s=!1,acceptCustomStyles:n=!1}=r;try{const{initData:i,initDataRaw:a,version:c,platform:u,themeParams:p,botInline:g=!1}=K(),_=oe(),I=Kt(),l=We(c);ie()&&(n&&jt(),l("iframe_ready",{reload_supported:!0}),y("reload_iframe",()=>window.location.reload()));const P={backButton:Ft(_,c,l),closingBehavior:zt(_,l),cloudStorage:new je(c,I,l),createRequestId:I,hapticFeedback:new Je(c,l),invoice:new tt(c,l),mainButton:Jt(_,p.buttonColor||"#000000",p.buttonTextColor||"#ffffff",l),miniApp:Zt(_,p.backgroundColor||"#ffffff",c,g,I,l),popup:new rt(c,l),postEvent:l,qrScanner:new st(c,l),settingsButton:Yt(_,c,l),themeParams:Xt(p),utils:new nt(c,I,l),...i?{initData:new qe(i),initDataRaw:a}:{}},q=er(_,u,l,t);return q instanceof Promise||t?Promise.resolve(q).then(S=>(Ee(s,P.miniApp,P.themeParams,S),{...P,viewport:S})):(Ee(s,P.miniApp,P.themeParams,q),{...P,viewport:q})}catch(i){if(t)return Promise.reject(i);throw i}}function O(r,e){return r.startsWith(e)?r:`${e}${r}`}function ir(r){const e=r.match(/#(.+)/);return e?e[1]:null}async function W(r){return r===0?!0:Promise.race([new Promise(e=>{window.addEventListener("popstate",function t(){window.removeEventListener("popstate",t),e(!0)}),window.history.go(r)}),new Promise(e=>{setTimeout(e,50,!1)})])}async function or(){if(window.history.length<=1||(window.history.pushState(null,""),await W(1-window.history.length)))return;let e=await W(-1);for(;e;)e=await W(-1)}class it{constructor(e,t,{debug:s=!1,loggerPrefix:n="Navigator"}){o(this,"logger");o(this,"entries");if(this.entriesCursor=t,e.length===0)throw new Error("Entries list should not be empty.");if(t>=e.length)throw new Error("Cursor should be less than entries count.");this.entries=e.map(({pathname:i="",search:a,hash:c})=>{if(!i.startsWith("/")&&i.length>0)throw new Error('Pathname should start with "/"');return{pathname:O(i,"/"),search:a?O(a,"?"):"",hash:c?O(c,"#"):""}}),this.logger=new Ie(`[${n}]`,s)}formatEntry(e){let t;if(typeof e=="string")t=e;else{const{pathname:a="",search:c,hash:u}=e;t=a+(c?O(c,"?"):"")+(u?O(u,"#"):"")}const{pathname:s,search:n,hash:i}=new URL(t,`https://localhost${this.path}`);return{pathname:s,search:n,hash:i}}get entry(){return this.entries[this.entriesCursor]}back(){return this.go(-1)}get cursor(){return this.entriesCursor}get canGoBack(){return this.entriesCursor>0}get canGoForward(){return this.entriesCursor!==this.entries.length-1}forward(){return this.go(1)}go(e){this.logger.log(`called go(${e})`);const t=Math.min(this.entries.length-1,Math.max(this.entriesCursor+e,0));if(this.entriesCursor===t)return this.performGo({updated:!1,delta:e});const s=this.entry;this.entriesCursor=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performGo({updated:!0,delta:e,before:s,after:n})}getEntries(){return this.entries.map(e=>({...e}))}get hash(){return this.entry.hash}push(e){this.entriesCursor!==this.entries.length-1&&this.entries.splice(this.entriesCursor+1);const t=this.formatEntry(e),s=this.entry;this.entriesCursor+=1,this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performPush({before:s,after:n})}get path(){return`${this.pathname}${this.search}${this.hash}`}get pathname(){return this.entry.pathname}replace(e){const t=this.formatEntry(e);if(this.search===t.search&&this.pathname===t.pathname&&this.hash===t.hash)return this.performReplace({updated:!1,entry:t});const s=this.entry;this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performReplace({updated:!0,before:s,after:n})}get search(){return this.entry.search}}const Ce=0,te=1,re=2;class be extends it{constructor(t,s,n={}){super(t,s,{...n,loggerPrefix:"HashNavigator"});o(this,"ee",new w);o(this,"attached",!1);o(this,"onPopState",async({state:t})=>{if(this.logger.log('"popstate" event received. State:',t),t===null)return this.push(window.location.hash.slice(1));if(t===Ce){this.logger.log("Void reached. Moving history forward"),window.history.forward();return}if(t===te)return this.back();if(t===re)return this.forward()});o(this,"back",()=>super.back());o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee))}static fromLocation(t){const{search:s,pathname:n,hash:i}=new URL(window.location.hash.slice(1),window.location.href);return new be([{search:s,pathname:n,hash:i}],0,t)}async performGo(t){t.updated&&(this.attached&&await this.syncHistory(),this.emitChanged(t.before,t.after))}async performPush({before:t,after:s}){this.attached&&await this.syncHistory(),this.emitChanged(t,s)}async performReplace(t){t.updated&&(this.attached&&window.history.replaceState(null,"",`#${this.path}`),this.emitChanged(t.before,t.after))}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const t=`#${this.path}`;await or(),d("web_app_setup_back_button",{is_visible:this.canGoBack}),this.canGoBack&&this.canGoForward?(this.logger.log("Setting up history: [<-, *, ->]"),window.history.replaceState(te,""),window.history.pushState(null,"",t),window.history.pushState(re,""),await W(-1)):this.canGoBack?(this.logger.log("Setting up history: [<-, *]"),window.history.replaceState(te,""),window.history.pushState(null,"",t)):this.canGoForward?(this.logger.log("Setting up history: [*, ->]"),window.history.replaceState(null,t),window.history.pushState(re,""),await W(-1)):(this.logger.log("Setting up history: [~, *]"),window.history.replaceState(Ce,""),window.history.pushState(null,"",t)),window.addEventListener("popstate",this.onPopState)}emitChanged(t,s){this.ee.emit("change",{navigator:this,from:t,to:s})}async attach(){if(!this.attached)return this.logger.log("Attaching",this),this.attached=!0,y("back_button_pressed",this.back),this.syncHistory()}detach(){this.attached&&(this.logger.log("Detaching",this),this.attached=!1,window.removeEventListener("popstate",this.onPopState),T("back_button_pressed",this.back))}}exports.BackButton=Me;exports.ClosingBehavior=Ge;exports.CloudStorage=je;exports.HapticFeedback=Je;exports.HashNavigator=be;exports.InitData=qe;exports.Invoice=tt;exports.MainButton=Ze;exports.MethodUnsupportedError=Y;exports.MiniApp=Ke;exports.Navigator=it;exports.ParameterUnsupportedError=X;exports.ParseError=U;exports.ParseSchemaFieldError=M;exports.Popup=rt;exports.QRScanner=st;exports.SettingsButton=Ye;exports.ThemeParams=Ve;exports.TimeoutError=j;exports.Utils=nt;exports.Viewport=et;exports.array=Se;exports.bindMiniAppCSSVars=Fe;exports.bindThemeCSSVars=ze;exports.bindViewportCSSVars=ne;exports.boolean=E;exports.chatParser=xe;exports.classNames=Ue;exports.compareVersions=He;exports.createPostEvent=We;exports.date=ae;exports.getHash=ir;exports.init=nr;exports.initDataParser=le;exports.invokeCustomMethod=L;exports.isColorDark=ue;exports.isIframe=ie;exports.isPageReload=oe;exports.isRGB=Q;exports.isRGBShort=ke;exports.isRecord=V;exports.isStableViewportPlatform=Xe;exports.isTMA=Ct;exports.isTimeoutError=Wt;exports.json=f;exports.launchParamsParser=Re;exports.mergeClassNames=Gt;exports.number=x;exports.off=T;exports.on=y;exports.once=Ht;exports.parseInitData=ut;exports.parseLaunchParams=ge;exports.parseMessage=De;exports.parseThemeParams=fe;exports.postEvent=d;exports.request=b;exports.requestThemeParams=dt;exports.requestViewport=_e;exports.retrieveLaunchData=Et;exports.retrieveLaunchParams=K;exports.rgb=pe;exports.searchParams=Z;exports.serializeLaunchParams=Be;exports.serializeThemeParams=Ae;exports.setCSSVar=C;exports.setDebug=wt;exports.setTargetOrigin=_t;exports.string=h;exports.subscribe=Ot;exports.supports=R;exports.themeParamsParser=de;exports.toRGB=he;exports.unsubscribe=Ne;exports.userParser=se;exports.withTimeout=we;
1
+ "use strict";var it=Object.defineProperty;var ot=(r,e,t)=>e in r?it(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e,t)=>(ot(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class ve{constructor(e,t){this.prefix=e,this.enabled=t}print(e,...t){if(!this.enabled)return;const s=new Date,n=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(s);console[e](`[${n}]`,this.prefix,...t)}disable(){this.enabled=!1}error(...e){this.print("error",...e)}enable(){this.enabled=!0}log(...e){this.print("log",...e)}warn(...e){this.print("warn",...e)}}let Pe="https://web.telegram.org";const A=new ve("[SDK]",!1);function at(r){if(r){A.enable();return}A.disable()}function ct(r){Pe=r}function ht(){return Pe}function ie(){try{return window.self!==window.top}catch{return!0}}function V(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ut(r){return"external"in r&&V(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function pt(r){return"TelegramWebviewProxy"in r&&V(r.TelegramWebviewProxy)&&"postEvent"in r.TelegramWebviewProxy&&typeof r.TelegramWebviewProxy.postEvent=="function"}function d(r,e,t){let s={},n;e===void 0&&t===void 0?s={}:e!==void 0&&t!==void 0?(s=t,n=e):e!==void 0&&("targetOrigin"in e?s=e:n=e);const{targetOrigin:i=ht()}=s;if(A.log(`Calling method "${r}"`,n),ie()){window.parent.postMessage(JSON.stringify({eventType:r,eventData:n}),i);return}if(ut(window)){window.external.notify(JSON.stringify({eventType:r,eventData:n}));return}if(pt(window)){window.TelegramWebviewProxy.postEvent(r,JSON.stringify(n));return}throw new Error("Unable to determine current environment and possible way to send event.")}function Se(r,e){const t=r.split("."),s=e.split("."),n=Math.max(t.length,s.length);for(let i=0;i<n;i+=1){const a=parseInt(t[i]||"0",10),c=parseInt(s[i]||"0",10);if(a!==c)return a>c?1:-1}return 0}function k(r,e){return Se(r,e)<=0}function R(r,e,t){if(typeof t=="string"){if(r==="web_app_open_link"&&e==="try_instant_view")return k("6.4",t);if(r==="web_app_set_header_color"&&e==="color")return k("6.9",t)}switch(r){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 k("6.1",e);case"web_app_open_popup":return k("6.2",e);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return k("6.4",e);case"web_app_switch_inline_query":return k("6.7",e);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return k("6.9",e);case"web_app_setup_settings_button":return k("6.10",e);default:return!0}}class J extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,J.prototype)}}class Q extends Error{constructor(e,t,s){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${s}.`),Object.setPrototypeOf(this,Q.prototype)}}function ke(r){return(e,t)=>{if(!R(e,r))throw new J(e,r);if(V(t)){let s;if(e==="web_app_open_link"&&"try_instant_view"in t?s="try_instant_view":e==="web_app_set_header_color"&&"color"in t&&(s="color"),s&&!R(e,s,r))throw new Q(e,s,r)}return d(e,t)}}class U extends Error{constructor(t,{cause:s,type:n}={}){super(`Unable to parse value${n?` as ${n}`:""}`,{cause:s});o(this,"type");this.value=t,Object.setPrototypeOf(this,U.prototype),this.type=n}}class M extends Error{constructor(e,{cause:t,type:s}={}){super(`Unable to parse field "${e}"${s?` as ${s}`:""}`,{cause:t}),Object.setPrototypeOf(this,M.prototype)}}function xe(r,e){const t={};for(const s in r){const n=r[s];if(!n)continue;let i,a;if(typeof n=="function"||"parse"in n)i=s,a=typeof n=="function"?n:n.parse.bind(n);else{const{type:p}=n;i=n.from||s,a=typeof p=="function"?p:p.parse.bind(p)}let c;const u=e(i);try{c=a(u)}catch(p){throw p instanceof U?new M(i,{type:p.type,cause:p}):new M(i,{cause:p})}c!==void 0&&(t[s]=c)}return t}function B(){return new TypeError("Value has unexpected type")}function oe(r){let e=r;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw B();return e}class Z{constructor(e,t,s){this.parser=e,this.isOptional=t,this.type=s}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(t){throw new U(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}}function f(r,e){return new Z(t=>{const s=oe(t);return xe(r,n=>s[n])},!1,e)}function $(r,e){return()=>new Z(r,!1,e)}const h=$(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw B()},"string"),lt=f({eventType:h(),eventData:r=>r});function qe(r){return lt.parse(r)}function dt(r,e){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:r,eventData:e}),source:window.parent}))}function ft(){const r=window;"TelegramGameProxy_receiveEvent"in r||[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=r;e.forEach((s,n,i)=>{if(n===i.length-1){t[s]=dt;return}s in t||(t[s]={}),t=t[s]})})}function gt(r){ft(),window.addEventListener("message",e=>{if(e.source===window.parent)try{const{eventType:t,eventData:s}=qe(e.data);r(t,s)}catch{}})}function wt(){return f({req_id:h(),data:r=>r===null?r:h().optional().parse(r)})}function _t(){return f({req_id:h(),result:r=>r,error:h().optional()})}function bt(){return f({slug:h(),status:h()})}function mt(){return f({status:h()})}function yt(){return f({button_id:r=>r==null?void 0:h().parse(r)})}function Et(){return f({data:h().optional()})}function K(r){return/^#[\da-f]{6}$/i.test(r)}function Ae(r){return/^#[\da-f]{3}$/i.test(r)}function ae(r){const e=r.replace(/\s/g,"").toLowerCase();if(K(e))return e;if(Ae(e)){let s="#";for(let n=0;n<3;n+=1)s+=e[1+n].repeat(2);return s}const t=e.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||e.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(t===null)throw new Error(`Value "${r}" does not satisfy any of known RGB formats.`);return t.slice(1).reduce((s,n)=>{const i=parseInt(n,10).toString(16);return s+(i.length===1?"0":"")+i},"#")}const ce=$(r=>ae(h().parse(r)),"rgb");function Ct(){return f({theme_params:r=>{const e=ce().optional();return Object.entries(oe(r)).reduce((t,[s,n])=>(t[s]=e.parse(n),t),{})}})}const E=$(r=>{if(typeof r=="boolean")return r;const e=String(r);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw B()},"boolean"),x=$(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const e=Number(r);if(!Number.isNaN(e))return e}throw B()},"number");function vt(){return f({height:x(),width:r=>r==null?window.innerWidth:x().parse(r),is_state_stable:E(),is_expanded:E()})}function Pt(){return f({status:h()})}class w{constructor(){o(this,"listeners",new Map);o(this,"subscribeListeners",[])}addListener(e,t,s){let n=this.listeners.get(e);return n||(n=[],this.listeners.set(e,n)),n.push([t,s]),()=>this.off(e,t)}emit(e,...t){this.subscribeListeners.forEach(n=>n(e,...t));const s=this.listeners.get(e);s&&s.forEach(([n,i],a)=>{n(...t),i&&s.splice(a,1)})}on(e,t){return this.addListener(e,t,!1)}once(e,t){return this.addListener(e,t,!0)}off(e,t){const s=this.listeners.get(e);if(s){for(let n=0;n<s.length;n+=1)if(t===s[n][0]){s.splice(n,1);return}}}subscribe(e){return this.subscribeListeners.push(e),()=>this.unsubscribe(e)}unsubscribe(e){for(let t=0;t<this.subscribeListeners.length;t+=1)if(this.subscribeListeners[t]===e){this.subscribeListeners.splice(t,1);return}}}function St(){const r=new w,e=(t,...s)=>{A.log("Emitting processed event:",t,...s),r.emit(t,...s)};return window.addEventListener("resize",()=>{e("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),gt((t,s)=>{A.log("Received raw event:",t,s);try{switch(t){case"viewport_changed":return e(t,vt().parse(s));case"theme_changed":return e(t,Ct().parse(s));case"popup_closed":return s==null?e(t,{}):e(t,yt().parse(s));case"set_custom_style":return e(t,h().parse(s));case"qr_text_received":return e(t,Et().parse(s));case"clipboard_text_received":return e(t,wt().parse(s));case"invoice_closed":return e(t,bt().parse(s));case"phone_requested":return e("phone_requested",mt().parse(s));case"custom_method_invoked":return e("custom_method_invoked",_t().parse(s));case"write_access_requested":return e("write_access_requested",Pt().parse(s));case"main_button_pressed":case"back_button_pressed":case"settings_button_pressed":case"scan_qr_popup_closed":case"reload_iframe":return e(t);default:return e(t,s)}}catch(n){A.error("Error processing event:",n)}}),r}const ee="telegram-mini-apps-cached-emitter";function G(){const r=window;return r[ee]===void 0&&(r[ee]=St()),r[ee]}function T(r,e){G().off(r,e)}function m(r,e){return G().on(r,e),()=>T(r,e)}class j extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,j.prototype)}}function kt(r){return new Promise((e,t)=>{setTimeout(t,r,new j(r))})}function he(r,e){return Promise.race([r(),kt(e)])}function b(r,e,t,s){let n,i,a,c;typeof e=="string"||Array.isArray(e)?(a=Array.isArray(e)?e:[e],n=t):(i=e,a=Array.isArray(t)?t:[t],n=s),V(i)&&typeof i.req_id=="string"&&(c=i.req_id);const{postEvent:u=d,timeout:p}=n||{},g=n&&"capture"in n?n.capture:null,_=()=>new Promise((I,l)=>{const P=a.map(S=>m(S,F=>{c&&(!V(F)||F.req_id!==c)||typeof g=="function"&&!g(F)||(q(),I(F))})),q=()=>P.forEach(S=>S());try{u(r,i)}catch(S){q(),l(S)}});return typeof p=="number"?he(_,p):_()}async function L(r,e,t,s={}){const{result:n,error:i}=await b("web_app_invoke_custom_method",{method:r,params:e,req_id:t},"custom_method_invoked",s);if(i)throw new Error(i);return n}function xt(r,e){return G().once(r,e),()=>T(r,e)}function Ve(r){G().unsubscribe(r)}function qt(r){return G().subscribe(r),()=>Ve(r)}function me(r,e){return r+(r.length>0&&e.length>0?` ${e}`:e)}function Re(...r){return r.reduce((e,t)=>{let s="";return typeof t=="string"?s=t:typeof t=="object"&&t!==null&&(s=Object.entries(t).reduce((n,[i,a])=>a?me(n,i):n,"")),me(e,s)},"")}function At(...r){return r.reduce((e,t)=>(V(t)&&Object.entries(t).forEach(([s,n])=>{const i=Re(e[s],n);i.length>0&&(e[s]=i)}),e),{})}function ue(r){const e=ae(r);return Math.sqrt([.299,.587,.114].reduce((s,n,i)=>{const a=parseInt(e.slice(1+i*2,1+(i+1)*2),16);return s+a*a*n},0))<120}class y{constructor(e,t){this.state=e,this.ee=t}internalSet(e,t){return this.state[e]===t||t===void 0?!1:(this.state[e]=t,this.ee.emit(`change:${e}`,t),!0)}clone(){return{...this.state}}set(e,t){let s=!1;if(typeof e=="string")s=this.internalSet(e,t);else for(const n in e)this.internalSet(n,e[n])&&(s=!0);s&&this.ee.emit("change")}get(e){return this.state[e]}}class Te{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.postEvent=t,this.state=new y({isConfirmationNeeded:e},this.ee)}set isConfirmationNeeded(e){this.state.set("isConfirmationNeeded",e),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:e})}get isConfirmationNeeded(){return this.state.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}function Vt(r){if(Array.isArray(r))return r;if(typeof r=="string")try{const e=JSON.parse(r);if(Array.isArray(e))return e}catch{}throw B()}class Rt extends Z{constructor(t,s,n){super(Vt,s,n);o(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 Ie(r){return new Rt(e=>e,!1,r)}function v(r,e){return t=>R(e[t],r)}function ye(r,e){return r.reduce((t,s)=>(t[s]=e,t),{})}class Le{constructor(e,t,s=d){o(this,"supports");this.createRequestId=t,this.postEvent=s,this.supports=v(e,{delete:"web_app_invoke_custom_method",get:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",set:"web_app_invoke_custom_method"})}async delete(e,t={}){const s=Array.isArray(e)?e:[e];s.length!==0&&await L("deleteStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent})}async getKeys(e={}){const t=await L("getStorageKeys",{},this.createRequestId(),{...e,postEvent:this.postEvent});return Ie().of(h()).parse(t)}async get(e,t={}){const s=Array.isArray(e)?e:[e];if(s.length===0)return ye(s,"");const n=f(ye(s,h())),i=await L("getStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent}).then(a=>n.parse(a));return Array.isArray(e)?i:i[e]}async set(e,t,s={}){await L("saveStorageValue",{key:e,value:t},this.createRequestId(),{...s,postEvent:this.postEvent})}}class Be{constructor(e,t=d){o(this,"supports");this.postEvent=t,this.supports=v(e,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"})}impactOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:e})}notificationOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:e})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}function $e(){return f({id:x(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat")}class De{constructor(e){this.initData=e}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:e}=this;return e===void 0?void 0:new Date(this.authDate.getTime()+e*1e3)}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}}function se(){return f({addedToAttachmentMenu:{type:E().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:E().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:x(),isBot:{type:E().optional(),from:"is_bot"},isPremium:{type:E().optional(),from:"is_premium"},languageCode:{type:h().optional(),from:"language_code"},lastName:{type:h().optional(),from:"last_name"},photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"User")}const pe=$(r=>r instanceof Date?r:new Date(x().parse(r)*1e3),"Date");function Y(r,e){return new Z(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw B();const s=typeof t=="string"?new URLSearchParams(t):t;return xe(r,n=>{const i=s.get(n);return i===null?void 0:i})},!1,e)}function le(){return Y({authDate:{type:pe(),from:"auth_date"},canSendAfter:{type:x().optional(),from:"can_send_after"},chat:$e().optional(),chatInstance:{type:h().optional(),from:"chat_instance"},chatType:{type:h().optional(),from:"chat_type"},hash:h(),queryId:{type:h().optional(),from:"query_id"},receiver:se().optional(),startParam:{type:h().optional(),from:"start_param"},user:se().optional()},"InitData")}function Tt(r){return le().parse(r)}function It(r){const{hostname:e,pathname:t}=new URL(r,window.location.href);if(e!=="t.me")throw new Error(`Incorrect hostname: ${e}`);const s=t.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(s===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');return s[2]}class Ne{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new y({isOpened:!1},this.ee),this.supports=v(e,{open:"web_app_open_invoice"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e,t){if(this.isOpened)throw new Error("Invoice is already opened");const s=t?It(e):e;this.isOpened=!0;try{return(await b("web_app_open_invoice",{slug:s},"invoice_closed",{postEvent:this.postEvent,capture(i){return s===i.slug}})).status}finally{this.isOpened=!1}}}class He{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"postEvent");o(this,"on",(e,t)=>e==="click"?m("main_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?T("main_button_pressed",t):this.ee.off(e,t));const{postEvent:t=d,text:s,textColor:n,backgroundColor:i,isEnabled:a,isVisible:c,isLoaderVisible:u}=e;this.postEvent=t,this.state=new y({backgroundColor:i,isEnabled:a,isVisible:c,isLoaderVisible:u,text:s,textColor:n},this.ee)}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(e){this.setParams({isEnabled:e})}get isEnabled(){return this.state.get("isEnabled")}set isLoaderVisible(e){this.setParams({isLoaderVisible:e})}get isLoaderVisible(){return this.state.get("isLoaderVisible")}set isVisible(e){this.setParams({isVisible:e})}get isVisible(){return this.state.get("isVisible")}get backgroundColor(){return this.state.get("backgroundColor")}get text(){return this.state.get("text")}get textColor(){return this.state.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(e){return this.setParams({text:e})}setTextColor(e){return this.setParams({textColor:e})}setBackgroundColor(e){return this.setParams({backgroundColor:e})}setParams(e){return this.state.set(e),this.commit(),this}}const Lt=Y({contact:f({userId:{type:x(),from:"user_id"},phoneNumber:{type:h(),from:"phone_number"},firstName:{type:h(),from:"first_name"},lastName:{type:h().optional(),from:"last_name"}}),authDate:{type:pe(),from:"auth_date"},hash:h()});function Oe(r,e){return t=>{const[s,n]=e[t];return R(s,n,r)}}function Bt(r){return new Promise(e=>{setTimeout(e,r)})}class We{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"botInline");o(this,"postEvent");o(this,"createRequestId");o(this,"requestingPhoneAccess",!1);o(this,"requestingWriteAccess",!1);o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");o(this,"supportsParam");const{postEvent:t=d,headerColor:s,backgroundColor:n,version:i,botInline:a,createRequestId:c}=e,u=v(i,{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"});this.postEvent=t,this.botInline=a,this.createRequestId=c,this.supports=p=>!(!u(p)||p==="switchInlineQuery"&&!a),this.state=new y({backgroundColor:n,headerColor:s},this.ee),this.supportsParam=Oe(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact(){return L("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:1e4}).then(e=>Lt.parse(e))}get backgroundColor(){return this.state.get("backgroundColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.state.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return ue(this.backgroundColor)}get isRequestingPhoneAccess(){return this.requestingPhoneAccess}get isRequestingWriteAccess(){return this.requestingWriteAccess}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:e=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+e;let n=50;return he(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await Bt(n),n+=50}throw new Error("Unable to retrieve requested contact.")},e)}requestPhoneAccess(e={}){if(this.requestingPhoneAccess)throw new Error("Phone access is already being requested.");return this.requestingPhoneAccess=!0,b("web_app_request_phone","phone_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingPhoneAccess=!1})}requestWriteAccess(e={}){if(this.requestingWriteAccess)throw new Error("Write access is already being requested.");return this.requestingWriteAccess=!0,b("web_app_request_write_access","write_access_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingWriteAccess=!1})}sendData(e){const{size:t}=new Blob([e]);if(t===0||t>4096)throw new Error(`Passed data has incorrect size: ${t}`);this.postEvent("web_app_data_send",{data:e})}setHeaderColor(e){this.postEvent("web_app_set_header_color",K(e)?{color:e}:{color_key:e}),this.state.set("headerColor",e)}setBackgroundColor(e){this.postEvent("web_app_set_background_color",{color:e}),this.state.set("backgroundColor",e)}switchInlineQuery(e,t=[]){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:e,chat_types:t})}}function $t(r){const e=r.message.trim(),t=(r.title||"").trim(),s=r.buttons||[];let n;if(t.length>64)throw new Error(`Title has incorrect size: ${t.length}`);if(e.length===0||e.length>256)throw new Error(`Message has incorrect size: ${e.length}`);if(s.length>3)throw new Error(`Buttons have incorrect size: ${s.length}`);return s.length===0?n=[{type:"close",id:""}]:n=s.map(i=>{const{id:a=""}=i;if(a.length>64)throw new Error(`Button ID has incorrect size: ${a}`);if(i.type===void 0||i.type==="default"||i.type==="destructive"){const c=i.text.trim();if(c.length===0||c.length>64){const u=i.type||"default";throw new Error(`Button text with type "${u}" has incorrect size: ${i.text.length}`)}return{...i,text:c,id:a}}return{...i,id:a}}),{title:t,message:e,buttons:n}}class Me{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new y({isOpened:!1},this.ee),this.supports=v(e,{open:"web_app_open_popup"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}open(e){if(this.isOpened)throw new Error("Popup is already opened.");return this.isOpened=!0,b("web_app_open_popup",$t(e),"popup_closed",{postEvent:this.postEvent}).then(({button_id:t=null})=>t).finally(()=>{this.isOpened=!1})}}class Ue{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new y({isOpened:!1},this.ee),this.supports=v(e,{close:"web_app_close_scan_qr_popup",open:"web_app_open_scan_qr_popup"})}close(){this.postEvent("web_app_close_scan_qr_popup"),this.isOpened=!1}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e){if(this.isOpened)throw new Error("QR scanner is already opened.");this.isOpened=!0;try{const t=await b("web_app_open_scan_qr_popup",{text:e},["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent});return typeof t=="object"&&typeof t.data=="string"?t.data:null}finally{this.isOpened=!1}}}class Ge{constructor(e,t,s=d){o(this,"ee",new w);o(this,"state");o(this,"on",(e,t)=>e==="click"?m("settings_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?T("settings_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new y({isVisible:e},this.ee),this.supports=v(t,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_settings_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Dt(r){return r.replace(/(^|_)bg/,(e,t)=>`${t}background`).replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function Nt(r){return r.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const de=$(r=>{const e=ce().optional();return Object.entries(oe(r)).reduce((t,[s,n])=>(t[Dt(s)]=e.parse(n),t),{})},"ThemeParams");function fe(r){return de().parse(r)}function Ht(r={}){return b("web_app_request_theme","theme_changed",r).then(fe)}function je(r){return JSON.stringify(Object.entries(r).reduce((e,[t,s])=>(s&&(e[Nt(t)]=s),e),{}))}class Fe{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.state=new y(e,this.ee)}get accentTextColor(){return this.get("accentTextColor")}get backgroundColor(){return this.get("backgroundColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}get(e){return this.state.get(e)}getState(){return this.state.clone()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.backgroundColor||ue(this.backgroundColor)}get linkColor(){return this.get("linkColor")}get secondaryBackgroundColor(){return this.get("secondaryBackgroundColor")}get sectionBackgroundColor(){return this.get("sectionBackgroundColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return m("theme_changed",e=>{this.state.set(fe(e.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}class ze{constructor(e,t,s=d){o(this,"supports");o(this,"supportsParam");this.version=e,this.createRequestId=t,this.postEvent=s,this.supports=v(e,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),this.supportsParam=Oe(e,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(e,t){const s=new URL(e,window.location.href).toString();if(!R("web_app_open_link",this.version)){window.open(s,"_blank");return}this.postEvent("web_app_open_link",{url:s,...typeof t=="boolean"?{try_instant_view:t}:{}})}openTelegramLink(e){const{hostname:t,pathname:s,search:n}=new URL(e,window.location.href);if(t!=="t.me")throw new Error(`URL has not allowed hostname: ${t}. Only "t.me" is allowed`);if(!R("web_app_open_tg_link",this.version)){window.location.href=e;return}this.postEvent("web_app_open_tg_link",{path_full:s+n})}readTextFromClipboard(){return b("web_app_read_text_from_clipboard",{req_id:this.createRequestId()},"clipboard_text_received",{postEvent:this.postEvent}).then(({data:e=null})=>e)}}function Je(r){return["macos","tdesktop","unigram","web","weba"].includes(r)}async function ge(r){const e=await b("web_app_request_viewport","viewport_changed",r);return{height:e.height,width:e.width,isExpanded:e.is_expanded,isStateStable:e.is_state_stable}}function H(r){return r<0?0:r}class Qe{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"postEvent");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));const{height:t,isExpanded:s,width:n,stableHeight:i,postEvent:a=d}=e;this.postEvent=a,this.state=new y({height:H(t),isExpanded:s,stableHeight:H(i),width:H(n)},this.ee)}sync(e){return ge(e).then(({height:t,isExpanded:s,width:n,isStateStable:i})=>{this.state.set({height:t,width:n,isExpanded:s,stableHeight:i?t:this.state.get("stableHeight")})})}get height(){return this.state.get("height")}get stableHeight(){return this.state.get("stableHeight")}listen(){return m("viewport_changed",e=>{const{height:t,width:s,is_expanded:n,is_state_stable:i}=e,a={height:H(t),isExpanded:n,width:H(s)};i&&(a.stableHeight=a.height),this.state.set(a)})}get isExpanded(){return this.state.get("isExpanded")}get width(){return this.state.get("width")}expand(){this.postEvent("web_app_expand"),this.state.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}function C(r,e){document.documentElement.style.setProperty(r,e)}function Ze(r,e){const t=()=>{C("--tg-background-color",r.backgroundColor)},s=()=>{const{backgroundColor:n,secondaryBackgroundColor:i}=e;if(K(r.headerColor)){C("--tg-header-color",r.headerColor);return}if(r.headerColor==="bg_color"&&n){C("--tg-header-color",n);return}r.headerColor==="secondary_bg_color"&&i&&C("--tg-header-color",i)};e.on("change",s),r.on("change:backgroundColor",t),r.on("change:headerColor",s),t(),s()}function Ke(r){const e=()=>{const t=r.getState();Object.entries(t).forEach(([s,n])=>{if(n){const i=s.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`);C(`--tg-theme-${i}`,n)}})};r.on("change",e),e()}function ne(r){const e=()=>C("--tg-viewport-height",`${r.height}px`),t=()=>C("--tg-viewport-width",`${r.width}px`),s=()=>C("--tg-viewport-stable-height",`${r.stableHeight}px`);r.on("change:height",e),r.on("change:width",t),r.on("change:stableHeight",s),e(),t(),s()}function Ot(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),m("set_custom_style",e=>{r.innerHTML=e})}class Wt{constructor(e,t,s=d){o(this,"ee",new w);o(this,"state");o(this,"on",(e,t)=>e==="click"?m("back_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?T("back_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new y({isVisible:e},this.ee),this.supports=v(t,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_back_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Ye(r){return`telegram-mini-apps-${r}`}function D(r,e){sessionStorage.setItem(Ye(r),JSON.stringify(e))}function N(r){const e=sessionStorage.getItem(Ye(r));return e?JSON.parse(e):null}function Mt(r,e,t){const{isVisible:s=!1}=r?N("back-button")||{}:{},n=new Wt(s,e,t);return n.on("change",()=>{D("back-button",{isVisible:n.isVisible})}),n}function Ut(r,e){const{isConfirmationNeeded:t=!1}=r?N("closing-behavior")||{}:{},s=new Te(t,e);return s.on("change",()=>D("closing-behavior",{isConfirmationNeeded:s.isConfirmationNeeded})),s}function Gt(r,e,t,s){const{backgroundColor:n=e,isEnabled:i=!1,isVisible:a=!1,isLoaderVisible:c=!1,textColor:u=t,text:p=""}=r?N("main-button")||{}:{},g=new He({backgroundColor:n,isEnabled:i,isLoaderVisible:c,isVisible:a,postEvent:s,text:p,textColor:u}),_=()=>D("main-button",{backgroundColor:g.backgroundColor,isEnabled:g.isEnabled,isLoaderVisible:g.isLoaderVisible,isVisible:g.isVisible,text:g.text,textColor:g.textColor});return g.on("change",_),g}function jt(r,e,t,s,n,i){const{backgroundColor:a=e,headerColor:c="bg_color"}=r?N("mini-app")||{}:{},u=new We({headerColor:c,backgroundColor:a,version:t,botInline:s,createRequestId:n,postEvent:i}),p=()=>D("mini-app",{backgroundColor:u.backgroundColor,headerColor:u.headerColor});return u.on("change",p),u}function Ft(){let r=0;return()=>(r+=1,r.toString())}function zt(r,e,t){const{isVisible:s=!1}=r?N("settings-button")||{}:{},n=new Ge(s,e,t);return n.on("change",()=>{D("settings-button",{isVisible:n.isVisible})}),n}function Jt(r){const e=new Fe(r);return e.listen(),e}function z(r){const e=new Qe(r);return e.on("change",()=>D("viewport",{height:e.height,isExpanded:e.isExpanded,stableHeight:e.stableHeight,width:e.width})),e.listen(),e}function Qt(r,e,t,s){const n=r?N("viewport"):null;if(n)return z({...n,postEvent:t});if(Je(e))return z({height:window.innerHeight,isExpanded:!0,postEvent:t,stableHeight:window.innerHeight,width:window.innerWidth});if(s)return ge({postEvent:t,timeout:5e3}).then(({height:a,isStateStable:c,...u})=>z({...u,height:a,stableHeight:c?a:0}));const i=z({width:0,height:0,isExpanded:!1,postEvent:t,stableHeight:0});return i.sync({postEvent:t,timeout:5e3}).catch(a=>{console.error("Unable to actualize viewport state",a)}),i}function Zt(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function Ee(r,e,t,s){const n=Zt(r);n.miniApp&&Ze(e,t),n.themeParams&&Ke(t),n.viewport&&(s instanceof Promise?s.then(ne):ne(s))}function Xe(){return Y({botInline:{type:E().optional(),from:"tgWebAppBotInline"},initData:{type:le().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:E().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:de(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}},"LaunchParams")}function we(r){return Xe().parse(r)}function et(r){const e=r.includes("?")?r.replace("#","&").slice(r.indexOf("?")+1):r.slice(r.indexOf("#")+1);return we(e)}function Kt(){return et(window.location.href)}function tt(){return performance.getEntriesByType("navigation")[0]}function Yt(){const r=tt();if(!r)throw new Error("Unable to get first navigation entry.");return et(r.name)}function rt(r){const{initDataRaw:e,themeParams:t,platform:s,version:n,showSettings:i,startParam:a,botInline:c}=r,u=new URLSearchParams;return e&&u.set("tgWebAppData",e),u.set("tgWebAppPlatform",s),u.set("tgWebAppThemeParams",je(t)),u.set("tgWebAppVersion",n),a&&u.set("tgWebAppStartParam",n),typeof i=="boolean"&&u.set("tgWebAppShowSettings",i?"1":"0"),typeof c=="boolean"&&u.set("tgWebAppBotInline",c?"1":"0"),u.toString()}const st="telegram-mini-apps-launch-params";function Xt(){return we(sessionStorage.getItem(st)||"")}function er(r){sessionStorage.setItem(st,rt(r))}function X(){const r=[];for(const e of[Kt,Yt,Xt])try{const t=e();return er(t),t}catch(t){r.push(t)}throw A.error("Unable to extract launch parameters. Received errors:",r),new Error("Unable to retrieve launch parameters from any known source.")}function _e(){var r;return((r=tt())==null?void 0:r.type)==="reload"}function tr(r={}){const{async:e=!1,complete:t=e,cssVars:s=!1,acceptCustomStyles:n=!1}=r;try{const{initData:i,initDataRaw:a,version:c,platform:u,themeParams:p,botInline:g=!1}=X(),_=_e(),I=Ft(),l=ke(c);ie()&&(n&&Ot(),l("iframe_ready",{reload_supported:!0}),m("reload_iframe",()=>{l("iframe_will_reload"),window.location.reload()}));const P={backButton:Mt(_,c,l),closingBehavior:Ut(_,l),cloudStorage:new Le(c,I,l),createRequestId:I,hapticFeedback:new Be(c,l),invoice:new Ne(c,l),mainButton:Gt(_,p.buttonColor||"#000000",p.buttonTextColor||"#ffffff",l),miniApp:jt(_,p.backgroundColor||"#ffffff",c,g,I,l),popup:new Me(c,l),postEvent:l,qrScanner:new Ue(c,l),settingsButton:zt(_,c,l),themeParams:Jt(p),utils:new ze(c,I,l),...i?{initData:new De(i),initDataRaw:a}:{}},q=Qt(_,u,l,t);return q instanceof Promise||t?Promise.resolve(q).then(S=>(Ee(s,P.miniApp,P.themeParams,S),{...P,viewport:S})):(Ee(s,P.miniApp,P.themeParams,q),{...P,viewport:q})}catch(i){if(t)return Promise.reject(i);throw i}}function rr(){return{launchParams:X(),isPageReload:_e()}}function sr(){try{return X(),!0}catch{return!1}}function nr(r){const e=r.match(/#(.+)/);return e?e[1]:null}async function W(r){return r===0?!0:Promise.race([new Promise(e=>{window.addEventListener("popstate",function t(){window.removeEventListener("popstate",t),e(!0)}),window.history.go(r)}),new Promise(e=>{setTimeout(e,50,!1)})])}async function ir(){if(window.history.length<=1||(window.history.pushState(null,""),await W(1-window.history.length)))return;let e=await W(-1);for(;e;)e=await W(-1)}function O(r,e){return r.startsWith(e)?r:`${e}${r}`}class nt{constructor(e,t,{debug:s=!1,loggerPrefix:n="Navigator"}){o(this,"logger");o(this,"entries");if(this.entriesCursor=t,e.length===0)throw new Error("Entries list should not be empty.");if(t>=e.length)throw new Error("Cursor should be less than entries count.");this.entries=e.map(({pathname:i="",search:a,hash:c})=>{if(!i.startsWith("/")&&i.length>0)throw new Error('Pathname should start with "/"');return{pathname:O(i,"/"),search:a?O(a,"?"):"",hash:c?O(c,"#"):""}}),this.logger=new ve(`[${n}]`,s)}formatEntry(e){let t;if(typeof e=="string")t=e;else{const{pathname:a="",search:c,hash:u}=e;t=a+(c?O(c,"?"):"")+(u?O(u,"#"):"")}const{pathname:s,search:n,hash:i}=new URL(t,`https://localhost${this.path}`);return{pathname:s,search:n,hash:i}}get entry(){return this.entries[this.entriesCursor]}back(){return this.go(-1)}get cursor(){return this.entriesCursor}get canGoBack(){return this.entriesCursor>0}get canGoForward(){return this.entriesCursor!==this.entries.length-1}forward(){return this.go(1)}go(e){this.logger.log(`called go(${e})`);const t=Math.min(this.entries.length-1,Math.max(this.entriesCursor+e,0));if(this.entriesCursor===t)return this.performGo({updated:!1,delta:e});const s=this.entry;this.entriesCursor=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performGo({updated:!0,delta:e,before:s,after:n})}getEntries(){return this.entries.map(e=>({...e}))}get hash(){return this.entry.hash}push(e){this.entriesCursor!==this.entries.length-1&&this.entries.splice(this.entriesCursor+1);const t=this.formatEntry(e),s=this.entry;this.entriesCursor+=1,this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performPush({before:s,after:n})}get path(){return`${this.pathname}${this.search}${this.hash}`}get pathname(){return this.entry.pathname}replace(e){const t=this.formatEntry(e);if(this.search===t.search&&this.pathname===t.pathname&&this.hash===t.hash)return this.performReplace({updated:!1,entry:t});const s=this.entry;this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performReplace({updated:!0,before:s,after:n})}get search(){return this.entry.search}}const Ce=0,te=1,re=2;class be extends nt{constructor(t,s,n={}){super(t,s,{...n,loggerPrefix:"HashNavigator"});o(this,"ee",new w);o(this,"attached",!1);o(this,"onPopState",async({state:t})=>{if(this.logger.log('"popstate" event received. State:',t),t===null)return this.push(window.location.hash.slice(1));if(t===Ce){this.logger.log("Void reached. Moving history forward"),window.history.forward();return}if(t===te)return this.back();if(t===re)return this.forward()});o(this,"back",()=>super.back());o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee))}static fromLocation(t){const{search:s,pathname:n,hash:i}=new URL(window.location.hash.slice(1),window.location.href);return new be([{search:s,pathname:n,hash:i}],0,t)}async performGo(t){t.updated&&(this.attached&&await this.syncHistory(),this.emitChanged(t.before,t.after))}async performPush({before:t,after:s}){this.attached&&await this.syncHistory(),this.emitChanged(t,s)}async performReplace(t){t.updated&&(this.attached&&window.history.replaceState(null,"",`#${this.path}`),this.emitChanged(t.before,t.after))}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const t=`#${this.path}`;await ir(),d("web_app_setup_back_button",{is_visible:this.canGoBack}),this.canGoBack&&this.canGoForward?(this.logger.log("Setting up history: [<-, *, ->]"),window.history.replaceState(te,""),window.history.pushState(null,"",t),window.history.pushState(re,""),await W(-1)):this.canGoBack?(this.logger.log("Setting up history: [<-, *]"),window.history.replaceState(te,""),window.history.pushState(null,"",t)):this.canGoForward?(this.logger.log("Setting up history: [*, ->]"),window.history.replaceState(null,t),window.history.pushState(re,""),await W(-1)):(this.logger.log("Setting up history: [~, *]"),window.history.replaceState(Ce,""),window.history.pushState(null,"",t)),window.addEventListener("popstate",this.onPopState)}emitChanged(t,s){this.ee.emit("change",{navigator:this,from:t,to:s})}async attach(){if(!this.attached)return this.logger.log("Attaching",this),this.attached=!0,m("back_button_pressed",this.back),this.syncHistory()}detach(){this.attached&&(this.logger.log("Detaching",this),this.attached=!1,window.removeEventListener("popstate",this.onPopState),T("back_button_pressed",this.back))}}function or(r){return r instanceof j}exports.ClosingBehavior=Te;exports.CloudStorage=Le;exports.HapticFeedback=Be;exports.HashNavigator=be;exports.InitData=De;exports.Invoice=Ne;exports.MainButton=He;exports.MethodUnsupportedError=J;exports.MiniApp=We;exports.Navigator=nt;exports.ParameterUnsupportedError=Q;exports.ParseError=U;exports.ParseSchemaFieldError=M;exports.Popup=Me;exports.QRScanner=Ue;exports.SettingsButton=Ge;exports.ThemeParams=Fe;exports.TimeoutError=j;exports.Utils=ze;exports.Viewport=Qe;exports.array=Ie;exports.bindMiniAppCSSVars=Ze;exports.bindThemeCSSVars=Ke;exports.bindViewportCSSVars=ne;exports.boolean=E;exports.chatParser=$e;exports.classNames=Re;exports.compareVersions=Se;exports.createPostEvent=ke;exports.date=pe;exports.getHash=nr;exports.init=tr;exports.initDataParser=le;exports.invokeCustomMethod=L;exports.isColorDark=ue;exports.isIframe=ie;exports.isPageReload=_e;exports.isRGB=K;exports.isRGBShort=Ae;exports.isRecord=V;exports.isStableViewportPlatform=Je;exports.isTMA=sr;exports.isTimeoutError=or;exports.json=f;exports.launchParamsParser=Xe;exports.mergeClassNames=At;exports.number=x;exports.off=T;exports.on=m;exports.once=xt;exports.parseInitData=Tt;exports.parseLaunchParams=we;exports.parseMessage=qe;exports.parseThemeParams=fe;exports.postEvent=d;exports.request=b;exports.requestThemeParams=Ht;exports.requestViewport=ge;exports.retrieveLaunchData=rr;exports.retrieveLaunchParams=X;exports.rgb=ce;exports.searchParams=Y;exports.serializeLaunchParams=rt;exports.serializeThemeParams=je;exports.setCSSVar=C;exports.setDebug=at;exports.setTargetOrigin=ct;exports.string=h;exports.subscribe=qt;exports.supports=R;exports.themeParamsParser=de;exports.toRGB=ae;exports.unsubscribe=Ve;exports.userParser=se;exports.withTimeout=he;
@@ -1 +1 @@
1
- var or=Object.defineProperty;var ar=(o,m,v)=>m in o?or(o,m,{enumerable:!0,configurable:!0,writable:!0,value:v}):o[m]=v;var a=(o,m,v)=>(ar(o,typeof m!="symbol"?m+"":m,v),v);this.tmajs=this.tmajs||{};this.tmajs.sdk=function(o){"use strict";function m(){return performance.getEntriesByType("navigation")[0]}function v(){try{return window.self!==window.top}catch{return!0}}function se(){var r;return((r=m())==null?void 0:r.type)==="reload"}function T(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function D(){return new TypeError("Value has unexpected type")}class U extends Error{constructor(t,{cause:s,type:n}={}){super(`Unable to parse value${n?` as ${n}`:""}`,{cause:s});a(this,"type");this.value=t,Object.setPrototypeOf(this,U.prototype),this.type=n}}class Q{constructor(e,t,s){this.parser=e,this.isOptional=t,this.type=s}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(t){throw new U(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}}function at(r){if(Array.isArray(r))return r;if(typeof r=="string")try{const e=JSON.parse(r);if(Array.isArray(e))return e}catch{}throw D()}class ct extends Q{constructor(t,s,n){super(at,s,n);a(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 N(r,e){return()=>new Q(r,!1,e)}class x extends Error{constructor(e,{cause:t,type:s}={}){super(`Unable to parse field "${e}"${s?` as ${s}`:""}`,{cause:t}),Object.setPrototypeOf(this,x.prototype)}}function Ee(r,e){const t={};for(const s in r){const n=r[s];if(!n)continue;let i,c;if(typeof n=="function"||"parse"in n)i=s,c=typeof n=="function"?n:n.parse.bind(n);else{const{type:l}=n;i=n.from||s,c=typeof l=="function"?l:l.parse.bind(l)}let h;const p=e(i);try{h=c(p)}catch(l){throw l instanceof U?new x(i,{type:l.type,cause:l}):new x(i,{cause:l})}h!==void 0&&(t[s]=h)}return t}function Ce(r){return new ct(e=>e,!1,r)}const P=N(r=>{if(typeof r=="boolean")return r;const e=String(r);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw D()},"boolean"),q=N(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const e=Number(r);if(!Number.isNaN(e))return e}throw D()},"number"),ne=N(r=>r instanceof Date?r:new Date(q().parse(r)*1e3),"Date");function ie(r){let e=r;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw D();return e}function g(r,e){return new Q(t=>{const s=ie(t);return Ee(r,n=>s[n])},!1,e)}function Z(r){return/^#[\da-f]{6}$/i.test(r)}function ve(r){return/^#[\da-f]{3}$/i.test(r)}function oe(r){const e=r.replace(/\s/g,"").toLowerCase();if(Z(e))return e;if(ve(e)){let s="#";for(let n=0;n<3;n+=1)s+=e[1+n].repeat(2);return s}const t=e.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||e.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(t===null)throw new Error(`Value "${r}" does not satisfy any of known RGB formats.`);return t.slice(1).reduce((s,n)=>{const i=parseInt(n,10).toString(16);return s+(i.length===1?"0":"")+i},"#")}function ae(r){const e=oe(r);return Math.sqrt([.299,.587,.114].reduce((s,n,i)=>{const c=parseInt(e.slice(1+i*2,1+(i+1)*2),16);return s+c*c*n},0))<120}const u=N(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw D()},"string"),ce=N(r=>oe(u().parse(r)),"rgb");function K(r,e){return new Q(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw D();const s=typeof t=="string"?new URLSearchParams(t):t;return Ee(r,n=>{const i=s.get(n);return i===null?void 0:i})},!1,e)}function Pe(){return g({id:q(),type:u(),title:u(),photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"Chat")}class Se{constructor(e){this.initData=e}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:e}=this;return e===void 0?void 0:new Date(this.authDate.getTime()+e*1e3)}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}}function he(){return g({addedToAttachmentMenu:{type:P().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:P().optional(),from:"allows_write_to_pm"},firstName:{type:u(),from:"first_name"},id:q(),isBot:{type:P().optional(),from:"is_bot"},isPremium:{type:P().optional(),from:"is_premium"},languageCode:{type:u().optional(),from:"language_code"},lastName:{type:u().optional(),from:"last_name"},photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"User")}function ue(){return K({authDate:{type:ne(),from:"auth_date"},canSendAfter:{type:q().optional(),from:"can_send_after"},chat:Pe().optional(),chatInstance:{type:u().optional(),from:"chat_instance"},chatType:{type:u().optional(),from:"chat_type"},hash:u(),queryId:{type:u().optional(),from:"query_id"},receiver:he().optional(),startParam:{type:u().optional(),from:"start_param"},user:he().optional()},"InitData")}function ht(r){return ue().parse(r)}function ut(r){return r.replace(/(^|_)bg/,(e,t)=>`${t}background`).replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function pt(r){return r.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const pe=N(r=>{const e=ce().optional();return Object.entries(ie(r)).reduce((t,[s,n])=>(t[ut(s)]=e.parse(n),t),{})},"ThemeParams");function le(r){return pe().parse(r)}function lt(r={}){return C("web_app_request_theme","theme_changed",r).then(le)}function ke(r){return JSON.stringify(Object.entries(r).reduce((e,[t,s])=>(s&&(e[pt(t)]=s),e),{}))}class _{constructor(){a(this,"listeners",new Map);a(this,"subscribeListeners",[])}addListener(e,t,s){let n=this.listeners.get(e);return n||(n=[],this.listeners.set(e,n)),n.push([t,s]),()=>this.off(e,t)}emit(e,...t){this.subscribeListeners.forEach(n=>n(e,...t));const s=this.listeners.get(e);s&&s.forEach(([n,i],c)=>{n(...t),i&&s.splice(c,1)})}on(e,t){return this.addListener(e,t,!1)}once(e,t){return this.addListener(e,t,!0)}off(e,t){const s=this.listeners.get(e);if(s){for(let n=0;n<s.length;n+=1)if(t===s[n][0]){s.splice(n,1);return}}}subscribe(e){return this.subscribeListeners.push(e),()=>this.unsubscribe(e)}unsubscribe(e){for(let t=0;t<this.subscribeListeners.length;t+=1)if(this.subscribeListeners[t]===e){this.subscribeListeners.splice(t,1);return}}}class y{constructor(e,t){this.state=e,this.ee=t}internalSet(e,t){return this.state[e]===t||t===void 0?!1:(this.state[e]=t,this.ee.emit(`change:${e}`,t),!0)}clone(){return{...this.state}}set(e,t){let s=!1;if(typeof e=="string")s=this.internalSet(e,t);else for(const n in e)this.internalSet(n,e[n])&&(s=!0);s&&this.ee.emit("change")}get(e){return this.state[e]}}class qe{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.state=new y(e,this.ee)}get accentTextColor(){return this.get("accentTextColor")}get backgroundColor(){return this.get("backgroundColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}get(e){return this.state.get(e)}getState(){return this.state.clone()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.backgroundColor||ae(this.backgroundColor)}get linkColor(){return this.get("linkColor")}get secondaryBackgroundColor(){return this.get("secondaryBackgroundColor")}get sectionBackgroundColor(){return this.get("sectionBackgroundColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return E("theme_changed",e=>{this.state.set(le(e.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}function Ae(){return K({botInline:{type:P().optional(),from:"tgWebAppBotInline"},initData:{type:ue().optional(),from:"tgWebAppData"},initDataRaw:{type:u().optional(),from:"tgWebAppData"},platform:{type:u(),from:"tgWebAppPlatform"},showSettings:{type:P().optional(),from:"tgWebAppShowSettings"},startParam:{type:u().optional(),from:"tgWebAppStartParam"},themeParams:{type:pe(),from:"tgWebAppThemeParams"},version:{type:u(),from:"tgWebAppVersion"}},"LaunchParams")}function de(r){return Ae().parse(r)}function Ve(r){const e=r.includes("?")?r.replace("#","&").slice(r.indexOf("?")+1):r.slice(r.indexOf("#")+1);return de(e)}function dt(){return Ve(window.location.href)}function ft(){const r=m();if(!r)throw new Error("Unable to get first navigation entry.");return Ve(r.name)}class Re{constructor(e,t){this.prefix=e,this.enabled=t}print(e,...t){if(!this.enabled)return;const s=new Date,n=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(s);console[e](`[${n}]`,this.prefix,...t)}disable(){this.enabled=!1}error(...e){this.print("error",...e)}enable(){this.enabled=!0}log(...e){this.print("log",...e)}warn(...e){this.print("warn",...e)}}let Te="https://web.telegram.org";const I=new Re("[SDK]",!1);function gt(r){if(r){I.enable();return}I.disable()}function wt(r){Te=r}function _t(){return Te}function Ie(r){const{initDataRaw:e,themeParams:t,platform:s,version:n,showSettings:i,startParam:c,botInline:h}=r,p=new URLSearchParams;return e&&p.set("tgWebAppData",e),p.set("tgWebAppPlatform",s),p.set("tgWebAppThemeParams",ke(t)),p.set("tgWebAppVersion",n),c&&p.set("tgWebAppStartParam",n),typeof i=="boolean"&&p.set("tgWebAppShowSettings",i?"1":"0"),typeof h=="boolean"&&p.set("tgWebAppBotInline",h?"1":"0"),p.toString()}const Le="telegram-mini-apps-launch-params";function bt(){return de(sessionStorage.getItem(Le)||"")}function mt(r){sessionStorage.setItem(Le,Ie(r))}function Y(){const r=[];for(const e of[dt,ft,bt])try{const t=e();return mt(t),t}catch(t){r.push(t)}throw I.error("Unable to extract launch parameters. Received errors:",r),new Error("Unable to retrieve launch parameters from any known source.")}function yt(){return{launchParams:Y(),isPageReload:se()}}function Et(){try{return Y(),!0}catch{return!1}}function Ct(r){return"external"in r&&T(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function vt(r){return"TelegramWebviewProxy"in r&&T(r.TelegramWebviewProxy)&&"postEvent"in r.TelegramWebviewProxy&&typeof r.TelegramWebviewProxy.postEvent=="function"}class X extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,X.prototype)}}class ee extends Error{constructor(e,t,s){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${s}.`),Object.setPrototypeOf(this,ee.prototype)}}const Pt=g({eventType:u(),eventData:r=>r});function Be(r){return Pt.parse(r)}function St(r,e){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:r,eventData:e}),source:window.parent}))}function kt(){const r=window;"TelegramGameProxy_receiveEvent"in r||[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=r;e.forEach((s,n,i)=>{if(n===i.length-1){t[s]=St;return}s in t||(t[s]={}),t=t[s]})})}function qt(r){kt(),window.addEventListener("message",e=>{if(e.source===window.parent)try{const{eventType:t,eventData:s}=Be(e.data);r(t,s)}catch{}})}function At(){return g({req_id:u(),data:r=>r===null?r:u().optional().parse(r)})}function Vt(){return g({req_id:u(),result:r=>r,error:u().optional()})}function Rt(){return g({slug:u(),status:u()})}function Tt(){return g({status:u()})}function It(){return g({button_id:r=>r==null?void 0:u().parse(r)})}function Lt(){return g({data:u().optional()})}function Bt(){return g({theme_params:r=>{const e=ce().optional();return Object.entries(ie(r)).reduce((t,[s,n])=>(t[s]=e.parse(n),t),{})}})}function $t(){return g({height:q(),width:r=>r==null?window.innerWidth:q().parse(r),is_state_stable:P(),is_expanded:P()})}function Dt(){return g({status:u()})}function Nt(){const r=new _,e=(t,...s)=>{I.log("Emitting processed event:",t,...s),r.emit(t,...s)};return window.addEventListener("resize",()=>{e("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),qt((t,s)=>{I.log("Received raw event:",t,s);try{switch(t){case"viewport_changed":return e(t,$t().parse(s));case"theme_changed":return e(t,Bt().parse(s));case"popup_closed":return s==null?e(t,{}):e(t,It().parse(s));case"set_custom_style":return e(t,u().parse(s));case"qr_text_received":return e(t,Lt().parse(s));case"clipboard_text_received":return e(t,At().parse(s));case"invoice_closed":return e(t,Rt().parse(s));case"phone_requested":return e("phone_requested",Tt().parse(s));case"custom_method_invoked":return e("custom_method_invoked",Vt().parse(s));case"write_access_requested":return e("write_access_requested",Dt().parse(s));case"main_button_pressed":case"back_button_pressed":case"settings_button_pressed":case"scan_qr_popup_closed":case"reload_iframe":return e(t);default:return e(t,s)}}catch(n){I.error("Error processing event:",n)}}),r}const fe="telegram-mini-apps-cached-emitter";function j(){const r=window;return r[fe]===void 0&&(r[fe]=Nt()),r[fe]}function L(r,e){j().off(r,e)}function E(r,e){return j().on(r,e),()=>L(r,e)}function Ht(r,e){return j().once(r,e),()=>L(r,e)}function $e(r){j().unsubscribe(r)}function Ot(r){return j().subscribe(r),()=>$e(r)}function De(r,e){const t=r.split("."),s=e.split("."),n=Math.max(t.length,s.length);for(let i=0;i<n;i+=1){const c=parseInt(t[i]||"0",10),h=parseInt(s[i]||"0",10);if(c!==h)return c>h?1:-1}return 0}function A(r,e){return De(r,e)<=0}function B(r,e,t){if(typeof t=="string"){if(r==="web_app_open_link"&&e==="try_instant_view")return A("6.4",t);if(r==="web_app_set_header_color"&&e==="color")return A("6.9",t)}switch(r){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 A("6.1",e);case"web_app_open_popup":return A("6.2",e);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return A("6.4",e);case"web_app_switch_inline_query":return A("6.7",e);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return A("6.9",e);case"web_app_setup_settings_button":return A("6.10",e);default:return!0}}function S(r,e){return t=>B(e[t],r)}function Ne(r,e){return t=>{const[s,n]=e[t];return B(s,n,r)}}function d(r,e,t){let s={},n;e===void 0&&t===void 0?s={}:e!==void 0&&t!==void 0?(s=t,n=e):e!==void 0&&("targetOrigin"in e?s=e:n=e);const{targetOrigin:i=_t()}=s;if(I.log(`Calling method "${r}"`,n),v()){window.parent.postMessage(JSON.stringify({eventType:r,eventData:n}),i);return}if(Ct(window)){window.external.notify(JSON.stringify({eventType:r,eventData:n}));return}if(vt(window)){window.TelegramWebviewProxy.postEvent(r,JSON.stringify(n));return}throw new Error("Unable to determine current environment and possible way to send event.")}function He(r){return(e,t)=>{if(!B(e,r))throw new X(e,r);if(T(t)){let s;if(e==="web_app_open_link"&&"try_instant_view"in t?s="try_instant_view":e==="web_app_set_header_color"&&"color"in t&&(s="color"),s&&!B(e,s,r))throw new ee(e,s,r)}return d(e,t)}}class G extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,G.prototype)}}function Wt(r){return r instanceof G}function Mt(r){return new Promise(e=>{setTimeout(e,r)})}function Ut(r){return new Promise((e,t)=>{setTimeout(t,r,new G(r))})}function ge(r,e){return Promise.race([r(),Ut(e)])}function C(r,e,t,s){let n,i,c,h;typeof e=="string"||Array.isArray(e)?(c=Array.isArray(e)?e:[e],n=t):(i=e,c=Array.isArray(t)?t:[t],n=s),T(i)&&typeof i.req_id=="string"&&(h=i.req_id);const{postEvent:p=d,timeout:l}=n||{},w=n&&"capture"in n?n.capture:null,b=()=>new Promise((M,f)=>{const V=c.map(R=>E(R,re=>{h&&(!T(re)||re.req_id!==h)||typeof w=="function"&&!w(re)||($(),M(re))})),$=()=>V.forEach(R=>R());try{p(r,i)}catch(R){$(),f(R)}});return typeof l=="number"?ge(b,l):b()}async function H(r,e,t,s={}){const{result:n,error:i}=await C("web_app_invoke_custom_method",{method:r,params:e,req_id:t},"custom_method_invoked",s);if(i)throw new Error(i);return n}class Oe{constructor(e,t,s=d){a(this,"ee",new _);a(this,"state");a(this,"on",(e,t)=>e==="click"?E("back_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>e==="click"?L("back_button_pressed",t):this.ee.off(e,t));a(this,"supports");this.postEvent=s,this.state=new y({isVisible:e},this.ee),this.supports=S(t,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_back_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function We(r,e){return r+(r.length>0&&e.length>0?` ${e}`:e)}function Me(...r){return r.reduce((e,t)=>{let s="";return typeof t=="string"?s=t:typeof t=="object"&&t!==null&&(s=Object.entries(t).reduce((n,[i,c])=>c?We(n,i):n,"")),We(e,s)},"")}function xt(...r){return r.reduce((e,t)=>(T(t)&&Object.entries(t).forEach(([s,n])=>{const i=Me(e[s],n);i.length>0&&(e[s]=i)}),e),{})}class Ue{constructor(e,t=d){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.postEvent=t,this.state=new y({isConfirmationNeeded:e},this.ee)}set isConfirmationNeeded(e){this.state.set("isConfirmationNeeded",e),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:e})}get isConfirmationNeeded(){return this.state.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}function xe(r,e){return r.reduce((t,s)=>(t[s]=e,t),{})}class je{constructor(e,t,s=d){a(this,"supports");this.createRequestId=t,this.postEvent=s,this.supports=S(e,{delete:"web_app_invoke_custom_method",get:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",set:"web_app_invoke_custom_method"})}async delete(e,t={}){const s=Array.isArray(e)?e:[e];s.length!==0&&await H("deleteStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent})}async getKeys(e={}){const t=await H("getStorageKeys",{},this.createRequestId(),{...e,postEvent:this.postEvent});return Ce().of(u()).parse(t)}async get(e,t={}){const s=Array.isArray(e)?e:[e];if(s.length===0)return xe(s,"");const n=g(xe(s,u())),i=await H("getStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent}).then(c=>n.parse(c));return Array.isArray(e)?i:i[e]}async set(e,t,s={}){await H("saveStorageValue",{key:e,value:t},this.createRequestId(),{...s,postEvent:this.postEvent})}}function k(r,e){document.documentElement.style.setProperty(r,e)}function Ge(r,e){const t=()=>{k("--tg-background-color",r.backgroundColor)},s=()=>{const{backgroundColor:n,secondaryBackgroundColor:i}=e;if(Z(r.headerColor)){k("--tg-header-color",r.headerColor);return}if(r.headerColor==="bg_color"&&n){k("--tg-header-color",n);return}r.headerColor==="secondary_bg_color"&&i&&k("--tg-header-color",i)};e.on("change",s),r.on("change:backgroundColor",t),r.on("change:headerColor",s),t(),s()}function Fe(r){const e=()=>{const t=r.getState();Object.entries(t).forEach(([s,n])=>{if(n){const i=s.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);k(`--tg-theme-${i}`,n)}})};r.on("change",e),e()}function we(r){const e=()=>k("--tg-viewport-height",`${r.height}px`),t=()=>k("--tg-viewport-width",`${r.width}px`),s=()=>k("--tg-viewport-stable-height",`${r.stableHeight}px`);r.on("change:height",e),r.on("change:width",t),r.on("change:stableHeight",s),e(),t(),s()}class ze{constructor(e,t=d){a(this,"supports");this.postEvent=t,this.supports=S(e,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"})}impactOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:e})}notificationOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:e})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}function jt(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),E("set_custom_style",e=>{r.innerHTML=e})}function Je(r){return`telegram-mini-apps-${r}`}function O(r,e){sessionStorage.setItem(Je(r),JSON.stringify(e))}function W(r){const e=sessionStorage.getItem(Je(r));return e?JSON.parse(e):null}function Gt(r,e,t){const{isVisible:s=!1}=r?W("back-button")||{}:{},n=new Oe(s,e,t);return n.on("change",()=>{O("back-button",{isVisible:n.isVisible})}),n}function Ft(r,e){const{isConfirmationNeeded:t=!1}=r?W("closing-behavior")||{}:{},s=new Ue(t,e);return s.on("change",()=>O("closing-behavior",{isConfirmationNeeded:s.isConfirmationNeeded})),s}class Qe{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"postEvent");a(this,"on",(e,t)=>e==="click"?E("main_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>e==="click"?L("main_button_pressed",t):this.ee.off(e,t));const{postEvent:t=d,text:s,textColor:n,backgroundColor:i,isEnabled:c,isVisible:h,isLoaderVisible:p}=e;this.postEvent=t,this.state=new y({backgroundColor:i,isEnabled:c,isVisible:h,isLoaderVisible:p,text:s,textColor:n},this.ee)}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(e){this.setParams({isEnabled:e})}get isEnabled(){return this.state.get("isEnabled")}set isLoaderVisible(e){this.setParams({isLoaderVisible:e})}get isLoaderVisible(){return this.state.get("isLoaderVisible")}set isVisible(e){this.setParams({isVisible:e})}get isVisible(){return this.state.get("isVisible")}get backgroundColor(){return this.state.get("backgroundColor")}get text(){return this.state.get("text")}get textColor(){return this.state.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(e){return this.setParams({text:e})}setTextColor(e){return this.setParams({textColor:e})}setBackgroundColor(e){return this.setParams({backgroundColor:e})}setParams(e){return this.state.set(e),this.commit(),this}}function zt(r,e,t,s){const{backgroundColor:n=e,isEnabled:i=!1,isVisible:c=!1,isLoaderVisible:h=!1,textColor:p=t,text:l=""}=r?W("main-button")||{}:{},w=new Qe({backgroundColor:n,isEnabled:i,isLoaderVisible:h,isVisible:c,postEvent:s,text:l,textColor:p}),b=()=>O("main-button",{backgroundColor:w.backgroundColor,isEnabled:w.isEnabled,isLoaderVisible:w.isLoaderVisible,isVisible:w.isVisible,text:w.text,textColor:w.textColor});return w.on("change",b),w}const Jt=K({contact:g({userId:{type:q(),from:"user_id"},phoneNumber:{type:u(),from:"phone_number"},firstName:{type:u(),from:"first_name"},lastName:{type:u().optional(),from:"last_name"}}),authDate:{type:ne(),from:"auth_date"},hash:u()});class Ze{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"botInline");a(this,"postEvent");a(this,"createRequestId");a(this,"requestingPhoneAccess",!1);a(this,"requestingWriteAccess",!1);a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");a(this,"supportsParam");const{postEvent:t=d,headerColor:s,backgroundColor:n,version:i,botInline:c,createRequestId:h}=e,p=S(i,{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"});this.postEvent=t,this.botInline=c,this.createRequestId=h,this.supports=l=>!(!p(l)||l==="switchInlineQuery"&&!c),this.state=new y({backgroundColor:n,headerColor:s},this.ee),this.supportsParam=Ne(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact(){return H("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:1e4}).then(e=>Jt.parse(e))}get backgroundColor(){return this.state.get("backgroundColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.state.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return ae(this.backgroundColor)}get isRequestingPhoneAccess(){return this.requestingPhoneAccess}get isRequestingWriteAccess(){return this.requestingWriteAccess}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:e=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+e;let n=50;return ge(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await Mt(n),n+=50}throw new Error("Unable to retrieve requested contact.")},e)}requestPhoneAccess(e={}){if(this.requestingPhoneAccess)throw new Error("Phone access is already being requested.");return this.requestingPhoneAccess=!0,C("web_app_request_phone","phone_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingPhoneAccess=!1})}requestWriteAccess(e={}){if(this.requestingWriteAccess)throw new Error("Write access is already being requested.");return this.requestingWriteAccess=!0,C("web_app_request_write_access","write_access_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingWriteAccess=!1})}sendData(e){const{size:t}=new Blob([e]);if(t===0||t>4096)throw new Error(`Passed data has incorrect size: ${t}`);this.postEvent("web_app_data_send",{data:e})}setHeaderColor(e){this.postEvent("web_app_set_header_color",Z(e)?{color:e}:{color_key:e}),this.state.set("headerColor",e)}setBackgroundColor(e){this.postEvent("web_app_set_background_color",{color:e}),this.state.set("backgroundColor",e)}switchInlineQuery(e,t=[]){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:e,chat_types:t})}}function Qt(r,e,t,s,n,i){const{backgroundColor:c=e,headerColor:h="bg_color"}=r?W("mini-app")||{}:{},p=new Ze({headerColor:h,backgroundColor:c,version:t,botInline:s,createRequestId:n,postEvent:i}),l=()=>O("mini-app",{backgroundColor:p.backgroundColor,headerColor:p.headerColor});return p.on("change",l),p}function Zt(){let r=0;return()=>(r+=1,r.toString())}class Ke{constructor(e,t,s=d){a(this,"ee",new _);a(this,"state");a(this,"on",(e,t)=>e==="click"?E("settings_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>e==="click"?L("settings_button_pressed",t):this.ee.off(e,t));a(this,"supports");this.postEvent=s,this.state=new y({isVisible:e},this.ee),this.supports=S(t,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_settings_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Kt(r,e,t){const{isVisible:s=!1}=r?W("settings-button")||{}:{},n=new Ke(s,e,t);return n.on("change",()=>{O("settings-button",{isVisible:n.isVisible})}),n}function Yt(r){const e=new qe(r);return e.listen(),e}function Ye(r){return["macos","tdesktop","unigram","web","weba"].includes(r)}async function _e(r){const e=await C("web_app_request_viewport","viewport_changed",r);return{height:e.height,width:e.width,isExpanded:e.is_expanded,isStateStable:e.is_state_stable}}function F(r){return r<0?0:r}class Xe{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"postEvent");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));const{height:t,isExpanded:s,width:n,stableHeight:i,postEvent:c=d}=e;this.postEvent=c,this.state=new y({height:F(t),isExpanded:s,stableHeight:F(i),width:F(n)},this.ee)}sync(e){return _e(e).then(({height:t,isExpanded:s,width:n,isStateStable:i})=>{this.state.set({height:t,width:n,isExpanded:s,stableHeight:i?t:this.state.get("stableHeight")})})}get height(){return this.state.get("height")}get stableHeight(){return this.state.get("stableHeight")}listen(){return E("viewport_changed",e=>{const{height:t,width:s,is_expanded:n,is_state_stable:i}=e,c={height:F(t),isExpanded:n,width:F(s)};i&&(c.stableHeight=c.height),this.state.set(c)})}get isExpanded(){return this.state.get("isExpanded")}get width(){return this.state.get("width")}expand(){this.postEvent("web_app_expand"),this.state.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}function te(r){const e=new Xe(r);return e.on("change",()=>O("viewport",{height:e.height,isExpanded:e.isExpanded,stableHeight:e.stableHeight,width:e.width})),e.listen(),e}function Xt(r,e,t,s){const n=r?W("viewport"):null;if(n)return te({...n,postEvent:t});if(Ye(e))return te({height:window.innerHeight,isExpanded:!0,postEvent:t,stableHeight:window.innerHeight,width:window.innerWidth});if(s)return _e({postEvent:t,timeout:5e3}).then(({height:c,isStateStable:h,...p})=>te({...p,height:c,stableHeight:h?c:0}));const i=te({width:0,height:0,isExpanded:!1,postEvent:t,stableHeight:0});return i.sync({postEvent:t,timeout:5e3}).catch(c=>{console.error("Unable to actualize viewport state",c)}),i}function er(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function et(r,e,t,s){const n=er(r);n.miniApp&&Ge(e,t),n.themeParams&&Fe(t),n.viewport&&(s instanceof Promise?s.then(we):we(s))}function tr(r){const{hostname:e,pathname:t}=new URL(r,window.location.href);if(e!=="t.me")throw new Error(`Incorrect hostname: ${e}`);const s=t.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(s===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');return s[2]}class tt{constructor(e,t=d){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new y({isOpened:!1},this.ee),this.supports=S(e,{open:"web_app_open_invoice"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e,t){if(this.isOpened)throw new Error("Invoice is already opened");const s=t?tr(e):e;this.isOpened=!0;try{return(await C("web_app_open_invoice",{slug:s},"invoice_closed",{postEvent:this.postEvent,capture(i){return s===i.slug}})).status}finally{this.isOpened=!1}}}function rr(r){const e=r.message.trim(),t=(r.title||"").trim(),s=r.buttons||[];let n;if(t.length>64)throw new Error(`Title has incorrect size: ${t.length}`);if(e.length===0||e.length>256)throw new Error(`Message has incorrect size: ${e.length}`);if(s.length>3)throw new Error(`Buttons have incorrect size: ${s.length}`);return s.length===0?n=[{type:"close",id:""}]:n=s.map(i=>{const{id:c=""}=i;if(c.length>64)throw new Error(`Button ID has incorrect size: ${c}`);if(i.type===void 0||i.type==="default"||i.type==="destructive"){const h=i.text.trim();if(h.length===0||h.length>64){const p=i.type||"default";throw new Error(`Button text with type "${p}" has incorrect size: ${i.text.length}`)}return{...i,text:h,id:c}}return{...i,id:c}}),{title:t,message:e,buttons:n}}class rt{constructor(e,t=d){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new y({isOpened:!1},this.ee),this.supports=S(e,{open:"web_app_open_popup"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}open(e){if(this.isOpened)throw new Error("Popup is already opened.");return this.isOpened=!0,C("web_app_open_popup",rr(e),"popup_closed",{postEvent:this.postEvent}).then(({button_id:t=null})=>t).finally(()=>{this.isOpened=!1})}}class st{constructor(e,t=d){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new y({isOpened:!1},this.ee),this.supports=S(e,{close:"web_app_close_scan_qr_popup",open:"web_app_open_scan_qr_popup"})}close(){this.postEvent("web_app_close_scan_qr_popup"),this.isOpened=!1}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e){if(this.isOpened)throw new Error("QR scanner is already opened.");this.isOpened=!0;try{const t=await C("web_app_open_scan_qr_popup",{text:e},["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent});return typeof t=="object"&&typeof t.data=="string"?t.data:null}finally{this.isOpened=!1}}}class nt{constructor(e,t,s=d){a(this,"supports");a(this,"supportsParam");this.version=e,this.createRequestId=t,this.postEvent=s,this.supports=S(e,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),this.supportsParam=Ne(e,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(e,t){const s=new URL(e,window.location.href).toString();if(!B("web_app_open_link",this.version)){window.open(s,"_blank");return}this.postEvent("web_app_open_link",{url:s,...typeof t=="boolean"?{try_instant_view:t}:{}})}openTelegramLink(e){const{hostname:t,pathname:s,search:n}=new URL(e,window.location.href);if(t!=="t.me")throw new Error(`URL has not allowed hostname: ${t}. Only "t.me" is allowed`);if(!B("web_app_open_tg_link",this.version)){window.location.href=e;return}this.postEvent("web_app_open_tg_link",{path_full:s+n})}readTextFromClipboard(){return C("web_app_read_text_from_clipboard",{req_id:this.createRequestId()},"clipboard_text_received",{postEvent:this.postEvent}).then(({data:e=null})=>e)}}function sr(r={}){const{async:e=!1,complete:t=e,cssVars:s=!1,acceptCustomStyles:n=!1}=r;try{const{initData:i,initDataRaw:c,version:h,platform:p,themeParams:l,botInline:w=!1}=Y(),b=se(),M=Zt(),f=He(h);v()&&(n&&jt(),f("iframe_ready",{reload_supported:!0}),E("reload_iframe",()=>window.location.reload()));const V={backButton:Gt(b,h,f),closingBehavior:Ft(b,f),cloudStorage:new je(h,M,f),createRequestId:M,hapticFeedback:new ze(h,f),invoice:new tt(h,f),mainButton:zt(b,l.buttonColor||"#000000",l.buttonTextColor||"#ffffff",f),miniApp:Qt(b,l.backgroundColor||"#ffffff",h,w,M,f),popup:new rt(h,f),postEvent:f,qrScanner:new st(h,f),settingsButton:Kt(b,h,f),themeParams:Yt(l),utils:new nt(h,M,f),...i?{initData:new Se(i),initDataRaw:c}:{}},$=Xt(b,p,f,t);return $ instanceof Promise||t?Promise.resolve($).then(R=>(et(s,V.miniApp,V.themeParams,R),{...V,viewport:R})):(et(s,V.miniApp,V.themeParams,$),{...V,viewport:$})}catch(i){if(t)return Promise.reject(i);throw i}}function z(r,e){return r.startsWith(e)?r:`${e}${r}`}function nr(r){const e=r.match(/#(.+)/);return e?e[1]:null}async function J(r){return r===0?!0:Promise.race([new Promise(e=>{window.addEventListener("popstate",function t(){window.removeEventListener("popstate",t),e(!0)}),window.history.go(r)}),new Promise(e=>{setTimeout(e,50,!1)})])}async function ir(){if(window.history.length<=1||(window.history.pushState(null,""),await J(1-window.history.length)))return;let e=await J(-1);for(;e;)e=await J(-1)}class it{constructor(e,t,{debug:s=!1,loggerPrefix:n="Navigator"}){a(this,"logger");a(this,"entries");if(this.entriesCursor=t,e.length===0)throw new Error("Entries list should not be empty.");if(t>=e.length)throw new Error("Cursor should be less than entries count.");this.entries=e.map(({pathname:i="",search:c,hash:h})=>{if(!i.startsWith("/")&&i.length>0)throw new Error('Pathname should start with "/"');return{pathname:z(i,"/"),search:c?z(c,"?"):"",hash:h?z(h,"#"):""}}),this.logger=new Re(`[${n}]`,s)}formatEntry(e){let t;if(typeof e=="string")t=e;else{const{pathname:c="",search:h,hash:p}=e;t=c+(h?z(h,"?"):"")+(p?z(p,"#"):"")}const{pathname:s,search:n,hash:i}=new URL(t,`https://localhost${this.path}`);return{pathname:s,search:n,hash:i}}get entry(){return this.entries[this.entriesCursor]}back(){return this.go(-1)}get cursor(){return this.entriesCursor}get canGoBack(){return this.entriesCursor>0}get canGoForward(){return this.entriesCursor!==this.entries.length-1}forward(){return this.go(1)}go(e){this.logger.log(`called go(${e})`);const t=Math.min(this.entries.length-1,Math.max(this.entriesCursor+e,0));if(this.entriesCursor===t)return this.performGo({updated:!1,delta:e});const s=this.entry;this.entriesCursor=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performGo({updated:!0,delta:e,before:s,after:n})}getEntries(){return this.entries.map(e=>({...e}))}get hash(){return this.entry.hash}push(e){this.entriesCursor!==this.entries.length-1&&this.entries.splice(this.entriesCursor+1);const t=this.formatEntry(e),s=this.entry;this.entriesCursor+=1,this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performPush({before:s,after:n})}get path(){return`${this.pathname}${this.search}${this.hash}`}get pathname(){return this.entry.pathname}replace(e){const t=this.formatEntry(e);if(this.search===t.search&&this.pathname===t.pathname&&this.hash===t.hash)return this.performReplace({updated:!1,entry:t});const s=this.entry;this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performReplace({updated:!0,before:s,after:n})}get search(){return this.entry.search}}const ot=0,be=1,me=2;class ye extends it{constructor(t,s,n={}){super(t,s,{...n,loggerPrefix:"HashNavigator"});a(this,"ee",new _);a(this,"attached",!1);a(this,"onPopState",async({state:t})=>{if(this.logger.log('"popstate" event received. State:',t),t===null)return this.push(window.location.hash.slice(1));if(t===ot){this.logger.log("Void reached. Moving history forward"),window.history.forward();return}if(t===be)return this.back();if(t===me)return this.forward()});a(this,"back",()=>super.back());a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee))}static fromLocation(t){const{search:s,pathname:n,hash:i}=new URL(window.location.hash.slice(1),window.location.href);return new ye([{search:s,pathname:n,hash:i}],0,t)}async performGo(t){t.updated&&(this.attached&&await this.syncHistory(),this.emitChanged(t.before,t.after))}async performPush({before:t,after:s}){this.attached&&await this.syncHistory(),this.emitChanged(t,s)}async performReplace(t){t.updated&&(this.attached&&window.history.replaceState(null,"",`#${this.path}`),this.emitChanged(t.before,t.after))}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const t=`#${this.path}`;await ir(),d("web_app_setup_back_button",{is_visible:this.canGoBack}),this.canGoBack&&this.canGoForward?(this.logger.log("Setting up history: [<-, *, ->]"),window.history.replaceState(be,""),window.history.pushState(null,"",t),window.history.pushState(me,""),await J(-1)):this.canGoBack?(this.logger.log("Setting up history: [<-, *]"),window.history.replaceState(be,""),window.history.pushState(null,"",t)):this.canGoForward?(this.logger.log("Setting up history: [*, ->]"),window.history.replaceState(null,t),window.history.pushState(me,""),await J(-1)):(this.logger.log("Setting up history: [~, *]"),window.history.replaceState(ot,""),window.history.pushState(null,"",t)),window.addEventListener("popstate",this.onPopState)}emitChanged(t,s){this.ee.emit("change",{navigator:this,from:t,to:s})}async attach(){if(!this.attached)return this.logger.log("Attaching",this),this.attached=!0,E("back_button_pressed",this.back),this.syncHistory()}detach(){this.attached&&(this.logger.log("Detaching",this),this.attached=!1,window.removeEventListener("popstate",this.onPopState),L("back_button_pressed",this.back))}}return o.BackButton=Oe,o.ClosingBehavior=Ue,o.CloudStorage=je,o.HapticFeedback=ze,o.HashNavigator=ye,o.InitData=Se,o.Invoice=tt,o.MainButton=Qe,o.MethodUnsupportedError=X,o.MiniApp=Ze,o.Navigator=it,o.ParameterUnsupportedError=ee,o.ParseError=U,o.ParseSchemaFieldError=x,o.Popup=rt,o.QRScanner=st,o.SettingsButton=Ke,o.ThemeParams=qe,o.TimeoutError=G,o.Utils=nt,o.Viewport=Xe,o.array=Ce,o.bindMiniAppCSSVars=Ge,o.bindThemeCSSVars=Fe,o.bindViewportCSSVars=we,o.boolean=P,o.chatParser=Pe,o.classNames=Me,o.compareVersions=De,o.createPostEvent=He,o.date=ne,o.getHash=nr,o.init=sr,o.initDataParser=ue,o.invokeCustomMethod=H,o.isColorDark=ae,o.isIframe=v,o.isPageReload=se,o.isRGB=Z,o.isRGBShort=ve,o.isRecord=T,o.isStableViewportPlatform=Ye,o.isTMA=Et,o.isTimeoutError=Wt,o.json=g,o.launchParamsParser=Ae,o.mergeClassNames=xt,o.number=q,o.off=L,o.on=E,o.once=Ht,o.parseInitData=ht,o.parseLaunchParams=de,o.parseMessage=Be,o.parseThemeParams=le,o.postEvent=d,o.request=C,o.requestThemeParams=lt,o.requestViewport=_e,o.retrieveLaunchData=yt,o.retrieveLaunchParams=Y,o.rgb=ce,o.searchParams=K,o.serializeLaunchParams=Ie,o.serializeThemeParams=ke,o.setCSSVar=k,o.setDebug=gt,o.setTargetOrigin=wt,o.string=u,o.subscribe=Ot,o.supports=B,o.themeParamsParser=pe,o.toRGB=oe,o.unsubscribe=$e,o.userParser=he,o.withTimeout=ge,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),o}({});
1
+ var or=Object.defineProperty;var ar=(o,m,k)=>m in o?or(o,m,{enumerable:!0,configurable:!0,writable:!0,value:k}):o[m]=k;var a=(o,m,k)=>(ar(o,typeof m!="symbol"?m+"":m,k),k);this.tmajs=this.tmajs||{};this.tmajs.sdk=function(o){"use strict";class m{constructor(e,t){this.prefix=e,this.enabled=t}print(e,...t){if(!this.enabled)return;const s=new Date,n=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(s);console[e](`[${n}]`,this.prefix,...t)}disable(){this.enabled=!1}error(...e){this.print("error",...e)}enable(){this.enabled=!0}log(...e){this.print("log",...e)}warn(...e){this.print("warn",...e)}}let k="https://web.telegram.org";const T=new m("[SDK]",!1);function ot(r){if(r){T.enable();return}T.disable()}function at(r){k=r}function ct(){return k}function se(){try{return window.self!==window.top}catch{return!0}}function I(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ht(r){return"external"in r&&I(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function ut(r){return"TelegramWebviewProxy"in r&&I(r.TelegramWebviewProxy)&&"postEvent"in r.TelegramWebviewProxy&&typeof r.TelegramWebviewProxy.postEvent=="function"}function f(r,e,t){let s={},n;e===void 0&&t===void 0?s={}:e!==void 0&&t!==void 0?(s=t,n=e):e!==void 0&&("targetOrigin"in e?s=e:n=e);const{targetOrigin:i=ct()}=s;if(T.log(`Calling method "${r}"`,n),se()){window.parent.postMessage(JSON.stringify({eventType:r,eventData:n}),i);return}if(ht(window)){window.external.notify(JSON.stringify({eventType:r,eventData:n}));return}if(ut(window)){window.TelegramWebviewProxy.postEvent(r,JSON.stringify(n));return}throw new Error("Unable to determine current environment and possible way to send event.")}function Ce(r,e){const t=r.split("."),s=e.split("."),n=Math.max(t.length,s.length);for(let i=0;i<n;i+=1){const c=parseInt(t[i]||"0",10),h=parseInt(s[i]||"0",10);if(c!==h)return c>h?1:-1}return 0}function q(r,e){return Ce(r,e)<=0}function L(r,e,t){if(typeof t=="string"){if(r==="web_app_open_link"&&e==="try_instant_view")return q("6.4",t);if(r==="web_app_set_header_color"&&e==="color")return q("6.9",t)}switch(r){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 q("6.1",e);case"web_app_open_popup":return q("6.2",e);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return q("6.4",e);case"web_app_switch_inline_query":return q("6.7",e);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return q("6.9",e);case"web_app_setup_settings_button":return q("6.10",e);default:return!0}}class Q extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,Q.prototype)}}class Z extends Error{constructor(e,t,s){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${s}.`),Object.setPrototypeOf(this,Z.prototype)}}function ve(r){return(e,t)=>{if(!L(e,r))throw new Q(e,r);if(I(t)){let s;if(e==="web_app_open_link"&&"try_instant_view"in t?s="try_instant_view":e==="web_app_set_header_color"&&"color"in t&&(s="color"),s&&!L(e,s,r))throw new Z(e,s,r)}return f(e,t)}}class U extends Error{constructor(t,{cause:s,type:n}={}){super(`Unable to parse value${n?` as ${n}`:""}`,{cause:s});a(this,"type");this.value=t,Object.setPrototypeOf(this,U.prototype),this.type=n}}class x extends Error{constructor(e,{cause:t,type:s}={}){super(`Unable to parse field "${e}"${s?` as ${s}`:""}`,{cause:t}),Object.setPrototypeOf(this,x.prototype)}}function Pe(r,e){const t={};for(const s in r){const n=r[s];if(!n)continue;let i,c;if(typeof n=="function"||"parse"in n)i=s,c=typeof n=="function"?n:n.parse.bind(n);else{const{type:l}=n;i=n.from||s,c=typeof l=="function"?l:l.parse.bind(l)}let h;const p=e(i);try{h=c(p)}catch(l){throw l instanceof U?new x(i,{type:l.type,cause:l}):new x(i,{cause:l})}h!==void 0&&(t[s]=h)}return t}function D(){return new TypeError("Value has unexpected type")}function ne(r){let e=r;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw D();return e}class K{constructor(e,t,s){this.parser=e,this.isOptional=t,this.type=s}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(t){throw new U(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}}function g(r,e){return new K(t=>{const s=ne(t);return Pe(r,n=>s[n])},!1,e)}function N(r,e){return()=>new K(r,!1,e)}const u=N(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw D()},"string"),pt=g({eventType:u(),eventData:r=>r});function Se(r){return pt.parse(r)}function lt(r,e){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:r,eventData:e}),source:window.parent}))}function dt(){const r=window;"TelegramGameProxy_receiveEvent"in r||[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=r;e.forEach((s,n,i)=>{if(n===i.length-1){t[s]=lt;return}s in t||(t[s]={}),t=t[s]})})}function ft(r){dt(),window.addEventListener("message",e=>{if(e.source===window.parent)try{const{eventType:t,eventData:s}=Se(e.data);r(t,s)}catch{}})}function gt(){return g({req_id:u(),data:r=>r===null?r:u().optional().parse(r)})}function wt(){return g({req_id:u(),result:r=>r,error:u().optional()})}function _t(){return g({slug:u(),status:u()})}function bt(){return g({status:u()})}function mt(){return g({button_id:r=>r==null?void 0:u().parse(r)})}function yt(){return g({data:u().optional()})}function Y(r){return/^#[\da-f]{6}$/i.test(r)}function ke(r){return/^#[\da-f]{3}$/i.test(r)}function ie(r){const e=r.replace(/\s/g,"").toLowerCase();if(Y(e))return e;if(ke(e)){let s="#";for(let n=0;n<3;n+=1)s+=e[1+n].repeat(2);return s}const t=e.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||e.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(t===null)throw new Error(`Value "${r}" does not satisfy any of known RGB formats.`);return t.slice(1).reduce((s,n)=>{const i=parseInt(n,10).toString(16);return s+(i.length===1?"0":"")+i},"#")}const oe=N(r=>ie(u().parse(r)),"rgb");function Et(){return g({theme_params:r=>{const e=oe().optional();return Object.entries(ne(r)).reduce((t,[s,n])=>(t[s]=e.parse(n),t),{})}})}const v=N(r=>{if(typeof r=="boolean")return r;const e=String(r);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw D()},"boolean"),A=N(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const e=Number(r);if(!Number.isNaN(e))return e}throw D()},"number");function Ct(){return g({height:A(),width:r=>r==null?window.innerWidth:A().parse(r),is_state_stable:v(),is_expanded:v()})}function vt(){return g({status:u()})}class _{constructor(){a(this,"listeners",new Map);a(this,"subscribeListeners",[])}addListener(e,t,s){let n=this.listeners.get(e);return n||(n=[],this.listeners.set(e,n)),n.push([t,s]),()=>this.off(e,t)}emit(e,...t){this.subscribeListeners.forEach(n=>n(e,...t));const s=this.listeners.get(e);s&&s.forEach(([n,i],c)=>{n(...t),i&&s.splice(c,1)})}on(e,t){return this.addListener(e,t,!1)}once(e,t){return this.addListener(e,t,!0)}off(e,t){const s=this.listeners.get(e);if(s){for(let n=0;n<s.length;n+=1)if(t===s[n][0]){s.splice(n,1);return}}}subscribe(e){return this.subscribeListeners.push(e),()=>this.unsubscribe(e)}unsubscribe(e){for(let t=0;t<this.subscribeListeners.length;t+=1)if(this.subscribeListeners[t]===e){this.subscribeListeners.splice(t,1);return}}}function Pt(){const r=new _,e=(t,...s)=>{T.log("Emitting processed event:",t,...s),r.emit(t,...s)};return window.addEventListener("resize",()=>{e("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),ft((t,s)=>{T.log("Received raw event:",t,s);try{switch(t){case"viewport_changed":return e(t,Ct().parse(s));case"theme_changed":return e(t,Et().parse(s));case"popup_closed":return s==null?e(t,{}):e(t,mt().parse(s));case"set_custom_style":return e(t,u().parse(s));case"qr_text_received":return e(t,yt().parse(s));case"clipboard_text_received":return e(t,gt().parse(s));case"invoice_closed":return e(t,_t().parse(s));case"phone_requested":return e("phone_requested",bt().parse(s));case"custom_method_invoked":return e("custom_method_invoked",wt().parse(s));case"write_access_requested":return e("write_access_requested",vt().parse(s));case"main_button_pressed":case"back_button_pressed":case"settings_button_pressed":case"scan_qr_popup_closed":case"reload_iframe":return e(t);default:return e(t,s)}}catch(n){T.error("Error processing event:",n)}}),r}const ae="telegram-mini-apps-cached-emitter";function j(){const r=window;return r[ae]===void 0&&(r[ae]=Pt()),r[ae]}function B(r,e){j().off(r,e)}function y(r,e){return j().on(r,e),()=>B(r,e)}class G extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,G.prototype)}}function St(r){return new Promise((e,t)=>{setTimeout(t,r,new G(r))})}function ce(r,e){return Promise.race([r(),St(e)])}function E(r,e,t,s){let n,i,c,h;typeof e=="string"||Array.isArray(e)?(c=Array.isArray(e)?e:[e],n=t):(i=e,c=Array.isArray(t)?t:[t],n=s),I(i)&&typeof i.req_id=="string"&&(h=i.req_id);const{postEvent:p=f,timeout:l}=n||{},w=n&&"capture"in n?n.capture:null,b=()=>new Promise((M,d)=>{const V=c.map(R=>y(R,re=>{h&&(!I(re)||re.req_id!==h)||typeof w=="function"&&!w(re)||($(),M(re))})),$=()=>V.forEach(R=>R());try{p(r,i)}catch(R){$(),d(R)}});return typeof l=="number"?ce(b,l):b()}async function H(r,e,t,s={}){const{result:n,error:i}=await E("web_app_invoke_custom_method",{method:r,params:e,req_id:t},"custom_method_invoked",s);if(i)throw new Error(i);return n}function kt(r,e){return j().once(r,e),()=>B(r,e)}function qe(r){j().unsubscribe(r)}function qt(r){return j().subscribe(r),()=>qe(r)}function Ae(r,e){return r+(r.length>0&&e.length>0?` ${e}`:e)}function Ve(...r){return r.reduce((e,t)=>{let s="";return typeof t=="string"?s=t:typeof t=="object"&&t!==null&&(s=Object.entries(t).reduce((n,[i,c])=>c?Ae(n,i):n,"")),Ae(e,s)},"")}function At(...r){return r.reduce((e,t)=>(I(t)&&Object.entries(t).forEach(([s,n])=>{const i=Ve(e[s],n);i.length>0&&(e[s]=i)}),e),{})}function he(r){const e=ie(r);return Math.sqrt([.299,.587,.114].reduce((s,n,i)=>{const c=parseInt(e.slice(1+i*2,1+(i+1)*2),16);return s+c*c*n},0))<120}class C{constructor(e,t){this.state=e,this.ee=t}internalSet(e,t){return this.state[e]===t||t===void 0?!1:(this.state[e]=t,this.ee.emit(`change:${e}`,t),!0)}clone(){return{...this.state}}set(e,t){let s=!1;if(typeof e=="string")s=this.internalSet(e,t);else for(const n in e)this.internalSet(n,e[n])&&(s=!0);s&&this.ee.emit("change")}get(e){return this.state[e]}}class Re{constructor(e,t=f){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.postEvent=t,this.state=new C({isConfirmationNeeded:e},this.ee)}set isConfirmationNeeded(e){this.state.set("isConfirmationNeeded",e),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:e})}get isConfirmationNeeded(){return this.state.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}function Vt(r){if(Array.isArray(r))return r;if(typeof r=="string")try{const e=JSON.parse(r);if(Array.isArray(e))return e}catch{}throw D()}class Rt extends K{constructor(t,s,n){super(Vt,s,n);a(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 Te(r){return new Rt(e=>e,!1,r)}function P(r,e){return t=>L(e[t],r)}function Ie(r,e){return r.reduce((t,s)=>(t[s]=e,t),{})}class Le{constructor(e,t,s=f){a(this,"supports");this.createRequestId=t,this.postEvent=s,this.supports=P(e,{delete:"web_app_invoke_custom_method",get:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",set:"web_app_invoke_custom_method"})}async delete(e,t={}){const s=Array.isArray(e)?e:[e];s.length!==0&&await H("deleteStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent})}async getKeys(e={}){const t=await H("getStorageKeys",{},this.createRequestId(),{...e,postEvent:this.postEvent});return Te().of(u()).parse(t)}async get(e,t={}){const s=Array.isArray(e)?e:[e];if(s.length===0)return Ie(s,"");const n=g(Ie(s,u())),i=await H("getStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent}).then(c=>n.parse(c));return Array.isArray(e)?i:i[e]}async set(e,t,s={}){await H("saveStorageValue",{key:e,value:t},this.createRequestId(),{...s,postEvent:this.postEvent})}}class Be{constructor(e,t=f){a(this,"supports");this.postEvent=t,this.supports=P(e,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"})}impactOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:e})}notificationOccurred(e){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:e})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}function $e(){return g({id:A(),type:u(),title:u(),photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"Chat")}class De{constructor(e){this.initData=e}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:e}=this;return e===void 0?void 0:new Date(this.authDate.getTime()+e*1e3)}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}}function ue(){return g({addedToAttachmentMenu:{type:v().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:v().optional(),from:"allows_write_to_pm"},firstName:{type:u(),from:"first_name"},id:A(),isBot:{type:v().optional(),from:"is_bot"},isPremium:{type:v().optional(),from:"is_premium"},languageCode:{type:u().optional(),from:"language_code"},lastName:{type:u().optional(),from:"last_name"},photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"User")}const pe=N(r=>r instanceof Date?r:new Date(A().parse(r)*1e3),"Date");function X(r,e){return new K(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw D();const s=typeof t=="string"?new URLSearchParams(t):t;return Pe(r,n=>{const i=s.get(n);return i===null?void 0:i})},!1,e)}function le(){return X({authDate:{type:pe(),from:"auth_date"},canSendAfter:{type:A().optional(),from:"can_send_after"},chat:$e().optional(),chatInstance:{type:u().optional(),from:"chat_instance"},chatType:{type:u().optional(),from:"chat_type"},hash:u(),queryId:{type:u().optional(),from:"query_id"},receiver:ue().optional(),startParam:{type:u().optional(),from:"start_param"},user:ue().optional()},"InitData")}function Tt(r){return le().parse(r)}function It(r){const{hostname:e,pathname:t}=new URL(r,window.location.href);if(e!=="t.me")throw new Error(`Incorrect hostname: ${e}`);const s=t.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(s===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');return s[2]}class Ne{constructor(e,t=f){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new C({isOpened:!1},this.ee),this.supports=P(e,{open:"web_app_open_invoice"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e,t){if(this.isOpened)throw new Error("Invoice is already opened");const s=t?It(e):e;this.isOpened=!0;try{return(await E("web_app_open_invoice",{slug:s},"invoice_closed",{postEvent:this.postEvent,capture(i){return s===i.slug}})).status}finally{this.isOpened=!1}}}class He{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"postEvent");a(this,"on",(e,t)=>e==="click"?y("main_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>e==="click"?B("main_button_pressed",t):this.ee.off(e,t));const{postEvent:t=f,text:s,textColor:n,backgroundColor:i,isEnabled:c,isVisible:h,isLoaderVisible:p}=e;this.postEvent=t,this.state=new C({backgroundColor:i,isEnabled:c,isVisible:h,isLoaderVisible:p,text:s,textColor:n},this.ee)}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(e){this.setParams({isEnabled:e})}get isEnabled(){return this.state.get("isEnabled")}set isLoaderVisible(e){this.setParams({isLoaderVisible:e})}get isLoaderVisible(){return this.state.get("isLoaderVisible")}set isVisible(e){this.setParams({isVisible:e})}get isVisible(){return this.state.get("isVisible")}get backgroundColor(){return this.state.get("backgroundColor")}get text(){return this.state.get("text")}get textColor(){return this.state.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(e){return this.setParams({text:e})}setTextColor(e){return this.setParams({textColor:e})}setBackgroundColor(e){return this.setParams({backgroundColor:e})}setParams(e){return this.state.set(e),this.commit(),this}}const Lt=X({contact:g({userId:{type:A(),from:"user_id"},phoneNumber:{type:u(),from:"phone_number"},firstName:{type:u(),from:"first_name"},lastName:{type:u().optional(),from:"last_name"}}),authDate:{type:pe(),from:"auth_date"},hash:u()});function Oe(r,e){return t=>{const[s,n]=e[t];return L(s,n,r)}}function Bt(r){return new Promise(e=>{setTimeout(e,r)})}class We{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"botInline");a(this,"postEvent");a(this,"createRequestId");a(this,"requestingPhoneAccess",!1);a(this,"requestingWriteAccess",!1);a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");a(this,"supportsParam");const{postEvent:t=f,headerColor:s,backgroundColor:n,version:i,botInline:c,createRequestId:h}=e,p=P(i,{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"});this.postEvent=t,this.botInline=c,this.createRequestId=h,this.supports=l=>!(!p(l)||l==="switchInlineQuery"&&!c),this.state=new C({backgroundColor:n,headerColor:s},this.ee),this.supportsParam=Oe(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact(){return H("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:1e4}).then(e=>Lt.parse(e))}get backgroundColor(){return this.state.get("backgroundColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.state.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return he(this.backgroundColor)}get isRequestingPhoneAccess(){return this.requestingPhoneAccess}get isRequestingWriteAccess(){return this.requestingWriteAccess}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:e=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+e;let n=50;return ce(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await Bt(n),n+=50}throw new Error("Unable to retrieve requested contact.")},e)}requestPhoneAccess(e={}){if(this.requestingPhoneAccess)throw new Error("Phone access is already being requested.");return this.requestingPhoneAccess=!0,E("web_app_request_phone","phone_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingPhoneAccess=!1})}requestWriteAccess(e={}){if(this.requestingWriteAccess)throw new Error("Write access is already being requested.");return this.requestingWriteAccess=!0,E("web_app_request_write_access","write_access_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingWriteAccess=!1})}sendData(e){const{size:t}=new Blob([e]);if(t===0||t>4096)throw new Error(`Passed data has incorrect size: ${t}`);this.postEvent("web_app_data_send",{data:e})}setHeaderColor(e){this.postEvent("web_app_set_header_color",Y(e)?{color:e}:{color_key:e}),this.state.set("headerColor",e)}setBackgroundColor(e){this.postEvent("web_app_set_background_color",{color:e}),this.state.set("backgroundColor",e)}switchInlineQuery(e,t=[]){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:e,chat_types:t})}}function $t(r){const e=r.message.trim(),t=(r.title||"").trim(),s=r.buttons||[];let n;if(t.length>64)throw new Error(`Title has incorrect size: ${t.length}`);if(e.length===0||e.length>256)throw new Error(`Message has incorrect size: ${e.length}`);if(s.length>3)throw new Error(`Buttons have incorrect size: ${s.length}`);return s.length===0?n=[{type:"close",id:""}]:n=s.map(i=>{const{id:c=""}=i;if(c.length>64)throw new Error(`Button ID has incorrect size: ${c}`);if(i.type===void 0||i.type==="default"||i.type==="destructive"){const h=i.text.trim();if(h.length===0||h.length>64){const p=i.type||"default";throw new Error(`Button text with type "${p}" has incorrect size: ${i.text.length}`)}return{...i,text:h,id:c}}return{...i,id:c}}),{title:t,message:e,buttons:n}}class Me{constructor(e,t=f){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new C({isOpened:!1},this.ee),this.supports=P(e,{open:"web_app_open_popup"})}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}open(e){if(this.isOpened)throw new Error("Popup is already opened.");return this.isOpened=!0,E("web_app_open_popup",$t(e),"popup_closed",{postEvent:this.postEvent}).then(({button_id:t=null})=>t).finally(()=>{this.isOpened=!1})}}class Ue{constructor(e,t=f){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new C({isOpened:!1},this.ee),this.supports=P(e,{close:"web_app_close_scan_qr_popup",open:"web_app_open_scan_qr_popup"})}close(){this.postEvent("web_app_close_scan_qr_popup"),this.isOpened=!1}set isOpened(e){this.state.set("isOpened",e)}get isOpened(){return this.state.get("isOpened")}async open(e){if(this.isOpened)throw new Error("QR scanner is already opened.");this.isOpened=!0;try{const t=await E("web_app_open_scan_qr_popup",{text:e},["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent});return typeof t=="object"&&typeof t.data=="string"?t.data:null}finally{this.isOpened=!1}}}class xe{constructor(e,t,s=f){a(this,"ee",new _);a(this,"state");a(this,"on",(e,t)=>e==="click"?y("settings_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>e==="click"?B("settings_button_pressed",t):this.ee.off(e,t));a(this,"supports");this.postEvent=s,this.state=new C({isVisible:e},this.ee),this.supports=P(t,{show:"web_app_setup_settings_button",hide:"web_app_setup_settings_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_settings_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Dt(r){return r.replace(/(^|_)bg/,(e,t)=>`${t}background`).replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function Nt(r){return r.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const de=N(r=>{const e=oe().optional();return Object.entries(ne(r)).reduce((t,[s,n])=>(t[Dt(s)]=e.parse(n),t),{})},"ThemeParams");function fe(r){return de().parse(r)}function Ht(r={}){return E("web_app_request_theme","theme_changed",r).then(fe)}function je(r){return JSON.stringify(Object.entries(r).reduce((e,[t,s])=>(s&&(e[Nt(t)]=s),e),{}))}class Ge{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.state=new C(e,this.ee)}get accentTextColor(){return this.get("accentTextColor")}get backgroundColor(){return this.get("backgroundColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}get(e){return this.state.get(e)}getState(){return this.state.clone()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.backgroundColor||he(this.backgroundColor)}get linkColor(){return this.get("linkColor")}get secondaryBackgroundColor(){return this.get("secondaryBackgroundColor")}get sectionBackgroundColor(){return this.get("sectionBackgroundColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return y("theme_changed",e=>{this.state.set(fe(e.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}class Fe{constructor(e,t,s=f){a(this,"supports");a(this,"supportsParam");this.version=e,this.createRequestId=t,this.postEvent=s,this.supports=P(e,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),this.supportsParam=Oe(e,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(e,t){const s=new URL(e,window.location.href).toString();if(!L("web_app_open_link",this.version)){window.open(s,"_blank");return}this.postEvent("web_app_open_link",{url:s,...typeof t=="boolean"?{try_instant_view:t}:{}})}openTelegramLink(e){const{hostname:t,pathname:s,search:n}=new URL(e,window.location.href);if(t!=="t.me")throw new Error(`URL has not allowed hostname: ${t}. Only "t.me" is allowed`);if(!L("web_app_open_tg_link",this.version)){window.location.href=e;return}this.postEvent("web_app_open_tg_link",{path_full:s+n})}readTextFromClipboard(){return E("web_app_read_text_from_clipboard",{req_id:this.createRequestId()},"clipboard_text_received",{postEvent:this.postEvent}).then(({data:e=null})=>e)}}function ze(r){return["macos","tdesktop","unigram","web","weba"].includes(r)}async function ge(r){const e=await E("web_app_request_viewport","viewport_changed",r);return{height:e.height,width:e.width,isExpanded:e.is_expanded,isStateStable:e.is_state_stable}}function F(r){return r<0?0:r}class Je{constructor(e){a(this,"ee",new _);a(this,"state");a(this,"postEvent");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));const{height:t,isExpanded:s,width:n,stableHeight:i,postEvent:c=f}=e;this.postEvent=c,this.state=new C({height:F(t),isExpanded:s,stableHeight:F(i),width:F(n)},this.ee)}sync(e){return ge(e).then(({height:t,isExpanded:s,width:n,isStateStable:i})=>{this.state.set({height:t,width:n,isExpanded:s,stableHeight:i?t:this.state.get("stableHeight")})})}get height(){return this.state.get("height")}get stableHeight(){return this.state.get("stableHeight")}listen(){return y("viewport_changed",e=>{const{height:t,width:s,is_expanded:n,is_state_stable:i}=e,c={height:F(t),isExpanded:n,width:F(s)};i&&(c.stableHeight=c.height),this.state.set(c)})}get isExpanded(){return this.state.get("isExpanded")}get width(){return this.state.get("width")}expand(){this.postEvent("web_app_expand"),this.state.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}function S(r,e){document.documentElement.style.setProperty(r,e)}function Qe(r,e){const t=()=>{S("--tg-background-color",r.backgroundColor)},s=()=>{const{backgroundColor:n,secondaryBackgroundColor:i}=e;if(Y(r.headerColor)){S("--tg-header-color",r.headerColor);return}if(r.headerColor==="bg_color"&&n){S("--tg-header-color",n);return}r.headerColor==="secondary_bg_color"&&i&&S("--tg-header-color",i)};e.on("change",s),r.on("change:backgroundColor",t),r.on("change:headerColor",s),t(),s()}function Ze(r){const e=()=>{const t=r.getState();Object.entries(t).forEach(([s,n])=>{if(n){const i=s.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);S(`--tg-theme-${i}`,n)}})};r.on("change",e),e()}function we(r){const e=()=>S("--tg-viewport-height",`${r.height}px`),t=()=>S("--tg-viewport-width",`${r.width}px`),s=()=>S("--tg-viewport-stable-height",`${r.stableHeight}px`);r.on("change:height",e),r.on("change:width",t),r.on("change:stableHeight",s),e(),t(),s()}function Ot(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),y("set_custom_style",e=>{r.innerHTML=e})}class Wt{constructor(e,t,s=f){a(this,"ee",new _);a(this,"state");a(this,"on",(e,t)=>e==="click"?y("back_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>e==="click"?B("back_button_pressed",t):this.ee.off(e,t));a(this,"supports");this.postEvent=s,this.state=new C({isVisible:e},this.ee),this.supports=P(t,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_back_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Ke(r){return`telegram-mini-apps-${r}`}function O(r,e){sessionStorage.setItem(Ke(r),JSON.stringify(e))}function W(r){const e=sessionStorage.getItem(Ke(r));return e?JSON.parse(e):null}function Mt(r,e,t){const{isVisible:s=!1}=r?W("back-button")||{}:{},n=new Wt(s,e,t);return n.on("change",()=>{O("back-button",{isVisible:n.isVisible})}),n}function Ut(r,e){const{isConfirmationNeeded:t=!1}=r?W("closing-behavior")||{}:{},s=new Re(t,e);return s.on("change",()=>O("closing-behavior",{isConfirmationNeeded:s.isConfirmationNeeded})),s}function xt(r,e,t,s){const{backgroundColor:n=e,isEnabled:i=!1,isVisible:c=!1,isLoaderVisible:h=!1,textColor:p=t,text:l=""}=r?W("main-button")||{}:{},w=new He({backgroundColor:n,isEnabled:i,isLoaderVisible:h,isVisible:c,postEvent:s,text:l,textColor:p}),b=()=>O("main-button",{backgroundColor:w.backgroundColor,isEnabled:w.isEnabled,isLoaderVisible:w.isLoaderVisible,isVisible:w.isVisible,text:w.text,textColor:w.textColor});return w.on("change",b),w}function jt(r,e,t,s,n,i){const{backgroundColor:c=e,headerColor:h="bg_color"}=r?W("mini-app")||{}:{},p=new We({headerColor:h,backgroundColor:c,version:t,botInline:s,createRequestId:n,postEvent:i}),l=()=>O("mini-app",{backgroundColor:p.backgroundColor,headerColor:p.headerColor});return p.on("change",l),p}function Gt(){let r=0;return()=>(r+=1,r.toString())}function Ft(r,e,t){const{isVisible:s=!1}=r?W("settings-button")||{}:{},n=new xe(s,e,t);return n.on("change",()=>{O("settings-button",{isVisible:n.isVisible})}),n}function zt(r){const e=new Ge(r);return e.listen(),e}function ee(r){const e=new Je(r);return e.on("change",()=>O("viewport",{height:e.height,isExpanded:e.isExpanded,stableHeight:e.stableHeight,width:e.width})),e.listen(),e}function Jt(r,e,t,s){const n=r?W("viewport"):null;if(n)return ee({...n,postEvent:t});if(ze(e))return ee({height:window.innerHeight,isExpanded:!0,postEvent:t,stableHeight:window.innerHeight,width:window.innerWidth});if(s)return ge({postEvent:t,timeout:5e3}).then(({height:c,isStateStable:h,...p})=>ee({...p,height:c,stableHeight:h?c:0}));const i=ee({width:0,height:0,isExpanded:!1,postEvent:t,stableHeight:0});return i.sync({postEvent:t,timeout:5e3}).catch(c=>{console.error("Unable to actualize viewport state",c)}),i}function Qt(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function Ye(r,e,t,s){const n=Qt(r);n.miniApp&&Qe(e,t),n.themeParams&&Ze(t),n.viewport&&(s instanceof Promise?s.then(we):we(s))}function Xe(){return X({botInline:{type:v().optional(),from:"tgWebAppBotInline"},initData:{type:le().optional(),from:"tgWebAppData"},initDataRaw:{type:u().optional(),from:"tgWebAppData"},platform:{type:u(),from:"tgWebAppPlatform"},showSettings:{type:v().optional(),from:"tgWebAppShowSettings"},startParam:{type:u().optional(),from:"tgWebAppStartParam"},themeParams:{type:de(),from:"tgWebAppThemeParams"},version:{type:u(),from:"tgWebAppVersion"}},"LaunchParams")}function _e(r){return Xe().parse(r)}function et(r){const e=r.includes("?")?r.replace("#","&").slice(r.indexOf("?")+1):r.slice(r.indexOf("#")+1);return _e(e)}function Zt(){return et(window.location.href)}function tt(){return performance.getEntriesByType("navigation")[0]}function Kt(){const r=tt();if(!r)throw new Error("Unable to get first navigation entry.");return et(r.name)}function rt(r){const{initDataRaw:e,themeParams:t,platform:s,version:n,showSettings:i,startParam:c,botInline:h}=r,p=new URLSearchParams;return e&&p.set("tgWebAppData",e),p.set("tgWebAppPlatform",s),p.set("tgWebAppThemeParams",je(t)),p.set("tgWebAppVersion",n),c&&p.set("tgWebAppStartParam",n),typeof i=="boolean"&&p.set("tgWebAppShowSettings",i?"1":"0"),typeof h=="boolean"&&p.set("tgWebAppBotInline",h?"1":"0"),p.toString()}const st="telegram-mini-apps-launch-params";function Yt(){return _e(sessionStorage.getItem(st)||"")}function Xt(r){sessionStorage.setItem(st,rt(r))}function te(){const r=[];for(const e of[Zt,Kt,Yt])try{const t=e();return Xt(t),t}catch(t){r.push(t)}throw T.error("Unable to extract launch parameters. Received errors:",r),new Error("Unable to retrieve launch parameters from any known source.")}function be(){var r;return((r=tt())==null?void 0:r.type)==="reload"}function er(r={}){const{async:e=!1,complete:t=e,cssVars:s=!1,acceptCustomStyles:n=!1}=r;try{const{initData:i,initDataRaw:c,version:h,platform:p,themeParams:l,botInline:w=!1}=te(),b=be(),M=Gt(),d=ve(h);se()&&(n&&Ot(),d("iframe_ready",{reload_supported:!0}),y("reload_iframe",()=>{d("iframe_will_reload"),window.location.reload()}));const V={backButton:Mt(b,h,d),closingBehavior:Ut(b,d),cloudStorage:new Le(h,M,d),createRequestId:M,hapticFeedback:new Be(h,d),invoice:new Ne(h,d),mainButton:xt(b,l.buttonColor||"#000000",l.buttonTextColor||"#ffffff",d),miniApp:jt(b,l.backgroundColor||"#ffffff",h,w,M,d),popup:new Me(h,d),postEvent:d,qrScanner:new Ue(h,d),settingsButton:Ft(b,h,d),themeParams:zt(l),utils:new Fe(h,M,d),...i?{initData:new De(i),initDataRaw:c}:{}},$=Jt(b,p,d,t);return $ instanceof Promise||t?Promise.resolve($).then(R=>(Ye(s,V.miniApp,V.themeParams,R),{...V,viewport:R})):(Ye(s,V.miniApp,V.themeParams,$),{...V,viewport:$})}catch(i){if(t)return Promise.reject(i);throw i}}function tr(){return{launchParams:te(),isPageReload:be()}}function rr(){try{return te(),!0}catch{return!1}}function sr(r){const e=r.match(/#(.+)/);return e?e[1]:null}async function z(r){return r===0?!0:Promise.race([new Promise(e=>{window.addEventListener("popstate",function t(){window.removeEventListener("popstate",t),e(!0)}),window.history.go(r)}),new Promise(e=>{setTimeout(e,50,!1)})])}async function nr(){if(window.history.length<=1||(window.history.pushState(null,""),await z(1-window.history.length)))return;let e=await z(-1);for(;e;)e=await z(-1)}function J(r,e){return r.startsWith(e)?r:`${e}${r}`}class nt{constructor(e,t,{debug:s=!1,loggerPrefix:n="Navigator"}){a(this,"logger");a(this,"entries");if(this.entriesCursor=t,e.length===0)throw new Error("Entries list should not be empty.");if(t>=e.length)throw new Error("Cursor should be less than entries count.");this.entries=e.map(({pathname:i="",search:c,hash:h})=>{if(!i.startsWith("/")&&i.length>0)throw new Error('Pathname should start with "/"');return{pathname:J(i,"/"),search:c?J(c,"?"):"",hash:h?J(h,"#"):""}}),this.logger=new m(`[${n}]`,s)}formatEntry(e){let t;if(typeof e=="string")t=e;else{const{pathname:c="",search:h,hash:p}=e;t=c+(h?J(h,"?"):"")+(p?J(p,"#"):"")}const{pathname:s,search:n,hash:i}=new URL(t,`https://localhost${this.path}`);return{pathname:s,search:n,hash:i}}get entry(){return this.entries[this.entriesCursor]}back(){return this.go(-1)}get cursor(){return this.entriesCursor}get canGoBack(){return this.entriesCursor>0}get canGoForward(){return this.entriesCursor!==this.entries.length-1}forward(){return this.go(1)}go(e){this.logger.log(`called go(${e})`);const t=Math.min(this.entries.length-1,Math.max(this.entriesCursor+e,0));if(this.entriesCursor===t)return this.performGo({updated:!1,delta:e});const s=this.entry;this.entriesCursor=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performGo({updated:!0,delta:e,before:s,after:n})}getEntries(){return this.entries.map(e=>({...e}))}get hash(){return this.entry.hash}push(e){this.entriesCursor!==this.entries.length-1&&this.entries.splice(this.entriesCursor+1);const t=this.formatEntry(e),s=this.entry;this.entriesCursor+=1,this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performPush({before:s,after:n})}get path(){return`${this.pathname}${this.search}${this.hash}`}get pathname(){return this.entry.pathname}replace(e){const t=this.formatEntry(e);if(this.search===t.search&&this.pathname===t.pathname&&this.hash===t.hash)return this.performReplace({updated:!1,entry:t});const s=this.entry;this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performReplace({updated:!0,before:s,after:n})}get search(){return this.entry.search}}const it=0,me=1,ye=2;class Ee extends nt{constructor(t,s,n={}){super(t,s,{...n,loggerPrefix:"HashNavigator"});a(this,"ee",new _);a(this,"attached",!1);a(this,"onPopState",async({state:t})=>{if(this.logger.log('"popstate" event received. State:',t),t===null)return this.push(window.location.hash.slice(1));if(t===it){this.logger.log("Void reached. Moving history forward"),window.history.forward();return}if(t===me)return this.back();if(t===ye)return this.forward()});a(this,"back",()=>super.back());a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee))}static fromLocation(t){const{search:s,pathname:n,hash:i}=new URL(window.location.hash.slice(1),window.location.href);return new Ee([{search:s,pathname:n,hash:i}],0,t)}async performGo(t){t.updated&&(this.attached&&await this.syncHistory(),this.emitChanged(t.before,t.after))}async performPush({before:t,after:s}){this.attached&&await this.syncHistory(),this.emitChanged(t,s)}async performReplace(t){t.updated&&(this.attached&&window.history.replaceState(null,"",`#${this.path}`),this.emitChanged(t.before,t.after))}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const t=`#${this.path}`;await nr(),f("web_app_setup_back_button",{is_visible:this.canGoBack}),this.canGoBack&&this.canGoForward?(this.logger.log("Setting up history: [<-, *, ->]"),window.history.replaceState(me,""),window.history.pushState(null,"",t),window.history.pushState(ye,""),await z(-1)):this.canGoBack?(this.logger.log("Setting up history: [<-, *]"),window.history.replaceState(me,""),window.history.pushState(null,"",t)):this.canGoForward?(this.logger.log("Setting up history: [*, ->]"),window.history.replaceState(null,t),window.history.pushState(ye,""),await z(-1)):(this.logger.log("Setting up history: [~, *]"),window.history.replaceState(it,""),window.history.pushState(null,"",t)),window.addEventListener("popstate",this.onPopState)}emitChanged(t,s){this.ee.emit("change",{navigator:this,from:t,to:s})}async attach(){if(!this.attached)return this.logger.log("Attaching",this),this.attached=!0,y("back_button_pressed",this.back),this.syncHistory()}detach(){this.attached&&(this.logger.log("Detaching",this),this.attached=!1,window.removeEventListener("popstate",this.onPopState),B("back_button_pressed",this.back))}}function ir(r){return r instanceof G}return o.ClosingBehavior=Re,o.CloudStorage=Le,o.HapticFeedback=Be,o.HashNavigator=Ee,o.InitData=De,o.Invoice=Ne,o.MainButton=He,o.MethodUnsupportedError=Q,o.MiniApp=We,o.Navigator=nt,o.ParameterUnsupportedError=Z,o.ParseError=U,o.ParseSchemaFieldError=x,o.Popup=Me,o.QRScanner=Ue,o.SettingsButton=xe,o.ThemeParams=Ge,o.TimeoutError=G,o.Utils=Fe,o.Viewport=Je,o.array=Te,o.bindMiniAppCSSVars=Qe,o.bindThemeCSSVars=Ze,o.bindViewportCSSVars=we,o.boolean=v,o.chatParser=$e,o.classNames=Ve,o.compareVersions=Ce,o.createPostEvent=ve,o.date=pe,o.getHash=sr,o.init=er,o.initDataParser=le,o.invokeCustomMethod=H,o.isColorDark=he,o.isIframe=se,o.isPageReload=be,o.isRGB=Y,o.isRGBShort=ke,o.isRecord=I,o.isStableViewportPlatform=ze,o.isTMA=rr,o.isTimeoutError=ir,o.json=g,o.launchParamsParser=Xe,o.mergeClassNames=At,o.number=A,o.off=B,o.on=y,o.once=kt,o.parseInitData=Tt,o.parseLaunchParams=_e,o.parseMessage=Se,o.parseThemeParams=fe,o.postEvent=f,o.request=E,o.requestThemeParams=Ht,o.requestViewport=ge,o.retrieveLaunchData=tr,o.retrieveLaunchParams=te,o.rgb=oe,o.searchParams=X,o.serializeLaunchParams=rt,o.serializeThemeParams=je,o.setCSSVar=S,o.setDebug=ot,o.setTargetOrigin=at,o.string=u,o.subscribe=qt,o.supports=L,o.themeParamsParser=de,o.toRGB=ie,o.unsubscribe=qe,o.userParser=ue,o.withTimeout=ce,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),o}({});