@dementevdev/maxbot-ts 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 (429) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1176 -0
  4. package/dist/cjs/api/BotsApi.d.ts +17 -0
  5. package/dist/cjs/api/BotsApi.d.ts.map +1 -0
  6. package/dist/cjs/api/BotsApi.js +22 -0
  7. package/dist/cjs/api/ChatsApi.d.ts +87 -0
  8. package/dist/cjs/api/ChatsApi.d.ts.map +1 -0
  9. package/dist/cjs/api/ChatsApi.js +144 -0
  10. package/dist/cjs/api/MessagesApi.d.ts +41 -0
  11. package/dist/cjs/api/MessagesApi.d.ts.map +1 -0
  12. package/dist/cjs/api/MessagesApi.js +66 -0
  13. package/dist/cjs/api/SubscriptionsApi.d.ts +45 -0
  14. package/dist/cjs/api/SubscriptionsApi.d.ts.map +1 -0
  15. package/dist/cjs/api/SubscriptionsApi.js +69 -0
  16. package/dist/cjs/api/UploadsApi.d.ts +45 -0
  17. package/dist/cjs/api/UploadsApi.d.ts.map +1 -0
  18. package/dist/cjs/api/UploadsApi.js +113 -0
  19. package/dist/cjs/api/index.d.ts +7 -0
  20. package/dist/cjs/api/index.d.ts.map +1 -0
  21. package/dist/cjs/api/index.js +14 -0
  22. package/dist/cjs/api/interfaces.d.ts +108 -0
  23. package/dist/cjs/api/interfaces.d.ts.map +1 -0
  24. package/dist/cjs/api/interfaces.js +3 -0
  25. package/dist/cjs/bot/Bot.d.ts +380 -0
  26. package/dist/cjs/bot/Bot.d.ts.map +1 -0
  27. package/dist/cjs/bot/Bot.js +624 -0
  28. package/dist/cjs/bot/Composer.d.ts +131 -0
  29. package/dist/cjs/bot/Composer.d.ts.map +1 -0
  30. package/dist/cjs/bot/Composer.js +218 -0
  31. package/dist/cjs/bot/context/BotStartedContext.d.ts +83 -0
  32. package/dist/cjs/bot/context/BotStartedContext.d.ts.map +1 -0
  33. package/dist/cjs/bot/context/BotStartedContext.js +113 -0
  34. package/dist/cjs/bot/context/CallbackContext.d.ts +107 -0
  35. package/dist/cjs/bot/context/CallbackContext.d.ts.map +1 -0
  36. package/dist/cjs/bot/context/CallbackContext.js +158 -0
  37. package/dist/cjs/bot/context/ChatContext.d.ts +35 -0
  38. package/dist/cjs/bot/context/ChatContext.d.ts.map +1 -0
  39. package/dist/cjs/bot/context/ChatContext.js +52 -0
  40. package/dist/cjs/bot/context/MessageContext.d.ts +149 -0
  41. package/dist/cjs/bot/context/MessageContext.d.ts.map +1 -0
  42. package/dist/cjs/bot/context/MessageContext.js +228 -0
  43. package/dist/cjs/bot/context/guards.d.ts +69 -0
  44. package/dist/cjs/bot/context/guards.d.ts.map +1 -0
  45. package/dist/cjs/bot/context/guards.js +85 -0
  46. package/dist/cjs/bot/context/index.d.ts +6 -0
  47. package/dist/cjs/bot/context/index.d.ts.map +1 -0
  48. package/dist/cjs/bot/context/index.js +18 -0
  49. package/dist/cjs/bot/dispatch.d.ts +51 -0
  50. package/dist/cjs/bot/dispatch.d.ts.map +1 -0
  51. package/dist/cjs/bot/dispatch.js +201 -0
  52. package/dist/cjs/bot/index.d.ts +10 -0
  53. package/dist/cjs/bot/index.d.ts.map +1 -0
  54. package/dist/cjs/bot/index.js +24 -0
  55. package/dist/cjs/bot/lifecycle.d.ts +85 -0
  56. package/dist/cjs/bot/lifecycle.d.ts.map +1 -0
  57. package/dist/cjs/bot/lifecycle.js +167 -0
  58. package/dist/cjs/bot/metrics.d.ts +18 -0
  59. package/dist/cjs/bot/metrics.d.ts.map +1 -0
  60. package/dist/cjs/bot/metrics.js +3 -0
  61. package/dist/cjs/bot/routing.d.ts +131 -0
  62. package/dist/cjs/bot/routing.d.ts.map +1 -0
  63. package/dist/cjs/bot/routing.js +198 -0
  64. package/dist/cjs/bot/triggers.d.ts +61 -0
  65. package/dist/cjs/bot/triggers.d.ts.map +1 -0
  66. package/dist/cjs/bot/triggers.js +84 -0
  67. package/dist/cjs/core/errors/MaxError.d.ts +11 -0
  68. package/dist/cjs/core/errors/MaxError.d.ts.map +1 -0
  69. package/dist/cjs/core/errors/MaxError.js +19 -0
  70. package/dist/cjs/core/errors/errors.d.ts +59 -0
  71. package/dist/cjs/core/errors/errors.d.ts.map +1 -0
  72. package/dist/cjs/core/errors/errors.js +84 -0
  73. package/dist/cjs/core/errors/index.d.ts +3 -0
  74. package/dist/cjs/core/errors/index.d.ts.map +1 -0
  75. package/dist/cjs/core/errors/index.js +13 -0
  76. package/dist/cjs/core/http/HttpClient.d.ts +28 -0
  77. package/dist/cjs/core/http/HttpClient.d.ts.map +1 -0
  78. package/dist/cjs/core/http/HttpClient.js +148 -0
  79. package/dist/cjs/core/http/index.d.ts +3 -0
  80. package/dist/cjs/core/http/index.d.ts.map +1 -0
  81. package/dist/cjs/core/http/index.js +6 -0
  82. package/dist/cjs/core/http/interfaces.d.ts +42 -0
  83. package/dist/cjs/core/http/interfaces.d.ts.map +1 -0
  84. package/dist/cjs/core/http/interfaces.js +3 -0
  85. package/dist/cjs/core/rate-limiter/RateLimiter.d.ts +46 -0
  86. package/dist/cjs/core/rate-limiter/RateLimiter.d.ts.map +1 -0
  87. package/dist/cjs/core/rate-limiter/RateLimiter.js +110 -0
  88. package/dist/cjs/core/rate-limiter/index.d.ts +3 -0
  89. package/dist/cjs/core/rate-limiter/index.d.ts.map +1 -0
  90. package/dist/cjs/core/rate-limiter/index.js +6 -0
  91. package/dist/cjs/filters/index.d.ts +2 -0
  92. package/dist/cjs/filters/index.d.ts.map +1 -0
  93. package/dist/cjs/filters/index.js +10 -0
  94. package/dist/cjs/filters/predicates.d.ts +85 -0
  95. package/dist/cjs/filters/predicates.d.ts.map +1 -0
  96. package/dist/cjs/filters/predicates.js +111 -0
  97. package/dist/cjs/index.d.ts +11 -0
  98. package/dist/cjs/index.d.ts.map +1 -0
  99. package/dist/cjs/index.js +27 -0
  100. package/dist/cjs/middleware/compose.d.ts +28 -0
  101. package/dist/cjs/middleware/compose.d.ts.map +1 -0
  102. package/dist/cjs/middleware/compose.js +89 -0
  103. package/dist/cjs/middleware/index.d.ts +3 -0
  104. package/dist/cjs/middleware/index.d.ts.map +1 -0
  105. package/dist/cjs/middleware/index.js +7 -0
  106. package/dist/cjs/middleware/types.d.ts +17 -0
  107. package/dist/cjs/middleware/types.d.ts.map +1 -0
  108. package/dist/cjs/middleware/types.js +3 -0
  109. package/dist/cjs/package.json +3 -0
  110. package/dist/cjs/transport/LongPollingTransport.d.ts +33 -0
  111. package/dist/cjs/transport/LongPollingTransport.d.ts.map +1 -0
  112. package/dist/cjs/transport/LongPollingTransport.js +153 -0
  113. package/dist/cjs/transport/WebhookTransport.d.ts +40 -0
  114. package/dist/cjs/transport/WebhookTransport.d.ts.map +1 -0
  115. package/dist/cjs/transport/WebhookTransport.js +229 -0
  116. package/dist/cjs/transport/index.d.ts +4 -0
  117. package/dist/cjs/transport/index.d.ts.map +1 -0
  118. package/dist/cjs/transport/index.js +8 -0
  119. package/dist/cjs/transport/interfaces.d.ts +74 -0
  120. package/dist/cjs/transport/interfaces.d.ts.map +1 -0
  121. package/dist/cjs/transport/interfaces.js +3 -0
  122. package/dist/cjs/types/bot.d.ts +19 -0
  123. package/dist/cjs/types/bot.d.ts.map +1 -0
  124. package/dist/cjs/types/bot.js +3 -0
  125. package/dist/cjs/types/chat.d.ts +94 -0
  126. package/dist/cjs/types/chat.d.ts.map +1 -0
  127. package/dist/cjs/types/chat.js +3 -0
  128. package/dist/cjs/types/common.d.ts +38 -0
  129. package/dist/cjs/types/common.d.ts.map +1 -0
  130. package/dist/cjs/types/common.js +6 -0
  131. package/dist/cjs/types/index.d.ts +9 -0
  132. package/dist/cjs/types/index.d.ts.map +1 -0
  133. package/dist/cjs/types/index.js +26 -0
  134. package/dist/cjs/types/keyboard.d.ts +97 -0
  135. package/dist/cjs/types/keyboard.d.ts.map +1 -0
  136. package/dist/cjs/types/keyboard.js +3 -0
  137. package/dist/cjs/types/message.d.ts +162 -0
  138. package/dist/cjs/types/message.d.ts.map +1 -0
  139. package/dist/cjs/types/message.js +3 -0
  140. package/dist/cjs/types/subscription.d.ts +23 -0
  141. package/dist/cjs/types/subscription.d.ts.map +1 -0
  142. package/dist/cjs/types/subscription.js +3 -0
  143. package/dist/cjs/types/update.d.ts +99 -0
  144. package/dist/cjs/types/update.d.ts.map +1 -0
  145. package/dist/cjs/types/update.js +3 -0
  146. package/dist/cjs/types/upload.d.ts +29 -0
  147. package/dist/cjs/types/upload.d.ts.map +1 -0
  148. package/dist/cjs/types/upload.js +3 -0
  149. package/dist/cjs/utils/Histogram.d.ts +93 -0
  150. package/dist/cjs/utils/Histogram.d.ts.map +1 -0
  151. package/dist/cjs/utils/Histogram.js +103 -0
  152. package/dist/cjs/utils/assertNever.d.ts +19 -0
  153. package/dist/cjs/utils/assertNever.d.ts.map +1 -0
  154. package/dist/cjs/utils/assertNever.js +24 -0
  155. package/dist/cjs/utils/format.d.ts +22 -0
  156. package/dist/cjs/utils/format.d.ts.map +1 -0
  157. package/dist/cjs/utils/format.js +25 -0
  158. package/dist/cjs/utils/index.d.ts +6 -0
  159. package/dist/cjs/utils/index.d.ts.map +1 -0
  160. package/dist/cjs/utils/index.js +14 -0
  161. package/dist/cjs/utils/keyboard.d.ts +70 -0
  162. package/dist/cjs/utils/keyboard.d.ts.map +1 -0
  163. package/dist/cjs/utils/keyboard.js +166 -0
  164. package/dist/esm/api/BotsApi.d.ts +17 -0
  165. package/dist/esm/api/BotsApi.d.ts.map +1 -0
  166. package/dist/esm/api/BotsApi.js +18 -0
  167. package/dist/esm/api/ChatsApi.d.ts +87 -0
  168. package/dist/esm/api/ChatsApi.d.ts.map +1 -0
  169. package/dist/esm/api/ChatsApi.js +140 -0
  170. package/dist/esm/api/MessagesApi.d.ts +41 -0
  171. package/dist/esm/api/MessagesApi.d.ts.map +1 -0
  172. package/dist/esm/api/MessagesApi.js +62 -0
  173. package/dist/esm/api/SubscriptionsApi.d.ts +45 -0
  174. package/dist/esm/api/SubscriptionsApi.d.ts.map +1 -0
  175. package/dist/esm/api/SubscriptionsApi.js +65 -0
  176. package/dist/esm/api/UploadsApi.d.ts +45 -0
  177. package/dist/esm/api/UploadsApi.d.ts.map +1 -0
  178. package/dist/esm/api/UploadsApi.js +109 -0
  179. package/dist/esm/api/index.d.ts +7 -0
  180. package/dist/esm/api/index.d.ts.map +1 -0
  181. package/dist/esm/api/index.js +6 -0
  182. package/dist/esm/api/interfaces.d.ts +108 -0
  183. package/dist/esm/api/interfaces.d.ts.map +1 -0
  184. package/dist/esm/api/interfaces.js +2 -0
  185. package/dist/esm/bot/Bot.d.ts +380 -0
  186. package/dist/esm/bot/Bot.d.ts.map +1 -0
  187. package/dist/esm/bot/Bot.js +620 -0
  188. package/dist/esm/bot/Composer.d.ts +131 -0
  189. package/dist/esm/bot/Composer.d.ts.map +1 -0
  190. package/dist/esm/bot/Composer.js +214 -0
  191. package/dist/esm/bot/context/BotStartedContext.d.ts +83 -0
  192. package/dist/esm/bot/context/BotStartedContext.d.ts.map +1 -0
  193. package/dist/esm/bot/context/BotStartedContext.js +109 -0
  194. package/dist/esm/bot/context/CallbackContext.d.ts +107 -0
  195. package/dist/esm/bot/context/CallbackContext.d.ts.map +1 -0
  196. package/dist/esm/bot/context/CallbackContext.js +154 -0
  197. package/dist/esm/bot/context/ChatContext.d.ts +35 -0
  198. package/dist/esm/bot/context/ChatContext.d.ts.map +1 -0
  199. package/dist/esm/bot/context/ChatContext.js +48 -0
  200. package/dist/esm/bot/context/MessageContext.d.ts +149 -0
  201. package/dist/esm/bot/context/MessageContext.d.ts.map +1 -0
  202. package/dist/esm/bot/context/MessageContext.js +224 -0
  203. package/dist/esm/bot/context/guards.d.ts +69 -0
  204. package/dist/esm/bot/context/guards.d.ts.map +1 -0
  205. package/dist/esm/bot/context/guards.js +78 -0
  206. package/dist/esm/bot/context/index.d.ts +6 -0
  207. package/dist/esm/bot/context/index.d.ts.map +1 -0
  208. package/dist/esm/bot/context/index.js +6 -0
  209. package/dist/esm/bot/dispatch.d.ts +51 -0
  210. package/dist/esm/bot/dispatch.d.ts.map +1 -0
  211. package/dist/esm/bot/dispatch.js +197 -0
  212. package/dist/esm/bot/index.d.ts +10 -0
  213. package/dist/esm/bot/index.d.ts.map +1 -0
  214. package/dist/esm/bot/index.js +9 -0
  215. package/dist/esm/bot/lifecycle.d.ts +85 -0
  216. package/dist/esm/bot/lifecycle.d.ts.map +1 -0
  217. package/dist/esm/bot/lifecycle.js +163 -0
  218. package/dist/esm/bot/metrics.d.ts +18 -0
  219. package/dist/esm/bot/metrics.d.ts.map +1 -0
  220. package/dist/esm/bot/metrics.js +2 -0
  221. package/dist/esm/bot/routing.d.ts +131 -0
  222. package/dist/esm/bot/routing.d.ts.map +1 -0
  223. package/dist/esm/bot/routing.js +194 -0
  224. package/dist/esm/bot/triggers.d.ts +61 -0
  225. package/dist/esm/bot/triggers.d.ts.map +1 -0
  226. package/dist/esm/bot/triggers.js +80 -0
  227. package/dist/esm/core/errors/MaxError.d.ts +11 -0
  228. package/dist/esm/core/errors/MaxError.d.ts.map +1 -0
  229. package/dist/esm/core/errors/MaxError.js +15 -0
  230. package/dist/esm/core/errors/errors.d.ts +59 -0
  231. package/dist/esm/core/errors/errors.d.ts.map +1 -0
  232. package/dist/esm/core/errors/errors.js +75 -0
  233. package/dist/esm/core/errors/index.d.ts +3 -0
  234. package/dist/esm/core/errors/index.d.ts.map +1 -0
  235. package/dist/esm/core/errors/index.js +3 -0
  236. package/dist/esm/core/http/HttpClient.d.ts +28 -0
  237. package/dist/esm/core/http/HttpClient.d.ts.map +1 -0
  238. package/dist/esm/core/http/HttpClient.js +144 -0
  239. package/dist/esm/core/http/index.d.ts +3 -0
  240. package/dist/esm/core/http/index.d.ts.map +1 -0
  241. package/dist/esm/core/http/index.js +2 -0
  242. package/dist/esm/core/http/interfaces.d.ts +42 -0
  243. package/dist/esm/core/http/interfaces.d.ts.map +1 -0
  244. package/dist/esm/core/http/interfaces.js +2 -0
  245. package/dist/esm/core/rate-limiter/RateLimiter.d.ts +46 -0
  246. package/dist/esm/core/rate-limiter/RateLimiter.d.ts.map +1 -0
  247. package/dist/esm/core/rate-limiter/RateLimiter.js +106 -0
  248. package/dist/esm/core/rate-limiter/index.d.ts +3 -0
  249. package/dist/esm/core/rate-limiter/index.d.ts.map +1 -0
  250. package/dist/esm/core/rate-limiter/index.js +2 -0
  251. package/dist/esm/filters/index.d.ts +2 -0
  252. package/dist/esm/filters/index.d.ts.map +1 -0
  253. package/dist/esm/filters/index.js +2 -0
  254. package/dist/esm/filters/predicates.d.ts +85 -0
  255. package/dist/esm/filters/predicates.d.ts.map +1 -0
  256. package/dist/esm/filters/predicates.js +104 -0
  257. package/dist/esm/index.d.ts +11 -0
  258. package/dist/esm/index.d.ts.map +1 -0
  259. package/dist/esm/index.js +11 -0
  260. package/dist/esm/middleware/compose.d.ts +28 -0
  261. package/dist/esm/middleware/compose.d.ts.map +1 -0
  262. package/dist/esm/middleware/compose.js +85 -0
  263. package/dist/esm/middleware/index.d.ts +3 -0
  264. package/dist/esm/middleware/index.d.ts.map +1 -0
  265. package/dist/esm/middleware/index.js +2 -0
  266. package/dist/esm/middleware/types.d.ts +17 -0
  267. package/dist/esm/middleware/types.d.ts.map +1 -0
  268. package/dist/esm/middleware/types.js +2 -0
  269. package/dist/esm/transport/LongPollingTransport.d.ts +33 -0
  270. package/dist/esm/transport/LongPollingTransport.d.ts.map +1 -0
  271. package/dist/esm/transport/LongPollingTransport.js +149 -0
  272. package/dist/esm/transport/WebhookTransport.d.ts +40 -0
  273. package/dist/esm/transport/WebhookTransport.d.ts.map +1 -0
  274. package/dist/esm/transport/WebhookTransport.js +225 -0
  275. package/dist/esm/transport/index.d.ts +4 -0
  276. package/dist/esm/transport/index.d.ts.map +1 -0
  277. package/dist/esm/transport/index.js +3 -0
  278. package/dist/esm/transport/interfaces.d.ts +74 -0
  279. package/dist/esm/transport/interfaces.d.ts.map +1 -0
  280. package/dist/esm/transport/interfaces.js +2 -0
  281. package/dist/esm/types/bot.d.ts +19 -0
  282. package/dist/esm/types/bot.d.ts.map +1 -0
  283. package/dist/esm/types/bot.js +2 -0
  284. package/dist/esm/types/chat.d.ts +94 -0
  285. package/dist/esm/types/chat.d.ts.map +1 -0
  286. package/dist/esm/types/chat.js +2 -0
  287. package/dist/esm/types/common.d.ts +38 -0
  288. package/dist/esm/types/common.d.ts.map +1 -0
  289. package/dist/esm/types/common.js +5 -0
  290. package/dist/esm/types/index.d.ts +9 -0
  291. package/dist/esm/types/index.d.ts.map +1 -0
  292. package/dist/esm/types/index.js +10 -0
  293. package/dist/esm/types/keyboard.d.ts +97 -0
  294. package/dist/esm/types/keyboard.d.ts.map +1 -0
  295. package/dist/esm/types/keyboard.js +2 -0
  296. package/dist/esm/types/message.d.ts +162 -0
  297. package/dist/esm/types/message.d.ts.map +1 -0
  298. package/dist/esm/types/message.js +2 -0
  299. package/dist/esm/types/subscription.d.ts +23 -0
  300. package/dist/esm/types/subscription.d.ts.map +1 -0
  301. package/dist/esm/types/subscription.js +2 -0
  302. package/dist/esm/types/update.d.ts +99 -0
  303. package/dist/esm/types/update.d.ts.map +1 -0
  304. package/dist/esm/types/update.js +2 -0
  305. package/dist/esm/types/upload.d.ts +29 -0
  306. package/dist/esm/types/upload.d.ts.map +1 -0
  307. package/dist/esm/types/upload.js +2 -0
  308. package/dist/esm/utils/Histogram.d.ts +93 -0
  309. package/dist/esm/utils/Histogram.d.ts.map +1 -0
  310. package/dist/esm/utils/Histogram.js +99 -0
  311. package/dist/esm/utils/assertNever.d.ts +19 -0
  312. package/dist/esm/utils/assertNever.d.ts.map +1 -0
  313. package/dist/esm/utils/assertNever.js +21 -0
  314. package/dist/esm/utils/format.d.ts +22 -0
  315. package/dist/esm/utils/format.d.ts.map +1 -0
  316. package/dist/esm/utils/format.js +22 -0
  317. package/dist/esm/utils/index.d.ts +6 -0
  318. package/dist/esm/utils/index.d.ts.map +1 -0
  319. package/dist/esm/utils/index.js +5 -0
  320. package/dist/esm/utils/keyboard.d.ts +70 -0
  321. package/dist/esm/utils/keyboard.d.ts.map +1 -0
  322. package/dist/esm/utils/keyboard.js +162 -0
  323. package/dist/types/api/BotsApi.d.ts +17 -0
  324. package/dist/types/api/BotsApi.d.ts.map +1 -0
  325. package/dist/types/api/ChatsApi.d.ts +87 -0
  326. package/dist/types/api/ChatsApi.d.ts.map +1 -0
  327. package/dist/types/api/MessagesApi.d.ts +41 -0
  328. package/dist/types/api/MessagesApi.d.ts.map +1 -0
  329. package/dist/types/api/SubscriptionsApi.d.ts +45 -0
  330. package/dist/types/api/SubscriptionsApi.d.ts.map +1 -0
  331. package/dist/types/api/UploadsApi.d.ts +45 -0
  332. package/dist/types/api/UploadsApi.d.ts.map +1 -0
  333. package/dist/types/api/index.d.ts +7 -0
  334. package/dist/types/api/index.d.ts.map +1 -0
  335. package/dist/types/api/interfaces.d.ts +108 -0
  336. package/dist/types/api/interfaces.d.ts.map +1 -0
  337. package/dist/types/bot/Bot.d.ts +380 -0
  338. package/dist/types/bot/Bot.d.ts.map +1 -0
  339. package/dist/types/bot/Composer.d.ts +131 -0
  340. package/dist/types/bot/Composer.d.ts.map +1 -0
  341. package/dist/types/bot/context/BotStartedContext.d.ts +83 -0
  342. package/dist/types/bot/context/BotStartedContext.d.ts.map +1 -0
  343. package/dist/types/bot/context/CallbackContext.d.ts +107 -0
  344. package/dist/types/bot/context/CallbackContext.d.ts.map +1 -0
  345. package/dist/types/bot/context/ChatContext.d.ts +35 -0
  346. package/dist/types/bot/context/ChatContext.d.ts.map +1 -0
  347. package/dist/types/bot/context/MessageContext.d.ts +149 -0
  348. package/dist/types/bot/context/MessageContext.d.ts.map +1 -0
  349. package/dist/types/bot/context/guards.d.ts +69 -0
  350. package/dist/types/bot/context/guards.d.ts.map +1 -0
  351. package/dist/types/bot/context/index.d.ts +6 -0
  352. package/dist/types/bot/context/index.d.ts.map +1 -0
  353. package/dist/types/bot/dispatch.d.ts +51 -0
  354. package/dist/types/bot/dispatch.d.ts.map +1 -0
  355. package/dist/types/bot/index.d.ts +10 -0
  356. package/dist/types/bot/index.d.ts.map +1 -0
  357. package/dist/types/bot/lifecycle.d.ts +85 -0
  358. package/dist/types/bot/lifecycle.d.ts.map +1 -0
  359. package/dist/types/bot/metrics.d.ts +18 -0
  360. package/dist/types/bot/metrics.d.ts.map +1 -0
  361. package/dist/types/bot/routing.d.ts +131 -0
  362. package/dist/types/bot/routing.d.ts.map +1 -0
  363. package/dist/types/bot/triggers.d.ts +61 -0
  364. package/dist/types/bot/triggers.d.ts.map +1 -0
  365. package/dist/types/core/errors/MaxError.d.ts +11 -0
  366. package/dist/types/core/errors/MaxError.d.ts.map +1 -0
  367. package/dist/types/core/errors/errors.d.ts +59 -0
  368. package/dist/types/core/errors/errors.d.ts.map +1 -0
  369. package/dist/types/core/errors/index.d.ts +3 -0
  370. package/dist/types/core/errors/index.d.ts.map +1 -0
  371. package/dist/types/core/http/HttpClient.d.ts +28 -0
  372. package/dist/types/core/http/HttpClient.d.ts.map +1 -0
  373. package/dist/types/core/http/index.d.ts +3 -0
  374. package/dist/types/core/http/index.d.ts.map +1 -0
  375. package/dist/types/core/http/interfaces.d.ts +42 -0
  376. package/dist/types/core/http/interfaces.d.ts.map +1 -0
  377. package/dist/types/core/rate-limiter/RateLimiter.d.ts +46 -0
  378. package/dist/types/core/rate-limiter/RateLimiter.d.ts.map +1 -0
  379. package/dist/types/core/rate-limiter/index.d.ts +3 -0
  380. package/dist/types/core/rate-limiter/index.d.ts.map +1 -0
  381. package/dist/types/filters/index.d.ts +2 -0
  382. package/dist/types/filters/index.d.ts.map +1 -0
  383. package/dist/types/filters/predicates.d.ts +85 -0
  384. package/dist/types/filters/predicates.d.ts.map +1 -0
  385. package/dist/types/index.d.ts +11 -0
  386. package/dist/types/index.d.ts.map +1 -0
  387. package/dist/types/middleware/compose.d.ts +28 -0
  388. package/dist/types/middleware/compose.d.ts.map +1 -0
  389. package/dist/types/middleware/index.d.ts +3 -0
  390. package/dist/types/middleware/index.d.ts.map +1 -0
  391. package/dist/types/middleware/types.d.ts +17 -0
  392. package/dist/types/middleware/types.d.ts.map +1 -0
  393. package/dist/types/transport/LongPollingTransport.d.ts +33 -0
  394. package/dist/types/transport/LongPollingTransport.d.ts.map +1 -0
  395. package/dist/types/transport/WebhookTransport.d.ts +40 -0
  396. package/dist/types/transport/WebhookTransport.d.ts.map +1 -0
  397. package/dist/types/transport/index.d.ts +4 -0
  398. package/dist/types/transport/index.d.ts.map +1 -0
  399. package/dist/types/transport/interfaces.d.ts +74 -0
  400. package/dist/types/transport/interfaces.d.ts.map +1 -0
  401. package/dist/types/types/bot.d.ts +19 -0
  402. package/dist/types/types/bot.d.ts.map +1 -0
  403. package/dist/types/types/chat.d.ts +94 -0
  404. package/dist/types/types/chat.d.ts.map +1 -0
  405. package/dist/types/types/common.d.ts +38 -0
  406. package/dist/types/types/common.d.ts.map +1 -0
  407. package/dist/types/types/index.d.ts +9 -0
  408. package/dist/types/types/index.d.ts.map +1 -0
  409. package/dist/types/types/keyboard.d.ts +97 -0
  410. package/dist/types/types/keyboard.d.ts.map +1 -0
  411. package/dist/types/types/message.d.ts +162 -0
  412. package/dist/types/types/message.d.ts.map +1 -0
  413. package/dist/types/types/subscription.d.ts +23 -0
  414. package/dist/types/types/subscription.d.ts.map +1 -0
  415. package/dist/types/types/update.d.ts +99 -0
  416. package/dist/types/types/update.d.ts.map +1 -0
  417. package/dist/types/types/upload.d.ts +29 -0
  418. package/dist/types/types/upload.d.ts.map +1 -0
  419. package/dist/types/utils/Histogram.d.ts +93 -0
  420. package/dist/types/utils/Histogram.d.ts.map +1 -0
  421. package/dist/types/utils/assertNever.d.ts +19 -0
  422. package/dist/types/utils/assertNever.d.ts.map +1 -0
  423. package/dist/types/utils/format.d.ts +22 -0
  424. package/dist/types/utils/format.d.ts.map +1 -0
  425. package/dist/types/utils/index.d.ts +6 -0
  426. package/dist/types/utils/index.d.ts.map +1 -0
  427. package/dist/types/utils/keyboard.d.ts +70 -0
  428. package/dist/types/utils/keyboard.d.ts.map +1 -0
  429. package/package.json +84 -0
