@tma.js/sdk 1.4.4 → 1.4.6
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/README.md +2 -2
- package/dist/dts/bridge/events/events.d.ts +16 -16
- package/dist/dts/bridge/methods/methods.d.ts +27 -27
- package/dist/dts/bridge/methods/popup.d.ts +1 -1
- package/dist/dts/init-data/types.d.ts +3 -3
- package/dist/dts/launch-params/types.d.ts +1 -1
- package/dist/dts/theme-params/types.d.ts +1 -1
- package/dist/index.cjs +0 -1
- package/dist/index.iife.js +0 -1
- package/dist/index.mjs +0 -1
- package/package.json +2 -3
- package/dist/index.cjs.map +0 -1
- package/dist/index.iife.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/src/__tests__/globals.ts +0 -39
- package/src/back-button/BackButton.ts +0 -90
- package/src/back-button/__tests__/BackButton.ts +0 -129
- package/src/back-button/index.ts +0 -2
- package/src/back-button/types.ts +0 -14
- package/src/bridge/__tests__/parseMessage.ts +0 -23
- package/src/bridge/__tests__/request.ts +0 -236
- package/src/bridge/env/__tests__/hasExternalNotify.ts +0 -15
- package/src/bridge/env/__tests__/hasWebviewProxy.ts +0 -15
- package/src/bridge/env/__tests__/isIframe.ts +0 -30
- package/src/bridge/env/hasExternalNotify.ts +0 -19
- package/src/bridge/env/hasWebviewProxy.ts +0 -19
- package/src/bridge/env/index.ts +0 -3
- package/src/bridge/env/isIframe.ts +0 -11
- package/src/bridge/errors/MethodUnsupportedError.ts +0 -13
- package/src/bridge/errors/ParameterUnsupportedError.ts +0 -13
- package/src/bridge/errors/index.ts +0 -2
- package/src/bridge/events/__tests__/createEmitter.ts +0 -143
- package/src/bridge/events/__tests__/off.ts +0 -34
- package/src/bridge/events/__tests__/on.ts +0 -49
- package/src/bridge/events/__tests__/onTelegramEvent.ts +0 -49
- package/src/bridge/events/__tests__/once.ts +0 -64
- package/src/bridge/events/__tests__/singletonEmitter.ts +0 -22
- package/src/bridge/events/__tests__/subscribe.ts +0 -49
- package/src/bridge/events/__tests__/unsubscribe.ts +0 -34
- package/src/bridge/events/createEmitter.ts +0 -108
- package/src/bridge/events/events.ts +0 -170
- package/src/bridge/events/index.ts +0 -9
- package/src/bridge/events/off.ts +0 -14
- package/src/bridge/events/on.ts +0 -19
- package/src/bridge/events/onTelegramEvent.ts +0 -81
- package/src/bridge/events/once.ts +0 -18
- package/src/bridge/events/parsers/__tests__/clipboardTextReceived.ts +0 -21
- package/src/bridge/events/parsers/__tests__/invoiceClosed.ts +0 -12
- package/src/bridge/events/parsers/__tests__/popupClosed.ts +0 -10
- package/src/bridge/events/parsers/__tests__/qrTextReceived.ts +0 -9
- package/src/bridge/events/parsers/__tests__/theme-changed.ts +0 -42
- package/src/bridge/events/parsers/__tests__/viewportChanged.ts +0 -49
- package/src/bridge/events/parsers/clipboardTextReceived.ts +0 -26
- package/src/bridge/events/parsers/customMethodInvoked.ts +0 -25
- package/src/bridge/events/parsers/index.ts +0 -9
- package/src/bridge/events/parsers/invoiceClosed.ts +0 -26
- package/src/bridge/events/parsers/phoneRequested.ts +0 -14
- package/src/bridge/events/parsers/popupClosed.ts +0 -19
- package/src/bridge/events/parsers/qrTextReceived.ts +0 -14
- package/src/bridge/events/parsers/theme-changed.ts +0 -58
- package/src/bridge/events/parsers/viewportChanged.ts +0 -33
- package/src/bridge/events/parsers/writeAccessRequested.ts +0 -14
- package/src/bridge/events/singletonEmitter.ts +0 -19
- package/src/bridge/events/subscribe.ts +0 -15
- package/src/bridge/events/unsubscribe.ts +0 -10
- package/src/bridge/index.ts +0 -7
- package/src/bridge/invokeCustomMethod.ts +0 -56
- package/src/bridge/methods/__tests__/createPostEvent.ts +0 -37
- package/src/bridge/methods/__tests__/postEvent.ts +0 -137
- package/src/bridge/methods/createPostEvent.ts +0 -40
- package/src/bridge/methods/custom-methods.ts +0 -68
- package/src/bridge/methods/haptic.ts +0 -52
- package/src/bridge/methods/index.ts +0 -6
- package/src/bridge/methods/methods.ts +0 -370
- package/src/bridge/methods/popup.ts +0 -53
- package/src/bridge/methods/postEvent.ts +0 -101
- package/src/bridge/parseMessage.ts +0 -28
- package/src/bridge/request.ts +0 -176
- package/src/classnames/__tests__/classNames.ts +0 -20
- package/src/classnames/__tests__/mergeClassNames.ts +0 -21
- package/src/classnames/classNames.ts +0 -34
- package/src/classnames/index.ts +0 -2
- package/src/classnames/mergeClassNames.ts +0 -60
- package/src/closing-behavior/ClosingBehavior.ts +0 -64
- package/src/closing-behavior/__tests__/ClosingBehavior.ts +0 -86
- package/src/closing-behavior/index.ts +0 -2
- package/src/closing-behavior/types.ts +0 -12
- package/src/cloud-storage/CloudStorage.ts +0 -138
- package/src/cloud-storage/index.ts +0 -1
- package/src/colors/__tests__/isColorDark.ts +0 -12
- package/src/colors/__tests__/isRGB.ts +0 -13
- package/src/colors/__tests__/isRGBShort.ts +0 -13
- package/src/colors/__tests__/toRGB.ts +0 -23
- package/src/colors/index.ts +0 -5
- package/src/colors/isColorDark.ts +0 -22
- package/src/colors/isRGB.ts +0 -9
- package/src/colors/isRGBShort.ts +0 -9
- package/src/colors/toRGB.ts +0 -49
- package/src/colors/types.ts +0 -9
- package/src/css/__tests__/bindMiniAppCSSVars.ts +0 -175
- package/src/css/__tests__/bindThemeCSSVars.ts +0 -52
- package/src/css/__tests__/bindViewportCSSVars.ts +0 -55
- package/src/css/__tests__/setCSSVar.ts +0 -14
- package/src/css/bindMiniAppCSSVars.ts +0 -51
- package/src/css/bindThemeCSSVars.ts +0 -31
- package/src/css/bindViewportCSSVars.ts +0 -36
- package/src/css/index.ts +0 -4
- package/src/css/setCSSVar.ts +0 -8
- package/src/event-emitter/EventEmitter.ts +0 -146
- package/src/event-emitter/__tests__/EventEmitter.ts +0 -145
- package/src/event-emitter/index.ts +0 -2
- package/src/event-emitter/types.ts +0 -60
- package/src/globals.ts +0 -38
- package/src/haptic-feedback/HapticFeedback.ts +0 -70
- package/src/haptic-feedback/__tests__/HapticFeedback.ts +0 -68
- package/src/haptic-feedback/index.ts +0 -1
- package/src/index.ts +0 -185
- package/src/init/catchCustomStyles.ts +0 -17
- package/src/init/creators/__tests__/createViewport.ts +0 -96
- package/src/init/creators/createBackButton.ts +0 -25
- package/src/init/creators/createClosingBehavior.ts +0 -24
- package/src/init/creators/createMainButton.ts +0 -51
- package/src/init/creators/createMiniApp.ts +0 -48
- package/src/init/creators/createRequestIdGenerator.ts +0 -13
- package/src/init/creators/createSettingsButton.ts +0 -25
- package/src/init/creators/createThemeParams.ts +0 -11
- package/src/init/creators/createViewport.ts +0 -94
- package/src/init/creators/index.ts +0 -8
- package/src/init/css/index.ts +0 -1
- package/src/init/css/processCSSVarsOption.ts +0 -55
- package/src/init/index.ts +0 -2
- package/src/init/init.ts +0 -134
- package/src/init/types.ts +0 -94
- package/src/init-data/InitData.ts +0 -96
- package/src/init-data/__tests__/InitData.ts +0 -98
- package/src/init-data/__tests__/chatParser.ts +0 -102
- package/src/init-data/__tests__/initDataParser.ts +0 -136
- package/src/init-data/__tests__/parseInitData.ts +0 -136
- package/src/init-data/__tests__/userParser.ts +0 -96
- package/src/init-data/chatParser.ts +0 -19
- package/src/init-data/index.ts +0 -6
- package/src/init-data/initDataParser.ts +0 -41
- package/src/init-data/parseInitData.ts +0 -10
- package/src/init-data/types.ts +0 -164
- package/src/init-data/userParser.ts +0 -45
- package/src/invoice/Invoice.ts +0 -123
- package/src/invoice/index.ts +0 -2
- package/src/invoice/types.ts +0 -11
- package/src/launch-params/__tests__/retrieveFromUrl.ts +0 -19
- package/src/launch-params/computeLaunchData.ts +0 -81
- package/src/launch-params/computePageReload.ts +0 -13
- package/src/launch-params/getFirstNavigationEntry.ts +0 -10
- package/src/launch-params/index.ts +0 -13
- package/src/launch-params/launchParamsParser.ts +0 -45
- package/src/launch-params/parseLaunchParams.ts +0 -10
- package/src/launch-params/retrieveCurrent.ts +0 -27
- package/src/launch-params/retrieveFromLocation.ts +0 -10
- package/src/launch-params/retrieveFromPerformance.ts +0 -18
- package/src/launch-params/retrieveFromUrl.ts +0 -19
- package/src/launch-params/retrieveLaunchData.ts +0 -30
- package/src/launch-params/serializeLaunchParams.ts +0 -37
- package/src/launch-params/storage.ts +0 -33
- package/src/launch-params/types.ts +0 -62
- package/src/logger/Logger.ts +0 -72
- package/src/logger/__tests__/Logger.ts +0 -107
- package/src/logger/index.ts +0 -1
- package/src/main-button/MainButton.ts +0 -239
- package/src/main-button/__tests__/MainButton.ts +0 -346
- package/src/main-button/index.ts +0 -2
- package/src/main-button/types.ts +0 -26
- package/src/mini-app/MiniApp.ts +0 -348
- package/src/mini-app/__tests__/MiniApp.ts +0 -140
- package/src/mini-app/contactParser.ts +0 -29
- package/src/mini-app/index.ts +0 -2
- package/src/mini-app/types.ts +0 -38
- package/src/misc/__tests__/isRecord.ts +0 -21
- package/src/misc/index.ts +0 -2
- package/src/misc/isRecord.ts +0 -7
- package/src/misc/isTMA.ts +0 -13
- package/src/navigation/HashNavigator/HashNavigator.ts +0 -220
- package/src/navigation/HashNavigator/__tests__/HashNavigator.ts +0 -144
- package/src/navigation/HashNavigator/__tests__/drop.ts +0 -42
- package/src/navigation/HashNavigator/__tests__/go.ts +0 -9
- package/src/navigation/HashNavigator/drop.ts +0 -36
- package/src/navigation/HashNavigator/go.ts +0 -28
- package/src/navigation/HashNavigator/index.ts +0 -2
- package/src/navigation/HashNavigator/types.ts +0 -41
- package/src/navigation/Navigator/Navigator.ts +0 -282
- package/src/navigation/Navigator/index.ts +0 -2
- package/src/navigation/Navigator/types.ts +0 -55
- package/src/navigation/ensurePrefix.ts +0 -9
- package/src/navigation/getHash.ts +0 -17
- package/src/navigation/index.ts +0 -4
- package/src/parsing/ArrayValueParser.ts +0 -79
- package/src/parsing/ParseError.ts +0 -27
- package/src/parsing/ParseSchemaFieldError.ts +0 -21
- package/src/parsing/ValueParser.ts +0 -71
- package/src/parsing/__tests__/ArrayValueParser.ts +0 -18
- package/src/parsing/__tests__/toRecord.ts +0 -10
- package/src/parsing/createValueParserGenerator.ts +0 -16
- package/src/parsing/index.ts +0 -10
- package/src/parsing/parseBySchema.ts +0 -65
- package/src/parsing/parsers/__tests__/array.ts +0 -39
- package/src/parsing/parsers/__tests__/boolean.ts +0 -31
- package/src/parsing/parsers/__tests__/date.ts +0 -25
- package/src/parsing/parsers/__tests__/json.ts +0 -80
- package/src/parsing/parsers/__tests__/number.ts +0 -23
- package/src/parsing/parsers/__tests__/rgb.ts +0 -22
- package/src/parsing/parsers/__tests__/searchParams.ts +0 -105
- package/src/parsing/parsers/__tests__/string.ts +0 -25
- package/src/parsing/parsers/array.ts +0 -9
- package/src/parsing/parsers/boolean.ts +0 -22
- package/src/parsing/parsers/date.ts +0 -11
- package/src/parsing/parsers/index.ts +0 -8
- package/src/parsing/parsers/json.ts +0 -17
- package/src/parsing/parsers/number.ts +0 -21
- package/src/parsing/parsers/rgb.ts +0 -10
- package/src/parsing/parsers/searchParams.ts +0 -24
- package/src/parsing/parsers/string.ts +0 -12
- package/src/parsing/toRecord.ts +0 -27
- package/src/parsing/types.ts +0 -32
- package/src/parsing/unexpectedTypeError.ts +0 -6
- package/src/popup/Popup.ts +0 -91
- package/src/popup/__tests__/Popup.ts +0 -130
- package/src/popup/__tests__/preparePopupParams.ts +0 -85
- package/src/popup/index.ts +0 -2
- package/src/popup/preparePopupParams.ts +0 -59
- package/src/popup/types.ts +0 -69
- package/src/qr-scanner/QRScanner.ts +0 -95
- package/src/qr-scanner/index.ts +0 -2
- package/src/qr-scanner/types.ts +0 -11
- package/src/settings-button/SettingsButton.ts +0 -85
- package/src/settings-button/index.ts +0 -2
- package/src/settings-button/types.ts +0 -15
- package/src/state/State.ts +0 -67
- package/src/state/index.ts +0 -2
- package/src/state/types.ts +0 -31
- package/src/storage.ts +0 -69
- package/src/supports/__tests__/supports.ts +0 -123
- package/src/supports/createSupportsFunc.ts +0 -18
- package/src/supports/createSupportsParamFunc.ts +0 -27
- package/src/supports/index.ts +0 -4
- package/src/supports/supports.ts +0 -84
- package/src/supports/types.ts +0 -1
- package/src/theme-params/ThemeParams.ts +0 -131
- package/src/theme-params/__tests__/keys.ts +0 -19
- package/src/theme-params/__tests__/parseThemeParams.ts +0 -29
- package/src/theme-params/__tests__/serializeThemeParams.ts +0 -29
- package/src/theme-params/__tests__/themeParamsParser.ts +0 -29
- package/src/theme-params/index.ts +0 -6
- package/src/theme-params/keys.ts +0 -24
- package/src/theme-params/parseThemeParams.ts +0 -10
- package/src/theme-params/requestThemeParams.ts +0 -13
- package/src/theme-params/serializeThemeParams.ts +0 -20
- package/src/theme-params/themeParamsParser.ts +0 -22
- package/src/theme-params/types.ts +0 -33
- package/src/timeout/TimeoutError.ts +0 -6
- package/src/timeout/__tests__/isTimeoutError.ts +0 -9
- package/src/timeout/__tests__/withTimeout.ts +0 -28
- package/src/timeout/index.ts +0 -4
- package/src/timeout/isTimeoutError.ts +0 -9
- package/src/timeout/sleep.ts +0 -10
- package/src/timeout/withTimeout.ts +0 -24
- package/src/types/index.ts +0 -4
- package/src/types/methods.ts +0 -18
- package/src/types/platform.ts +0 -14
- package/src/types/request-id.ts +0 -10
- package/src/types/utils.ts +0 -50
- package/src/utils/Utils.ts +0 -107
- package/src/utils/index.ts +0 -1
- package/src/version/__tests__/compareVersions.ts +0 -19
- package/src/version/compareVersions.ts +0 -28
- package/src/version/index.ts +0 -2
- package/src/version/types.ts +0 -4
- package/src/viewport/Viewport.ts +0 -171
- package/src/viewport/__tests__/isStableViewportPlatform.ts +0 -15
- package/src/viewport/__tests__/utils.ts +0 -12
- package/src/viewport/index.ts +0 -4
- package/src/viewport/isStableViewportPlatform.ts +0 -10
- package/src/viewport/requestViewport.ts +0 -23
- package/src/viewport/types.ts +0 -23
- package/src/viewport/utils.ts +0 -7
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
[sdk-code-link]: https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/sdk
|
|
8
8
|
|
|
9
|
-
[sdk-docs-link]: https://docs.telegram-mini-apps.com/packages/
|
|
9
|
+
[sdk-docs-link]: https://docs.telegram-mini-apps.com/packages/tma-js-sdk
|
|
10
10
|
|
|
11
11
|
[sdk-npm-link]: https://npmjs.com/package/@tma.js/sdk
|
|
12
12
|
|
|
@@ -27,5 +27,5 @@ Mini Apps. It consists of several individual components, each responsible for a
|
|
|
27
27
|
the Telegram Mini Apps ecosystem.
|
|
28
28
|
|
|
29
29
|
Before you begin using the SDK, we highly recommend familiarizing yourself with the Telegram Mini
|
|
30
|
-
Apps [documentation](https://docs.telegram-mini-apps.com/platform/about
|
|
30
|
+
Apps [documentation](https://docs.telegram-mini-apps.com/platform/about)
|
|
31
31
|
to grasp the fundamental concepts of the platform.
|
|
@@ -3,69 +3,69 @@ import type { IsNever, Not } from '../../types/index.js';
|
|
|
3
3
|
import type { ClipboardTextReceivedPayload, CustomMethodInvokedPayload, InvoiceClosedPayload, PhoneRequestedPayload, PopupClosedPayload, QrTextReceivedPayload, ThemeChangedPayload, ViewportChangedPayload, WriteAccessRequestedPayload } from './parsers/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Map where key is known event name, and value is its listener.
|
|
6
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
6
|
+
* @see https://docs.telegram-mini-apps.com/platform/events
|
|
7
7
|
*/
|
|
8
8
|
export interface MiniAppsEvents {
|
|
9
9
|
/**
|
|
10
10
|
* User clicked back button.
|
|
11
11
|
* @since v6.1
|
|
12
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
12
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#back-button-pressed
|
|
13
13
|
*/
|
|
14
14
|
back_button_pressed: () => void;
|
|
15
15
|
/**
|
|
16
16
|
* Telegram application attempted to extract text from clipboard.
|
|
17
17
|
* @param payload - event payload.
|
|
18
18
|
* @since v6.4
|
|
19
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
19
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#clipboard-text-received
|
|
20
20
|
*/
|
|
21
21
|
clipboard_text_received: (payload: ClipboardTextReceivedPayload) => void;
|
|
22
22
|
/**
|
|
23
23
|
* Custom method invocation completed.
|
|
24
24
|
* @param payload - event payload.
|
|
25
25
|
* @since v6.9
|
|
26
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
26
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#custom-method-invoked
|
|
27
27
|
*/
|
|
28
28
|
custom_method_invoked: (payload: CustomMethodInvokedPayload) => void;
|
|
29
29
|
/**
|
|
30
30
|
* An invoice was closed.
|
|
31
31
|
* @param payload - invoice close information.
|
|
32
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
32
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#invoice-closed
|
|
33
33
|
*/
|
|
34
34
|
invoice_closed: (payload: InvoiceClosedPayload) => void;
|
|
35
35
|
/**
|
|
36
36
|
* User clicked the Main Button.
|
|
37
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
37
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#main-button-pressed
|
|
38
38
|
*/
|
|
39
39
|
main_button_pressed: () => void;
|
|
40
40
|
/**
|
|
41
41
|
* Application received phone access request status.
|
|
42
42
|
* @param payload - event payload.
|
|
43
43
|
* @since v6.9
|
|
44
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
44
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#phone-requested
|
|
45
45
|
*/
|
|
46
46
|
phone_requested: (payload: PhoneRequestedPayload) => void;
|
|
47
47
|
/**
|
|
48
48
|
* Popup was closed.
|
|
49
49
|
* @param payload - event payload.
|
|
50
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
50
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#popup-closed
|
|
51
51
|
*/
|
|
52
52
|
popup_closed: (payload: PopupClosedPayload) => void;
|
|
53
53
|
/**
|
|
54
54
|
* Parent iframe requested current iframe reload.
|
|
55
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
55
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#reload-iframe
|
|
56
56
|
*/
|
|
57
57
|
reload_iframe: () => void;
|
|
58
58
|
/**
|
|
59
59
|
* The QR scanner scanned some QR and extracted its content.
|
|
60
60
|
* @param payload - event payload.
|
|
61
61
|
* @since v6.4
|
|
62
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
62
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#qr-text-received
|
|
63
63
|
*/
|
|
64
64
|
qr_text_received: (payload: QrTextReceivedPayload) => void;
|
|
65
65
|
/**
|
|
66
66
|
* QR scanner was closed.
|
|
67
67
|
* @since v6.4
|
|
68
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
68
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#scan-qr-popup-closed
|
|
69
69
|
*/
|
|
70
70
|
scan_qr_popup_closed: () => void;
|
|
71
71
|
/**
|
|
@@ -73,34 +73,34 @@ export interface MiniAppsEvents {
|
|
|
73
73
|
* `<style/>` tag html content, a developer could use. The stylesheet described in the payload
|
|
74
74
|
* will help the developer to stylize the app scrollbar (but he is still able to do it himself).
|
|
75
75
|
* @param html - `style` tag inner HTML.
|
|
76
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
76
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#set-custom-style
|
|
77
77
|
*/
|
|
78
78
|
set_custom_style: (html: string) => void;
|
|
79
79
|
/**
|
|
80
80
|
* Occurs when the Settings Button was pressed.
|
|
81
81
|
* @since v6.1
|
|
82
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
82
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#settings-button-pressed
|
|
83
83
|
*/
|
|
84
84
|
settings_button_pressed: () => void;
|
|
85
85
|
/**
|
|
86
86
|
* Occurs whenever theme settings are changed in the user's Telegram app
|
|
87
87
|
* (including switching to night mode).
|
|
88
88
|
* @param payload - event payload.
|
|
89
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
89
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#theme-changed
|
|
90
90
|
*/
|
|
91
91
|
theme_changed: (payload: ThemeChangedPayload) => void;
|
|
92
92
|
/**
|
|
93
93
|
* Occurs whenever the viewport has been changed. For example, when the user started
|
|
94
94
|
* dragging the application or called the expansion method.
|
|
95
95
|
* @param payload - event payload.
|
|
96
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
96
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#viewport-changed
|
|
97
97
|
*/
|
|
98
98
|
viewport_changed: (payload: ViewportChangedPayload) => void;
|
|
99
99
|
/**
|
|
100
100
|
* Application received write access request status.
|
|
101
101
|
* @param payload - event payload.
|
|
102
102
|
* @since v6.9
|
|
103
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
103
|
+
* @see https://docs.telegram-mini-apps.com/platform/events#write-access-requested
|
|
104
104
|
*/
|
|
105
105
|
write_access_requested: (payload: WriteAccessRequestedPayload) => void;
|
|
106
106
|
}
|
|
@@ -17,13 +17,13 @@ interface CreateParams<Params = undefined, VersionedParam extends UnionKeys<Para
|
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Describes list of events and their parameters that could be posted by Bridge.
|
|
20
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
20
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods
|
|
21
21
|
*/
|
|
22
22
|
export interface MiniAppsMethods {
|
|
23
23
|
/**
|
|
24
24
|
* Notifies parent iframe about the current frame is ready. This method is only used in the Web
|
|
25
25
|
* version of Telegram. As a result, Mini App will receive `set_custom_style` event.
|
|
26
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
26
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#iframe-ready
|
|
27
27
|
*/
|
|
28
28
|
iframe_ready: CreateParams<{
|
|
29
29
|
/**
|
|
@@ -33,18 +33,18 @@ export interface MiniAppsMethods {
|
|
|
33
33
|
} | undefined>;
|
|
34
34
|
/**
|
|
35
35
|
* Notifies parent iframe about the current iframe is going to reload.
|
|
36
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
36
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#iframe-will-reload
|
|
37
37
|
*/
|
|
38
38
|
iframe_will_reload: CreateParams;
|
|
39
39
|
/**
|
|
40
40
|
* Closes Mini App.
|
|
41
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
41
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-close
|
|
42
42
|
*/
|
|
43
43
|
web_app_close: CreateParams;
|
|
44
44
|
/**
|
|
45
45
|
* Closes a QR scanner. The Telegram application creates `scan_qr_popup_closed` event.
|
|
46
46
|
* @since v6.4
|
|
47
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
47
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-close-scan-qr-popup
|
|
48
48
|
*/
|
|
49
49
|
web_app_close_scan_qr_popup: CreateParams;
|
|
50
50
|
/**
|
|
@@ -54,7 +54,7 @@ export interface MiniAppsMethods {
|
|
|
54
54
|
* To get more information, take a look at `web_app_data` field in the
|
|
55
55
|
* class [Message](https://core.telegram.org/bots/api#message).
|
|
56
56
|
*
|
|
57
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
57
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-data-send
|
|
58
58
|
*/
|
|
59
59
|
web_app_data_send: CreateParams<{
|
|
60
60
|
/**
|
|
@@ -64,20 +64,20 @@ export interface MiniAppsMethods {
|
|
|
64
64
|
}>;
|
|
65
65
|
/**
|
|
66
66
|
* Expands the Mini App.
|
|
67
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
67
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-expand
|
|
68
68
|
*/
|
|
69
69
|
web_app_expand: CreateParams;
|
|
70
70
|
/**
|
|
71
71
|
* Invokes custom method.
|
|
72
72
|
* @since v6.9
|
|
73
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
73
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-invoke-custom-method
|
|
74
74
|
*/
|
|
75
75
|
web_app_invoke_custom_method: CreateParams<AnyInvokeCustomMethodParams>;
|
|
76
76
|
/**
|
|
77
77
|
* Opens an invoice by its specified slug. More information about invoices in
|
|
78
78
|
* this [documentation](https://core.telegram.org/bots/payments).
|
|
79
79
|
* @since v6.1
|
|
80
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
80
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-open-invoice
|
|
81
81
|
*/
|
|
82
82
|
web_app_open_invoice: CreateParams<{
|
|
83
83
|
/**
|
|
@@ -87,7 +87,7 @@ export interface MiniAppsMethods {
|
|
|
87
87
|
}>;
|
|
88
88
|
/**
|
|
89
89
|
* Opens link in the default browser. Mini App will not be closed.
|
|
90
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
90
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-open-link
|
|
91
91
|
*/
|
|
92
92
|
web_app_open_link: CreateParams<{
|
|
93
93
|
/**
|
|
@@ -104,7 +104,7 @@ export interface MiniAppsMethods {
|
|
|
104
104
|
/**
|
|
105
105
|
* Opens a new popup. When user closes the popup, Telegram creates the `popup_closed` event.
|
|
106
106
|
* @since v6.2
|
|
107
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
107
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-open-popup
|
|
108
108
|
*/
|
|
109
109
|
web_app_open_popup: CreateParams<PopupParams>;
|
|
110
110
|
/**
|
|
@@ -112,7 +112,7 @@ export interface MiniAppsMethods {
|
|
|
112
112
|
* the `scan_qr_popup_closed` event. When the scanner reads QR, Telegram creates the
|
|
113
113
|
* `qr_text_received` event.
|
|
114
114
|
* @since v6.4
|
|
115
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
115
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-open-scan-qr-popup
|
|
116
116
|
*/
|
|
117
117
|
web_app_open_scan_qr_popup: CreateParams<{
|
|
118
118
|
/**
|
|
@@ -124,7 +124,7 @@ export interface MiniAppsMethods {
|
|
|
124
124
|
* Opens the Telegram link by its pathname and query parameters. The link will be opened in the
|
|
125
125
|
* Telegram app, Mini App will be closed.
|
|
126
126
|
* @since v6.1
|
|
127
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
127
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-open-tg-link
|
|
128
128
|
*/
|
|
129
129
|
web_app_open_tg_link: CreateParams<{
|
|
130
130
|
/**
|
|
@@ -137,7 +137,7 @@ export interface MiniAppsMethods {
|
|
|
137
137
|
* Reads text from the clipboard. The method accepts a request identifier which is used to
|
|
138
138
|
* appropriately retrieve the method execution result from the `clipboard_text_received` event.
|
|
139
139
|
* @since v6.4
|
|
140
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
140
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-read-text-from-clipboard
|
|
141
141
|
*/
|
|
142
142
|
web_app_read_text_from_clipboard: CreateParams<{
|
|
143
143
|
/**
|
|
@@ -149,36 +149,36 @@ export interface MiniAppsMethods {
|
|
|
149
149
|
/**
|
|
150
150
|
* Notifies Telegram about current application is ready to be shown. This method will make
|
|
151
151
|
* Telegram to remove application loader and display Mini App.
|
|
152
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
152
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-ready
|
|
153
153
|
*/
|
|
154
154
|
web_app_ready: CreateParams;
|
|
155
155
|
/**
|
|
156
156
|
* Requests access to current user's phone.
|
|
157
157
|
* @since v6.9
|
|
158
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
158
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-request-phone
|
|
159
159
|
*/
|
|
160
160
|
web_app_request_phone: CreateParams;
|
|
161
161
|
/**
|
|
162
162
|
* Requests current theme from Telegram. As a result, Telegram will create `theme_changed` event.
|
|
163
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
163
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-request-theme
|
|
164
164
|
*/
|
|
165
165
|
web_app_request_theme: CreateParams;
|
|
166
166
|
/**
|
|
167
167
|
* Requests current viewport information from Telegram. As a result, Telegram will create
|
|
168
168
|
* `viewport_changed` event.
|
|
169
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
169
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-request-viewport
|
|
170
170
|
*/
|
|
171
171
|
web_app_request_viewport: CreateParams;
|
|
172
172
|
/**
|
|
173
173
|
* Requests write message access to current user.
|
|
174
174
|
* @since v6.9
|
|
175
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
175
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-rqeuest-write-access
|
|
176
176
|
*/
|
|
177
177
|
web_app_request_write_access: CreateParams;
|
|
178
178
|
/**
|
|
179
179
|
* Updates the Mini App background color.
|
|
180
180
|
* @since v6.1
|
|
181
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
181
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-set-background-color
|
|
182
182
|
*/
|
|
183
183
|
web_app_set_background_color: CreateParams<{
|
|
184
184
|
/**
|
|
@@ -189,7 +189,7 @@ export interface MiniAppsMethods {
|
|
|
189
189
|
/**
|
|
190
190
|
* Updates the Mini App header color.
|
|
191
191
|
* @since v6.1
|
|
192
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
192
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-set-header-color
|
|
193
193
|
*/
|
|
194
194
|
web_app_set_header_color: CreateParams<{
|
|
195
195
|
/**
|
|
@@ -206,7 +206,7 @@ export interface MiniAppsMethods {
|
|
|
206
206
|
/**
|
|
207
207
|
* Updates the Back Button settings.
|
|
208
208
|
* @since v6.1
|
|
209
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
209
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-setup-back-button
|
|
210
210
|
*/
|
|
211
211
|
web_app_setup_back_button: CreateParams<{
|
|
212
212
|
/**
|
|
@@ -216,7 +216,7 @@ export interface MiniAppsMethods {
|
|
|
216
216
|
}>;
|
|
217
217
|
/**
|
|
218
218
|
* Updates current closing behavior.
|
|
219
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
219
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-setup-closing-behavior
|
|
220
220
|
*/
|
|
221
221
|
web_app_setup_closing_behavior: CreateParams<{
|
|
222
222
|
/**
|
|
@@ -226,7 +226,7 @@ export interface MiniAppsMethods {
|
|
|
226
226
|
}>;
|
|
227
227
|
/**
|
|
228
228
|
* Updates the Main Button settings.
|
|
229
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
229
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-setup-main-button
|
|
230
230
|
*/
|
|
231
231
|
web_app_setup_main_button: CreateParams<{
|
|
232
232
|
/**
|
|
@@ -258,7 +258,7 @@ export interface MiniAppsMethods {
|
|
|
258
258
|
/**
|
|
259
259
|
* Updates current state of Settings Button.
|
|
260
260
|
* @since v6.10
|
|
261
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
261
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-setup-settings-button
|
|
262
262
|
*/
|
|
263
263
|
web_app_setup_settings_button: CreateParams<{
|
|
264
264
|
/**
|
|
@@ -272,7 +272,7 @@ export interface MiniAppsMethods {
|
|
|
272
272
|
* the user to choose a specific chat, then opens that chat and inserts the bot's username and
|
|
273
273
|
* the specified inline query in the input field.
|
|
274
274
|
* @since v6.7
|
|
275
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
275
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-switch-inline-query
|
|
276
276
|
*/
|
|
277
277
|
web_app_switch_inline_query: CreateParams<{
|
|
278
278
|
/**
|
|
@@ -288,7 +288,7 @@ export interface MiniAppsMethods {
|
|
|
288
288
|
/**
|
|
289
289
|
* Generates haptic feedback event.
|
|
290
290
|
* @since v6.1
|
|
291
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
291
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#web-app-trigger-haptic-feedback
|
|
292
292
|
*/
|
|
293
293
|
web_app_trigger_haptic_feedback: CreateParams<AnyHapticFeedbackParams>;
|
|
294
294
|
}
|
|
@@ -17,7 +17,7 @@ export interface PopupParams {
|
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Describes the native popup button.
|
|
20
|
-
* @see https://docs.telegram-mini-apps.com/platform/
|
|
20
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#popupbutton
|
|
21
21
|
*/
|
|
22
22
|
export type PopupButton = {
|
|
23
23
|
/**
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export type ChatType = 'sender' | 'private' | 'group' | 'supergroup' | 'channel' | string;
|
|
5
5
|
/**
|
|
6
|
-
* Describes Telegram Mini Apps [User](https://docs.telegram-mini-apps.com/platform/
|
|
6
|
+
* Describes Telegram Mini Apps [User](https://docs.telegram-mini-apps.com/platform/init-data#user) type.
|
|
7
7
|
*/
|
|
8
8
|
export interface User {
|
|
9
9
|
/**
|
|
@@ -51,7 +51,7 @@ export interface User {
|
|
|
51
51
|
username?: string;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Describes Telegram Mini Apps [Chat](https://docs.telegram-mini-apps.com/platform/
|
|
54
|
+
* Describes Telegram Mini Apps [Chat](https://docs.telegram-mini-apps.com/platform/init-data#chat) type.
|
|
55
55
|
*/
|
|
56
56
|
export interface Chat {
|
|
57
57
|
/**
|
|
@@ -77,7 +77,7 @@ export interface Chat {
|
|
|
77
77
|
username?: string;
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
|
-
* Describes Telegram Mini Apps [InitData](https://docs.telegram-mini-apps.com/platform/
|
|
80
|
+
* Describes Telegram Mini Apps [InitData](https://docs.telegram-mini-apps.com/platform/init-data#parameters-list)
|
|
81
81
|
* type.
|
|
82
82
|
*/
|
|
83
83
|
export interface InitDataParsed {
|
|
@@ -3,7 +3,7 @@ import type { ThemeParamsParsed } from '../theme-params/index.js';
|
|
|
3
3
|
import type { Platform } from '../types/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Telegram Mini Apps launch parameters.
|
|
6
|
-
* @see https://docs.telegram-mini-apps.com/platform/launch-parameters
|
|
6
|
+
* @see https://docs.telegram-mini-apps.com/platform/launch-parameters
|
|
7
7
|
*/
|
|
8
8
|
export interface LaunchParams {
|
|
9
9
|
/**
|
|
@@ -2,7 +2,7 @@ import type { RGB } from '../colors/index.js';
|
|
|
2
2
|
import type { StateEvents } from '../state/index.js';
|
|
3
3
|
export type ThemeParamsKey = 'accentTextColor' | 'backgroundColor' | 'buttonColor' | 'buttonTextColor' | 'destructiveTextColor' | 'headerBackgroundColor' | 'hintColor' | 'linkColor' | 'secondaryBackgroundColor' | 'sectionBackgroundColor' | 'sectionHeaderTextColor' | 'subtitleTextColor' | 'textColor';
|
|
4
4
|
/**
|
|
5
|
-
* Application [theme parameters](https://docs.telegram-mini-apps.com/platform/
|
|
5
|
+
* Application [theme parameters](https://docs.telegram-mini-apps.com/platform/theming).
|
|
6
6
|
* Defines palette used by the Telegram application.
|
|
7
7
|
*/
|
|
8
8
|
export interface ThemeParamsParsed {
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
"use strict";var ot=Object.defineProperty;var at=(r,e,t)=>e in r?ot(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e,t)=>(at(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function A(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Pe(){return performance.getEntriesByType("navigation")[0]||null}function ct(){const r=Pe();return r?r.type==="reload":null}function B(){return new TypeError("Value has unexpected type")}class U extends Error{constructor(t,{cause:s,type:n}={}){super(`Unable to parse value${n?` as ${n}`:""}`,{cause:s});o(this,"type");this.value=t,Object.setPrototypeOf(this,U.prototype),this.type=n}}class J{constructor(e,t,s){this.parser=e,this.isOptional=t,this.type=s}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(t){throw new U(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}}function ut(r){if(Array.isArray(r))return r;if(typeof r=="string")try{const e=JSON.parse(r);if(Array.isArray(e))return e}catch{}throw B()}class ht extends J{constructor(t,s,n){super(ut,s,n);o(this,"itemParser");this.itemParser=typeof t=="function"?t:t.parse.bind(t)}parse(t){const s=super.parse(t);return s===void 0?s:s.map(this.itemParser)}of(t){return this.itemParser=typeof t=="function"?t:t.parse.bind(t),this}}function $(r,e){return()=>new J(r,!1,e)}class M extends Error{constructor(e,{cause:t,type:s}={}){super(`Unable to parse field "${e}"${s?` as ${s}`:""}`,{cause:t}),Object.setPrototypeOf(this,M.prototype)}}function ve(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:h}=n;i=n.from||s,a=typeof h=="function"?h:h.parse.bind(h)}let c;const p=e(i);try{c=a(p)}catch(h){throw h instanceof U?new M(i,{type:h.type,cause:h}):new M(i,{cause:h})}c!==void 0&&(t[s]=c)}return t}function Se(r){return new ht(e=>e,!1,r)}const E=$(r=>{if(typeof r=="boolean")return r;const e=String(r);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw B()},"boolean"),x=$(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const e=Number(r);if(!Number.isNaN(e))return e}throw B()},"number"),ne=$(r=>r instanceof Date?r:new Date(x().parse(r)*1e3),"Date");function ie(r){let e=r;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw B();return e}function f(r,e){return new J(t=>{const s=ie(t);return ve(r,n=>s[n])},!1,e)}function Q(r){return/^#[\da-f]{6}$/i.test(r)}function ke(r){return/^#[\da-f]{3}$/i.test(r)}function oe(r){const e=r.replace(/\s/g,"").toLowerCase();if(Q(e))return e;if(ke(e)){let s="#";for(let n=0;n<3;n+=1)s+=e[1+n].repeat(2);return s}const t=e.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||e.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(t===null)throw new Error(`Value "${r}" does not satisfy any of known RGB formats.`);return t.slice(1).reduce((s,n)=>{const i=parseInt(n,10).toString(16);return s+(i.length===1?"0":"")+i},"#")}function ae(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}const u=$(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw B()},"string"),ce=$(r=>oe(u().parse(r)),"rgb");function Z(r,e){return new J(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw B();const s=typeof t=="string"?new URLSearchParams(t):t;return ve(r,n=>{const i=s.get(n);return i===null?void 0:i})},!1,e)}function xe(){return f({id:x(),type:u(),title:u(),photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"Chat")}class qe{constructor(e){this.initData=e}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:e}=this;return e===void 0?void 0:new Date(this.authDate.getTime()+e*1e3)}get chat(){return this.initData.chat}get chatType(){return this.initData.chatType}get chatInstance(){return this.initData.chatInstance}get hash(){return this.initData.hash}get queryId(){return this.initData.queryId}get receiver(){return this.initData.receiver}get startParam(){return this.initData.startParam}get user(){return this.initData.user}}function re(){return f({addedToAttachmentMenu:{type:E().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:E().optional(),from:"allows_write_to_pm"},firstName:{type:u(),from:"first_name"},id:x(),isBot:{type:E().optional(),from:"is_bot"},isPremium:{type:E().optional(),from:"is_premium"},languageCode:{type:u().optional(),from:"language_code"},lastName:{type:u().optional(),from:"last_name"},photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"User")}function ue(){return Z({authDate:{type:ne(),from:"auth_date"},canSendAfter:{type:x().optional(),from:"can_send_after"},chat:xe().optional(),chatInstance:{type:u().optional(),from:"chat_instance"},chatType:{type:u().optional(),from:"chat_type"},hash:u(),queryId:{type:u().optional(),from:"query_id"},receiver:re().optional(),startParam:{type:u().optional(),from:"start_param"},user:re().optional()},"InitData")}function pt(r){return ue().parse(r)}function lt(r){return r.replace(/(^|_)bg/,(e,t)=>`${t}background`).replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function dt(r){return r.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const he=$(r=>{const e=ce().optional();return Object.entries(ie(r)).reduce((t,[s,n])=>(t[lt(s)]=e.parse(n),t),{})},"ThemeParams");function pe(r){return he().parse(r)}function ft(r={}){return b("web_app_request_theme","theme_changed",r).then(pe)}function Ae(r){return JSON.stringify(Object.entries(r).reduce((e,[t,s])=>(s&&(e[dt(t)]=s),e),{}))}class w{constructor(){o(this,"listeners",new Map);o(this,"subscribeListeners",[])}addListener(e,t,s){let n=this.listeners.get(e);return n||(n=[],this.listeners.set(e,n)),n.push([t,s]),()=>this.off(e,t)}emit(e,...t){this.subscribeListeners.forEach(n=>n(e,...t));const s=this.listeners.get(e);s&&s.forEach(([n,i],a)=>{n(...t),i&&s.splice(a,1)})}on(e,t){return this.addListener(e,t,!1)}once(e,t){return this.addListener(e,t,!0)}off(e,t){const s=this.listeners.get(e);if(s){for(let n=0;n<s.length;n+=1)if(t===s[n][0]){s.splice(n,1);return}}}subscribe(e){return this.subscribeListeners.push(e),()=>this.unsubscribe(e)}unsubscribe(e){for(let t=0;t<this.subscribeListeners.length;t+=1)if(this.subscribeListeners[t]===e){this.subscribeListeners.splice(t,1);return}}}class m{constructor(e,t){this.state=e,this.ee=t}internalSet(e,t){return this.state[e]===t||t===void 0?!1:(this.state[e]=t,this.ee.emit(`change:${e}`,t),!0)}clone(){return{...this.state}}set(e,t){let s=!1;if(typeof e=="string")s=this.internalSet(e,t);else for(const n in e)this.internalSet(n,e[n])&&(s=!0);s&&this.ee.emit("change")}get(e){return this.state[e]}}class Ve{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.state=new m(e,this.ee)}get accentTextColor(){return this.get("accentTextColor")}get backgroundColor(){return this.get("backgroundColor")}get buttonColor(){return this.get("buttonColor")}get buttonTextColor(){return this.get("buttonTextColor")}get destructiveTextColor(){return this.get("destructiveTextColor")}get(e){return this.state.get(e)}getState(){return this.state.clone()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.backgroundColor||ae(this.backgroundColor)}get linkColor(){return this.get("linkColor")}get secondaryBackgroundColor(){return this.get("secondaryBackgroundColor")}get sectionBackgroundColor(){return this.get("sectionBackgroundColor")}get sectionHeaderTextColor(){return this.get("sectionHeaderTextColor")}listen(){return y("theme_changed",e=>{this.state.set(pe(e.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}function le(){return Z({botInline:{type:E().optional(),from:"tgWebAppBotInline"},initData:{type:ue().optional(),from:"tgWebAppData"},initDataRaw:{type:u().optional(),from:"tgWebAppData"},platform:{type:u(),from:"tgWebAppPlatform"},showSettings:{type:E().optional(),from:"tgWebAppShowSettings"},startParam:{type:u().optional(),from:"tgWebAppStartParam"},themeParams:{type:he(),from:"tgWebAppThemeParams"},version:{type:u(),from:"tgWebAppVersion"}},"LaunchParams")}function Re(r){return le().parse(r)}function Te(r){const e=r.includes("?")?r.replace("#","&").slice(r.indexOf("?")+1):r.slice(r.indexOf("#")+1);return Re(e)}function gt(){return Te(window.location.href)}function wt(){const r=Pe();if(!r)throw new Error("Unable to get first navigation entry.");return Te(r.name)}function _t(){try{return wt()}catch{}try{return gt()}catch{}return null}function Ie(r){const{initDataRaw:e,themeParams:t,platform:s,version:n,showSettings:i,botInline:a}=r,c=new URLSearchParams;return e&&c.set("tgWebAppData",e),c.set("tgWebAppPlatform",s),c.set("tgWebAppThemeParams",Ae(t)),c.set("tgWebAppVersion",n),typeof i=="boolean"&&c.set("tgWebAppShowSettings",i?"1":"0"),typeof a=="boolean"&&c.set("tgWebAppBotInline",a?"1":"0"),c.toString()}const Le="telegram-mini-apps-launch-params";function bt(){const r=sessionStorage.getItem(Le);return r?le().parse(r):null}function mt(r){sessionStorage.setItem(Le,Ie(r))}function yt(){try{return window.self!==window.top}catch{return!0}}function Et(){const r=bt(),e=_t(),t=ct();if(r){if(e)return{launchParams:e,isPageReload:yt()?t||r.initDataRaw===e.initDataRaw:!0};if(t)return{launchParams:r,isPageReload:t};throw new Error("Unable to retrieve current launch parameters, which must exist.")}if(e)return{launchParams:e,isPageReload:!1};throw new Error("Unable to retrieve any launch parameters.")}const be="tmajsLaunchData";function de(){const r=window[be];if(r)return r;const e=Et();return window[be]=e,mt(e.launchParams),e}function Ct(){try{return de(),!0}catch{return!1}}function Pt(r){return"external"in r&&A(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function vt(r){return"TelegramWebviewProxy"in r&&A(r.TelegramWebviewProxy)&&"postEvent"in r.TelegramWebviewProxy&&typeof r.TelegramWebviewProxy.postEvent=="function"}function fe(){try{return window.self!==window.top}catch{return!0}}class K extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,K.prototype)}}class Y extends Error{constructor(e,t,s){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${s}.`),Object.setPrototypeOf(this,Y.prototype)}}class Be{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 $e="https://web.telegram.org";const L=new Be("[SDK]",!1);function St(r){if(r){L.enable();return}L.disable()}function kt(r){$e=r}function xt(){return $e}const qt=f({eventType:u(),eventData:r=>r});function De(r){return qt.parse(r)}function At(r,e){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:r,eventData:e}),source:window.parent}))}function Vt(){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]=At;return}s in t||(t[s]={}),t=t[s]})})}function Rt(r){Vt(),window.addEventListener("message",e=>{if(e.source===window.parent)try{const{eventType:t,eventData:s}=De(e.data);r(t,s)}catch{}})}function Tt(){return f({req_id:u(),data:r=>r===null?r:u().optional().parse(r)})}function It(){return f({req_id:u(),result:r=>r,error:u().optional()})}function Lt(){return f({slug:u(),status:u()})}function Bt(){return f({status:u()})}function $t(){return f({button_id:r=>r==null?void 0:u().parse(r)})}function Dt(){return f({data:u().optional()})}function Nt(){return f({theme_params:r=>{const e=ce().optional();return Object.entries(ie(r)).reduce((t,[s,n])=>(t[s]=e.parse(n),t),{})}})}function Ot(){return f({height:x(),width:r=>r==null?window.innerWidth:x().parse(r),is_state_stable:E(),is_expanded:E()})}function Wt(){return f({status:u()})}function Ht(){const r=new w,e=(t,...s)=>{L.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})}),Rt((t,s)=>{L.log("Received raw event:",t,s);try{switch(t){case"viewport_changed":return e(t,Ot().parse(s));case"theme_changed":return e(t,Nt().parse(s));case"popup_closed":return s==null?e(t,{}):e(t,$t().parse(s));case"set_custom_style":return e(t,u().parse(s));case"qr_text_received":return e(t,Dt().parse(s));case"clipboard_text_received":return e(t,Tt().parse(s));case"invoice_closed":return e(t,Lt().parse(s));case"phone_requested":return e("phone_requested",Bt().parse(s));case"custom_method_invoked":return e("custom_method_invoked",It().parse(s));case"write_access_requested":return e("write_access_requested",Wt().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){L.error("Error processing event:",n)}}),r}const X="telegram-mini-apps-cached-emitter";function G(){const r=window;return r[X]===void 0&&(r[X]=Ht()),r[X]}function R(r,e){G().off(r,e)}function y(r,e){return G().on(r,e),()=>R(r,e)}function Mt(r,e){return G().once(r,e),()=>R(r,e)}function Ne(r){G().unsubscribe(r)}function Ut(r){return G().subscribe(r),()=>Ne(r)}function Oe(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 Oe(r,e)<=0}function V(r,e,t){if(typeof t=="string"){if(r==="web_app_open_link"&&e==="try_instant_view")return k("6.4",t);if(r==="web_app_set_header_color"&&e==="color")return k("6.9",t)}switch(r){case"web_app_open_tg_link":case"web_app_open_invoice":case"web_app_setup_back_button":case"web_app_set_background_color":case"web_app_set_header_color":case"web_app_trigger_haptic_feedback":return k("6.1",e);case"web_app_open_popup":return k("6.2",e);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return k("6.4",e);case"web_app_switch_inline_query":return k("6.7",e);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return k("6.9",e);case"web_app_setup_settings_button":return k("6.10",e);default:return!0}}function P(r,e){return t=>V(e[t],r)}function We(r,e){return t=>{const[s,n]=e[t];return V(s,n,r)}}function d(r,e,t){let s={},n;e===void 0&&t===void 0?s={}:e!==void 0&&t!==void 0?(s=t,n=e):e!==void 0&&("targetOrigin"in e?s=e:n=e);const{targetOrigin:i=xt()}=s;if(L.log(`Calling method "${r}"`,n),fe()){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(vt(window)){window.TelegramWebviewProxy.postEvent(r,JSON.stringify(n));return}throw new Error("Unable to determine current environment and possible way to send event.")}function He(r){return(e,t)=>{if(!V(e,r))throw new K(e,r);if(A(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&&!V(e,s,r))throw new Y(e,s,r)}return d(e,t)}}class j extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,j.prototype)}}function Gt(r){return r instanceof j}function jt(r){return new Promise(e=>{setTimeout(e,r)})}function Ft(r){return new Promise((e,t)=>{setTimeout(t,r,new j(r))})}function ge(r,e){return Promise.race([r(),Ft(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),A(i)&&typeof i.req_id=="string"&&(c=i.req_id);const{postEvent:p=d,timeout:h}=n||{},g=n&&"capture"in n?n.capture:null,_=()=>new Promise((T,l)=>{const v=a.map(S=>y(S,F=>{c&&(!A(F)||F.req_id!==c)||typeof g=="function"&&!g(F)||(q(),T(F))})),q=()=>v.forEach(S=>S());try{p(r,i)}catch(S){q(),l(S)}});return typeof h=="number"?ge(_,h):_()}async function I(r,e,t,s={}){const{result:n,error:i}=await b("web_app_invoke_custom_method",{method:r,params:e,req_id:t},"custom_method_invoked",s);if(i)throw new Error(i);return n}class Me{constructor(e,t,s=d){o(this,"ee",new w);o(this,"state");o(this,"on",(e,t)=>e==="click"?y("back_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?R("back_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new m({isVisible:e},this.ee),this.supports=P(t,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"})}set isVisible(e){this.state.set("isVisible",e),this.postEvent("web_app_setup_back_button",{is_visible:e})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function me(r,e){return r+(r.length>0&&e.length>0?` ${e}`:e)}function Ue(...r){return r.reduce((e,t)=>{let s="";return typeof t=="string"?s=t:typeof t=="object"&&t!==null&&(s=Object.entries(t).reduce((n,[i,a])=>a?me(n,i):n,"")),me(e,s)},"")}function zt(...r){return r.reduce((e,t)=>(A(t)&&Object.entries(t).forEach(([s,n])=>{const i=Ue(e[s],n);i.length>0&&(e[s]=i)}),e),{})}class Ge{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.postEvent=t,this.state=new m({isConfirmationNeeded:e},this.ee)}set isConfirmationNeeded(e){this.state.set("isConfirmationNeeded",e),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:e})}get isConfirmationNeeded(){return this.state.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}function ye(r,e){return r.reduce((t,s)=>(t[s]=e,t),{})}class je{constructor(e,t,s=d){o(this,"supports");this.createRequestId=t,this.postEvent=s,this.supports=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 I("deleteStorageValues",{keys:s},this.createRequestId(),{...t,postEvent:this.postEvent})}async getKeys(e={}){const t=await I("getStorageKeys",{},this.createRequestId(),{...e,postEvent:this.postEvent});return Se().of(u()).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,u())),i=await I("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 I("saveStorageValue",{key:e,value:t},this.createRequestId(),{...s,postEvent:this.postEvent})}}function C(r,e){document.documentElement.style.setProperty(r,e)}function Fe(r,e){const t=()=>{C("--tg-background-color",r.backgroundColor)},s=()=>{const{backgroundColor:n,secondaryBackgroundColor:i}=e;if(Q(r.headerColor)){C("--tg-header-color",r.headerColor);return}if(r.headerColor==="bg_color"&&n){C("--tg-header-color",n);return}r.headerColor==="secondary_bg_color"&&i&&C("--tg-header-color",i)};e.on("change",s),r.on("change:backgroundColor",t),r.on("change:headerColor",s),t(),s()}function ze(r){const e=()=>{const t=r.getState();Object.entries(t).forEach(([s,n])=>{if(n){const i=s.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`);C(`--tg-theme-${i}`,n)}})};r.on("change",e),e()}function se(r){const e=()=>C("--tg-viewport-height",`${r.height}px`),t=()=>C("--tg-viewport-width",`${r.width}px`),s=()=>C("--tg-viewport-stable-height",`${r.stableHeight}px`);r.on("change:height",e),r.on("change:width",t),r.on("change:stableHeight",s),e(),t(),s()}class Je{constructor(e,t=d){o(this,"supports");this.postEvent=t,this.supports=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 Jt(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),y("set_custom_style",e=>{r.innerHTML=e})}function Qe(r){return`telegram-mini-apps-${r}`}function D(r,e){sessionStorage.setItem(Qe(r),JSON.stringify(e))}function N(r){const e=sessionStorage.getItem(Qe(r));return e?JSON.parse(e):null}function Qt(r,e,t){const{isVisible:s=!1}=r?N("back-button")||{}:{},n=new Me(s,e,t);return n.on("change",()=>{D("back-button",{isVisible:n.isVisible})}),n}function Zt(r,e){const{isConfirmationNeeded:t=!1}=r?N("closing-behavior")||{}:{},s=new Ge(t,e);return s.on("change",()=>D("closing-behavior",{isConfirmationNeeded:s.isConfirmationNeeded})),s}class Ze{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"postEvent");o(this,"on",(e,t)=>e==="click"?y("main_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?R("main_button_pressed",t):this.ee.off(e,t));const{postEvent:t=d,text:s,textColor:n,backgroundColor:i,isEnabled:a,isVisible:c,isLoaderVisible:p}=e;this.postEvent=t,this.state=new m({backgroundColor:i,isEnabled:a,isVisible:c,isLoaderVisible:p,text:s,textColor:n},this.ee)}commit(){this.text!==""&&this.postEvent("web_app_setup_main_button",{is_visible:this.isVisible,is_active:this.isEnabled,is_progress_visible:this.isLoaderVisible,text:this.text,color:this.backgroundColor,text_color:this.textColor})}set isEnabled(e){this.setParams({isEnabled:e})}get isEnabled(){return this.state.get("isEnabled")}set isLoaderVisible(e){this.setParams({isLoaderVisible:e})}get isLoaderVisible(){return this.state.get("isLoaderVisible")}set isVisible(e){this.setParams({isVisible:e})}get isVisible(){return this.state.get("isVisible")}get backgroundColor(){return this.state.get("backgroundColor")}get text(){return this.state.get("text")}get textColor(){return this.state.get("textColor")}disable(){return this.isEnabled=!1,this}enable(){return this.isEnabled=!0,this}hide(){return this.isVisible=!1,this}hideLoader(){return this.isLoaderVisible=!1,this}show(){return this.isVisible=!0,this}showLoader(){return this.isLoaderVisible=!0,this}setText(e){return this.setParams({text:e})}setTextColor(e){return this.setParams({textColor:e})}setBackgroundColor(e){return this.setParams({backgroundColor:e})}setParams(e){return this.state.set(e),this.commit(),this}}function Kt(r,e,t,s){const{backgroundColor:n=e,isEnabled:i=!1,isVisible:a=!1,isLoaderVisible:c=!1,textColor:p=t,text:h=""}=r?N("main-button")||{}:{},g=new Ze({backgroundColor:n,isEnabled:i,isLoaderVisible:c,isVisible:a,postEvent:s,text:h,textColor:p}),_=()=>D("main-button",{backgroundColor:g.backgroundColor,isEnabled:g.isEnabled,isLoaderVisible:g.isLoaderVisible,isVisible:g.isVisible,text:g.text,textColor:g.textColor});return g.on("change",_),g}const Yt=Z({contact:f({userId:{type:x(),from:"user_id"},phoneNumber:{type:u(),from:"phone_number"},firstName:{type:u(),from:"first_name"},lastName:{type:u().optional(),from:"last_name"}}),authDate:{type:ne(),from:"auth_date"},hash:u()});class Ke{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"botInline");o(this,"postEvent");o(this,"createRequestId");o(this,"requestingPhoneAccess",!1);o(this,"requestingWriteAccess",!1);o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");o(this,"supportsParam");const{postEvent:t=d,headerColor:s,backgroundColor:n,version:i,botInline:a,createRequestId:c}=e,p=P(i,{requestPhoneAccess:"web_app_request_phone",requestWriteAccess:"web_app_request_write_access",switchInlineQuery:"web_app_switch_inline_query",setHeaderColor:"web_app_set_header_color",setBackgroundColor:"web_app_set_background_color"});this.postEvent=t,this.botInline=a,this.createRequestId=c,this.supports=h=>!(!p(h)||h==="switchInlineQuery"&&!a),this.state=new m({backgroundColor:n,headerColor:s},this.ee),this.supportsParam=We(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}async getRequestedContact(){return I("getRequestedContact",{},this.createRequestId(),{postEvent:this.postEvent,timeout:1e4}).then(e=>Yt.parse(e))}get backgroundColor(){return this.state.get("backgroundColor")}close(){this.postEvent("web_app_close")}get headerColor(){return this.state.get("headerColor")}get isBotInline(){return this.botInline}get isDark(){return ae(this.backgroundColor)}get isRequestingPhoneAccess(){return this.requestingPhoneAccess}get isRequestingWriteAccess(){return this.requestingWriteAccess}ready(){this.postEvent("web_app_ready")}async requestContact({timeout:e=5e3}={}){try{return await this.getRequestedContact()}catch{}if(await this.requestPhoneAccess()!=="sent")throw new Error("Access denied.");const s=Date.now()+e;let n=50;return ge(async()=>{for(;Date.now()<s;){try{return await this.getRequestedContact()}catch{}await jt(n),n+=50}throw new Error("Unable to retrieve requested contact.")},e)}requestPhoneAccess(e={}){if(this.requestingPhoneAccess)throw new Error("Phone access is already being requested.");return this.requestingPhoneAccess=!0,b("web_app_request_phone","phone_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingPhoneAccess=!1})}requestWriteAccess(e={}){if(this.requestingWriteAccess)throw new Error("Write access is already being requested.");return this.requestingWriteAccess=!0,b("web_app_request_write_access","write_access_requested",{...e,postEvent:this.postEvent}).then(t=>t.status).finally(()=>{this.requestingWriteAccess=!1})}sendData(e){const{size:t}=new Blob([e]);if(t===0||t>4096)throw new Error(`Passed data has incorrect size: ${t}`);this.postEvent("web_app_data_send",{data:e})}setHeaderColor(e){this.postEvent("web_app_set_header_color",Q(e)?{color:e}:{color_key:e}),this.state.set("headerColor",e)}setBackgroundColor(e){this.postEvent("web_app_set_background_color",{color:e}),this.state.set("backgroundColor",e)}switchInlineQuery(e,t=[]){if(!this.supports("switchInlineQuery")&&!this.isBotInline)throw new Error("Method is unsupported because Mini App should be launched in inline mode.");this.postEvent("web_app_switch_inline_query",{query:e,chat_types:t})}}function Xt(r,e,t,s,n,i){const{backgroundColor:a=e,headerColor:c="bg_color"}=r?N("mini-app")||{}:{},p=new Ke({headerColor:c,backgroundColor:a,version:t,botInline:s,createRequestId:n,postEvent:i}),h=()=>D("mini-app",{backgroundColor:p.backgroundColor,headerColor:p.headerColor});return p.on("change",h),p}function er(){let r=0;return()=>(r+=1,r.toString())}class Ye{constructor(e,t,s=d){o(this,"ee",new w);o(this,"state");o(this,"on",(e,t)=>e==="click"?y("settings_button_pressed",t):this.ee.on(e,t));o(this,"off",(e,t)=>e==="click"?R("settings_button_pressed",t):this.ee.off(e,t));o(this,"supports");this.postEvent=s,this.state=new m({isVisible:e},this.ee),this.supports=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 tr(r,e,t){const{isVisible:s=!1}=r?N("settings-button")||{}:{},n=new Ye(s,e,t);return n.on("change",()=>{D("settings-button",{isVisible:n.isVisible})}),n}function rr(r){const e=new Ve(r);return e.listen(),e}function Xe(r){return["macos","tdesktop","unigram","web","weba"].includes(r)}async function we(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 O(r){return r<0?0:r}class et{constructor(e){o(this,"ee",new w);o(this,"state");o(this,"postEvent");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));const{height:t,isExpanded:s,width:n,stableHeight:i,postEvent:a=d}=e;this.postEvent=a,this.state=new m({height:O(t),isExpanded:s,stableHeight:O(i),width:O(n)},this.ee)}sync(e){return we(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:O(t),isExpanded:n,width:O(s)};i&&(a.stableHeight=a.height),this.state.set(a)})}get isExpanded(){return this.state.get("isExpanded")}get width(){return this.state.get("width")}expand(){this.postEvent("web_app_expand"),this.state.set("isExpanded",!0)}get isStable(){return this.stableHeight===this.height}}function z(r){const e=new et(r);return e.on("change",()=>D("viewport",{height:e.height,isExpanded:e.isExpanded,stableHeight:e.stableHeight,width:e.width})),e.listen(),e}function sr(r,e,t,s){const n=r?N("viewport"):null;if(n)return z({...n,postEvent:t});if(Xe(e))return z({height:window.innerHeight,isExpanded:!0,postEvent:t,stableHeight:window.innerHeight,width:window.innerWidth});if(s)return we({postEvent:t,timeout:5e3}).then(({height:a,isStateStable:c,...p})=>z({...p,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 nr(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function Ee(r,e,t,s){const n=nr(r);n.miniApp&&Fe(e,t),n.themeParams&&ze(t),n.viewport&&(s instanceof Promise?s.then(se):se(s))}function ir(r){const{hostname:e,pathname:t}=new URL(r,window.location.href);if(e!=="t.me")throw new Error(`Incorrect hostname: ${e}`);const s=t.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(s===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');return s[2]}class tt{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new m({isOpened:!1},this.ee),this.supports=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?ir(e):e;this.isOpened=!0;try{return(await b("web_app_open_invoice",{slug:s},"invoice_closed",{postEvent:this.postEvent,capture(i){return s===i.slug}})).status}finally{this.isOpened=!1}}}function or(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 p=i.type||"default";throw new Error(`Button text with type "${p}" has incorrect size: ${i.text.length}`)}return{...i,text:c,id:a}}return{...i,id:a}}),{title:t,message:e,buttons:n}}class rt{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new m({isOpened:!1},this.ee),this.supports=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,b("web_app_open_popup",or(e),"popup_closed",{postEvent:this.postEvent}).then(({button_id:t=null})=>t).finally(()=>{this.isOpened=!1})}}class st{constructor(e,t=d){o(this,"ee",new w);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));o(this,"supports");this.postEvent=t,this.state=new m({isOpened:!1},this.ee),this.supports=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 b("web_app_open_scan_qr_popup",{text:e},["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent});return typeof t=="object"&&typeof t.data=="string"?t.data:null}finally{this.isOpened=!1}}}class nt{constructor(e,t,s=d){o(this,"supports");o(this,"supportsParam");this.version=e,this.createRequestId=t,this.postEvent=s,this.supports=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(!V("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(!V("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 ar(r={}){const{async:e=!1,complete:t=e,cssVars:s=!1,acceptCustomStyles:n=!1}=r;try{const{launchParams:{initData:i,initDataRaw:a,version:c,platform:p,themeParams:h,botInline:g=!1},isPageReload:_}=de(),T=er(),l=He(c);fe()&&(n&&Jt(),l("iframe_ready",{reload_supported:!0}),y("reload_iframe",()=>window.location.reload()));const v={backButton:Qt(_,c,l),closingBehavior:Zt(_,l),cloudStorage:new je(c,T,l),createRequestId:T,hapticFeedback:new Je(c,l),invoice:new tt(c,l),mainButton:Kt(_,h.buttonColor||"#000000",h.buttonTextColor||"#ffffff",l),miniApp:Xt(_,h.backgroundColor||"#ffffff",c,g,T,l),popup:new rt(c,l),postEvent:l,qrScanner:new st(c,l),settingsButton:tr(_,c,l),themeParams:rr(h),utils:new nt(c,T,l),...i?{initData:new qe(i),initDataRaw:a}:{}},q=sr(_,p,l,t);return q instanceof Promise||t?Promise.resolve(q).then(S=>(Ee(s,v.miniApp,v.themeParams,S),{...v,viewport:S})):(Ee(s,v.miniApp,v.themeParams,q),{...v,viewport:q})}catch(i){if(t)return Promise.reject(i);throw i}}function W(r,e){return r.startsWith(e)?r:`${e}${r}`}function cr(r){const e=r.match(/#(.+)/);return e?e[1]:null}async function H(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 ur(){if(window.history.length<=1||(window.history.pushState(null,""),await H(1-window.history.length)))return;let e=await H(-1);for(;e;)e=await H(-1)}class it{constructor(e,t,{debug:s=!1,loggerPrefix:n="Navigator"}){o(this,"logger");o(this,"entries");if(this.entriesCursor=t,e.length===0)throw new Error("Entries list should not be empty.");if(t>=e.length)throw new Error("Cursor should be less than entries count.");this.entries=e.map(({pathname:i="",search:a,hash:c})=>{if(!i.startsWith("/")&&i.length>0)throw new Error('Pathname should start with "/"');return{pathname:W(i,"/"),search:a?W(a,"?"):"",hash:c?W(c,"#"):""}}),this.logger=new Be(`[${n}]`,s)}formatEntry(e){let t;if(typeof e=="string")t=e;else{const{pathname:a="",search:c,hash:p}=e;t=a+(c?W(c,"?"):"")+(p?W(p,"#"):"")}const{pathname:s,search:n,hash:i}=new URL(t,`https://localhost${this.path}`);return{pathname:s,search:n,hash:i}}get entry(){return this.entries[this.entriesCursor]}back(){return this.go(-1)}get cursor(){return this.entriesCursor}get canGoBack(){return this.entriesCursor>0}get canGoForward(){return this.entriesCursor!==this.entries.length-1}forward(){return this.go(1)}go(e){this.logger.log(`called go(${e})`);const t=Math.min(this.entries.length-1,Math.max(this.entriesCursor+e,0));if(this.entriesCursor===t)return this.performGo({updated:!1,delta:e});const s=this.entry;this.entriesCursor=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performGo({updated:!0,delta:e,before:s,after:n})}getEntries(){return this.entries.map(e=>({...e}))}get hash(){return this.entry.hash}push(e){this.entriesCursor!==this.entries.length-1&&this.entries.splice(this.entriesCursor+1);const t=this.formatEntry(e),s=this.entry;this.entriesCursor+=1,this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performPush({before:s,after:n})}get path(){return`${this.pathname}${this.search}${this.hash}`}get pathname(){return this.entry.pathname}replace(e){const t=this.formatEntry(e);if(this.search===t.search&&this.pathname===t.pathname&&this.hash===t.hash)return this.performReplace({updated:!1,entry:t});const s=this.entry;this.entries[this.entriesCursor]=t;const n=this.entry;return this.logger.log("State changed",{before:s,after:n}),this.performReplace({updated:!0,before:s,after:n})}get search(){return this.entry.search}}const Ce=0,ee=1,te=2;class _e 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 _e([{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 ur(),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 H(-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 H(-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),R("back_button_pressed",this.back))}}exports.BackButton=Me;exports.ClosingBehavior=Ge;exports.CloudStorage=je;exports.HapticFeedback=Je;exports.HashNavigator=_e;exports.InitData=qe;exports.Invoice=tt;exports.MainButton=Ze;exports.MethodUnsupportedError=K;exports.MiniApp=Ke;exports.Navigator=it;exports.ParameterUnsupportedError=Y;exports.ParseError=U;exports.ParseSchemaFieldError=M;exports.Popup=rt;exports.QRScanner=st;exports.SettingsButton=Ye;exports.ThemeParams=Ve;exports.TimeoutError=j;exports.Utils=nt;exports.Viewport=et;exports.array=Se;exports.bindMiniAppCSSVars=Fe;exports.bindThemeCSSVars=ze;exports.bindViewportCSSVars=se;exports.boolean=E;exports.chatParser=xe;exports.classNames=Ue;exports.compareVersions=Oe;exports.createPostEvent=He;exports.date=ne;exports.getHash=cr;exports.init=ar;exports.initDataParser=ue;exports.invokeCustomMethod=I;exports.isColorDark=ae;exports.isIframe=fe;exports.isRGB=Q;exports.isRGBShort=ke;exports.isRecord=A;exports.isStableViewportPlatform=Xe;exports.isTMA=Ct;exports.isTimeoutError=Gt;exports.json=f;exports.launchParamsParser=le;exports.mergeClassNames=zt;exports.number=x;exports.off=R;exports.on=y;exports.once=Mt;exports.parseInitData=pt;exports.parseLaunchParams=Re;exports.parseMessage=De;exports.parseThemeParams=pe;exports.postEvent=d;exports.request=b;exports.requestThemeParams=ft;exports.requestViewport=we;exports.retrieveLaunchData=de;exports.rgb=ce;exports.searchParams=Z;exports.serializeLaunchParams=Ie;exports.serializeThemeParams=Ae;exports.setCSSVar=C;exports.setDebug=St;exports.setTargetOrigin=kt;exports.string=u;exports.subscribe=Ut;exports.supports=V;exports.themeParamsParser=he;exports.toRGB=oe;exports.unsubscribe=Ne;exports.userParser=re;exports.withTimeout=ge;
|
|
2
|
-
//# sourceMappingURL=index.cjs.map
|