@apiteam/twa-bridge 0.0.2-beta.3 → 7.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,56 @@
1
+ ## SDK
2
+ [![npm version](https://img.shields.io/npm/v/@apiteam/twa-bridge)](https://www.npmjs.com/package/@apiteam/twa-bridge)
3
+
4
+ npm package for [Telegram Web Apps (TWA)](https://core.telegram.org/bots/webapps) SDK.
5
+
6
+ ```
7
+ npm i @apiteam/twa-bridge
8
+ ```
9
+
10
+ ### Motivation
11
+ Telegram distributes SDK via [link](https://core.telegram.org/bots/webapps#initializing-web-apps). It's kinda old fashion way to work with a library:
12
+
13
+ ```html
14
+ <html lang="en">
15
+ <head>
16
+ <title>TWA</title>
17
+ <meta charset="UTF-8">
18
+ <script src="https://telegram.org/js/telegram-web-app.js"></script>
19
+ <script>
20
+ window.Telegram.WebApp.showPopup({ message: 'message' });
21
+ </script>
22
+ </head>
23
+ <body></body>
24
+ </html>
25
+ ```
26
+
27
+ This package allows to work with SDK as with a npm package:
28
+
29
+ ```js
30
+ import { bridgeOpenPopup } from '@apiteam/twa-bridge/solid'
31
+
32
+ bridgeOpenPopup({ message: 'message' })
33
+ ```
34
+
35
+ And yes, it supports TS.
36
+
37
+ ### Solid
38
+ ```js
39
+ import { createIsViewportChanged } from '@apiteam/twa-bridge/solid'
40
+
41
+ const viewport = createIsViewportChanged()
42
+ ```
43
+
44
+ ### Errors
45
+
46
+ | ID | Description |
47
+ | --- | ----------------------------------------------------------------- |
48
+ | 1 | Method not supported |
49
+ | 2 | Ooof! Something is wrong. Init data is missing |
50
+ | 3 | Title too long, maximum length 64 characters |
51
+ | 4 | Your message is too short, at least 1 character |
52
+ | 5 | Your message is too long, maximum 256 characters |
53
+ | 6 | You are passing too few buttons, at least 1 button |
54
+ | 7 | You are passing too many buttons, maximum 3 buttons |
55
+ | 8 | The button text ignores the following values: "ok, close, cancel" |
56
+ | 9 | EDIT_MESSAGE
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@apiteam/twa-bridge",
3
- "version": "0.0.2-beta.3",
4
- "description": "undefined",
3
+ "version": "7.0.0-beta.1",
4
+ "description": "Telegram bridge",
5
5
  "license": "MIT",
6
6
  "types": "index.ts",
7
7
  "author": {
package/solid/index.d.ts CHANGED
@@ -1,7 +1,14 @@
1
1
  import * as solid_js from 'solid-js';
2
2
 
3
+ declare const createIsViewportChanged: () => solid_js.Accessor<{
4
+ height: number;
5
+ width?: number | undefined;
6
+ is_expanded: boolean;
7
+ is_state_stable: boolean;
8
+ }>;
9
+
3
10
  type Close = () => {
4
- status: boolean | 'not_supported';
11
+ status: boolean | typeof NOT_SUPPORTED;
5
12
  };
6
13
  /**
7
14
  * Closes Mini App.
@@ -15,7 +22,7 @@ declare const close: Close;
15
22
  declare const supportClose: () => boolean;
16
23
 
17
24
  type CloseScanQrPopup = () => {
18
- status: boolean | 'not_supported';
25
+ status: boolean | typeof NOT_SUPPORTED;
19
26
  };
20
27
  /**
21
28
  * Closes a QR scanner. The Telegram application creates the scan_qr_popup_closed event.
@@ -34,7 +41,7 @@ type DataSend = (eventData: {
34
41
  */
35
42
  data: string;
36
43
  }) => {
37
- status: boolean | 'not_supported';
44
+ status: boolean | typeof NOT_SUPPORTED;
38
45
  };
39
46
  /**
40
47
  * Sends data to the bot. When this method is called, a service message is sent to the bot containing the data of the length up to 4096 bytes.
@@ -52,7 +59,7 @@ declare const dataSend: DataSend;
52
59
  declare const supportDataSend: () => boolean;
53
60
 
54
61
  type Expand = () => {
55
- status: boolean | 'not_supported';
62
+ status: boolean | typeof NOT_SUPPORTED;
56
63
  };
57
64
  /**
58
65
  * Closes Mini App.
@@ -69,7 +76,7 @@ type IframeReady = (eventData: {
69
76
  */
70
77
  reload_supported?: boolean;
71
78
  }) => {
72
- status: boolean | 'not_supported';
79
+ status: boolean | typeof NOT_SUPPORTED;
73
80
  };
74
81
  /**
75
82
  * Notifies parent iframe about the current frame is ready.
@@ -85,7 +92,7 @@ declare const iframeReady: IframeReady;
85
92
  declare const supportIframeReady: () => boolean;
86
93
 
87
94
  type IframeWillReload = () => {
88
- status: boolean | 'not_supported';
95
+ status: boolean | typeof NOT_SUPPORTED;
89
96
  };
90
97
  /**
91
98
  * Notifies parent iframe about the current iframe is going to reload.
@@ -101,8 +108,10 @@ declare const supportIframeWillReload: () => boolean;
101
108
  type InvokeCustomMethod = (eventData: {
102
109
  /**
103
110
  * Current invocation unique identifier.
111
+ *
112
+ * Default: () => randomReqId
104
113
  */
105
- req_id: string;
114
+ req_id?: string;
106
115
  /**
107
116
  * Method name.
108
117
  */
@@ -111,9 +120,10 @@ type InvokeCustomMethod = (eventData: {
111
120
  * Parameters according to method.
112
121
  */
113
122
  params: unknown;
114
- }) => {
115
- status: boolean | 'not_supported';
116
- };
123
+ }) => Promise<{
124
+ status: boolean | typeof NOT_SUPPORTED;
125
+ data?: EventsData[typeof EventCustomMethodInvoked];
126
+ }>;
117
127
  /**
118
128
  * Original: https://docs.telegram-mini-apps.com/platform/apps-communication/methods#web-app-invoke-custom-method
119
129
  */
@@ -129,7 +139,7 @@ type OpenInvoice = (eventData: {
129
139
  */
130
140
  slug: string;
131
141
  }) => {
132
- status: boolean | 'not_supported';
142
+ status: boolean | typeof NOT_SUPPORTED;
133
143
  };
134
144
  /**
135
145
  * Opens an invoice by its specified slug.
@@ -154,7 +164,7 @@ type OpenLink = (eventData: {
154
164
  */
155
165
  try_instant_view?: boolean;
156
166
  }) => {
157
- status: boolean | 'not_supported';
167
+ status: boolean | typeof NOT_SUPPORTED;
158
168
  };
159
169
  /**
160
170
  * Opens link in the default browser.
@@ -193,9 +203,10 @@ type OpenPopup = (eventData: {
193
203
  * List of buttons to be displayed in the popup, 1-3 buttons
194
204
  */
195
205
  buttons: PopupButton[];
196
- }) => {
197
- status: boolean | 'not_supported';
198
- };
206
+ }) => Promise<{
207
+ status: boolean | typeof NOT_SUPPORTED;
208
+ data?: EventsData['popup_closed'];
209
+ }>;
199
210
  /**
200
211
  * Opens a new popup. When user closes the popup, Telegram creates the popup_closed event.
201
212
  *
@@ -217,10 +228,8 @@ type OpenScanQrPopup = (eventData: {
217
228
  */