@@ -0,0 +1,85 @@
1
+ import { CallbackContext } from "../bot/context/CallbackContext.js";
2
+ import { MessageContext } from "../bot/context/MessageContext.js";
3
+ import type { Context } from "../bot/Bot.js";
4
+ /**
5
+ * Проверяет, что контекст является MessageContext **и** содержит непустой текст.
6
+ *
7
+ * @example
8
+ * bot.use(async (ctx, next) => {
9
+ * if (hasText(ctx)) {
10
+ * // ctx: MessageContext, ctx.text: string (не undefined)
11
+ * console.log(ctx.text.toUpperCase());
12
+ * }
13
+ * await next();
14
+ * });
15
+ */
16
+ export declare function hasText(ctx: Context): ctx is MessageContext & {
17
+ text: string;
18
+ };
19
+ /**
20
+ * Проверяет, что сообщение пришло из приватного чата (диалога с ботом).
21
+ *
22
+ * @example
23
+ * bot.use(async (ctx, next) => {
24
+ * if (isPrivateChat(ctx)) {
25
+ * await ctx.reply("Это личный чат 👋");
26
+ * }
27
+ * await next();
28
+ * });
29
+ */
30
+ export declare function isPrivateChat(ctx: Context): ctx is MessageContext;
31
+ /**
32
+ * Фабрика предикатов: проверяет, что сообщение — конкретная команда.
33
+ *
34
+ * Совпадает с точным текстом (`/cmd`) или текстом + аргументами (`/cmd arg`).
35
+ * Слэш можно не указывать — он добавляется автоматически.
36
+ *
37
+ * @param name Имя команды, например `"start"` или `"/help"`
38
+ *
39
+ * @example
40
+ * bot.use(async (ctx, next) => {
41
+ * if (commandIs("start")(ctx)) {
42
+ * await ctx.reply("Привет!");
43
+ * return; // не вызываем next — команда обработана
44
+ * }
45
+ * await next();
46
+ * });
47
+ */
48
+ export declare function commandIs(name: string): (ctx: Context) => ctx is MessageContext & {
49
+ text: string;
50
+ };
51
+ /**
52
+ * Проверяет, что контекст является CallbackContext (нажатие кнопки)
53
+ * **и** payload не пустой.
54
+ *
55
+ * @example
56
+ * bot.use(async (ctx, next) => {
57
+ * if (hasCallbackPayload(ctx)) {
58
+ * // ctx: CallbackContext, ctx.data: непустая строка
59
+ * console.log("payload:", ctx.data);
60
+ * }
61
+ * await next();
62
+ * });
63
+ */
64
+ export declare function hasCallbackPayload(ctx: Context): ctx is CallbackContext & {
65
+ data: string;
66
+ };
67
+ /**
68
+ * Фабрика предикатов: проверяет, что payload кнопки совпадает с шаблоном.
69
+ *
70
+ * @param pattern Строка (точное совпадение) или RegExp
71
+ *
72
+ * @example
73
+ * bot.use(async (ctx, next) => {
74
+ * if (payloadIs(/^action:/)(ctx)) {
75
+ * const [, action] = ctx.data.split(":");
76
+ * await ctx.answer({ notification: `Действие: ${action}` });
77
+ * return;
78
+ * }
79
+ * await next();
80
+ * });
81
+ */
82
+ export declare function payloadIs(pattern: string | RegExp): (ctx: Context) => ctx is CallbackContext & {
83
+ data: string;
84
+ };
85
+ //# sourceMappingURL=predicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../../src/filters/predicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,OAAO,GACX,GAAG,IAAI,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAM1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAKjE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAO5D;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,GACX,GAAG,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAE3C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAO7D"}
@@ -0,0 +1,104 @@
1
+ import { CallbackContext } from "../bot/context/CallbackContext.js";
2
+ import { MessageContext } from "../bot/context/MessageContext.js";
3
+ // ─── MessageContext predicates ───────────────────────────────────────────────
4
+ /**
5
+ * Проверяет, что контекст является MessageContext **и** содержит непустой текст.
6
+ *
7
+ * @example
8
+ * bot.use(async (ctx, next) => {
9
+ * if (hasText(ctx)) {
10
+ * // ctx: MessageContext, ctx.text: string (не undefined)
11
+ * console.log(ctx.text.toUpperCase());
12
+ * }
13
+ * await next();
14
+ * });
15
+ */
16
+ export function hasText(ctx) {
17
+ return (ctx instanceof MessageContext &&
18
+ typeof ctx.text === "string" &&
19
+ ctx.text.length > 0);
20
+ }
21
+ /**
22
+ * Проверяет, что сообщение пришло из приватного чата (диалога с ботом).
23
+ *
24
+ * @example
25
+ * bot.use(async (ctx, next) => {
26
+ * if (isPrivateChat(ctx)) {
27
+ * await ctx.reply("Это личный чат 👋");
28
+ * }
29
+ * await next();
30
+ * });
31
+ */
32
+ export function isPrivateChat(ctx) {
33
+ return (ctx instanceof MessageContext &&
34
+ ctx.raw.message.recipient.chat_type === "dialog");
35
+ }
36
+ /**
37
+ * Фабрика предикатов: проверяет, что сообщение — конкретная команда.
38
+ *
39
+ * Совпадает с точным текстом (`/cmd`) или текстом + аргументами (`/cmd arg`).
40
+ * Слэш можно не указывать — он добавляется автоматически.
41
+ *
42
+ * @param name Имя команды, например `"start"` или `"/help"`
43
+ *
44
+ * @example
45
+ * bot.use(async (ctx, next) => {
46
+ * if (commandIs("start")(ctx)) {
47
+ * await ctx.reply("Привет!");
48
+ * return; // не вызываем next — команда обработана
49
+ * }
50
+ * await next();
51
+ * });
52
+ */
53
+ export function commandIs(name) {
54
+ const normalized = name.startsWith("/") ? name : `/${name}`;
55
+ return (ctx) => {
56
+ if (!(ctx instanceof MessageContext))
57
+ return false;
58
+ const text = ctx.text ?? "";
59
+ return text === normalized || text.startsWith(`${normalized} `);
60
+ };
61
+ }
62
+ // ─── CallbackContext predicates ──────────────────────────────────────────────
63
+ /**
64
+ * Проверяет, что контекст является CallbackContext (нажатие кнопки)
65
+ * **и** payload не пустой.
66
+ *
67
+ * @example
68
+ * bot.use(async (ctx, next) => {
69
+ * if (hasCallbackPayload(ctx)) {
70
+ * // ctx: CallbackContext, ctx.data: непустая строка
71
+ * console.log("payload:", ctx.data);
72
+ * }
73
+ * await next();
74
+ * });
75
+ */
76
+ export function hasCallbackPayload(ctx) {
77
+ return ctx instanceof CallbackContext && ctx.data.length > 0;
78
+ }
79
+ /**
80
+ * Фабрика предикатов: проверяет, что payload кнопки совпадает с шаблоном.
81
+ *
82
+ * @param pattern Строка (точное совпадение) или RegExp
83
+ *
84
+ * @example
85
+ * bot.use(async (ctx, next) => {
86
+ * if (payloadIs(/^action:/)(ctx)) {
87
+ * const [, action] = ctx.data.split(":");
88
+ * await ctx.answer({ notification: `Действие: ${action}` });
89
+ * return;
90
+ * }
91
+ * await next();
92
+ * });
93
+ */
94
+ export function payloadIs(pattern) {
95
+ return (ctx) => {
96
+ if (!(ctx instanceof CallbackContext))
97
+ return false;
98
+ const data = ctx.data;
99
+ if (data.length === 0)
100
+ return false;
101
+ return typeof pattern === "string" ? data === pattern : pattern.test(data);
102
+ };
103
+ }
104
+ //# sourceMappingURL=predicates.js.map
@@ -0,0 +1,11 @@
1
+ export * from "./bot/index.js";
2
+ export * from "./api/index.js";
3
+ export * from "./transport/index.js";
4
+ export * from "./core/http/index.js";
5
+ export * from "./core/errors/index.js";
6
+ export * from "./core/rate-limiter/RateLimiter.js";
7
+ export * from "./types/index.js";
8
+ export * from "./utils/index.js";
9
+ export * from "./middleware/index.js";
10
+ export * from "./filters/index.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from "./bot/index.js";
2
+ export * from "./api/index.js";
3
+ export * from "./transport/index.js";
4
+ export * from "./core/http/index.js";
5
+ export * from "./core/errors/index.js";
6
+ export * from "./core/rate-limiter/RateLimiter.js";
7
+ export * from "./types/index.js";
8
+ export * from "./utils/index.js";
9
+ export * from "./middleware/index.js";
10
+ export * from "./filters/index.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,28 @@
1
+ import type { Middleware } from "./types.js";
2
+ /**
3
+ * Собирает массив middleware в единую async-функцию.
4
+ *
5
+ * Инварианты:
6
+ * - next() нельзя вызвать дважды в одном middleware — выброс Error.
7
+ * - Если middlewares пустой — вызывается `finalHandler` напрямую.
8
+ * - Ошибка в любом звене пробрасывается вверх по стеку (без перехвата).
9
+ *
10
+ * @param middlewares - Упорядоченный список middleware
11
+ * @param finalHandler - Вызывается после последнего middleware (например, диспетчер хендлеров)
12
+ * @returns Функция `(ctx) => Promise<void>`, которую можно awaited
13
+ */
14
+ export declare function compose<Ctx>(middlewares: ReadonlyArray<Middleware<Ctx>>, finalHandler: (ctx: Ctx) => Promise<void>): (ctx: Ctx) => Promise<void>;
15
+ /**
16
+ * Вариант `compose` с замером времени каждого middleware.
17
+ *
18
+ * Записывает в массив `timings` (по индексу) фактическое время выполнения
19
+ * каждого middleware в миллисекундах (включая вызов вложенных next()).
20
+ *
21
+ * Используется внутри `Bot` когда задан `onMetrics` колбэк.
22
+ *
23
+ * @param middlewares - Упорядоченный список middleware
24
+ * @param finalHandler - Вызывается после последнего middleware
25
+ * @param timings - Выходной массив: `timings[i]` — ms для i-го middleware
26
+ */
27
+ export declare function composeWithTiming<Ctx>(middlewares: ReadonlyArray<Middleware<Ctx>>, finalHandler: (ctx: Ctx) => Promise<void>, timings: number[]): (ctx: Ctx) => Promise<void>;
28
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../src/middleware/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,GAAG,EACzB,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAC3C,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GACxC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAkC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EACnC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAC3C,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EACzC,OAAO,EAAE,MAAM,EAAE,GAChB,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CA+C7B"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Собирает массив middleware в единую async-функцию.
3
+ *
4
+ * Инварианты:
5
+ * - next() нельзя вызвать дважды в одном middleware — выброс Error.
6
+ * - Если middlewares пустой — вызывается `finalHandler` напрямую.
7
+ * - Ошибка в любом звене пробрасывается вверх по стеку (без перехвата).
8
+ *
9
+ * @param middlewares - Упорядоченный список middleware
10
+ * @param finalHandler - Вызывается после последнего middleware (например, диспетчер хендлеров)
11
+ * @returns Функция `(ctx) => Promise<void>`, которую можно awaited
12
+ */
13
+ export function compose(middlewares, finalHandler) {
14
+ return function dispatch(ctx) {
15
+ let index = -1;
16
+ function step(i) {
17
+ // Защита от двойного next(): i должен быть строго больше index при каждом шаге
18
+ if (i <= index) {
19
+ return Promise.reject(new Error("next() вызван повторно в одном middleware"));
20
+ }
21
+ index = i;
22
+ const fn = i < middlewares.length ? middlewares[i] : undefined;
23
+ if (fn === undefined) {
24
+ // Все middleware прошли — запускаем финальный обработчик
25
+ return finalHandler(ctx);
26
+ }
27
+ try {
28
+ const result = fn(ctx, () => step(i + 1));
29
+ // Если middleware синхронный (возвращает void) — оборачиваем в resolved Promise
30
+ return result instanceof Promise ? result : Promise.resolve();
31
+ }
32
+ catch (err) {
33
+ return Promise.reject(err instanceof Error ? err : new Error(String(err)));
34
+ }
35
+ }
36
+ return step(0);
37
+ };
38
+ }
39
+ /**
40
+ * Вариант `compose` с замером времени каждого middleware.
41
+ *
42
+ * Записывает в массив `timings` (по индексу) фактическое время выполнения
43
+ * каждого middleware в миллисекундах (включая вызов вложенных next()).
44
+ *
45
+ * Используется внутри `Bot` когда задан `onMetrics` колбэк.
46
+ *
47
+ * @param middlewares - Упорядоченный список middleware
48
+ * @param finalHandler - Вызывается после последнего middleware
49
+ * @param timings - Выходной массив: `timings[i]` — ms для i-го middleware
50
+ */
51
+ export function composeWithTiming(middlewares, finalHandler, timings) {
52
+ return function dispatch(ctx) {
53
+ let index = -1;
54
+ function step(i) {
55
+ if (i <= index) {
56
+ return Promise.reject(new Error("next() вызван повторно в одном middleware"));
57
+ }
58
+ index = i;
59
+ const fn = i < middlewares.length ? middlewares[i] : undefined;
60
+ if (fn === undefined) {
61
+ return finalHandler(ctx);
62
+ }
63
+ const t0 = Date.now();
64
+ try {
65
+ const result = fn(ctx, () => step(i + 1));
66
+ if (result instanceof Promise) {
67
+ return result.then(() => {
68
+ timings[i] = Date.now() - t0;
69
+ }, (err) => {
70
+ timings[i] = Date.now() - t0;
71
+ return Promise.reject(err instanceof Error ? err : new Error(String(err)));
72
+ });
73
+ }
74
+ timings[i] = Date.now() - t0;
75
+ return Promise.resolve();
76
+ }
77
+ catch (err) {
78
+ timings[i] = Date.now() - t0;
79
+ return Promise.reject(err instanceof Error ? err : new Error(String(err)));
80
+ }
81
+ }
82
+ return step(0);
83
+ };
84
+ }
85
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1,3 @@
1
+ export type { Middleware, NextFn } from "./types.js";
2
+ export { compose, composeWithTiming } from "./compose.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { compose, composeWithTiming } from "./compose.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Функция-переход к следующему middleware.
3
+ * Вызов next() дважды в одном middleware — программная ошибка.
4
+ */
5
+ export type NextFn = () => Promise<void>;
6
+ /**
7
+ * Middleware — асинхронная функция, получающая контекст и переход to следующему звену.
8
+ *
9
+ * @example
10
+ * const logger: Middleware<Context> = async (ctx, next) => {
11
+ * console.log('incoming update');
12
+ * await next();
13
+ * console.log('handlers done');
14
+ * };
15
+ */
16
+ export type Middleware<Ctx> = (ctx: Ctx, next: NextFn) => Promise<void> | void;
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middleware/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,33 @@
1
+ import type { ISubscriptionsApi } from "../api/interfaces.js";
2
+ import type { ErrorHandler, IUpdateTransport, LongPollingConfig, UpdateHandler } from "./interfaces.js";
3
+ /**
4
+ * Транспорт на основе Long Polling.
5
+ *
6
+ * Long Polling проще в настройке — не нужен публичный IP и SSL.
7
+ * Подходит для разработки и небольших ботов.
8
+ */
9
+ export declare class LongPollingTransport implements IUpdateTransport {
10
+ private readonly subscriptionsApi;
11
+ private readonly timeout;
12
+ private readonly limit;
13
+ private readonly retryDelay;
14
+ private readonly resetMarkerOnRestart;
15
+ private readonly allowedUpdates;
16
+ private isRunning;
17
+ private marker;
18
+ private updateHandler;
19
+ private errorHandler;
20
+ private abortController;
21
+ private pollPromise;
22
+ constructor(subscriptionsApi: ISubscriptionsApi, config?: LongPollingConfig);
23
+ start(): Promise<void>;
24
+ stop(): Promise<void>;
25
+ onUpdate(handler: UpdateHandler): void;
26
+ onError(handler: ErrorHandler): void;
27
+ private poll;
28
+ private isAbortError;
29
+ private emitUpdate;
30
+ private emitError;
31
+ private delay;
32
+ }
33
+ //# sourceMappingURL=LongPollingTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LongPollingTransport.d.ts","sourceRoot":"","sources":["../../../src/transport/LongPollingTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACd,MAAM,iBAAiB,CAAC;AAEzB;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAmBzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAlBnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAE1D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA6B;IAIjD,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,WAAW,CAA8B;gBAG9B,gBAAgB,EAAE,iBAAiB,EACpD,MAAM,CAAC,EAAE,iBAAiB;IAStB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAItC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;YAItB,IAAI;IAyDlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,KAAK;CAkBd"}
@@ -0,0 +1,149 @@
1
+ import { ApiError } from "../core/errors/index.js";
2
+ /**
3
+ * Транспорт на основе Long Polling.
4
+ *
5
+ * Long Polling проще в настройке — не нужен публичный IP и SSL.
6
+ * Подходит для разработки и небольших ботов.
7
+ */
8
+ export class LongPollingTransport {
9
+ subscriptionsApi;
10
+ timeout;
11
+ limit;
12
+ retryDelay;
13
+ resetMarkerOnRestart;
14
+ allowedUpdates;
15
+ isRunning = false;
16
+ marker = null;
17
+ updateHandler = null;
18
+ errorHandler = null;
19
+ // AbortController живёт на протяжении одного сеанса polling —
20
+ // позволяет мгновенно прервать текущий fetch-запрос при вызове stop()
21
+ abortController = null;
22
+ // Храним Promise от poll() чтобы stop() мог дождаться чистого завершения цикла
23
+ pollPromise = null;
24
+ constructor(subscriptionsApi, config) {
25
+ this.subscriptionsApi = subscriptionsApi;
26
+ this.timeout = config?.timeout ?? 25;
27
+ this.limit = config?.limit ?? 100;
28
+ this.retryDelay = config?.retryDelay ?? 5000;
29
+ this.resetMarkerOnRestart = config?.resetMarkerOnRestart ?? false;
30
+ this.allowedUpdates = config?.allowedUpdates;
31
+ }
32
+ async start() {
33
+ // Отписка от webhook перед стартом polling —
34
+ // MAX API не позволяет использовать оба метода одновременно
35
+ try {
36
+ await this.subscriptionsApi.unsubscribe();
37
+ }
38
+ catch {
39
+ // Игнорируем ошибку — webhook мог быть не установлен
40
+ }
41
+ this.isRunning = true;
42
+ this.abortController = new AbortController();
43
+ // Запуск в отдельном "потоке" — не блокируем возврат из start()
44
+ this.pollPromise = this.poll();
45
+ }
46
+ async stop() {
47
+ this.isRunning = false;
48
+ // Прерываем текущий getUpdates или delay немедленно —
49
+ // без этого пришлось бы ждать до 25 секунд завершения long-poll запроса
50
+ this.abortController?.abort();
51
+ this.abortController = null;
52
+ // Дожидаемся завершения poll() — гарантируем чистую остановку
53
+ await this.pollPromise;
54
+ this.pollPromise = null;
55
+ // Сбрасываем маркер если настройка включена —
56
+ // следующий start() стартует с самых свежих обновлений
57
+ if (this.resetMarkerOnRestart) {
58
+ this.marker = null;
59
+ }
60
+ }
61
+ onUpdate(handler) {
62
+ this.updateHandler = handler;
63
+ }
64
+ onError(handler) {
65
+ this.errorHandler = handler;
66
+ }
67
+ async poll() {
68
+ while (this.isRunning) {
69
+ try {
70
+ const response = await this.subscriptionsApi.getUpdates({
71
+ timeout: this.timeout,
72
+ limit: this.limit,
73
+ marker: this.marker ?? undefined,
74
+ update_types: this.allowedUpdates,
75
+ }, this.abortController?.signal);
76
+ // Marker сохраняется между запросами —
77
+ // без него API вернёт те же обновления повторно
78
+ if (response.marker !== null) {
79
+ this.marker = response.marker;
80
+ }
81
+ for (const update of response.updates) {
82
+ // Fire-and-forget: один зависший обработчик не блокирует остальные.
83
+ // Ошибки в обработчике логируются, но не останавливают polling.
84
+ this.emitUpdate(update);
85
+ }
86
+ }
87
+ catch (error) {
88
+ // AbortError означает намеренную остановку через stop() — не ошибка
89
+ if (this.isAbortError(error)) {
90
+ break;
91
+ }
92
+ // API вернул 400/404 — маркер устарел или невалиден.
93
+ // Сбрасываем маркер и сразу повторяем запрос без паузы —
94
+ // бот продолжит работу автономно даже после долгой остановки.
95
+ if (error instanceof ApiError &&
96
+ (error.statusCode === 400 || error.statusCode === 404)) {
97
+ this.marker = null;
98
+ this.emitError(new Error(`Маркер устарел или невалиден (HTTP ${error.statusCode}), сброс позиции`));
99
+ continue;
100
+ }
101
+ this.emitError(error instanceof Error ? error : new Error(String(error)));
102
+ // Пауза перед retry — защита от спама сервера при ошибках сети.
103
+ // delay тоже прерывается по сигналу, чтобы stop() не ждал retryDelay.
104
+ await this.delay(this.retryDelay, this.abortController?.signal);
105
+ }
106
+ }
107
+ }
108
+ isAbortError(error) {
109
+ return (error instanceof Error &&
110
+ (error.name === "AbortError" || error.name === "TimeoutError"));
111
+ }
112
+ emitUpdate(update) {
113
+ if (this.updateHandler) {
114
+ try {
115
+ this.updateHandler(update);
116
+ }
117
+ catch (error) {
118
+ // Ошибки в обработчике не должны ломать polling
119
+ this.emitError(error instanceof Error ? error : new Error(String(error)));
120
+ }
121
+ }
122
+ }
123
+ emitError(error) {
124
+ if (this.errorHandler) {
125
+ try {
126
+ this.errorHandler(error);
127
+ }
128
+ catch {
129
+ // Игнорируем ошибки в обработчике ошибок
130
+ }
131
+ }
132
+ }
133
+ // delay с поддержкой AbortSignal — stop() прерывает ожидание мгновенно,
134
+ // а не ждёт истечения retryDelay (до 5 секунд)
135
+ delay(ms, signal) {
136
+ return new Promise((resolve) => {
137
+ if (signal?.aborted) {
138
+ resolve();
139
+ return;
140
+ }
141
+ const tid = setTimeout(resolve, ms);
142
+ signal?.addEventListener("abort", () => {
143
+ clearTimeout(tid);
144
+ resolve();
145
+ }, { once: true });
146
+ });
147
+ }
148
+ }
149
+ //# sourceMappingURL=LongPollingTransport.js.map
@@ -0,0 +1,40 @@
1
+ import { type IncomingMessage, type ServerResponse } from "node:http";
2
+ import type { ISubscriptionsApi } from "../api/interfaces.js";
3
+ import type { ErrorHandler, IUpdateTransport, UpdateHandler, WebhookConfig } from "./interfaces.js";
4
+ /**
5
+ * Транспорт на основе Webhook.
6
+ *
7
+ * Webhook эффективнее для production — MAX сам присылает обновления.
8
+ * Требует публичный HTTPS endpoint.
9
+ */
10
+ export declare class WebhookTransport implements IUpdateTransport {
11
+ private readonly subscriptionsApi;
12
+ private readonly path;
13
+ private readonly port;
14
+ private readonly host;
15
+ private readonly secretToken;
16
+ private readonly webhookUrl;
17
+ private readonly autoRegister;
18
+ private server;
19
+ private startPromise;
20
+ private updateHandler;
21
+ private errorHandler;
22
+ constructor(subscriptionsApi: ISubscriptionsApi, config?: WebhookConfig);
23
+ start(): Promise<void>;
24
+ private _doStart;
25
+ stop(): Promise<void>;
26
+ onUpdate(handler: UpdateHandler): void;
27
+ onError(handler: ErrorHandler): void;
28
+ /**
29
+ * Получить middleware для интеграции с Express/Fastify/Koa.
30
+ *
31
+ * Позволяет встроить webhook в существующий сервер разработчика.
32
+ */
33
+ getMiddleware(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
34
+ private handleRequest;
35
+ private verifyToken;
36
+ private parseBody;
37
+ private emitUpdate;
38
+ private emitError;
39
+ }
40
+ //# sourceMappingURL=WebhookTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookTransport.d.ts","sourceRoot":"","sources":["../../../src/transport/WebhookTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACd,MAAM,iBAAiB,CAAC;AAKzB;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,gBAAgB;IAgBrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAfnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IAEvC,OAAO,CAAC,MAAM,CAAuB;IAGrC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA6B;gBAG9B,gBAAgB,EAAE,iBAAiB,EACpD,MAAM,CAAC,EAAE,aAAa;IAUlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,QAAQ;IAmBhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD3B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAItC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIpC;;;;OAIG;IACH,aAAa,IAAI,CACf,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,CAAC,EAAE,MAAM,IAAI,KACd,IAAI;IAeT,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,SAAS;CASlB"}