@apiteam/twa-bridge 8.0.4 → 8.0.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 CHANGED
@@ -1,90 +1,32 @@
1
- ## SDK
2
- [![npm version](https://img.shields.io/npm/v/@apiteam/twa-bridge)](https://www.npmjs.com/package/@apiteam/twa-bridge)
1
+ ## Описание
3
2
 
4
- npm package for [Telegram Web Apps (TWA)](https://core.telegram.org/bots/webapps) SDK.
3
+ Библиотека для работы с Telegram WebApp API, предоставляющая удобный интерфейс для взаимодействия с функциями Telegram Mini Apps. Реализована на TypeScript с поддержкой строгой типизации.
5
4
 
6
- ```
7
- npm i @apiteam/twa-bridge
8
- ```
9
-
10
- ### Motivation
11
- Telegram distributes SDK via [link](https://core.telegram.org/bots/webapps#initializing-web-apps). It's kinda old fashion way to work with a library:
5
+ ## Полная документация
6
+ [Документация API](https://docs.apiteam.ru)
12
7
 
13
- ```html
14
- <html lang="en">
15
- <head>
16
- <title>TWA</title>
17
- <meta charset="UTF-8">
18
- <script src="https://telegram.org/js/telegram-web-app.js"></script>
19
- <script>
20
- window.Telegram.WebApp.showPopup({ message: 'message' });
21
- </script>
22
- </head>
23
- <body></body>
24
- </html>
25
- ```
8
+ ## Основные возможности
26
9
 
27
- This package allows to work with SDK as with a npm package:
10
+ - Управление внешним видом WebApp (цвета, кнопки)
11
+ - Работа с платежами и инвойсами
12
+ - Взаимодействие с QR-сканером
13
+ - Управление буфером обмена
14
+ - Обработка системных событий Telegram
28
15
 
29
- ```js
30
- import { bridgeOpenPopup } from '@apiteam/twa-bridge/solid'
16
+ ## Установка
31
17
 
32
- bridgeOpenPopup({ message: 'message' })
18
+ ```bash
19
+ npm install @apiteam/twa-bridge
33
20
  ```
34
21
 
35
- And yes, it supports TS.
36
-
37
- ### Solid
38
- ```js
39
- import {
40
- listener,
41
- EventViewportChanged,
42
- bridgeRequestViewport
43
- } from '@apiteam/twa-bridge/solid'
44
-
45
- const onRequestViewport = (
46
- eventData: EventsData[typeof EventViewportChanged]
47
- ) => {
48
- console.log({eventData})
49
- }
22
+ # Поддержка
50
23
 
51
- listener.on(EventViewportChanged, onRequestViewport)
52
- bridgeRequestViewport()
24
+ Если у вас возникли вопросы или проблемы:
53
25
 
54
- ```
55
- ### Use Context
56
- ```js
57
- import {
58
- ProviderTWA,
59
- ContextTwa
60
- } from '@apiteam/twa-bridge/solid'
61
-
62
- const Provider = () => {
63
- return (
64
- <ProviderTWA>
65
- <App />
66
- </ProviderTWA>
67
- )
68
- }
69
-
70
- const App = () => {
71
- const context = useContext(ContextTwa)
72
-
73
- return <div>FisrtName: {context.init?.user?.first_name}</div>
74
- }
75
-
76
- ```
26
+ ## Способы связи
77
27
 
78
- ### Errors
28
+ - [Создать issue в GitHub](https://github.com/apiteamru/twa-bridge/issues)
29
+ _(Для багрепортов и запросов функций)_
79
30
 
80
- | ID | Description |
81
- | --- | ----------------------------------------------------------------- |
82
- | 1 | Method not supported |
83
- | 2 | Ooof! Something is wrong. Init data is missing |
84
- | 3 | Title too long, maximum length 64 characters |
85
- | 4 | Your message is too short, at least 1 character |
86
- | 5 | Your message is too long, maximum 256 characters |
87
- | 6 | You are passing too few buttons, at least 1 button |
88
- | 7 | You are passing too many buttons, maximum 3 buttons |
89
- | 8 | The button text ignores the following values: "ok, close, cancel" |
90
- | 9 | EDIT_MESSAGE |
31
+ - Написать в Telegram: [@apiteam_help](https://t.me/apiteam_help)
32
+ _(Быстрая помощь в реальном времени)_
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apiteam/twa-bridge",
3
- "version": "8.0.4",
3
+ "version": "8.0.6",
4
4
  "description": "Telegram bridge",
5
5
  "license": "MIT",
6
6
  "types": "index.ts",
package/solid/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import * as solid_js from 'solid-js';
2
2
  import { Context, JSX, Component } from 'solid-js';
3
+ import { NOT_SUPPORTED as NOT_SUPPORTED$1, EventsData as EventsData$1, EventBiometryAuthRequested as EventBiometryAuthRequested$1, EventBiometryTokenUpdated as EventBiometryTokenUpdated$1, EventBiometryInfoReceived as EventBiometryInfoReceived$1 } from 'solid';
4
+ import { SenderData as SenderData$1, MethodBiometryRequestAccess as MethodBiometryRequestAccess$1, MethodBiometryRequestAuth as MethodBiometryRequestAuth$1, MethodBiometryUpdateToken as MethodBiometryUpdateToken$1, MethodBiometryOpenSettings as MethodBiometryOpenSettings$1 } from 'types/methods';
3
5
 
4
6
  declare const createIsViewportChanged: () => solid_js.Accessor<{
5
7
  height: number;
@@ -114,9 +116,9 @@ type RequestViewport = (eventData?: SenderData[typeof MethodRequestViewport]) =>
114
116
  declare const requestViewport: RequestViewport;
115
117
  declare const supportRequestViewport: () => boolean;
116
118
 
117
- type RequestWriteAccess = (eventData?: SenderData[typeof MethodRequestWriteAccess]) => {
119
+ type RequestWriteAccess = (eventData?: SenderData[typeof MethodRequestWriteAccess]) => Promise<{
118
120
  status: boolean | typeof NOT_SUPPORTED;
119
- };
121
+ }>;
120
122
  declare const requestWriteAccess: RequestWriteAccess;
121
123
  declare const supportRequestWriteAccess: () => boolean;
122
124
 
@@ -208,7 +210,7 @@ declare const supportShareToStory: () => boolean;
208
210
 
209
211
  type CheckHomeScreen = (eventData: SenderData[typeof MethodCheckHomeScreen]) => Promise<{
210
212
  status: boolean | typeof NOT_SUPPORTED;
211
- data?: EventsData[typeof EventCheckHomeScreen];
213
+ data?: EventsData[typeof EventHomeScreenChecked];
212
214
  }>;
213
215
  declare const checkHomeScreen: CheckHomeScreen;
214
216
  declare const supportCheckHomeScreen: () => boolean;
@@ -267,6 +269,47 @@ type DownloadFile = (eventData?: SenderData[typeof MethodRequestFileDownload]) =
267
269
  declare const downloadFile: DownloadFile;
268
270
  declare const supportDownloadFile: () => boolean;
269
271
 
272
+ type Store = {
273
+ isInited: boolean;
274
+ isBiometricAvailable: boolean;
275
+ isAccessGranted: boolean;
276
+ isAccessRequested: boolean;
277
+ isBiometricTokenSaved: boolean;
278
+ biometricType: EventsData$1[typeof EventBiometryInfoReceived$1]['type'];
279
+ deviceId: EventsData$1[typeof EventBiometryInfoReceived$1]['device_id'];
280
+ };
281
+ type BiometricManager = {
282
+ isInited: Store['isInited'];
283
+ isBiometricAvailable: Store['isBiometricAvailable'];
284
+ isAccessGranted: Store['isAccessGranted'];
285
+ isAccessRequested: Store['isAccessRequested'];
286
+ isBiometricTokenSaved: Store['isBiometricTokenSaved'];
287
+ biometricType: Store['biometricType'];
288
+ deviceId: Store['deviceId'];
289
+ init: () => Promise<{
290
+ status: boolean | typeof NOT_SUPPORTED$1;
291
+ data?: Store;
292
+ }>;
293
+ requestAccess: (eventData: SenderData$1[typeof MethodBiometryRequestAccess$1]) => Promise<{
294
+ status: boolean | typeof NOT_SUPPORTED$1;
295
+ data?: Store;
296
+ }>;
297
+ authenticate: (eventData: SenderData$1[typeof MethodBiometryRequestAuth$1]) => Promise<{
298
+ status: boolean | typeof NOT_SUPPORTED$1;
299
+ data?: EventsData$1[typeof EventBiometryAuthRequested$1];
300
+ }>;
301
+ updateToken: (eventData: SenderData$1[typeof MethodBiometryUpdateToken$1]) => Promise<{
302
+ status: boolean | typeof NOT_SUPPORTED$1;
303
+ data?: EventsData$1[typeof EventBiometryTokenUpdated$1];
304
+ }>;
305
+ openSettings: (eventData: SenderData$1[typeof MethodBiometryOpenSettings$1]) => {
306
+ status: boolean | typeof NOT_SUPPORTED$1;
307
+ };
308
+ };
309
+ declare const BiometricManager: BiometricManager;
310
+
311
+ declare const supportBiometricManager: () => boolean;
312
+
270
313
  type User = {
271
314
  added_to_attachment_menu?: boolean;
272
315
  allows_write_to_pm?: boolean;
@@ -339,13 +382,36 @@ declare const EventViewportChanged = "viewport_changed";
339
382
  declare const EventWriteAccessRequested = "write_access_requested";
340
383
  declare const EventSafeAreaChanged = "safe_area_changed";
341
384
  declare const EventContentSafeAreaChanged = "content_safe_area_changed";
342
- declare const EventCheckHomeScreen = "web_app_check_home_screen";
343
385
  declare const EventPreparedMessageSent = "prepared_message_sent";
344
386
  declare const EventPreparedMessageFailed = "prepared_message_failed";
345
387
  declare const EventEmojiStatusSet = "emoji_status_set";
346
388
  declare const EventEmojiStatusFailed = "emoji_status_failed";
347
389
  declare const EventEmojiStatusAccessRequested = "emoji_status_access_requested";
348
390
  declare const EventFileDownloadRequested = "file_download_requested";
391
+ declare const EventAccelerometerChanged = "accelerometer_changed";
392
+ declare const EventAccelerometerFailed = "accelerometer_failed";
393
+ declare const EventAccelerometerStarted = "accelerometer_started";
394
+ declare const EventAccelerometerStopped = "accelerometer_stopped";
395
+ declare const EventBiometryAuthRequested = "biometry_auth_requested";
396
+ declare const EventBiometryInfoReceived = "biometry_info_received";
397
+ declare const EventBiometryTokenUpdated = "biometry_token_updated";
398
+ declare const EventDeviceOrientationChanged = "device_orientation_changed";
399
+ declare const EventDeviceOrientationFailed = "device_orientation_failed";
400
+ declare const EventDeviceOrientationStarted = "device_orientation_started";
401
+ declare const EventDeviceOrientationStopped = "device_orientation_stopped";
402
+ declare const EventFullscreenChanged = "fullscreen_changed";
403
+ declare const EventFullscreenFailed = "fullscreen_failed";
404
+ declare const EventGyroscopeChanged = "gyroscope_changed";
405
+ declare const EventGyroscopeFailed = "gyroscope_failed";
406
+ declare const EventGyroscopeStarted = "gyroscope_started";
407
+ declare const EventGyroscopeStopped = "gyroscope_stopped";
408
+ declare const EventHomeScreenAdded = "home_screen_added";
409
+ declare const EventHomeScreenChecked = "home_screen_checked";
410
+ declare const EventHomeScreenFailed = "home_screen_failed";
411
+ declare const EventLocationChecked = "location_checked";
412
+ declare const EventLocationRequested = "location_requested";
413
+ declare const EventSecondaryButtonPressed = "secondary_button_pressed";
414
+ declare const EventVisibilityChanged = "visibility_changed";
349
415
 
350
416
  type GetPlatform = () => 'phone' | 'web' | 'desktop';
351
417
  declare const TG_WEB = "web";
@@ -393,10 +459,7 @@ type EventsData = {
393
459
  is_expanded: boolean;
394
460
  is_state_stable: boolean;
395
461
  };
396
- write_access_requested: {
397
- status: 'allowed';
398
- };
399
- [EventCheckHomeScreen]: {
462
+ [EventHomeScreenChecked]: {
400
463
  status: 'unsupported' | 'unknown' | 'added' | 'missed';
401
464
  };
402
465
  [EventSafeAreaChanged]: {
@@ -421,6 +484,27 @@ type EventsData = {
421
484
  [EventFileDownloadRequested]: {
422
485
  status: 'downloading';
423
486
  };
487
+ [EventWriteAccessRequested]: {
488
+ status: 'allowed';
489
+ };
490
+ [EventBiometryInfoReceived]: {
491
+ available: boolean;
492
+ access_requested: boolean;
493
+ access_granted: boolean;
494
+ device_id: string;
495
+ token_saved: boolean;
496
+ type: 'face' | 'finger' | 'unknown';
497
+ };
498
+ [EventBiometryTokenUpdated]: {
499
+ status: 'updated' | 'removed';
500
+ };
501
+ [EventBiometryAuthRequested]: {
502
+ status: 'failed';
503
+ token: undefined;
504
+ } | {
505
+ status: 'authorized';
506
+ token: string;
507
+ };
424
508
  };
425
509
  interface TelegramGameProxy {
426
510
  receiveEvent: (event: string, data: string) => void;
@@ -494,6 +578,10 @@ declare const MethodSendPreparedMessage = "web_app_send_prepared_message";
494
578
  declare const MethodSetEmojiStatus = "web_app_set_emoji_status";
495
579
  declare const MethodRequestEmojiStatusAccess = "web_app_request_emoji_status_access";
496
580
  declare const MethodRequestFileDownload = "web_app_request_file_download";
581
+ declare const MethodBiometryOpenSettings = "web_app_biometry_open_settings";
582
+ declare const MethodBiometryRequestAccess = "web_app_biometry_request_access";
583
+ declare const MethodBiometryRequestAuth = "web_app_biometry_request_auth";
584
+ declare const MethodBiometryUpdateToken = "web_app_biometry_update_token";
497
585
  declare enum Method {
498
586
  InvokeCustomMethod = "web_app_invoke_custom_method",
499
587
  OpenScanQrPopup = "web_app_open_scan_qr_popup",
@@ -643,7 +731,7 @@ type SenderData = {
643
731
  text?: string;
644
732
  widget_link?: {
645
733
  url: string;
646
- name: string;
734
+ name?: string;
647
735
  };
648
736
  };
649
737
  [MethodRequestSafeArea]: undefined;
@@ -671,6 +759,16 @@ type SenderData = {
671
759
  url: string;
672
760
  file_name: string;
673
761
  };
762
+ [MethodBiometryRequestAccess]: {
763
+ reason?: string;
764
+ };
765
+ [MethodBiometryRequestAuth]: {
766
+ reason?: string;
767
+ };
768
+ [MethodBiometryUpdateToken]: {
769
+ token: string;
770
+ };
771
+ [MethodBiometryOpenSettings]: undefined;
674
772
  };
675
773
 
676
774
  type Debug = (methondName: string, errorId: number) => void;
@@ -690,4 +788,4 @@ interface ProviderTWA extends JSX.HTMLAttributes<HTMLDivElement> {
690
788
  }
691
789
  declare const ProviderTWA: Component<ProviderTWA>;
692
790
 
693
- export { ContextTwa, EventBackButtonPressed, EventCheckHomeScreen, EventClipboardTextReceived, EventContentSafeAreaChanged, EventCustomMethodInvoked, EventEmojiStatusAccessRequested, EventEmojiStatusFailed, EventEmojiStatusSet, EventFileDownloadRequested, EventInvoiceClosed, EventMainButtonPressed, EventPhoneRequested, EventPopupClosed, EventPreparedMessageFailed, EventPreparedMessageSent, EventQrTextReceived, EventReloadIframe, EventSafeAreaChanged, EventScanQrPopupClosed, EventSetCustomStyle, EventSettingsButtonPressed, EventThemeChanged, EventViewportChanged, EventWriteAccessRequested, type EventsData, type GetInitData, Method, MethodAddToHomeScreen, MethodCheckHomeScreen, MethodClose, MethodCloseScanQrPopup, MethodDataSend, MethodExitFullscreen, MethodExpand, MethodIframeReady, MethodIframeWillReload, MethodInvokeCustomMethod, MethodOpenInvoice, MethodOpenLink, MethodOpenPopup, MethodOpenScanQrPopup, MethodOpenTgLink, MethodReadTextFromClipboard, MethodReady, MethodRequestContentSafeArea, MethodRequestEmojiStatusAccess, MethodRequestFileDownload, MethodRequestFullscreen, MethodRequestPhone, MethodRequestSafeArea, MethodRequestTheme, MethodRequestViewport, MethodRequestWriteAccess, MethodSendPreparedMessage, MethodSetBackgroundColor, MethodSetBottomBarColor, MethodSetEmojiStatus, MethodSetHeaderColor, MethodSetupBackButton, MethodSetupClosingBehavior, MethodSetupMainButton, MethodSetupSettingsButton, MethodSetupSwipeBehavior, MethodShareToStory, MethodSwitchInlineQuery, MethodToggleOrientationLock, MethodTriggerHapticFeedback, NOT_SUPPORTED, type PopupButton, ProviderTWA, type SenderData, TG_DESKTOP, TG_PHONE, TG_WEB, type ThemeParams, addToHomeScreen as bridgeAddToHomeScreen, checkHomeScreen as bridgeCheckHomeScreen, close as bridgeClose, closeScanQrPopup as bridgeCloseScanQrPopup, dataSend as bridgeDataSend, downloadFile as bridgeDownloadFile, expand as bridgeExpand, getInitData as bridgeGetInitData, getThemeParams as bridgeGetThemeParams, iframeReady as bridgeIframeReady, iframeWillReload as bridgeIframeWillReload, invokeCustomMethod as bridgeInvokeCustomMethod, openInvoice as bridgeOpenInvoice, openLink as bridgeOpenLink, openPopup as bridgeOpenPopup, openScanQrPopup as bridgeOpenScanQrPopup, openTgLink as bridgeOpenTgLink, readTextFromClipboard as bridgeReadTextFromClipboard, ready as bridgeReady, requestContentSafeAreaInset as bridgeRequestContentSafeAreaInset, requestEmojiStatus as bridgeRequestEmojiStatus, requestPhone as bridgeRequestPhone, requestSafeAreaInset as bridgeRequestSafeAreaInset, requestTheme as bridgeRequestTheme, requestViewport as bridgeRequestViewport, requestWriteAccess as bridgeRequestWriteAccess, sender as bridgeSend, sessionStorageGet as bridgeSessionStorageGet, sessionStorageSet as bridgeSessionStorageSet, setBackgroundColor as bridgeSetBackgroundColor, setBottomBarColor as bridgeSetBottomBarColor, setEmojiStatus as bridgeSetEmojiStatus, setHeaderColor as bridgeSetHeaderColor, setupBackButton as bridgeSetupBackButton, setupClosingBehavior as bridgeSetupClosingBehavior, setupFullScreen as bridgeSetupFullScreen, setupMainButton as bridgeSetupMainButton, setupOrientation as bridgeSetupOrientation, setupSettingsButton as bridgeSetupSettingsButton, setupSwipeBehavior as bridgeSetupSwipeBehavior, shareMessage as bridgeShareMessage, shareToStory as bridgeShareToStory, switchInlineQuery as bridgeSwitchInlineQuery, triggerHapticFeedback as bridgeTriggerHapticFeedback, createIsViewportChanged, debug, getAppData, getPlatform, listener, sender, supportAddToHomeScreen, supportCheckHomeScreen, supportClose, supportCloseScanQrPopup, supportDataSend, supportDownloadFile, supportExpand, supportIframeReady, supportIframeWillReload, supportInvokeCustomMethod, supportOpenInvoice, supportOpenLink, supportOpenPopup, supportOpenScanQrPopup, supportOpenTgLink, supportReadTextFromClipboard, supportReady, supportRequestContentSafeAreaInset, supportRequestEmojiStatus, supportRequestPhone, supportRequestSafeAreaInset, supportRequestTheme, supportRequestViewport, supportRequestWriteAccess, supportSessionStorageGet, supportSessionStorageSet, supportSetBackgroundColor, supportSetBottomBarColor, supportSetEmojiStatus, supportSetHeaderColor, supportSetupBackButton, supportSetupClosingBehavior, supportSetupFullScreen, supportSetupMainButton, supportSetupOrientation, supportSetupSettingsButton, supportSetupSwipeBehavior, supportShareMessage, supportShareToStory, supportSwitchInlineQuery, supportTriggerHapticFeedback };
791
+ export { BiometricManager, ContextTwa, EventAccelerometerChanged, EventAccelerometerFailed, EventAccelerometerStarted, EventAccelerometerStopped, EventBackButtonPressed, EventBiometryAuthRequested, EventBiometryInfoReceived, EventBiometryTokenUpdated, EventClipboardTextReceived, EventContentSafeAreaChanged, EventCustomMethodInvoked, EventDeviceOrientationChanged, EventDeviceOrientationFailed, EventDeviceOrientationStarted, EventDeviceOrientationStopped, EventEmojiStatusAccessRequested, EventEmojiStatusFailed, EventEmojiStatusSet, EventFileDownloadRequested, EventFullscreenChanged, EventFullscreenFailed, EventGyroscopeChanged, EventGyroscopeFailed, EventGyroscopeStarted, EventGyroscopeStopped, EventHomeScreenAdded, EventHomeScreenChecked, EventHomeScreenFailed, EventInvoiceClosed, EventLocationChecked, EventLocationRequested, EventMainButtonPressed, EventPhoneRequested, EventPopupClosed, EventPreparedMessageFailed, EventPreparedMessageSent, EventQrTextReceived, EventReloadIframe, EventSafeAreaChanged, EventScanQrPopupClosed, EventSecondaryButtonPressed, EventSetCustomStyle, EventSettingsButtonPressed, EventThemeChanged, EventViewportChanged, EventVisibilityChanged, EventWriteAccessRequested, type EventsData, type GetInitData, Method, MethodAddToHomeScreen, MethodCheckHomeScreen, MethodClose, MethodCloseScanQrPopup, MethodDataSend, MethodExitFullscreen, MethodExpand, MethodIframeReady, MethodIframeWillReload, MethodInvokeCustomMethod, MethodOpenInvoice, MethodOpenLink, MethodOpenPopup, MethodOpenScanQrPopup, MethodOpenTgLink, MethodReadTextFromClipboard, MethodReady, MethodRequestContentSafeArea, MethodRequestEmojiStatusAccess, MethodRequestFileDownload, MethodRequestFullscreen, MethodRequestPhone, MethodRequestSafeArea, MethodRequestTheme, MethodRequestViewport, MethodRequestWriteAccess, MethodSendPreparedMessage, MethodSetBackgroundColor, MethodSetBottomBarColor, MethodSetEmojiStatus, MethodSetHeaderColor, MethodSetupBackButton, MethodSetupClosingBehavior, MethodSetupMainButton, MethodSetupSettingsButton, MethodSetupSwipeBehavior, MethodShareToStory, MethodSwitchInlineQuery, MethodToggleOrientationLock, MethodTriggerHapticFeedback, NOT_SUPPORTED, type PopupButton, ProviderTWA, type SenderData, TG_DESKTOP, TG_PHONE, TG_WEB, type ThemeParams, addToHomeScreen as bridgeAddToHomeScreen, checkHomeScreen as bridgeCheckHomeScreen, close as bridgeClose, closeScanQrPopup as bridgeCloseScanQrPopup, dataSend as bridgeDataSend, downloadFile as bridgeDownloadFile, expand as bridgeExpand, getInitData as bridgeGetInitData, getThemeParams as bridgeGetThemeParams, iframeReady as bridgeIframeReady, iframeWillReload as bridgeIframeWillReload, invokeCustomMethod as bridgeInvokeCustomMethod, openInvoice as bridgeOpenInvoice, openLink as bridgeOpenLink, openPopup as bridgeOpenPopup, openScanQrPopup as bridgeOpenScanQrPopup, openTgLink as bridgeOpenTgLink, readTextFromClipboard as bridgeReadTextFromClipboard, ready as bridgeReady, requestContentSafeAreaInset as bridgeRequestContentSafeAreaInset, requestEmojiStatus as bridgeRequestEmojiStatus, requestPhone as bridgeRequestPhone, requestSafeAreaInset as bridgeRequestSafeAreaInset, requestTheme as bridgeRequestTheme, requestViewport as bridgeRequestViewport, requestWriteAccess as bridgeRequestWriteAccess, sender as bridgeSend, sessionStorageGet as bridgeSessionStorageGet, sessionStorageSet as bridgeSessionStorageSet, setBackgroundColor as bridgeSetBackgroundColor, setBottomBarColor as bridgeSetBottomBarColor, setEmojiStatus as bridgeSetEmojiStatus, setHeaderColor as bridgeSetHeaderColor, setupBackButton as bridgeSetupBackButton, setupClosingBehavior as bridgeSetupClosingBehavior, setupFullScreen as bridgeSetupFullScreen, setupMainButton as bridgeSetupMainButton, setupOrientation as bridgeSetupOrientation, setupSettingsButton as bridgeSetupSettingsButton, setupSwipeBehavior as bridgeSetupSwipeBehavior, shareMessage as bridgeShareMessage, shareToStory as bridgeShareToStory, switchInlineQuery as bridgeSwitchInlineQuery, triggerHapticFeedback as bridgeTriggerHapticFeedback, createIsViewportChanged, debug, getAppData, getPlatform, listener, sender, supportAddToHomeScreen, supportBiometricManager, supportCheckHomeScreen, supportClose, supportCloseScanQrPopup, supportDataSend, supportDownloadFile, supportExpand, supportIframeReady, supportIframeWillReload, supportInvokeCustomMethod, supportOpenInvoice, supportOpenLink, supportOpenPopup, supportOpenScanQrPopup, supportOpenTgLink, supportReadTextFromClipboard, supportReady, supportRequestContentSafeAreaInset, supportRequestEmojiStatus, supportRequestPhone, supportRequestSafeAreaInset, supportRequestTheme, supportRequestViewport, supportRequestWriteAccess, supportSessionStorageGet, supportSessionStorageSet, supportSetBackgroundColor, supportSetBottomBarColor, supportSetEmojiStatus, supportSetHeaderColor, supportSetupBackButton, supportSetupClosingBehavior, supportSetupFullScreen, supportSetupMainButton, supportSetupOrientation, supportSetupSettingsButton, supportSetupSwipeBehavior, supportShareMessage, supportShareToStory, supportSwitchInlineQuery, supportTriggerHapticFeedback };
package/solid/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("solid-js"),t=require("solid-js/store");const s="web",o="phone",r="desktop",a=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(t)?o:["tdesktop","macos"].includes(t)?r:s},p="not_supported",n=(e,t)=>{const s=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(s?.replace(".",""))>=Number(String(e)?.replace(".",""))&&-1!==t.indexOf(a())},i=()=>Math.random().toString(36).substring(3,9),u=e=>{var t;if(t=/^\s*#([0-9a-f]{6})\s*$/i.exec(e+=""))return"#"+t[1].toLowerCase();if(t=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(e))return("#"+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]).toLowerCase();if(t=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(e)){var s=parseInt(t[1]),o=parseInt(t[2]),r=parseInt(t[3]);return"#"+((s<16?"0":"")+s.toString(16))+((o<16?"0":"")+o.toString(16))+((r<16?"0":"")+r.toString(16))}return!1},d=e=>{const t=window.location.hash.slice(1),s=new URLSearchParams(t),o=JSON.parse(s.get("tgWebAppThemeParams")??""),r=e||o;for(var a of Object.keys(r)){var p=u(r[a]);"string"==typeof p&&(r[a]=p)}return"#1c1c1d"==r?.bg_color&&r?.bg_color==r?.secondary_bg_color&&(r.secondary_bg_color="#2c2c2e"),r},c=e=>_()?(Me(Te,e),{status:!0}):(qe(Te,1),{status:p}),_=()=>n(0,[s,r,o]),l=e=>x()?(Me(Be,e),{status:!0}):(qe(Be,1),{status:p}),x=()=>n(6.4,[o]),g=e=>S()?(Me(Oe,e),{status:!0}):(qe(Oe,1),{status:p}),S=()=>n(0,[s,r,o]),h=e=>m()?(Me(Ie,e),{status:!0}):(qe(Ie,1),{status:p}),m=()=>n(0,[o]),w=e=>b()?(Me(Ae,e),{status:!0}):(qe(Ae,1),{status:p}),b=()=>n(0,[s]),v=()=>f()?(Me(Ae),{status:!0}):(qe(Ae,1),{status:p}),f=()=>n(0,[s]),R=async e=>q()?(void 0===e.req_id&&(e.req_id=i()),Me(ke,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Tt(gt,o))};Et(gt,o)}))):(qe(ke,1),{status:p}),q=()=>n(6.9,[s,r,o]),C=e=>M()?(Me(Le,e),{status:!0}):(qe(Le,1),{status:p}),M=()=>n(6.1,[s,r,o]),k=e=>y()?(Me(je,e),{status:!0}):(qe(je,1),{status:p}),y=()=>n(6.4,[s,r,o]),P=async e=>E()?(e.title.length>64&&qe(He,3),e.message.length<1&&qe(He,4),e.message.length>256&&qe(He,5),e.buttons.length<1&&qe(He,6),e.buttons.length>3&&qe(He,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&qe(He,8),Me(He,e),new Promise(((t,s)=>{const o=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),Tt(ht,o)};Et(ht,o)}))):(qe(He,1),{status:p}),E=()=>n(6.2,[s,r,o]),T=async e=>B()?(Me(ye,e),new Promise(((t,s)=>{Bt(mt,(s=>{e.is_close&&l(),t({status:!0,data:s})})),Bt(wt,(()=>{t({status:"closed"})}))}))):(qe(ye,1),{status:p}),B=()=>n(6.4,[o]),O=e=>{const t=function(e){try{return new URL(e)}catch(t){try{return new URL(e,"https://t.me")}catch(t){return e.startsWith("/")||(e="/"+e),new URL(e,"https://t.me")}}}(e.path_full);return e.path_full=t.pathname=t.search,I()?(Me(We,e),{status:!0}):(qe(We,1),{status:p})},I=()=>n(7,[s,r,o]);const A=async e=>F()?(e||(e={req_id:void 0}),void 0===e.req_id&&(e.req_id=i()),Me(Pe,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e?.req_id&&(t({status:!0,data:s}),Tt(xt,o))};Et(xt,o)}))):(qe(Pe,1),{status:p}),F=()=>n(6.4,[s,r,o]),L=e=>j()?(Me(De,e),{status:!0}):(qe(De,1),{status:p}),j=()=>n(6.9,[s,r,o]),H=async()=>W()?(Me(Ee),new Promise(((e,t)=>{Bt(St,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(qe(Ee,1),{status:p}),W=()=>n(6.9,[s,r,o]),D=e=>Q()?(Me(Qe,e),{status:!0}):(qe(Qe,1),{status:p}),Q=()=>n(0,[s,r,o]),N=e=>U()?(Me(Ne,e),{status:!0}):(qe(Ne,1),{status:p}),U=()=>n(0,[s,r,o]),V=()=>G()?(Me(Ue),{status:!0}):(qe(Ue,1),{status:p}),G=()=>n(6.9,[s,r,o]),$=e=>J()?(Me(Ve,e),{status:!0}):(qe(Ve,1),{status:p}),J=()=>n(6.1,[s,r,o]),z=e=>K()?(Me(Ge,e),{status:!0}):(qe(Ge,1),{status:p}),K=()=>n(6.1,[s,r,o]),X=e=>Y()?(Me($e,{color:e?.color||e?.color_key}),{status:!0}):(qe($e,1),{status:p}),Y=()=>n(7.1,[s,r,o]),Z=e=>ee()?(Me(Je,e),{status:!0}):(qe(Je,1),{status:p}),ee=()=>n(6.1,[s,r,o]),te=e=>se()?(Me(ze,e),{status:!0}):(qe(ze,1),{status:p}),se=()=>n(6.2,[s,r,o]),oe=e=>re()?(Me(Ke,e),{status:!0}):(qe(Ke,1),{status:p}),re=()=>n(0,[s,r,o]),ae=e=>pe()?(Me(Xe,e),{status:!0}):(qe(Xe,1),{status:p}),pe=()=>n(6.1,[s,r,o]),ne=e=>ie()?(e.query.length>256&&qe(Ye,9),Me(Ye,e),{status:!0}):(qe(Ye,1),{status:p}),ie=()=>n(6.7,[s,r,o]),ue=e=>de()?(Me(Ze,e),{status:!0}):(qe(Ze,1),{status:p}),de=()=>n(6.1,[o]),ce=e=>_e()?(Me(et,e),{status:!0}):(qe(et,1),{status:p}),_e=()=>n(7.7,[s,r,o]),le=()=>n(7.8,[s,r,o]),xe=()=>n(8,[r,o]),ge=()=>n(8,[r,o]),Se=()=>n(8,[s,r,o]),he=()=>n(8,[s,r,o]),me=()=>n(8,[s,r,o]),we=()=>n(8,[s,r,o]),be=()=>n(8,[s,r,o]),ve=()=>n(8,[s,r,o]),fe=()=>n(8,[s,r,o]),Re=()=>n(8,[s,r,o]),qe=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)},Ce=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppData");if(!t)return void qe("getInitData",2);const s=new URLSearchParams(t);let o={};return s.forEach(((e,t)=>{if(o[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{o[t]=JSON.parse(e)}catch{}})),o},Me=(e,t)=>{if(window.TelegramWebviewProxy)window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t));else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:e,eventData:t}));else try{window.parent.postMessage(JSON.stringify({eventType:e,eventData:t}),"*")}catch(e){qe("postMessage Iframe",10)}},ke="web_app_invoke_custom_method",ye="web_app_open_scan_qr_popup",Pe="web_app_read_text_from_clipboard",Ee="web_app_request_phone",Te="web_app_close",Be="web_app_close_scan_qr_popup",Oe="web_app_data_send",Ie="web_app_expand",Ae="iframe_ready",Fe="iframe_will_reload",Le="web_app_open_invoice",je="web_app_open_link",He="web_app_open_popup",We="web_app_open_tg_link",De="web_app_ready",Qe="web_app_request_theme",Ne="web_app_request_viewport",Ue="web_app_request_write_access",Ve="web_app_set_background_color",Ge="web_app_set_header_color",$e="web_app_set_bottom_bar_color",Je="web_app_setup_back_button",ze="web_app_setup_closing_behavior",Ke="web_app_setup_main_button",Xe="web_app_setup_settings_button",Ye="web_app_switch_inline_query",Ze="web_app_trigger_haptic_feedback",et="web_app_setup_swipe_behavior",tt="web_app_share_to_story",st="web_app_request_safe_area",ot="web_app_request_content_safe_area",rt="web_app_request_fullscreen",at="web_app_exit_fullscreen",pt="web_app_toggle_orientation_lock",nt="web_app_add_to_home_screen",it="web_app_check_home_screen",ut="web_app_send_prepared_message",dt="web_app_set_emoji_status",ct="web_app_request_emoji_status_access",_t="web_app_request_file_download";var lt=(e=>(e[e.InvokeCustomMethod=ke]="InvokeCustomMethod",e[e.OpenScanQrPopup=ye]="OpenScanQrPopup",e[e.ReadTextFromClipboard=Pe]="ReadTextFromClipboard",e[e.RequestPhone=Ee]="RequestPhone",e[e.Close=Te]="Close",e[e.CloseScanQrPopup=Be]="CloseScanQrPopup",e[e.DataSend=Oe]="DataSend",e[e.Expand=Ie]="Expand",e[e.IframeReady=Ae]="IframeReady",e[e.IframeWillReload=Fe]="IframeWillReload",e[e.OpenInvoice=Le]="OpenInvoice",e[e.OpenLink=je]="OpenLink",e[e.OpenPopup=He]="OpenPopup",e[e.OpenTgLink=We]="OpenTgLink",e[e.Ready=De]="Ready",e[e.RequestTheme=Qe]="RequestTheme",e[e.RequestViewport=Ne]="RequestViewport",e[e.RequestWriteAccess=Ue]="RequestWriteAccess",e[e.SetBackgroundColor=Ve]="SetBackgroundColor",e[e.SetHeaderColor=Ge]="SetHeaderColor",e[e.SetBottomBarColor=$e]="SetBottomBarColor",e[e.SetupBackButton=Je]="SetupBackButton",e[e.SetupClosingBehavior=ze]="SetupClosingBehavior",e[e.SetupMainButton=Ke]="SetupMainButton",e[e.SetupSettingsButton=Xe]="SetupSettingsButton",e[e.SwitchInlineQuery=Ye]="SwitchInlineQuery",e[e.TriggerHapticFeedback=Ze]="TriggerHapticFeedback",e[e.SetupSwipeBehavior=et]="SetupSwipeBehavior",e[e.ShareToStory=tt]="ShareToStory",e[e.RequestSafeArea=st]="RequestSafeArea",e[e.RequestContentSafeArea=ot]="RequestContentSafeArea",e[e.RequestFullscreen=rt]="RequestFullscreen",e[e.ExitFullscreen=at]="ExitFullscreen",e[e.ToggleOrientationLock=pt]="ToggleOrientationLock",e[e.AddToHomeScreen=nt]="AddToHomeScreen",e[e.CheckHomeScreen=it]="CheckHomeScreen",e[e.SendPreparedMessage=ut]="SendPreparedMessage",e[e.SetEmojiStatus=dt]="SetEmojiStatus",e[e.RequestEmojiStatusAccess=ct]="RequestEmojiStatusAccess",e[e.RequestFileDownload=_t]="RequestFileDownload",e))(lt||{});const xt="clipboard_text_received",gt="custom_method_invoked",St="phone_requested",ht="popup_closed",mt="qr_text_received",wt="scan_qr_popup_closed",bt="theme_changed",vt="viewport_changed",ft="web_app_check_home_screen",Rt="prepared_message_sent",qt="prepared_message_failed",Ct="emoji_status_set",Mt="emoji_status_failed",kt="emoji_status_access_requested",yt="file_download_requested",Pt=((e=new Map)=>({once:(t,s,o=e.get(t),r=e=>{s(e),o&&o.splice(o.indexOf(s)>>>0,1)})=>o?o.push(r):e.set(t,[r]),on:(t,s,o=e.get(t))=>o?o.push(s):e.set(t,[s]),off:(t,s,o=e.get(t))=>o&&s?o.splice(o.indexOf(s)>>>0,1):e.set(t,[]),emit:(t,s,o=e.get(t)||[])=>{for(const e of o)e(s)}}))();(()=>{function e(e,t){e===bt&&(t.theme_params=d(t.theme_params)),Pt.emit(e,t),Pt.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const Et=(e,t)=>{Pt.on(e,t)},Tt=(e,t)=>{Pt.off(e,t)},Bt=(e,t)=>{Pt.once(e,t)};var Ot=Object.freeze({__proto__:null,off:Tt,on:Et,once:Bt});const It=e.createContext({viewport:void 0,theme:void 0,init:void 0});exports.ContextTwa=It,exports.EventBackButtonPressed="back_button_pressed",exports.EventCheckHomeScreen=ft,exports.EventClipboardTextReceived=xt,exports.EventContentSafeAreaChanged="content_safe_area_changed",exports.EventCustomMethodInvoked=gt,exports.EventEmojiStatusAccessRequested=kt,exports.EventEmojiStatusFailed=Mt,exports.EventEmojiStatusSet=Ct,exports.EventFileDownloadRequested=yt,exports.EventInvoiceClosed="invoice_closed",exports.EventMainButtonPressed="main_button_pressed",exports.EventPhoneRequested=St,exports.EventPopupClosed=ht,exports.EventPreparedMessageFailed=qt,exports.EventPreparedMessageSent=Rt,exports.EventQrTextReceived=mt,exports.EventReloadIframe="reload_iframe",exports.EventSafeAreaChanged="safe_area_changed",exports.EventScanQrPopupClosed=wt,exports.EventSetCustomStyle="set_custom_style",exports.EventSettingsButtonPressed="settings_button_pressed",exports.EventThemeChanged=bt,exports.EventViewportChanged=vt,exports.EventWriteAccessRequested="write_access_requested",exports.Method=lt,exports.MethodAddToHomeScreen=nt,exports.MethodCheckHomeScreen=it,exports.MethodClose=Te,exports.MethodCloseScanQrPopup=Be,exports.MethodDataSend=Oe,exports.MethodExitFullscreen=at,exports.MethodExpand=Ie,exports.MethodIframeReady=Ae,exports.MethodIframeWillReload=Fe,exports.MethodInvokeCustomMethod=ke,exports.MethodOpenInvoice=Le,exports.MethodOpenLink=je,exports.MethodOpenPopup=He,exports.MethodOpenScanQrPopup=ye,exports.MethodOpenTgLink=We,exports.MethodReadTextFromClipboard=Pe,exports.MethodReady=De,exports.MethodRequestContentSafeArea=ot,exports.MethodRequestEmojiStatusAccess=ct,exports.MethodRequestFileDownload=_t,exports.MethodRequestFullscreen=rt,exports.MethodRequestPhone=Ee,exports.MethodRequestSafeArea=st,exports.MethodRequestTheme=Qe,exports.MethodRequestViewport=Ne,exports.MethodRequestWriteAccess=Ue,exports.MethodSendPreparedMessage=ut,exports.MethodSetBackgroundColor=Ve,exports.MethodSetBottomBarColor=$e,exports.MethodSetEmojiStatus=dt,exports.MethodSetHeaderColor=Ge,exports.MethodSetupBackButton=Je,exports.MethodSetupClosingBehavior=ze,exports.MethodSetupMainButton=Ke,exports.MethodSetupSettingsButton=Xe,exports.MethodSetupSwipeBehavior=et,exports.MethodShareToStory=tt,exports.MethodSwitchInlineQuery=Ye,exports.MethodToggleOrientationLock=pt,exports.MethodTriggerHapticFeedback=Ze,exports.NOT_SUPPORTED=p,exports.ProviderTWA=s=>{const[o,r]=t.createStore({viewport:void 0,theme:void 0,init:void 0});return e.createEffect((()=>{const t=()=>{r("init",Ce())};t();const s=e=>{t(),r("viewport",e)};Et(vt,s),N();const o=e=>{t(),r("theme",e)};return Et(bt,o),N(),e.onCleanup((()=>{Tt(vt,s),Tt(bt,o)})),()=>{Tt(vt,s),Tt(bt,o)}})),It.Provider({value:o,children:s.children})},exports.TG_DESKTOP=r,exports.TG_PHONE=o,exports.TG_WEB=s,exports.bridgeAddToHomeScreen=()=>ge()?(Me(nt),{status:!0}):(qe(nt,1),{status:p}),exports.bridgeCheckHomeScreen=async e=>xe()?(Me(it,e),new Promise(((e,t)=>{const s=t=>{e({status:!0,data:t}),Tt(ft,s)};Et(ft,s)}))):(qe(it,1),{status:p,data:void 0}),exports.bridgeClose=c,exports.bridgeCloseScanQrPopup=l,exports.bridgeDataSend=g,exports.bridgeDownloadFile=async e=>Re()?new Promise(((t,s)=>{Bt(yt,(function(e){t({status:"downloading"===e.status})})),Me(_t,e)})):(qe(_t,1),{status:p}),exports.bridgeExpand=h,exports.bridgeGetInitData=Ce,exports.bridgeGetThemeParams=d,exports.bridgeIframeReady=w,exports.bridgeIframeWillReload=v,exports.bridgeInvokeCustomMethod=R,exports.bridgeOpenInvoice=C,exports.bridgeOpenLink=k,exports.bridgeOpenPopup=P,exports.bridgeOpenScanQrPopup=T,exports.bridgeOpenTgLink=O,exports.bridgeReadTextFromClipboard=A,exports.bridgeReady=L,exports.bridgeRequestContentSafeAreaInset=()=>he()?(Me(ot),{status:!0}):(qe(ot,1),{status:p}),exports.bridgeRequestEmojiStatus=async e=>be()?new Promise(((t,s)=>{Bt(kt,(function(e){t({status:"allowed"===e.status})})),Me(ct,e)})):(qe(ct,1),{status:p}),exports.bridgeRequestPhone=H,exports.bridgeRequestSafeAreaInset=()=>Se()?(Me(st),{status:!0}):(qe(st,1),{status:p}),exports.bridgeRequestTheme=D,exports.bridgeRequestViewport=N,exports.bridgeRequestWriteAccess=V,exports.bridgeSend=Me,exports.bridgeSessionStorageGet=({key:e})=>{try{return{is_json:!0,value:JSON.parse(window.sessionStorage.getItem("__telegram__"+e)??""),status:!0}}catch(t){return{is_json:!1,value:window.sessionStorage.getItem("__telegram__"+e)??"",status:!0}}},exports.bridgeSessionStorageSet=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(s){return window.sessionStorage.setItem("__telegram__"+e,t),{status:!0}}},exports.bridgeSetBackgroundColor=$,exports.bridgeSetBottomBarColor=X,exports.bridgeSetEmojiStatus=async e=>ve()?new Promise(((t,s)=>{Bt(Ct,(()=>t({status:!0}))),Bt(Mt,(()=>t({status:!1}))),Me(dt,e)})):(qe(dt,1),{status:p}),exports.bridgeSetHeaderColor=z,exports.bridgeSetupBackButton=Z,exports.bridgeSetupClosingBehavior=te,exports.bridgeSetupFullScreen=e=>{const t=e?.is_full||!1;return me()?(Me(t?rt:at),{status:!0}):(qe(t?rt:at,1),{status:p})},exports.bridgeSetupMainButton=oe,exports.bridgeSetupOrientation=e=>we()?(Me(pt,e),{status:!0}):(qe(pt,1),{status:p}),exports.bridgeSetupSettingsButton=ae,exports.bridgeSetupSwipeBehavior=ce,exports.bridgeShareMessage=async e=>fe()?new Promise(((t,s)=>{Bt(Rt,(()=>t({status:!0}))),Bt(qt,(()=>t({status:!1}))),Me(ut,e)})):(qe(ut,1),{status:p}),exports.bridgeShareToStory=e=>le()?e?.text&&e?.text.length>2048?(console.warn(`[@apiteam/twa-bridge](${tt}) | Text is too long`),{status:!1,error_id:1}):e?.widget_link?.name&&e?.widget_link.name.length>48?(console.warn(`[@apiteam/twa-bridge](${tt}) | Link name is too long`),{status:!1,error_id:2}):(Me(tt,e),{status:!0}):(qe(tt,1),{status:p}),exports.bridgeSwitchInlineQuery=ne,exports.bridgeTriggerHapticFeedback=ue,exports.createIsViewportChanged=()=>{const[t,s]=e.createSignal({height:0,is_expanded:!1,is_state_stable:!1}),o=e=>s(e);return e.onMount((()=>{Et(vt,o),Me(Ne)})),e.onCleanup((()=>{Tt(vt,o)})),t},exports.debug=qe,exports.getAppData=()=>{const e=window.location.hash.slice(1);return new URLSearchParams(e).get("tgWebAppData")},exports.getPlatform=a,exports.listener=Ot,exports.sender=Me,exports.supportAddToHomeScreen=ge,exports.supportCheckHomeScreen=xe,exports.supportClose=_,exports.supportCloseScanQrPopup=x,exports.supportDataSend=S,exports.supportDownloadFile=Re,exports.supportExpand=m,exports.supportIframeReady=b,exports.supportIframeWillReload=f,exports.supportInvokeCustomMethod=q,exports.supportOpenInvoice=M,exports.supportOpenLink=y,exports.supportOpenPopup=E,exports.supportOpenScanQrPopup=B,exports.supportOpenTgLink=I,exports.supportReadTextFromClipboard=F,exports.supportReady=j,exports.supportRequestContentSafeAreaInset=he,exports.supportRequestEmojiStatus=be,exports.supportRequestPhone=W,exports.supportRequestSafeAreaInset=Se,exports.supportRequestTheme=Q,exports.supportRequestViewport=U,exports.supportRequestWriteAccess=G,exports.supportSessionStorageGet=()=>!0,exports.supportSessionStorageSet=()=>!0,exports.supportSetBackgroundColor=J,exports.supportSetBottomBarColor=Y,exports.supportSetEmojiStatus=ve,exports.supportSetHeaderColor=K,exports.supportSetupBackButton=ee,exports.supportSetupClosingBehavior=se,exports.supportSetupFullScreen=me,exports.supportSetupMainButton=re,exports.supportSetupOrientation=we,exports.supportSetupSettingsButton=pe,exports.supportSetupSwipeBehavior=_e,exports.supportShareMessage=fe,exports.supportShareToStory=le,exports.supportSwitchInlineQuery=ie,exports.supportTriggerHapticFeedback=de;
1
+ "use strict";var e=require("solid"),t=require("solid-js"),s=require("solid-js/store"),o=require("types/methods"),r=require("utils");const a="web",n="phone",i="desktop",p=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(t)?n:["tdesktop","macos"].includes(t)?i:a},d="not_supported",u=(e,t)=>{const s=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(s?.replace(".",""))>=Number(String(e)?.replace(".",""))&&-1!==t.indexOf(p())},c=()=>Math.random().toString(36).substring(3,9),l=e=>{var t;if(t=/^\s*#([0-9a-f]{6})\s*$/i.exec(e+=""))return"#"+t[1].toLowerCase();if(t=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(e))return("#"+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]).toLowerCase();if(t=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(e)){var s=parseInt(t[1]),o=parseInt(t[2]),r=parseInt(t[3]);return"#"+((s<16?"0":"")+s.toString(16))+((o<16?"0":"")+o.toString(16))+((r<16?"0":"")+r.toString(16))}return!1},_=e=>{const t=window.location.hash.slice(1),s=new URLSearchParams(t),o=JSON.parse(s.get("tgWebAppThemeParams")??""),r=e||o;for(var a of Object.keys(r)){var n=l(r[a]);"string"==typeof n&&(r[a]=n)}return"#1c1c1d"==r?.bg_color&&r?.bg_color==r?.secondary_bg_color&&(r.secondary_bg_color="#2c2c2e"),r},m=e=>x()?(Ie(Le,e),{status:!0}):(Ce(Le,1),{status:d}),x=()=>u(0,[a,i,n]),g=e=>h()?(Ie(He,e),{status:!0}):(Ce(He,1),{status:d}),h=()=>u(6.4,[n]),v=e=>S()?(Ie(je,e),{status:!0}):(Ce(je,1),{status:d}),S=()=>u(0,[a,i,n]),b=e=>w()?(Ie(Ue,e),{status:!0}):(Ce(Ue,1),{status:d}),w=()=>u(0,[n]),f=e=>y()?(Ie(Ne,e),{status:!0}):(Ce(Ne,1),{status:d}),y=()=>u(0,[a]),R=()=>B()?(Ie(Ne),{status:!0}):(Ce(Ne,1),{status:d}),B=()=>u(0,[a]),E=async e=>q()?(void 0===e.req_id&&(e.req_id=c()),Ie(Fe,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Ht(Rt,o))};Lt(Rt,o)}))):(Ce(Fe,1),{status:d}),q=()=>u(6.9,[a,i,n]),T=e=>k()?(Ie(Ve,e),{status:!0}):(Ce(Ve,1),{status:d}),k=()=>u(6.1,[a,i,n]),A=e=>M()?(Ie($e,e),{status:!0}):(Ce($e,1),{status:d}),M=()=>u(6.4,[a,i,n]),P=async e=>C()?(e.title.length>64&&Ce(Je,3),e.message.length<1&&Ce(Je,4),e.message.length>256&&Ce(Je,5),e.buttons.length<1&&Ce(Je,6),e.buttons.length>3&&Ce(Je,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&Ce(Je,8),Ie(Je,e),new Promise(((t,s)=>{const o=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),Ht(Et,o)};Lt(Et,o)}))):(Ce(Je,1),{status:d}),C=()=>u(6.2,[a,i,n]),O=async e=>I()?(Ie(De,e),new Promise(((t,s)=>{jt(qt,(s=>{e.is_close&&g(),t({status:!0,data:s})})),jt(Tt,(()=>{t({status:"closed"})}))}))):(Ce(De,1),{status:d}),I=()=>u(6.4,[n]),F=e=>{const t=function(e){try{return new URL(e)}catch(t){try{return new URL(e,"https://t.me")}catch(t){return e.startsWith("/")||(e="/"+e),new URL(e,"https://t.me")}}}(e.path_full);return e.path_full=t.pathname=t.search,D()?(Ie(Ke,e),{status:!0}):(Ce(Ke,1),{status:d})},D=()=>u(7,[a,i,n]);const W=async e=>G()?(e||(e={req_id:void 0}),void 0===e.req_id&&(e.req_id=c()),Ie(We,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e?.req_id&&(t({status:!0,data:s}),Ht(yt,o))};Lt(yt,o)}))):(Ce(We,1),{status:d}),G=()=>u(6.4,[a,i,n]),L=e=>H()?(Ie(ze,e),{status:!0}):(Ce(ze,1),{status:d}),H=()=>u(6.9,[a,i,n]),j=async()=>U()?(Ie(Ge),new Promise(((e,t)=>{jt(Bt,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(Ce(Ge,1),{status:d}),U=()=>u(6.9,[a,i,n]),N=e=>Q()?(Ie(Xe,e),{status:!0}):(Ce(Xe,1),{status:d}),Q=()=>u(0,[a,i,n]),V=e=>$()?(Ie(Ye,e),{status:!0}):(Ce(Ye,1),{status:d}),$=()=>u(0,[a,i,n]),J=()=>new Promise(((e,t)=>{if(!K())return Ce(Ze,1),void e({status:d});const s=t=>{e({status:"allowed"===t.status}),Ht(Mt,s)};Lt(Mt,s),Ie(Ze)})),K=()=>u(6.9,[a,i,n]),z=e=>X()?(Ie(et,e),{status:!0}):(Ce(et,1),{status:d}),X=()=>u(6.1,[a,i,n]),Y=e=>Z()?(Ie(tt,e),{status:!0}):(Ce(tt,1),{status:d}),Z=()=>u(6.1,[a,i,n]),ee=e=>te()?(Ie(st,{color:e?.color||e?.color_key}),{status:!0}):(Ce(st,1),{status:d}),te=()=>u(7.1,[a,i,n]),se=e=>oe()?(Ie(ot,e),{status:!0}):(Ce(ot,1),{status:d}),oe=()=>u(6.1,[a,i,n]),re=e=>ae()?(Ie(rt,e),{status:!0}):(Ce(rt,1),{status:d}),ae=()=>u(6.2,[a,i,n]),ne=e=>ie()?(Ie(at,e),{status:!0}):(Ce(at,1),{status:d}),ie=()=>u(0,[a,i,n]),pe=e=>de()?(Ie(nt,e),{status:!0}):(Ce(nt,1),{status:d}),de=()=>u(6.1,[a,i,n]),ue=e=>ce()?(e.query.length>256&&Ce(it,9),Ie(it,e),{status:!0}):(Ce(it,1),{status:d}),ce=()=>u(6.7,[a,i,n]),le=e=>_e()?(Ie(pt,e),{status:!0}):(Ce(pt,1),{status:d}),_e=()=>u(6.1,[n]),me=e=>xe()?(Ie(dt,e),{status:!0}):(Ce(dt,1),{status:d}),xe=()=>u(7.7,[a,i,n]),ge=()=>u(7.8,[a,i,n]),he=()=>u(8,[i,n]),ve=()=>u(8,[i,n]),Se=()=>u(8,[a,i,n]),be=()=>u(8,[a,i,n]),we=()=>u(8,[a,i,n]),fe=()=>u(8,[a,i,n]),ye=()=>u(8,[a,i,n]),Re=()=>u(8,[a,i,n]),Be=()=>u(8,[a,i,n]),Ee=()=>u(8,[a,i,n]),[qe,Te]=s.createStore({isInited:!1,isBiometricAvailable:!1,isAccessGranted:!1,isAccessRequested:!1,isBiometricTokenSaved:!1,biometricType:"unknown",deviceId:""}),ke={isInited:qe.isInited,isBiometricAvailable:qe.isBiometricAvailable,isAccessGranted:qe.isAccessGranted,isAccessRequested:qe.isAccessRequested,isBiometricTokenSaved:qe.isBiometricTokenSaved,biometricType:qe.biometricType,deviceId:qe.deviceId,init:()=>new Promise(((t,s)=>{if(!Ae())return e.debug(o.MethodBiometryGetInfo,1),void t({status:e.NOT_SUPPORTED,data:void 0});const r=s=>{Me(s),t({status:!0,data:qe}),e.listener.off(e.EventBiometryInfoReceived,r)};e.listener.on(e.EventBiometryInfoReceived,r),e.sender(o.MethodBiometryGetInfo)})),requestAccess:t=>new Promise(((s,r)=>{if(!Ae())return e.debug(o.MethodBiometryRequestAccess,1),void s({status:e.NOT_SUPPORTED,data:void 0});if(t.reason&&t.reason.length>128)return console.error(`[${o.MethodBiometryRequestAccess}] Biometric reason is too long`,t.reason),void s({status:!1,data:void 0});const a=t=>{Me(t),s({status:!0,data:qe}),e.listener.off(e.EventBiometryInfoReceived,a)};e.listener.on(e.EventBiometryInfoReceived,a),e.sender(o.MethodBiometryRequestAccess,t)})),authenticate:t=>new Promise(((s,r)=>{if(!Ae())return e.debug(o.MethodBiometryRequestAuth,1),void s({status:e.NOT_SUPPORTED,data:void 0});if(!qe.isBiometricAvailable)return console.error("[Telegram.WebApp] Biometrics is not available on this device."),void s({status:!1,data:void 0});if(!qe.isAccessGranted)return console.error("[Telegram.WebApp] Biometric access was not granted by the user."),void s({status:!1,data:void 0});const a=t=>{s({status:!0,data:t}),e.listener.off(e.EventBiometryAuthRequested,a)};e.listener.on(e.EventBiometryAuthRequested,a),e.sender(o.MethodBiometryRequestAuth,t)})),updateToken:t=>new Promise(((s,r)=>{if(!Ae())return e.debug(o.MethodBiometryUpdateToken,1),void s({status:e.NOT_SUPPORTED,data:void 0});if(!qe.isBiometricAvailable)return console.error("[Telegram.WebApp] Biometrics is not available on this device."),void s({status:!1,data:void 0});if(!qe.isAccessGranted)return console.error("[Telegram.WebApp] Biometric access was not granted by the user."),void s({status:!1,data:void 0});const a=t=>{s({status:!0,data:t}),e.listener.off(e.EventBiometryTokenUpdated,a)};e.listener.on(e.EventBiometryTokenUpdated,a),e.sender(o.MethodBiometryUpdateToken,t)})),openSettings:t=>Ae()?qe.isBiometricAvailable?qe.isAccessRequested?qe.isAccessGranted?(console.warn("[Telegram.WebApp] Biometric access was granted by the user, no need to go to settings."),{status:!1}):(e.sender(o.MethodBiometryOpenSettings,t),{status:!0}):(console.error("[Telegram.WebApp] Biometric access was not granted by the user."),{status:!1}):(console.error("[Telegram.WebApp] Biometrics is not available on this device."),{status:!1}):(e.debug(o.MethodBiometryOpenSettings,1),{status:e.NOT_SUPPORTED})},Ae=()=>r.supportCheck(7.2,[e.TG_DESKTOP,e.TG_PHONE,e.TG_WEB]),Me=e=>{Te(s.produce((t=>(e.available?(t.isBiometricAvailable=!0,t.biometricType=e.type||"",e.access_requested?(t.isAccessRequested=!0,t.isAccessGranted=!!e.access_granted,t.isBiometricTokenSaved=!!e.token_saved):(t.isAccessRequested=!1,t.isAccessGranted=!1,t.isBiometricTokenSaved=!1)):(t.isBiometricAvailable=!1,t.biometricType="unknown",t.isAccessRequested=!1,t.isAccessGranted=!1,t.isBiometricTokenSaved=!1),t.deviceId=e.device_id||"",t.isInited=!0,t))))},Pe=e=>{Te(s.produce((t=>(t.isBiometricAvailable&&t.isAccessRequested&&("updated"===e.status?t.isBiometricTokenSaved=!0:"removed"===e.status&&(t.isBiometricTokenSaved=!1)),t))))};t.onMount((()=>{e.listener.on(e.EventBiometryInfoReceived,Me),e.listener.on(e.EventBiometryTokenUpdated,Pe),t.onCleanup((()=>{e.listener.off(e.EventBiometryInfoReceived,Me),e.listener.off(e.EventBiometryTokenUpdated,Pe)}))}));const Ce=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)},Oe=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppData");if(!t)return void Ce("getInitData",2);const s=new URLSearchParams(t);let o={};return s.forEach(((e,t)=>{if(o[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{o[t]=JSON.parse(e)}catch{}})),o},Ie=(e,t)=>{if(window.TelegramWebviewProxy)window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t));else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:e,eventData:t}));else try{window.parent.postMessage(JSON.stringify({eventType:e,eventData:t}),"*")}catch(e){Ce("postMessage Iframe",10)}},Fe="web_app_invoke_custom_method",De="web_app_open_scan_qr_popup",We="web_app_read_text_from_clipboard",Ge="web_app_request_phone",Le="web_app_close",He="web_app_close_scan_qr_popup",je="web_app_data_send",Ue="web_app_expand",Ne="iframe_ready",Qe="iframe_will_reload",Ve="web_app_open_invoice",$e="web_app_open_link",Je="web_app_open_popup",Ke="web_app_open_tg_link",ze="web_app_ready",Xe="web_app_request_theme",Ye="web_app_request_viewport",Ze="web_app_request_write_access",et="web_app_set_background_color",tt="web_app_set_header_color",st="web_app_set_bottom_bar_color",ot="web_app_setup_back_button",rt="web_app_setup_closing_behavior",at="web_app_setup_main_button",nt="web_app_setup_settings_button",it="web_app_switch_inline_query",pt="web_app_trigger_haptic_feedback",dt="web_app_setup_swipe_behavior",ut="web_app_share_to_story",ct="web_app_request_safe_area",lt="web_app_request_content_safe_area",_t="web_app_request_fullscreen",mt="web_app_exit_fullscreen",xt="web_app_toggle_orientation_lock",gt="web_app_add_to_home_screen",ht="web_app_check_home_screen",vt="web_app_send_prepared_message",St="web_app_set_emoji_status",bt="web_app_request_emoji_status_access",wt="web_app_request_file_download";var ft=(e=>(e[e.InvokeCustomMethod=Fe]="InvokeCustomMethod",e[e.OpenScanQrPopup=De]="OpenScanQrPopup",e[e.ReadTextFromClipboard=We]="ReadTextFromClipboard",e[e.RequestPhone=Ge]="RequestPhone",e[e.Close=Le]="Close",e[e.CloseScanQrPopup=He]="CloseScanQrPopup",e[e.DataSend=je]="DataSend",e[e.Expand=Ue]="Expand",e[e.IframeReady=Ne]="IframeReady",e[e.IframeWillReload=Qe]="IframeWillReload",e[e.OpenInvoice=Ve]="OpenInvoice",e[e.OpenLink=$e]="OpenLink",e[e.OpenPopup=Je]="OpenPopup",e[e.OpenTgLink=Ke]="OpenTgLink",e[e.Ready=ze]="Ready",e[e.RequestTheme=Xe]="RequestTheme",e[e.RequestViewport=Ye]="RequestViewport",e[e.RequestWriteAccess=Ze]="RequestWriteAccess",e[e.SetBackgroundColor=et]="SetBackgroundColor",e[e.SetHeaderColor=tt]="SetHeaderColor",e[e.SetBottomBarColor=st]="SetBottomBarColor",e[e.SetupBackButton=ot]="SetupBackButton",e[e.SetupClosingBehavior=rt]="SetupClosingBehavior",e[e.SetupMainButton=at]="SetupMainButton",e[e.SetupSettingsButton=nt]="SetupSettingsButton",e[e.SwitchInlineQuery=it]="SwitchInlineQuery",e[e.TriggerHapticFeedback=pt]="TriggerHapticFeedback",e[e.SetupSwipeBehavior=dt]="SetupSwipeBehavior",e[e.ShareToStory=ut]="ShareToStory",e[e.RequestSafeArea=ct]="RequestSafeArea",e[e.RequestContentSafeArea=lt]="RequestContentSafeArea",e[e.RequestFullscreen=_t]="RequestFullscreen",e[e.ExitFullscreen=mt]="ExitFullscreen",e[e.ToggleOrientationLock=xt]="ToggleOrientationLock",e[e.AddToHomeScreen=gt]="AddToHomeScreen",e[e.CheckHomeScreen=ht]="CheckHomeScreen",e[e.SendPreparedMessage=vt]="SendPreparedMessage",e[e.SetEmojiStatus=St]="SetEmojiStatus",e[e.RequestEmojiStatusAccess=bt]="RequestEmojiStatusAccess",e[e.RequestFileDownload=wt]="RequestFileDownload",e))(ft||{});const yt="clipboard_text_received",Rt="custom_method_invoked",Bt="phone_requested",Et="popup_closed",qt="qr_text_received",Tt="scan_qr_popup_closed",kt="theme_changed",At="viewport_changed",Mt="write_access_requested",Pt="prepared_message_sent",Ct="prepared_message_failed",Ot="emoji_status_set",It="emoji_status_failed",Ft="emoji_status_access_requested",Dt="file_download_requested",Wt="home_screen_checked",Gt=((e=new Map)=>({once:(t,s,o=e.get(t),r=e=>{s(e),o&&o.splice(o.indexOf(s)>>>0,1)})=>o?o.push(r):e.set(t,[r]),on:(t,s,o=e.get(t))=>o?o.push(s):e.set(t,[s]),off:(t,s,o=e.get(t))=>o&&s?o.splice(o.indexOf(s)>>>0,1):e.set(t,[]),emit:(t,s,o=e.get(t)||[])=>{for(const e of o)e(s)}}))();(()=>{function e(e,t){e===kt&&(t.theme_params=_(t.theme_params)),Gt.emit(e,t),Gt.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const Lt=(e,t)=>{Gt.on(e,t)},Ht=(e,t)=>{Gt.off(e,t)},jt=(e,t)=>{Gt.once(e,t)};var Ut=Object.freeze({__proto__:null,off:Ht,on:Lt,once:jt});const Nt=t.createContext({viewport:void 0,theme:void 0,init:void 0});exports.BiometricManager=ke,exports.ContextTwa=Nt,exports.EventAccelerometerChanged="accelerometer_changed",exports.EventAccelerometerFailed="accelerometer_failed",exports.EventAccelerometerStarted="accelerometer_started",exports.EventAccelerometerStopped="accelerometer_stopped",exports.EventBackButtonPressed="back_button_pressed",exports.EventBiometryAuthRequested="biometry_auth_requested",exports.EventBiometryInfoReceived="biometry_info_received",exports.EventBiometryTokenUpdated="biometry_token_updated",exports.EventClipboardTextReceived=yt,exports.EventContentSafeAreaChanged="content_safe_area_changed",exports.EventCustomMethodInvoked=Rt,exports.EventDeviceOrientationChanged="device_orientation_changed",exports.EventDeviceOrientationFailed="device_orientation_failed",exports.EventDeviceOrientationStarted="device_orientation_started",exports.EventDeviceOrientationStopped="device_orientation_stopped",exports.EventEmojiStatusAccessRequested=Ft,exports.EventEmojiStatusFailed=It,exports.EventEmojiStatusSet=Ot,exports.EventFileDownloadRequested=Dt,exports.EventFullscreenChanged="fullscreen_changed",exports.EventFullscreenFailed="fullscreen_failed",exports.EventGyroscopeChanged="gyroscope_changed",exports.EventGyroscopeFailed="gyroscope_failed",exports.EventGyroscopeStarted="gyroscope_started",exports.EventGyroscopeStopped="gyroscope_stopped",exports.EventHomeScreenAdded="home_screen_added",exports.EventHomeScreenChecked=Wt,exports.EventHomeScreenFailed="home_screen_failed",exports.EventInvoiceClosed="invoice_closed",exports.EventLocationChecked="location_checked",exports.EventLocationRequested="location_requested",exports.EventMainButtonPressed="main_button_pressed",exports.EventPhoneRequested=Bt,exports.EventPopupClosed=Et,exports.EventPreparedMessageFailed=Ct,exports.EventPreparedMessageSent=Pt,exports.EventQrTextReceived=qt,exports.EventReloadIframe="reload_iframe",exports.EventSafeAreaChanged="safe_area_changed",exports.EventScanQrPopupClosed=Tt,exports.EventSecondaryButtonPressed="secondary_button_pressed",exports.EventSetCustomStyle="set_custom_style",exports.EventSettingsButtonPressed="settings_button_pressed",exports.EventThemeChanged=kt,exports.EventViewportChanged=At,exports.EventVisibilityChanged="visibility_changed",exports.EventWriteAccessRequested=Mt,exports.Method=ft,exports.MethodAddToHomeScreen=gt,exports.MethodCheckHomeScreen=ht,exports.MethodClose=Le,exports.MethodCloseScanQrPopup=He,exports.MethodDataSend=je,exports.MethodExitFullscreen=mt,exports.MethodExpand=Ue,exports.MethodIframeReady=Ne,exports.MethodIframeWillReload=Qe,exports.MethodInvokeCustomMethod=Fe,exports.MethodOpenInvoice=Ve,exports.MethodOpenLink=$e,exports.MethodOpenPopup=Je,exports.MethodOpenScanQrPopup=De,exports.MethodOpenTgLink=Ke,exports.MethodReadTextFromClipboard=We,exports.MethodReady=ze,exports.MethodRequestContentSafeArea=lt,exports.MethodRequestEmojiStatusAccess=bt,exports.MethodRequestFileDownload=wt,exports.MethodRequestFullscreen=_t,exports.MethodRequestPhone=Ge,exports.MethodRequestSafeArea=ct,exports.MethodRequestTheme=Xe,exports.MethodRequestViewport=Ye,exports.MethodRequestWriteAccess=Ze,exports.MethodSendPreparedMessage=vt,exports.MethodSetBackgroundColor=et,exports.MethodSetBottomBarColor=st,exports.MethodSetEmojiStatus=St,exports.MethodSetHeaderColor=tt,exports.MethodSetupBackButton=ot,exports.MethodSetupClosingBehavior=rt,exports.MethodSetupMainButton=at,exports.MethodSetupSettingsButton=nt,exports.MethodSetupSwipeBehavior=dt,exports.MethodShareToStory=ut,exports.MethodSwitchInlineQuery=it,exports.MethodToggleOrientationLock=xt,exports.MethodTriggerHapticFeedback=pt,exports.NOT_SUPPORTED=d,exports.ProviderTWA=e=>{const[o,r]=s.createStore({viewport:void 0,theme:void 0,init:void 0});return t.createEffect((()=>{const e=()=>{r("init",Oe())};e();const s=t=>{e(),r("viewport",t)};Lt(At,s),V();const o=t=>{e(),r("theme",t)};return Lt(kt,o),V(),t.onCleanup((()=>{Ht(At,s),Ht(kt,o)})),()=>{Ht(At,s),Ht(kt,o)}})),Nt.Provider({value:o,children:e.children})},exports.TG_DESKTOP=i,exports.TG_PHONE=n,exports.TG_WEB=a,exports.bridgeAddToHomeScreen=()=>ve()?(Ie(gt),{status:!0}):(Ce(gt,1),{status:d}),exports.bridgeCheckHomeScreen=async e=>new Promise(((t,s)=>{if(!he())return Ce(ht,1),void t({status:d,data:void 0});const o=e=>{e.status=e.status||"unknown",t({status:!0,data:e}),Ht(Wt,o)};Lt(Wt,o),Ie(ht,e)})),exports.bridgeClose=m,exports.bridgeCloseScanQrPopup=g,exports.bridgeDataSend=v,exports.bridgeDownloadFile=async e=>Ee()?new Promise(((t,s)=>{jt(Dt,(function(e){t({status:"downloading"===e.status})})),Ie(wt,e)})):(Ce(wt,1),{status:d}),exports.bridgeExpand=b,exports.bridgeGetInitData=Oe,exports.bridgeGetThemeParams=_,exports.bridgeIframeReady=f,exports.bridgeIframeWillReload=R,exports.bridgeInvokeCustomMethod=E,exports.bridgeOpenInvoice=T,exports.bridgeOpenLink=A,exports.bridgeOpenPopup=P,exports.bridgeOpenScanQrPopup=O,exports.bridgeOpenTgLink=F,exports.bridgeReadTextFromClipboard=W,exports.bridgeReady=L,exports.bridgeRequestContentSafeAreaInset=()=>be()?(Ie(lt),{status:!0}):(Ce(lt,1),{status:d}),exports.bridgeRequestEmojiStatus=async e=>ye()?new Promise(((t,s)=>{jt(Ft,(function(e){t({status:"allowed"===e.status})})),Ie(bt,e)})):(Ce(bt,1),{status:d}),exports.bridgeRequestPhone=j,exports.bridgeRequestSafeAreaInset=()=>Se()?(Ie(ct),{status:!0}):(Ce(ct,1),{status:d}),exports.bridgeRequestTheme=N,exports.bridgeRequestViewport=V,exports.bridgeRequestWriteAccess=J,exports.bridgeSend=Ie,exports.bridgeSessionStorageGet=({key:e})=>{try{return{is_json:!0,value:JSON.parse(window.sessionStorage.getItem("__telegram__"+e)??""),status:!0}}catch(t){return{is_json:!1,value:window.sessionStorage.getItem("__telegram__"+e)??"",status:!0}}},exports.bridgeSessionStorageSet=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(s){return window.sessionStorage.setItem("__telegram__"+e,t),{status:!0}}},exports.bridgeSetBackgroundColor=z,exports.bridgeSetBottomBarColor=ee,exports.bridgeSetEmojiStatus=async e=>Re()?new Promise(((t,s)=>{jt(Ot,(()=>t({status:!0}))),jt(It,(()=>t({status:!1}))),Ie(St,e)})):(Ce(St,1),{status:d}),exports.bridgeSetHeaderColor=Y,exports.bridgeSetupBackButton=se,exports.bridgeSetupClosingBehavior=re,exports.bridgeSetupFullScreen=e=>{const t=e?.is_full||!1;return we()?(Ie(t?_t:mt),{status:!0}):(Ce(t?_t:mt,1),{status:d})},exports.bridgeSetupMainButton=ne,exports.bridgeSetupOrientation=e=>fe()?(Ie(xt,e),{status:!0}):(Ce(xt,1),{status:d}),exports.bridgeSetupSettingsButton=pe,exports.bridgeSetupSwipeBehavior=me,exports.bridgeShareMessage=async e=>Be()?new Promise(((t,s)=>{jt(Pt,(()=>t({status:!0}))),jt(Ct,(()=>t({status:!1}))),Ie(vt,e)})):(Ce(vt,1),{status:d}),exports.bridgeShareToStory=e=>ge()?e?.text&&e?.text.length>2048?(console.warn(`[@apiteam/twa-bridge](${ut}) | Text is too long`),{status:!1,error_id:1}):e?.widget_link?.name&&e?.widget_link.name.length>48?(console.warn(`[@apiteam/twa-bridge](${ut}) | Link name is too long`),{status:!1,error_id:2}):(Ie(ut,e),{status:!0}):(Ce(ut,1),{status:d}),exports.bridgeSwitchInlineQuery=ue,exports.bridgeTriggerHapticFeedback=le,exports.createIsViewportChanged=()=>{const[e,s]=t.createSignal({height:0,is_expanded:!1,is_state_stable:!1}),o=e=>s(e);return t.onMount((()=>{Lt(At,o),Ie(Ye)})),t.onCleanup((()=>{Ht(At,o)})),e},exports.debug=Ce,exports.getAppData=()=>{const e=window.location.hash.slice(1);return new URLSearchParams(e).get("tgWebAppData")},exports.getPlatform=p,exports.listener=Ut,exports.sender=Ie,exports.supportAddToHomeScreen=ve,exports.supportBiometricManager=Ae,exports.supportCheckHomeScreen=he,exports.supportClose=x,exports.supportCloseScanQrPopup=h,exports.supportDataSend=S,exports.supportDownloadFile=Ee,exports.supportExpand=w,exports.supportIframeReady=y,exports.supportIframeWillReload=B,exports.supportInvokeCustomMethod=q,exports.supportOpenInvoice=k,exports.supportOpenLink=M,exports.supportOpenPopup=C,exports.supportOpenScanQrPopup=I,exports.supportOpenTgLink=D,exports.supportReadTextFromClipboard=G,exports.supportReady=H,exports.supportRequestContentSafeAreaInset=be,exports.supportRequestEmojiStatus=ye,exports.supportRequestPhone=U,exports.supportRequestSafeAreaInset=Se,exports.supportRequestTheme=Q,exports.supportRequestViewport=$,exports.supportRequestWriteAccess=K,exports.supportSessionStorageGet=()=>!0,exports.supportSessionStorageSet=()=>!0,exports.supportSetBackgroundColor=X,exports.supportSetBottomBarColor=te,exports.supportSetEmojiStatus=Re,exports.supportSetHeaderColor=Z,exports.supportSetupBackButton=oe,exports.supportSetupClosingBehavior=ae,exports.supportSetupFullScreen=we,exports.supportSetupMainButton=ie,exports.supportSetupOrientation=fe,exports.supportSetupSettingsButton=de,exports.supportSetupSwipeBehavior=xe,exports.supportShareMessage=Be,exports.supportShareToStory=ge,exports.supportSwitchInlineQuery=ce,exports.supportTriggerHapticFeedback=_e;
package/solid/index.mjs CHANGED
@@ -1 +1 @@
1
- import{createSignal as e,onMount as t,onCleanup as s,createContext as a,createEffect as r}from"solid-js";import{createStore as o}from"solid-js/store";const n=()=>{const[a,r]=e({height:0,is_expanded:!1,is_state_stable:!1}),o=e=>r(e);return t((()=>{os(Vt,o),Je(_t)})),s((()=>{ns(Vt,o)})),a},i="web",u="phone",_="desktop",p=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(t)?u:["tdesktop","macos"].includes(t)?_:i},d="not_supported",c=(e,t)=>{const s=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(s?.replace(".",""))>=Number(String(e)?.replace(".",""))&&-1!==t.indexOf(p())},l=()=>Math.random().toString(36).substring(3,9),g=e=>{var t;if(t=/^\s*#([0-9a-f]{6})\s*$/i.exec(e+=""))return"#"+t[1].toLowerCase();if(t=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(e))return("#"+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]).toLowerCase();if(t=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(e)){var s=parseInt(t[1]),a=parseInt(t[2]),r=parseInt(t[3]);return"#"+((s<16?"0":"")+s.toString(16))+((a<16?"0":"")+a.toString(16))+((r<16?"0":"")+r.toString(16))}return!1},w=e=>{const t=window.location.hash.slice(1),s=new URLSearchParams(t),a=JSON.parse(s.get("tgWebAppThemeParams")??""),r=e||a;for(var o of Object.keys(r)){var n=g(r[o]);"string"==typeof n&&(r[o]=n)}return"#1c1c1d"==r?.bg_color&&r?.bg_color==r?.secondary_bg_color&&(r.secondary_bg_color="#2c2c2e"),r},b=e=>m()?(Je(Xe,e),{status:!0}):(Ue(Xe,1),{status:d}),m=()=>c(0,[i,_,u]),S=e=>h()?(Je(Ye,e),{status:!0}):(Ue(Ye,1),{status:d}),h=()=>c(6.4,[u]),f=e=>v()?(Je(Ze,e),{status:!0}):(Ue(Ze,1),{status:d}),v=()=>c(0,[i,_,u]),q=e=>y()?(Je(et,e),{status:!0}):(Ue(et,1),{status:d}),y=()=>c(0,[u]),R=e=>k()?(Je(tt,e),{status:!0}):(Ue(tt,1),{status:d}),k=()=>c(0,[i]),P=()=>x()?(Je(tt),{status:!0}):(Ue(tt,1),{status:d}),x=()=>c(0,[i]),C=async e=>O()?(void 0===e.req_id&&(e.req_id=l()),Je(Ve,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),ns(jt,a))};os(jt,a)}))):(Ue(Ve,1),{status:d}),O=()=>c(6.9,[i,_,u]),T=e=>B()?(Je(at,e),{status:!0}):(Ue(at,1),{status:d}),B=()=>c(6.1,[i,_,u]),I=e=>L()?(Je(rt,e),{status:!0}):(Ue(rt,1),{status:d}),L=()=>c(6.4,[i,_,u]),A=async e=>E()?(e.title.length>64&&Ue(ot,3),e.message.length<1&&Ue(ot,4),e.message.length>256&&Ue(ot,5),e.buttons.length<1&&Ue(ot,6),e.buttons.length>3&&Ue(ot,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&Ue(ot,8),Je(ot,e),new Promise(((t,s)=>{const a=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),ns(Mt,a)};os(Mt,a)}))):(Ue(ot,1),{status:d}),E=()=>c(6.2,[i,_,u]),j=async e=>W()?(Je(Ge,e),new Promise(((t,s)=>{is(Nt,(s=>{e.is_close&&S(),t({status:!0,data:s})})),is(Qt,(()=>{t({status:"closed"})}))}))):(Ue(Ge,1),{status:d}),W=()=>c(6.4,[u]),F=e=>{const t=function(e){try{return new URL(e)}catch(t){try{return new URL(e,"https://t.me")}catch(t){return e.startsWith("/")||(e="/"+e),new URL(e,"https://t.me")}}}(e.path_full);return e.path_full=t.pathname=t.search,D()?(Je(nt,e),{status:!0}):(Ue(nt,1),{status:d})},D=()=>c(7,[i,_,u]);const M=async e=>H()?(e||(e={req_id:void 0}),void 0===e.req_id&&(e.req_id=l()),Je(ze,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e?.req_id&&(t({status:!0,data:s}),ns(Et,a))};os(Et,a)}))):(Ue(ze,1),{status:d}),H=()=>c(6.4,[i,_,u]),N=e=>Q()?(Je(it,e),{status:!0}):(Ue(it,1),{status:d}),Q=()=>c(6.9,[i,_,u]),U=async()=>$()?(Je(Ke),new Promise(((e,t)=>{is(Dt,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(Ue(Ke,1),{status:d}),$=()=>c(6.9,[i,_,u]),J=e=>V()?(Je(ut,e),{status:!0}):(Ue(ut,1),{status:d}),V=()=>c(0,[i,_,u]),G=e=>z()?(Je(_t,e),{status:!0}):(Ue(_t,1),{status:d}),z=()=>c(0,[i,_,u]),K=()=>X()?(Je(pt),{status:!0}):(Ue(pt,1),{status:d}),X=()=>c(6.9,[i,_,u]),Y=e=>Z()?(Je(dt,e),{status:!0}):(Ue(dt,1),{status:d}),Z=()=>c(6.1,[i,_,u]),ee=e=>te()?(Je(ct,e),{status:!0}):(Ue(ct,1),{status:d}),te=()=>c(6.1,[i,_,u]),se=e=>ae()?(Je(lt,{color:e?.color||e?.color_key}),{status:!0}):(Ue(lt,1),{status:d}),ae=()=>c(7.1,[i,_,u]),re=e=>oe()?(Je(gt,e),{status:!0}):(Ue(gt,1),{status:d}),oe=()=>c(6.1,[i,_,u]),ne=e=>ie()?(Je(wt,e),{status:!0}):(Ue(wt,1),{status:d}),ie=()=>c(6.2,[i,_,u]),ue=e=>_e()?(Je(bt,e),{status:!0}):(Ue(bt,1),{status:d}),_e=()=>c(0,[i,_,u]),pe=e=>de()?(Je(mt,e),{status:!0}):(Ue(mt,1),{status:d}),de=()=>c(6.1,[i,_,u]),ce=e=>le()?(e.query.length>256&&Ue(St,9),Je(St,e),{status:!0}):(Ue(St,1),{status:d}),le=()=>c(6.7,[i,_,u]),ge=e=>we()?(Je(ht,e),{status:!0}):(Ue(ht,1),{status:d}),we=()=>c(6.1,[u]),be=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(s){return window.sessionStorage.setItem("__telegram__"+e,t),{status:!0}}},me=()=>!0,Se=({key:e})=>{try{return{is_json:!0,value:JSON.parse(window.sessionStorage.getItem("__telegram__"+e)??""),status:!0}}catch(t){return{is_json:!1,value:window.sessionStorage.getItem("__telegram__"+e)??"",status:!0}}},he=()=>!0,fe=e=>ve()?(Je(ft,e),{status:!0}):(Ue(ft,1),{status:d}),ve=()=>c(7.7,[i,_,u]),qe=e=>ye()?e?.text&&e?.text.length>2048?(console.warn(`[@apiteam/twa-bridge](${vt}) | Text is too long`),{status:!1,error_id:1}):e?.widget_link?.name&&e?.widget_link.name.length>48?(console.warn(`[@apiteam/twa-bridge](${vt}) | Link name is too long`),{status:!1,error_id:2}):(Je(vt,e),{status:!0}):(Ue(vt,1),{status:d}),ye=()=>c(7.8,[i,_,u]),Re=async e=>ke()?(Je(Ct,e),new Promise(((e,t)=>{const s=t=>{e({status:!0,data:t}),ns(Xt,s)};os(Xt,s)}))):(Ue(Ct,1),{status:d,data:void 0}),ke=()=>c(8,[_,u]),Pe=()=>xe()?(Je(xt),{status:!0}):(Ue(xt,1),{status:d}),xe=()=>c(8,[_,u]),Ce=()=>Oe()?(Je(qt),{status:!0}):(Ue(qt,1),{status:d}),Oe=()=>c(8,[i,_,u]),Te=()=>Be()?(Je(yt),{status:!0}):(Ue(yt,1),{status:d}),Be=()=>c(8,[i,_,u]),Ie=e=>{const t=e?.is_full||!1;return Le()?(Je(t?Rt:kt),{status:!0}):(Ue(t?Rt:kt,1),{status:d})},Le=()=>c(8,[i,_,u]),Ae=e=>Ee()?(Je(Pt,e),{status:!0}):(Ue(Pt,1),{status:d}),Ee=()=>c(8,[i,_,u]),je=async e=>We()?new Promise(((t,s)=>{is(ss,(function(e){t({status:"allowed"===e.status})})),Je(Bt,e)})):(Ue(Bt,1),{status:d}),We=()=>c(8,[i,_,u]),Fe=async e=>De()?new Promise(((t,s)=>{is(es,(()=>t({status:!0}))),is(ts,(()=>t({status:!1}))),Je(Tt,e)})):(Ue(Tt,1),{status:d}),De=()=>c(8,[i,_,u]),Me=async e=>He()?new Promise(((t,s)=>{is(Yt,(()=>t({status:!0}))),is(Zt,(()=>t({status:!1}))),Je(Ot,e)})):(Ue(Ot,1),{status:d}),He=()=>c(8,[i,_,u]),Ne=async e=>Qe()?new Promise(((t,s)=>{is(as,(function(e){t({status:"downloading"===e.status})})),Je(It,e)})):(Ue(It,1),{status:d}),Qe=()=>c(8,[i,_,u]),Ue=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)},$e=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppData");if(!t)return void Ue("getInitData",2);const s=new URLSearchParams(t);let a={};return s.forEach(((e,t)=>{if(a[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{a[t]=JSON.parse(e)}catch{}})),a},Je=(e,t)=>{if(window.TelegramWebviewProxy)window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t));else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:e,eventData:t}));else try{window.parent.postMessage(JSON.stringify({eventType:e,eventData:t}),"*")}catch(e){Ue("postMessage Iframe",10)}},Ve="web_app_invoke_custom_method",Ge="web_app_open_scan_qr_popup",ze="web_app_read_text_from_clipboard",Ke="web_app_request_phone",Xe="web_app_close",Ye="web_app_close_scan_qr_popup",Ze="web_app_data_send",et="web_app_expand",tt="iframe_ready",st="iframe_will_reload",at="web_app_open_invoice",rt="web_app_open_link",ot="web_app_open_popup",nt="web_app_open_tg_link",it="web_app_ready",ut="web_app_request_theme",_t="web_app_request_viewport",pt="web_app_request_write_access",dt="web_app_set_background_color",ct="web_app_set_header_color",lt="web_app_set_bottom_bar_color",gt="web_app_setup_back_button",wt="web_app_setup_closing_behavior",bt="web_app_setup_main_button",mt="web_app_setup_settings_button",St="web_app_switch_inline_query",ht="web_app_trigger_haptic_feedback",ft="web_app_setup_swipe_behavior",vt="web_app_share_to_story",qt="web_app_request_safe_area",yt="web_app_request_content_safe_area",Rt="web_app_request_fullscreen",kt="web_app_exit_fullscreen",Pt="web_app_toggle_orientation_lock",xt="web_app_add_to_home_screen",Ct="web_app_check_home_screen",Ot="web_app_send_prepared_message",Tt="web_app_set_emoji_status",Bt="web_app_request_emoji_status_access",It="web_app_request_file_download";var Lt=(e=>(e[e.InvokeCustomMethod=Ve]="InvokeCustomMethod",e[e.OpenScanQrPopup=Ge]="OpenScanQrPopup",e[e.ReadTextFromClipboard=ze]="ReadTextFromClipboard",e[e.RequestPhone=Ke]="RequestPhone",e[e.Close=Xe]="Close",e[e.CloseScanQrPopup=Ye]="CloseScanQrPopup",e[e.DataSend=Ze]="DataSend",e[e.Expand=et]="Expand",e[e.IframeReady=tt]="IframeReady",e[e.IframeWillReload=st]="IframeWillReload",e[e.OpenInvoice=at]="OpenInvoice",e[e.OpenLink=rt]="OpenLink",e[e.OpenPopup=ot]="OpenPopup",e[e.OpenTgLink=nt]="OpenTgLink",e[e.Ready=it]="Ready",e[e.RequestTheme=ut]="RequestTheme",e[e.RequestViewport=_t]="RequestViewport",e[e.RequestWriteAccess=pt]="RequestWriteAccess",e[e.SetBackgroundColor=dt]="SetBackgroundColor",e[e.SetHeaderColor=ct]="SetHeaderColor",e[e.SetBottomBarColor=lt]="SetBottomBarColor",e[e.SetupBackButton=gt]="SetupBackButton",e[e.SetupClosingBehavior=wt]="SetupClosingBehavior",e[e.SetupMainButton=bt]="SetupMainButton",e[e.SetupSettingsButton=mt]="SetupSettingsButton",e[e.SwitchInlineQuery=St]="SwitchInlineQuery",e[e.TriggerHapticFeedback=ht]="TriggerHapticFeedback",e[e.SetupSwipeBehavior=ft]="SetupSwipeBehavior",e[e.ShareToStory=vt]="ShareToStory",e[e.RequestSafeArea=qt]="RequestSafeArea",e[e.RequestContentSafeArea=yt]="RequestContentSafeArea",e[e.RequestFullscreen=Rt]="RequestFullscreen",e[e.ExitFullscreen=kt]="ExitFullscreen",e[e.ToggleOrientationLock=Pt]="ToggleOrientationLock",e[e.AddToHomeScreen=xt]="AddToHomeScreen",e[e.CheckHomeScreen=Ct]="CheckHomeScreen",e[e.SendPreparedMessage=Ot]="SendPreparedMessage",e[e.SetEmojiStatus=Tt]="SetEmojiStatus",e[e.RequestEmojiStatusAccess=Bt]="RequestEmojiStatusAccess",e[e.RequestFileDownload=It]="RequestFileDownload",e))(Lt||{});const At="back_button_pressed",Et="clipboard_text_received",jt="custom_method_invoked",Wt="invoice_closed",Ft="main_button_pressed",Dt="phone_requested",Mt="popup_closed",Ht="reload_iframe",Nt="qr_text_received",Qt="scan_qr_popup_closed",Ut="set_custom_style",$t="settings_button_pressed",Jt="theme_changed",Vt="viewport_changed",Gt="write_access_requested",zt="safe_area_changed",Kt="content_safe_area_changed",Xt="web_app_check_home_screen",Yt="prepared_message_sent",Zt="prepared_message_failed",es="emoji_status_set",ts="emoji_status_failed",ss="emoji_status_access_requested",as="file_download_requested",rs=((e=new Map)=>({once:(t,s,a=e.get(t),r=e=>{s(e),a&&a.splice(a.indexOf(s)>>>0,1)})=>a?a.push(r):e.set(t,[r]),on:(t,s,a=e.get(t))=>a?a.push(s):e.set(t,[s]),off:(t,s,a=e.get(t))=>a&&s?a.splice(a.indexOf(s)>>>0,1):e.set(t,[]),emit:(t,s,a=e.get(t)||[])=>{for(const e of a)e(s)}}))();(()=>{function e(e,t){e===Jt&&(t.theme_params=w(t.theme_params)),rs.emit(e,t),rs.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const os=(e,t)=>{rs.on(e,t)},ns=(e,t)=>{rs.off(e,t)},is=(e,t)=>{rs.once(e,t)};var us=Object.freeze({__proto__:null,off:ns,on:os,once:is});const _s=()=>{const e=window.location.hash.slice(1);return new URLSearchParams(e).get("tgWebAppData")},ps=a({viewport:void 0,theme:void 0,init:void 0}),ds=e=>{const[t,a]=o({viewport:void 0,theme:void 0,init:void 0});return r((()=>{const e=()=>{a("init",$e())};e();const t=t=>{e(),a("viewport",t)};os(Vt,t),G();const r=t=>{e(),a("theme",t)};return os(Jt,r),G(),s((()=>{ns(Vt,t),ns(Jt,r)})),()=>{ns(Vt,t),ns(Jt,r)}})),ps.Provider({value:t,children:e.children})};export{ps as ContextTwa,At as EventBackButtonPressed,Xt as EventCheckHomeScreen,Et as EventClipboardTextReceived,Kt as EventContentSafeAreaChanged,jt as EventCustomMethodInvoked,ss as EventEmojiStatusAccessRequested,ts as EventEmojiStatusFailed,es as EventEmojiStatusSet,as as EventFileDownloadRequested,Wt as EventInvoiceClosed,Ft as EventMainButtonPressed,Dt as EventPhoneRequested,Mt as EventPopupClosed,Zt as EventPreparedMessageFailed,Yt as EventPreparedMessageSent,Nt as EventQrTextReceived,Ht as EventReloadIframe,zt as EventSafeAreaChanged,Qt as EventScanQrPopupClosed,Ut as EventSetCustomStyle,$t as EventSettingsButtonPressed,Jt as EventThemeChanged,Vt as EventViewportChanged,Gt as EventWriteAccessRequested,Lt as Method,xt as MethodAddToHomeScreen,Ct as MethodCheckHomeScreen,Xe as MethodClose,Ye as MethodCloseScanQrPopup,Ze as MethodDataSend,kt as MethodExitFullscreen,et as MethodExpand,tt as MethodIframeReady,st as MethodIframeWillReload,Ve as MethodInvokeCustomMethod,at as MethodOpenInvoice,rt as MethodOpenLink,ot as MethodOpenPopup,Ge as MethodOpenScanQrPopup,nt as MethodOpenTgLink,ze as MethodReadTextFromClipboard,it as MethodReady,yt as MethodRequestContentSafeArea,Bt as MethodRequestEmojiStatusAccess,It as MethodRequestFileDownload,Rt as MethodRequestFullscreen,Ke as MethodRequestPhone,qt as MethodRequestSafeArea,ut as MethodRequestTheme,_t as MethodRequestViewport,pt as MethodRequestWriteAccess,Ot as MethodSendPreparedMessage,dt as MethodSetBackgroundColor,lt as MethodSetBottomBarColor,Tt as MethodSetEmojiStatus,ct as MethodSetHeaderColor,gt as MethodSetupBackButton,wt as MethodSetupClosingBehavior,bt as MethodSetupMainButton,mt as MethodSetupSettingsButton,ft as MethodSetupSwipeBehavior,vt as MethodShareToStory,St as MethodSwitchInlineQuery,Pt as MethodToggleOrientationLock,ht as MethodTriggerHapticFeedback,d as NOT_SUPPORTED,ds as ProviderTWA,_ as TG_DESKTOP,u as TG_PHONE,i as TG_WEB,Pe as bridgeAddToHomeScreen,Re as bridgeCheckHomeScreen,b as bridgeClose,S as bridgeCloseScanQrPopup,f as bridgeDataSend,Ne as bridgeDownloadFile,q as bridgeExpand,$e as bridgeGetInitData,w as bridgeGetThemeParams,R as bridgeIframeReady,P as bridgeIframeWillReload,C as bridgeInvokeCustomMethod,T as bridgeOpenInvoice,I as bridgeOpenLink,A as bridgeOpenPopup,j as bridgeOpenScanQrPopup,F as bridgeOpenTgLink,M as bridgeReadTextFromClipboard,N as bridgeReady,Te as bridgeRequestContentSafeAreaInset,je as bridgeRequestEmojiStatus,U as bridgeRequestPhone,Ce as bridgeRequestSafeAreaInset,J as bridgeRequestTheme,G as bridgeRequestViewport,K as bridgeRequestWriteAccess,Je as bridgeSend,Se as bridgeSessionStorageGet,be as bridgeSessionStorageSet,Y as bridgeSetBackgroundColor,se as bridgeSetBottomBarColor,Fe as bridgeSetEmojiStatus,ee as bridgeSetHeaderColor,re as bridgeSetupBackButton,ne as bridgeSetupClosingBehavior,Ie as bridgeSetupFullScreen,ue as bridgeSetupMainButton,Ae as bridgeSetupOrientation,pe as bridgeSetupSettingsButton,fe as bridgeSetupSwipeBehavior,Me as bridgeShareMessage,qe as bridgeShareToStory,ce as bridgeSwitchInlineQuery,ge as bridgeTriggerHapticFeedback,n as createIsViewportChanged,Ue as debug,_s as getAppData,p as getPlatform,us as listener,Je as sender,xe as supportAddToHomeScreen,ke as supportCheckHomeScreen,m as supportClose,h as supportCloseScanQrPopup,v as supportDataSend,Qe as supportDownloadFile,y as supportExpand,k as supportIframeReady,x as supportIframeWillReload,O as supportInvokeCustomMethod,B as supportOpenInvoice,L as supportOpenLink,E as supportOpenPopup,W as supportOpenScanQrPopup,D as supportOpenTgLink,H as supportReadTextFromClipboard,Q as supportReady,Be as supportRequestContentSafeAreaInset,We as supportRequestEmojiStatus,$ as supportRequestPhone,Oe as supportRequestSafeAreaInset,V as supportRequestTheme,z as supportRequestViewport,X as supportRequestWriteAccess,he as supportSessionStorageGet,me as supportSessionStorageSet,Z as supportSetBackgroundColor,ae as supportSetBottomBarColor,De as supportSetEmojiStatus,te as supportSetHeaderColor,oe as supportSetupBackButton,ie as supportSetupClosingBehavior,Le as supportSetupFullScreen,_e as supportSetupMainButton,Ee as supportSetupOrientation,de as supportSetupSettingsButton,ve as supportSetupSwipeBehavior,He as supportShareMessage,ye as supportShareToStory,le as supportSwitchInlineQuery,we as supportTriggerHapticFeedback};
1
+ import{debug as e,NOT_SUPPORTED as t,listener as s,EventBiometryInfoReceived as a,sender as o,EventBiometryAuthRequested as r,EventBiometryTokenUpdated as i,TG_DESKTOP as n,TG_PHONE as d,TG_WEB as c}from"solid";import{createSignal as u,onMount as _,onCleanup as p,createContext as l,createEffect as m}from"solid-js";import{createStore as g,produce as b}from"solid-js/store";import{MethodBiometryGetInfo as w,MethodBiometryRequestAccess as h,MethodBiometryRequestAuth as v,MethodBiometryUpdateToken as S,MethodBiometryOpenSettings as f}from"types/methods";import{supportCheck as y}from"utils";const q=()=>{const[e,t]=u({height:0,is_expanded:!1,is_state_stable:!1}),s=e=>t(e);return _((()=>{Xs(bs,s),gt(xt)})),p((()=>{Ys(bs,s)})),e},k="web",B="phone",R="desktop",T=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(t)?B:["tdesktop","macos"].includes(t)?R:k},A="not_supported",P=(e,t)=>{const s=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(s?.replace(".",""))>=Number(String(e)?.replace(".",""))&&-1!==t.indexOf(T())},I=()=>Math.random().toString(36).substring(3,9),O=e=>{var t;if(t=/^\s*#([0-9a-f]{6})\s*$/i.exec(e+=""))return"#"+t[1].toLowerCase();if(t=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(e))return("#"+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]).toLowerCase();if(t=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(e)){var s=parseInt(t[1]),a=parseInt(t[2]),o=parseInt(t[3]);return"#"+((s<16?"0":"")+s.toString(16))+((a<16?"0":"")+a.toString(16))+((o<16?"0":"")+o.toString(16))}return!1},x=e=>{const t=window.location.hash.slice(1),s=new URLSearchParams(t),a=JSON.parse(s.get("tgWebAppThemeParams")??""),o=e||a;for(var r of Object.keys(o)){var i=O(o[r]);"string"==typeof i&&(o[r]=i)}return"#1c1c1d"==o?.bg_color&&o?.bg_color==o?.secondary_bg_color&&(o.secondary_bg_color="#2c2c2e"),o},C=e=>E()?(gt(St,e),{status:!0}):(lt(St,1),{status:A}),E=()=>P(0,[k,R,B]),W=e=>L()?(gt(ft,e),{status:!0}):(lt(ft,1),{status:A}),L=()=>P(6.4,[B]),G=e=>M()?(gt(yt,e),{status:!0}):(lt(yt,1),{status:A}),M=()=>P(0,[k,R,B]),j=e=>D()?(gt(qt,e),{status:!0}):(lt(qt,1),{status:A}),D=()=>P(0,[B]),F=e=>H()?(gt(kt,e),{status:!0}):(lt(kt,1),{status:A}),H=()=>P(0,[k]),N=()=>U()?(gt(kt),{status:!0}):(lt(kt,1),{status:A}),U=()=>P(0,[k]),$=async e=>Q()?(void 0===e.req_id&&(e.req_id=I()),gt(bt,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Ys(rs,a))};Xs(rs,a)}))):(lt(bt,1),{status:A}),Q=()=>P(6.9,[k,R,B]),J=e=>V()?(gt(Rt,e),{status:!0}):(lt(Rt,1),{status:A}),V=()=>P(6.1,[k,R,B]),z=e=>K()?(gt(Tt,e),{status:!0}):(lt(Tt,1),{status:A}),K=()=>P(6.4,[k,R,B]),X=async e=>Y()?(e.title.length>64&&lt(At,3),e.message.length<1&&lt(At,4),e.message.length>256&&lt(At,5),e.buttons.length<1&&lt(At,6),e.buttons.length>3&&lt(At,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&lt(At,8),gt(At,e),new Promise(((t,s)=>{const a=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),Ys(cs,a)};Xs(cs,a)}))):(lt(At,1),{status:A}),Y=()=>P(6.2,[k,R,B]),Z=async e=>ee()?(gt(wt,e),new Promise(((t,s)=>{Zs(_s,(s=>{e.is_close&&W(),t({status:!0,data:s})})),Zs(ps,(()=>{t({status:"closed"})}))}))):(lt(wt,1),{status:A}),ee=()=>P(6.4,[B]),te=e=>{const t=function(e){try{return new URL(e)}catch(t){try{return new URL(e,"https://t.me")}catch(t){return e.startsWith("/")||(e="/"+e),new URL(e,"https://t.me")}}}(e.path_full);return e.path_full=t.pathname=t.search,se()?(gt(Pt,e),{status:!0}):(lt(Pt,1),{status:A})},se=()=>P(7,[k,R,B]);const ae=async e=>oe()?(e||(e={req_id:void 0}),void 0===e.req_id&&(e.req_id=I()),gt(ht,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e?.req_id&&(t({status:!0,data:s}),Ys(os,a))};Xs(os,a)}))):(lt(ht,1),{status:A}),oe=()=>P(6.4,[k,R,B]),re=e=>ie()?(gt(It,e),{status:!0}):(lt(It,1),{status:A}),ie=()=>P(6.9,[k,R,B]),ne=async()=>de()?(gt(vt),new Promise(((e,t)=>{Zs(ds,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(lt(vt,1),{status:A}),de=()=>P(6.9,[k,R,B]),ce=e=>ue()?(gt(Ot,e),{status:!0}):(lt(Ot,1),{status:A}),ue=()=>P(0,[k,R,B]),_e=e=>pe()?(gt(xt,e),{status:!0}):(lt(xt,1),{status:A}),pe=()=>P(0,[k,R,B]),le=()=>new Promise(((e,t)=>{if(!me())return lt(Ct,1),void e({status:A});const s=t=>{e({status:"allowed"===t.status}),Ys(ws,s)};Xs(ws,s),gt(Ct)})),me=()=>P(6.9,[k,R,B]),ge=e=>be()?(gt(Et,e),{status:!0}):(lt(Et,1),{status:A}),be=()=>P(6.1,[k,R,B]),we=e=>he()?(gt(Wt,e),{status:!0}):(lt(Wt,1),{status:A}),he=()=>P(6.1,[k,R,B]),ve=e=>Se()?(gt(Lt,{color:e?.color||e?.color_key}),{status:!0}):(lt(Lt,1),{status:A}),Se=()=>P(7.1,[k,R,B]),fe=e=>ye()?(gt(Gt,e),{status:!0}):(lt(Gt,1),{status:A}),ye=()=>P(6.1,[k,R,B]),qe=e=>ke()?(gt(Mt,e),{status:!0}):(lt(Mt,1),{status:A}),ke=()=>P(6.2,[k,R,B]),Be=e=>Re()?(gt(jt,e),{status:!0}):(lt(jt,1),{status:A}),Re=()=>P(0,[k,R,B]),Te=e=>Ae()?(gt(Dt,e),{status:!0}):(lt(Dt,1),{status:A}),Ae=()=>P(6.1,[k,R,B]),Pe=e=>Ie()?(e.query.length>256&&lt(Ft,9),gt(Ft,e),{status:!0}):(lt(Ft,1),{status:A}),Ie=()=>P(6.7,[k,R,B]),Oe=e=>xe()?(gt(Ht,e),{status:!0}):(lt(Ht,1),{status:A}),xe=()=>P(6.1,[B]),Ce=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(s){return window.sessionStorage.setItem("__telegram__"+e,t),{status:!0}}},Ee=()=>!0,We=({key:e})=>{try{return{is_json:!0,value:JSON.parse(window.sessionStorage.getItem("__telegram__"+e)??""),status:!0}}catch(t){return{is_json:!1,value:window.sessionStorage.getItem("__telegram__"+e)??"",status:!0}}},Le=()=>!0,Ge=e=>Me()?(gt(Nt,e),{status:!0}):(lt(Nt,1),{status:A}),Me=()=>P(7.7,[k,R,B]),je=e=>De()?e?.text&&e?.text.length>2048?(console.warn(`[@apiteam/twa-bridge](${Ut}) | Text is too long`),{status:!1,error_id:1}):e?.widget_link?.name&&e?.widget_link.name.length>48?(console.warn(`[@apiteam/twa-bridge](${Ut}) | Link name is too long`),{status:!1,error_id:2}):(gt(Ut,e),{status:!0}):(lt(Ut,1),{status:A}),De=()=>P(7.8,[k,R,B]),Fe=async e=>new Promise(((t,s)=>{if(!He())return lt(Xt,1),void t({status:A,data:void 0});const a=e=>{e.status=e.status||"unknown",t({status:!0,data:e}),Ys(Us,a)};Xs(Us,a),gt(Xt,e)})),He=()=>P(8,[R,B]),Ne=()=>Ue()?(gt(Kt),{status:!0}):(lt(Kt,1),{status:A}),Ue=()=>P(8,[R,B]),$e=()=>Qe()?(gt($t),{status:!0}):(lt($t,1),{status:A}),Qe=()=>P(8,[k,R,B]),Je=()=>Ve()?(gt(Qt),{status:!0}):(lt(Qt,1),{status:A}),Ve=()=>P(8,[k,R,B]),ze=e=>{const t=e?.is_full||!1;return Ke()?(gt(t?Jt:Vt),{status:!0}):(lt(t?Jt:Vt,1),{status:A})},Ke=()=>P(8,[k,R,B]),Xe=e=>Ye()?(gt(zt,e),{status:!0}):(lt(zt,1),{status:A}),Ye=()=>P(8,[k,R,B]),Ze=async e=>et()?new Promise(((t,s)=>{Zs(ks,(function(e){t({status:"allowed"===e.status})})),gt(es,e)})):(lt(es,1),{status:A}),et=()=>P(8,[k,R,B]),tt=async e=>st()?new Promise(((t,s)=>{Zs(ys,(()=>t({status:!0}))),Zs(qs,(()=>t({status:!1}))),gt(Zt,e)})):(lt(Zt,1),{status:A}),st=()=>P(8,[k,R,B]),at=async e=>ot()?new Promise(((t,s)=>{Zs(Ss,(()=>t({status:!0}))),Zs(fs,(()=>t({status:!1}))),gt(Yt,e)})):(lt(Yt,1),{status:A}),ot=()=>P(8,[k,R,B]),rt=async e=>it()?new Promise(((t,s)=>{Zs(Bs,(function(e){t({status:"downloading"===e.status})})),gt(ts,e)})):(lt(ts,1),{status:A}),it=()=>P(8,[k,R,B]),[nt,dt]=g({isInited:!1,isBiometricAvailable:!1,isAccessGranted:!1,isAccessRequested:!1,isBiometricTokenSaved:!1,biometricType:"unknown",deviceId:""}),ct={isInited:nt.isInited,isBiometricAvailable:nt.isBiometricAvailable,isAccessGranted:nt.isAccessGranted,isAccessRequested:nt.isAccessRequested,isBiometricTokenSaved:nt.isBiometricTokenSaved,biometricType:nt.biometricType,deviceId:nt.deviceId,init:()=>new Promise(((r,i)=>{if(!ut())return e(w,1),void r({status:t,data:void 0});const n=e=>{_t(e),r({status:!0,data:nt}),s.off(a,n)};s.on(a,n),o(w)})),requestAccess:r=>new Promise(((i,n)=>{if(!ut())return e(h,1),void i({status:t,data:void 0});if(r.reason&&r.reason.length>128)return console.error(`[${h}] Biometric reason is too long`,r.reason),void i({status:!1,data:void 0});const d=e=>{_t(e),i({status:!0,data:nt}),s.off(a,d)};s.on(a,d),o(h,r)})),authenticate:a=>new Promise(((i,n)=>{if(!ut())return e(v,1),void i({status:t,data:void 0});if(!nt.isBiometricAvailable)return console.error("[Telegram.WebApp] Biometrics is not available on this device."),void i({status:!1,data:void 0});if(!nt.isAccessGranted)return console.error("[Telegram.WebApp] Biometric access was not granted by the user."),void i({status:!1,data:void 0});const d=e=>{i({status:!0,data:e}),s.off(r,d)};s.on(r,d),o(v,a)})),updateToken:a=>new Promise(((r,n)=>{if(!ut())return e(S,1),void r({status:t,data:void 0});if(!nt.isBiometricAvailable)return console.error("[Telegram.WebApp] Biometrics is not available on this device."),void r({status:!1,data:void 0});if(!nt.isAccessGranted)return console.error("[Telegram.WebApp] Biometric access was not granted by the user."),void r({status:!1,data:void 0});const d=e=>{r({status:!0,data:e}),s.off(i,d)};s.on(i,d),o(S,a)})),openSettings:s=>ut()?nt.isBiometricAvailable?nt.isAccessRequested?nt.isAccessGranted?(console.warn("[Telegram.WebApp] Biometric access was granted by the user, no need to go to settings."),{status:!1}):(o(f,s),{status:!0}):(console.error("[Telegram.WebApp] Biometric access was not granted by the user."),{status:!1}):(console.error("[Telegram.WebApp] Biometrics is not available on this device."),{status:!1}):(e(f,1),{status:t})},ut=()=>y(7.2,[n,d,c]),_t=e=>{dt(b((t=>(e.available?(t.isBiometricAvailable=!0,t.biometricType=e.type||"",e.access_requested?(t.isAccessRequested=!0,t.isAccessGranted=!!e.access_granted,t.isBiometricTokenSaved=!!e.token_saved):(t.isAccessRequested=!1,t.isAccessGranted=!1,t.isBiometricTokenSaved=!1)):(t.isBiometricAvailable=!1,t.biometricType="unknown",t.isAccessRequested=!1,t.isAccessGranted=!1,t.isBiometricTokenSaved=!1),t.deviceId=e.device_id||"",t.isInited=!0,t))))},pt=e=>{dt(b((t=>(t.isBiometricAvailable&&t.isAccessRequested&&("updated"===e.status?t.isBiometricTokenSaved=!0:"removed"===e.status&&(t.isBiometricTokenSaved=!1)),t))))};_((()=>{s.on(a,_t),s.on(i,pt),p((()=>{s.off(a,_t),s.off(i,pt)}))}));const lt=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)},mt=()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppData");if(!t)return void lt("getInitData",2);const s=new URLSearchParams(t);let a={};return s.forEach(((e,t)=>{if(a[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{a[t]=JSON.parse(e)}catch{}})),a},gt=(e,t)=>{if(window.TelegramWebviewProxy)window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t));else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:e,eventData:t}));else try{window.parent.postMessage(JSON.stringify({eventType:e,eventData:t}),"*")}catch(e){lt("postMessage Iframe",10)}},bt="web_app_invoke_custom_method",wt="web_app_open_scan_qr_popup",ht="web_app_read_text_from_clipboard",vt="web_app_request_phone",St="web_app_close",ft="web_app_close_scan_qr_popup",yt="web_app_data_send",qt="web_app_expand",kt="iframe_ready",Bt="iframe_will_reload",Rt="web_app_open_invoice",Tt="web_app_open_link",At="web_app_open_popup",Pt="web_app_open_tg_link",It="web_app_ready",Ot="web_app_request_theme",xt="web_app_request_viewport",Ct="web_app_request_write_access",Et="web_app_set_background_color",Wt="web_app_set_header_color",Lt="web_app_set_bottom_bar_color",Gt="web_app_setup_back_button",Mt="web_app_setup_closing_behavior",jt="web_app_setup_main_button",Dt="web_app_setup_settings_button",Ft="web_app_switch_inline_query",Ht="web_app_trigger_haptic_feedback",Nt="web_app_setup_swipe_behavior",Ut="web_app_share_to_story",$t="web_app_request_safe_area",Qt="web_app_request_content_safe_area",Jt="web_app_request_fullscreen",Vt="web_app_exit_fullscreen",zt="web_app_toggle_orientation_lock",Kt="web_app_add_to_home_screen",Xt="web_app_check_home_screen",Yt="web_app_send_prepared_message",Zt="web_app_set_emoji_status",es="web_app_request_emoji_status_access",ts="web_app_request_file_download";var ss=(e=>(e[e.InvokeCustomMethod=bt]="InvokeCustomMethod",e[e.OpenScanQrPopup=wt]="OpenScanQrPopup",e[e.ReadTextFromClipboard=ht]="ReadTextFromClipboard",e[e.RequestPhone=vt]="RequestPhone",e[e.Close=St]="Close",e[e.CloseScanQrPopup=ft]="CloseScanQrPopup",e[e.DataSend=yt]="DataSend",e[e.Expand=qt]="Expand",e[e.IframeReady=kt]="IframeReady",e[e.IframeWillReload=Bt]="IframeWillReload",e[e.OpenInvoice=Rt]="OpenInvoice",e[e.OpenLink=Tt]="OpenLink",e[e.OpenPopup=At]="OpenPopup",e[e.OpenTgLink=Pt]="OpenTgLink",e[e.Ready=It]="Ready",e[e.RequestTheme=Ot]="RequestTheme",e[e.RequestViewport=xt]="RequestViewport",e[e.RequestWriteAccess=Ct]="RequestWriteAccess",e[e.SetBackgroundColor=Et]="SetBackgroundColor",e[e.SetHeaderColor=Wt]="SetHeaderColor",e[e.SetBottomBarColor=Lt]="SetBottomBarColor",e[e.SetupBackButton=Gt]="SetupBackButton",e[e.SetupClosingBehavior=Mt]="SetupClosingBehavior",e[e.SetupMainButton=jt]="SetupMainButton",e[e.SetupSettingsButton=Dt]="SetupSettingsButton",e[e.SwitchInlineQuery=Ft]="SwitchInlineQuery",e[e.TriggerHapticFeedback=Ht]="TriggerHapticFeedback",e[e.SetupSwipeBehavior=Nt]="SetupSwipeBehavior",e[e.ShareToStory=Ut]="ShareToStory",e[e.RequestSafeArea=$t]="RequestSafeArea",e[e.RequestContentSafeArea=Qt]="RequestContentSafeArea",e[e.RequestFullscreen=Jt]="RequestFullscreen",e[e.ExitFullscreen=Vt]="ExitFullscreen",e[e.ToggleOrientationLock=zt]="ToggleOrientationLock",e[e.AddToHomeScreen=Kt]="AddToHomeScreen",e[e.CheckHomeScreen=Xt]="CheckHomeScreen",e[e.SendPreparedMessage=Yt]="SendPreparedMessage",e[e.SetEmojiStatus=Zt]="SetEmojiStatus",e[e.RequestEmojiStatusAccess=es]="RequestEmojiStatusAccess",e[e.RequestFileDownload=ts]="RequestFileDownload",e))(ss||{});const as="back_button_pressed",os="clipboard_text_received",rs="custom_method_invoked",is="invoice_closed",ns="main_button_pressed",ds="phone_requested",cs="popup_closed",us="reload_iframe",_s="qr_text_received",ps="scan_qr_popup_closed",ls="set_custom_style",ms="settings_button_pressed",gs="theme_changed",bs="viewport_changed",ws="write_access_requested",hs="safe_area_changed",vs="content_safe_area_changed",Ss="prepared_message_sent",fs="prepared_message_failed",ys="emoji_status_set",qs="emoji_status_failed",ks="emoji_status_access_requested",Bs="file_download_requested",Rs="accelerometer_changed",Ts="accelerometer_failed",As="accelerometer_started",Ps="accelerometer_stopped",Is="biometry_auth_requested",Os="biometry_info_received",xs="biometry_token_updated",Cs="device_orientation_changed",Es="device_orientation_failed",Ws="device_orientation_started",Ls="device_orientation_stopped",Gs="fullscreen_changed",Ms="fullscreen_failed",js="gyroscope_changed",Ds="gyroscope_failed",Fs="gyroscope_started",Hs="gyroscope_stopped",Ns="home_screen_added",Us="home_screen_checked",$s="home_screen_failed",Qs="location_checked",Js="location_requested",Vs="secondary_button_pressed",zs="visibility_changed",Ks=((e=new Map)=>({once:(t,s,a=e.get(t),o=e=>{s(e),a&&a.splice(a.indexOf(s)>>>0,1)})=>a?a.push(o):e.set(t,[o]),on:(t,s,a=e.get(t))=>a?a.push(s):e.set(t,[s]),off:(t,s,a=e.get(t))=>a&&s?a.splice(a.indexOf(s)>>>0,1):e.set(t,[]),emit:(t,s,a=e.get(t)||[])=>{for(const e of a)e(s)}}))();(()=>{function e(e,t){e===gs&&(t.theme_params=x(t.theme_params)),Ks.emit(e,t),Ks.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const Xs=(e,t)=>{Ks.on(e,t)},Ys=(e,t)=>{Ks.off(e,t)},Zs=(e,t)=>{Ks.once(e,t)};var ea=Object.freeze({__proto__:null,off:Ys,on:Xs,once:Zs});const ta=()=>{const e=window.location.hash.slice(1);return new URLSearchParams(e).get("tgWebAppData")},sa=l({viewport:void 0,theme:void 0,init:void 0}),aa=e=>{const[t,s]=g({viewport:void 0,theme:void 0,init:void 0});return m((()=>{const e=()=>{s("init",mt())};e();const t=t=>{e(),s("viewport",t)};Xs(bs,t),_e();const a=t=>{e(),s("theme",t)};return Xs(gs,a),_e(),p((()=>{Ys(bs,t),Ys(gs,a)})),()=>{Ys(bs,t),Ys(gs,a)}})),sa.Provider({value:t,children:e.children})};export{ct as BiometricManager,sa as ContextTwa,Rs as EventAccelerometerChanged,Ts as EventAccelerometerFailed,As as EventAccelerometerStarted,Ps as EventAccelerometerStopped,as as EventBackButtonPressed,Is as EventBiometryAuthRequested,Os as EventBiometryInfoReceived,xs as EventBiometryTokenUpdated,os as EventClipboardTextReceived,vs as EventContentSafeAreaChanged,rs as EventCustomMethodInvoked,Cs as EventDeviceOrientationChanged,Es as EventDeviceOrientationFailed,Ws as EventDeviceOrientationStarted,Ls as EventDeviceOrientationStopped,ks as EventEmojiStatusAccessRequested,qs as EventEmojiStatusFailed,ys as EventEmojiStatusSet,Bs as EventFileDownloadRequested,Gs as EventFullscreenChanged,Ms as EventFullscreenFailed,js as EventGyroscopeChanged,Ds as EventGyroscopeFailed,Fs as EventGyroscopeStarted,Hs as EventGyroscopeStopped,Ns as EventHomeScreenAdded,Us as EventHomeScreenChecked,$s as EventHomeScreenFailed,is as EventInvoiceClosed,Qs as EventLocationChecked,Js as EventLocationRequested,ns as EventMainButtonPressed,ds as EventPhoneRequested,cs as EventPopupClosed,fs as EventPreparedMessageFailed,Ss as EventPreparedMessageSent,_s as EventQrTextReceived,us as EventReloadIframe,hs as EventSafeAreaChanged,ps as EventScanQrPopupClosed,Vs as EventSecondaryButtonPressed,ls as EventSetCustomStyle,ms as EventSettingsButtonPressed,gs as EventThemeChanged,bs as EventViewportChanged,zs as EventVisibilityChanged,ws as EventWriteAccessRequested,ss as Method,Kt as MethodAddToHomeScreen,Xt as MethodCheckHomeScreen,St as MethodClose,ft as MethodCloseScanQrPopup,yt as MethodDataSend,Vt as MethodExitFullscreen,qt as MethodExpand,kt as MethodIframeReady,Bt as MethodIframeWillReload,bt as MethodInvokeCustomMethod,Rt as MethodOpenInvoice,Tt as MethodOpenLink,At as MethodOpenPopup,wt as MethodOpenScanQrPopup,Pt as MethodOpenTgLink,ht as MethodReadTextFromClipboard,It as MethodReady,Qt as MethodRequestContentSafeArea,es as MethodRequestEmojiStatusAccess,ts as MethodRequestFileDownload,Jt as MethodRequestFullscreen,vt as MethodRequestPhone,$t as MethodRequestSafeArea,Ot as MethodRequestTheme,xt as MethodRequestViewport,Ct as MethodRequestWriteAccess,Yt as MethodSendPreparedMessage,Et as MethodSetBackgroundColor,Lt as MethodSetBottomBarColor,Zt as MethodSetEmojiStatus,Wt as MethodSetHeaderColor,Gt as MethodSetupBackButton,Mt as MethodSetupClosingBehavior,jt as MethodSetupMainButton,Dt as MethodSetupSettingsButton,Nt as MethodSetupSwipeBehavior,Ut as MethodShareToStory,Ft as MethodSwitchInlineQuery,zt as MethodToggleOrientationLock,Ht as MethodTriggerHapticFeedback,A as NOT_SUPPORTED,aa as ProviderTWA,R as TG_DESKTOP,B as TG_PHONE,k as TG_WEB,Ne as bridgeAddToHomeScreen,Fe as bridgeCheckHomeScreen,C as bridgeClose,W as bridgeCloseScanQrPopup,G as bridgeDataSend,rt as bridgeDownloadFile,j as bridgeExpand,mt as bridgeGetInitData,x as bridgeGetThemeParams,F as bridgeIframeReady,N as bridgeIframeWillReload,$ as bridgeInvokeCustomMethod,J as bridgeOpenInvoice,z as bridgeOpenLink,X as bridgeOpenPopup,Z as bridgeOpenScanQrPopup,te as bridgeOpenTgLink,ae as bridgeReadTextFromClipboard,re as bridgeReady,Je as bridgeRequestContentSafeAreaInset,Ze as bridgeRequestEmojiStatus,ne as bridgeRequestPhone,$e as bridgeRequestSafeAreaInset,ce as bridgeRequestTheme,_e as bridgeRequestViewport,le as bridgeRequestWriteAccess,gt as bridgeSend,We as bridgeSessionStorageGet,Ce as bridgeSessionStorageSet,ge as bridgeSetBackgroundColor,ve as bridgeSetBottomBarColor,tt as bridgeSetEmojiStatus,we as bridgeSetHeaderColor,fe as bridgeSetupBackButton,qe as bridgeSetupClosingBehavior,ze as bridgeSetupFullScreen,Be as bridgeSetupMainButton,Xe as bridgeSetupOrientation,Te as bridgeSetupSettingsButton,Ge as bridgeSetupSwipeBehavior,at as bridgeShareMessage,je as bridgeShareToStory,Pe as bridgeSwitchInlineQuery,Oe as bridgeTriggerHapticFeedback,q as createIsViewportChanged,lt as debug,ta as getAppData,T as getPlatform,ea as listener,gt as sender,Ue as supportAddToHomeScreen,ut as supportBiometricManager,He as supportCheckHomeScreen,E as supportClose,L as supportCloseScanQrPopup,M as supportDataSend,it as supportDownloadFile,D as supportExpand,H as supportIframeReady,U as supportIframeWillReload,Q as supportInvokeCustomMethod,V as supportOpenInvoice,K as supportOpenLink,Y as supportOpenPopup,ee as supportOpenScanQrPopup,se as supportOpenTgLink,oe as supportReadTextFromClipboard,ie as supportReady,Ve as supportRequestContentSafeAreaInset,et as supportRequestEmojiStatus,de as supportRequestPhone,Qe as supportRequestSafeAreaInset,ue as supportRequestTheme,pe as supportRequestViewport,me as supportRequestWriteAccess,Le as supportSessionStorageGet,Ee as supportSessionStorageSet,be as supportSetBackgroundColor,Se as supportSetBottomBarColor,st as supportSetEmojiStatus,he as supportSetHeaderColor,ye as supportSetupBackButton,ke as supportSetupClosingBehavior,Ke as supportSetupFullScreen,Re as supportSetupMainButton,Ye as supportSetupOrientation,Ae as supportSetupSettingsButton,Me as supportSetupSwipeBehavior,ot as supportShareMessage,De as supportShareToStory,Ie as supportSwitchInlineQuery,xe as supportTriggerHapticFeedback};