@tma.js/sdk 0.13.3 → 1.0.0

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 +2245 -1025
  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 +96 -138
  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
@@ -0,0 +1,239 @@
1
+ import {
2
+ off,
3
+ on,
4
+ type PostEvent,
5
+ postEvent as defaultPostEvent,
6
+ } from '~/bridge/index.js';
7
+ import { EventEmitter } from '~/event-emitter/index.js';
8
+ import { State } from '~/state/index.js';
9
+ import type { RGB } from '~/colors/index.js';
10
+
11
+ import type {
12
+ MainButtonEvents,
13
+ MainButtonParams,
14
+ MainButtonProps,
15
+ MainButtonState,
16
+ } from './types.js';
17
+
18
+ type Emitter = EventEmitter<MainButtonEvents>;
19
+
20
+ /**
21
+ * Controls the main button, which is displayed at the bottom
22
+ * of the Mini App in the Telegram interface.
23
+ */
24
+ export class MainButton {
25
+ private readonly ee: Emitter = new EventEmitter();
26
+
27
+ private readonly state: State<MainButtonState>;
28
+
29
+ private readonly postEvent: PostEvent;
30
+
31
+ constructor(props: MainButtonProps) {
32
+ const {
33
+ postEvent = defaultPostEvent,
34
+ text,
35
+ textColor,
36
+ backgroundColor,
37
+ isEnabled,
38
+ isVisible,
39
+ isLoaderVisible,
40
+ } = props;
41
+
42
+ this.postEvent = postEvent;
43
+ this.state = new State({
44
+ backgroundColor,
45
+ isEnabled,
46
+ isVisible,
47
+ isLoaderVisible,
48
+ text,
49
+ textColor,
50
+ }, this.ee);
51
+ }
52
+
53
+ /**
54
+ * Sends current local state to Telegram application.
55
+ */
56
+ private commit(): void {
57
+ // We should not commit changes until payload is correct. We could
58
+ // have some invalid values in case, button instance was created
59
+ // with empty values. Otherwise, an unexpected behaviour could be received.
60
+ if (this.text === '') {
61
+ return;
62
+ }
63
+
64
+ this.postEvent('web_app_setup_main_button', {
65
+ is_visible: this.isVisible,
66
+ is_active: this.isEnabled,
67
+ is_progress_visible: this.isLoaderVisible,
68
+ text: this.text,
69
+ color: this.backgroundColor,
70
+ text_color: this.textColor,
71
+ });
72
+ }
73
+
74
+ private set isEnabled(isEnabled: boolean) {
75
+ this.setParams({ isEnabled });
76
+ }
77
+
78
+ /**
79
+ * True if the Main Button is currently enabled.
80
+ */
81
+ get isEnabled(): boolean {
82
+ return this.state.get('isEnabled');
83
+ }
84
+
85
+ private set isLoaderVisible(isLoaderVisible: boolean) {
86
+ this.setParams({ isLoaderVisible });
87
+ }
88
+
89
+ /**
90
+ * True if the Main Button loader is currently visible.
91
+ */
92
+ get isLoaderVisible(): boolean {
93
+ return this.state.get('isLoaderVisible');
94
+ }
95
+
96
+ private set isVisible(isVisible: boolean) {
97
+ this.setParams({ isVisible });
98
+ }
99
+
100
+ /**
101
+ * True if the Main Button is currently visible.
102
+ */
103
+ get isVisible(): boolean {
104
+ return this.state.get('isVisible');
105
+ }
106
+
107
+ /**
108
+ * The Main Button background color.
109
+ */
110
+ get backgroundColor(): RGB {
111
+ return this.state.get('backgroundColor');
112
+ }
113
+
114
+ /**
115
+ * The Main Button text.
116
+ */
117
+ get text(): string {
118
+ return this.state.get('text');
119
+ }
120
+
121
+ /**
122
+ * The Main Button text color.
123
+ */
124
+ get textColor(): RGB {
125
+ return this.state.get('textColor');
126
+ }
127
+
128
+ /**
129
+ * Disables the Main Button.
130
+ */
131
+ disable(): this {
132
+ // FIXME: This method does not work on Android. Event "main_button_pressed"
133
+ // keeps getting received even in case, button is disabled.
134
+ // Issue: https://github.com/Telegram-Mini-Apps/documentation/issues/1
135
+ this.isEnabled = false;
136
+ return this;
137
+ }
138
+
139
+ /**
140
+ * Enables the Main Button.
141
+ */
142
+ enable(): this {
143
+ this.isEnabled = true;
144
+ return this;
145
+ }
146
+
147
+ /**
148
+ * Hides the Main Button.
149
+ */
150
+ hide(): this {
151
+ this.isVisible = false;
152
+ return this;
153
+ }
154
+
155
+ /**
156
+ * Hides the Main Button loader.
157
+ */
158
+ hideLoader(): this {
159
+ this.isLoaderVisible = false;
160
+ return this;
161
+ }
162
+
163
+ /**
164
+ * Adds new event listener.
165
+ * @param event - event name.
166
+ * @param listener - event listener.
167
+ */
168
+ on: Emitter['on'] = (event, listener) => (
169
+ // FIXME: Event 'main_button_pressed' is still being received on Android
170
+ // even if the main button is disabled.
171
+ // Issue: https://github.com/Telegram-Mini-Apps/tma.js/issues/3
172
+ event === 'click'
173
+ ? on('main_button_pressed', listener)
174
+ : this.ee.on(event, listener)
175
+ );
176
+
177
+ /**
178
+ * Removes event listener.
179
+ * @param event - event name.
180
+ * @param listener - event listener.
181
+ */
182
+ off: Emitter['off'] = (event, listener) => (
183
+ event === 'click'
184
+ ? off('main_button_pressed', listener)
185
+ : this.ee.off(event, listener)
186
+ );
187
+
188
+ /**
189
+ * Shows the Main Button. Note that opening the Mini App from the attachment menu hides the
190
+ * main button until the user interacts with the Mini App interface.
191
+ */
192
+ show(): this {
193
+ this.isVisible = true;
194
+ return this;
195
+ }
196
+
197
+ /**
198
+ * A method to show a loading indicator on the Main Button. It is recommended to display
199
+ * loader if the action tied to the button may take a long time.
200
+ */
201
+ showLoader(): this {
202
+ this.isLoaderVisible = true;
203
+ return this;
204
+ }
205
+
206
+ /**
207
+ * Sets new Main Button text. Minimal length for text is 1 symbol, and maximum is 64 symbols.
208
+ * @param text - new text.
209
+ */
210
+ setText(text: string): this {
211
+ return this.setParams({ text });
212
+ }
213
+
214
+ /**
215
+ * Sets new Main Button text color.
216
+ * @param textColor - new text color.
217
+ */
218
+ setTextColor(textColor: RGB): this {
219
+ return this.setParams({ textColor });
220
+ }
221
+
222
+ /**
223
+ * Updates current Main Button color.
224
+ * @param backgroundColor - color to set.
225
+ */
226
+ setBackgroundColor(backgroundColor: RGB): this {
227
+ return this.setParams({ backgroundColor });
228
+ }
229
+
230
+ /**
231
+ * Allows setting multiple Main Button parameters.
232
+ * @param params - Main Button parameters.
233
+ */
234
+ setParams(params: MainButtonParams): this {
235
+ this.state.set(params);
236
+ this.commit();
237
+ return this;
238
+ }
239
+ }
@@ -0,0 +1,2 @@
1
+ export * from './MainButton.js';
2
+ export * from './types.js';
@@ -0,0 +1,26 @@
1
+ import type { PostEvent } from '~/bridge/index.js';
2
+ import type { RGB } from '~/colors/index.js';
3
+ import type { StateEvents } from '~/state/index.js';
4
+
5
+ export interface MainButtonParams {
6
+ backgroundColor?: RGB;
7
+ isEnabled?: boolean;
8
+ isLoaderVisible?: boolean;
9
+ isVisible?: boolean;
10
+ text?: string;
11
+ textColor?: RGB;
12
+ }
13
+
14
+ export interface MainButtonProps extends Required<MainButtonParams> {
15
+ postEvent?: PostEvent;
16
+ }
17
+
18
+ export type MainButtonState = Required<MainButtonParams>;
19
+
20
+ export interface MainButtonEvents extends StateEvents<MainButtonState> {
21
+ click: () => void;
22
+ }
23
+
24
+ export type MainButtonEventName = keyof MainButtonEvents;
25
+
26
+ export type MainButtonEventListener<E extends MainButtonEventName> = MainButtonEvents[E];
@@ -0,0 +1,237 @@
1
+ import {
2
+ type PhoneRequestedStatus,
3
+ type PostEvent,
4
+ postEvent as defaultPostEvent,
5
+ request,
6
+ type SwitchInlineQueryChatType,
7
+ type WriteAccessRequestedStatus,
8
+ } from '~/bridge/index.js';
9
+ import {
10
+ isColorDark,
11
+ isRGB,
12
+ type RGB,
13
+ } from '~/colors/index.js';
14
+ import { EventEmitter } from '~/event-emitter/index.js';
15
+ import { State } from '~/state/index.js';
16
+ import {
17
+ createSupportsFunc,
18
+ createSupportsParamFunc,
19
+ type SupportsFunc,
20
+ } from '~/supports/index.js';
21
+
22
+ import type {
23
+ MiniAppEvents,
24
+ MiniAppHeaderColor, MiniAppProps,
25
+ MiniAppState,
26
+ } from './types.js';
27
+
28
+ /**
29
+ * Provides common Mini Apps functionality not covered by other system components.
30
+ */
31
+ export class MiniApp {
32
+ private readonly ee = new EventEmitter<MiniAppEvents>();
33
+
34
+ private readonly state: State<MiniAppState>;
35
+
36
+ private readonly botInline: boolean;
37
+
38
+ private readonly postEvent: PostEvent;
39
+
40
+ constructor(props: MiniAppProps) {
41
+ const {
42
+ postEvent = defaultPostEvent,
43
+ headerColor,
44
+ backgroundColor,
45
+ version,
46
+ botInline,
47
+ } = props;
48
+
49
+ const isSupported = createSupportsFunc(version, {
50
+ requestPhoneAccess: 'web_app_request_phone',
51
+ requestWriteAccess: 'web_app_request_write_access',
52
+ switchInlineQuery: 'web_app_switch_inline_query',
53
+ setHeaderColor: 'web_app_set_header_color',
54
+ setBackgroundColor: 'web_app_set_background_color',
55
+ });
56
+
57
+ this.postEvent = postEvent;
58
+ this.botInline = botInline;
59
+ this.supports = (method) => {
60
+ if (!isSupported(method)) {
61
+ return false;
62
+ }
63
+
64
+ // web_app_switch_inline_query requires a Mini App to be in inline mode, that's why we
65
+ // add 1 more check here.
66
+ if (method === 'switchInlineQuery' && !botInline) {
67
+ return false;
68
+ }
69
+
70
+ return true;
71
+ };
72
+
73
+ this.state = new State({ backgroundColor, headerColor }, this.ee);
74
+ this.supportsParam = createSupportsParamFunc(version, {
75
+ 'setHeaderColor.color': ['web_app_set_header_color', 'color'],
76
+ });
77
+ }
78
+
79
+ /**
80
+ * The Mini App background color.
81
+ */
82
+ get backgroundColor(): RGB {
83
+ return this.state.get('backgroundColor');
84
+ }
85
+
86
+ /**
87
+ * Closes the Mini App.
88
+ */
89
+ close(): void {
90
+ this.postEvent('web_app_close');
91
+ }
92
+
93
+ /**
94
+ * The Mini App header color. Could either be a header color key or RGB color.
95
+ */
96
+ get headerColor(): MiniAppHeaderColor {
97
+ return this.state.get('headerColor');
98
+ }
99
+
100
+ /**
101
+ * True if Mini App is currently launched in bot inline mode.
102
+ */
103
+ get isBotInline(): boolean {
104
+ return this.botInline;
105
+ }
106
+
107
+ /**
108
+ * True if current Mini App background color recognized as dark.
109
+ */
110
+ get isDark(): boolean {
111
+ return isColorDark(this.backgroundColor);
112
+ }
113
+
114
+ /**
115
+ * Adds new event listener.
116
+ */
117
+ on = this.ee.on.bind(this.ee);
118
+
119
+ /**
120
+ * Removes event listener.
121
+ */
122
+ off = this.ee.off.bind(this.ee);
123
+
124
+ /**
125
+ * Informs the Telegram app that the Mini App is ready to be displayed.
126
+ *
127
+ * It is recommended to call this method as early as possible, as soon as all essential
128
+ * interface elements loaded. Once this method called, the loading placeholder is hidden
129
+ * and the Mini App shown.
130
+ *
131
+ * If the method not called, the placeholder will be hidden only when the page fully loaded.
132
+ */
133
+ ready(): void {
134
+ this.postEvent('web_app_ready');
135
+ }
136
+
137
+ /**
138
+ * Requests current user phone access.
139
+ */
140
+ requestPhoneAccess(): Promise<PhoneRequestedStatus> {
141
+ return request(
142
+ 'web_app_request_phone',
143
+ 'phone_requested',
144
+ { postEvent: this.postEvent },
145
+ ).then((data) => data.status);
146
+ }
147
+
148
+ /**
149
+ * Requests write message access to current user.
150
+ */
151
+ requestWriteAccess(): Promise<WriteAccessRequestedStatus> {
152
+ return request(
153
+ 'web_app_request_write_access',
154
+ 'write_access_requested',
155
+ { postEvent: this.postEvent },
156
+ ).then((data) => data.status);
157
+ }
158
+
159
+ /**
160
+ * A method used to send data to the bot. When this method called, a service message sent to
161
+ * the bot containing the data of the length up to 4096 bytes, and the Mini App closed. See the
162
+ * field `web_app_data` in the class [Message](https://core.telegram.org/bots/api#message).
163
+ *
164
+ * This method is only available for Mini Apps launched via a Keyboard button.
165
+ * @param data - data to send to bot.
166
+ * @throws {Error} data has incorrect size.
167
+ */
168
+ sendData(data: string): void {
169
+ const { size } = new Blob([data]);
170
+ if (size === 0 || size > 4096) {
171
+ throw new Error(`Passed data has incorrect size: ${size}`);
172
+ }
173
+ this.postEvent('web_app_data_send', { data });
174
+ }
175
+
176
+ /**
177
+ * Updates current Mini App header color.
178
+ * @param color - color key or RGB color.
179
+ */
180
+ setHeaderColor(color: MiniAppHeaderColor): void {
181
+ // FIXME: Has no effect on desktop, works incorrectly on Android.
182
+ // Issues:
183
+ // https://github.com/Telegram-Mini-Apps/tma.js/issues/9
184
+ // https://github.com/Telegram-Mini-Apps/tma.js/issues/8
185
+ this.postEvent('web_app_set_header_color', isRGB(color) ? { color } : { color_key: color });
186
+ this.state.set('headerColor', color);
187
+ }
188
+
189
+ /**
190
+ * Updates current Mini App background color.
191
+ * @param color - RGB color.
192
+ */
193
+ setBackgroundColor(color: RGB): void {
194
+ // FIXME: Has no effect on desktop, works incorrectly in Android.
195
+ // Issues:
196
+ // https://github.com/Telegram-Mini-Apps/tma.js/issues/9
197
+ // https://github.com/Telegram-Mini-Apps/tma.js/issues/8
198
+ this.postEvent('web_app_set_background_color', { color });
199
+ this.state.set('backgroundColor', color);
200
+ }
201
+
202
+ /**
203
+ * Checks if specified method is supported by current component.
204
+ */
205
+ supports: SupportsFunc<
206
+ | 'requestWriteAccess'
207
+ | 'requestPhoneAccess'
208
+ | 'switchInlineQuery'
209
+ | 'setHeaderColor'
210
+ | 'setBackgroundColor'
211
+ >;
212
+
213
+ /**
214
+ * Checks if specified method parameter is supported by current component.
215
+ */
216
+ supportsParam: SupportsFunc<'setHeaderColor.color'>;
217
+
218
+ /**
219
+ * Inserts the bot's username and the specified inline query in the current chat's input field.
220
+ * Query may be empty, in which case only the bot's username will be inserted. The client prompts
221
+ * the user to choose a specific chat, then opens that chat and inserts the bot's username and
222
+ * the specified inline query in the input field.
223
+ * @param text - text which should be inserted in the input after the current bot name. Max
224
+ * length is 256 symbols.
225
+ * @param chatTypes - List of chat types which could be chosen to send the message. Could be
226
+ * empty list.
227
+ */
228
+ switchInlineQuery(text: string, chatTypes: SwitchInlineQueryChatType[] = []): void {
229
+ if (!this.supports('switchInlineQuery') && !this.isBotInline) {
230
+ throw new Error('Method is unsupported because Mini App should be launched in inline mode.');
231
+ }
232
+ this.postEvent('web_app_switch_inline_query', {
233
+ query: text,
234
+ chat_types: chatTypes,
235
+ });
236
+ }
237
+ }
@@ -0,0 +1,2 @@
1
+ export * from './MiniApp.js';
2
+ export * from './types.js';
@@ -0,0 +1,25 @@
1
+ import type { HeaderColorKey, PostEvent } from '~/bridge/index.js';
2
+ import type { RGB } from '~/colors/index.js';
3
+ import type { StateEvents } from '~/state/index.js';
4
+ import type { Version } from '~/version/index.js';
5
+
6
+ export interface MiniAppProps {
7
+ headerColor: MiniAppHeaderColor;
8
+ backgroundColor: RGB;
9
+ version: Version;
10
+ botInline: boolean;
11
+ postEvent?: PostEvent;
12
+ }
13
+
14
+ export type MiniAppHeaderColor = HeaderColorKey | RGB;
15
+
16
+ export interface MiniAppState {
17
+ backgroundColor: RGB;
18
+ headerColor: MiniAppHeaderColor;
19
+ }
20
+
21
+ export type MiniAppEvents = StateEvents<MiniAppState>;
22
+
23
+ export type MiniAppEventName = keyof MiniAppEvents;
24
+
25
+ export type MiniAppEventListener<E extends MiniAppEventName> = MiniAppEvents[E];
@@ -0,0 +1,2 @@
1
+ export * from './isRecord.js';
2
+ export * from './isTMA.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * States that passed value is Record and not Array.
3
+ * @param value - value to check.
4
+ */
5
+ export function isRecord(value: unknown): value is Record<string, unknown> {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
@@ -0,0 +1,13 @@
1
+ import { retrieveLaunchData } from '~/launch-params/index.js';
2
+
3
+ /**
4
+ * Returns true in case, current environment is Telegram Mini Apps.
5
+ */
6
+ export function isTMA(): boolean {
7
+ try {
8
+ retrieveLaunchData();
9
+ return true;
10
+ } catch (e) {
11
+ return false;
12
+ }
13
+ }