@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 +20 -78
- package/package.json +1 -1
- package/solid/index.d.ts +108 -10
- package/solid/index.js +1 -1
- package/solid/index.mjs +1 -1
package/README.md
CHANGED
|
@@ -1,90 +1,32 @@
|
|
|
1
|
-
##
|
|
2
|
-
[](https://www.npmjs.com/package/@apiteam/twa-bridge)
|
|
1
|
+
## Описание
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
Библиотека для работы с Telegram WebApp API, предоставляющая удобный интерфейс для взаимодействия с функциями Telegram Mini Apps. Реализована на TypeScript с поддержкой строгой типизации.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
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
|
-
|
|
10
|
+
- Управление внешним видом WebApp (цвета, кнопки)
|
|
11
|
+
- Работа с платежами и инвойсами
|
|
12
|
+
- Взаимодействие с QR-сканером
|
|
13
|
+
- Управление буфером обмена
|
|
14
|
+
- Обработка системных событий Telegram
|
|
28
15
|
|
|
29
|
-
|
|
30
|
-
import { bridgeOpenPopup } from '@apiteam/twa-bridge/solid'
|
|
16
|
+
## Установка
|
|
31
17
|
|
|
32
|
-
|
|
18
|
+
```bash
|
|
19
|
+
npm install @apiteam/twa-bridge
|
|
33
20
|
```
|
|
34
21
|
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
+
- [Создать issue в GitHub](https://github.com/apiteamru/twa-bridge/issues)
|
|
29
|
+
_(Для багрепортов и запросов функций)_
|
|
79
30
|
|
|
80
|
-
|
|
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
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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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&<(At,3),e.message.length<1&<(At,4),e.message.length>256&<(At,5),e.buttons.length<1&<(At,6),e.buttons.length>3&<(At,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&<(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&<(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};
|