@tma.js/sdk 1.4.4 → 1.4.6

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