218
229
  is_close?: boolean;
219
230
  }) => Promise<{
220
- status: boolean | 'not_supported' | 'closed';
221
- data: {
222
- data?: string;
223
- };
231
+ status: boolean | typeof NOT_SUPPORTED | 'closed';
232
+ data?: EventsData[typeof EventQrTextReceived];
224
233
  }>;
225
234
  /**
226
235
  * Opens a QR scanner.
@@ -245,7 +254,7 @@ type OpenTgLink = (eventData: {
245
254
  */
246
255
  path_full: string;
247
256
  }) => {
248
- status: boolean | 'not_supported';
257
+ status: boolean | typeof NOT_SUPPORTED;
249
258
  };
250
259
  /**
251
260
  * Opens the Telegram link by its pathname and query parameters.
@@ -263,11 +272,14 @@ declare const supportOpenTgLink: () => boolean;
263
272
  type ReadTextFromClipboard = (eventData: {
264
273
  /**
265
274
  * Unique request identifier. Should be any unique string to handle the generated event appropriately.
275
+ *
276
+ * Default: () => randomReqId
266
277
  */
267
- req_id: string;
268
- }) => {
269
- status: boolean | 'not_supported';
270
- };
278
+ req_id?: string;
279
+ }) => Promise<{
280
+ status: boolean | typeof NOT_SUPPORTED;
281
+ data?: EventsData[typeof EventClipboardTextReceived];
282
+ }>;
271
283
  /**
272
284
  * Reads text from the clipboard.
273
285
  *
@@ -282,7 +294,7 @@ declare const readTextFromClipboard: ReadTextFromClipboard;
282
294
  declare const supportReadTextFromClipboard: () => boolean;
283
295
 
284
296
  type Ready = () => {
285
- status: boolean | 'not_supported';
297
+ status: boolean | typeof NOT_SUPPORTED;
286
298
  };
287
299
  /**
288
300
  * Notifies Telegram about current application is ready to be shown.
@@ -298,7 +310,7 @@ declare const ready: Ready;
298
310
  declare const supportReady: () => boolean;
299
311
 
300
312
  type RequestPhone = () => Promise<{
301
- status: boolean | 'not_supported';
313
+ status: boolean | typeof NOT_SUPPORTED;
302
314
  }>;
303
315
  /**
304
316
  * Requests access to current user's phone.
@@ -312,7 +324,7 @@ declare const requestPhone: RequestPhone;
312
324
  declare const supportRequestPhone: () => boolean;
313
325
 
314
326
  type RequestTheme = () => {
315
- status: boolean | 'not_supported';
327
+ status: boolean | typeof NOT_SUPPORTED;
316
328
  };
317
329
  /**
318
330
  * Requests current theme from Telegram.
@@ -328,7 +340,7 @@ declare const requestTheme: RequestTheme;
328
340
  declare const supportRequestTheme: () => boolean;
329
341
 
330
342
  type RequestViewport = () => {
331
- status: boolean | 'not_supported';
343
+ status: boolean | typeof NOT_SUPPORTED;
332
344
  };
333
345
  /**
334
346
  * Requests current viewport information from Telegram.
@@ -344,7 +356,7 @@ declare const requestViewport: RequestViewport;
344
356
  declare const supportRequestViewport: () => boolean;
345
357
 
346
358
  type RequestWriteAccess = () => {
347
- status: boolean | 'not_supported';
359
+ status: boolean | typeof NOT_SUPPORTED;
348
360
  };
349
361
  /**
350
362
  * Requests write message access to current user.
@@ -363,7 +375,7 @@ type SetBackgroundColor = (eventData: {
363
375
  */
364
376
  color: string;
365
377
  }) => {
366
- status: boolean | 'not_supported';
378
+ status: boolean | typeof NOT_SUPPORTED;
367
379
  };
368
380
  /**
369
381
  * Updates the Mini App background color.
@@ -386,7 +398,7 @@ type SetHeaderColor = (eventData: {
386
398
  */
387
399
  color: string;
388
400
  }) => {
389
- status: boolean | 'not_supported';
401
+ status: boolean | typeof NOT_SUPPORTED;
390
402
  };
391
403
  /**
392
404
  * Updates the Mini App header color. This method should accept color_key or color property.
@@ -405,7 +417,7 @@ type SetupBackButton = (eventData: {
405
417
  */
406
418
  is_visible: boolean;
407
419
  }) => {
408
- status: boolean | 'not_supported';
420
+ status: boolean | typeof NOT_SUPPORTED;
409
421
  };
410
422
  /**
411
423
  * Updates the Back Button settings.
@@ -424,7 +436,7 @@ type SetupClosingBehavior = (eventData: {
424
436
  */
425
437
  need_confirmation: boolean;
426
438
  }) => {
427
- status: boolean | 'not_supported';
439
+ status: boolean | typeof NOT_SUPPORTED;
428
440
  };
429
441
  /**
430
442
  * Updates current closing behavior.
@@ -463,7 +475,7 @@ type SetupMainButton = (eventData: {
463
475
  */
464
476
  text_color?: string;
465
477
  }) => {
466
- status: boolean | 'not_supported';
478
+ status: boolean | typeof NOT_SUPPORTED;
467
479
  };
468
480
  /**
469
481
  * Updates the Main Button settings.
@@ -482,7 +494,7 @@ type SetupSettingsButton = (eventData: {
482
494
  */
483
495
  is_visible: boolean;
484
496
  }) => {
485
- status: boolean | 'not_supported';
497
+ status: boolean | typeof NOT_SUPPORTED;
486
498
  };
487
499
  /**
488
500
  * Updates current state of Settings Button.
@@ -507,7 +519,7 @@ type SwitchInlineQuery = (eventData: {
507
519
  */
508
520
  chat_types: ['users', 'bots', 'groups', 'channels'];
509
521
  }) => {
510
- status: boolean | 'not_supported';
522
+ status: boolean | typeof NOT_SUPPORTED;
511
523
  };
512
524
  /**
513
525
  * Inserts the bot's username and the specified inline query in the current chat's input field.
@@ -560,7 +572,7 @@ type TriggerHapticFeedback = (eventData: {
560
572
  */
561
573
  notification_type: 'error' | 'success' | 'warning';
562
574
  }) => {
563
- status: boolean | 'not_supported';
575
+ status: boolean | typeof NOT_SUPPORTED;
564
576
  };
565
577
  /**
566
578
  * Generates the haptic feedback event.
@@ -708,13 +720,6 @@ type GetInitData = () => null | {
708
720
  */
709
721
  declare const getInitData: GetInitData;
710
722
 
711
- declare const createIsViewportChanged: () => solid_js.Accessor<{
712
- height: number;
713
- width?: number | undefined;
714
- is_expanded: boolean;
715
- is_state_stable: boolean;
716
- }>;
717
-
718
723
  type Sender = (eventType: string, eventData?: any) => void;
719
724
  /**
720
725
  * EDIT
@@ -724,7 +729,7 @@ type Sender = (eventType: string, eventData?: any) => void;
724
729
  */
725
730
  declare const sender: Sender;
726
731
 
727
- type Debug = (message: string) => void;
732
+ type Debug = (methondName: string, errorId: number) => void;
728
733
  declare const debug: Debug;
729
734
 
730
735
  type EventsData = {
@@ -895,23 +900,66 @@ declare global {
895
900
  };
896
901
  }
897
902
  }
898
- declare const listenerStart: () => void;
899
903
  type Listened = <T extends EventsData, E extends keyof T, D extends T[E]>(eventName: E, callback: (eventData: D) => void) => void;
