@apiteam/twa-bridge 7.0.0-beta.9 → 7.1.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 CHANGED
@@ -36,9 +36,43 @@ And yes, it supports TS.
36
36
 
37
37
  ### Solid
38
38
  ```js
39
- import { createIsViewportChanged } from '@apiteam/twa-bridge/solid'
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
+ }
50
+
51
+ listener.on(EventViewportChanged, onRequestViewport)
52
+ bridgeRequestViewport()
53
+
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
+ }
40
75
 
41
- const viewport = createIsViewportChanged()
42
76
  ```
43
77
 
44
78
  ### Errors
@@ -53,4 +87,4 @@ const viewport = createIsViewportChanged()
53
87
  | 6 | You are passing too few buttons, at least 1 button |
54
88
  | 7 | You are passing too many buttons, maximum 3 buttons |
55
89
  | 8 | The button text ignores the following values: "ok, close, cancel" |
56
- | 9 | EDIT_MESSAGE
90
+ | 9 | EDIT_MESSAGE |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apiteam/twa-bridge",
3
- "version": "7.0.0-beta.9",
3
+ "version": "7.1.1",
4
4
  "description": "Telegram bridge",
5
5
  "license": "MIT",
6
6
  "types": "index.ts",
package/react/index.d.ts CHANGED
@@ -606,6 +606,20 @@ declare const sessionStorageGet: SessionStorageGet;
606
606
  */
607
607
  declare const supportSessionStorageGet: () => boolean;
608
608
 
