@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,11 @@
1
+ /**
2
+ * Базовый класс ошибок SDK.
3
+ *
4
+ * Иерархия ошибок позволяет ловить как конкретные типы,
5
+ * так и все ошибки SDK одним catch-блоком.
6
+ */
7
+ export declare abstract class MaxError extends Error {
8
+ abstract readonly code: string;
9
+ constructor(message: string);
10
+ }
11
+ //# sourceMappingURL=MaxError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaxError.d.ts","sourceRoot":"","sources":["../../../../src/core/errors/MaxError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,8BAAsB,QAAS,SAAQ,KAAK;IAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM;CAO5B"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Базовый класс ошибок SDK.
3
+ *
4
+ * Иерархия ошибок позволяет ловить как конкретные типы,
5
+ * так и все ошибки SDK одним catch-блоком.
6
+ */
7
+ export class MaxError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = this.constructor.name;
11
+ // Восстанавливаем прототип — необходимо для корректной работы instanceof в TypeScript
12
+ Object.setPrototypeOf(this, new.target.prototype);
13
+ }
14
+ }
15
+ //# sourceMappingURL=MaxError.js.map
@@ -0,0 +1,59 @@
1
+ import { MaxError } from "./MaxError.js";
2
+ /**
3
+ * Ошибка превышения лимита запросов (HTTP 429).
4
+ *
5
+ * Содержит информацию о времени до возможности повторного запроса.
6
+ * Разработчик может использовать retryAfter для реализации своей логики retry.
7
+ */
8
+ export declare class RateLimitError extends MaxError {
9
+ readonly retryAfter: number;
10
+ readonly code = "RATE_LIMIT";
11
+ constructor(retryAfter: number, message?: string);
12
+ }
13
+ /**
14
+ * Ошибка аутентификации (HTTP 401).
15
+ *
16
+ * Невалидный или отсутствующий токен — бот не сможет работать.
17
+ */
18
+ export declare class AuthError extends MaxError {
19
+ readonly code = "AUTH_ERROR";
20
+ constructor(message?: string);
21
+ }
22
+ /**
23
+ * Ошибка сети (таймаут, недоступность сервера и т.д.).
24
+ *
25
+ * Временная ошибка — можно повторить запрос.
26
+ */
27
+ export declare class NetworkError extends MaxError {
28
+ readonly cause?: Error | undefined;
29
+ readonly code = "NETWORK_ERROR";
30
+ constructor(message: string, cause?: Error | undefined);
31
+ }
32
+ /**
33
+ * Ошибка API (HTTP 4xx/5xx кроме 401 и 429).
34
+ *
35
+ * Содержит HTTP-код и сообщение от сервера.
36
+ */
37
+ export declare class ApiError extends MaxError {
38
+ readonly statusCode: number;
39
+ readonly apiCode?: string | undefined;
40
+ readonly code = "API_ERROR";
41
+ constructor(statusCode: number, message: string, apiCode?: string | undefined);
42
+ }
43
+ /**
44
+ * Ошибка валидации входных данных.
45
+ *
46
+ * Возникает при некорректных параметрах, переданных в методы SDK.
47
+ */
48
+ export declare class ValidationError extends MaxError {
49
+ readonly code = "VALIDATION_ERROR";
50
+ constructor(message: string);
51
+ }
52
+ /**
53
+ * Ресурс не найден (HTTP 404).
54
+ */
55
+ export declare class NotFoundError extends MaxError {
56
+ readonly code = "NOT_FOUND";
57
+ constructor(message?: string);
58
+ }
59
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/core/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,QAAQ;aAIxB,UAAU,EAAE,MAAM;IAHpC,QAAQ,CAAC,IAAI,gBAAgB;gBAGX,UAAU,EAAE,MAAM,EAClC,OAAO,SAA6D;CAIvE;AAED;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,QAAQ;IACrC,QAAQ,CAAC,IAAI,gBAAgB;gBAEjB,OAAO,SAAgD;CAGpE;AAED;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,QAAQ;aAKtB,KAAK,CAAC,EAAE,KAAK;IAJ/B,QAAQ,CAAC,IAAI,mBAAmB;gBAG9B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAIhC;AAED;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,QAAQ;aAIlB,UAAU,EAAE,MAAM;aAElB,OAAO,CAAC,EAAE,MAAM;IALlC,QAAQ,CAAC,IAAI,eAAe;gBAGV,UAAU,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,YAAA;CAInC;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,QAAQ,CAAC,IAAI,sBAAsB;gBAEvB,OAAO,EAAE,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,eAAe;gBAEhB,OAAO,SAAqB;CAGzC"}
@@ -0,0 +1,75 @@
1
+ import { MaxError } from "./MaxError.js";
2
+ /**
3
+ * Ошибка превышения лимита запросов (HTTP 429).
4
+ *
5
+ * Содержит информацию о времени до возможности повторного запроса.
6
+ * Разработчик может использовать retryAfter для реализации своей логики retry.
7
+ */
8
+ export class RateLimitError extends MaxError {
9
+ retryAfter;
10
+ code = "RATE_LIMIT";
11
+ constructor(retryAfter, message = `Превышен лимит запросов. Повторите через ${retryAfter}мс`) {
12
+ super(message);
13
+ this.retryAfter = retryAfter;
14
+ }
15
+ }
16
+ /**
17
+ * Ошибка аутентификации (HTTP 401).
18
+ *
19
+ * Невалидный или отсутствующий токен — бот не сможет работать.
20
+ */
21
+ export class AuthError extends MaxError {
22
+ code = "AUTH_ERROR";
23
+ constructor(message = "Ошибка аутентификации: проверьте токен бота") {
24
+ super(message);
25
+ }
26
+ }
27
+ /**
28
+ * Ошибка сети (таймаут, недоступность сервера и т.д.).
29
+ *
30
+ * Временная ошибка — можно повторить запрос.
31
+ */
32
+ export class NetworkError extends MaxError {
33
+ cause;
34
+ code = "NETWORK_ERROR";
35
+ constructor(message, cause) {
36
+ super(message);
37
+ this.cause = cause;
38
+ }
39
+ }
40
+ /**
41
+ * Ошибка API (HTTP 4xx/5xx кроме 401 и 429).
42
+ *
43
+ * Содержит HTTP-код и сообщение от сервера.
44
+ */
45
+ export class ApiError extends MaxError {
46
+ statusCode;
47
+ apiCode;
48
+ code = "API_ERROR";
49
+ constructor(statusCode, message, apiCode) {
50
+ super(message);
51
+ this.statusCode = statusCode;
52
+ this.apiCode = apiCode;
53
+ }
54
+ }
55
+ /**
56
+ * Ошибка валидации входных данных.
57
+ *
58
+ * Возникает при некорректных параметрах, переданных в методы SDK.
59
+ */
60
+ export class ValidationError extends MaxError {
61
+ code = "VALIDATION_ERROR";
62
+ constructor(message) {
63
+ super(message);
64
+ }
65
+ }
66
+ /**
67
+ * Ресурс не найден (HTTP 404).
68
+ */
69
+ export class NotFoundError extends MaxError {
70
+ code = "NOT_FOUND";
71
+ constructor(message = "Ресурс не найден") {
72
+ super(message);
73
+ }
74
+ }
75
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1,3 @@
1
+ export { MaxError } from "./MaxError.js";
2
+ export { RateLimitError, AuthError, NetworkError, ApiError, ValidationError, NotFoundError, } from "./errors.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,cAAc,EACd,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,aAAa,GACd,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MaxError } from "./MaxError.js";
2
+ export { RateLimitError, AuthError, NetworkError, ApiError, ValidationError, NotFoundError, } from "./errors.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,28 @@
1
+ import type { HttpClientConfig, IHttpClient, RequestOptions } from "./interfaces.js";
2
+ /**
3
+ * HTTP-клиент для взаимодействия с MAX Bot API.
4
+ *
5
+ * Инкапсулирует всю HTTP-логику: заголовки, таймауты, rate limiting.
6
+ * Разработчику не нужно думать о низкоуровневых деталях.
7
+ */
8
+ export declare class HttpClient implements IHttpClient {
9
+ private readonly baseUrl;
10
+ private readonly token;
11
+ private readonly timeout;
12
+ private readonly rateLimiter;
13
+ constructor(config: HttpClientConfig);
14
+ get<T>(path: string, options?: RequestOptions): Promise<T>;
15
+ post<T>(path: string, options?: RequestOptions): Promise<T>;
16
+ put<T>(path: string, options?: RequestOptions): Promise<T>;
17
+ patch<T>(path: string, options?: RequestOptions): Promise<T>;
18
+ delete<T>(path: string, options?: RequestOptions): Promise<T>;
19
+ private request;
20
+ private buildUrl;
21
+ /**
22
+ * Централизованная обработка ответов —
23
+ * единообразное поведение во всём SDK, легче отлаживать
24
+ */
25
+ private handleResponse;
26
+ private parseRetryAfter;
27
+ }
28
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/http/HttpClient.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;gBAElD,MAAM,EAAE,gBAAgB;IAa9B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI5D,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAIrD,OAAO;IAqDrB,OAAO,CAAC,QAAQ;IAiBhB;;;OAGG;YACW,cAAc;IAwC5B,OAAO,CAAC,eAAe;CAmBxB"}
@@ -0,0 +1,144 @@
1
+ import { ApiError, AuthError, MaxError, NetworkError, NotFoundError, RateLimitError, } from "../errors/index.js";
2
+ /**
3
+ * HTTP-клиент для взаимодействия с MAX Bot API.
4
+ *
5
+ * Инкапсулирует всю HTTP-логику: заголовки, таймауты, rate limiting.
6
+ * Разработчику не нужно думать о низкоуровневых деталях.
7
+ */
8
+ export class HttpClient {
9
+ baseUrl;
10
+ token;
11
+ timeout;
12
+ rateLimiter;
13
+ constructor(config) {
14
+ // Валидация токена при создании клиента —
15
+ // лучше упасть сразу с понятной ошибкой, чем при первом запросе
16
+ if (!config.token || typeof config.token !== "string") {
17
+ throw new AuthError("Токен не указан или имеет неверный формат");
18
+ }
19
+ this.baseUrl = config.baseUrl;
20
+ this.token = config.token;
21
+ this.timeout = config.timeout ?? 30000;
22
+ this.rateLimiter = config.rateLimiter;
23
+ }
24
+ async get(path, options) {
25
+ return this.request("GET", path, options);
26
+ }
27
+ async post(path, options) {
28
+ return this.request("POST", path, options);
29
+ }
30
+ async put(path, options) {
31
+ return this.request("PUT", path, options);
32
+ }
33
+ async patch(path, options) {
34
+ return this.request("PATCH", path, options);
35
+ }
36
+ async delete(path, options) {
37
+ return this.request("DELETE", path, options);
38
+ }
39
+ async request(method, path, options) {
40
+ // Rate limiter перед каждым запросом —
41
+ // гарантирует соблюдение лимита 30 rps даже при параллельных вызовах
42
+ await this.rateLimiter.acquire();
43
+ const url = this.buildUrl(path, options?.params);
44
+ const headers = {
45
+ Authorization: this.token,
46
+ ...options?.headers,
47
+ };
48
+ // Content-Type только для запросов с телом
49
+ if (options?.body !== undefined) {
50
+ headers["Content-Type"] = "application/json";
51
+ }
52
+ try {
53
+ const response = await fetch(url, {
54
+ method,
55
+ headers,
56
+ body: options?.body !== undefined
57
+ ? JSON.stringify(options.body)
58
+ : undefined,
59
+ // Внешний signal (например, AbortController при остановке бота) имеет
60
+ // приоритет над таймаутом — внешний caller управляет отменой сам.
61
+ // Иначе используем AbortSignal.timeout для автоматической очистки ресурсов.
62
+ signal: options?.signal ?? AbortSignal.timeout(this.timeout),
63
+ });
64
+ return await this.handleResponse(response);
65
+ }
66
+ catch (error) {
67
+ // Преобразуем ошибки fetch в наши типы для единообразной обработки
68
+ if (error instanceof MaxError) {
69
+ throw error;
70
+ }
71
+ if (error instanceof Error) {
72
+ if (error.name === "AbortError" || error.name === "TimeoutError") {
73
+ throw new NetworkError(`Таймаут запроса: ${this.timeout}мс`, error);
74
+ }
75
+ throw new NetworkError(`Ошибка сети: ${error.message}`, error);
76
+ }
77
+ throw new NetworkError("Неизвестная ошибка сети");
78
+ }
79
+ }
80
+ buildUrl(path, params) {
81
+ const url = new URL(path, this.baseUrl);
82
+ if (params) {
83
+ for (const [key, value] of Object.entries(params)) {
84
+ if (value !== undefined) {
85
+ url.searchParams.set(key, String(value));
86
+ }
87
+ }
88
+ }
89
+ return url.toString();
90
+ }
91
+ /**
92
+ * Централизованная обработка ответов —
93
+ * единообразное поведение во всём SDK, легче отлаживать
94
+ */
95
+ async handleResponse(response) {
96
+ if (response.ok) {
97
+ // Некоторые эндпоинты возвращают пустой ответ (204 No Content)
98
+ const text = await response.text();
99
+ if (!text) {
100
+ return undefined;
101
+ }
102
+ return JSON.parse(text);
103
+ }
104
+ // Парсим тело ошибки для получения деталей
105
+ let errorBody = null;
106
+ try {
107
+ errorBody = (await response.json());
108
+ }
109
+ catch {
110
+ // Тело ответа не JSON — используем статус-код
111
+ }
112
+ const message = errorBody?.message ?? response.statusText;
113
+ switch (response.status) {
114
+ case 401:
115
+ throw new AuthError(message);
116
+ case 404:
117
+ throw new NotFoundError(message);
118
+ case 429: {
119
+ // Retry-After может быть в секундах или в HTTP-date формате
120
+ const retryAfter = this.parseRetryAfter(response.headers.get("Retry-After"));
121
+ throw new RateLimitError(retryAfter, message);
122
+ }
123
+ default:
124
+ throw new ApiError(response.status, message, errorBody?.code);
125
+ }
126
+ }
127
+ parseRetryAfter(header) {
128
+ if (!header) {
129
+ // Если заголовок отсутствует, ждём 1 секунду по умолчанию
130
+ return 1000;
131
+ }
132
+ const seconds = parseInt(header, 10);
133
+ if (!isNaN(seconds)) {
134
+ return seconds * 1000;
135
+ }
136
+ // HTTP-date формат
137
+ const date = Date.parse(header);
138
+ if (!isNaN(date)) {
139
+ return Math.max(0, date - Date.now());
140
+ }
141
+ return 1000;
142
+ }
143
+ }
144
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1,3 @@
1
+ export { HttpClient } from "./HttpClient.js";
2
+ export type { HttpClientConfig, IHttpClient, RequestOptions, } from "./interfaces.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { HttpClient } from "./HttpClient.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,42 @@
1
+ import type { IRateLimiter } from "../rate-limiter/RateLimiter.js";
2
+ /**
3
+ * Конфигурация HTTP-клиента
4
+ */
5
+ export interface HttpClientConfig {
6
+ /** Базовый URL API */
7
+ baseUrl: string;
8
+ /** Токен авторизации бота */
9
+ token: string;
10
+ /** Таймаут запроса в миллисекундах (по умолчанию 30000) */
11
+ timeout?: number;
12
+ /** Rate limiter для контроля частоты запросов */
13
+ rateLimiter: IRateLimiter;
14
+ }
15
+ /**
16
+ * Опции для отдельного запроса
17
+ */
18
+ export interface RequestOptions {
19
+ /** Тело запроса */
20
+ body?: unknown;
21
+ /** Query-параметры */
22
+ params?: Record<string, string | number | boolean | undefined>;
23
+ /** Дополнительные заголовки */
24
+ headers?: Record<string, string>;
25
+ /**
26
+ * Сигнал для отмены запроса.
27
+ * При передаче заменяет встроенный AbortSignal.timeout —
28
+ * внешний caller берёт управление таймаутом на себя.
29
+ */
30
+ signal?: AbortSignal;
31
+ }
32
+ /**
33
+ * Интерфейс HTTP-клиента для возможности замены реализации (например, для моков)
34
+ */
35
+ export interface IHttpClient {
36
+ get<T>(path: string, options?: RequestOptions): Promise<T>;
37
+ post<T>(path: string, options?: RequestOptions): Promise<T>;
38
+ put<T>(path: string, options?: RequestOptions): Promise<T>;
39
+ patch<T>(path: string, options?: RequestOptions): Promise<T>;
40
+ delete<T>(path: string, options?: RequestOptions): Promise<T>;
41
+ }
42
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/core/http/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,WAAW,EAAE,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC/D,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Интерфейс rate limiter для возможности замены реализации
3
+ */
4
+ export interface IRateLimiter {
5
+ /**
6
+ * Запрашивает разрешение на выполнение запроса.
7
+ * Возвращает Promise, который резолвится когда запрос можно выполнить.
8
+ */
9
+ acquire(): Promise<void>;
10
+ }
11
+ /**
12
+ * Rate Limiter на основе алгоритма Token Bucket.
13
+ *
14
+ * Token Bucket позволяет накапливать "запас" запросов при простое,
15
+ * что даёт возможность burst-запросов без превышения среднего лимита.
16
+ */
17
+ export declare class RateLimiter implements IRateLimiter {
18
+ private readonly maxTokens;
19
+ private readonly refillRate;
20
+ private tokens;
21
+ private lastRefill;
22
+ private readonly queue;
23
+ private processing;
24
+ /**
25
+ * @param maxTokens - Максимальное количество токенов (по умолчанию 30)
26
+ * @param refillRate - Скорость восполнения токенов в секунду (по умолчанию 30)
27
+ */
28
+ constructor(maxTokens?: number, refillRate?: number);
29
+ acquire(): Promise<void>;
30
+ /**
31
+ * Восполняет токены пропорционально прошедшему времени
32
+ */
33
+ private refill;
34
+ /**
35
+ * Планирует ровно один setTimeout для первого элемента очереди.
36
+ *
37
+ * Вместо слип-цикла (sleep → refill → check → sleep …) каждый элемент
38
+ * получает свой точный таймер: setTimeout срабатывает ровно в момент
39
+ * когда токен готов, без дополнительного ожидания.
40
+ *
41
+ * processing-флаг гарантирует единственный активный таймер на очередь —
42
+ * новые вызовы scheduleNext() от acquire() не создают лишних таймеров.
43
+ */
44
+ private scheduleNext;
45
+ }
46
+ //# sourceMappingURL=RateLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../../src/core/rate-limiter/RateLimiter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAQD;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;gBACS,SAAS,SAAK,EAAE,UAAU,SAAK;IAcrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB9B;;OAEG;IACH,OAAO,CAAC,MAAM;IAYd;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;CAuCrB"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Rate Limiter на основе алгоритма Token Bucket.
3
+ *
4
+ * Token Bucket позволяет накапливать "запас" запросов при простое,
5
+ * что даёт возможность burst-запросов без превышения среднего лимита.
6
+ */
7
+ export class RateLimiter {
8
+ maxTokens;
9
+ refillRate;
10
+ tokens;
11
+ lastRefill;
12
+ queue = [];
13
+ processing = false;
14
+ /**
15
+ * @param maxTokens - Максимальное количество токенов (по умолчанию 30)
16
+ * @param refillRate - Скорость восполнения токенов в секунду (по умолчанию 30)
17
+ */
18
+ constructor(maxTokens = 30, refillRate = 30) {
19
+ if (!Number.isFinite(maxTokens) || maxTokens <= 0) {
20
+ throw new Error("Параметр maxTokens должен быть положительным числом");
21
+ }
22
+ if (!Number.isFinite(refillRate) || refillRate <= 0) {
23
+ throw new Error("Параметр refillRate должен быть положительным числом");
24
+ }
25
+ this.maxTokens = maxTokens;
26
+ this.refillRate = refillRate;
27
+ this.tokens = maxTokens;
28
+ this.lastRefill = Date.now();
29
+ }
30
+ async acquire() {
31
+ this.refill();
32
+ if (this.tokens >= 1) {
33
+ this.tokens -= 1;
34
+ return;
35
+ }
36
+ // Запрос ждёт в очереди — не отбрасываем, а откладываем.
37
+ // Это избавляет разработчика от необходимости реализовывать retry-логику самостоятельно.
38
+ return new Promise((resolve) => {
39
+ // Вычисляем точное время готовности: позиция в очереди × интервал между токенами.
40
+ // Это позволяет scheduleQueue() поставить ровно один setTimeout на каждый элемент
41
+ // вместо общего слип-цикла, который вызывал задержку даже когда токен уже готов.
42
+ const msPerToken = 1000 / this.refillRate;
43
+ const position = this.queue.length; // 0-based: текущий элемент — первый ожидающий
44
+ const readyAt = Date.now() +
45
+ Math.ceil((1 - this.tokens) * msPerToken) +
46
+ position * msPerToken;
47
+ this.queue.push({ resolve, readyAt });
48
+ this.scheduleNext();
49
+ });
50
+ }
51
+ /**
52
+ * Восполняет токены пропорционально прошедшему времени
53
+ */
54
+ refill() {
55
+ const now = Date.now();
56
+ const elapsed = (now - this.lastRefill) / 1000;
57
+ // Добавляем токены пропорционально времени, но не больше максимума
58
+ this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate);
59
+ this.lastRefill = now;
60
+ }
61
+ /**
62
+ * Планирует ровно один setTimeout для первого элемента очереди.
63
+ *
64
+ * Вместо слип-цикла (sleep → refill → check → sleep …) каждый элемент
65
+ * получает свой точный таймер: setTimeout срабатывает ровно в момент
66
+ * когда токен готов, без дополнительного ожидания.
67
+ *
68
+ * processing-флаг гарантирует единственный активный таймер на очередь —
69
+ * новые вызовы scheduleNext() от acquire() не создают лишних таймеров.
70
+ */
71
+ scheduleNext() {
72
+ if (this.processing || this.queue.length === 0) {
73
+ return;
74
+ }
75
+ this.processing = true;
76
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- queue.length > 0 проверен выше
77
+ const item = this.queue[0];
78
+ const delay = Math.max(0, item.readyAt - Date.now());
79
+ setTimeout(() => {
80
+ this.processing = false;
81
+ // Обновляем токены на момент срабатывания таймера
82
+ this.refill();
83
+ if (this.tokens >= 1) {
84
+ this.tokens -= 1;
85
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- queue непустая: item гарантированно существует
86
+ this.queue.shift().resolve();
87
+ }
88
+ else {
89
+ // Edge case: таймер мог сработать чуть раньше фактической готовности токена
90
+ // (погрешность clock/timer). Пересчитываем readyAt для головы очереди,
91
+ // чтобы следующий таймер был точным и не создавал цепочку setTimeout(0).
92
+ const head = this.queue[0];
93
+ if (head) {
94
+ const msPerToken = 1000 / this.refillRate;
95
+ head.readyAt = Date.now() + Math.ceil((1 - this.tokens) * msPerToken);
96
+ }
97
+ }
98
+ // Если токен всё ещё не готов (unlikely — системный таймер мог сработать
99
+ // чуть раньше), элемент остаётся в очереди и scheduleNext() поставит
100
+ // новый точный таймер.
101
+ // Запускаем следующий элемент, если очередь не пуста
102
+ this.scheduleNext();
103
+ }, delay);
104
+ }
105
+ }
106
+ //# sourceMappingURL=RateLimiter.js.map
@@ -0,0 +1,3 @@
1
+ export { RateLimiter } from "./RateLimiter.js";
2
+ export type { IRateLimiter } from "./RateLimiter.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/rate-limiter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RateLimiter } from "./RateLimiter.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ export { hasText, isPrivateChat, commandIs, hasCallbackPayload, payloadIs, } from "./predicates.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,SAAS,GACV,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { hasText, isPrivateChat, commandIs, hasCallbackPayload, payloadIs, } from "./predicates.js";
2
+ //# sourceMappingURL=index.js.map