@tma.js/sdk 1.4.9 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dts/bridge/captureSameReq.d.ts +10 -0
- package/dist/dts/bridge/events/on.d.ts +1 -4
- package/dist/dts/bridge/events/once.d.ts +2 -3
- package/dist/dts/bridge/events/subscribe.d.ts +2 -3
- package/dist/dts/bridge/events/types.d.ts +4 -0
- package/dist/dts/bridge/methods/methods.d.ts +5 -7
- package/dist/dts/bridge/request.d.ts +36 -40
- package/dist/dts/classnames/classNames.d.ts +4 -2
- package/dist/dts/components/theme-params/ThemeParams.d.ts +1 -1
- package/dist/dts/components/theme-params/requestThemeParams.d.ts +2 -2
- package/dist/dts/components/viewport/Viewport.d.ts +3 -3
- package/dist/dts/components/viewport/requestViewport.d.ts +2 -2
- package/dist/dts/index.d.ts +3 -1
- package/dist/dts/timeout/withTimeout.d.ts +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.iife.js +1 -1
- package/dist/index.mjs +459 -450
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type CaptureSameReqFn = (payload: {
|
|
2
|
+
req_id: string;
|
|
3
|
+
}) => boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Returns a function which can be used in `request` function `capture` property to capture
|
|
6
|
+
* the event with the same request identifier.
|
|
7
|
+
* @param reqId - request identifier.
|
|
8
|
+
*/
|
|
9
|
+
export declare function captureSameReq(reqId: string): CaptureSameReqFn;
|
|
10
|
+
export {};
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { MiniAppsEventListener, MiniAppsEventName } from './events.js';
|
|
2
|
-
|
|
3
|
-
* Removes event listener.
|
|
4
|
-
*/
|
|
5
|
-
export type RemoveListenerFn = () => void;
|
|
2
|
+
import type { RemoveListenerFn } from './types.js';
|
|
6
3
|
/**
|
|
7
4
|
* Adds new listener to the specified event. Returns handler
|
|
8
5
|
* which allows to stop listening to event.
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { MiniAppsEventListener, MiniAppsEventName } from './events.js';
|
|
2
|
-
type
|
|
2
|
+
import type { RemoveListenerFn } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Works the same as "on" method, but after catching the event, will remove event listener.
|
|
5
5
|
* @param event - event name.
|
|
6
6
|
* @param listener - event listener.
|
|
7
7
|
*/
|
|
8
|
-
export declare function once<E extends MiniAppsEventName>(event: E, listener: MiniAppsEventListener<E>):
|
|
9
|
-
export {};
|
|
8
|
+
export declare function once<E extends MiniAppsEventName>(event: E, listener: MiniAppsEventListener<E>): RemoveListenerFn;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { MiniAppsGlobalEventListener } from './events.js';
|
|
2
|
-
type
|
|
2
|
+
import type { RemoveListenerFn } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Subscribes to all events sent from the native Telegram application.
|
|
5
5
|
* Returns function used to remove added event listener.
|
|
6
6
|
* @param listener - event listener.
|
|
7
7
|
*/
|
|
8
|
-
export declare function subscribe(listener: MiniAppsGlobalEventListener):
|
|
9
|
-
export {};
|
|
8
|
+
export declare function subscribe(listener: MiniAppsGlobalEventListener): RemoveListenerFn;
|
|
@@ -2,7 +2,7 @@ import type { AnyInvokeCustomMethodParams } from './custom-methods.js';
|
|
|
2
2
|
import type { AnyHapticFeedbackParams } from './haptic.js';
|
|
3
3
|
import type { PopupParams } from './popup.js';
|
|
4
4
|
import type { RGB } from '../../colors/types.js';
|
|
5
|
-
import type { Not } from '../../types/logical.js';
|
|
5
|
+
import type { If, Not } from '../../types/logical.js';
|
|
6
6
|
import type { RequestId } from '../../types/request-id.js';
|
|
7
7
|
import type { UnionKeys } from '../../types/unions.js';
|
|
8
8
|
import type { IsNever } from '../../types/utils.js';
|
|
@@ -14,7 +14,7 @@ export type HeaderColorKey = 'bg_color' | 'secondary_bg_color';
|
|
|
14
14
|
* Chat type which could be used when calling `web_app_switch_inline_query` method.
|
|
15
15
|
*/
|
|
16
16
|
export type SwitchInlineQueryChatType = 'users' | 'bots' | 'groups' | 'channels';
|
|
17
|
-
interface CreateParams<Params =
|
|
17
|
+
interface CreateParams<Params = never, VersionedParam extends UnionKeys<Params> = never> {
|
|
18
18
|
params: Params;
|
|
19
19
|
versionedParams: VersionedParam;
|
|
20
20
|
}
|
|
@@ -306,19 +306,17 @@ export type MiniAppsMethodParams<M extends MiniAppsMethodName> = MiniAppsMethods
|
|
|
306
306
|
/**
|
|
307
307
|
* True if specified method accepts parameters.
|
|
308
308
|
*/
|
|
309
|
-
export type MiniAppsMethodAcceptParams<M extends MiniAppsMethodName> = Not<IsNever<
|
|
309
|
+
export type MiniAppsMethodAcceptParams<M extends MiniAppsMethodName> = Not<IsNever<MiniAppsMethodParams<M>>>;
|
|
310
310
|
/**
|
|
311
311
|
* Any post-available event name which does not require arguments.
|
|
312
312
|
*/
|
|
313
313
|
export type MiniAppsEmptyMethodName = {
|
|
314
|
-
[
|
|
314
|
+
[Method in MiniAppsMethodName]: If<MiniAppsMethodAcceptParams<Method>, never, Method>;
|
|
315
315
|
}[MiniAppsMethodName];
|
|
316
316
|
/**
|
|
317
317
|
* Any post-available event name which require arguments.
|
|
318
318
|
*/
|
|
319
|
-
export type MiniAppsNonEmptyMethodName =
|
|
320
|
-
[M in MiniAppsMethodName]: MiniAppsMethodAcceptParams<M> extends true ? M : never;
|
|
321
|
-
}[MiniAppsMethodName];
|
|
319
|
+
export type MiniAppsNonEmptyMethodName = Exclude<MiniAppsMethodName, MiniAppsEmptyMethodName>;
|
|
322
320
|
/**
|
|
323
321
|
* Method names which have versioned params.
|
|
324
322
|
*/
|
|
@@ -1,58 +1,54 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { MiniAppsEmptyMethodName,
|
|
3
|
-
import type {
|
|
1
|
+
import type { MiniAppsEventName, MiniAppsEventParams } from './events/events.js';
|
|
2
|
+
import type { MiniAppsEmptyMethodName, MiniAppsMethodName, MiniAppsMethodParams, MiniAppsNonEmptyMethodName } from './methods/methods.js';
|
|
3
|
+
import type { If } from '../types/logical.js';
|
|
4
4
|
import type { ExecuteWithOptions } from '../types/methods.js';
|
|
5
5
|
import type { IsNever } from '../types/utils.js';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Simple `request` method options.
|
|
8
8
|
*/
|
|
9
|
-
type
|
|
10
|
-
[M in MiniAppsMethodName]: If<And<MiniAppsMethodAcceptParams<M>, MiniAppsMethodParams<M> extends {
|
|
11
|
-
req_id: string;
|
|
12
|
-
} ? true : false>, M, never>;
|
|
13
|
-
}[MiniAppsMethodName];
|
|
9
|
+
export type RequestSimpleOptions<Method extends MiniAppsMethodName> = Omit<RequestCompleteOptions<Method, any>, 'method' | 'event'>;
|
|
14
10
|
/**
|
|
15
|
-
*
|
|
11
|
+
* Complete `request` method options.
|
|
16
12
|
*/
|
|
17
|
-
type
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
export type RequestCompleteOptions<Method extends MiniAppsMethodName, Event extends MiniAppsEventName> = {
|
|
14
|
+
/**
|
|
15
|
+
* Mini Apps method name.
|
|
16
|
+
*/
|
|
17
|
+
method: Method;
|
|
18
|
+
/**
|
|
19
|
+
* One or many tracked Mini Apps events.
|
|
20
|
+
*/
|
|
21
|
+
event: Event | Event[];
|
|
25
22
|
/**
|
|
26
23
|
* Should return true in case, this event should be captured. If not specified,
|
|
27
24
|
* request is not skipping captured events.
|
|
28
25
|
*/
|
|
29
|
-
capture?: If<IsNever<
|
|
30
|
-
}
|
|
26
|
+
capture?: If<IsNever<MiniAppsEventParams<Event>>, () => boolean, (payload: MiniAppsEventParams<Event>) => boolean>;
|
|
27
|
+
} & ExecuteWithOptions & If<IsNever<MiniAppsMethodParams<Method>>, {}, {
|
|
28
|
+
/**
|
|
29
|
+
* List of method parameters.
|
|
30
|
+
*/
|
|
31
|
+
params: MiniAppsMethodParams<Method>;
|
|
32
|
+
}>;
|
|
31
33
|
/**
|
|
32
|
-
* Calls specified
|
|
33
|
-
* which will be resolved in case,
|
|
34
|
-
*
|
|
35
|
-
* @param method - method to execute.
|
|
36
|
-
* @param params - method parameters.
|
|
37
|
-
* @param event - event or events to listen.
|
|
38
|
-
* @param options - additional execution options.
|
|
34
|
+
* Calls specified Mini Apps method and captures one of the specified events. Returns promise
|
|
35
|
+
* which will be resolved in case, specified event was captured.
|
|
36
|
+
* @param options - method options.
|
|
39
37
|
*/
|
|
40
|
-
export declare function request<
|
|
38
|
+
export declare function request<Method extends MiniAppsEmptyMethodName, Event extends MiniAppsEventName>(options: RequestCompleteOptions<Method, Event>): Promise<MiniAppsEventParams<Event>>;
|
|
41
39
|
/**
|
|
42
|
-
* Calls specified
|
|
40
|
+
* Calls specified Mini Apps method and captures one of the specified events. Returns promise
|
|
43
41
|
* which will be resolved in case, specified event was captured.
|
|
44
|
-
* @param method - method
|
|
45
|
-
* @param
|
|
46
|
-
* @param options -
|
|
42
|
+
* @param method - method name.
|
|
43
|
+
* @param eventOrEvents - tracked event or events.
|
|
44
|
+
* @param options - method options.
|
|
47
45
|
*/
|
|
48
|
-
export declare function request<
|
|
46
|
+
export declare function request<Method extends MiniAppsNonEmptyMethodName, Event extends MiniAppsEventName>(method: Method, eventOrEvents: Event | Event[], options: RequestSimpleOptions<Method>): Promise<MiniAppsEventParams<Event>>;
|
|
49
47
|
/**
|
|
50
|
-
* Calls specified
|
|
48
|
+
* Calls specified Mini Apps method and captures one of the specified events. Returns promise
|
|
51
49
|
* which will be resolved in case, specified event was captured.
|
|
52
|
-
* @param method - method
|
|
53
|
-
* @param
|
|
54
|
-
* @param
|
|
55
|
-
* @param options - additional execution options.
|
|
50
|
+
* @param method - method name.
|
|
51
|
+
* @param eventOrEvents - tracked event or events.
|
|
52
|
+
* @param options - method options.
|
|
56
53
|
*/
|
|
57
|
-
export declare function request<
|
|
58
|
-
export {};
|
|
54
|
+
export declare function request<Method extends MiniAppsEmptyMethodName, Event extends MiniAppsEventName>(method: Method, eventOrEvents: Event | Event[], options?: RequestSimpleOptions<Method>): Promise<MiniAppsEventParams<Event>>;
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
* Function which joins passed values with space following these rules:
|
|
3
3
|
* 1. If value is non-empty string, it will be added to output.
|
|
4
4
|
* 2. If value is object, only those keys will be added, which values are truthy.
|
|
5
|
-
* 3.
|
|
5
|
+
* 3. If value is array, classNames will be called with this value spread.
|
|
6
|
+
* 4. All other values are ignored.
|
|
6
7
|
*
|
|
7
|
-
* You can find this function to similar one from package {@link https://www.npmjs.com/package/classnames|classnames}.
|
|
8
|
+
* You can find this function to similar one from the package {@link https://www.npmjs.com/package/classnames|classnames}.
|
|
8
9
|
* @param values - values array.
|
|
10
|
+
* @returns Final class name.
|
|
9
11
|
*/
|
|
10
12
|
export declare function classNames(...values: any[]): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ThemeParamsEvents, ThemeParamsParsed } from './types.js';
|
|
2
|
-
import type { RemoveListenerFn } from '../../bridge/events/
|
|
2
|
+
import type { RemoveListenerFn } from '../../bridge/events/types.js';
|
|
3
3
|
import type { RGB } from '../../colors/types.js';
|
|
4
4
|
import { EventEmitter } from '../../event-emitter/EventEmitter.js';
|
|
5
5
|
type Emitter = EventEmitter<ThemeParamsEvents>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ThemeParamsParsed } from './types.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { RequestSimpleOptions } from '../../bridge/request.js';
|
|
3
3
|
/**
|
|
4
4
|
* Requests current theme parameters from the Telegram application.
|
|
5
5
|
* @param options - request options.
|
|
6
6
|
*/
|
|
7
|
-
export declare function requestThemeParams(options?:
|
|
7
|
+
export declare function requestThemeParams(options?: RequestSimpleOptions<'web_app_request_theme'>): Promise<ThemeParamsParsed>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ViewportEvents, ViewportProps } from './types.js';
|
|
2
|
-
import type { RemoveListenerFn } from '../../bridge/events/
|
|
3
|
-
import type {
|
|
2
|
+
import type { RemoveListenerFn } from '../../bridge/events/types.js';
|
|
3
|
+
import type { RequestSimpleOptions } from '../../bridge/request.js';
|
|
4
4
|
import { EventEmitter } from '../../event-emitter/EventEmitter.js';
|
|
5
5
|
type Emitter = EventEmitter<ViewportEvents>;
|
|
6
6
|
/**
|
|
@@ -17,7 +17,7 @@ export declare class Viewport {
|
|
|
17
17
|
* instance.
|
|
18
18
|
* @param options - options to request fresh data.
|
|
19
19
|
*/
|
|
20
|
-
sync(options?:
|
|
20
|
+
sync(options?: RequestSimpleOptions<'web_app_request_viewport'>): Promise<void>;
|
|
21
21
|
/**
|
|
22
22
|
* The current height of the visible area of the Mini App.
|
|
23
23
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RequestSimpleOptions } from '../../bridge/request.js';
|
|
2
2
|
export interface RequestViewportResult {
|
|
3
3
|
height: number;
|
|
4
4
|
isStateStable: boolean;
|
|
@@ -9,4 +9,4 @@ export interface RequestViewportResult {
|
|
|
9
9
|
* Requests viewport actual information from the Telegram application.
|
|
10
10
|
* @param options - request options.
|
|
11
11
|
*/
|
|
12
|
-
export declare function requestViewport(options?:
|
|
12
|
+
export declare function requestViewport(options?: RequestSimpleOptions<'web_app_request_viewport'>): Promise<RequestViewportResult>;
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { off } from './bridge/events/off.js';
|
|
|
8
8
|
export { once } from './bridge/events/once.js';
|
|
9
9
|
export { parseMessage } from './bridge/parseMessage.js';
|
|
10
10
|
export { postEvent, type PostEvent } from './bridge/methods/postEvent.js';
|
|
11
|
-
export { request, type
|
|
11
|
+
export { request, type RequestSimpleOptions, type RequestCompleteOptions, } from './bridge/request.js';
|
|
12
12
|
export { subscribe } from './bridge/events/subscribe.js';
|
|
13
13
|
export { unsubscribe } from './bridge/events/unsubscribe.js';
|
|
14
14
|
export { MethodUnsupportedError } from './bridge/errors/MethodUnsupportedError.js';
|
|
@@ -35,6 +35,8 @@ export type { RGB, RGBShort } from './colors/types.js';
|
|
|
35
35
|
/**
|
|
36
36
|
* Components.
|
|
37
37
|
*/
|
|
38
|
+
export { BackButton } from './components/back-button/BackButton.js';
|
|
39
|
+
export type { BackButtonEventListener, BackButtonEventName, BackButtonEvents, } from './components/back-button/types.js';
|
|
38
40
|
export { ClosingBehavior } from './components/closing-behavior/ClosingBehavior.js';
|
|
39
41
|
export type { ClosingBehaviorEventListener, ClosingBehaviorEventName, ClosingBehaviorEvents, } from './components/closing-behavior/types.js';
|
|
40
42
|
export { CloudStorage } from './components/cloud-storage/CloudStorage.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Accepts specified function and instantly executes. It waits for timeout milliseconds for
|
|
3
3
|
* it to complete and throws an error in case, deadline was reached.
|
|
4
|
-
* @param
|
|
4
|
+
* @param funcOrPromise - function to execute or pending promise.
|
|
5
5
|
* @param timeout - completion timeout.
|
|
6
6
|
*/
|
|
7
|
-
export declare function withTimeout<T>(
|
|
7
|
+
export declare function withTimeout<T>(funcOrPromise: Promise<T> | (() => Promise<T>), timeout: number): Promise<T>;
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
+
"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"});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 x=new ve("[SDK]",!1);function ct(r){if(r){x.enable();return}x.disable()}function ht(r){Pe=r}function ut(){return Pe}function ne(){try{return window.self!==window.top}catch{return!0}}function T(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function pt(r){return"external"in r&&T(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function lt(r){return"TelegramWebviewProxy"in r&&T(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=ut()}=s;if(x.log(`Calling method "${r}"`,n),ne()){window.parent.postMessage(JSON.stringify({eventType:r,eventData:n}),i);return}if(pt(window)){window.external.notify(JSON.stringify({eventType:r,eventData:n}));return}if(lt(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 S(r,e){return Se(r,e)<=0}function q(r,e,t){if(typeof t=="string"){if(r==="web_app_open_link"&&e==="try_instant_view")return S("6.4",t);if(r==="web_app_set_header_color"&&e==="color")return S("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 S("6.1",e);case"web_app_open_popup":return S("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 S("6.4",e);case"web_app_switch_inline_query":return S("6.7",e);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return S("6.9",e);case"web_app_setup_settings_button":return S("6.10",e);default:return!0}}class z extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,z.prototype)}}class J extends Error{constructor(e,t,s){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${s}.`),Object.setPrototypeOf(this,J.prototype)}}function ke(r){return(e,t)=>{if(!q(e,r))throw new z(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&&!q(e,s,r))throw new J(e,s,r)}return d(e,t)}}function xe(r){return({req_id:e})=>e===r}class W 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,W.prototype),this.type=n}}class H extends Error{constructor(e,{cause:t,type:s}={}){super(`Unable to parse field "${e}"${s?` as ${s}`:""}`,{cause:t}),Object.setPrototypeOf(this,H.prototype)}}function qe(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 W?new H(i,{type:p.type,cause:p}):new H(i,{cause:p})}c!==void 0&&(t[s]=c)}return t}function I(){return new TypeError("Value has unexpected type")}function ie(r){let e=r;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw I();return e}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 W(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}}function f(r,e){return new Q(t=>{const s=ie(t);return qe(r,n=>s[n])},!1,e)}function L(r,e){return()=>new Q(r,!1,e)}const h=L(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw I()},"string");function Ae(r){return f({eventType:h(),eventData:e=>e}).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}=Ae(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 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},"#")}const ae=L(r=>oe(h().parse(r)),"rgb");function Ct(){return f({theme_params:r=>{const e=ae().optional();return Object.entries(ie(r)).reduce((t,[s,n])=>(t[s]=e.parse(n),t),{})}})}const C=L(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 I()},"boolean"),k=L(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const e=Number(r);if(!Number.isNaN(e))return e}throw I()},"number");function vt(){return f({height:k(),width:r=>r==null?window.innerWidth:k().parse(r),is_state_stable:C(),is_expanded:C()})}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)=>{x.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)=>{x.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){x.error("Error processing event:",n)}}),r}const X="telegram-mini-apps-cached-emitter";function M(){const r=window;return r[X]===void 0&&(r[X]=St()),r[X]}function A(r,e){M().off(r,e)}function y(r,e){return M().on(r,e),()=>A(r,e)}class U extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,U.prototype)}}function kt(r){return new Promise((e,t)=>{setTimeout(t,r,new U(r))})}function ce(r,e){return Promise.race([typeof r=="function"?r():r,kt(e)])}async function m(r,e,t){let s;const n=new Promise(b=>{s=b}),i=e?{...t,event:e,method:r}:r,{method:a,event:c,capture:u,postEvent:p=d,timeout:g}=i,_=(Array.isArray(c)?c:[c]).map(b=>y(b,l=>(!u||u(l))&&s(l)));try{return p(a,i.params),await(g?ce(n,g):n)}finally{_.forEach(b=>b())}}async function R(r,e,t,s={}){const{result:n,error:i}=await m("web_app_invoke_custom_method","custom_method_invoked",{...s,params:{method:r,params:e,req_id:t},capture:xe(t)});if(i)throw new Error(i);return n}function xt(r,e){return M().once(r,e),()=>A(r,e)}function Re(r){M().unsubscribe(r)}function qt(r){return M().subscribe(r),()=>Re(r)}function j(r,e){return r+(r.length&&e.length?` ${e}`:e)}function he(...r){return r.reduce((e,t)=>typeof t=="string"?j(e,t):T(t)?j(e,Object.entries(t).reduce((s,n)=>n[1]?j(s,n[0]):s,"")):Array.isArray(t)?j(e,he(...t)):e,"")}function At(...r){return r.reduce((e,t)=>(T(t)&&Object.entries(t).forEach(([s,n])=>{const i=he(e[s],n);i.length>0&&(e[s]=i)}),e),{})}function ue(r){const e=oe(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 E{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]}}function P(r,e){return t=>q(e[t],r)}class Te{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"?A("back_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new E({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}}class Ie{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 E({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 I()}class Rt extends Q{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 Le(r){return new Rt(e=>e,!1,r)}function ye(r,e){return r.reduce((t,s)=>(t[s]=e,t),{})}class Be{constructor(e,t,s=d){o(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 R("deleteStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent})}async getKeys(e={}){const t=await R("getStorageKeys",{},this.createRequestId(),{...e,postEvent:this.postEvent});return Le().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 R("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 R("saveStorageValue",{key:e,value:t},this.createRequestId(),{...s,postEvent:this.postEvent})}}class $e{constructor(e,t=d){o(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 De(){return f({id:k(),type:h(),title:h(),photoUrl:{type:h().optional(),from:"photo_url"},username:h().optional()},"Chat")}class Oe{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 re(){return f({addedToAttachmentMenu:{type:C().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:C().optional(),from:"allows_write_to_pm"},firstName:{type:h(),from:"first_name"},id:k(),isBot:{type:C().optional(),from:"is_bot"},isPremium:{type:C().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=L(r=>r instanceof Date?r:new Date(k().parse(r)*1e3),"Date");function K(r,e){return new Q(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw I();const s=typeof t=="string"?new URLSearchParams(t):t;return qe(r,n=>{const i=s.get(n);return i===null?void 0:i})},!1,e)}function le(){return K({authDate:{type:pe(),from:"auth_date"},canSendAfter:{type:k().optional(),from:"can_send_after"},chat:De().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:re().optional(),startParam:{type:h().optional(),from:"start_param"},user:re().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 E({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 m("web_app_open_invoice","invoice_closed",{params:{slug:s},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"?y("main_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?A("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 E({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=K({contact:f({userId:{type:k(),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 We(r,e){return t=>{const[s,n]=e[t];return q(s,n,r)}}function Bt(r){return new Promise(e=>{setTimeout(e,r)})}class Me{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=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=a,this.createRequestId=c,this.supports=p=>!(!u(p)||p==="switchInlineQuery"&&!a),this.state=new E({backgroundColor:n,headerColor:s},this.ee),this.supportsParam=We(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact(){return R("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 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,m("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,m("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 $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 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 E({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,m("web_app_open_popup","popup_closed",{postEvent:this.postEvent,params:$t(e)}).then(({button_id:t=null})=>t).finally(()=>{this.isOpened=!1})}}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));o(this,"supports");this.postEvent=t,this.state=new E({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 m("web_app_open_scan_qr_popup",["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent,params:{text:e}});return typeof t=="object"&&typeof t.data=="string"?t.data:null}finally{this.isOpened=!1}}}class je{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"?A("settings_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new E({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 Ot(r){return r.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const de=L(r=>{const e=ae().optional();return Object.entries(ie(r)).reduce((t,[s,n])=>(t[Dt(s)]=e.parse(n),t),{})},"ThemeParams");function fe(r){return de().parse(r)}function Nt(r){return m("web_app_request_theme","theme_changed",r).then(fe)}function Fe(r){return JSON.stringify(Object.entries(r).reduce((e,[t,s])=>(s&&(e[Ot(t)]=s),e),{}))}class ze{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 E(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")}}class Je{constructor(e,t,s=d){o(this,"supports");o(this,"supportsParam");this.version=e,this.createRequestId=t,this.postEvent=s,this.supports=P(e,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),this.supportsParam=We(e,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(e,t){const s=new URL(e,window.location.href).toString();if(!q("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(!q("web_app_open_tg_link",this.version)){window.location.href=e;return}this.postEvent("web_app_open_tg_link",{path_full:s+n})}async readTextFromClipboard(){const e=this.createRequestId(),{data:t=null}=await m("web_app_read_text_from_clipboard","clipboard_text_received",{postEvent:this.postEvent,params:{req_id:e},capture:xe(e)});return t}}function Qe(r){return["macos","tdesktop","unigram","web","weba"].includes(r)}async function ge(r){const e=await m("web_app_request_viewport","viewport_changed",r);return{height:e.height,width:e.width,isExpanded:e.is_expanded,isStateStable:e.is_state_stable}}function D(r){return r<0?0:r}class Ze{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 E({height:D(t),isExpanded:s,stableHeight:D(i),width:D(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,a={height:D(t),isExpanded:n,width:D(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 v(r,e){document.documentElement.style.setProperty(r,e)}function Ke(r,e){const t=()=>{v("--tg-background-color",r.backgroundColor)},s=()=>{const{backgroundColor:n,secondaryBackgroundColor:i}=e;if(Z(r.headerColor)){v("--tg-header-color",r.headerColor);return}if(r.headerColor==="bg_color"&&n){v("--tg-header-color",n);return}r.headerColor==="secondary_bg_color"&&i&&v("--tg-header-color",i)};e.on("change",s),r.on("change:backgroundColor",t),r.on("change:headerColor",s),t(),s()}function Ye(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()}`);v(`--tg-theme-${i}`,n)}})};r.on("change",e),e()}function se(r){const e=()=>v("--tg-viewport-height",`${r.height}px`),t=()=>v("--tg-viewport-width",`${r.width}px`),s=()=>v("--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 Ht(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),y("set_custom_style",e=>{r.innerHTML=e})}function Xe(r){return`telegram-mini-apps-${r}`}function B(r,e){sessionStorage.setItem(Xe(r),JSON.stringify(e))}function $(r){const e=sessionStorage.getItem(Xe(r));return e?JSON.parse(e):null}function Wt(r,e,t){const{isVisible:s=!1}=r?$("back-button")||{}:{},n=new Te(s,e,t);return n.on("change",()=>{B("back-button",{isVisible:n.isVisible})}),n}function Mt(r,e){const{isConfirmationNeeded:t=!1}=r?$("closing-behavior")||{}:{},s=new Ie(t,e);return s.on("change",()=>B("closing-behavior",{isConfirmationNeeded:s.isConfirmationNeeded})),s}function Ut(r,e,t,s){const{backgroundColor:n=e,isEnabled:i=!1,isVisible:a=!1,isLoaderVisible:c=!1,textColor:u=t,text:p=""}=r?$("main-button")||{}:{},g=new He({backgroundColor:n,isEnabled:i,isLoaderVisible:c,isVisible:a,postEvent:s,text:p,textColor:u}),_=()=>B("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 Gt(r,e,t,s,n,i){const{backgroundColor:a=e,headerColor:c="bg_color"}=r?$("mini-app")||{}:{},u=new Me({headerColor:c,backgroundColor:a,version:t,botInline:s,createRequestId:n,postEvent:i}),p=()=>B("mini-app",{backgroundColor:u.backgroundColor,headerColor:u.headerColor});return u.on("change",p),u}function jt(){let r=0;return()=>(r+=1,r.toString())}function Ft(r,e,t){const{isVisible:s=!1}=r?$("settings-button")||{}:{},n=new je(s,e,t);return n.on("change",()=>{B("settings-button",{isVisible:n.isVisible})}),n}function zt(r){const e=new ze(r);return e.listen(),e}function F(r){const e=new Ze(r);return e.on("change",()=>B("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?$("viewport"):null;if(n)return F({...n,postEvent:t});if(Qe(e))return F({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})=>F({...u,height:a,stableHeight:c?a:0}));const i=F({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 Qt(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function Ee(r,e,t,s){const n=Qt(r);n.miniApp&&Ke(e,t),n.themeParams&&Ye(t),n.viewport&&(s instanceof Promise?s.then(se):se(s))}function et(){return K({botInline:{type:C().optional(),from:"tgWebAppBotInline"},initData:{type:le().optional(),from:"tgWebAppData"},initDataRaw:{type:h().optional(),from:"tgWebAppData"},platform:{type:h(),from:"tgWebAppPlatform"},showSettings:{type:C().optional(),from:"tgWebAppShowSettings"},startParam:{type:h().optional(),from:"tgWebAppStartParam"},themeParams:{type:de(),from:"tgWebAppThemeParams"},version:{type:h(),from:"tgWebAppVersion"}},"LaunchParams")}function we(r){return et().parse(r)}function tt(r){const e=r.includes("?")?r.replace("#","&").slice(r.indexOf("?")+1):r.slice(r.indexOf("#")+1);return we(e)}function Zt(){return tt(window.location.href)}function rt(){return performance.getEntriesByType("navigation")[0]}function Kt(){const r=rt();if(!r)throw new Error("Unable to get first navigation entry.");return tt(r.name)}function st(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",Fe(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 nt="telegram-mini-apps-launch-params";function Yt(){return we(sessionStorage.getItem(nt)||"")}function Xt(r){sessionStorage.setItem(nt,st(r))}function Y(){const r=[];for(const e of[Zt,Kt,Yt])try{const t=e();return Xt(t),t}catch(t){r.push(t)}throw x.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=rt())==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:a,version:c,platform:u,themeParams:p,botInline:g=!1}=Y(),_=_e(),b=jt(),l=ke(c);ne()&&(n&&Ht(),l("iframe_ready",{reload_supported:!0}),y("reload_iframe",()=>{l("iframe_will_reload"),window.location.reload()}));const V={backButton:Wt(_,c,l),closingBehavior:Mt(_,l),cloudStorage:new Be(c,b,l),createRequestId:b,hapticFeedback:new $e(c,l),invoice:new Ne(c,l),mainButton:Ut(_,p.buttonColor||"#000000",p.buttonTextColor||"#ffffff",l),miniApp:Gt(_,p.backgroundColor||"#ffffff",c,g,b,l),popup:new Ue(c,l),postEvent:l,qrScanner:new Ge(c,l),settingsButton:Ft(_,c,l),themeParams:zt(p),utils:new Je(c,b,l),...i?{initData:new Oe(i),initDataRaw:a}:{}},G=Jt(_,u,l,t);return G instanceof Promise||t?Promise.resolve(G).then(me=>(Ee(s,V.miniApp,V.themeParams,me),{...V,viewport:me})):(Ee(s,V.miniApp,V.themeParams,G),{...V,viewport:G})}catch(i){if(t)return Promise.reject(i);throw i}}function tr(){return{launchParams:Y(),isPageReload:_e()}}function rr(){try{return Y(),!0}catch{return!1}}function sr(r){const e=r.match(/#(.+)/);return e?e[1]:null}async function N(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 N(1-window.history.length)))return;let e=await N(-1);for(;e;)e=await N(-1)}function O(r,e){return r.startsWith(e)?r:`${e}${r}`}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 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,ee=1,te=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===ee)return this.back();if(t===te)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 nr(),d("web_app_setup_back_button",{is_visible:this.canGoBack}),this.canGoBack&&this.canGoForward?(this.logger.log("Setting up history: [<-, *, ->]"),window.history.replaceState(ee,""),window.history.pushState(null,"",t),window.history.pushState(te,""),await N(-1)):this.canGoBack?(this.logger.log("Setting up history: [<-, *]"),window.history.replaceState(ee,""),window.history.pushState(null,"",t)):this.canGoForward?(this.logger.log("Setting up history: [*, ->]"),window.history.replaceState(null,t),window.history.pushState(te,""),await N(-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),A("back_button_pressed",this.back))}}function ir(r){return r instanceof U}exports.BackButton=Te;exports.ClosingBehavior=Ie;exports.CloudStorage=Be;exports.HapticFeedback=$e;exports.HashNavigator=be;exports.InitData=Oe;exports.Invoice=Ne;exports.MainButton=He;exports.MethodUnsupportedError=z;exports.MiniApp=Me;exports.Navigator=it;exports.ParameterUnsupportedError=J;exports.ParseError=W;exports.ParseSchemaFieldError=H;exports.Popup=Ue;exports.QRScanner=Ge;exports.SettingsButton=je;exports.ThemeParams=ze;exports.TimeoutError=U;exports.Utils=Je;exports.Viewport=Ze;exports.array=Le;exports.bindMiniAppCSSVars=Ke;exports.bindThemeCSSVars=Ye;exports.bindViewportCSSVars=se;exports.boolean=C;exports.chatParser=De;exports.classNames=he;exports.compareVersions=Se;exports.createPostEvent=ke;exports.date=pe;exports.getHash=sr;exports.init=er;exports.initDataParser=le;exports.invokeCustomMethod=R;exports.isColorDark=ue;exports.isIframe=ne;exports.isPageReload=_e;exports.isRGB=Z;exports.isRGBShort=Ve;exports.isRecord=T;exports.isStableViewportPlatform=Qe;exports.isTMA=rr;exports.isTimeoutError=ir;exports.json=f;exports.launchParamsParser=et;exports.mergeClassNames=At;exports.number=k;exports.off=A;exports.on=y;exports.once=xt;exports.parseInitData=Tt;exports.parseLaunchParams=we;exports.parseMessage=Ae;exports.parseThemeParams=fe;exports.postEvent=d;exports.request=m;exports.requestThemeParams=Nt;exports.requestViewport=ge;exports.retrieveLaunchData=tr;exports.retrieveLaunchParams=Y;exports.rgb=ae;exports.searchParams=K;exports.serializeLaunchParams=st;exports.serializeThemeParams=Fe;exports.setCSSVar=v;exports.setDebug=ct;exports.setTargetOrigin=ht;exports.string=h;exports.subscribe=qt;exports.supports=q;exports.themeParamsParser=de;exports.toRGB=oe;exports.unsubscribe=Re;exports.userParser=re;exports.withTimeout=ce;
|