@tma.js/sdk 0.13.3 → 1.0.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.
Files changed (426) hide show
  1. package/dist/dts/{components/BackButton → back-button}/BackButton.d.ts +12 -9
  2. package/dist/dts/back-button/index.d.ts +2 -0
  3. package/dist/dts/{components/BackButton → back-button}/types.d.ts +3 -2
  4. package/dist/dts/bridge/env/hasExternalNotify.d.ts +12 -0
  5. package/dist/dts/bridge/env/hasWebviewProxy.d.ts +12 -0
  6. package/dist/dts/bridge/env/index.d.ts +3 -0
  7. package/dist/dts/bridge/env/isIframe.d.ts +5 -0
  8. package/dist/dts/bridge/errors/MethodUnsupportedError.d.ts +8 -0
  9. package/dist/dts/bridge/errors/ParameterUnsupportedError.d.ts +8 -0
  10. package/dist/dts/bridge/errors/index.d.ts +2 -0
  11. package/dist/dts/bridge/events/createEmitter.d.ts +6 -0
  12. package/dist/dts/bridge/events/events.d.ts +130 -0
  13. package/dist/dts/bridge/events/index.d.ts +9 -0
  14. package/dist/dts/bridge/events/off.d.ts +7 -0
  15. package/dist/dts/bridge/events/on.d.ts +10 -0
  16. package/dist/dts/bridge/events/onTelegramEvent.d.ts +7 -0
  17. package/dist/dts/bridge/events/once.d.ts +9 -0
  18. package/dist/dts/bridge/events/parsers/clipboardTextReceived.d.ts +13 -0
  19. package/dist/dts/bridge/events/parsers/customMethodInvoked.d.ts +16 -0
  20. package/dist/dts/bridge/events/parsers/index.d.ts +9 -0
  21. package/dist/dts/bridge/events/parsers/invoiceClosed.d.ts +12 -0
  22. package/dist/dts/bridge/events/parsers/phoneRequested.d.ts +8 -0
  23. package/dist/dts/bridge/events/parsers/popupClosed.d.ts +8 -0
  24. package/dist/dts/bridge/events/parsers/qrTextReceived.d.ts +7 -0
  25. package/dist/dts/bridge/events/parsers/theme-changed.d.ts +42 -0
  26. package/dist/dts/bridge/events/parsers/viewportChanged.d.ts +19 -0
  27. package/dist/dts/bridge/events/parsers/writeAccessRequested.d.ts +8 -0
  28. package/dist/dts/bridge/events/singletonEmitter.d.ts +6 -0
  29. package/dist/dts/bridge/events/subscribe.d.ts +9 -0
  30. package/dist/dts/bridge/events/unsubscribe.d.ts +6 -0
  31. package/dist/dts/bridge/index.d.ts +5 -0
  32. package/dist/dts/bridge/methods/createPostEvent.d.ts +10 -0
  33. package/dist/dts/bridge/methods/haptic.d.ts +40 -0
  34. package/dist/dts/bridge/methods/index.d.ts +6 -0
  35. package/dist/dts/bridge/methods/invoke-custom-method.d.ts +24 -0
  36. package/dist/dts/bridge/methods/methods.d.ts +329 -0
  37. package/dist/dts/bridge/methods/popup.d.ts +49 -0
  38. package/dist/dts/bridge/methods/postEvent.d.ts +29 -0
  39. package/dist/dts/bridge/request.d.ts +65 -0
  40. package/dist/dts/classnames/classNames.d.ts +10 -0
  41. package/dist/dts/classnames/index.d.ts +2 -0
  42. package/dist/dts/classnames/mergeClassNames.d.ts +32 -0
  43. package/dist/dts/{components/ClosingBehaviour/ClosingBehaviour.d.ts → closing-behavior/ClosingBehavior.d.ts} +5 -4
  44. package/dist/dts/closing-behavior/index.d.ts +2 -0
  45. package/dist/dts/closing-behavior/types.d.ts +7 -0
  46. package/dist/dts/{components/CloudStorage → cloud-storage}/CloudStorage.d.ts +19 -11
  47. package/dist/dts/colors/index.d.ts +5 -0
  48. package/dist/dts/colors/isColorDark.d.ts +6 -0
  49. package/dist/dts/colors/isRGB.d.ts +6 -0
  50. package/dist/dts/colors/isRGBShort.d.ts +6 -0
  51. package/dist/dts/colors/toRGB.d.ts +11 -0
  52. package/dist/dts/colors/types.d.ts +8 -0
  53. package/dist/dts/event-emitter/EventEmitter.d.ts +64 -0
  54. package/dist/dts/event-emitter/index.d.ts +2 -0
  55. package/dist/dts/event-emitter/types.d.ts +44 -0
  56. package/dist/dts/globals.d.ts +22 -0
  57. package/dist/dts/{components/HapticFeedback → haptic-feedback}/HapticFeedback.d.ts +3 -3
  58. package/dist/dts/index.d.ts +24 -6
  59. package/dist/dts/init/catchCustomStyles.d.ts +4 -0
  60. package/dist/dts/init/creators/createBackButton.d.ts +2 -2
  61. package/dist/dts/init/creators/createClosingBehavior.d.ts +3 -3
  62. package/dist/dts/init/creators/createMainButton.d.ts +3 -3
  63. package/dist/dts/init/creators/createMiniApp.d.ts +14 -0
  64. package/dist/dts/init/creators/createRequestIdGenerator.d.ts +1 -1
  65. package/dist/dts/init/creators/createThemeParams.d.ts +2 -3
  66. package/dist/dts/init/creators/createViewport.d.ts +16 -9
  67. package/dist/dts/init/creators/index.d.ts +1 -1
  68. package/dist/dts/init/css/bindMiniAppCSSVars.d.ts +16 -0
  69. package/dist/dts/init/css/bindThemeCSSVars.d.ts +12 -0
  70. package/dist/dts/init/css/bindViewportCSSVars.d.ts +20 -0
  71. package/dist/dts/init/css/index.d.ts +1 -0
  72. package/dist/dts/init/css/processCSSVarsOption.d.ts +12 -0
  73. package/dist/dts/init/css/setCSSVar.d.ts +6 -0
  74. package/dist/dts/init/init.d.ts +5 -5
  75. package/dist/dts/init/types.d.ts +42 -69
  76. package/dist/dts/init-data/InitData.d.ts +53 -0
  77. package/dist/dts/init-data/chatParser.d.ts +5 -0
  78. package/dist/dts/init-data/index.d.ts +6 -0
  79. package/dist/dts/init-data/initDataParser.d.ts +5 -0
  80. package/dist/dts/init-data/parseInitData.d.ts +6 -0
  81. package/dist/dts/init-data/types.d.ts +133 -0
  82. package/dist/dts/init-data/userParser.d.ts +5 -0
  83. package/dist/dts/invoice/Invoice.d.ts +43 -0
  84. package/dist/dts/invoice/index.d.ts +2 -0
  85. package/dist/dts/invoice/types.d.ts +7 -0
  86. package/dist/dts/launch-params/computeLaunchData.d.ts +6 -0
  87. package/dist/dts/launch-params/computePageReload.d.ts +6 -0
  88. package/dist/dts/launch-params/getFirstNavigationEntry.d.ts +6 -0
  89. package/dist/dts/launch-params/index.d.ts +12 -0
  90. package/dist/dts/launch-params/launchParamsParser.d.ts +5 -0
  91. package/dist/dts/launch-params/parseLaunchParams.d.ts +6 -0
  92. package/dist/dts/launch-params/retrieveCurrent.d.ts +5 -0
  93. package/dist/dts/launch-params/retrieveFromLocation.d.ts +6 -0
  94. package/dist/dts/launch-params/retrieveFromPerformance.d.ts +8 -0
  95. package/dist/dts/launch-params/retrieveLaunchData.d.ts +6 -0
  96. package/dist/dts/launch-params/serializeLaunchParams.d.ts +6 -0
  97. package/dist/dts/launch-params/storage.d.ts +13 -0
  98. package/dist/dts/launch-params/types.d.ts +48 -0
  99. package/dist/dts/logger/Logger.d.ts +38 -0
  100. package/dist/dts/logger/index.d.ts +1 -0
  101. package/dist/dts/main-button/MainButton.d.ts +104 -0
  102. package/dist/dts/main-button/index.d.ts +2 -0
  103. package/dist/dts/main-button/types.d.ts +20 -0
  104. package/dist/dts/mini-app/MiniApp.d.ts +99 -0
  105. package/dist/dts/mini-app/index.d.ts +2 -0
  106. package/dist/dts/mini-app/types.d.ts +19 -0
  107. package/dist/dts/misc/index.d.ts +2 -0
  108. package/dist/dts/misc/isRecord.d.ts +5 -0
  109. package/dist/dts/misc/isTMA.d.ts +4 -0
  110. package/dist/dts/navigation/HashNavigator/HashNavigator.d.ts +43 -0
  111. package/dist/dts/navigation/HashNavigator/drop.d.ts +4 -0
  112. package/dist/dts/navigation/HashNavigator/go.d.ts +5 -0
  113. package/dist/dts/navigation/HashNavigator/index.d.ts +2 -0
  114. package/dist/dts/navigation/HashNavigator/types.d.ts +34 -0
  115. package/dist/dts/navigation/Navigator/Navigator.d.ts +104 -0
  116. package/dist/dts/navigation/Navigator/index.d.ts +2 -0
  117. package/dist/dts/navigation/Navigator/types.d.ts +44 -0
  118. package/dist/dts/navigation/ensurePrefix.d.ts +7 -0
  119. package/dist/dts/navigation/getHash.d.ts +14 -0
  120. package/dist/dts/navigation/index.d.ts +4 -0
  121. package/dist/dts/parsing/ArrayValueParser.d.ts +18 -0
  122. package/dist/dts/parsing/ParseError.d.ts +22 -0
  123. package/dist/dts/parsing/ParseSchemaFieldError.d.ts +17 -0
  124. package/dist/dts/parsing/ValueParser.d.ts +36 -0
  125. package/dist/dts/parsing/createValueParserGenerator.d.ts +9 -0
  126. package/dist/dts/parsing/index.d.ts +10 -0
  127. package/dist/dts/parsing/parseBySchema.d.ts +8 -0
  128. package/dist/dts/parsing/parsers/array.d.ts +6 -0
  129. package/dist/dts/parsing/parsers/boolean.d.ts +4 -0
  130. package/dist/dts/parsing/parsers/date.d.ts +4 -0
  131. package/dist/dts/parsing/parsers/index.d.ts +8 -0
  132. package/dist/dts/parsing/parsers/json.d.ts +8 -0
  133. package/dist/dts/parsing/parsers/number.d.ts +4 -0
  134. package/dist/dts/parsing/parsers/rgb.d.ts +4 -0
  135. package/dist/dts/parsing/parsers/searchParams.d.ts +8 -0
  136. package/dist/dts/parsing/parsers/string.d.ts +4 -0
  137. package/dist/dts/parsing/toRecord.d.ts +7 -0
  138. package/dist/dts/parsing/types.d.ts +30 -0
  139. package/dist/dts/parsing/unexpectedTypeError.d.ts +4 -0
  140. package/dist/dts/{components/Popup → popup}/Popup.d.ts +10 -9
  141. package/dist/dts/popup/index.d.ts +2 -0
  142. package/dist/dts/popup/preparePopupParams.d.ts +7 -0
  143. package/dist/dts/{components/Popup → popup}/types.d.ts +4 -4
  144. package/dist/dts/{components/QRScanner → qr-scanner}/QRScanner.d.ts +6 -5
  145. package/dist/dts/qr-scanner/index.d.ts +2 -0
  146. package/dist/dts/{components/QRScanner → qr-scanner}/types.d.ts +1 -1
  147. package/dist/dts/state/State.d.ts +19 -7
  148. package/dist/dts/state/types.d.ts +4 -7
  149. package/dist/dts/storage.d.ts +4 -4
  150. package/dist/dts/supports/createSupportsFunc.d.ts +10 -0
  151. package/dist/dts/supports/createSupportsParamFunc.d.ts +15 -0
  152. package/dist/dts/supports/index.d.ts +4 -0
  153. package/dist/dts/supports/supports.d.ts +15 -0
  154. package/dist/dts/supports/types.d.ts +1 -0
  155. package/dist/dts/theme-params/ThemeParams.d.ts +62 -0
  156. package/dist/dts/theme-params/index.d.ts +6 -0
  157. package/dist/dts/theme-params/keys.d.ts +11 -0
  158. package/dist/dts/theme-params/parseThemeParams.d.ts +6 -0
  159. package/dist/dts/theme-params/requestThemeParams.d.ts +7 -0
  160. package/dist/dts/theme-params/serializeThemeParams.d.ts +5 -0
  161. package/dist/dts/theme-params/themeParamsParser.d.ts +2 -0
  162. package/dist/dts/theme-params/types.d.ts +14 -0
  163. package/dist/dts/timeout/TimeoutError.d.ts +3 -0
  164. package/dist/dts/timeout/index.d.ts +3 -0
  165. package/dist/dts/timeout/isTimeoutError.d.ts +6 -0
  166. package/dist/dts/timeout/withTimeout.d.ts +14 -0
  167. package/dist/dts/types/index.d.ts +3 -0
  168. package/dist/dts/types/platform.d.ts +4 -0
  169. package/dist/dts/types/request-id.d.ts +9 -0
  170. package/dist/dts/types/utils.d.ts +36 -0
  171. package/dist/dts/utils/Utils.d.ts +45 -0
  172. package/dist/dts/utils/index.d.ts +1 -0
  173. package/dist/dts/version/compareVersions.d.ts +8 -0
  174. package/dist/dts/version/index.d.ts +2 -0
  175. package/dist/dts/version/types.d.ts +4 -0
  176. package/dist/dts/{components/Viewport → viewport}/Viewport.d.ts +16 -38
  177. package/dist/dts/viewport/index.d.ts +3 -0
  178. package/dist/dts/viewport/requestViewport.d.ts +12 -0
  179. package/dist/dts/{components/Viewport → viewport}/types.d.ts +9 -1
  180. package/dist/dts/viewport/utils.d.ts +5 -0
  181. package/dist/index.cjs +1 -1
  182. package/dist/index.cjs.map +1 -1
  183. package/dist/index.iife.js +1 -1
  184. package/dist/index.iife.js.map +1 -1
  185. package/dist/index.mjs +2254 -1027
  186. package/dist/index.mjs.map +1 -1
  187. package/package.json +7 -16
  188. package/src/{components/BackButton → back-button}/BackButton.ts +23 -21
  189. package/src/back-button/index.ts +2 -0
  190. package/src/{components/BackButton → back-button}/types.ts +3 -2
  191. package/src/bridge/env/hasExternalNotify.ts +19 -0
  192. package/src/bridge/env/hasWebviewProxy.ts +19 -0
  193. package/src/bridge/env/index.ts +3 -0
  194. package/src/bridge/env/isIframe.ts +11 -0
  195. package/src/bridge/errors/MethodUnsupportedError.ts +13 -0
  196. package/src/bridge/errors/ParameterUnsupportedError.ts +13 -0
  197. package/src/bridge/errors/index.ts +2 -0
  198. package/src/bridge/events/createEmitter.ts +108 -0
  199. package/src/bridge/events/events.ts +170 -0
  200. package/src/bridge/events/index.ts +9 -0
  201. package/src/bridge/events/off.ts +14 -0
  202. package/src/bridge/events/on.ts +19 -0
  203. package/src/bridge/events/onTelegramEvent.ts +83 -0
  204. package/src/bridge/events/once.ts +18 -0
  205. package/src/bridge/events/parsers/clipboardTextReceived.ts +26 -0
  206. package/src/bridge/events/parsers/customMethodInvoked.ts +25 -0
  207. package/src/bridge/events/parsers/index.ts +9 -0
  208. package/src/bridge/events/parsers/invoiceClosed.ts +26 -0
  209. package/src/bridge/events/parsers/phoneRequested.ts +14 -0
  210. package/src/bridge/events/parsers/popupClosed.ts +19 -0
  211. package/src/bridge/events/parsers/qrTextReceived.ts +14 -0
  212. package/src/bridge/events/parsers/theme-changed.ts +58 -0
  213. package/src/bridge/events/parsers/viewportChanged.ts +33 -0
  214. package/src/bridge/events/parsers/writeAccessRequested.ts +14 -0
  215. package/src/bridge/events/singletonEmitter.ts +19 -0
  216. package/src/bridge/events/subscribe.ts +15 -0
  217. package/src/bridge/events/unsubscribe.ts +10 -0
  218. package/src/bridge/index.ts +5 -0
  219. package/src/bridge/methods/createPostEvent.ts +40 -0
  220. package/src/bridge/methods/haptic.ts +52 -0
  221. package/src/bridge/methods/index.ts +6 -0
  222. package/src/bridge/methods/invoke-custom-method.ts +25 -0
  223. package/src/bridge/methods/methods.ts +372 -0
  224. package/src/bridge/methods/popup.ts +53 -0
  225. package/src/bridge/methods/postEvent.ts +101 -0
  226. package/src/bridge/request.ts +185 -0
  227. package/src/classnames/classNames.ts +34 -0
  228. package/src/classnames/index.ts +2 -0
  229. package/src/classnames/mergeClassNames.ts +68 -0
  230. package/src/{components/ClosingBehaviour/ClosingBehaviour.ts → closing-behavior/ClosingBehavior.ts} +12 -10
  231. package/src/closing-behavior/index.ts +2 -0
  232. package/src/closing-behavior/types.ts +12 -0
  233. package/src/{components/CloudStorage → cloud-storage}/CloudStorage.ts +50 -28
  234. package/src/colors/index.ts +5 -0
  235. package/src/colors/isColorDark.ts +22 -0
  236. package/src/colors/isRGB.ts +9 -0
  237. package/src/colors/isRGBShort.ts +9 -0
  238. package/src/colors/toRGB.ts +49 -0
  239. package/src/colors/types.ts +9 -0
  240. package/src/event-emitter/EventEmitter.ts +146 -0
  241. package/src/event-emitter/index.ts +2 -0
  242. package/src/event-emitter/types.ts +60 -0
  243. package/src/globals.ts +38 -0
  244. package/src/{components/HapticFeedback → haptic-feedback}/HapticFeedback.ts +16 -8
  245. package/src/index.ts +171 -6
  246. package/src/init/catchCustomStyles.ts +17 -0
  247. package/src/init/creators/createBackButton.ts +4 -6
  248. package/src/init/creators/createClosingBehavior.ts +6 -8
  249. package/src/init/creators/createMainButton.ts +13 -20
  250. package/src/init/creators/createMiniApp.ts +44 -0
  251. package/src/init/creators/createRequestIdGenerator.ts +1 -1
  252. package/src/init/creators/createThemeParams.ts +3 -6
  253. package/src/init/creators/createViewport.ts +92 -42
  254. package/src/init/creators/index.ts +1 -1
  255. package/src/init/css/bindMiniAppCSSVars.ts +48 -0
  256. package/src/init/css/bindThemeCSSVars.ts +31 -0
  257. package/src/init/css/bindViewportCSSVars.ts +36 -0
  258. package/src/init/css/index.ts +1 -0
  259. package/src/init/css/processCSSVarsOption.ts +57 -0
  260. package/src/init/css/setCSSVar.ts +8 -0
  261. package/src/init/init.ts +119 -154
  262. package/src/init/types.ts +42 -87
  263. package/src/init-data/InitData.ts +96 -0
  264. package/src/init-data/chatParser.ts +19 -0
  265. package/src/init-data/index.ts +6 -0
  266. package/src/init-data/initDataParser.ts +41 -0
  267. package/src/init-data/parseInitData.ts +10 -0
  268. package/src/init-data/types.ts +164 -0
  269. package/src/init-data/userParser.ts +45 -0
  270. package/src/invoice/Invoice.ts +123 -0
  271. package/src/invoice/index.ts +2 -0
  272. package/src/invoice/types.ts +11 -0
  273. package/src/launch-params/computeLaunchData.ts +81 -0
  274. package/src/launch-params/computePageReload.ts +13 -0
  275. package/src/launch-params/getFirstNavigationEntry.ts +10 -0
  276. package/src/launch-params/index.ts +12 -0
  277. package/src/launch-params/launchParamsParser.ts +41 -0
  278. package/src/launch-params/parseLaunchParams.ts +10 -0
  279. package/src/launch-params/retrieveCurrent.ts +27 -0
  280. package/src/launch-params/retrieveFromLocation.ts +10 -0
  281. package/src/launch-params/retrieveFromPerformance.ts +23 -0
  282. package/src/launch-params/retrieveLaunchData.ts +30 -0
  283. package/src/launch-params/serializeLaunchParams.ts +37 -0
  284. package/src/launch-params/storage.ts +33 -0
  285. package/src/launch-params/types.ts +57 -0
  286. package/src/logger/Logger.ts +72 -0
  287. package/src/logger/index.ts +1 -0
  288. package/src/main-button/MainButton.ts +239 -0
  289. package/src/main-button/index.ts +2 -0
  290. package/src/main-button/types.ts +26 -0
  291. package/src/mini-app/MiniApp.ts +237 -0
  292. package/src/mini-app/index.ts +2 -0
  293. package/src/mini-app/types.ts +25 -0
  294. package/src/misc/index.ts +2 -0
  295. package/src/misc/isRecord.ts +7 -0
  296. package/src/misc/isTMA.ts +13 -0
  297. package/src/navigation/HashNavigator/HashNavigator.ts +220 -0
  298. package/src/navigation/HashNavigator/drop.ts +36 -0
  299. package/src/navigation/HashNavigator/go.ts +28 -0
  300. package/src/navigation/HashNavigator/index.ts +2 -0
  301. package/src/navigation/HashNavigator/types.ts +41 -0
  302. package/src/navigation/Navigator/Navigator.ts +282 -0
  303. package/src/navigation/Navigator/index.ts +2 -0
  304. package/src/navigation/Navigator/types.ts +55 -0
  305. package/src/navigation/ensurePrefix.ts +9 -0
  306. package/src/navigation/getHash.ts +17 -0
  307. package/src/navigation/index.ts +4 -0
  308. package/src/parsing/ArrayValueParser.ts +79 -0
  309. package/src/parsing/ParseError.ts +27 -0
  310. package/src/parsing/ParseSchemaFieldError.ts +21 -0
  311. package/src/parsing/ValueParser.ts +71 -0
  312. package/src/parsing/createValueParserGenerator.ts +16 -0
  313. package/src/parsing/index.ts +10 -0
  314. package/src/parsing/parseBySchema.ts +65 -0
  315. package/src/parsing/parsers/array.ts +9 -0
  316. package/src/parsing/parsers/boolean.ts +22 -0
  317. package/src/parsing/parsers/date.ts +13 -0
  318. package/src/parsing/parsers/index.ts +8 -0
  319. package/src/parsing/parsers/json.ts +17 -0
  320. package/src/parsing/parsers/number.ts +21 -0
  321. package/src/parsing/parsers/rgb.ts +12 -0
  322. package/src/parsing/parsers/searchParams.ts +24 -0
  323. package/src/parsing/parsers/string.ts +12 -0
  324. package/src/parsing/toRecord.ts +27 -0
  325. package/src/parsing/types.ts +32 -0
  326. package/src/parsing/unexpectedTypeError.ts +6 -0
  327. package/src/{components/Popup → popup}/Popup.ts +38 -28
  328. package/src/popup/index.ts +2 -0
  329. package/src/{components/Popup/utils.ts → popup/preparePopupParams.ts} +3 -3
  330. package/src/{components/Popup → popup}/types.ts +4 -4
  331. package/src/{components/QRScanner → qr-scanner}/QRScanner.ts +18 -10
  332. package/src/qr-scanner/index.ts +2 -0
  333. package/src/{components/QRScanner → qr-scanner}/types.ts +1 -1
  334. package/src/state/State.ts +31 -21
  335. package/src/state/types.ts +5 -8
  336. package/src/storage.ts +6 -4
  337. package/src/supports/createSupportsFunc.ts +18 -0
  338. package/src/supports/createSupportsParamFunc.ts +27 -0
  339. package/src/supports/index.ts +4 -0
  340. package/src/supports/supports.ts +84 -0
  341. package/src/supports/types.ts +1 -0
  342. package/src/theme-params/ThemeParams.ts +131 -0
  343. package/src/theme-params/index.ts +6 -0
  344. package/src/theme-params/keys.ts +24 -0
  345. package/src/theme-params/parseThemeParams.ts +10 -0
  346. package/src/theme-params/requestThemeParams.ts +13 -0
  347. package/src/theme-params/serializeThemeParams.ts +20 -0
  348. package/src/theme-params/themeParamsParser.ts +20 -0
  349. package/src/theme-params/types.ts +33 -0
  350. package/src/timeout/TimeoutError.ts +6 -0
  351. package/src/timeout/index.ts +3 -0
  352. package/src/timeout/isTimeoutError.ts +9 -0
  353. package/src/timeout/withTimeout.ts +36 -0
  354. package/src/types/index.ts +3 -0
  355. package/src/types/platform.ts +14 -0
  356. package/src/types/request-id.ts +10 -0
  357. package/src/types/utils.ts +50 -0
  358. package/src/utils/Utils.ts +107 -0
  359. package/src/utils/index.ts +1 -0
  360. package/src/version/compareVersions.ts +28 -0
  361. package/src/version/index.ts +2 -0
  362. package/src/version/types.ts +4 -0
  363. package/src/{components/Viewport → viewport}/Viewport.ts +72 -98
  364. package/src/viewport/index.ts +3 -0
  365. package/src/viewport/requestViewport.ts +23 -0
  366. package/src/{components/Viewport → viewport}/types.ts +10 -1
  367. package/src/viewport/utils.ts +7 -0
  368. package/dist/dts/components/BackButton/index.d.ts +0 -2
  369. package/dist/dts/components/ClosingBehaviour/index.d.ts +0 -2
  370. package/dist/dts/components/ClosingBehaviour/types.d.ts +0 -7
  371. package/dist/dts/components/InitData/InitData.d.ts +0 -60
  372. package/dist/dts/components/InitData/index.d.ts +0 -1
  373. package/dist/dts/components/MainButton/MainButton.d.ts +0 -114
  374. package/dist/dts/components/MainButton/index.d.ts +0 -2
  375. package/dist/dts/components/MainButton/types.d.ts +0 -15
  376. package/dist/dts/components/Popup/index.d.ts +0 -2
  377. package/dist/dts/components/Popup/utils.d.ts +0 -7
  378. package/dist/dts/components/QRScanner/index.d.ts +0 -2
  379. package/dist/dts/components/ThemeParams/ThemeParams.d.ts +0 -85
  380. package/dist/dts/components/ThemeParams/index.d.ts +0 -2
  381. package/dist/dts/components/ThemeParams/types.d.ts +0 -6
  382. package/dist/dts/components/Viewport/index.d.ts +0 -2
  383. package/dist/dts/components/WebApp/WebApp.d.ts +0 -146
  384. package/dist/dts/components/WebApp/index.d.ts +0 -2
  385. package/dist/dts/components/WebApp/types.d.ts +0 -11
  386. package/dist/dts/components/index.d.ts +0 -11
  387. package/dist/dts/env.d.ts +0 -10
  388. package/dist/dts/errors/MethodNotSupportedError.d.ts +0 -6
  389. package/dist/dts/errors/ParameterNotSupportedError.d.ts +0 -6
  390. package/dist/dts/errors/index.d.ts +0 -2
  391. package/dist/dts/init/creators/createWebApp.d.ts +0 -16
  392. package/dist/dts/init/css.d.ts +0 -50
  393. package/dist/dts/supports.d.ts +0 -22
  394. package/dist/dts/types.d.ts +0 -10
  395. package/dist/dts/url.d.ts +0 -7
  396. package/src/components/BackButton/index.ts +0 -2
  397. package/src/components/ClosingBehaviour/index.ts +0 -6
  398. package/src/components/ClosingBehaviour/types.ts +0 -12
  399. package/src/components/InitData/InitData.ts +0 -139
  400. package/src/components/InitData/index.ts +0 -1
  401. package/src/components/MainButton/MainButton.ts +0 -242
  402. package/src/components/MainButton/index.ts +0 -2
  403. package/src/components/MainButton/types.ts +0 -20
  404. package/src/components/Popup/index.ts +0 -8
  405. package/src/components/QRScanner/index.ts +0 -2
  406. package/src/components/ThemeParams/ThemeParams.ts +0 -168
  407. package/src/components/ThemeParams/index.ts +0 -2
  408. package/src/components/ThemeParams/types.ts +0 -11
  409. package/src/components/Viewport/index.ts +0 -2
  410. package/src/components/WebApp/WebApp.ts +0 -311
  411. package/src/components/WebApp/index.ts +0 -2
  412. package/src/components/WebApp/types.ts +0 -17
  413. package/src/components/index.ts +0 -11
  414. package/src/env.ts +0 -22
  415. package/src/errors/MethodNotSupportedError.ts +0 -9
  416. package/src/errors/ParameterNotSupportedError.ts +0 -9
  417. package/src/errors/index.ts +0 -2
  418. package/src/init/creators/createWebApp.ts +0 -52
  419. package/src/init/css.ts +0 -142
  420. package/src/supports.ts +0 -44
  421. package/src/types.ts +0 -13
  422. package/src/url.ts +0 -23
  423. /package/dist/dts/{components/CloudStorage → cloud-storage}/index.d.ts +0 -0
  424. /package/dist/dts/{components/HapticFeedback → haptic-feedback}/index.d.ts +0 -0
  425. /package/src/{components/CloudStorage → cloud-storage}/index.ts +0 -0
  426. /package/src/{components/HapticFeedback → haptic-feedback}/index.ts +0 -0
