@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,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchTrigger = matchTrigger;
4
+ exports.matchCommand = matchCommand;
5
+ /**
6
+ * Проверяет один паттерн против строки.
7
+ *
8
+ * Для RegExp с флагами `g`/`y` создаёт новый объект при каждом вызове,
9
+ * чтобы избежать сдвига `lastIndex` между вызовами.
10
+ *
11
+ * @returns Массив совпадения (RegExp), `true` (строка) или `null` (нет совпадения)
12
+ */
13
+ function matchOne(pattern, text) {
14
+ if (pattern instanceof RegExp) {
15
+ // Создаём новый RegExp для stateful-флагов чтобы lastIndex не сохранялся
16
+ const re = pattern.flags.includes("g") || pattern.flags.includes("y")
17
+ ? new RegExp(pattern.source, pattern.flags)
18
+ : pattern;
19
+ return re.exec(text) ?? null;
20
+ }
21
+ return text === pattern ? true : null;
22
+ }
23
+ /**
24
+ * Проверяет `HearsTrigger` против строки, перебирая все паттерны.
25
+ *
26
+ * Возвращает результат **первого** совпавшего паттерна:
27
+ * - `RegExpExecArray` — если совпал RegExp (для установки `ctx.match`)
28
+ * - `true` — если совпала строка
29
+ * - `null` — ни один паттерн не совпал
30
+ *
31
+ * @example
32
+ * const result = matchTrigger([/^(\d+)$/, 'да'], '42');
33
+ * // result: RegExpExecArray — ['42', '42'], совпал первый паттерн
34
+ *
35
+ * const result2 = matchTrigger([/^\d+$/, 'да'], 'да');
36
+ * // result2: true — совпала строка
37
+ */
38
+ function matchTrigger(trigger, text) {
39
+ const patterns = Array.isArray(trigger)
40
+ ? trigger
41
+ : [trigger];
42
+ for (const p of patterns) {
43
+ const result = matchOne(p, text);
44
+ if (result !== null)
45
+ return result;
46
+ }
47
+ return null;
48
+ }
49
+ /**
50
+ * Нормализует имя команды: убирает ведущий `/`, приводит к нижнему регистру.
51
+ *
52
+ * @internal
53
+ */
54
+ function normalizeCommandName(name) {
55
+ return (name.startsWith("/") ? name.slice(1) : name).toLowerCase();
56
+ }
57
+ /**
58
+ * Проверяет `CommandTrigger` против текста сообщения.
59
+ *
60
+ * Совпадение: текст равен `/<name>` или начинается с `/<name> ` (команда с аргументами).
61
+ * Сравнение регистронезависимо (`/Start` === `/start`).
62
+ *
63
+ * @returns `true` если хотя бы одна команда совпала, иначе `false`
64
+ *
65
+ * @example
66
+ * matchCommand('start', '/start') // true
67
+ * matchCommand('start', '/start arg1') // true
68
+ * matchCommand(['start', 'help'], '/help') // true
69
+ * matchCommand('start', '/stop') // false
70
+ * matchCommand('start', '/starter') // false — нет пробела после имени
71
+ */
72
+ function matchCommand(trigger, text) {
73
+ const names = Array.isArray(trigger)
74
+ ? trigger
75
+ : [trigger];
76
+ const lower = text.toLowerCase();
77
+ for (const raw of names) {
78
+ const cmd = `/${normalizeCommandName(raw)}`;
79
+ if (lower === cmd || lower.startsWith(`${cmd} `))
80
+ return true;
81
+ }
82
+ return false;
83
+ }
84
+ //# sourceMappingURL=triggers.js.map
@@ -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,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MaxError = void 0;
4
+ /**
5
+ * Базовый класс ошибок SDK.
6
+ *
7
+ * Иерархия ошибок позволяет ловить как конкретные типы,
8
+ * так и все ошибки SDK одним catch-блоком.
9
+ */
10
+ class MaxError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = this.constructor.name;
14
+ // Восстанавливаем прототип — необходимо для корректной работы instanceof в TypeScript
15
+ Object.setPrototypeOf(this, new.target.prototype);
16
+ }
17
+ }
18
+ exports.MaxError = MaxError;
19
+ //# 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,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotFoundError = exports.ValidationError = exports.ApiError = exports.NetworkError = exports.AuthError = exports.RateLimitError = void 0;
4
+ const MaxError_js_1 = require("./MaxError.js");
5
+ /**
6
+ * Ошибка превышения лимита запросов (HTTP 429).
7
+ *
8
+ * Содержит информацию о времени до возможности повторного запроса.
9
+ * Разработчик может использовать retryAfter для реализации своей логики retry.
10
+ */
11
+ class RateLimitError extends MaxError_js_1.MaxError {
12
+ retryAfter;
13
+ code = "RATE_LIMIT";
14
+ constructor(retryAfter, message = `Превышен лимит запросов. Повторите через ${retryAfter}мс`) {
15
+ super(message);
16
+ this.retryAfter = retryAfter;
17
+ }
18
+ }
19
+ exports.RateLimitError = RateLimitError;
20
+ /**
21
+ * Ошибка аутентификации (HTTP 401).
22
+ *
23
+ * Невалидный или отсутствующий токен — бот не сможет работать.
24
+ */
25
+ class AuthError extends MaxError_js_1.MaxError {
26
+ code = "AUTH_ERROR";
27
+ constructor(message = "Ошибка аутентификации: проверьте токен бота") {
28
+ super(message);
29
+ }
30
+ }
31
+ exports.AuthError = AuthError;
32
+ /**
33
+ * Ошибка сети (таймаут, недоступность сервера и т.д.).
34
+ *
35
+ * Временная ошибка — можно повторить запрос.
36
+ */
37
+ class NetworkError extends MaxError_js_1.MaxError {
38
+ cause;
39
+ code = "NETWORK_ERROR";
40
+ constructor(message, cause) {
41
+ super(message);
42
+ this.cause = cause;
43
+ }
44
+ }
45
+ exports.NetworkError = NetworkError;
46
+ /**
47
+ * Ошибка API (HTTP 4xx/5xx кроме 401 и 429).
48
+ *
49
+ * Содержит HTTP-код и сообщение от сервера.
50
+ */
51
+ class ApiError extends MaxError_js_1.MaxError {
52
+ statusCode;
53
+ apiCode;
54
+ code = "API_ERROR";
55
+ constructor(statusCode, message, apiCode) {
56
+ super(message);
57
+ this.statusCode = statusCode;
58
+ this.apiCode = apiCode;
59
+ }
60
+ }
61
+ exports.ApiError = ApiError;
62
+ /**
63
+ * Ошибка валидации входных данных.
64
+ *
65
+ * Возникает при некорректных параметрах, переданных в методы SDK.
66
+ */
67
+ class ValidationError extends MaxError_js_1.MaxError {
68
+ code = "VALIDATION_ERROR";
69
+ constructor(message) {
70
+ super(message);
71
+ }
72
+ }
73
+ exports.ValidationError = ValidationError;
74
+ /**
75
+ * Ресурс не найден (HTTP 404).
76
+ */
77
+ class NotFoundError extends MaxError_js_1.MaxError {
78
+ code = "NOT_FOUND";
79
+ constructor(message = "Ресурс не найден") {
80
+ super(message);
81
+ }
82
+ }
83
+ exports.NotFoundError = NotFoundError;
84
+ //# 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,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotFoundError = exports.ValidationError = exports.ApiError = exports.NetworkError = exports.AuthError = exports.RateLimitError = exports.MaxError = void 0;
4
+ var MaxError_js_1 = require("./MaxError.js");
5
+ Object.defineProperty(exports, "MaxError", { enumerable: true, get: function () { return MaxError_js_1.MaxError; } });
6
+ var errors_js_1 = require("./errors.js");
7
+ Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return errors_js_1.RateLimitError; } });
8
+ Object.defineProperty(exports, "AuthError", { enumerable: true, get: function () { return errors_js_1.AuthError; } });
9
+ Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return errors_js_1.NetworkError; } });
10
+ Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return errors_js_1.ApiError; } });
11
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
12
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return errors_js_1.NotFoundError; } });
13
+ //# 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,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClient = void 0;
4
+ const index_js_1 = require("../errors/index.js");
5
+ /**
6
+ * HTTP-клиент для взаимодействия с MAX Bot API.
7
+ *
8
+ * Инкапсулирует всю HTTP-логику: заголовки, таймауты, rate limiting.
9
+ * Разработчику не нужно думать о низкоуровневых деталях.
10
+ */
11
+ class HttpClient {
12
+ baseUrl;
13
+ token;
14
+ timeout;
15
+ rateLimiter;
16
+ constructor(config) {
17
+ // Валидация токена при создании клиента —
18
+ // лучше упасть сразу с понятной ошибкой, чем при первом запросе
19
+ if (!config.token || typeof config.token !== "string") {
20
+ throw new index_js_1.AuthError("Токен не указан или имеет неверный формат");
21
+ }
22
+ this.baseUrl = config.baseUrl;
23
+ this.token = config.token;
24
+ this.timeout = config.timeout ?? 30000;
25
+ this.rateLimiter = config.rateLimiter;
26
+ }
27
+ async get(path, options) {
28
+ return this.request("GET", path, options);
29
+ }
30
+ async post(path, options) {
31
+ return this.request("POST", path, options);
32
+ }
33
+ async put(path, options) {
34
+ return this.request("PUT", path, options);
35
+ }
36
+ async patch(path, options) {
37
+ return this.request("PATCH", path, options);
38
+ }
39
+ async delete(path, options) {
40
+ return this.request("DELETE", path, options);
41
+ }
42
+ async request(method, path, options) {
43
+ // Rate limiter перед каждым запросом —
44
+ // гарантирует соблюдение лимита 30 rps даже при параллельных вызовах
45
+ await this.rateLimiter.acquire();
46
+ const url = this.buildUrl(path, options?.params);
47
+ const headers = {
48
+ Authorization: this.token,
49
+ ...options?.headers,
50
+ };
51
+ // Content-Type только для запросов с телом
52
+ if (options?.body !== undefined) {
53
+ headers["Content-Type"] = "application/json";
54
+ }
55
+ try {
56
+ const response = await fetch(url, {
57
+ method,
58
+ headers,
59
+ body: options?.body !== undefined
60
+ ? JSON.stringify(options.body)
61
+ : undefined,
62
+ // Внешний signal (например, AbortController при остановке бота) имеет
63
+ // приоритет над таймаутом — внешний caller управляет отменой сам.
64
+ // Иначе используем AbortSignal.timeout для автоматической очистки ресурсов.
65
+ signal: options?.signal ?? AbortSignal.timeout(this.timeout),
66
+ });
67
+ return await this.handleResponse(response);
68
+ }
69
+ catch (error) {
70
+ // Преобразуем ошибки fetch в наши типы для единообразной обработки
71
+ if (error instanceof index_js_1.MaxError) {
72
+ throw error;
73
+ }
74
+ if (error instanceof Error) {
75
+ if (error.name === "AbortError" || error.name === "TimeoutError") {
76
+ throw new index_js_1.NetworkError(`Таймаут запроса: ${this.timeout}мс`, error);
77
+ }
78
+ throw new index_js_1.NetworkError(`Ошибка сети: ${error.message}`, error);
79
+ }
80
+ throw new index_js_1.NetworkError("Неизвестная ошибка сети");
81
+ }
82
+ }
83
+ buildUrl(path, params) {
84
+ const url = new URL(path, this.baseUrl);
85
+ if (params) {
86
+ for (const [key, value] of Object.entries(params)) {
87
+ if (value !== undefined) {
88
+ url.searchParams.set(key, String(value));
89
+ }
90
+ }
91
+ }
92
+ return url.toString();
93
+ }
94
+ /**
95
+ * Централизованная обработка ответов —
96
+ * единообразное поведение во всём SDK, легче отлаживать
97
+ */
98
+ async handleResponse(response) {
99
+ if (response.ok) {
100
+ // Некоторые эндпоинты возвращают пустой ответ (204 No Content)
101
+ const text = await response.text();
102
+ if (!text) {
103
+ return undefined;
104
+ }
105
+ return JSON.parse(text);
106
+ }
107
+ // Парсим тело ошибки для получения деталей
108
+ let errorBody = null;
109
+ try {
110
+ errorBody = (await response.json());
111
+ }
112
+ catch {
113
+ // Тело ответа не JSON — используем статус-код
114
+ }
115
+ const message = errorBody?.message ?? response.statusText;
116
+ switch (response.status) {
117
+ case 401:
118
+ throw new index_js_1.AuthError(message);
119
+ case 404:
120
+ throw new index_js_1.NotFoundError(message);
121
+ case 429: {
122
+ // Retry-After может быть в секундах или в HTTP-date формате
123
+ const retryAfter = this.parseRetryAfter(response.headers.get("Retry-After"));
124
+ throw new index_js_1.RateLimitError(retryAfter, message);
125
+ }
126
+ default:
127
+ throw new index_js_1.ApiError(response.status, message, errorBody?.code);
128
+ }
129
+ }
130
+ parseRetryAfter(header) {
131
+ if (!header) {
132
+ // Если заголовок отсутствует, ждём 1 секунду по умолчанию
133
+ return 1000;
134
+ }
135
+ const seconds = parseInt(header, 10);
136
+ if (!isNaN(seconds)) {
137
+ return seconds * 1000;
138
+ }
139
+ // HTTP-date формат
140
+ const date = Date.parse(header);
141
+ if (!isNaN(date)) {
142
+ return Math.max(0, date - Date.now());
143
+ }
144
+ return 1000;
145
+ }
146
+ }
147
+ exports.HttpClient = HttpClient;
148
+ //# 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,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClient = void 0;
4
+ var HttpClient_js_1 = require("./HttpClient.js");
5
+ Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return HttpClient_js_1.HttpClient; } });
6
+ //# 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# 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"}