609
+ type SetupSwipeBehavior = ({ allow_vertical_swipe, }: {
610
+ allow_vertical_swipe: boolean;
611
+ }) => {
612
+ status: boolean | typeof NOT_SUPPORTED;
613
+ };
614
+ /**
615
+ * sessions storage set.
616
+ */
617
+ declare const setupSwipeBehavior: SetupSwipeBehavior;
618
+ /**
619
+ * Method support check
620
+ */
621
+ declare const supportSetupSwipeBehavior: () => boolean;
622
+
609
623
  type User = {
610
624
  /**
611
625
  * Optional. True, if this user added the bot to the attachment menu.
@@ -753,15 +767,68 @@ declare const sender: Sender;
753
767
  type Debug = (methondName: string, errorId: number) => void;
754
768
  declare const debug: Debug;
755
769
 
770
+ type GetPlatform = () => 'phone' | 'web' | 'desktop';
771
+ declare const TG_WEB = "web";
772
+ declare const TG_PHONE = "phone";
773
+ declare const TG_DESKTOP = "desktop";
774
+ declare const getPlatform: GetPlatform;
775
+
776
+ declare const NOT_SUPPORTED = "not_supported";
777
+
778
+ type ThemeParams = {
779
+ bg_color: string;
780
+ text_color: string;
781
+ hint_color: string;
782
+ link_color: string;
783
+ button_color: string;
784
+ button_text_color: string;
785
+ /**
786
+ * Bot API 6.1+
787
+ */
788
+ secondary_bg_color: string;
789
+ /**
790
+ * Bot API 7.0+
791
+ */
792
+ header_bg_color: string;
793
+ /**
794
+ * Bot API 7.10+
795
+ */
796
+ bottom_bar_bg_color: string;
797
+ /**
798
+ * Bot API 7.0+
799
+ */
800
+ accent_text_color: string;
801
+ /**
802
+ * Bot API 7.0+
803
+ */
804
+ section_bg_color: string;
805
+ /**
806
+ * Bot API 7.0+
807
+ */
808
+ section_header_text_color: string;
809
+ /**
810
+ * Bot API 7.6+
811
+ */
812
+ section_separator_color: string;
813
+ /**
814
+ * Bot API 7.0+
815
+ */
816
+ subtitle_text_color: string;
817
+ /**
818
+ * Bot API 7.0+
819
+ */
820
+ destructive_text_color: string;
821
+ };
822
+
756
823
  type EventsData = {
757
824
  /**
758
- * User clicked the Back Button.
759
- */
760
- "back_button_pressed": undefined;
825
+ * User clicked the Back Button.
826
+ */
827
+ back_button_pressed: undefined;
761
828
  /**
762
829
  * Telegram application attempted to extract text from clipboard.
763
830
  */
764
- "clipboard_text_received": {
831
+ clipboard_text_received: {
765
832
  /**
766
833
  * Passed during the web_app_read_text_from_clipboard method invocation req_id value.
767
834
  */
@@ -772,9 +839,9 @@ type EventsData = {
772
839
  data?: string | null;
773
840
  };
774
841
  /**
775
- * Custom method invocation completed.
776
- */
777
- "custom_method_invoked": {
842
+ * Custom method invocation completed.
843
+ */
844
+ custom_method_invoked: {
778
845
  /**
779
846
  * Unique identifier of this invocation.
780
847
  */
@@ -789,9 +856,9 @@ type EventsData = {
789
856
  error?: string;
790
857
  };
791
858
  /**
792
- * An invoice was closed.
793
- */
794
- "invoice_closed": {
859
+ * An invoice was closed.
860
+ */
861
+ invoice_closed: {
795
862
  /**
796
863
  * Passed during the web_app_open_invoice method invocation slug value.
797
864
  */
@@ -810,22 +877,22 @@ type EventsData = {
810
877
  status: 'paid' | 'failed' | 'pending' | 'cancelled';
811
878
  };
812
879
  /**
813
- * User clicked the Main Button.
814
- */
815
- "main_button_pressed": undefined;
880
+ * User clicked the Main Button.
881
+ */
882
+ main_button_pressed: undefined;
816
883
  /**
817
- * Application received phone access request status.
818
- */
819
- "phone_requested": {
884
+ * Application received phone access request status.
885
+ */
886
+ phone_requested: {
820
887
  /**
821
888
  * Request status. Can only be sent
822
889
  */
823
890
  status: 'sent';
824
891
  };
825
892
  /**
826
- * Popup was closed.
827
- */
828
- "popup_closed": {
893
+ * Popup was closed.
894
+ */
895
+ popup_closed: {
829
896
  /**
830
897
  * Optional. Identifier of the clicked button.
831
898
  *
@@ -834,47 +901,47 @@ type EventsData = {
834
901
  button_id?: string;
835
902
  };
836
903
  /**
837
- * Parent iframe requested current iframe reload.
838
- */
839
- "reload_iframe": undefined;
904
+ * Parent iframe requested current iframe reload.
905
+ */
906
+ reload_iframe: undefined;
840
907
  /**
841
908
  * The QR scanner scanned some QR and extracted its content.
842
909
  */
843
- "qr_text_received": {
910
+ qr_text_received: {
844
911
  /**
845
912
  * Optional. Data extracted from the QR.
846
913
  */
847
914
  data?: string;
848
915
  };
849
916
  /**
850
- * QR scanner was closed.
851
- */
852
- "scan_qr_popup_closed": undefined;
917
+ * QR scanner was closed.
918
+ */
919
+ scan_qr_popup_closed: undefined;
853
920
  /**
854
- * The event which is usually sent by the Telegram web application.
855
- *
856
- * Its payload represents <style/> tag html content, a developer could use. The stylesheet described in the payload will help the developer to stylize the app scrollbar (but he is still able to do it himself).
857
- */
858
- "set_custom_style": undefined;
921
+ * The event which is usually sent by the Telegram web application.
922
+ *
923
+ * Its payload represents <style/> tag html content, a developer could use. The stylesheet described in the payload will help the developer to stylize the app scrollbar (but he is still able to do it himself).
924
+ */
925
+ set_custom_style: undefined;
859
926
  /**
860
- * Occurs when the Settings Button was pressed.
861
- */
862
- "settings_button_pressed": undefined;
927
+ * Occurs when the Settings Button was pressed.
928
+ */
929
+ settings_button_pressed: undefined;
863
930
  /**
864
- * Occurs whenever the theme was changed in the user's Telegram app ( including switching to night mode).
865
- */
866
- "theme_changed": {
931
+ * Occurs whenever the theme was changed in the user's Telegram app ( including switching to night mode).
932
+ */
933
+ theme_changed: {
867
934
  /**
868
935
  * Map where the key is a theme stylesheet key and value is the corresponding color in #RRGGBB format.
869
936
  */
870
- theme_params: Record<string, string>;
937
+ theme_params: ThemeParams;
871
938
  };
872
939
  /**
873
940
  * Occurs whenever the viewport has been changed.
874
941
  *
875
942
  * For example, when the user started dragging the application or called the expansion method.
876
943
  */
877
- "viewport_changed": {
944
+ viewport_changed: {
878
945
  /**
879
946
  * The viewport height.
880
947
  */
@@ -893,9 +960,9 @@ type EventsData = {
893
960
  is_state_stable: boolean;
894
961
  };
895
962
  /**
896
- * Application received write access request status.
897
- */
898
- "write_access_requested": {
963
+ * Application received write access request status.
964
+ */
965
+ write_access_requested: {
899
966
  /**
900
967
  * Request status. Can only be allowed.
901
968
  */
@@ -915,7 +982,7 @@ declare global {
915
982
  interface Window {
916
983
  TelegramWebviewProxy: TelegramWebviewProxy;
917
984
  TelegramGameProxy: TelegramGameProxy;
918
- TelegramGameProxy_receiveEvent: TelegramGameProxy["receiveEvent"];
985
+ TelegramGameProxy_receiveEvent: TelegramGameProxy['receiveEvent'];
919
986
  Telegram: {
920
987
  WebView: TelegramGameProxy;
921
988
  };
@@ -934,12 +1001,6 @@ declare namespace listener {
934
1001
  export { type listener_EventsData as EventsData, listener_off as off, listener_on as on, listener_once as once };
935
1002
  }
936
1003
 
937
- declare const TG_WEB = "web";
938
- declare const TG_PHONE = "phone";
939
- declare const TG_DESKTOP = "desktop";
940
-
941
- declare const NOT_SUPPORTED = "not_supported";
942
-
943
1004
  declare const MethodInvokeCustomMethod = "web_app_invoke_custom_method";
944
1005
  declare const MethodOpenScanQrPopup = "web_app_open_scan_qr_popup";
945
1006
  declare const MethodReadTextFromClipboard = "web_app_read_text_from_clipboard";
@@ -966,6 +1027,7 @@ declare const MethodSetupMainButton = "web_app_setup_main_button";
966
1027
  declare const MethodSetupSettingsButton = "web_app_setup_settings_button";
967
1028
  declare const MethodSwitchInlineQuery = "web_app_switch_inline_query";
968
1029
  declare const MethodTriggerHapticFeedback = "web_app_trigger_haptic_feedback";
1030
+ declare const MethodSetupSwipeBehavior = "web_app_setup_swipe_behavior";
969
1031
 
970
1032
  declare const EventBackButtonPressed = "back_button_pressed";
971
1033
  declare const EventClipboardTextReceived = "clipboard_text_received";
@@ -983,4 +1045,4 @@ declare const EventThemeChanged = "theme_changed";
983
1045
  declare const EventViewportChanged = "viewport_changed";
984
1046
  declare const EventWriteAccessRequested = "write_access_requested";
985
1047
 
986
- 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, sessionStorageGet as bridgeSessionStorageGet, sessionStorageSet as bridgeSessionStorageSet, setBackgroundColor as bridgeSetBackgroundColor, setHeaderColor as bridgeSetHeaderColor, setupBackButton as bridgeSetupBackButton, setupClosingBehavior as bridgeSetupClosingBehavior, setupMainButton as bridgeSetupMainButton, setupSettingsButton as bridgeSetupSettingsButton, switchInlineQuery as bridgeSwitchInlineQuery, triggerHapticFeedback as bridgeTriggerHapticFeedback, debug, listener, sender, supportClose, supportCloseScanQrPopup, supportDataSend, supportExpand, supportIframeReady, supportIframeWillReload, supportInvokeCustomMethod, supportOpenInvoice, supportOpenLink, supportOpenPopup, supportOpenScanQrPopup, supportOpenTgLink, supportReadTextFromClipboard, supportReady, supportRequestPhone, supportRequestTheme, supportRequestViewport, supportRequestWriteAccess, supportSessionStorageGet, supportSessionStorageSet, supportSetBackgroundColor, supportSetHeaderColor, supportSetupBackButton, supportSetupClosingBehavior, supportSetupMainButton, supportSetupSettingsButton, supportSwitchInlineQuery, supportTriggerHapticFeedback };
1048
+ 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, MethodSetupSwipeBehavior, 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, sessionStorageGet as bridgeSessionStorageGet, sessionStorageSet as bridgeSessionStorageSet, setBackgroundColor as bridgeSetBackgroundColor, setHeaderColor as bridgeSetHeaderColor, setupBackButton as bridgeSetupBackButton, setupClosingBehavior as bridgeSetupClosingBehavior, setupMainButton as bridgeSetupMainButton, setupSettingsButton as bridgeSetupSettingsButton, setupSwipeBehavior as bridgeSetupSwipeBehavior, switchInlineQuery as bridgeSwitchInlineQuery, triggerHapticFeedback as bridgeTriggerHapticFeedback, debug, getPlatform, listener, sender, supportClose, supportCloseScanQrPopup, supportDataSend, supportExpand, supportIframeReady, supportIframeWillReload, supportInvokeCustomMethod, supportOpenInvoice, supportOpenLink, supportOpenPopup, supportOpenScanQrPopup, supportOpenTgLink, supportReadTextFromClipboard, supportReady, supportRequestPhone, supportRequestTheme, supportRequestViewport, supportRequestWriteAccess, supportSessionStorageGet, supportSessionStorageSet, supportSetBackgroundColor, supportSetHeaderColor, supportSetupBackButton, supportSetupClosingBehavior, supportSetupMainButton, supportSetupSettingsButton, supportSetupSwipeBehavior, supportSwitchInlineQuery, supportTriggerHapticFeedback };
package/react/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";const e="web",t="phone",s="desktop",o="not_supported",r=(o,r)=>{const p=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(p)>=o&&-1!==r.indexOf((()=>{const o=window.location.hash.slice(1),r=new URLSearchParams(o).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(r)?t:["tdesktop","macos"].includes(r)?s:e})())},p=()=>Math.random().toString(36).substring(3,9),a=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},n=()=>r(0,[e,s,t]),i=()=>u()?(L(Z),{status:!0}):(W(Z,1),{status:o}),u=()=>r(6.4,[t]),d=()=>r(0,[e,s,t]),_=()=>r(0,[t]),c=()=>r(0,[e]),x=()=>r(0,[e]),g="web_app_invoke_custom_method",l=()=>r(6.9,[e,s,t]),b=()=>r(6.1,[e,s,t]),h=()=>r(6.4,[e,s,t]),w=()=>r(6.2,[e,s,t]),m=()=>r(6.4,[t]),v=()=>r(7,[e,s,t]),S=()=>r(6.4,[e,s,t]),f=()=>r(6.9,[e,s,t]),y=()=>r(6.9,[e,s,t]),P=()=>r(0,[e,s,t]),M=()=>r(0,[e,s,t]),R=()=>r(6.9,[e,s,t]),k=()=>r(6.1,[e,s,t]),q=()=>r(6.1,[e,s,t]),C=()=>r(6.1,[e,s,t]),E=()=>r(0,[e,s,t]),O=()=>r(0,[e,s,t]),T=()=>r(6.1,[e,s,t]),I=()=>r(6.7,[e,s,t]),B=()=>r(6.1,[t]);var W=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)};var L=(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 Q="clipboard_text_received",D="custom_method_invoked",N="phone_requested",A="popup_closed",G="qr_text_received",H="scan_qr_popup_closed",V="theme_changed",$=((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===V&&(t.theme_params=(e=>{"#1c1c1d"==e.bg_color&&e.bg_color==e.secondary_bg_color&&(e.secondary_bg_color="#2c2c2e");const t=window.location.hash.slice(1),s=new URLSearchParams(t);var o=JSON.parse(s.get("tgWebAppThemeParams")??"");for(var r in e){var p=a(e[r]);"string"==typeof p&&(o[r]=p)}return o})(t.theme_params)),$.emit(e,t),$.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const F=(e,t)=>{$.on(e,t)},U=(e,t)=>{$.off(e,t)},J=(e,t)=>{$.once(e,t)};var j=Object.freeze({__proto__:null,off:U,on:F,once:J});const z="web_app_open_scan_qr_popup",K="web_app_read_text_from_clipboard",X="web_app_request_phone",Y="web_app_close",Z="web_app_close_scan_qr_popup",ee="web_app_data_send",te="web_app_expand",se="iframe_ready",oe="web_app_open_invoice",re="web_app_open_link",pe="web_app_open_popup",ae="web_app_open_tg_link",ne="web_app_ready",ie="web_app_request_theme",ue="web_app_request_viewport",de="web_app_request_write_access",_e="web_app_set_background_color",ce="web_app_set_header_color",xe="web_app_setup_back_button",ge="web_app_setup_closing_behavior",le="web_app_setup_main_button",be="web_app_setup_settings_button",he="web_app_switch_inline_query",we="web_app_trigger_haptic_feedback";exports.EventBackButtonPressed="back_button_pressed",exports.EventClipboardTextReceived=Q,exports.EventCustomMethodInvoked=D,exports.EventInvoiceClosed="invoice_closed",exports.EventMainButtonPressed="main_button_pressed",exports.EventPhoneRequested=N,exports.EventPopupClosed=A,exports.EventQrTextReceived=G,exports.EventReloadIframe="reload_iframe",exports.EventScanQrPopupClosed=H,exports.EventSetCustomStyle="set_custom_style",exports.EventSettingsButtonPressed="settings_button_pressed",exports.EventThemeChanged=V,exports.EventViewportChanged="viewport_changed",exports.EventWriteAccessRequested="write_access_requested",exports.MethodClose=Y,exports.MethodCloseScanQrPopup=Z,exports.MethodDataSend=ee,exports.MethodExpand=te,exports.MethodIframeReady=se,exports.MethodIframeWillReload="iframe_will_reload",exports.MethodInvokeCustomMethod="web_app_invoke_custom_method",exports.MethodOpenInvoice=oe,exports.MethodOpenLink=re,exports.MethodOpenPopup=pe,exports.MethodOpenScanQrPopup=z,exports.MethodOpenTgLink=ae,exports.MethodReadTextFromClipboard=K,exports.MethodReady=ne,exports.MethodRequestPhone=X,exports.MethodRequestTheme=ie,exports.MethodRequestViewport=ue,exports.MethodRequestWriteAccess=de,exports.MethodSetBackgroundColor=_e,exports.MethodSetHeaderColor=ce,exports.MethodSetupBackButton=xe,exports.MethodSetupClosingBehavior=ge,exports.MethodSetupMainButton=le,exports.MethodSetupSettingsButton=be,exports.MethodSwitchInlineQuery=he,exports.MethodTriggerHapticFeedback=we,exports.NOT_SUPPORTED=o,exports.TG_DESKTOP=s,exports.TG_PHONE=t,exports.TG_WEB=e,exports.bridgeClose=()=>n()?(L(Y),{status:!0}):(W(Y,1),{status:o}),exports.bridgeCloseScanQrPopup=i,exports.bridgeDataSend=e=>d()?(L(ee,e),{status:!0}):(W(ee,1),{status:o}),exports.bridgeExpand=()=>_()?(L(te),{status:!0}):(W(te,1),{status:o}),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()?(L(se,e),{status:!0}):(W(se,1),{status:o}),exports.bridgeIframeWillReload=()=>x()?(L(se),{status:!0}):(W(se,1),{status:o}),exports.bridgeInvokeCustomMethod=async e=>l()?(void 0===e.req_id&&(e.req_id=p()),L(g,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),U(D,o))};F(D,o)}))):(W(g,1),{status:o}),exports.bridgeOpenInvoice=e=>b()?(L(oe,e),{status:!0}):(W(oe,1),{status:o}),exports.bridgeOpenLink=e=>h()?(L(re,e),{status:!0}):(W(re,1),{status:o}),exports.bridgeOpenPopup=async e=>w()?(e.title.length>64&&W(pe,3),e.message.length<1&&W(pe,4),e.message.length>256&&W(pe,5),e.buttons.length<1&&W(pe,6),e.buttons.length>3&&W(pe,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&W(pe,8),L(pe,e),new Promise(((t,s)=>{const o=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),U(A,o)};F(A,o)}))):(W(pe,1),{status:o}),exports.bridgeOpenScanQrPopup=async e=>m()?(L(z,e),new Promise(((t,s)=>{J(G,(s=>{e.is_close&&i(),t({status:!0,data:s})})),J(H,(()=>{t({status:"closed"})}))}))):(W(z,1),{status:o}),exports.bridgeOpenTgLink=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),v()?(L(ae,e),{status:!0}):(W(ae,1),{status:o})),exports.bridgeReadTextFromClipboard=async e=>S()?(void 0===e.req_id&&(e.req_id=p()),L(K,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),U(Q,o))};F(Q,o)}))):(W(K,1),{status:o}),exports.bridgeReady=()=>f()?(L(ne),{status:!0}):(W(ne,1),{status:o}),exports.bridgeRequestPhone=async()=>y()?(L(X),new Promise(((e,t)=>{J(N,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(W(X,1),{status:o}),exports.bridgeRequestTheme=()=>P()?(L(ie),{status:!0}):(W(ie,1),{status:o}),exports.bridgeRequestViewport=()=>M()?(L(ue),{status:!0}):(W(ue,1),{status:o}),exports.bridgeRequestWriteAccess=()=>R()?(L(de),{status:!0}):(W(de,1),{status:o}),exports.bridgeSessionStorageGet=({key:e})=>{try{return{value:window.sessionStorage.getItem("__telegram__"+e),status:!0}}catch(e){}return{status:!1}},exports.bridgeSessionStorageSet=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(e){}return{status:!1}},exports.bridgeSetBackgroundColor=e=>k()?(L(_e,e),{status:!0}):(W(_e,1),{status:o}),exports.bridgeSetHeaderColor=e=>q()?(L(ce,e),{status:!0}):(W(ce,1),{status:o}),exports.bridgeSetupBackButton=e=>C()?(L(xe,e),{status:!0}):(W(xe,1),{status:o}),exports.bridgeSetupClosingBehavior=e=>E()?(L(ge,e),{status:!0}):(W(ge,1),{status:o}),exports.bridgeSetupMainButton=e=>O()?(L(le,e),{status:!0}):(W(le,1),{status:o}),exports.bridgeSetupSettingsButton=e=>T()?(L(be,e),{status:!0}):(W(be,1),{status:o}),exports.bridgeSwitchInlineQuery=e=>I()?(e.query.length>256&&W(he,9),L(he,e),{status:!0}):(W(he,1),{status:o}),exports.bridgeTriggerHapticFeedback=e=>B()?(L(we,e),{status:!0}):(W(we,1),{status:o}),exports.debug=W,exports.listener=j,exports.sender=L,exports.supportClose=n,exports.supportCloseScanQrPopup=u,exports.supportDataSend=d,exports.supportExpand=_,exports.supportIframeReady=c,exports.supportIframeWillReload=x,exports.supportInvokeCustomMethod=l,exports.supportOpenInvoice=b,exports.supportOpenLink=h,exports.supportOpenPopup=w,exports.supportOpenScanQrPopup=m,exports.supportOpenTgLink=v,exports.supportReadTextFromClipboard=S,exports.supportReady=f,exports.supportRequestPhone=y,exports.supportRequestTheme=P,exports.supportRequestViewport=M,exports.supportRequestWriteAccess=R,exports.supportSessionStorageGet=()=>!0,exports.supportSessionStorageSet=()=>!0,exports.supportSetBackgroundColor=k,exports.supportSetHeaderColor=q,exports.supportSetupBackButton=C,exports.supportSetupClosingBehavior=E,exports.supportSetupMainButton=O,exports.supportSetupSettingsButton=T,exports.supportSwitchInlineQuery=I,exports.supportTriggerHapticFeedback=B;
1
+ "use strict";const e="web",t="phone",s="desktop",o=()=>{const o=window.location.hash.slice(1),r=new URLSearchParams(o).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(r)?t:["tdesktop","macos"].includes(r)?s:e},r="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(o())},a=()=>Math.random().toString(36).substring(3,9),n=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},i=()=>p(0,[e,s,t]),u=()=>d()?(D(se),{status:!0}):(N(se,1),{status:r}),d=()=>p(64,[t]),_=()=>p(0,[e,s,t]),c=()=>p(0,[t]),x=()=>p(0,[e]),g=()=>p(0,[e]),l="web_app_invoke_custom_method",b=()=>p(6.9,[e,s,t]),h=()=>p(6.1,[e,s,t]),w=()=>p(6.4,[e,s,t]),m=()=>p(6.2,[e,s,t]),S=()=>p(6.4,[t]),v=()=>p(7,[e,s,t]),f=()=>p(6.4,[e,s,t]),y=()=>p(6.9,[e,s,t]),M=()=>p(6.9,[e,s,t]),P=()=>p(0,[e,s,t]),k=()=>p(0,[e,s,t]),R=()=>p(6.9,[e,s,t]),q=()=>p(6.1,[e,s,t]),O=()=>p(6.1,[e,s,t]),C=()=>p(6.1,[e,s,t]),E=()=>p(0,[e,s,t]),T=()=>p(0,[e,s,t]),B=()=>p(6.1,[e,s,t]),I=()=>p(6.7,[e,s,t]),W=()=>p(6.1,[t]),L=()=>p(7.7,[e,s,t]);var N=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)};var D=(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){N("postMessage Iframe",10)}};const Q="clipboard_text_received",A="custom_method_invoked",G="phone_requested",H="popup_closed",J="qr_text_received",V="scan_qr_popup_closed",$="theme_changed",F=((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===$&&(t.theme_params=(e=>{"#1c1c1d"==e.bg_color&&e.bg_color==e.secondary_bg_color&&(e.secondary_bg_color="#2c2c2e");const t=window.location.hash.slice(1),s=new URLSearchParams(t);var o=JSON.parse(s.get("tgWebAppThemeParams")??"");for(var r of Object.keys(e)){var p=n(e[r]);"string"==typeof p&&(o[r]=p)}return o})(t.theme_params)),F.emit(e,t),F.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const U=(e,t)=>{F.on(e,t)},j=(e,t)=>{F.off(e,t)},z=(e,t)=>{F.once(e,t)};var K=Object.freeze({__proto__:null,off:j,on:U,once:z});const X="web_app_invoke_custom_method",Y="web_app_open_scan_qr_popup",Z="web_app_read_text_from_clipboard",ee="web_app_request_phone",te="web_app_close",se="web_app_close_scan_qr_popup",oe="web_app_data_send",re="web_app_expand",pe="iframe_ready",ae="iframe_will_reload",ne="web_app_open_invoice",ie="web_app_open_link",ue="web_app_open_popup",de="web_app_open_tg_link",_e="web_app_ready",ce="web_app_request_theme",xe="web_app_request_viewport",ge="web_app_request_write_access",le="web_app_set_background_color",be="web_app_set_header_color",he="web_app_setup_back_button",we="web_app_setup_closing_behavior",me="web_app_setup_main_button",Se="web_app_setup_settings_button",ve="web_app_switch_inline_query",fe="web_app_trigger_haptic_feedback",ye="web_app_setup_swipe_behavior";exports.EventBackButtonPressed="back_button_pressed",exports.EventClipboardTextReceived=Q,exports.EventCustomMethodInvoked=A,exports.EventInvoiceClosed="invoice_closed",exports.EventMainButtonPressed="main_button_pressed",exports.EventPhoneRequested=G,exports.EventPopupClosed=H,exports.EventQrTextReceived=J,exports.EventReloadIframe="reload_iframe",exports.EventScanQrPopupClosed=V,exports.EventSetCustomStyle="set_custom_style",exports.EventSettingsButtonPressed="settings_button_pressed",exports.EventThemeChanged=$,exports.EventViewportChanged="viewport_changed",exports.EventWriteAccessRequested="write_access_requested",exports.MethodClose=te,exports.MethodCloseScanQrPopup=se,exports.MethodDataSend=oe,exports.MethodExpand=re,exports.MethodIframeReady=pe,exports.MethodIframeWillReload=ae,exports.MethodInvokeCustomMethod=X,exports.MethodOpenInvoice=ne,exports.MethodOpenLink=ie,exports.MethodOpenPopup=ue,exports.MethodOpenScanQrPopup=Y,exports.MethodOpenTgLink=de,exports.MethodReadTextFromClipboard=Z,exports.MethodReady=_e,exports.MethodRequestPhone=ee,exports.MethodRequestTheme=ce,exports.MethodRequestViewport=xe,exports.MethodRequestWriteAccess=ge,exports.MethodSetBackgroundColor=le,exports.MethodSetHeaderColor=be,exports.MethodSetupBackButton=he,exports.MethodSetupClosingBehavior=we,exports.MethodSetupMainButton=me,exports.MethodSetupSettingsButton=Se,exports.MethodSetupSwipeBehavior=ye,exports.MethodSwitchInlineQuery=ve,exports.MethodTriggerHapticFeedback=fe,exports.NOT_SUPPORTED=r,exports.TG_DESKTOP=s,exports.TG_PHONE=t,exports.TG_WEB=e,exports.bridgeClose=()=>i()?(D(te),{status:!0}):(N(te,1),{status:r}),exports.bridgeCloseScanQrPopup=u,exports.bridgeDataSend=e=>_()?(D(oe,e),{status:!0}):(N(oe,1),{status:r}),exports.bridgeExpand=()=>c()?(D(re),{status:!0}):(N(re,1),{status:r}),exports.bridgeGetInitData=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return N("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=>x()?(D(pe,e),{status:!0}):(N(pe,1),{status:r}),exports.bridgeIframeWillReload=()=>g()?(D(pe),{status:!0}):(N(pe,1),{status:r}),exports.bridgeInvokeCustomMethod=async e=>b()?(void 0===e.req_id&&(e.req_id=a()),D(l,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),j(A,o))};U(A,o)}))):(N(l,1),{status:r}),exports.bridgeOpenInvoice=e=>h()?(D(ne,e),{status:!0}):(N(ne,1),{status:r}),exports.bridgeOpenLink=e=>w()?(D(ie,e),{status:!0}):(N(ie,1),{status:r}),exports.bridgeOpenPopup=async e=>m()?(e.title.length>64&&N(ue,3),e.message.length<1&&N(ue,4),e.message.length>256&&N(ue,5),e.buttons.length<1&&N(ue,6),e.buttons.length>3&&N(ue,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&N(ue,8),D(ue,e),new Promise(((t,s)=>{const o=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),j(H,o)};U(H,o)}))):(N(ue,1),{status:r}),exports.bridgeOpenScanQrPopup=async e=>S()?(D(Y,e),new Promise(((t,s)=>{z(J,(s=>{e.is_close&&u(),t({status:!0,data:s})})),z(V,(()=>{t({status:"closed"})}))}))):(N(Y,1),{status:r}),exports.bridgeOpenTgLink=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),v()?(D(de,e),{status:!0}):(N(de,1),{status:r})),exports.bridgeReadTextFromClipboard=async e=>f()?(void 0===e.req_id&&(e.req_id=a()),D(Z,e),new Promise(((t,s)=>{const o=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),j(Q,o))};U(Q,o)}))):(N(Z,1),{status:r}),exports.bridgeReady=()=>y()?(D(_e),{status:!0}):(N(_e,1),{status:r}),exports.bridgeRequestPhone=async()=>M()?(D(ee),new Promise(((e,t)=>{z(G,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(N(ee,1),{status:r}),exports.bridgeRequestTheme=()=>P()?(D(ce),{status:!0}):(N(ce,1),{status:r}),exports.bridgeRequestViewport=()=>k()?(D(xe),{status:!0}):(N(xe,1),{status:r}),exports.bridgeRequestWriteAccess=()=>R()?(D(ge),{status:!0}):(N(ge,1),{status:r}),exports.bridgeSessionStorageGet=({key:e})=>{try{return{value:JSON.parse(window.sessionStorage.getItem("__telegram__"+e)??""),status:!0}}catch(e){}return{status:!1}},exports.bridgeSessionStorageSet=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(e){}return{status:!1}},exports.bridgeSetBackgroundColor=e=>q()?(D(le,e),{status:!0}):(N(le,1),{status:r}),exports.bridgeSetHeaderColor=e=>O()?(D(be,e),{status:!0}):(N(be,1),{status:r}),exports.bridgeSetupBackButton=e=>C()?(D(he,e),{status:!0}):(N(he,1),{status:r}),exports.bridgeSetupClosingBehavior=e=>E()?(D(we,e),{status:!0}):(N(we,1),{status:r}),exports.bridgeSetupMainButton=e=>T()?(D(me,e),{status:!0}):(N(me,1),{status:r}),exports.bridgeSetupSettingsButton=e=>B()?(D(Se,e),{status:!0}):(N(Se,1),{status:r}),exports.bridgeSetupSwipeBehavior=e=>L()?(D(ye,e),{status:!0}):(N(ye,1),{status:r}),exports.bridgeSwitchInlineQuery=e=>I()?(e.query.length>256&&N(ve,9),D(ve,e),{status:!0}):(N(ve,1),{status:r}),exports.bridgeTriggerHapticFeedback=e=>W()?(D(fe,e),{status:!0}):(N(fe,1),{status:r}),exports.debug=N,exports.getPlatform=o,exports.listener=K,exports.sender=D,exports.supportClose=i,exports.supportCloseScanQrPopup=d,exports.supportDataSend=_,exports.supportExpand=c,exports.supportIframeReady=x,exports.supportIframeWillReload=g,exports.supportInvokeCustomMethod=b,exports.supportOpenInvoice=h,exports.supportOpenLink=w,exports.supportOpenPopup=m,exports.supportOpenScanQrPopup=S,exports.supportOpenTgLink=v,exports.supportReadTextFromClipboard=f,exports.supportReady=y,exports.supportRequestPhone=M,exports.supportRequestTheme=P,exports.supportRequestViewport=k,exports.supportRequestWriteAccess=R,exports.supportSessionStorageGet=()=>!0,exports.supportSessionStorageSet=()=>!0,exports.supportSetBackgroundColor=q,exports.supportSetHeaderColor=O,exports.supportSetupBackButton=C,exports.supportSetupClosingBehavior=E,exports.supportSetupMainButton=T,exports.supportSetupSettingsButton=B,exports.supportSetupSwipeBehavior=L,exports.supportSwitchInlineQuery=I,exports.supportTriggerHapticFeedback=W;
package/react/index.mjs CHANGED
@@ -1 +1 @@
1
- const e="web",t="phone",s="desktop",a="not_supported",r=(a,r)=>{const o=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppVersion");return Number(o)>=a&&-1!==r.indexOf((()=>{const a=window.location.hash.slice(1),r=new URLSearchParams(a).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(r)?t:["tdesktop","macos"].includes(r)?s:e})())},o=()=>Math.random().toString(36).substring(3,9),n=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},i=()=>_()?(ce(Be),{status:!0}):(ue(Be,1),{status:a}),_=()=>r(0,[e,s,t]),p=()=>u()?(ce(De),{status:!0}):(ue(De,1),{status:a}),u=()=>r(6.4,[t]),d=e=>c()?(ce(Ae,e),{status:!0}):(ue(Ae,1),{status:a}),c=()=>r(0,[e,s,t]),g=()=>b()?(ce(Je),{status:!0}):(ue(Je,1),{status:a}),b=()=>r(0,[t]),l=e=>w()?(ce(Ue,e),{status:!0}):(ue(Ue,1),{status:a}),w=()=>r(0,[e]),m=()=>h()?(ce(Ue),{status:!0}):(ue(Ue,1),{status:a}),h=()=>r(0,[e]),f="web_app_invoke_custom_method",v=async e=>S()?(void 0===e.req_id&&(e.req_id=o()),ce(f,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Te(le,a))};Ie(le,a)}))):(ue(f,1),{status:a}),S=()=>r(6.9,[e,s,t]),y=e=>q()?(ce(Me,e),{status:!0}):(ue(Me,1),{status:a}),q=()=>r(6.1,[e,s,t]),x=e=>k()?(ce(Ve,e),{status:!0}):(ue(Ve,1),{status:a}),k=()=>r(6.4,[e,s,t]),P=async e=>O()?(e.title.length>64&&ue(Qe,3),e.message.length<1&&ue(Qe,4),e.message.length>256&&ue(Qe,5),e.buttons.length<1&&ue(Qe,6),e.buttons.length>3&&ue(Qe,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&ue(Qe,8),ce(Qe,e),new Promise(((t,s)=>{const a=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),Te(fe,a)};Ie(fe,a)}))):(ue(Qe,1),{status:a}),O=()=>r(6.2,[e,s,t]),R=async e=>I()?(ce(Ee,e),new Promise(((t,s)=>{Ce(Se,(s=>{e.is_close&&p(),t({status:!0,data:s})})),Ce(ye,(()=>{t({status:"closed"})}))}))):(ue(Ee,1),{status:a}),I=()=>r(6.4,[t]),T=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),C()?(ce(Fe,e),{status:!0}):(ue(Fe,1),{status:a})),C=()=>r(7,[e,s,t]),L=async e=>W()?(void 0===e.req_id&&(e.req_id=o()),ce(Ne,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Te(be,a))};Ie(be,a)}))):(ue(Ne,1),{status:a}),W=()=>r(6.4,[e,s,t]),E=()=>N()?(ce(He),{status:!0}):(ue(He,1),{status:a}),N=()=>r(6.9,[e,s,t]),$=async()=>B()?(ce($e),new Promise(((e,t)=>{Ce(he,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(ue($e,1),{status:a}),B=()=>r(6.9,[e,s,t]),D=()=>A()?(ce(je),{status:!0}):(ue(je,1),{status:a}),A=()=>r(0,[e,s,t]),J=()=>U()?(ce(ze),{status:!0}):(ue(ze,1),{status:a}),U=()=>r(0,[e,s,t]),G=()=>M()?(ce(Ke),{status:!0}):(ue(Ke,1),{status:a}),M=()=>r(6.9,[e,s,t]),V=e=>Q()?(ce(Xe,e),{status:!0}):(ue(Xe,1),{status:a}),Q=()=>r(6.1,[e,s,t]),F=e=>H()?(ce(Ye,e),{status:!0}):(ue(Ye,1),{status:a}),H=()=>r(6.1,[e,s,t]),j=e=>z()?(ce(Ze,e),{status:!0}):(ue(Ze,1),{status:a}),z=()=>r(6.1,[e,s,t]),K=e=>X()?(ce(et,e),{status:!0}):(ue(et,1),{status:a}),X=()=>r(0,[e,s,t]),Y=e=>Z()?(ce(tt,e),{status:!0}):(ue(tt,1),{status:a}),Z=()=>r(0,[e,s,t]),ee=e=>te()?(ce(st,e),{status:!0}):(ue(st,1),{status:a}),te=()=>r(6.1,[e,s,t]),se=e=>ae()?(e.query.length>256&&ue(at,9),ce(at,e),{status:!0}):(ue(at,1),{status:a}),ae=()=>r(6.7,[e,s,t]),re=e=>oe()?(ce(rt,e),{status:!0}):(ue(rt,1),{status:a}),oe=()=>r(6.1,[t]),ne=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(e){}return{status:!1}},ie=()=>!0,_e=({key:e})=>{try{return{value:window.sessionStorage.getItem("__telegram__"+e),status:!0}}catch(e){}return{status:!1}},pe=()=>!0;var ue=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)};const de=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return ue("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 ce=(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 ge="back_button_pressed",be="clipboard_text_received",le="custom_method_invoked",we="invoice_closed",me="main_button_pressed",he="phone_requested",fe="popup_closed",ve="reload_iframe",Se="qr_text_received",ye="scan_qr_popup_closed",qe="set_custom_style",xe="settings_button_pressed",ke="theme_changed",Pe="viewport_changed",Oe="write_access_requested",Re=((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===ke&&(t.theme_params=(e=>{"#1c1c1d"==e.bg_color&&e.bg_color==e.secondary_bg_color&&(e.secondary_bg_color="#2c2c2e");const t=window.location.hash.slice(1),s=new URLSearchParams(t);var a=JSON.parse(s.get("tgWebAppThemeParams")??"");for(var r in e){var o=n(e[r]);"string"==typeof o&&(a[r]=o)}return a})(t.theme_params)),Re.emit(e,t),Re.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const Ie=(e,t)=>{Re.on(e,t)},Te=(e,t)=>{Re.off(e,t)},Ce=(e,t)=>{Re.once(e,t)};var Le=Object.freeze({__proto__:null,off:Te,on:Ie,once:Ce});const We="web_app_invoke_custom_method",Ee="web_app_open_scan_qr_popup",Ne="web_app_read_text_from_clipboard",$e="web_app_request_phone",Be="web_app_close",De="web_app_close_scan_qr_popup",Ae="web_app_data_send",Je="web_app_expand",Ue="iframe_ready",Ge="iframe_will_reload",Me="web_app_open_invoice",Ve="web_app_open_link",Qe="web_app_open_popup",Fe="web_app_open_tg_link",He="web_app_ready",je="web_app_request_theme",ze="web_app_request_viewport",Ke="web_app_request_write_access",Xe="web_app_set_background_color",Ye="web_app_set_header_color",Ze="web_app_setup_back_button",et="web_app_setup_closing_behavior",tt="web_app_setup_main_button",st="web_app_setup_settings_button",at="web_app_switch_inline_query",rt="web_app_trigger_haptic_feedback";export{ge as EventBackButtonPressed,be as EventClipboardTextReceived,le as EventCustomMethodInvoked,we as EventInvoiceClosed,me as EventMainButtonPressed,he as EventPhoneRequested,fe as EventPopupClosed,Se as EventQrTextReceived,ve as EventReloadIframe,ye as EventScanQrPopupClosed,qe as EventSetCustomStyle,xe as EventSettingsButtonPressed,ke as EventThemeChanged,Pe as EventViewportChanged,Oe as EventWriteAccessRequested,Be as MethodClose,De as MethodCloseScanQrPopup,Ae as MethodDataSend,Je as MethodExpand,Ue as MethodIframeReady,Ge as MethodIframeWillReload,We as MethodInvokeCustomMethod,Me as MethodOpenInvoice,Ve as MethodOpenLink,Qe as MethodOpenPopup,Ee as MethodOpenScanQrPopup,Fe as MethodOpenTgLink,Ne as MethodReadTextFromClipboard,He as MethodReady,$e as MethodRequestPhone,je as MethodRequestTheme,ze as MethodRequestViewport,Ke as MethodRequestWriteAccess,Xe as MethodSetBackgroundColor,Ye as MethodSetHeaderColor,Ze as MethodSetupBackButton,et as MethodSetupClosingBehavior,tt as MethodSetupMainButton,st as MethodSetupSettingsButton,at as MethodSwitchInlineQuery,rt as MethodTriggerHapticFeedback,a as NOT_SUPPORTED,s as TG_DESKTOP,t as TG_PHONE,e as TG_WEB,i as bridgeClose,p as bridgeCloseScanQrPopup,d as bridgeDataSend,g as bridgeExpand,de as bridgeGetInitData,l as bridgeIframeReady,m as bridgeIframeWillReload,v as bridgeInvokeCustomMethod,y as bridgeOpenInvoice,x as bridgeOpenLink,P as bridgeOpenPopup,R as bridgeOpenScanQrPopup,T as bridgeOpenTgLink,L as bridgeReadTextFromClipboard,E as bridgeReady,$ as bridgeRequestPhone,D as bridgeRequestTheme,J as bridgeRequestViewport,G as bridgeRequestWriteAccess,_e as bridgeSessionStorageGet,ne as bridgeSessionStorageSet,V as bridgeSetBackgroundColor,F as bridgeSetHeaderColor,j as bridgeSetupBackButton,K as bridgeSetupClosingBehavior,Y as bridgeSetupMainButton,ee as bridgeSetupSettingsButton,se as bridgeSwitchInlineQuery,re as bridgeTriggerHapticFeedback,ue as debug,Le as listener,ce as sender,_ as supportClose,u as supportCloseScanQrPopup,c as supportDataSend,b as supportExpand,w as supportIframeReady,h as supportIframeWillReload,S as supportInvokeCustomMethod,q as supportOpenInvoice,k as supportOpenLink,O as supportOpenPopup,I as supportOpenScanQrPopup,C as supportOpenTgLink,W as supportReadTextFromClipboard,N as supportReady,B as supportRequestPhone,A as supportRequestTheme,U as supportRequestViewport,M as supportRequestWriteAccess,pe as supportSessionStorageGet,ie as supportSessionStorageSet,Q as supportSetBackgroundColor,H as supportSetHeaderColor,z as supportSetupBackButton,X as supportSetupClosingBehavior,Z as supportSetupMainButton,te as supportSetupSettingsButton,ae as supportSwitchInlineQuery,oe as supportTriggerHapticFeedback};
1
+ const e="web",t="phone",s="desktop",a=()=>{const a=window.location.hash.slice(1),r=new URLSearchParams(a).get("tgWebAppPlatform")??"ios";return["android","ios"].includes(r)?t:["tdesktop","macos"].includes(r)?s:e},r="not_supported",o=(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())},n=()=>Math.random().toString(36).substring(3,9),i=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},_=()=>p()?(le(Me),{status:!0}):(ge(Me,1),{status:r}),p=()=>o(0,[e,s,t]),u=()=>d()?(le(Ae),{status:!0}):(ge(Ae,1),{status:r}),d=()=>o(64,[t]),c=e=>g()?(le(Ue,e),{status:!0}):(ge(Ue,1),{status:r}),g=()=>o(0,[e,s,t]),b=()=>l()?(le(Ge),{status:!0}):(ge(Ge,1),{status:r}),l=()=>o(0,[t]),w=e=>m()?(le(Ve,e),{status:!0}):(ge(Ve,1),{status:r}),m=()=>o(0,[e]),h=()=>f()?(le(Ve),{status:!0}):(ge(Ve,1),{status:r}),f=()=>o(0,[e]),v="web_app_invoke_custom_method",S=async e=>y()?(void 0===e.req_id&&(e.req_id=n()),le(v,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Le(he,a))};Ce(he,a)}))):(ge(v,1),{status:r}),y=()=>o(6.9,[e,s,t]),q=e=>k()?(le(je,e),{status:!0}):(ge(je,1),{status:r}),k=()=>o(6.1,[e,s,t]),x=e=>P()?(le(Fe,e),{status:!0}):(ge(Fe,1),{status:r}),P=()=>o(6.4,[e,s,t]),O=async e=>I()?(e.title.length>64&&ge(He,3),e.message.length<1&&ge(He,4),e.message.length>256&&ge(He,5),e.buttons.length<1&&ge(He,6),e.buttons.length>3&&ge(He,7),void 0!==e.buttons.find((e=>e.text?.match(/^(ok|close|cancel)$/g)))&&ge(He,8),le(He,e),new Promise(((t,s)=>{const a=s=>{t({status:!!e.buttons.find((e=>e.id===s?.button_id)),data:s}),Le(ye,a)};Ce(ye,a)}))):(ge(He,1),{status:r}),I=()=>o(6.2,[e,s,t]),R=async e=>T()?(le(De,e),new Promise(((t,s)=>{We(ke,(s=>{e.is_close&&u(),t({status:!0,data:s})})),We(xe,(()=>{t({status:"closed"})}))}))):(ge(De,1),{status:r}),T=()=>o(6.4,[t]),N=e=>("/"!==e.path_full[0]&&(e.path_full="/"+e.path_full),C()?(le(ze,e),{status:!0}):(ge(ze,1),{status:r})),C=()=>o(7,[e,s,t]),L=async e=>W()?(void 0===e.req_id&&(e.req_id=n()),le(Je,e),new Promise(((t,s)=>{const a=s=>{s.req_id===e.req_id&&(t({status:!0,data:s}),Le(me,a))};Ce(me,a)}))):(ge(Je,1),{status:r}),W=()=>o(6.4,[e,s,t]),E=()=>B()?(le(Ke),{status:!0}):(ge(Ke,1),{status:r}),B=()=>o(6.9,[e,s,t]),D=async()=>J()?(le($e),new Promise(((e,t)=>{We(Se,(t=>{"sent"===t.status&&e({status:!0}),e({status:!1})}))}))):(ge($e,1),{status:r}),J=()=>o(6.9,[e,s,t]),$=()=>M()?(le(Xe),{status:!0}):(ge(Xe,1),{status:r}),M=()=>o(0,[e,s,t]),A=()=>U()?(le(Ye),{status:!0}):(ge(Ye,1),{status:r}),U=()=>o(0,[e,s,t]),G=()=>V()?(le(Ze),{status:!0}):(ge(Ze,1),{status:r}),V=()=>o(6.9,[e,s,t]),Q=e=>j()?(le(et,e),{status:!0}):(ge(et,1),{status:r}),j=()=>o(6.1,[e,s,t]),F=e=>H()?(le(tt,e),{status:!0}):(ge(tt,1),{status:r}),H=()=>o(6.1,[e,s,t]),z=e=>K()?(le(st,e),{status:!0}):(ge(st,1),{status:r}),K=()=>o(6.1,[e,s,t]),X=e=>Y()?(le(at,e),{status:!0}):(ge(at,1),{status:r}),Y=()=>o(0,[e,s,t]),Z=e=>ee()?(le(rt,e),{status:!0}):(ge(rt,1),{status:r}),ee=()=>o(0,[e,s,t]),te=e=>se()?(le(ot,e),{status:!0}):(ge(ot,1),{status:r}),se=()=>o(6.1,[e,s,t]),ae=e=>re()?(e.query.length>256&&ge(nt,9),le(nt,e),{status:!0}):(ge(nt,1),{status:r}),re=()=>o(6.7,[e,s,t]),oe=e=>ne()?(le(it,e),{status:!0}):(ge(it,1),{status:r}),ne=()=>o(6.1,[t]),ie=({key:e,value:t})=>{try{return window.sessionStorage.setItem("__telegram__"+e,JSON.stringify(t)),{status:!0}}catch(e){}return{status:!1}},_e=()=>!0,pe=({key:e})=>{try{return{value:JSON.parse(window.sessionStorage.getItem("__telegram__"+e)??""),status:!0}}catch(e){}return{status:!1}},ue=()=>!0,de=e=>ce()?(le(_t,e),{status:!0}):(ge(_t,1),{status:r}),ce=()=>o(7.7,[e,s,t]);var ge=(e,t)=>{"development"===process.env.NODE_ENV&&console.error(`[@apiteam/twa-bridge](${e}) = ${t}`)};const be=()=>{const e=new URLSearchParams(window.location.hash.slice(1)).get("tgWebAppData");if(null===e)return ge("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 le=(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){ge("postMessage Iframe",10)}};const we="back_button_pressed",me="clipboard_text_received",he="custom_method_invoked",fe="invoice_closed",ve="main_button_pressed",Se="phone_requested",ye="popup_closed",qe="reload_iframe",ke="qr_text_received",xe="scan_qr_popup_closed",Pe="set_custom_style",Oe="settings_button_pressed",Ie="theme_changed",Re="viewport_changed",Te="write_access_requested",Ne=((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===Ie&&(t.theme_params=(e=>{"#1c1c1d"==e.bg_color&&e.bg_color==e.secondary_bg_color&&(e.secondary_bg_color="#2c2c2e");const t=window.location.hash.slice(1),s=new URLSearchParams(t);var a=JSON.parse(s.get("tgWebAppThemeParams")??"");for(var r of Object.keys(e)){var o=i(e[r]);"string"==typeof o&&(a[r]=o)}return a})(t.theme_params)),Ne.emit(e,t),Ne.emit("*",{name:e,data:t})}window.TelegramGameProxy_receiveEvent=e,window.Telegram={WebView:{receiveEvent:e}},window.TelegramGameProxy={receiveEvent:e}})();const Ce=(e,t)=>{Ne.on(e,t)},Le=(e,t)=>{Ne.off(e,t)},We=(e,t)=>{Ne.once(e,t)};var Ee=Object.freeze({__proto__:null,off:Le,on:Ce,once:We});const Be="web_app_invoke_custom_method",De="web_app_open_scan_qr_popup",Je="web_app_read_text_from_clipboard",$e="web_app_request_phone",Me="web_app_close",Ae="web_app_close_scan_qr_popup",Ue="web_app_data_send",Ge="web_app_expand",Ve="iframe_ready",Qe="iframe_will_reload",je="web_app_open_invoice",Fe="web_app_open_link",He="web_app_open_popup",ze="web_app_open_tg_link",Ke="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_setup_back_button",at="web_app_setup_closing_behavior",rt="web_app_setup_main_button",ot="web_app_setup_settings_button",nt="web_app_switch_inline_query",it="web_app_trigger_haptic_feedback",_t="web_app_setup_swipe_behavior";export{we as EventBackButtonPressed,me as EventClipboardTextReceived,he as EventCustomMethodInvoked,fe as EventInvoiceClosed,ve as EventMainButtonPressed,Se as EventPhoneRequested,ye as EventPopupClosed,ke as EventQrTextReceived,qe as EventReloadIframe,xe as EventScanQrPopupClosed,Pe as EventSetCustomStyle,Oe as EventSettingsButtonPressed,Ie as EventThemeChanged,Re as EventViewportChanged,Te as EventWriteAccessRequested,Me as MethodClose,Ae as MethodCloseScanQrPopup,Ue as MethodDataSend,Ge as MethodExpand,Ve as MethodIframeReady,Qe as MethodIframeWillReload,Be as MethodInvokeCustomMethod,je as MethodOpenInvoice,Fe as MethodOpenLink,He as MethodOpenPopup,De as MethodOpenScanQrPopup,ze as MethodOpenTgLink,Je as MethodReadTextFromClipboard,Ke as MethodReady,$e as MethodRequestPhone,Xe as MethodRequestTheme,Ye as MethodRequestViewport,Ze as MethodRequestWriteAccess,et as MethodSetBackgroundColor,tt as MethodSetHeaderColor,st as MethodSetupBackButton,at as MethodSetupClosingBehavior,rt as MethodSetupMainButton,ot as MethodSetupSettingsButton,_t as MethodSetupSwipeBehavior,nt as MethodSwitchInlineQuery,it as MethodTriggerHapticFeedback,r as NOT_SUPPORTED,s as TG_DESKTOP,t as TG_PHONE,e as TG_WEB,_ as bridgeClose,u as bridgeCloseScanQrPopup,c as bridgeDataSend,b as bridgeExpand,be as bridgeGetInitData,w as bridgeIframeReady,h as bridgeIframeWillReload,S as bridgeInvokeCustomMethod,q as bridgeOpenInvoice,x as bridgeOpenLink,O as bridgeOpenPopup,R as bridgeOpenScanQrPopup,N as bridgeOpenTgLink,L as bridgeReadTextFromClipboard,E as bridgeReady,D as bridgeRequestPhone,$ as bridgeRequestTheme,A as bridgeRequestViewport,G as bridgeRequestWriteAccess,pe as bridgeSessionStorageGet,ie as bridgeSessionStorageSet,Q as bridgeSetBackgroundColor,F as bridgeSetHeaderColor,z as bridgeSetupBackButton,X as bridgeSetupClosingBehavior,Z as bridgeSetupMainButton,te as bridgeSetupSettingsButton,de as bridgeSetupSwipeBehavior,ae as bridgeSwitchInlineQuery,oe as bridgeTriggerHapticFeedback,ge as debug,a as getPlatform,Ee as listener,le as sender,p as supportClose,d as supportCloseScanQrPopup,g as supportDataSend,l as supportExpand,m as supportIframeReady,f as supportIframeWillReload,y as supportInvokeCustomMethod,k as supportOpenInvoice,P as supportOpenLink,I as supportOpenPopup,T as supportOpenScanQrPopup,C as supportOpenTgLink,W as supportReadTextFromClipboard,B as supportReady,J as supportRequestPhone,M as supportRequestTheme,U as supportRequestViewport,V as supportRequestWriteAccess,ue as supportSessionStorageGet,_e as supportSessionStorageSet,j as supportSetBackgroundColor,H as supportSetHeaderColor,K as supportSetupBackButton,Y as supportSetupClosingBehavior,ee as supportSetupMainButton,se as supportSetupSettingsButton,ce as supportSetupSwipeBehavior,re as supportSwitchInlineQuery,ne as supportTriggerHapticFeedback};