@@ -1,2 +1,2 @@
1
- var un=Object.defineProperty;var pn=(l,w,P)=>w in l?un(l,w,{enumerable:!0,configurable:!0,writable:!0,value:P}):l[w]=P;var a=(l,w,P)=>(pn(l,typeof w!="symbol"?w+"":w,P),P);this.tmajs=this.tmajs||{};this.tmajs.sdk=function(l){"use strict";var w=Object.defineProperty,P=(n,e,t)=>e in n?w(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,oe=(n,e,t)=>(P(n,typeof e!="symbol"?e+"":e,t),t);let m=class{constructor(){oe(this,"listeners",new Map),oe(this,"subscribeListeners",[])}addListener(e,t,r){let s=this.listeners.get(e);return s||(s=[],this.listeners.set(e,s)),s.push([t,r]),()=>this.off(e,t)}emit(e,...t){this.subscribeListeners.forEach(s=>s(e,...t));const r=this.listeners.get(e);r&&r.forEach(([s,o],i)=>{s(...t),o&&r.splice(i,1)})}on(e,t){return this.addListener(e,t,!1)}once(e,t){return this.addListener(e,t,!0)}off(e,t){const r=this.listeners.get(e);if(r){for(let s=0;s<r.length;s+=1)if(t===r[s][0]){r.splice(s,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}}};function D(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ie(n,e){const t=n.split("."),r=e.split("."),s=Math.max(t.length,r.length);for(let o=0;o<s;o+=1){const i=parseInt(t[o]||"0",10),c=parseInt(r[o]||"0",10);if(i!==c)return i>c?1:-1}return 0}let Je=class je extends Error{constructor(e){super(`Async call timeout exceeded. Timeout: ${e}`),Object.setPrototypeOf(this,je.prototype)}};function ae(n){return new Promise((e,t)=>{setTimeout(t,n,new Je(n))})}function ce(n,e){return typeof n=="function"?(...t)=>Promise.race([n(...t),ae(e)]):Promise.race([n,ae(e)])}class Ge{constructor(e,t){this.prefix=e,this.enabled=t}print(e,...t){if(!this.enabled)return;const r=new Date,s=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(r);console[e](`[${s}]`,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)}}function Ke(n){return/^#[\da-f]{3}$/i.test(n)}function ue(n){return/^#[\da-f]{6}$/i.test(n)}function pe(n){const e=n.replace(/\s/g,"").toLowerCase();if(ue(e))return e;if(Ke(e)){let r="#";for(let s=0;s<3;s+=1)r+=e[1+s].repeat(2);return r}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 "${n}" does not satisfy any of known RGB formats.`);return t.slice(1).reduce((r,s)=>{const o=parseInt(s,10).toString(16);return r+(o.length===1?"0":"")+o},"#")}function he(n){const e=pe(n);return Math.sqrt([.299,.587,.114].reduce((t,r,s)=>{const o=parseInt(e.slice(1+s*2,1+(s+1)*2),16);return t+o*o*r},0))<120}var Ze=Object.defineProperty,Qe=(n,e,t)=>e in n?Ze(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,le=(n,e,t)=>(Qe(n,typeof e!="symbol"?e+"":e,t),t);let de=class ze extends Error{constructor(e,{cause:t,type:r}={}){super(`Unable to parse value${r?` as ${r}`:""}`,{cause:t}),le(this,"type"),this.value=e,Object.setPrototypeOf(this,ze.prototype),this.type=r}},H=class{constructor(e,t,r){this.parser=e,this.isOptional=t,this.type=r}parse(e){if(!(this.isOptional&&e===void 0))try{return this.parser(e)}catch(t){throw new de(e,{type:this.type,cause:t})}}optional(){return this.isOptional=!0,this}};function $(){return new TypeError("Value has unexpected type")}function Xe(n){if(Array.isArray(n))return n;if(typeof n=="string")try{const e=JSON.parse(n);if(Array.isArray(e))return e}catch{}throw $()}let Ye=class extends H{constructor(e,t,r){super(Xe,t,r),le(this,"itemParser"),this.itemParser=typeof e=="function"?e:e.parse.bind(e)}parse(e){const t=super.parse(e);return t===void 0?t:t.map(this.itemParser)}of(e){return this.itemParser=typeof e=="function"?e:e.parse.bind(e),this}};function et(n){return new Ye(e=>e,!1,n)}function x(n,e){return()=>new H(n,!1,e)}const E=x(n=>{if(typeof n=="boolean")return n;const e=String(n);if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw $()},"boolean"),V=x(n=>{if(typeof n=="number")return n;if(typeof n=="string"){const e=Number(n);if(!Number.isNaN(e))return e}throw $()},"number"),tt=V(),nt=x(n=>n instanceof Date?n:new Date(tt.parse(n)*1e3),"Date");class U extends Error{constructor(e,{cause:t,type:r}={}){super(`Unable to parse field "${e}"${r?` as ${r}`:""}`,{cause:t}),Object.setPrototypeOf(this,U.prototype)}}function fe(n,e){const t={};for(const r in n){const s=n[r];if(!s)continue;let o,i;if(typeof s=="function"||"parse"in s)o=r,i=typeof s=="function"?s:s.parse.bind(s);else{const{type:p}=s;o=s.from||r,i=typeof p=="function"?p:p.parse.bind(p)}let c;const h=e(o);try{c=i(h)}catch(p){throw p instanceof de?new U(o,{type:p.type,cause:p}):new U(o,{cause:p})}c!==void 0&&(t[r]=c)}return t}function K(n){let e=n;if(typeof e=="string"&&(e=JSON.parse(e)),typeof e!="object"||e===null||Array.isArray(e))throw $();return e}function f(n,e){return new H(t=>{const r=K(t);return fe(n,s=>r[s])},!1,e)}const u=x(n=>{if(typeof n=="string"||typeof n=="number")return n.toString();throw $()},"string"),rt=u(),ge=x(n=>pe(rt.parse(n)),"rgb");function _e(n,e){return new H(t=>{if(typeof t!="string"&&!(t instanceof URLSearchParams))throw $();const r=typeof t=="string"?new URLSearchParams(t):t;return fe(n,s=>{const o=r.get(s);return o===null?void 0:o})},!1,e)}let st=class Fe extends Error{constructor(e,t){super(`Method "${e}" is unsupported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,Fe.prototype)}};class Z extends Error{constructor(e,t,r){super(`Parameter "${t}" in method "${e}" is unsupported in the Mini Apps version ${r}.`),Object.setPrototypeOf(this,Z.prototype)}}function ot(){return f({req_id:u(),data:n=>n===null?n:u().optional().parse(n)})}function it(){return f({req_id:u(),result:n=>n,error:u().optional()})}function at(){return f({slug:u(),status:u()})}function ct(){return f({status:u()})}function ut(){return f({button_id:n=>n==null?void 0:u().parse(n)})}function pt(){return f({data:u().optional()})}function ht(){return f({theme_params:n=>{const e=ge().optional();return Object.entries(K(n)).reduce((t,[r,s])=>(t[r]=e.parse(s),t),{})}})}function lt(){return f({height:V(),width:n=>n==null?window.innerWidth:V().parse(n),is_state_stable:E(),is_expanded:E()})}function dt(){return f({status:u()})}let be="https://web.telegram.org";const A=new Ge("[Bridge]",!1);function ft(n){if(n){A.enable();return}A.disable()}function gt(n){be=n}function _t(){return be}const bt=f({eventType:u(),eventData:n=>n});function wt(n,e){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:n,eventData:e})}))}function mt(){const n=window;"TelegramGameProxy_receiveEvent"in n||[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{let t=n;e.forEach((r,s,o)=>{if(s===o.length-1){t[r]=wt;return}r in t||(t[r]={}),t=t[r]})})}function yt(n){mt(),window.addEventListener("message",e=>{try{const{eventType:t,eventData:r}=bt.parse(e.data);n(t,r)}catch{}})}const Q="__telegram-cached-emitter__";function vt(){const n=new m,e=(t,...r)=>{A.log("Emitting processed event:",t,...r),n.emit(t,...r)};return window.addEventListener("resize",()=>{e("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),yt((t,r)=>{A.log("Received raw event:",t,r);try{switch(t){case"viewport_changed":return e(t,lt().parse(r));case"theme_changed":return e(t,ht().parse(r));case"popup_closed":return r==null?e(t,{}):e(t,ut().parse(r));case"set_custom_style":return e(t,u().parse(r));case"qr_text_received":return e(t,pt().parse(r));case"clipboard_text_received":return e(t,ot().parse(r));case"invoice_closed":return e(t,at().parse(r));case"phone_requested":return e("phone_requested",ct().parse(r));case"custom_method_invoked":return e("custom_method_invoked",it().parse(r));case"write_access_requested":return e("write_access_requested",dt().parse(r));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,r)}}catch(s){A.error("Error processing event:",s)}}),n}function we(){const n=window;return n[Q]===void 0&&(n[Q]=vt()),n[Q]}function X(n,e){we().off(n,e)}function O(n,e){return we().on(n,e),()=>X(n,e)}function k(n,e){return ie(n,e)<=0}function T(n,e,t){if(typeof t=="string"){if(n==="web_app_open_link"&&e==="try_instant_view")return k("6.4",t);if(n==="web_app_set_header_color"&&e==="color")return k("6.9",t)}switch(n){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 Ct(n){return(e,t)=>{if(!T(e,n))throw new st(e,n);if(D(t)){let r;if(e==="web_app_open_link"&&"try_instant_view"in t?r="try_instant_view":e==="web_app_set_header_color"&&"color"in t&&(r="color"),r&&!T(e,r,n))throw new Z(e,r,n)}return _(e,t)}}function Et(n){return"external"in n&&D(n.external)&&"notify"in n.external&&typeof n.external.notify=="function"}function kt(n){return"TelegramWebviewProxy"in n&&D(n.TelegramWebviewProxy)&&"postEvent"in n.TelegramWebviewProxy&&typeof n.TelegramWebviewProxy.postEvent=="function"}function me(){try{return window.self!==window.top}catch{return!0}}function _(n,e,t){let r={},s;e===void 0&&t===void 0?r={}:e!==void 0&&t!==void 0?(r=t,s=e):e!==void 0&&("targetOrigin"in e?r=e:s=e);const{targetOrigin:o=_t()}=r;if(A.log(`Calling method "${n}"`,s),me()){window.parent.postMessage(JSON.stringify({eventType:n,eventData:s}),o);return}if(Et(window)){window.external.notify(JSON.stringify({eventType:n,eventData:s}));return}if(kt(window)){window.TelegramWebviewProxy.postEvent(n,JSON.stringify(s));return}throw new Error("Unable to determine current environment and possible way to send event.")}function y(n,e,t,r){let s,o,i,c;typeof e=="string"||Array.isArray(e)?(i=Array.isArray(e)?e:[e],s=t):(o=e,i=Array.isArray(t)?t:[t],s=r),D(o)&&typeof o.req_id=="string"&&(c=o.req_id);const{postEvent:h=_,timeout:p}=s||{},d=s&&"capture"in s?s.capture:null,g=new Promise((C,F)=>{const J=i.map(S=>O(S,I=>{typeof c=="string"&&(!D(I)||I.req_id!==c)||typeof d=="function"&&!d(I)||(G(),C(I))})),G=()=>J.forEach(S=>S());try{h(n,o)}catch(S){G(),F(S)}});return typeof p=="number"?ce(g,p):g}function q(n,e){return t=>T(e[t],n)}function Pt(n,e){return t=>{const[r,s]=e[t];return T(r,s,n)}}class v{constructor(e,t){this.state=e,this.ee=t}emit(e,t){this.ee&&this.ee.emit(e,t)}internalSet(e,t){return this.state[e]===t?!1:(this.state[e]=t,this.emit(`${String(e)}Changed`,t),!0)}set(e,t){let r=!1;if(typeof e=="string")r=this.internalSet(e,t);else for(const s in e)this.internalSet(s,e[s])&&(r=!0);r&&this.emit("changed")}get(e){return this.state[e]}getState(){return{...this.state}}}class ye{constructor(e,t,r=_){a(this,"ee",new m);a(this,"state");a(this,"on",(e,t)=>e==="click"?O("back_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>{if(e==="click")return X("back_button_pressed",t);this.ee.off(e,t)});a(this,"supports");this.postEvent=r,this.state=new v({isVisible:e},this.ee),this.supports=q(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}}class ve{constructor(e,t=_){a(this,"ee",new m);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.postEvent=t,this.state=new v({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}}const St=et().of(u());function Ce(n,e){return n.reduce((t,r)=>(t[r]=e,t),{})}class Ee{constructor(e,t,r=_){a(this,"supports");this.createRequestId=t,this.postEvent=r,this.supports=q(e,{deleteKeys:"web_app_invoke_custom_method",getKeys:"web_app_invoke_custom_method",getValues:"web_app_invoke_custom_method",saveValue:"web_app_invoke_custom_method"})}async invokeCustomMethod(e,t,r={}){const{result:s,error:o}=await y("web_app_invoke_custom_method",{method:e,params:t,req_id:this.createRequestId()},"custom_method_invoked",{...r,postEvent:this.postEvent});if(o)throw new Error(typeof o=="string"?o:`Unknown error: ${JSON.stringify(o)}`);return s}async deleteKeys(e,t){e.length!==0&&await this.invokeCustomMethod("deleteStorageValues",{keys:e},t)}async getKeys(e){const t=await this.invokeCustomMethod("getStorageKeys",{},e);return St.parse(t)}async getValues(e,t){if(e.length===0)return Ce(e,"");const r=f(Ce(e,u())),s=await this.invokeCustomMethod("getStorageValues",{keys:e},t);return r.parse(s)}async saveValue(e,t,r){await this.invokeCustomMethod("saveStorageValue",{key:e,value:t},r)}}class ke{constructor(e,t=_){a(this,"supports");this.postEvent=t,this.supports=q(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"})}}class Pe{constructor(e,t,r={}){a(this,"state");const{chat:s=null,canSendAfter:o=null,chatType:i=null,chatInstance:c=null,user:h=null,queryId:p=null,receiver:d=null,startParam:g=null}=r;this.state=new v({authDate:e,canSendAfter:o===null?null:new Date(e.getTime()+o*1e3),chat:s,chatType:i,chatInstance:c,user:h,queryId:p,receiver:d,startParam:g,hash:t})}get authDate(){return this.state.get("authDate")}get canSendAfter(){return this.state.get("canSendAfter")}get chat(){return this.state.get("chat")}get chatType(){return this.state.get("chatType")}get chatInstance(){return this.state.get("chatInstance")}get hash(){return this.state.get("hash")}get queryId(){return this.state.get("queryId")}get receiver(){return this.state.get("receiver")}get startParam(){return this.state.get("startParam")}get user(){return this.state.get("user")}}class Se{constructor(e,t,r,s,o,i,c=_){a(this,"ee",new m);a(this,"state");a(this,"on",(e,t)=>e==="click"?O("main_button_pressed",t):this.ee.on(e,t));a(this,"off",(e,t)=>{if(e==="click")return X("main_button_pressed",t);this.ee.off(e,t)});this.postEvent=c,this.state=new v({backgroundColor:e,isEnabled:t,isVisible:r,isProgressVisible:s,text:o,textColor:i},this.ee)}set isEnabled(e){this.state.set("isEnabled",e),this.commit()}get isEnabled(){return this.state.get("isEnabled")}set isProgressVisible(e){this.state.set("isProgressVisible",e),this.commit()}get isProgressVisible(){return this.state.get("isProgressVisible")}set isVisible(e){this.state.set("isVisible",e),this.commit()}get isVisible(){return this.state.get("isVisible")}commit(){this.text!==""&&this.postEvent("web_app_setup_main_button",{is_visible:this.isVisible,is_active:this.isEnabled,is_progress_visible:this.isProgressVisible,text:this.text,color:this.backgroundColor,text_color:this.textColor})}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}hideProgress(){return this.isProgressVisible=!1,this}show(){return this.isVisible=!0,this}showProgress(){return this.isProgressVisible=!0,this}setText(e){return this.state.set("text",e),this.commit(),this}setTextColor(e){return this.state.set("textColor",e),this.commit(),this}setBackgroundColor(e){return this.state.set("backgroundColor",e),this.commit(),this}}function $t(n){const e=n.message.trim(),t=(n.title||"").trim(),r=n.buttons||[];let s;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(r.length>3)throw new Error(`Buttons have incorrect size: ${r.length}`);return r.length===0?s=[{type:"close",id:""}]:s=r.map(o=>{const{id:i=""}=o;if(i.length>64)throw new Error(`Button ID has incorrect size: ${i}`);if(o.type===void 0||o.type==="default"||o.type==="destructive"){const c=o.text.trim();if(c.length===0||c.length>64){const h=o.type||"default";throw new Error(`Button text with type "${h}" has incorrect size: ${o.text.length}`)}return{...o,text:c,id:i}}return{...o,id:i}}),{title:t,message:e,buttons:s}}class $e{constructor(e,t=_){a(this,"ee",new m);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new v({isOpened:!1},this.ee),this.supports=q(e,{open:"web_app_open_popup"})}get isOpened(){return this.state.get("isOpened")}async open(e){if(this.isOpened)throw new Error("Popup is already opened.");this.state.set("isOpened",!0);try{const{button_id:t=null}=await y("web_app_open_popup",$t(e),"popup_closed",{postEvent:this.postEvent});return t}finally{this.state.set("isOpened",!1)}}}class xe{constructor(e,t=_){a(this,"ee",new m);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");this.postEvent=t,this.state=new v({isOpened:!1},this.ee),this.supports=q(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 y("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}}}function xt(n){return n.replace(/(^|_)bg/,(e,t)=>`${t}background`).replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function Vt(n){return n.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`).replace(/(^|_)background/,(e,t)=>`${t}bg`)}const Ve=x(n=>{const e=ge().optional();return Object.entries(K(n)).reduce((t,[r,s])=>(t[xt(r)]=e.parse(s),t),{})},"ThemeParams");function Ae(n){return Ve().parse(n)}function At(n){return JSON.stringify(Object.entries(n).reduce((e,[t,r])=>(r&&(e[Vt(t)]=r),e),{}))}class L{constructor(e){a(this,"ee",new m);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.state=new v(e,this.ee)}static async request(e={}){const{timeout:t=1e3,...r}=e,s=await y("web_app_request_theme","theme_changed",{...r,timeout:t});return Ae(s.theme_params)}static sync(e){O("theme_changed",t=>{e.state.set(Ae(t.theme_params))})}static async synced(e){const t=await this.request(e),r=new L(t);return this.sync(r),r}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)||null}getState(){return this.state.getState()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return this.backgroundColor===null||he(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")}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}function W(n){return n<0?0:n}class B{constructor(e,t,r,s,o=_){a(this,"ee",new m);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));this.postEvent=o,this.state=new v({height:W(e),isExpanded:s,stableHeight:W(r),width:W(t)},this.ee)}static async request(e={}){const{timeout:t=1e3,...r}=e,{is_expanded:s,is_state_stable:o,...i}=await y("web_app_request_viewport","viewport_changed",{...r,timeout:t});return{...i,isExpanded:s,isStateStable:o}}static sync(e){O("viewport_changed",t=>{const{height:r,width:s,is_expanded:o,is_state_stable:i}=t,c=W(r);e.state.set({height:c,isExpanded:o,width:W(s),stableHeight:i?c:void 0})})}static async synced(e={}){const{height:t,isExpanded:r,width:s}=await this.request(e),o=new B(t,s,t,r,e.postEvent);return this.sync(o),o}get height(){return this.state.get("height")}get stableHeight(){return this.state.get("stableHeight")}get isExpanded(){return this.state.get("isExpanded")}get width(){return this.state.get("width")}expand(){this.state.set("isExpanded",!0),this.postEvent("web_app_expand")}get isStable(){return this.stableHeight===this.height}}function j(n){const e=document.createElement("a");if(e.href=n,e.protocol!=="http:"&&e.protocol!=="https:")throw Error(`URL protocol is not supported by OS, or link has not allowed protocol: ${e.protocol}`);return e.href}class Oe{constructor(e,t,r,s,o,i=_){a(this,"ee",new m);a(this,"state");a(this,"on",this.ee.on.bind(this.ee));a(this,"off",this.ee.off.bind(this.ee));a(this,"supports");a(this,"supportsParam");this.currentVersion=r,this.currentPlatform=s,this.createRequestId=o,this.postEvent=i,this.state=new v({backgroundColor:t,headerColor:e},this.ee),this.supports=q(r,{openInvoice:"web_app_open_invoice",readTextFromClipboard:"web_app_read_text_from_clipboard",setHeaderColor:"web_app_set_header_color",setBackgroundColor:"web_app_set_background_color",requestPhoneAccess:"web_app_request_phone",requestWriteAccess:"web_app_request_write_access"}),this.supportsParam=Pt(r,{"setHeaderColor.color":["web_app_set_header_color","color"],"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}get backgroundColor(){return this.state.get("backgroundColor")}get colorScheme(){return he(this.backgroundColor)?"dark":"light"}close(){this.postEvent("web_app_close")}get headerColor(){return this.state.get("headerColor")}isVersionAtLeast(e){return ie(e,this.version)>=0}openLink(e,t){const r=j(e);if(!T("web_app_open_link",this.version)){window.open(r,"_blank");return}return this.postEvent("web_app_open_link",{url:r,...typeof t=="boolean"?{try_instant_view:t}:{}})}openTelegramLink(e){const{hostname:t,pathname:r,search:s}=new URL(j(e));if(t!=="t.me")throw new Error(`URL has not allowed hostname: ${t}. Only "t.me" is allowed`);if(!T("web_app_open_tg_link",this.version)){window.location.href=e;return}return this.postEvent("web_app_open_tg_link",{path_full:r+s})}async openInvoice(e){const{hostname:t,pathname:r}=new URL(j(e));if(t!=="t.me")throw new Error(`Incorrect hostname: ${t}`);const s=r.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(s===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/slug" or "/$slug"');const[,,o]=s;return(await y("web_app_open_invoice",{slug:o},"invoice_closed",{postEvent:this.postEvent,capture:({slug:c})=>o===c})).status}get platform(){return this.currentPlatform}ready(){this.postEvent("web_app_ready")}async readTextFromClipboard(){const{data:e=null}=await y("web_app_read_text_from_clipboard",{req_id:this.createRequestId()},"clipboard_text_received",{postEvent:this.postEvent});return e}async requestPhoneAccess(){const{status:e}=await y("web_app_request_phone","phone_requested",{postEvent:this.postEvent});return e}async requestWriteAccess(){const{status:e}=await y("web_app_request_write_access","write_access_requested",{postEvent:this.postEvent});return e}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",ue(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)}get version(){return this.currentVersion}}class Y extends Error{constructor(e,t){super(`Method "${e}" is not supported in the Mini Apps version ${t}.`),Object.setPrototypeOf(this,Y.prototype)}}class ee extends Error{constructor(e,t,r){super(`Parameter "${t}" in method "${e}" is not supported in the Mini Apps version ${r}.`),Object.setPrototypeOf(this,ee.prototype)}}function Ot(){return f({id:V(),type:u(),title:u(),photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"Chat")}function Te(){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:V(),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 Tt(){return _e({authDate:{type:nt(),from:"auth_date"},canSendAfter:{type:V().optional(),from:"can_send_after"},chat:Ot().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:Te().optional(),startParam:{type:u().optional(),from:"start_param"},user:Te().optional()},"InitData")}function qt(n){const{initDataRaw:e,themeParams:t,platform:r,version:s,showSettings:o,botInline:i}=n,c=new URLSearchParams;return e&&c.set("tgWebAppData",e),c.set("tgWebAppPlatform",r),c.set("tgWebAppThemeParams",At(t)),c.set("tgWebAppVersion",s),typeof o=="boolean"&&c.set("tgWebAppShowSettings",o?"1":"0"),typeof i=="boolean"&&c.set("tgWebAppBotInline",i?"1":"0"),c.toString()}function Bt(){return _e({botInline:{type:E().optional(),from:"tgWebAppBotInline"},initData:{type:Tt().optional(),from:"tgWebAppData"},initDataRaw:{type:u().optional(),from:"tgWebAppData"},platform:{type:u(),from:"tgWebAppPlatform"},showSettings:{type:E().optional(),from:"tgWebAppShowSettings"},themeParams:{type:Ve(),from:"tgWebAppThemeParams"},version:{type:u(),from:"tgWebAppVersion"}},"LaunchParams")}function z(n){return Bt().parse(n)}const qe="telegram-mini-apps-launch-params";function It(){const n=sessionStorage.getItem(qe);return n?z(n):null}function Dt(n){sessionStorage.setItem(qe,qt(n))}function Lt(){return z(window.location.hash.slice(1))}function Be(){return performance.getEntriesByType("navigation")[0]||null}function Wt(){const n=Be();if(!n)throw new Error("Unable to get first navigation entry.");const e=n.name.match(/#(.*)/);if(!e)throw new Error("First navigation entry does not contain hash part.");return z(e[1])}function Rt(){try{return Wt()}catch{}try{return Lt()}catch{}return null}function Mt(){const n=Be();return n?n.type==="reload":null}function Nt(){try{return window.self!==window.top}catch{return!0}}function Ht(n={}){const{previousLaunchParams:e=It(),currentLaunchParams:t=Rt()}=n,r=Mt();if(e){if(t)return{launchParams:t,isPageReload:Nt()?r||e.initDataRaw===t.initDataRaw:!0};if(r)return{launchParams:e,isPageReload:r};throw new Error("Unable to retrieve current launch parameters, which must exist.")}if(t)return{launchParams:t,isPageReload:!1};throw new Error("Unable to retrieve any launch parameters.")}const Ie="tmajsLaunchData";function De(n){const e=window[Ie];if(e)return e;const t=Ht(n);return window[Ie]=t,Dt(t.launchParams),t}function Le(n,e){document.documentElement.style.setProperty(n,e)}function te(n,e){e!==null&&Le(n,e)}function We(n,e){Le(n,`${e}px`)}function Ut(n,e){const{backgroundColor:t,secondaryBackgroundColor:r}=e,{backgroundColor:s,headerColor:o}=n;te("--tg-bg-color",s),te("--tg-header-color",o==="bg_color"?t:r)}function jt(n){const e=()=>{const t=n.getState();Object.entries(t).forEach(([r,s])=>{const o=r.replace(/[A-Z]/g,i=>`-${i.toLowerCase()}`);te(`--tg-theme-${o}`,s||null)})};n.on("changed",e),e()}function zt(n,e){const t=()=>Ut(n,e);e.on("changed",t),n.on("backgroundColorChanged",t),n.on("headerColorChanged",t),t()}function Ft(n){const e=()=>{We("--tg-viewport-height",n.height)},t=()=>{We("--tg-viewport-stable-height",n.stableHeight)};n.on("heightChanged",e),n.on("stableHeightChanged",t),e(),t()}function Jt(n){return typeof n=="boolean"?n?{themeParams:!0,viewport:!0,webApp:!0}:{}:n}function Re(n){return`telegram-mini-apps-${n}`}function R(n,e){sessionStorage.setItem(Re(n),JSON.stringify(e))}function M(n){const e=sessionStorage.getItem(Re(n));return e?JSON.parse(e):null}function Gt(n,e,t){const{isVisible:r=!1}=n?M("back-button")||{}:{},s=new ye(r,e,t);return s.on("isVisibleChanged",()=>{R("back-button",{isVisible:s.isVisible})}),s}function Kt(n,e){const{isConfirmationNeeded:t=!1}=n?M("closing-behavior")||{}:{},r=new ve(t,e);return r.on("isConfirmationNeededChanged",()=>R("closing-behavior",{isConfirmationNeeded:r.isConfirmationNeeded})),r}function Zt(n,e,t,r){const{backgroundColor:s=e,isEnabled:o=!1,isVisible:i=!1,isProgressVisible:c=!1,textColor:h=t,text:p=""}=n?M("main-button")||{}:{},d=new Se(s,o,i,c,p,h,r),g=()=>R("main-button",{backgroundColor:d.backgroundColor,isEnabled:d.isEnabled,isVisible:d.isVisible,isProgressVisible:d.isProgressVisible,text:d.text,textColor:d.textColor});return d.on("backgroundColorChanged",g),d.on("isEnabledChanged",g),d.on("isVisibleChanged",g),d.on("isProgressVisibleChanged",g),d.on("textColorChanged",g),d.on("textChanged",g),d}function Qt(){let n=0;return()=>(n+=1,n.toString())}function Xt(n){const e=new L(n);return L.sync(e),e}async function Yt(n,e,t){const{height:r=window.innerHeight,stableHeight:s=window.innerHeight,width:o=window.innerWidth,isExpanded:i=!1}=n?M("viewport")||{}:{},h=e==="macos"||e==="web"?(()=>{const d=new B(r,o,s,i,t);return B.sync(d),d})():await B.synced({postEvent:t}),p=()=>R("viewport",{height:h.height,isExpanded:h.isExpanded,stableHeight:h.stableHeight,width:h.width});return h.on("heightChanged",p),h.on("isExpandedChanged",p),h.on("stableHeightChanged",p),h.on("widthChanged",p),h}function en(n,e,t,r,s,o){const{backgroundColor:i=e,headerColor:c="bg_color"}=n?M("web-app")||{}:{},h=new Oe(c,i,t,r,s,o),p=()=>R("web-app",{backgroundColor:h.backgroundColor,headerColor:h.headerColor});return h.on("backgroundColorChanged",p),h.on("headerColorChanged",p),h}async function tn(n={}){const{checkCompat:e=!0,cssVars:t=!1,acceptScrollbarStyle:r=!0,acceptCustomStyles:s=r,targetOrigin:o,launchParams:i,debug:c=!1}=n;c&&ft(c),typeof o=="string"&&gt(o);const{launchParams:h,isPageReload:p}=De({currentLaunchParams:typeof i=="string"||i instanceof URLSearchParams?z(i):i}),{initData:d,initDataRaw:g,version:C,platform:F,themeParams:J}=h,{backgroundColor:G="#ffffff",buttonColor:S="#000000",buttonTextColor:I="#ffffff"}=J,Ne=Qt(),b=e?Ct(C):_,ne=Xt(J),He=en(p,G,C,F,Ne,b),{themeParams:sn,viewport:on,webApp:an}=Jt(t);an&&zt(He,ne),sn&&jt(ne);const Ue=await Yt(p,F,b);if(on&&Ft(Ue),s&&me()){const N=document.createElement("style");N.id="telegram-custom-styles",document.head.appendChild(N),O("set_custom_style",se=>{N.innerHTML=se}),b("iframe_ready")}const re={backButton:Gt(p,C,b),closingBehavior:Kt(p,b),cloudStorage:new Ee(C,Ne,b),haptic:new ke(C,b),mainButton:Zt(p,S,I,b),popup:new $e(C,b),postEvent:b,qrScanner:new xe(C,b),themeParams:ne,viewport:Ue,webApp:He};if(d!==void 0){const{authDate:N,hash:se,...cn}=d;re.initData=new Pe(N,se,cn),re.initDataRaw=g}return re}function nn(n={}){return ce(tn(n),n.timeout||1e3)}function Me(){try{return De(),!0}catch{return!1}}function rn(){return Me()}return l.BackButton=ye,l.ClosingBehaviour=ve,l.CloudStorage=Ee,l.HapticFeedback=ke,l.InitData=Pe,l.MainButton=Se,l.MethodNotSupportedError=Y,l.ParameterUnsupportedError=ee,l.Popup=$e,l.QRScanner=xe,l.ThemeParams=L,l.Viewport=B,l.WebApp=Oe,l.formatURL=j,l.init=nn,l.isTMA=Me,l.isTWA=rn,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l}({});
1
+ var ar=Object.defineProperty;var cr=(a,w,C)=>w in a?ar(a,w,{enumerable:!0,configurable:!0,writable:!0,value:C}):a[w]=C;var o=(a,w,C)=>(cr(a,typeof w!="symbol"?w+"":w,C),C);this.tmajs=this.tmajs||{};this.tmajs.sdk=function(a){"use strict";function w(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function C(){return performance.getEntriesByType("navigation")[0]||null}function Xt(){const r=C();return r?r.type==="reload":null}function T(){return new TypeError("Value has unexpected type")}class G extends Error{constructor(e,{cause:n,type:s}={}){super(`Unable to parse value${s?` as ${s}`:""}`,{cause:n});o(this,"type");this.value=e,Object.setPrototypeOf(this,G.prototype),this.type=s}}class F{constructor(t,e,n){this.parser=t,this.isOptional=e,this.type=n}parse(t){if(!(this.isOptional&&t===void 0))try{return this.parser(t)}catch(e){throw new G(t,{type:this.type,cause:e})}}optional(){return this.isOptional=!0,this}}function te(r){if(Array.isArray(r))return r;if(typeof r=="string")try{const t=JSON.parse(r);if(Array.isArray(t))return t}catch{}throw T()}class ee extends F{constructor(e,n,s){super(te,n,s);o(this,"itemParser");this.itemParser=typeof e=="function"?e:e.parse.bind(e)}parse(e){const n=super.parse(e);return n===void 0?n:n.map(this.itemParser)}of(e){return this.itemParser=typeof e=="function"?e:e.parse.bind(e),this}}function V(r,t){return()=>new F(r,!1,t)}class z extends Error{constructor(t,{cause:e,type:n}={}){super(`Unable to parse field "${t}"${n?` as ${n}`:""}`,{cause:e}),Object.setPrototypeOf(this,z.prototype)}}function gt(r,t){const e={};for(const n in r){const s=r[n];if(!s)continue;let i,c;if(typeof s=="function"||"parse"in s)i=n,c=typeof s=="function"?s:s.parse.bind(s);else{const{type:d}=s;i=s.from||n,c=typeof d=="function"?d:d.parse.bind(d)}let h;const p=t(i);try{h=c(p)}catch(d){throw d instanceof G?new z(i,{type:d.type,cause:d}):new z(i,{cause:d})}h!==void 0&&(e[n]=h)}return e}function re(r){return new ee(t=>t,!1,r)}const v=V(r=>{if(typeof r=="boolean")return r;const t=String(r);if(t==="1"||t==="true")return!0;if(t==="0"||t==="false")return!1;throw T()},"boolean"),$=V(r=>{if(typeof r=="number")return r;if(typeof r=="string"){const t=Number(r);if(!Number.isNaN(t))return t}throw T()},"number"),ne=$(),se=V(r=>r instanceof Date?r:new Date(ne.parse(r)*1e3),"Date");function K(r){let t=r;if(typeof t=="string"&&(t=JSON.parse(t)),typeof t!="object"||t===null||Array.isArray(t))throw T();return t}function _(r,t){return new F(e=>{const n=K(e);return gt(r,s=>n[s])},!1,t)}function Y(r){return/^#[\da-f]{6}$/i.test(r)}function wt(r){return/^#[\da-f]{3}$/i.test(r)}function X(r){const t=r.replace(/\s/g,"").toLowerCase();if(Y(t))return t;if(wt(t)){let n="#";for(let s=0;s<3;s+=1)n+=t[1+s].repeat(2);return n}const e=t.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||t.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),\d{1,3}\)$/);if(e===null)throw new Error(`Value "${r}" does not satisfy any of known RGB formats.`);return e.slice(1).reduce((n,s)=>{const i=parseInt(s,10).toString(16);return n+(i.length===1?"0":"")+i},"#")}function tt(r){const t=X(r);return Math.sqrt([.299,.587,.114].reduce((n,s,i)=>{const c=parseInt(t.slice(1+i*2,1+(i+1)*2),16);return n+c*c*s},0))<120}const u=V(r=>{if(typeof r=="string"||typeof r=="number")return r.toString();throw T()},"string"),ie=u(),_t=V(r=>X(ie.parse(r)),"rgb");function bt(r,t){return new F(e=>{if(typeof e!="string"&&!(e instanceof URLSearchParams))throw T();const n=typeof e=="string"?new URLSearchParams(e):e;return gt(r,s=>{const i=n.get(s);return i===null?void 0:i})},!1,t)}function mt(){return _({id:$(),type:u(),title:u(),photoUrl:{type:u().optional(),from:"photo_url"},username:u().optional()},"Chat")}class yt{constructor(t){this.initData=t}get authDate(){return this.initData.authDate}get canSendAfter(){return this.initData.canSendAfter}get canSendAfterDate(){const{canSendAfter:t}=this;return t===void 0?void 0:new Date(this.authDate.getTime()+t*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 et(){return _({addedToAttachmentMenu:{type:v().optional(),from:"added_to_attachment_menu"},allowsWriteToPm:{type:v().optional(),from:"allows_write_to_pm"},firstName:{type:u(),from:"first_name"},id:$(),isBot:{type:v().optional(),from:"is_bot"},isPremium:{type:v().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 rt(){return bt({authDate:{type:se(),from:"auth_date"},canSendAfter:{type:$().optional(),from:"can_send_after"},chat:mt().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:et().optional(),startParam:{type:u().optional(),from:"start_param"},user:et().optional()},"InitData")}function oe(r){return rt().parse(r)}function ae(r){return r.replace(/(^|_)bg/,(t,e)=>`${e}background`).replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function ce(r){return r.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/(^|_)background/,(t,e)=>`${e}bg`)}const he=_t().optional(),nt=V(r=>Object.entries(K(r)).reduce((t,[e,n])=>(t[ae(e)]=he.parse(n),t),{}),"ThemeParams");function st(r){return nt().parse(r)}function ue(r={}){return m("web_app_request_theme","theme_changed",r).then(st)}function Et(r){return JSON.stringify(Object.entries(r).reduce((t,[e,n])=>(n&&(t[ce(e)]=n),t),{}))}class b{constructor(){o(this,"listeners",new Map);o(this,"subscribeListeners",[])}addListener(t,e,n){let s=this.listeners.get(t);return s||(s=[],this.listeners.set(t,s)),s.push([e,n]),()=>this.off(t,e)}emit(t,...e){this.subscribeListeners.forEach(s=>s(t,...e));const n=this.listeners.get(t);n&&n.forEach(([s,i],c)=>{s(...e),i&&n.splice(c,1)})}on(t,e){return this.addListener(t,e,!1)}once(t,e){return this.addListener(t,e,!0)}off(t,e){const n=this.listeners.get(t);if(n){for(let s=0;s<n.length;s+=1)if(e===n[s][0]){n.splice(s,1);return}}}subscribe(t){return this.subscribeListeners.push(t),()=>this.unsubscribe(t)}unsubscribe(t){for(let e=0;e<this.subscribeListeners.length;e+=1)if(this.subscribeListeners[e]===t){this.subscribeListeners.splice(e,1);return}}}class y{constructor(t,e){this.state=t,this.ee=e}internalSet(t,e){return this.state[t]===e||e===void 0?!1:(this.state[t]=e,this.ee.emit(`change:${t}`,e),!0)}clone(){return{...this.state}}set(t,e){let n=!1;if(typeof t=="string")n=this.internalSet(t,e);else for(const s in t)this.internalSet(s,t[s])&&(n=!0);n&&this.ee.emit("change")}get(t){return this.state[t]}}class Ct{constructor(t){o(this,"ee",new b);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.state=new y(t,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(t){return this.state.get(t)}getState(){return this.state.clone()}get headerBackgroundColor(){return this.get("headerBackgroundColor")}get hintColor(){return this.get("hintColor")}get isDark(){return!this.backgroundColor||tt(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 E("theme_changed",t=>{this.state.set(st(t.theme_params))})}get subtitleTextColor(){return this.get("subtitleTextColor")}get textColor(){return this.get("textColor")}}function it(){return bt({botInline:{type:v().optional(),from:"tgWebAppBotInline"},initData:{type:rt().optional(),from:"tgWebAppData"},initDataRaw:{type:u().optional(),from:"tgWebAppData"},platform:{type:u(),from:"tgWebAppPlatform"},showSettings:{type:v().optional(),from:"tgWebAppShowSettings"},themeParams:{type:nt(),from:"tgWebAppThemeParams"},version:{type:u(),from:"tgWebAppVersion"}},"LaunchParams")}function ot(r){return it().parse(r)}function pe(){return ot(window.location.hash.slice(1))}function le(){const r=C();if(!r)throw new Error("Unable to get first navigation entry.");const t=r.name.match(/#(.*)/);if(!t)throw new Error("First navigation entry does not contain hash part.");return ot(t[1])}function de(){try{return le()}catch{}try{return pe()}catch{}return null}function vt(r){const{initDataRaw:t,themeParams:e,platform:n,version:s,showSettings:i,botInline:c}=r,h=new URLSearchParams;return t&&h.set("tgWebAppData",t),h.set("tgWebAppPlatform",n),h.set("tgWebAppThemeParams",Et(e)),h.set("tgWebAppVersion",s),typeof i=="boolean"&&h.set("tgWebAppShowSettings",i?"1":"0"),typeof c=="boolean"&&h.set("tgWebAppBotInline",c?"1":"0"),h.toString()}const Pt="telegram-mini-apps-launch-params";function fe(){const r=sessionStorage.getItem(Pt);return r?it().parse(r):null}function ge(r){sessionStorage.setItem(Pt,vt(r))}function we(){try{return window.self!==window.top}catch{return!0}}function _e(){const r=fe(),t=de(),e=Xt();if(r){if(t)return{launchParams:t,isPageReload:we()?e||r.initDataRaw===t.initDataRaw:!0};if(e)return{launchParams:r,isPageReload:e};throw new Error("Unable to retrieve current launch parameters, which must exist.")}if(t)return{launchParams:t,isPageReload:!1};throw new Error("Unable to retrieve any launch parameters.")}const kt="tmajsLaunchData";function at(){const r=window[kt];if(r)return r;const t=_e();return window[kt]=t,ge(t.launchParams),t}function be(){try{return at(),!0}catch{return!1}}function me(r){return"external"in r&&w(r.external)&&"notify"in r.external&&typeof r.external.notify=="function"}function ye(r){return"TelegramWebviewProxy"in r&&w(r.TelegramWebviewProxy)&&"postEvent"in r.TelegramWebviewProxy&&typeof r.TelegramWebviewProxy.postEvent=="function"}function ct(){try{return window.self!==window.top}catch{return!0}}class J extends Error{constructor(t,e){super(`Method "${t}" is unsupported in the Mini Apps version ${e}.`),Object.setPrototypeOf(this,J.prototype)}}class Q extends Error{constructor(t,e,n){super(`Parameter "${e}" in method "${t}" is unsupported in the Mini Apps version ${n}.`),Object.setPrototypeOf(this,Q.prototype)}}class St{constructor(t,e){this.prefix=t,this.enabled=e}print(t,...e){if(!this.enabled)return;const n=new Date,s=Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,timeZone:"UTC"}).format(n);console[t](`[${s}]`,this.prefix,...e)}disable(){this.enabled=!1}error(...t){this.print("error",...t)}enable(){this.enabled=!0}log(...t){this.print("log",...t)}warn(...t){this.print("warn",...t)}}let At="https://web.telegram.org";const I=new St("[SDK]",!1);function Ee(r){if(r){I.enable();return}I.disable()}function Ce(r){At=r}function ve(){return At}const Pe=_({eventType:u(),eventData:r=>r});function ke(r,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:r,eventData:t})}))}function Se(){const r=window;"TelegramGameProxy_receiveEvent"in r||[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(t=>{let e=r;t.forEach((n,s,i)=>{if(s===i.length-1){e[n]=ke;return}n in e||(e[n]={}),e=e[n]})})}function Ae(r){Se(),window.addEventListener("message",t=>{try{const{eventType:e,eventData:n}=Pe.parse(t.data);r(e,n)}catch{}})}function qe(){return _({req_id:u(),data:r=>r===null?r:u().optional().parse(r)})}function Le(){return _({req_id:u(),result:r=>r,error:u().optional()})}function Te(){return _({slug:u(),status:u()})}function Ve(){return _({status:u()})}function $e(){return _({button_id:r=>r==null?void 0:u().parse(r)})}function Ie(){return _({data:u().optional()})}function Re(){return _({theme_params:r=>{const t=_t().optional();return Object.entries(K(r)).reduce((e,[n,s])=>(e[n]=t.parse(s),e),{})}})}function Be(){return _({height:$(),width:r=>r==null?window.innerWidth:$().parse(r),is_state_stable:v(),is_expanded:v()})}function De(){return _({status:u()})}function xe(){const r=new b,t=(e,...n)=>{I.log("Emitting processed event:",e,...n),r.emit(e,...n)};return window.addEventListener("resize",()=>{t("viewport_changed",{width:window.innerWidth,height:window.innerHeight,is_state_stable:!0,is_expanded:!0})}),Ae((e,n)=>{I.log("Received raw event:",e,n);try{switch(e){case"viewport_changed":return t(e,Be().parse(n));case"theme_changed":return t(e,Re().parse(n));case"popup_closed":return n==null?t(e,{}):t(e,$e().parse(n));case"set_custom_style":return t(e,u().parse(n));case"qr_text_received":return t(e,Ie().parse(n));case"clipboard_text_received":return t(e,qe().parse(n));case"invoice_closed":return t(e,Te().parse(n));case"phone_requested":return t("phone_requested",Ve().parse(n));case"custom_method_invoked":return t("custom_method_invoked",Le().parse(n));case"write_access_requested":return t("write_access_requested",De().parse(n));case"main_button_pressed":case"back_button_pressed":case"settings_button_pressed":case"scan_qr_popup_closed":case"reload_iframe":return t(e);default:return t(e,n)}}catch(s){I.error("Error processing event:",s)}}),r}const ht="telegram-mini-apps-cached-emitter";function D(){const r=window;return r[ht]===void 0&&(r[ht]=xe()),r[ht]}function R(r,t){D().off(r,t)}function E(r,t){return D().on(r,t),()=>R(r,t)}function He(r,t){return D().once(r,t),()=>R(r,t)}function qt(r){D().unsubscribe(r)}function Ne(r){return D().subscribe(r),()=>qt(r)}function Lt(r,t){const e=r.split("."),n=t.split("."),s=Math.max(e.length,n.length);for(let i=0;i<s;i+=1){const c=parseInt(e[i]||"0",10),h=parseInt(n[i]||"0",10);if(c!==h)return c>h?1:-1}return 0}function P(r,t){return Lt(r,t)<=0}function L(r,t,e){if(typeof e=="string"){if(r==="web_app_open_link"&&t==="try_instant_view")return P("6.4",e);if(r==="web_app_set_header_color"&&t==="color")return P("6.9",e)}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 P("6.1",t);case"web_app_open_popup":return P("6.2",t);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return P("6.4",t);case"web_app_switch_inline_query":return P("6.7",t);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return P("6.9",t);case"web_app_setup_settings_button":return P("6.10",t);default:return!0}}function k(r,t){return e=>L(t[e],r)}function Tt(r,t){return e=>{const[n,s]=t[e];return L(n,s,r)}}function g(r,t,e){let n={},s;t===void 0&&e===void 0?n={}:t!==void 0&&e!==void 0?(n=e,s=t):t!==void 0&&("targetOrigin"in t?n=t:s=t);const{targetOrigin:i=ve()}=n;if(I.log(`Calling method "${r}"`,s),ct()){window.parent.postMessage(JSON.stringify({eventType:r,eventData:s}),i);return}if(me(window)){window.external.notify(JSON.stringify({eventType:r,eventData:s}));return}if(ye(window)){window.TelegramWebviewProxy.postEvent(r,JSON.stringify(s));return}throw new Error("Unable to determine current environment and possible way to send event.")}function Vt(r){return(t,e)=>{if(!L(t,r))throw new J(t,r);if(w(e)){let n;if(t==="web_app_open_link"&&"try_instant_view"in e?n="try_instant_view":t==="web_app_set_header_color"&&"color"in e&&(n="color"),n&&!L(t,n,r))throw new Q(t,n,r)}return g(t,e)}}class ut extends Error{constructor(t){super(`Async call timeout exceeded. Timeout: ${t}`),Object.setPrototypeOf(this,ut.prototype)}}function $t(r){return new Promise((t,e)=>{setTimeout(e,r,new ut(r))})}function Oe(r,t){return typeof r=="function"?(...e)=>Promise.race([r(...e),$t(t)]):Promise.race([r,$t(t)])}function m(r,t,e,n){let s,i,c,h;typeof t=="string"||Array.isArray(t)?(c=Array.isArray(t)?t:[t],s=e):(i=t,c=Array.isArray(e)?e:[e],s=n),w(i)&&typeof i.req_id=="string"&&(h=i.req_id);const{postEvent:p=g,timeout:d}=s||{},l=s&&"capture"in s?s.capture:null,A=new Promise((f,q)=>{const B=c.map(j=>E(j,Z=>{typeof h=="string"&&(!w(Z)||Z.req_id!==h)||typeof l=="function"&&!l(Z)||(U(),f(Z))})),U=()=>B.forEach(j=>j());try{p(r,i)}catch(j){U(),q(j)}});return typeof d=="number"?Oe(A,d):A}class It{constructor(t,e,n=g){o(this,"ee",new b);o(this,"state");o(this,"on",(t,e)=>t==="click"?E("back_button_pressed",e):this.ee.on(t,e));o(this,"off",(t,e)=>t==="click"?R("back_button_pressed",e):this.ee.off(t,e));o(this,"supports");this.postEvent=n,this.state=new y({isVisible:t},this.ee),this.supports=k(e,{show:"web_app_setup_back_button",hide:"web_app_setup_back_button"})}set isVisible(t){this.state.set("isVisible",t),this.postEvent("web_app_setup_back_button",{is_visible:t})}get isVisible(){return this.state.get("isVisible")}hide(){this.isVisible=!1}show(){this.isVisible=!0}}function Rt(r,t){return r+(r.length>0&&t.length>0?` ${t}`:t)}function Bt(...r){return r.reduce((t,e)=>{let n="";return typeof e=="string"?n=e:typeof e=="object"&&e!==null&&(n=Object.entries(e).reduce((s,[i,c])=>c?Rt(s,i):s,"")),Rt(t,n)},"")}function Me(r){return typeof r=="object"&&r!==null&&!Array.isArray(null)}function We(...r){return r.reduce((t,e)=>(Me(e)&&Object.entries(e).forEach(([n,s])=>{const i=Bt(t[n],s);i.length>0&&(t[n]=i)}),t),{})}class Dt{constructor(t,e=g){o(this,"ee",new b);o(this,"state");o(this,"on",this.ee.on.bind(this.ee));o(this,"off",this.ee.off.bind(this.ee));this.postEvent=e,this.state=new y({isConfirmationNeeded:t},this.ee)}set isConfirmationNeeded(t){this.state.set("isConfirmationNeeded",t),this.postEvent("web_app_setup_closing_behavior",{need_confirmation:t})}get isConfirmationNeeded(){return this.state.get("isConfirmationNeeded")}disableConfirmation(){this.isConfirmationNeeded=!1}enableConfirmation(){this.isConfirmationNeeded=!0}}const Ue=re().of(u());function xt(r,t){return r.reduce((e,n)=>(e[n]=t,e),{})}class Ht{constructor(t,e,n=g){o(this,"supports");this.createRequestId=e,this.postEvent=n,this.supports=k(t,{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 invokeCustomMethod(t,e,n={}){const{result:s,error:i}=await m("web_app_invoke_custom_method",{method:t,params:e,req_id:this.createRequestId()},"custom_method_invoked",{...n,postEvent:this.postEvent});if(i)throw new Error(i);return s}async delete(t,e){const n=Array.isArray(t)?t:[t];n.length!==0&&await this.invokeCustomMethod("deleteStorageValues",{keys:n},e)}async getKeys(t){const e=await this.invokeCustomMethod("getStorageKeys",{},t);return Ue.parse(e)}async get(t,e){const n=Array.isArray(t)?t:[t];if(n.length===0)return xt(n,"");const s=_(xt(n,u())),i=await this.invokeCustomMethod("getStorageValues",{keys:n},e).then(c=>s.parse(c));return Array.isArray(t)?i:i[t]}async set(t,e,n){await this.invokeCustomMethod("saveStorageValue",{key:t,value:e},n)}}class Nt{constructor(t,e=g){o(this,"supports");this.postEvent=e,this.supports=k(t,{impactOccurred:"web_app_trigger_haptic_feedback",notificationOccurred:"web_app_trigger_haptic_feedback",selectionChanged:"web_app_trigger_haptic_feedback"})}impactOccurred(t){this.postEvent("web_app_trigger_haptic_feedback",{type:"impact",impact_style:t})}notificationOccurred(t){this.postEvent("web_app_trigger_haptic_feedback",{type:"notification",notification_type:t})}selectionChanged(){this.postEvent("web_app_trigger_haptic_feedback",{type:"selection_change"})}}function je(){const r=document.createElement("style");r.id="telegram-custom-styles",document.head.appendChild(r),E("set_custom_style",t=>{r.innerHTML=t})}function Ot(r){return`telegram-mini-apps-${r}`}function x(r,t){sessionStorage.setItem(Ot(r),JSON.stringify(t))}function H(r){const t=sessionStorage.getItem(Ot(r));return t?JSON.parse(t):null}function Ge(r,t,e){const{isVisible:n=!1}=r?H("back-button")||{}:{},s=new It(n,t,e);return s.on("change",()=>{x("back-button",{isVisible:s.isVisible})}),s}function Fe(r,t){const{isConfirmationNeeded:e=!1}=r?H("closing-behavior")||{}:{},n=new Dt(e,t);return n.on("change",()=>x("closing-behavior",{isConfirmationNeeded:n.isConfirmationNeeded})),n}class Mt{constructor(t){o(this,"ee",new b);o(this,"state");o(this,"postEvent");o(this,"on",(t,e)=>t==="click"?E("main_button_pressed",e):this.ee.on(t,e));o(this,"off",(t,e)=>t==="click"?R("main_button_pressed",e):this.ee.off(t,e));const{postEvent:e=g,text:n,textColor:s,backgroundColor:i,isEnabled:c,isVisible:h,isLoaderVisible:p}=t;this.postEvent=e,this.state=new y({backgroundColor:i,isEnabled:c,isVisible:h,isLoaderVisible:p,text:n,textColor:s},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(t){this.setParams({isEnabled:t})}get isEnabled(){return this.state.get("isEnabled")}set isLoaderVisible(t){this.setParams({isLoaderVisible:t})}get isLoaderVisible(){return this.state.get("isLoaderVisible")}set isVisible(t){this.setParams({isVisible:t})}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(t){return this.setParams({text:t})}setTextColor(t){return this.setParams({textColor:t})}setBackgroundColor(t){return this.setParams({backgroundColor:t})}setParams(t){return this.state.set(t),this.commit(),this}}function ze(r,t,e,n){const{backgroundColor:s=t,isEnabled:i=!1,isVisible:c=!1,isLoaderVisible:h=!1,textColor:p=e,text:d=""}=r?H("main-button")||{}:{},l=new Mt({backgroundColor:s,isEnabled:i,isLoaderVisible:h,isVisible:c,postEvent:n,text:d,textColor:p}),A=()=>x("main-button",{backgroundColor:l.backgroundColor,isEnabled:l.isEnabled,isLoaderVisible:l.isLoaderVisible,isVisible:l.isVisible,text:l.text,textColor:l.textColor});return l.on("change",A),l}class Wt{constructor(t){o(this,"ee",new b);o(this,"state");o(this,"botInline");o(this,"postEvent");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:e=g,headerColor:n,backgroundColor:s,version:i,botInline:c}=t,h=k(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=e,this.botInline=c,this.supports=p=>!(!h(p)||p==="switchInlineQuery"&&!c),this.state=new y({backgroundColor:s,headerColor:n},this.ee),this.supportsParam=Tt(i,{"setHeaderColor.color":["web_app_set_header_color","color"]})}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 tt(this.backgroundColor)}ready(){this.postEvent("web_app_ready")}requestPhoneAccess(){return m("web_app_request_phone","phone_requested",{postEvent:this.postEvent}).then(t=>t.status)}requestWriteAccess(){return m("web_app_request_write_access","write_access_requested",{postEvent:this.postEvent}).then(t=>t.status)}sendData(t){const{size:e}=new Blob([t]);if(e===0||e>4096)throw new Error(`Passed data has incorrect size: ${e}`);this.postEvent("web_app_data_send",{data:t})}setHeaderColor(t){this.postEvent("web_app_set_header_color",Y(t)?{color:t}:{color_key:t}),this.state.set("headerColor",t)}setBackgroundColor(t){this.postEvent("web_app_set_background_color",{color:t}),this.state.set("backgroundColor",t)}switchInlineQuery(t,e=[]){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:t,chat_types:e})}}function Je(r,t,e,n,s){const{backgroundColor:i=t,headerColor:c="bg_color"}=r?H("mini-app")||{}:{},h=new Wt({headerColor:c,backgroundColor:i,version:e,botInline:n,postEvent:s}),p=()=>x("mini-app",{backgroundColor:h.backgroundColor,headerColor:h.headerColor});return h.on("change",p),h}function Qe(){let r=0;return()=>(r+=1,r.toString())}function Ze(r){const t=new Ct(r);return t.listen(),t}async function pt(r){const t=await m("web_app_request_viewport","viewport_changed",r);return{height:t.height,width:t.width,isExpanded:t.is_expanded,isStateStable:t.is_state_stable}}function N(r){return r<0?0:r}class O{constructor(t){o(this,"ee",new b);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:e,isExpanded:n,width:s,stableHeight:i,postEvent:c=g}=t;this.postEvent=c,this.state=new y({height:N(e),isExpanded:n,stableHeight:N(i),width:N(s)},this.ee)}sync(t){return pt(t).then(({height:e,isExpanded:n,width:s,isStateStable:i})=>{this.state.set({height:e,width:s,isExpanded:n,stableHeight:i?e:this.state.get("stableHeight")})})}get height(){return this.state.get("height")}get stableHeight(){return this.state.get("stableHeight")}listen(){return E("viewport_changed",t=>{const{height:e,width:n,is_expanded:s,is_state_stable:i}=t,c={height:N(e),isExpanded:s,width:N(n)};i&&(c.stableHeight=c.height),this.state.set(c)})}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 Ut(r,t,e){if(r||t==="macos"||t==="web"||t==="weba")return new O({height:window.innerHeight,isExpanded:!0,postEvent:e,stableHeight:window.innerHeight,width:window.innerWidth});const n=H("viewport");return n?new O({...n,postEvent:e}):null}function jt(r){return r.listen(),r.on("change",()=>x("viewport",{height:r.height,isExpanded:r.isExpanded,stableHeight:r.stableHeight,width:r.width})),r}function Ke(r,t,e){const n=jt(Ut(r,t,e)||new O({width:0,height:0,isExpanded:!1,postEvent:e,stableHeight:0}));return n.sync({postEvent:e,timeout:100}).catch(s=>{console.error("Unable to actualize viewport state",s)}),n}async function Ye(r,t,e){return jt(Ut(r,t,e)||await pt({postEvent:e,timeout:100}).then(({height:n,isStateStable:s,...i})=>new O({...i,height:n,stableHeight:s?n:0})))}function S(r,t){document.documentElement.style.setProperty(r,t)}function Xe(r,t){const e=()=>{S("--tg-background-color",r.backgroundColor)},n=()=>{const{backgroundColor:s,secondaryBackgroundColor:i}=t;r.headerColor==="bg_color"?s&&S("--tg-header-color",s):r.headerColor==="secondary_bg_color"?i&&S("--tg-header-color",i):S("--tg-header-color",r.headerColor)};t.on("change",n),r.on("change:backgroundColor",e),r.on("change:headerColor",n),e(),n()}function tr(r){const t=()=>{const e=r.getState();Object.entries(e).forEach(([n,s])=>{if(s){const i=n.replace(/[A-Z]/g,c=>`-${c.toLowerCase()}`);S(`--tg-theme-${i}`,s)}})};r.on("change",t),t()}function Gt(r){const t=()=>S("--tg-viewport-height",`${r.height}px`),e=()=>S("--tg-viewport-width",`${r.width}px`),n=()=>S("--tg-viewport-height",`${r.stableHeight}px`);r.on("change:height",t),r.on("change:width",e),r.on("change:stableHeight",n),t(),e(),n()}function er(r){return typeof r=="object"?r:r?{themeParams:!0,viewport:!0,miniApp:!0}:{}}function Ft(r,t,e,n){const s=er(r);s.miniApp&&Xe(t,e),s.themeParams&&tr(e),s.viewport&&(n instanceof Promise?n.then(Gt):Gt(n))}function rr(r){const{hostname:t,pathname:e}=new URL(r,window.location.href);if(t!=="t.me")throw new Error(`Incorrect hostname: ${t}`);const n=e.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/);if(n===null)throw new Error('Link pathname has incorrect format. Expected to receive "/invoice/{slug}" or "/${slug}"');return n[2]}class zt{constructor(t,e=g){o(this,"ee",new b);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=e,this.state=new y({isOpened:!1},this.ee),this.supports=k(t,{open:"web_app_open_invoice"})}set isOpened(t){this.state.set("isOpened",t)}get isOpened(){return this.state.get("isOpened")}async open(t,e){if(this.isOpened)throw new Error("Invoice is already opened");const n=e?rr(t):t;this.isOpened=!0;try{return(await m("web_app_open_invoice",{slug:n},"invoice_closed",{postEvent:this.postEvent,capture(i){return n===i.slug}})).status}finally{this.isOpened=!1}}}function nr(r){const t=r.message.trim(),e=(r.title||"").trim(),n=r.buttons||[];let s;if(e.length>64)throw new Error(`Title has incorrect size: ${e.length}`);if(t.length===0||t.length>256)throw new Error(`Message has incorrect size: ${t.length}`);if(n.length>3)throw new Error(`Buttons have incorrect size: ${n.length}`);return n.length===0?s=[{type:"close",id:""}]:s=n.map(i=>{const{id:c=""}=i;if(c.length>64)throw new Error(`Button ID has incorrect size: ${c}`);if(i.type===void 0||i.type==="default"||i.type==="destructive"){const h=i.text.trim();if(h.length===0||h.length>64){const p=i.type||"default";throw new Error(`Button text with type "${p}" has incorrect size: ${i.text.length}`)}return{...i,text:h,id:c}}return{...i,id:c}}),{title:e,message:t,buttons:s}}class Jt{constructor(t,e=g){o(this,"ee",new b);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=e,this.state=new y({isOpened:!1},this.ee),this.supports=k(t,{open:"web_app_open_popup"})}set isOpened(t){this.state.set("isOpened",t)}get isOpened(){return this.state.get("isOpened")}open(t){if(this.isOpened)throw new Error("Popup is already opened.");return this.isOpened=!0,m("web_app_open_popup",nr(t),"popup_closed",{postEvent:this.postEvent}).then(({button_id:e=null})=>e).finally(()=>{this.isOpened=!1})}}class Qt{constructor(t,e=g){o(this,"ee",new b);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=e,this.state=new y({isOpened:!1},this.ee),this.supports=k(t,{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(t){this.state.set("isOpened",t)}get isOpened(){return this.state.get("isOpened")}async open(t){if(this.isOpened)throw new Error("QR scanner is already opened.");this.isOpened=!0;try{const e=await m("web_app_open_scan_qr_popup",{text:t},["qr_text_received","scan_qr_popup_closed"],{postEvent:this.postEvent});return typeof e=="object"&&typeof e.data=="string"?e.data:null}finally{this.isOpened=!1}}}class Zt{constructor(t,e,n=g){o(this,"supports");o(this,"supportsParam");this.version=t,this.createRequestId=e,this.postEvent=n,this.supports=k(t,{readTextFromClipboard:"web_app_read_text_from_clipboard"}),this.supportsParam=Tt(t,{"openLink.tryInstantView":["web_app_open_link","try_instant_view"]})}openLink(t,e){const n=new URL(t,window.location.href).toString();if(!L("web_app_open_link",this.version)){window.open(n,"_blank");return}this.postEvent("web_app_open_link",{url:n,...typeof e=="boolean"?{try_instant_view:e}:{}})}openTelegramLink(t){const{hostname:e,pathname:n,search:s}=new URL(t,window.location.href);if(e!=="t.me")throw new Error(`URL has not allowed hostname: ${e}. Only "t.me" is allowed`);if(!L("web_app_open_tg_link",this.version)){window.location.href=t;return}this.postEvent("web_app_open_tg_link",{path_full:n+s})}readTextFromClipboard(){return m("web_app_read_text_from_clipboard",{req_id:this.createRequestId()},"clipboard_text_received",{postEvent:this.postEvent}).then(({data:t=null})=>t)}}function sr(r){const{async:t=!1,cssVars:e=!1,acceptCustomStyles:n=!1}=r;try{const{launchParams:{initData:s,initDataRaw:i,version:c,platform:h,themeParams:p,botInline:d=!1},isPageReload:l}=at(),A=Qe(),f=Vt(c);ct()&&(n&&je(),f("iframe_ready",{reload_supported:!0}),E("reload_iframe",()=>window.location.reload()));const q={backButton:Ge(l,c,f),closingBehavior:Fe(l,f),cloudStorage:new Ht(c,A,f),createRequestId:A,hapticFeedback:new Nt(c,f),invoice:new zt(c,f),mainButton:ze(l,p.buttonColor||"#000000",p.buttonTextColor||"#ffffff",f),miniApp:Je(l,p.backgroundColor||"#ffffff",c,d,f),popup:new Jt(c,f),postEvent:f,qrScanner:new Qt(c,f),themeParams:Ze(p),utils:new Zt(c,A,f),...s?{initData:new yt(s),initDataRaw:i}:{}},B=t?Ye(l,h,f):Ke(l,h,f);return B instanceof Promise?B.then(U=>(Ft(e,q.miniApp,q.themeParams,U),{...q,viewport:U})):(Ft(e,q.miniApp,q.themeParams,B),{...q,viewport:B})}catch(s){if(t)return Promise.reject(s);throw s}}function M(r,t){return r.startsWith(t)?r:`${t}${r}`}function ir(r){const t=r.match(/#(.+)/);return t?t[1]:null}async function W(r){return r===0?!0:Promise.race([new Promise(t=>{window.addEventListener("popstate",function e(){window.removeEventListener("popstate",e),t(!0)}),window.history.go(r)}),new Promise(t=>{setTimeout(t,50,!1)})])}async function or(){if(window.history.length<=1||(window.history.pushState(null,""),await W(1-window.history.length)))return;let t=await W(-1);for(;t;)t=await W(-1)}class Kt{constructor(t,e,{debug:n=!1,loggerPrefix:s="Navigator"}){o(this,"logger");o(this,"entries");if(this.entriesCursor=e,t.length===0)throw new Error("Entries list should not be empty.");if(e>=t.length)throw new Error("Cursor should be less than entries count.");this.entries=t.map(({pathname:i="",search:c,hash:h})=>{if(!i.startsWith("/")&&i.length>0)throw new Error('Pathname should start with "/"');return{pathname:M(i,"/"),search:c?M(c,"?"):"",hash:h?M(h,"#"):""}}),this.logger=new St(`[${s}]`,n)}formatEntry(t){let e;if(typeof t=="string")e=t;else{const{pathname:c="",search:h,hash:p}=t;e=c+(h?M(h,"?"):"")+(p?M(p,"#"):"")}const{pathname:n,search:s,hash:i}=new URL(e,`https://localhost${this.path}`);return{pathname:n,search:s,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(t){this.logger.log(`called go(${t})`);const e=Math.min(this.entries.length-1,Math.max(this.entriesCursor+t,0));if(this.entriesCursor===e)return this.performGo({updated:!1,delta:t});const n=this.entry;this.entriesCursor=e;const s=this.entry;return this.logger.log("State changed",{before:n,after:s}),this.performGo({updated:!0,delta:t,before:n,after:s})}getEntries(){return this.entries.map(t=>({...t}))}get hash(){return this.entry.hash}push(t){this.entriesCursor!==this.entries.length-1&&this.entries.splice(this.entriesCursor+1);const e=this.formatEntry(t),n=this.entry;this.entriesCursor+=1,this.entries[this.entriesCursor]=e;const s=this.entry;return this.logger.log("State changed",{before:n,after:s}),this.performPush({before:n,after:s})}get path(){return`${this.pathname}${this.search}${this.hash}`}get pathname(){return this.entry.pathname}replace(t){const e=this.formatEntry(t);if(this.search===e.search&&this.pathname===e.pathname&&this.hash===e.hash)return this.performReplace({updated:!1,entry:e});const n=this.entry;this.entries[this.entriesCursor]=e;const s=this.entry;return this.logger.log("State changed",{before:n,after:s}),this.performReplace({updated:!0,before:n,after:s})}get search(){return this.entry.search}}const Yt=0,lt=1,dt=2;class ft extends Kt{constructor(e,n,s={}){super(e,n,{...s,loggerPrefix:"HashNavigator"});o(this,"ee",new b);o(this,"attached",!1);o(this,"onPopState",async({state:e})=>{if(this.logger.log('"popstate" event received. State:',e),e===null)return this.push(window.location.hash.slice(1));if(e===Yt){this.logger.log("Void reached. Moving history forward"),window.history.forward();return}if(e===lt)return this.back();if(e===dt)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(e){const{search:n,pathname:s,hash:i}=new URL(window.location.hash.slice(1),window.location.href);return new ft([{search:n,pathname:s,hash:i}],0,e)}async performGo(e){e.updated&&(this.attached&&await this.syncHistory(),this.emitChanged(e.before,e.after))}async performPush({before:e,after:n}){this.attached&&await this.syncHistory(),this.emitChanged(e,n)}async performReplace(e){e.updated&&(this.attached&&window.history.replaceState(null,"",`#${this.path}`),this.emitChanged(e.before,e.after))}async syncHistory(){window.removeEventListener("popstate",this.onPopState);const e=`#${this.path}`;await or(),g("web_app_setup_back_button",{is_visible:this.canGoBack}),this.canGoBack&&this.canGoForward?(this.logger.log("Setting up history: [<-, *, ->]"),window.history.replaceState(lt,""),window.history.pushState(null,"",e),window.history.pushState(dt,""),await W(-1)):this.canGoBack?(this.logger.log("Setting up history: [<-, *]"),window.history.replaceState(lt,""),window.history.pushState(null,"",e)):this.canGoForward?(this.logger.log("Setting up history: [*, ->]"),window.history.replaceState(null,e),window.history.pushState(dt,""),await W(-1)):(this.logger.log("Setting up history: [~, *]"),window.history.replaceState(Yt,""),window.history.pushState(null,"",e)),window.addEventListener("popstate",this.onPopState)}emitChanged(e,n){this.ee.emit("change",{navigator:this,from:e,to:n})}async attach(){if(!this.attached)return this.logger.log("Attaching",this),this.attached=!0,E("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))}}return a.BackButton=It,a.ClosingBehavior=Dt,a.CloudStorage=Ht,a.HapticFeedback=Nt,a.HashNavigator=ft,a.InitData=yt,a.Invoice=zt,a.MainButton=Mt,a.MethodUnsupportedError=J,a.MiniApp=Wt,a.Navigator=Kt,a.ParameterUnsupportedError=Q,a.Popup=Jt,a.QRScanner=Qt,a.ThemeParams=Ct,a.Utils=Zt,a.Viewport=O,a.chatParser=mt,a.classNames=Bt,a.compareVersions=Lt,a.createPostEvent=Vt,a.getHash=ir,a.init=sr,a.initDataParser=rt,a.isColorDark=tt,a.isIframe=ct,a.isRGB=Y,a.isRGBShort=wt,a.isRecord=w,a.isTMA=be,a.launchParamsParser=it,a.mergeClassNames=We,a.off=R,a.on=E,a.once=He,a.parseInitData=oe,a.parseLaunchParams=ot,a.parseThemeParams=st,a.postEvent=g,a.request=m,a.requestThemeParams=ue,a.requestViewport=pt,a.retrieveLaunchData=at,a.serializeLaunchParams=vt,a.serializeThemeParams=Et,a.setDebug=Ee,a.setTargetOrigin=Ce,a.subscribe=Ne,a.supports=L,a.themeParamsParser=nt,a.toRGB=X,a.unsubscribe=qt,a.userParser=et,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),a}({});
2
2
  //# sourceMappingURL=index.iife.js.map