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