@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,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BotLifecycle = void 0;
4
+ const routing_js_1 = require("./routing.js");
5
+ /**
6
+ * Слой жизненного цикла и удобных методов.
7
+ *
8
+ * Отвечает за:
9
+ * - Запуск / остановку бота (`start` / `stop`) с Promise-мьютексом
10
+ * - Управление webhook (`setWebhookUrl`, `deleteWebhook`, `getWebhookInfo`)
11
+ * - Высокоуровневые методы отправки (`sendMessage`, `sendPrivateMessage`, `getMe`)
12
+ * - Конфигурацию наблюдателей (`onError`, `onSlowHandler`)
13
+ *
14
+ * Расширяет {@link BotRouting} — использует маршруты и middleware из него.
15
+ *
16
+ * Поля `api` и `transport` объявлены как `abstract` — конкретные значения
17
+ * предоставляет конструктор `Bot`.
18
+ */
19
+ class BotLifecycle extends routing_js_1.BotRouting {
20
+ // Promise-мьютекс: не null пока бот запущен или останавливается.
21
+ // Использование Promise вместо boolean-флага устраняет race condition:
22
+ // конкурентный вызов start() во время stop() получит актуальный статус
23
+ // без окна между проверкой флага и его установкой.
24
+ startPromise = null;
25
+ // ==================== Управление webhook ====================
26
+ /**
27
+ * Установить URL для webhook.
28
+ */
29
+ async setWebhookUrl(url) {
30
+ await this.api.subscriptions.subscribe({ url });
31
+ }
32
+ /**
33
+ * Удалить webhook.
34
+ */
35
+ async deleteWebhook() {
36
+ await this.api.subscriptions.unsubscribe();
37
+ }
38
+ /**
39
+ * Получить информацию о текущем webhook.
40
+ */
41
+ async getWebhookInfo() {
42
+ return this.api.subscriptions.getSubscriptions();
43
+ }
44
+ // ==================== Наблюдатели ====================
45
+ /**
46
+ * Зарегистрировать обработчик ошибок.
47
+ */
48
+ onError(handler) {
49
+ this.errorHandler = handler;
50
+ return this;
51
+ }
52
+ /**
53
+ * Назначить коллбэк для медленных обработчиков.
54
+ *
55
+ * Если обработка обновления заняла больше `thresholdMs` мс,
56
+ * вызывается `cb` с фактическим временем выполнения и типом обновления.
57
+ *
58
+ * @example
59
+ * bot.onSlowHandler(500, (ms, type) => {
60
+ * log.warn({ ms, type }, 'slow handler detected');
61
+ * });
62
+ */
63
+ onSlowHandler(thresholdMs, cb) {
64
+ this.slowThresholdMs = thresholdMs;
65
+ this.slowHandler = cb;
66
+ return this;
67
+ }
68
+ // ==================== Удобные методы ====================
69
+ /**
70
+ * Получить информацию о боте.
71
+ */
72
+ async getMe() {
73
+ return this.api.bots.getMe();
74
+ }
75
+ /**
76
+ * Отправить сообщение в чат.
77
+ */
78
+ async sendMessage(chatId, text, options) {
79
+ const body = {
80
+ text,
81
+ format: options?.format,
82
+ attachments: options?.attachments,
83
+ notify: options?.notify,
84
+ };
85
+ const response = await this.api.messages.sendMessage({ chat_id: chatId, disable_link_preview: options?.disable_link_preview }, body);
86
+ return response.message;
87
+ }
88
+ /**
89
+ * Отправить личное сообщение пользователю.
90
+ */
91
+ async sendPrivateMessage(userId, text, options) {
92
+ const body = {
93
+ text,
94
+ format: options?.format,
95
+ attachments: options?.attachments,
96
+ notify: options?.notify,
97
+ };
98
+ const response = await this.api.messages.sendMessage({ user_id: userId, disable_link_preview: options?.disable_link_preview }, body);
99
+ return response.message;
100
+ }
101
+ // ==================== Жизненный цикл ====================
102
+ /**
103
+ * Запустить бота.
104
+ */
105
+ async start() {
106
+ // Если уже есть активный Promise запуска/остановки — бот занят.
107
+ // Ждём завершения и только потом решаем, можно ли стартовать.
108
+ if (this.startPromise !== null) {
109
+ await this.startPromise;
110
+ throw new Error("Бот уже запущен. Вызовите stop() перед повторным запуском.");
111
+ }
112
+ // Сохраняем Promise до первого await — в JS между синхронными строками
113
+ // нет переключения контекста, поэтому конкурентный вызов увидит startPromise
114
+ // уже установленным ещё до любого await внутри _doStart().
115
+ const startTask = this._doStart();
116
+ this.startPromise = startTask;
117
+ try {
118
+ await startTask;
119
+ }
120
+ catch (error) {
121
+ // Сбрасываем только если это всё ещё актуальный lifecycle task.
122
+ if (this.startPromise === startTask) {
123
+ this.startPromise = null;
124
+ }
125
+ throw error;
126
+ }
127
+ }
128
+ /**
129
+ * Остановить бота.
130
+ */
131
+ async stop() {
132
+ if (this.startPromise === null) {
133
+ return; // уже остановлен — идемпотентно
134
+ }
135
+ const lifecycleTask = this.startPromise;
136
+ const stopTask = (async () => {
137
+ // Дожидаемся завершения запуска перед остановкой, чтобы transport.stop()
138
+ // всегда вызывался после transport.start().
139
+ try {
140
+ await lifecycleTask;
141
+ }
142
+ catch {
143
+ /* start упал — transport уже не запущен */
144
+ }
145
+ await this.transport.stop();
146
+ })();
147
+ // Держим mutex до полного завершения stop() — это закрывает окно гонки,
148
+ // в котором параллельный start() мог пройти до фактической остановки.
149
+ this.startPromise = stopTask;
150
+ try {
151
+ await stopTask;
152
+ }
153
+ finally {
154
+ if (this.startPromise === stopTask) {
155
+ this.startPromise = null;
156
+ }
157
+ }
158
+ }
159
+ async _doStart() {
160
+ // Проверка токена до запуска — fail fast.
161
+ // Лучше узнать о невалидном токене сразу, чем при первом обновлении.
162
+ await this.api.bots.getMe();
163
+ await this.transport.start();
164
+ }
165
+ }
166
+ exports.BotLifecycle = BotLifecycle;
167
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Метрики обработки одного обновления.
3
+ *
4
+ * Передаются в колбэк `BotConfig.onMetrics` после каждого обработанного update.
5
+ */
6
+ export interface BotMetrics {
7
+ /** Тип обновления (`message_created`, `message_callback`, и т.д.) */
8
+ updateType: string;
9
+ /** Общее время обработки update в миллисекундах (middleware + handlers) */
10
+ totalMs: number;
11
+ /** Размер очереди семафора **до** захвата слота (число ожидающих updates) */
12
+ queueSizeAtStart: number;
13
+ /** Число ошибок, выброшенных handlers во время обработки этого update */
14
+ handlerErrors: number;
15
+ /** Время выполнения каждого middleware в миллисекундах (в порядке регистрации) */
16
+ middlewareTimes: number[];
17
+ }
18
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/bot/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,aAAa,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1,131 @@
1
+ import type { Middleware } from "../middleware/types.js";
2
+ import type { UpdateType } from "../types/update.js";
3
+ import { BotDispatch } from "./dispatch.js";
4
+ import type { Context } from "./Bot.js";
5
+ import { type HearsTrigger, type CommandTrigger } from "./triggers.js";
6
+ /**
7
+ * Слой маршрутизации.
8
+ *
9
+ * Отвечает за регистрацию обработчиков событий:
10
+ * - `on` / `onMessage` / `onCallback` / `onStart` — подписка на типы обновлений
11
+ * - `command` / `hears` / `action` — шорткаты с pattern matching
12
+ * - `use` / `filter` — middleware-цепочки и предикаты
13
+ *
14
+ * Расширяет {@link BotDispatch} — использует `handlers` и `middlewares` из него.
15
+ */
16
+ export declare abstract class BotRouting<Ctx extends Context> extends BotDispatch<Ctx> {
17
+ /**
18
+ * Зарегистрировать один или несколько обработчиков для события message_created.
19
+ *
20
+ * При нескольких аргументах промежуточные middleware должны вызывать `next()`;
21
+ * последний аргумент — финальный обработчик (next не нужен).
22
+ *
23
+ * @example С промежуточным middleware
24
+ * bot.onMessage(authMw, async (ctx) => { await ctx.reply('OK'); });
25
+ */
26
+ onMessage(...fns: Middleware<Ctx>[]): this;
27
+ /**
28
+ * Зарегистрировать один или несколько обработчиков для callback-запросов.
29
+ *
30
+ * @example
31
+ * bot.onCallback(logMw, async (ctx) => { ... });
32
+ */
33
+ onCallback(...fns: Middleware<Ctx>[]): this;
34
+ /**
35
+ * Зарегистрировать обработчик для события `bot_started`.
36
+ *
37
+ * Срабатывает когда пользователь нажимает Start в диалоге или переходит по deep link.
38
+ *
39
+ * @example Onboarding с deep link
40
+ * bot.onStart(async (ctx) => {
41
+ * if (isBotStartedContext(ctx) && ctx.startPayload) {
42
+ * await ctx.reply(`Реферал: ${ctx.startPayload}`);
43
+ * } else {
44
+ * await ctx.reply('Добро пожаловать!');
45
+ * }
46
+ * });
47
+ */
48
+ onStart(...fns: Middleware<Ctx>[]): this;
49
+ /**
50
+ * Зарегистрировать один или несколько обработчиков для любого типа обновления.
51
+ *
52
+ * @example Один обработчик
53
+ * bot.on('message_created', async (ctx) => { ... });
54
+ *
55
+ * @example Несколько middleware + обработчик
56
+ * bot.on('message_created', authMw, rateLimitMw, async (ctx) => { ... });
57
+ */
58
+ on(event: UpdateType, ...fns: Middleware<Ctx>[]): this;
59
+ /**
60
+ * Зарегистрировать обработчик команды.
61
+ *
62
+ * Срабатывает на `message_created`, если текст сообщения начинается с `/<name>`.
63
+ *
64
+ * @example Один обработчик
65
+ * bot.command('start', async (ctx) => { ... });
66
+ *
67
+ * @example Массив команд
68
+ * bot.command(['start', 'begin'], async (ctx) => { ... });
69
+ *
70
+ * @example С промежуточными middleware
71
+ * bot.command('pay', authMw, checkBalanceMw, async (ctx) => { ... });
72
+ */
73
+ command(name: CommandTrigger, ...fns: Middleware<Ctx>[]): this;
74
+ /**
75
+ * Зарегистрировать обработчик по regexp- или строковому фильтру текста сообщения.
76
+ *
77
+ * При совпадении RegExp устанавливает `ctx.match` с capture-группами.
78
+ *
79
+ * @example
80
+ * bot.hears(/(\d+)/, async (ctx) => { ... });
81
+ * bot.hears('привет', async (ctx) => { ... });
82
+ * bot.hears(['привет', /^hi/i], async (ctx) => { ... });
83
+ */
84
+ hears(pattern: HearsTrigger, ...fns: Middleware<Ctx>[]): this;
85
+ /**
86
+ * Зарегистрировать обработчик по `callback.payload`.
87
+ *
88
+ * `pattern` может быть строкой, RegExp или массивом — срабатывает на первое
89
+ * совпадение. При совпадении RegExp устанавливает `ctx.match` с capture-группами.
90
+ *
91
+ * @example
92
+ * bot.action('buy', handler);
93
+ * bot.action(/^buy:(\d+)$/, handler);
94
+ * bot.action(['confirm', 'ok'], handler); // оба payload
95
+ * bot.action([/^buy:/, /^sell:/], handler); // несколько RegExp
96
+ */
97
+ action(pattern: HearsTrigger, ...fns: Middleware<Ctx>[]): this;
98
+ /**
99
+ * Добавить глобальный middleware.
100
+ *
101
+ * Middleware выполняется **внутри** семафорного слота — backpressure применяется
102
+ * ко всему пайплайну целиком, а не только к финальным хендлерам.
103
+ *
104
+ * @example
105
+ * bot.use(async (ctx, next) => {
106
+ * console.log('before');
107
+ * await next();
108
+ * console.log('after');
109
+ * });
110
+ */
111
+ use(middleware: Middleware<Ctx>): this;
112
+ /**
113
+ * Подключить middleware только если предикат возвращает `true`.
114
+ *
115
+ * Если предикат не сработал — обновление прозрачно перетекает к следующим middleware.
116
+ *
117
+ * @example Только сообщения с текстом
118
+ * bot.filter(hasText, async (ctx) => {
119
+ * console.log(ctx.text.toUpperCase()); // ctx.text: string
120
+ * });
121
+ *
122
+ * @example Composer + filter
123
+ * const privateRouter = new Composer();
124
+ * privateRouter.command('start', handler);
125
+ * bot.filter(isPrivateChat, privateRouter.middleware());
126
+ */
127
+ filter<Narrowed extends Ctx>(predicate: (ctx: Ctx) => ctx is Narrowed, ...fns: Middleware<Narrowed>[]): this;
128
+ /** Цепочка из middleware: возвращает единый EventHandler, вызывающий каждый fn по очереди. */
129
+ private pipe;
130
+ }
131
+ //# sourceMappingURL=routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/bot/routing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,UAAU,CAAC;AACtD,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;GASG;AACH,8BAAsB,UAAU,CAAC,GAAG,SAAS,OAAO,CAAE,SAAQ,WAAW,CAAC,GAAG,CAAC;IAG5E;;;;;;;;OAQG;IACH,SAAS,CAAC,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAI1C;;;;;OAKG;IACH,UAAU,CAAC,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAI3C;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAIxC;;;;;;;;OAQG;IACH,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAUtD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAU9D;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAY7D;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAY9D;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI;IAKtC;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,QAAQ,SAAS,GAAG,EACzB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,QAAQ,EACxC,GAAG,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,GAC7B,IAAI;IAWP,8FAA8F;IAC9F,OAAO,CAAC,IAAI;CAIb"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BotRouting = void 0;
4
+ const compose_js_1 = require("../middleware/compose.js");
5
+ const guards_js_1 = require("./context/guards.js");
6
+ const dispatch_js_1 = require("./dispatch.js");
7
+ const triggers_js_1 = require("./triggers.js");
8
+ /**
9
+ * Слой маршрутизации.
10
+ *
11
+ * Отвечает за регистрацию обработчиков событий:
12
+ * - `on` / `onMessage` / `onCallback` / `onStart` — подписка на типы обновлений
13
+ * - `command` / `hears` / `action` — шорткаты с pattern matching
14
+ * - `use` / `filter` — middleware-цепочки и предикаты
15
+ *
16
+ * Расширяет {@link BotDispatch} — использует `handlers` и `middlewares` из него.
17
+ */
18
+ class BotRouting extends dispatch_js_1.BotDispatch {
19
+ // ==================== Регистрация обработчиков ====================
20
+ /**
21
+ * Зарегистрировать один или несколько обработчиков для события message_created.
22
+ *
23
+ * При нескольких аргументах промежуточные middleware должны вызывать `next()`;
24
+ * последний аргумент — финальный обработчик (next не нужен).
25
+ *
26
+ * @example С промежуточным middleware
27
+ * bot.onMessage(authMw, async (ctx) => { await ctx.reply('OK'); });
28
+ */
29
+ onMessage(...fns) {
30
+ return this.on("message_created", ...fns);
31
+ }
32
+ /**
33
+ * Зарегистрировать один или несколько обработчиков для callback-запросов.
34
+ *
35
+ * @example
36
+ * bot.onCallback(logMw, async (ctx) => { ... });
37
+ */
38
+ onCallback(...fns) {
39
+ return this.on("message_callback", ...fns);
40
+ }
41
+ /**
42
+ * Зарегистрировать обработчик для события `bot_started`.
43
+ *
44
+ * Срабатывает когда пользователь нажимает Start в диалоге или переходит по deep link.
45
+ *
46
+ * @example Onboarding с deep link
47
+ * bot.onStart(async (ctx) => {
48
+ * if (isBotStartedContext(ctx) && ctx.startPayload) {
49
+ * await ctx.reply(`Реферал: ${ctx.startPayload}`);
50
+ * } else {
51
+ * await ctx.reply('Добро пожаловать!');
52
+ * }
53
+ * });
54
+ */
55
+ onStart(...fns) {
56
+ return this.on("bot_started", ...fns);
57
+ }
58
+ /**
59
+ * Зарегистрировать один или несколько обработчиков для любого типа обновления.
60
+ *
61
+ * @example Один обработчик
62
+ * bot.on('message_created', async (ctx) => { ... });
63
+ *
64
+ * @example Несколько middleware + обработчик
65
+ * bot.on('message_created', authMw, rateLimitMw, async (ctx) => { ... });
66
+ */
67
+ on(event, ...fns) {
68
+ const composed = this.pipe(...fns);
69
+ const handlers = this.handlers.get(event) ?? [];
70
+ handlers.push(composed);
71
+ this.handlers.set(event, handlers);
72
+ return this;
73
+ }
74
+ // ==================== Composer sugar ====================
75
+ /**
76
+ * Зарегистрировать обработчик команды.
77
+ *
78
+ * Срабатывает на `message_created`, если текст сообщения начинается с `/<name>`.
79
+ *
80
+ * @example Один обработчик
81
+ * bot.command('start', async (ctx) => { ... });
82
+ *
83
+ * @example Массив команд
84
+ * bot.command(['start', 'begin'], async (ctx) => { ... });
85
+ *
86
+ * @example С промежуточными middleware
87
+ * bot.command('pay', authMw, checkBalanceMw, async (ctx) => { ... });
88
+ */
89
+ command(name, ...fns) {
90
+ const composed = this.pipe(...fns);
91
+ return this.on("message_created", async (ctx) => {
92
+ if (!(0, guards_js_1.isMessageContext)(ctx))
93
+ return;
94
+ if ((0, triggers_js_1.matchCommand)(name, ctx.text ?? "")) {
95
+ await composed(ctx);
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * Зарегистрировать обработчик по regexp- или строковому фильтру текста сообщения.
101
+ *
102
+ * При совпадении RegExp устанавливает `ctx.match` с capture-группами.
103
+ *
104
+ * @example
105
+ * bot.hears(/(\d+)/, async (ctx) => { ... });
106
+ * bot.hears('привет', async (ctx) => { ... });
107
+ * bot.hears(['привет', /^hi/i], async (ctx) => { ... });
108
+ */
109
+ hears(pattern, ...fns) {
110
+ const composed = this.pipe(...fns);
111
+ return this.on("message_created", async (ctx) => {
112
+ if (!(0, guards_js_1.isMessageContext)(ctx))
113
+ return;
114
+ const result = (0, triggers_js_1.matchTrigger)(pattern, ctx.text ?? "");
115
+ if (result !== null) {
116
+ if (result !== true)
117
+ ctx.match = result;
118
+ await composed(ctx);
119
+ }
120
+ });
121
+ }
122
+ /**
123
+ * Зарегистрировать обработчик по `callback.payload`.
124
+ *
125
+ * `pattern` может быть строкой, RegExp или массивом — срабатывает на первое
126
+ * совпадение. При совпадении RegExp устанавливает `ctx.match` с capture-группами.
127
+ *
128
+ * @example
129
+ * bot.action('buy', handler);
130
+ * bot.action(/^buy:(\d+)$/, handler);
131
+ * bot.action(['confirm', 'ok'], handler); // оба payload
132
+ * bot.action([/^buy:/, /^sell:/], handler); // несколько RegExp
133
+ */
134
+ action(pattern, ...fns) {
135
+ const composed = this.pipe(...fns);
136
+ return this.on("message_callback", async (ctx) => {
137
+ if (!(0, guards_js_1.isCallbackContext)(ctx))
138
+ return;
139
+ const result = (0, triggers_js_1.matchTrigger)(pattern, ctx.data);
140
+ if (result !== null) {
141
+ if (result !== true)
142
+ ctx.match = result;
143
+ await composed(ctx);
144
+ }
145
+ });
146
+ }
147
+ /**
148
+ * Добавить глобальный middleware.
149
+ *
150
+ * Middleware выполняется **внутри** семафорного слота — backpressure применяется
151
+ * ко всему пайплайну целиком, а не только к финальным хендлерам.
152
+ *
153
+ * @example
154
+ * bot.use(async (ctx, next) => {
155
+ * console.log('before');
156
+ * await next();
157
+ * console.log('after');
158
+ * });
159
+ */
160
+ use(middleware) {
161
+ this.middlewares.push(middleware);
162
+ return this;
163
+ }
164
+ /**
165
+ * Подключить middleware только если предикат возвращает `true`.
166
+ *
167
+ * Если предикат не сработал — обновление прозрачно перетекает к следующим middleware.
168
+ *
169
+ * @example Только сообщения с текстом
170
+ * bot.filter(hasText, async (ctx) => {
171
+ * console.log(ctx.text.toUpperCase()); // ctx.text: string
172
+ * });
173
+ *
174
+ * @example Composer + filter
175
+ * const privateRouter = new Composer();
176
+ * privateRouter.command('start', handler);
177
+ * bot.filter(isPrivateChat, privateRouter.middleware());
178
+ */
179
+ filter(predicate, ...fns) {
180
+ this.use(async (ctx, next) => {
181
+ if (predicate(ctx)) {
182
+ await (0, compose_js_1.compose)(fns, async () => { })(ctx);
183
+ }
184
+ else {
185
+ await next();
186
+ }
187
+ });
188
+ return this;
189
+ }
190
+ /** Цепочка из middleware: возвращает единый EventHandler, вызывающий каждый fn по очереди. */
191
+ pipe(...fns) {
192
+ if (fns.length === 1)
193
+ return fns[0];
194
+ return (0, compose_js_1.compose)(fns, async () => { });
195
+ }
196
+ }
197
+ exports.BotRouting = BotRouting;
198
+ //# sourceMappingURL=routing.js.map
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Тип паттерна для `hears()` и `action()`.
3
+ *
4
+ * Принимает:
5
+ * - строку — точное совпадение
6
+ * - RegExp — совпадение по регулярке, устанавливает `ctx.match`
7
+ * - массив строк/RegExp — срабатывает на **первое** совпадение из списка
8
+ *
9
+ * @example
10
+ * bot.hears('привет', handler); // строка
11
+ * bot.hears(/(\d+)\+(\d+)/, handler); // RegExp
12
+ * bot.hears([/^\d+$/, 'помощь'], handler); // массив: число ИЛИ "помощь"
13
+ *
14
+ * bot.action(['confirm', 'ok'], handler); // несколько строк
15
+ * bot.action([/^buy:/, /^sell:/], handler); // несколько RegExp
16
+ */
17
+ export type HearsTrigger = string | RegExp | ReadonlyArray<string | RegExp>;
18
+ /**
19
+ * Тип паттерна для `command()`.
20
+ *
21
+ * Принимает одну команду или массив команд (без учёта ведущего `/`).
22
+ *
23
+ * @example
24
+ * bot.command('start', handler); // /start
25
+ * bot.command(['start', 'begin'], handler); // /start или /begin
26
+ * bot.command(['/help', 'info'], handler); // ведущий / необязателен
27
+ */
28
+ export type CommandTrigger = string | ReadonlyArray<string>;
29
+ /**
30
+ * Проверяет `HearsTrigger` против строки, перебирая все паттерны.
31
+ *
32
+ * Возвращает результат **первого** совпавшего паттерна:
33
+ * - `RegExpExecArray` — если совпал RegExp (для установки `ctx.match`)
34
+ * - `true` — если совпала строка
35
+ * - `null` — ни один паттерн не совпал
36
+ *
37
+ * @example
38
+ * const result = matchTrigger([/^(\d+)$/, 'да'], '42');
39
+ * // result: RegExpExecArray — ['42', '42'], совпал первый паттерн
40
+ *
41
+ * const result2 = matchTrigger([/^\d+$/, 'да'], 'да');
42
+ * // result2: true — совпала строка
43
+ */
44
+ export declare function matchTrigger(trigger: HearsTrigger, text: string): RegExpExecArray | true | null;
45
+ /**
46
+ * Проверяет `CommandTrigger` против текста сообщения.
47
+ *
48
+ * Совпадение: текст равен `/<name>` или начинается с `/<name> ` (команда с аргументами).
49
+ * Сравнение регистронезависимо (`/Start` === `/start`).
50
+ *
51
+ * @returns `true` если хотя бы одна команда совпала, иначе `false`
52
+ *
53
+ * @example
54
+ * matchCommand('start', '/start') // true
55
+ * matchCommand('start', '/start arg1') // true
56
+ * matchCommand(['start', 'help'], '/help') // true
57
+ * matchCommand('start', '/stop') // false
58
+ * matchCommand('start', '/starter') // false — нет пробела после имени
59
+ */
60
+ export declare function matchCommand(trigger: CommandTrigger, text: string): boolean;
61
+ //# sourceMappingURL=triggers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/bot/triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAyB5D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,GACX,eAAe,GAAG,IAAI,GAAG,IAAI,CAU/B;AAWD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW3E"}