900
904
  declare const on: Listened;
901
905
  declare const off: Listened;
902
906
  declare const once: Listened;
903
907
 
904
908
  type listener_EventsData = EventsData;
905
- declare const listener_listenerStart: typeof listenerStart;
906
909
  declare const listener_off: typeof off;
907
910
  declare const listener_on: typeof on;
908
911
  declare const listener_once: typeof once;
909
912
  declare namespace listener {
910
- export { type listener_EventsData as EventsData, listener_listenerStart as listenerStart, listener_off as off, listener_on as on, listener_once as once };
913
+ export { type listener_EventsData as EventsData, listener_off as off, listener_on as on, listener_once as once };
911
914
  }
912
915
 
913
916
  declare const TG_WEB = "web";
914
917
  declare const TG_PHONE = "phone";
915
918
  declare const TG_DESKTOP = "desktop";
916
919
 
917
- export { type EventsData, TG_DESKTOP, TG_PHONE, TG_WEB, close as bridgeClose, closeScanQrPopup as bridgeCloseScanQrPopup, dataSend as bridgeDataSend, expand as bridgeExpand, getInitData as bridgeGetInitData, 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, requestPhone as bridgeRequestPhone, requestTheme as bridgeRequestTheme, requestViewport as bridgeRequestViewport, requestWriteAccess as bridgeRequestWriteAccess, setBackgroundColor as bridgeSetBackgroundColor, setHeaderColor as bridgeSetHeaderColor, setupBackButton as bridgeSetupBackButton, setupClosingBehavior as bridgeSetupClosingBehavior, setupMainButton as bridgeSetupMainButton, setupSettingsButton as bridgeSetupSettingsButton, switchInlineQuery as bridgeSwitchInlineQuery, triggerHapticFeedback as bridgeTriggerHapticFeedback, createIsViewportChanged, debug, listener, sender, supportClose, supportCloseScanQrPopup, supportDataSend, supportExpand, supportIframeReady, supportIframeWillReload, supportInvokeCustomMethod, supportOpenInvoice, supportOpenLink, supportOpenPopup, supportOpenScanQrPopup, supportOpenTgLink, supportReadTextFromClipboard, supportReady, supportRequestPhone, supportRequestTheme, supportRequestViewport, supportRequestWriteAccess, supportSetBackgroundColor, supportSetHeaderColor, supportSetupBackButton, supportSetupClosingBehavior, supportSetupMainButton, supportSetupSettingsButton, supportSwitchInlineQuery, supportTriggerHapticFeedback };
920
+ declare const NOT_SUPPORTED = "not_supported";
921
+
922
+ declare const MethodInvokeCustomMethod = "web_app_invoke_custom_method";
923
+ declare const MethodOpenScanQrPopup = "web_app_open_scan_qr_popup";
924
+ declare const MethodReadTextFromClipboard = "web_app_read_text_from_clipboard";
925
+ declare const MethodRequestPhone = "web_app_request_phone";
926
+ declare const MethodClose = "web_app_close";
927
+ declare const MethodCloseScanQrPopup = "web_app_close_scan_qr_popup";
928
+ declare const MethodDataSend = "web_app_data_send";
929
+ declare const MethodExpand = "web_app_expand";
930
+ declare const MethodIframeReady = "iframe_ready";
931
+ declare const MethodIframeWillReload = "iframe_will_reload";
932
+ declare const MethodOpenInvoice = "web_app_open_invoice";
933
+ declare const MethodOpenLink = "web_app_open_link";
934
+ declare const MethodOpenPopup = "web_app_open_popup";
935
+ declare const MethodOpenTgLink = "web_app_open_tg_link";
936
+ declare const MethodReady = "web_app_ready";
937
+ declare const MethodRequestTheme = "web_app_request_theme";
938
+ declare const MethodRequestViewport = "web_app_request_viewport";
939
+ declare const MethodRequestWriteAccess = "web_app_request_write_access";
940
+ declare const MethodSetBackgroundColor = "web_app_set_background_color";
941
+ declare const MethodSetHeaderColor = "web_app_set_header_color";
942
+ declare const MethodSetupBackButton = "web_app_setup_back_button";
943
+ declare const MethodSetupClosingBehavior = "web_app_setup_closing_behavior";
944
+ declare const MethodSetupMainButton = "web_app_setup_main_button";
945
+ declare const MethodSetupSettingsButton = "web_app_setup_settings_button";
946
+ declare const MethodSwitchInlineQuery = "web_app_switch_inline_query";
947
+ declare const MethodTriggerHapticFeedback = "web_app_trigger_haptic_feedback";
948
+
949
+ declare const EventBackButtonPressed = "back_button_pressed";
950
+ declare const EventClipboardTextReceived = "clipboard_text_received";
951
+ declare const EventCustomMethodInvoked = "custom_method_invoked";
952
+ declare const EventInvoiceClosed = "invoice_closed";
953
+ declare const EventMainButtonPressed = "main_button_pressed";
954
+ declare const EventPhoneRequested = "phone_requested";
955
+ declare const EventPopupClosed = "popup_closed";
956
+ declare const EventReloadIframe = "reload_iframe";
957
+ declare const EventQrTextReceived = "qr_text_received";
958
+ declare const EventScanQrPopupClosed = "scan_qr_popup_closed";
959
+ declare const EventSetCustomStyle = "set_custom_style";
960
+ declare const EventSettingsButtonPressed = "settings_button_pressed";
961
+ declare const EventThemeChanged = "theme_changed";
962
+ declare const EventViewportChanged = "viewport_changed";
963
+ declare const EventWriteAccessRequested = "write_access_requested";
964
+
965
+ export { EventBackButtonPressed, EventClipboardTextReceived, EventCustomMethodInvoked, EventInvoiceClosed, EventMainButtonPressed, EventPhoneRequested, EventPopupClosed, EventQrTextReceived, EventReloadIframe, EventScanQrPopupClosed, EventSetCustomStyle, EventSettingsButtonPressed, EventThemeChanged, EventViewportChanged, EventWriteAccessRequested, type EventsData, MethodClose, MethodCloseScanQrPopup, MethodDataSend, MethodExpand, MethodIframeReady, MethodIframeWillReload, MethodInvokeCustomMethod, MethodOpenInvoice, MethodOpenLink, MethodOpenPopup, MethodOpenScanQrPopup, MethodOpenTgLink, MethodReadTextFromClipboard, MethodReady, MethodRequestPhone, MethodRequestTheme, MethodRequestViewport, MethodRequestWriteAccess, MethodSetBackgroundColor, MethodSetHeaderColor, MethodSetupBackButton, MethodSetupClosingBehavior, MethodSetupMainButton, MethodSetupSettingsButton, MethodSwitchInlineQuery, MethodTriggerHapticFeedback, NOT_SUPPORTED, TG_DESKTOP, TG_PHONE, TG_WEB, close as bridgeClose, closeScanQrPopup as bridgeCloseScanQrPopup, dataSend as bridgeDataSend, expand as bridgeExpand, getInitData as bridgeGetInitData, 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, requestPhone as bridgeRequestPhone, requestTheme as bridgeRequestTheme, requestViewport as bridgeRequestViewport, requestWriteAccess as bridgeRequestWriteAccess, setBackgroundColor as bridgeSetBackgroundColor, setHeaderColor as bridgeSetHeaderColor, setupBackButton as bridgeSetupBackButton, setupClosingBehavior as bridgeSetupClosingBehavior, setupMainButton as bridgeSetupMainButton, setupSettingsButton as bridgeSetupSettingsButton, switchInlineQuery as bridgeSwitchInlineQuery, triggerHapticFeedback as bridgeTriggerHapticFeedback, createIsViewportChanged, debug, listener, sender, supportClose, supportCloseScanQrPopup, supportDataSend, supportExpand, supportIframeReady, supportIframeWillReload, supportInvokeCustomMethod, supportOpenInvoice, supportOpenLink, supportOpenPopup, supportOpenScanQrPopup, supportOpenTgLink, supportReadTextFromClipboard, supportReady, supportRequestPhone, supportRequestTheme, supportRequestViewport, supportRequestWriteAccess, supportSetBackgroundColor, supportSetHeaderColor, supportSetupBackButton, supportSetupClosingBehavior, supportSetupMainButton, supportSetupSettingsButton, supportSwitchInlineQuery, supportTriggerHapticFeedback };
package/solid/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("solid-js");const t=e=>{},s="web",p="phone",o="desktop",r=(e,t)=>{const r=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(r)>=e&&-1!==t.indexOf((()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(t)?p:["tdesktop","macos"].includes(t)?o:s})())},a="web_app_close",n=()=>r(0,[s,o,p]);var u=(e,t)=>{window.TelegramWebviewProxy?window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t)):window.external&&"notify"in window.external&&window.external.notify(JSON.stringify({eventType:e,eventData:t}))};const i="web_app_close_scan_qr_popup",_=()=>d()?(u(i),{status:!0}):{status:"not_supported"},d=()=>r(6.4,[p]),c="web_app_data_send",l=()=>r(0,[s,o,p]),x="web_app_expand",b=()=>r(0,[p]),g="iframe_ready",w=()=>r(0,[s]),h="iframe_will_reload",m=()=>r(0,[s]),f="web_app_invoke_custom_method",v=()=>r(6.9,[s,o,p]),S="web_app_open_invoice",y=()=>r(6.1,[s,o,p]),k="web_app_open_link",q=()=>r(6.4,[s,o,p]),P="web_app_open_popup",R=()=>r(6.2,[s,o,p]),O="web_app_open_scan_qr_popup",T=()=>r(6.4,[p]),C="web_app_open_tg_link",B=()=>r(7,[s,o,p]),I="web_app_read_text_from_clipboard",W=()=>r(6.4,[s,o,p]),E="web_app_ready",L=()=>r(6.9,[s,o,p]),D="web_app_request_phone",G=()=>r(6.9,[s,o,p]),M="web_app_request_theme",Q=()=>r(0,[s,o,p]),A="web_app_request_viewport",H=()=>r(0,[s,o,p]),N="web_app_request_write_access",V=()=>r(6.9,[s,o,p]),F="web_app_set_background_color",U=()=>r(6.1,[s,o,p]),J="web_app_set_header_color",j=()=>r(6.1,[s,o,p]),$="web_app_setup_back_button",z=()=>r(6.1,[s,o,p]),K="web_app_setup_closing_behavior",X=()=>r(0,[s,o,p]),Y="web_app_setup_main_button",Z=()=>r(0,[s,o,p]),ee="web_app_setup_settings_button",te=()=>r(6.1,[s,o,p]),se="web_app_switch_inline_query",pe=()=>r(6.7,[s,o,p]),oe="web_app_trigger_haptic_feedback",re=()=>r(6.1,[p]),ae=((e=new Map)=>({once:(t,s,p=e.get(t),o=(e=>{s(e),p&&p.splice(p.indexOf(s)>>>0,1)}))=>p?p.push(o):e.set(t,[o]),on:(t,s,p=e.get(t))=>p?p.push(s):e.set(t,[s]),off:(t,s,p=e.get(t))=>p&&s?p.splice(p.indexOf(s)>>>0,1):e.set(t,[]),emit:(t,s,p=e.get(t)||[])=>{for(const e of p)e(s)}}))(),ne=()=>{function e(e,t){ae.emit(e,t),ae.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}};ne();const ue=(e,t)=>{ae.on(e,t)},ie=(e,t)=>{ae.off(e,t)},_e=(e,t)=>{ae.once(e,t)};var de=Object.freeze({__proto__:null,listenerStart:ne,off:ie,on:ue,once:_e});exports.TG_DESKTOP=o,exports.TG_PHONE=p,exports.TG_WEB=s,exports.bridgeClose=()=>n()?(u(a),{status:!0}):{status:"not_supported"},exports.bridgeCloseScanQrPopup=_,exports.bridgeDataSend=e=>l()?(u(c,e),{status:!0}):{status:"not_supported"},exports.bridgeExpand=()=>b()?(u(x),{status:!0}):{status:"not_supported"},exports.bridgeGetInitData=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return null;const t=new URLSearchParams(e);let s={};return t.forEach(((e,t)=>{if(s[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{s[t]=JSON.parse(e)}catch{}})),s},exports.bridgeIframeReady=e=>w()?(u(g,e),{status:!0}):{status:"not_supported"},exports.bridgeIframeWillReload=()=>m()?(u(h),{status:!0}):{status:"not_supported"},exports.bridgeInvokeCustomMethod=e=>v()?(u(f,e),{status:!0}):{status:"not_supported"},exports.bridgeOpenInvoice=e=>y()?(u(S,e),{status:!0}):{status:"not_supported"},exports.bridgeOpenLink=e=>q()?(u(k,e),{status:!0}):{status:"not_supported"},exports.bridgeOpenPopup=e=>R()?(e.title.length,e.message.length,e.message.length,e.buttons.length,e.buttons.length,e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g))),u(P,e),{status:!0}):{status:"not_supported"},exports.bridgeOpenScanQrPopup=async e=>T()?(u(O,e),new Promise(((t,s)=>{_e("qr_text_received",(s=>{e.is_close&&_(),t({status:!0,data:s})})),_e("scan_qr_popup_closed",(()=>{t({status:"closed",data:{data:void 0}})}))}))):{status:"not_supported",data:{data:void 0}},exports.bridgeOpenTgLink=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),B()?(u(C,e),{status:!0}):{status:"not_supported"}),exports.bridgeReadTextFromClipboard=e=>W()?(u(I,e),{status:!0}):{status:"not_supported"},exports.bridgeReady=()=>L()?(u(E),{status:!0}):{status:"not_supported"},exports.bridgeRequestPhone=async()=>G()?(u(D),new Promise(((e,t)=>{_e("phone_requested",(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):{status:"not_supported"},exports.bridgeRequestTheme=()=>Q()?(u(M),{status:!0}):{status:"not_supported"},exports.bridgeRequestViewport=()=>H()?(u(A),{status:!0}):{status:"not_supported"},exports.bridgeRequestWriteAccess=()=>V()?(u(N),{status:!0}):{status:"not_supported"},exports.bridgeSetBackgroundColor=e=>U()?(u(F,e),{status:!0}):{status:"not_supported"},exports.bridgeSetHeaderColor=e=>j()?(u(J,e),{status:!0}):{status:"not_supported"},exports.bridgeSetupBackButton=e=>z()?(u($,e),{status:!0}):{status:"not_supported"},exports.bridgeSetupClosingBehavior=e=>X()?(u(K,e),{status:!0}):{status:"not_supported"},exports.bridgeSetupMainButton=e=>Z()?(u(Y,e),{status:!0}):{status:"not_supported"},exports.bridgeSetupSettingsButton=e=>te()?(u(ee,e),{status:!0}):{status:"not_supported"},exports.bridgeSwitchInlineQuery=e=>pe()?(e.query.length,u(se,e),{status:!0}):{status:"not_supported"},exports.bridgeTriggerHapticFeedback=e=>re()?(u(oe,e),{status:!0}):{status:"not_supported"},exports.createIsViewportChanged=()=>{const[t,s]=e.createSignal({height:0,is_expanded:!1,is_state_stable:!1}),p=e=>s(e);return e.onMount((()=>{ue("viewport_changed",p),u("web_app_request_viewport")})),e.onCleanup((()=>{ie("viewport_changed",p)})),t},exports.debug=t,exports.listener=de,exports.sender=u,exports.supportClose=n,exports.supportCloseScanQrPopup=d,exports.supportDataSend=l,exports.supportExpand=b,exports.supportIframeReady=w,exports.supportIframeWillReload=m,exports.supportInvokeCustomMethod=v,exports.supportOpenInvoice=y,exports.supportOpenLink=q,exports.supportOpenPopup=R,exports.supportOpenScanQrPopup=T,exports.supportOpenTgLink=B,exports.supportReadTextFromClipboard=W,exports.supportReady=L,exports.supportRequestPhone=G,exports.supportRequestTheme=Q,exports.supportRequestViewport=H,exports.supportRequestWriteAccess=V,exports.supportSetBackgroundColor=U,exports.supportSetHeaderColor=j,exports.supportSetupBackButton=z,exports.supportSetupClosingBehavior=X,exports.supportSetupMainButton=Z,exports.supportSetupSettingsButton=te,exports.supportSwitchInlineQuery=pe,exports.supportTriggerHapticFeedback=re;
1
+ "use strict";var e=require("solid-js");const t="web",s="phone",o="desktop",r="not_supported",p=(e,r)=>{const p=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(p)>=e&&-1!==r.indexOf((()=>{const e=window.location.hash.slice(1),r=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(r)?s:["tdesktop","macos"].includes(r)?o:t})())},a=()=>Math.random().toString(36).substring(3,9),n=()=>p(0,[t,o,s]),u=()=>i()?(Q($),{status:!0}):(W($,1),{status:r}),i=()=>p(6.4,[s]),d=()=>p(0,[t,o,s]),_=()=>p(0,[s]),c=()=>p(0,[t]),x=()=>p(0,[t]),l="web_app_invoke_custom_method",g=()=>p(6.9,[t,o,s]),b=()=>p(6.1,[t,o,s]),h=()=>p(6.4,[t,o,s]),w=()=>p(6.2,[t,o,s]),m=()=>p(6.4,[s]),v=()=>p(7,[t,o,s]),S=()=>p(6.4,[t,o,s]),f=()=>p(6.9,[t,o,s]),M=()=>p(6.9,[t,o,s]),P=()=>p(0,[t,o,s]),q=()=>p(0,[t,o,s]),R=()=>p(6.9,[t,o,s]),k=()=>p(6.1,[t,o,s]),C=()=>p(6.1,[t,o,s]),y=()=>p(6.1,[t,o,s]),E=()=>p(0,[t,o,s]),O=()=>p(0,[t,o,s]),T=()=>p(6.1,[t,o,s]),B=()=>p(6.7,[t,o,s]),I=()=>p(6.1,[s]);var W=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)};var Q=(e,t)=>{window.TelegramWebviewProxy?window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t)):window.external&&"notify"in window.external&&window.external.notify(JSON.stringify({eventType:e,eventData:t}))};const D=((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){D.emit(e,t),D.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const L=(e,t)=>{D.on(e,t)},N=(e,t)=>{D.off(e,t)},V=(e,t)=>{D.once(e,t)};var A=Object.freeze({__proto__:null,off:N,on:L,once:V});const H="web_app_open_scan_qr_popup",F="web_app_read_text_from_clipboard",G="web_app_request_phone",U="web_app_close",$="web_app_close_scan_qr_popup",J="web_app_data_send",j="web_app_expand",z="iframe_ready",K="web_app_open_invoice",X="web_app_open_link",Y="web_app_open_popup",Z="web_app_open_tg_link",ee="web_app_ready",te="web_app_request_theme",se="web_app_request_viewport",oe="web_app_request_write_access",re="web_app_set_background_color",pe="web_app_set_header_color",ae="web_app_setup_back_button",ne="web_app_setup_closing_behavior",ue="web_app_setup_main_button",ie="web_app_setup_settings_button",de="web_app_switch_inline_query",_e="web_app_trigger_haptic_feedback",ce="clipboard_text_received",xe="custom_method_invoked",le="phone_requested",ge="popup_closed",be="qr_text_received",he="scan_qr_popup_closed",we="viewport_changed";exports.EventBackButtonPressed="back_button_pressed",exports.EventClipboardTextReceived=ce,exports.EventCustomMethodInvoked=xe,exports.EventInvoiceClosed="invoice_closed",exports.EventMainButtonPressed="main_button_pressed",exports.EventPhoneRequested=le,exports.EventPopupClosed=ge,exports.EventQrTextReceived=be,exports.EventReloadIframe="reload_iframe",exports.EventScanQrPopupClosed=he,exports.EventSetCustomStyle="set_custom_style",exports.EventSettingsButtonPressed="settings_button_pressed",exports.EventThemeChanged="theme_changed",exports.EventViewportChanged=we,exports.EventWriteAccessRequested="write_access_requested",exports.MethodClose=U,exports.MethodCloseScanQrPopup=$,exports.MethodDataSend=J,exports.MethodExpand=j,exports.MethodIframeReady=z,exports.MethodIframeWillReload="iframe_will_reload",exports.MethodInvokeCustomMethod="web_app_invoke_custom_method",exports.MethodOpenInvoice=K,exports.MethodOpenLink=X,exports.MethodOpenPopup=Y,exports.MethodOpenScanQrPopup=H,exports.MethodOpenTgLink=Z,exports.MethodReadTextFromClipboard=F,exports.MethodReady=ee,exports.MethodRequestPhone=G,exports.MethodRequestTheme=te,exports.MethodRequestViewport=se,exports.MethodRequestWriteAccess=oe,exports.MethodSetBackgroundColor=re,exports.MethodSetHeaderColor=pe,exports.MethodSetupBackButton=ae,exports.MethodSetupClosingBehavior=ne,exports.MethodSetupMainButton=ue,exports.MethodSetupSettingsButton=ie,exports.MethodSwitchInlineQuery=de,exports.MethodTriggerHapticFeedback=_e,exports.NOT_SUPPORTED=r,exports.TG_DESKTOP=o,exports.TG_PHONE=s,exports.TG_WEB=t,exports.bridgeClose=()=>n()?(Q(U),{status:!0}):(W(U,1),{status:r}),exports.bridgeCloseScanQrPopup=u,exports.bridgeDataSend=e=>d()?(Q(J,e),{status:!0}):(W(J,1),{status:r}),exports.bridgeExpand=()=>_()?(Q(j),{status:!0}):(W(j,1),{status:r}),exports.bridgeGetInitData=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return W("getInitData",2),null;const t=new URLSearchParams(e);let s={};return t.forEach(((e,t)=>{if(s[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{s[t]=JSON.parse(e)}catch{}})),s},exports.bridgeIframeReady=e=>c()?(Q(z,e),{status:!0}):(W(z,1),{status:r}),exports.bridgeIframeWillReload=()=>x()?(Q(z),{status:!0}):(W(z,1),{status:r}),exports.bridgeInvokeCustomMethod=async e=>g()?(void 0===e.req_id&&(e.req_id=a()),Q(l,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),N(xe,o))};L(xe,o)}))):(W(l,1),{status:r}),exports.bridgeOpenInvoice=e=>b()?(Q(K,e),{status:!0}):(W(K,1),{status:r}),exports.bridgeOpenLink=e=>h()?(Q(X,e),{status:!0}):(W(X,1),{status:r}),exports.bridgeOpenPopup=async e=>w()?(e.title.length>64&&W(Y,3),e.message.length<1&&W(Y,4),e.message.length>256&&W(Y,5),e.buttons.length<1&&W(Y,6),e.buttons.length>3&&W(Y,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&W(Y,8),Q(Y,e),new Promise(((t,s)=>{const o=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),N(ge,o)};L(ge,o)}))):(W(Y,1),{status:r}),exports.bridgeOpenScanQrPopup=async e=>m()?(Q(H,e),new Promise(((t,s)=>{V(be,(s=>{e.is_close&&u(),t({status:!0,data:s})})),V(he,(()=>{t({status:"closed"})}))}))):(W(H,1),{status:r}),exports.bridgeOpenTgLink=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),v()?(Q(Z,e),{status:!0}):(W(Z,1),{status:r})),exports.bridgeReadTextFromClipboard=async e=>S()?(void 0===e.req_id&&(e.req_id=a()),Q(F,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),N(ce,o))};L(ce,o)}))):(W(F,1),{status:r}),exports.bridgeReady=()=>f()?(Q(ee),{status:!0}):(W(ee,1),{status:r}),exports.bridgeRequestPhone=async()=>M()?(Q(G),new Promise(((e,t)=>{V(le,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(W(G,1),{status:r}),exports.bridgeRequestTheme=()=>P()?(Q(te),{status:!0}):(W(te,1),{status:r}),exports.bridgeRequestViewport=()=>q()?(Q(se),{status:!0}):(W(se,1),{status:r}),exports.bridgeRequestWriteAccess=()=>R()?(Q(oe),{status:!0}):(W(oe,1),{status:r}),exports.bridgeSetBackgroundColor=e=>k()?(Q(re,e),{status:!0}):(W(re,1),{status:r}),exports.bridgeSetHeaderColor=e=>C()?(Q(pe,e),{status:!0}):(W(pe,1),{status:r}),exports.bridgeSetupBackButton=e=>y()?(Q(ae,e),{status:!0}):(W(ae,1),{status:r}),exports.bridgeSetupClosingBehavior=e=>E()?(Q(ne,e),{status:!0}):(W(ne,1),{status:r}),exports.bridgeSetupMainButton=e=>O()?(Q(ue,e),{status:!0}):(W(ue,1),{status:r}),exports.bridgeSetupSettingsButton=e=>T()?(Q(ie,e),{status:!0}):(W(ie,1),{status:r}),exports.bridgeSwitchInlineQuery=e=>B()?(e.query.length>256&&W(de,9),Q(de,e),{status:!0}):(W(de,1),{status:r}),exports.bridgeTriggerHapticFeedback=e=>I()?(Q(_e,e),{status:!0}):(W(_e,1),{status:r}),exports.createIsViewportChanged=()=>{const[t,s]=e.createSignal({height:0,is_expanded:!1,is_state_stable:!1}),o=e=>s(e);return e.onMount((()=>{L(we,o),Q(se)})),e.onCleanup((()=>{N(we,o)})),t},exports.debug=W,exports.listener=A,exports.sender=Q,exports.supportClose=n,exports.supportCloseScanQrPopup=i,exports.supportDataSend=d,exports.supportExpand=_,exports.supportIframeReady=c,exports.supportIframeWillReload=x,exports.supportInvokeCustomMethod=g,exports.supportOpenInvoice=b,exports.supportOpenLink=h,exports.supportOpenPopup=w,exports.supportOpenScanQrPopup=m,exports.supportOpenTgLink=v,exports.supportReadTextFromClipboard=S,exports.supportReady=f,exports.supportRequestPhone=M,exports.supportRequestTheme=P,exports.supportRequestViewport=q,exports.supportRequestWriteAccess=R,exports.supportSetBackgroundColor=k,exports.supportSetHeaderColor=C,exports.supportSetupBackButton=y,exports.supportSetupClosingBehavior=E,exports.supportSetupMainButton=O,exports.supportSetupSettingsButton=T,exports.supportSwitchInlineQuery=B,exports.supportTriggerHapticFeedback=I;
package/solid/index.mjs CHANGED
@@ -1 +1 @@
1
- import{createSignal as e,onMount as t,onCleanup as s}from"solid-js";const a=e=>{},o="web",p="phone",n="desktop",r=(e,t)=>{const s=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(s)>=e&&-1!==t.indexOf((()=>{const e=window.location.hash.slice(1),t=new URLSearchParams(e).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(t)?p:["tdesktop","macos"].includes(t)?n:o})())},u="web_app_close",_=()=>i()?(d(u),{status:!0}):{status:"not_supported"},i=()=>r(0,[o,n,p]);var d=(e,t)=>{window.TelegramWebviewProxy?window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t)):window.external&&"notify"in window.external&&window.external.notify(JSON.stringify({eventType:e,eventData:t}))};const c="web_app_close_scan_qr_popup",b=()=>l()?(d(c),{status:!0}):{status:"not_supported"},l=()=>r(6.4,[p]),g="web_app_data_send",w=e=>h()?(d(g,e),{status:!0}):{status:"not_supported"},h=()=>r(0,[o,n,p]),m="web_app_expand",f=()=>v()?(d(m),{status:!0}):{status:"not_supported"},v=()=>r(0,[p]),y="iframe_ready",S=e=>x()?(d(y,e),{status:!0}):{status:"not_supported"},x=()=>r(0,[o]),q="iframe_will_reload",k=()=>P()?(d(q),{status:!0}):{status:"not_supported"},P=()=>r(0,[o]),O="web_app_invoke_custom_method",R=e=>T()?(d(O,e),{status:!0}):{status:"not_supported"},T=()=>r(6.9,[o,n,p]),W="web_app_open_invoice",C=e=>B()?(d(W,e),{status:!0}):{status:"not_supported"},B=()=>r(6.1,[o,n,p]),E="web_app_open_link",I=e=>L()?(d(E,e),{status:!0}):{status:"not_supported"},L=()=>r(6.4,[o,n,p]),A="web_app_open_popup",D=e=>N()?(e.title.length,e.message.length,e.message.length,e.buttons.length,e.buttons.length,e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g))),d(A,e),{status:!0}):{status:"not_supported"},N=()=>r(6.2,[o,n,p]),U="web_app_open_scan_qr_popup",G=async e=>J()?(d(U,e),new Promise(((t,s)=>{Ue("qr_text_received",(s=>{e.is_close&&b(),t({status:!0,data:s})})),Ue("scan_qr_popup_closed",(()=>{t({status:"closed",data:{data:void 0}})}))}))):{status:"not_supported",data:{data:void 0}},J=()=>r(6.4,[p]),M="web_app_open_tg_link",Q=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),V()?(d(M,e),{status:!0}):{status:"not_supported"}),V=()=>r(7,[o,n,p]),j="web_app_read_text_from_clipboard",F=e=>H()?(d(j,e),{status:!0}):{status:"not_supported"},H=()=>r(6.4,[o,n,p]),$="web_app_ready",z=()=>K()?(d($),{status:!0}):{status:"not_supported"},K=()=>r(6.9,[o,n,p]),X="web_app_request_phone",Y=async()=>Z()?(d(X),new Promise(((e,t)=>{Ue("phone_requested",(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):{status:"not_supported"},Z=()=>r(6.9,[o,n,p]),ee="web_app_request_theme",te=()=>se()?(d(ee),{status:!0}):{status:"not_supported"},se=()=>r(0,[o,n,p]),ae="web_app_request_viewport",oe=()=>pe()?(d(ae),{status:!0}):{status:"not_supported"},pe=()=>r(0,[o,n,p]),ne="web_app_request_write_access",re=()=>ue()?(d(ne),{status:!0}):{status:"not_supported"},ue=()=>r(6.9,[o,n,p]),_e="web_app_set_background_color",ie=e=>de()?(d(_e,e),{status:!0}):{status:"not_supported"},de=()=>r(6.1,[o,n,p]),ce="web_app_set_header_color",be=e=>le()?(d(ce,e),{status:!0}):{status:"not_supported"},le=()=>r(6.1,[o,n,p]),ge="web_app_setup_back_button",we=e=>he()?(d(ge,e),{status:!0}):{status:"not_supported"},he=()=>r(6.1,[o,n,p]),me="web_app_setup_closing_behavior",fe=e=>ve()?(d(me,e),{status:!0}):{status:"not_supported"},ve=()=>r(0,[o,n,p]),ye="web_app_setup_main_button",Se=e=>xe()?(d(ye,e),{status:!0}):{status:"not_supported"},xe=()=>r(0,[o,n,p]),qe="web_app_setup_settings_button",ke=e=>Pe()?(d(qe,e),{status:!0}):{status:"not_supported"},Pe=()=>r(6.1,[o,n,p]),Oe="web_app_switch_inline_query",Re=e=>Te()?(e.query.length,d(Oe,e),{status:!0}):{status:"not_supported"},Te=()=>r(6.7,[o,n,p]),We="web_app_trigger_haptic_feedback",Ce=e=>Be()?(d(We,e),{status:!0}):{status:"not_supported"},Be=()=>r(6.1,[p]),Ee=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return null;const t=new URLSearchParams(e);let s={};return t.forEach(((e,t)=>{if(s[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{s[t]=JSON.parse(e)}catch{}})),s},Ie=()=>{const[a,o]=e({height:0,is_expanded:!1,is_state_stable:!1}),p=e=>o(e);return t((()=>{De("viewport_changed",p),d("web_app_request_viewport")})),s((()=>{Ne("viewport_changed",p)})),a},Le=((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)}}))(),Ae=()=>{function e(e,t){Le.emit(e,t),Le.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}};Ae();const De=(e,t)=>{Le.on(e,t)},Ne=(e,t)=>{Le.off(e,t)},Ue=(e,t)=>{Le.once(e,t)};var Ge=Object.freeze({__proto__:null,listenerStart:Ae,off:Ne,on:De,once:Ue});export{n as TG_DESKTOP,p as TG_PHONE,o as TG_WEB,_ as bridgeClose,b as bridgeCloseScanQrPopup,w as bridgeDataSend,f as bridgeExpand,Ee as bridgeGetInitData,S as bridgeIframeReady,k as bridgeIframeWillReload,R as bridgeInvokeCustomMethod,C as bridgeOpenInvoice,I as bridgeOpenLink,D as bridgeOpenPopup,G as bridgeOpenScanQrPopup,Q as bridgeOpenTgLink,F as bridgeReadTextFromClipboard,z as bridgeReady,Y as bridgeRequestPhone,te as bridgeRequestTheme,oe as bridgeRequestViewport,re as bridgeRequestWriteAccess,ie as bridgeSetBackgroundColor,be as bridgeSetHeaderColor,we as bridgeSetupBackButton,fe as bridgeSetupClosingBehavior,Se as bridgeSetupMainButton,ke as bridgeSetupSettingsButton,Re as bridgeSwitchInlineQuery,Ce as bridgeTriggerHapticFeedback,Ie as createIsViewportChanged,a as debug,Ge as listener,d as sender,i as supportClose,l as supportCloseScanQrPopup,h as supportDataSend,v as supportExpand,x as supportIframeReady,P as supportIframeWillReload,T as supportInvokeCustomMethod,B as supportOpenInvoice,L as supportOpenLink,N as supportOpenPopup,J as supportOpenScanQrPopup,V as supportOpenTgLink,H as supportReadTextFromClipboard,K as supportReady,Z as supportRequestPhone,se as supportRequestTheme,pe as supportRequestViewport,ue as supportRequestWriteAccess,de as supportSetBackgroundColor,le as supportSetHeaderColor,he as supportSetupBackButton,ve as supportSetupClosingBehavior,xe as supportSetupMainButton,Pe as supportSetupSettingsButton,Te as supportSwitchInlineQuery,Be as supportTriggerHapticFeedback};
1
+ import{createSignal as e,onMount as t,onCleanup as s}from"solid-js";const a=()=>{const[a,n]=e({height:0,is_expanded:!1,is_state_stable:!1}),o=e=>n(e);return t((()=>{be(st,o),de(Ie)})),s((()=>{le(st,o)})),a},n="web",o="phone",r="desktop",i="not_supported",_=(e,t)=>{const s=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(s)>=e&&-1!==t.indexOf((()=>{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:n})())},p=()=>Math.random().toString(36).substring(3,9),u=()=>d()?(de(qe),{status:!0}):(pe(qe,1),{status:i}),d=()=>_(0,[n,r,o]),c=()=>b()?(de(ye),{status:!0}):(pe(ye,1),{status:i}),b=()=>_(6.4,[o]),l=e=>g()?(de(xe,e),{status:!0}):(pe(xe,1),{status:i}),g=()=>_(0,[n,r,o]),w=()=>m()?(de(Se),{status:!0}):(pe(Se,1),{status:i}),m=()=>_(0,[o]),h=e=>f()?(de(ke,e),{status:!0}):(pe(ke,1),{status:i}),f=()=>_(0,[n]),v=()=>q()?(de(ke),{status:!0}):(pe(ke,1),{status:i}),q=()=>_(0,[n]),y="web_app_invoke_custom_method",x=async e=>S()?(void 0===e.req_id&&(e.req_id=p()),de(y,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),le(Qe,a))};be(Qe,a)}))):(pe(y,1),{status:i}),S=()=>_(6.9,[n,r,o]),k=e=>P()?(de(Oe,e),{status:!0}):(pe(Oe,1),{status:i}),P=()=>_(6.1,[n,r,o]),O=e=>R()?(de(Re,e),{status:!0}):(pe(Re,1),{status:i}),R=()=>_(6.4,[n,r,o]),T=async e=>E()?(e.title.length>64&&pe(Te,3),e.message.length<1&&pe(Te,4),e.message.length>256&&pe(Te,5),e.buttons.length<1&&pe(Te,6),e.buttons.length>3&&pe(Te,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&pe(Te,8),de(Te,e),new Promise(((t,s)=>{const a=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),le(ze,a)};be(ze,a)}))):(pe(Te,1),{status:i}),E=()=>_(6.2,[n,r,o]),W=async e=>C()?(de(he,e),new Promise(((t,s)=>{ge(Xe,(s=>{e.is_close&&c(),t({status:!0,data:s})})),ge(Ye,(()=>{t({status:"closed"})}))}))):(pe(he,1),{status:i}),C=()=>_(6.4,[o]),I=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),B()?(de(Ee,e),{status:!0}):(pe(Ee,1),{status:i})),B=()=>_(7,[n,r,o]),D=async e=>L()?(void 0===e.req_id&&(e.req_id=p()),de(fe,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),le(Je,a))};be(Je,a)}))):(pe(fe,1),{status:i}),L=()=>_(6.4,[n,r,o]),N=()=>A()?(de(We),{status:!0}):(pe(We,1),{status:i}),A=()=>_(6.9,[n,r,o]),M=async()=>U()?(de(ve),new Promise(((e,t)=>{ge(He,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(pe(ve,1),{status:i}),U=()=>_(6.9,[n,r,o]),V=()=>$()?(de(Ce),{status:!0}):(pe(Ce,1),{status:i}),$=()=>_(0,[n,r,o]),G=()=>J()?(de(Ie),{status:!0}):(pe(Ie,1),{status:i}),J=()=>_(0,[n,r,o]),Q=()=>j()?(de(Be),{status:!0}):(pe(Be,1),{status:i}),j=()=>_(6.9,[n,r,o]),F=e=>H()?(de(De,e),{status:!0}):(pe(De,1),{status:i}),H=()=>_(6.1,[n,r,o]),z=e=>K()?(de(Le,e),{status:!0}):(pe(Le,1),{status:i}),K=()=>_(6.1,[n,r,o]),X=e=>Y()?(de(Ne,e),{status:!0}):(pe(Ne,1),{status:i}),Y=()=>_(6.1,[n,r,o]),Z=e=>ee()?(de(Ae,e),{status:!0}):(pe(Ae,1),{status:i}),ee=()=>_(0,[n,r,o]),te=e=>se()?(de(Me,e),{status:!0}):(pe(Me,1),{status:i}),se=()=>_(0,[n,r,o]),ae=e=>ne()?(de(Ue,e),{status:!0}):(pe(Ue,1),{status:i}),ne=()=>_(6.1,[n,r,o]),oe=e=>re()?(e.query.length>256&&pe(Ve,9),de(Ve,e),{status:!0}):(pe(Ve,1),{status:i}),re=()=>_(6.7,[n,r,o]),ie=e=>_e()?(de($e,e),{status:!0}):(pe($e,1),{status:i}),_e=()=>_(6.1,[o]);var pe=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)};const ue=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return pe("getInitData",2),null;const t=new URLSearchParams(e);let s={};return t.forEach(((e,t)=>{if(s[t]=e,void 0!==t.match(/^(chat|receiver|user)$/g))try{s[t]=JSON.parse(e)}catch{}})),s};var de=(e,t)=>{window.TelegramWebviewProxy?window.TelegramWebviewProxy.postEvent(e,JSON.stringify(t)):window.external&&"notify"in window.external&&window.external.notify(JSON.stringify({eventType:e,eventData:t}))};const ce=((e=new Map)=>({once:(t,s,a=e.get(t),n=(e=>{s(e),a&&a.splice(a.indexOf(s)>>>0,1)}))=>a?a.push(n):e.set(t,[n]),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){ce.emit(e,t),ce.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const be=(e,t)=>{ce.on(e,t)},le=(e,t)=>{ce.off(e,t)},ge=(e,t)=>{ce.once(e,t)};var we=Object.freeze({__proto__:null,off:le,on:be,once:ge});const me="web_app_invoke_custom_method",he="web_app_open_scan_qr_popup",fe="web_app_read_text_from_clipboard",ve="web_app_request_phone",qe="web_app_close",ye="web_app_close_scan_qr_popup",xe="web_app_data_send",Se="web_app_expand",ke="iframe_ready",Pe="iframe_will_reload",Oe="web_app_open_invoice",Re="web_app_open_link",Te="web_app_open_popup",Ee="web_app_open_tg_link",We="web_app_ready",Ce="web_app_request_theme",Ie="web_app_request_viewport",Be="web_app_request_write_access",De="web_app_set_background_color",Le="web_app_set_header_color",Ne="web_app_setup_back_button",Ae="web_app_setup_closing_behavior",Me="web_app_setup_main_button",Ue="web_app_setup_settings_button",Ve="web_app_switch_inline_query",$e="web_app_trigger_haptic_feedback",Ge="back_button_pressed",Je="clipboard_text_received",Qe="custom_method_invoked",je="invoice_closed",Fe="main_button_pressed",He="phone_requested",ze="popup_closed",Ke="reload_iframe",Xe="qr_text_received",Ye="scan_qr_popup_closed",Ze="set_custom_style",et="settings_button_pressed",tt="theme_changed",st="viewport_changed",at="write_access_requested";export{Ge as EventBackButtonPressed,Je as EventClipboardTextReceived,Qe as EventCustomMethodInvoked,je as EventInvoiceClosed,Fe as EventMainButtonPressed,He as EventPhoneRequested,ze as EventPopupClosed,Xe as EventQrTextReceived,Ke as EventReloadIframe,Ye as EventScanQrPopupClosed,Ze as EventSetCustomStyle,et as EventSettingsButtonPressed,tt as EventThemeChanged,st as EventViewportChanged,at as EventWriteAccessRequested,qe as MethodClose,ye as MethodCloseScanQrPopup,xe as MethodDataSend,Se as MethodExpand,ke as MethodIframeReady,Pe as MethodIframeWillReload,me as MethodInvokeCustomMethod,Oe as MethodOpenInvoice,Re as MethodOpenLink,Te as MethodOpenPopup,he as MethodOpenScanQrPopup,Ee as MethodOpenTgLink,fe as MethodReadTextFromClipboard,We as MethodReady,ve as MethodRequestPhone,Ce as MethodRequestTheme,Ie as MethodRequestViewport,Be as MethodRequestWriteAccess,De as MethodSetBackgroundColor,Le as MethodSetHeaderColor,Ne as MethodSetupBackButton,Ae as MethodSetupClosingBehavior,Me as MethodSetupMainButton,Ue as MethodSetupSettingsButton,Ve as MethodSwitchInlineQuery,$e as MethodTriggerHapticFeedback,i as NOT_SUPPORTED,r as TG_DESKTOP,o as TG_PHONE,n as TG_WEB,u as bridgeClose,c as bridgeCloseScanQrPopup,l as bridgeDataSend,w as bridgeExpand,ue as bridgeGetInitData,h as bridgeIframeReady,v as bridgeIframeWillReload,x as bridgeInvokeCustomMethod,k as bridgeOpenInvoice,O as bridgeOpenLink,T as bridgeOpenPopup,W as bridgeOpenScanQrPopup,I as bridgeOpenTgLink,D as bridgeReadTextFromClipboard,N as bridgeReady,M as bridgeRequestPhone,V as bridgeRequestTheme,G as bridgeRequestViewport,Q as bridgeRequestWriteAccess,F as bridgeSetBackgroundColor,z as bridgeSetHeaderColor,X as bridgeSetupBackButton,Z as bridgeSetupClosingBehavior,te as bridgeSetupMainButton,ae as bridgeSetupSettingsButton,oe as bridgeSwitchInlineQuery,ie as bridgeTriggerHapticFeedback,a as createIsViewportChanged,pe as debug,we as listener,de as sender,d as supportClose,b as supportCloseScanQrPopup,g as supportDataSend,m as supportExpand,f as supportIframeReady,q as supportIframeWillReload,S as supportInvokeCustomMethod,P as supportOpenInvoice,R as supportOpenLink,E as supportOpenPopup,C as supportOpenScanQrPopup,B as supportOpenTgLink,L as supportReadTextFromClipboard,A as supportReady,U as supportRequestPhone,$ as supportRequestTheme,J as supportRequestViewport,j as supportRequestWriteAccess,H as supportSetBackgroundColor,K as supportSetHeaderColor,Y as supportSetupBackButton,ee as supportSetupClosingBehavior,se as supportSetupMainButton,ne as supportSetupSettingsButton,re as supportSwitchInlineQuery,_e as supportTriggerHapticFeedback};