@effect-ak/tg-bot-client 0.2.1 → 0.2.3

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 (80) hide show
  1. package/dist/index.d.ts +2833 -0
  2. package/dist/index.js +483 -0
  3. package/dist/index.mjs +439 -0
  4. package/package.json +16 -16
  5. package/readme.md +2 -1
  6. package/dist/cjs/bot/factory/_service.js +0 -59
  7. package/dist/cjs/bot/factory/client-config.js +0 -68
  8. package/dist/cjs/bot/factory/make-bot.js +0 -59
  9. package/dist/cjs/bot/message-handler/_service.js +0 -51
  10. package/dist/cjs/bot/message-handler/types.js +0 -5
  11. package/dist/cjs/bot/message-handler/utils.js +0 -19
  12. package/dist/cjs/bot/run.js +0 -10
  13. package/dist/cjs/bot/update-poller/_service.js +0 -78
  14. package/dist/cjs/bot/update-poller/errors.js +0 -5
  15. package/dist/cjs/bot/update-poller/fetch-updates.js +0 -109
  16. package/dist/cjs/bot/update-poller/poll-and-handle.js +0 -89
  17. package/dist/cjs/bot/update-poller/settings.js +0 -23
  18. package/dist/cjs/client/_client.js +0 -64
  19. package/dist/cjs/client/config.js +0 -56
  20. package/dist/cjs/client/errors.js +0 -57
  21. package/dist/cjs/client/execute-request/_service.js +0 -59
  22. package/dist/cjs/client/execute-request/execute.js +0 -98
  23. package/dist/cjs/client/execute-request/payload.js +0 -24
  24. package/dist/cjs/client/file/_service.js +0 -61
  25. package/dist/cjs/client/file/get-file.js +0 -77
  26. package/dist/cjs/client/guards.js +0 -12
  27. package/dist/cjs/const.js +0 -20
  28. package/dist/cjs/index.js +0 -29
  29. package/dist/cjs/specification/api.js +0 -5
  30. package/dist/cjs/specification/types.js +0 -5
  31. package/dist/dts/bot/factory/_service.d.ts +0 -37
  32. package/dist/dts/bot/factory/client-config.d.ts +0 -3
  33. package/dist/dts/bot/factory/make-bot.d.ts +0 -7
  34. package/dist/dts/bot/message-handler/_service.d.ts +0 -6
  35. package/dist/dts/bot/message-handler/types.d.ts +0 -16
  36. package/dist/dts/bot/message-handler/utils.d.ts +0 -6
  37. package/dist/dts/bot/run.d.ts +0 -7
  38. package/dist/dts/bot/update-poller/_service.d.ts +0 -21
  39. package/dist/dts/bot/update-poller/errors.d.ts +0 -1
  40. package/dist/dts/bot/update-poller/fetch-updates.d.ts +0 -17
  41. package/dist/dts/bot/update-poller/poll-and-handle.d.ts +0 -16
  42. package/dist/dts/bot/update-poller/settings.d.ts +0 -6
  43. package/dist/dts/client/_client.d.ts +0 -8
  44. package/dist/dts/client/config.d.ts +0 -8
  45. package/dist/dts/client/errors.d.ts +0 -23
  46. package/dist/dts/client/execute-request/_service.d.ts +0 -15
  47. package/dist/dts/client/execute-request/execute.d.ts +0 -5
  48. package/dist/dts/client/execute-request/payload.d.ts +0 -1
  49. package/dist/dts/client/file/_service.d.ts +0 -16
  50. package/dist/dts/client/file/get-file.d.ts +0 -5
  51. package/dist/dts/client/guards.d.ts +0 -17
  52. package/dist/dts/const.d.ts +0 -12
  53. package/dist/dts/index.d.ts +0 -5
  54. package/dist/dts/specification/api.d.ts +0 -1030
  55. package/dist/dts/specification/types.d.ts +0 -1663
  56. package/dist/esm/bot/factory/_service.js +0 -49
  57. package/dist/esm/bot/factory/client-config.js +0 -57
  58. package/dist/esm/bot/factory/make-bot.js +0 -46
  59. package/dist/esm/bot/message-handler/_service.js +0 -41
  60. package/dist/esm/bot/message-handler/types.js +0 -2
  61. package/dist/esm/bot/message-handler/utils.js +0 -16
  62. package/dist/esm/bot/run.js +0 -10
  63. package/dist/esm/bot/update-poller/_service.js +0 -68
  64. package/dist/esm/bot/update-poller/errors.js +0 -2
  65. package/dist/esm/bot/update-poller/fetch-updates.js +0 -86
  66. package/dist/esm/bot/update-poller/poll-and-handle.js +0 -74
  67. package/dist/esm/bot/update-poller/settings.js +0 -19
  68. package/dist/esm/client/_client.js +0 -53
  69. package/dist/esm/client/config.js +0 -46
  70. package/dist/esm/client/errors.js +0 -46
  71. package/dist/esm/client/execute-request/_service.js +0 -49
  72. package/dist/esm/client/execute-request/execute.js +0 -74
  73. package/dist/esm/client/execute-request/payload.js +0 -25
  74. package/dist/esm/client/file/_service.js +0 -51
  75. package/dist/esm/client/file/get-file.js +0 -61
  76. package/dist/esm/client/guards.js +0 -13
  77. package/dist/esm/const.js +0 -17
  78. package/dist/esm/index.js +0 -21
  79. package/dist/esm/specification/api.js +0 -2
  80. package/dist/esm/specification/types.js +0 -2
package/dist/index.js ADDED
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ BotFactoryService: () => BotFactoryService,
34
+ BotFactoryServiceDefault: () => BotFactoryServiceDefault,
35
+ MESSAGE_EFFECTS: () => MESSAGE_EFFECTS,
36
+ defaultBaseUrl: () => defaultBaseUrl,
37
+ isMessageEffect: () => isMessageEffect,
38
+ makeTgBotClient: () => makeTgBotClient,
39
+ messageEffectIdCodes: () => messageEffectIdCodes,
40
+ runTgChatBot: () => runTgChatBot
41
+ });
42
+ module.exports = __toCommonJS(src_exports);
43
+
44
+ // src/client/_client.ts
45
+ var Micro5 = __toESM(require("effect/Micro"));
46
+
47
+ // src/client/config.ts
48
+ var Context = __toESM(require("effect/Context"));
49
+
50
+ // src/const.ts
51
+ var defaultBaseUrl = "https://api.telegram.org";
52
+ var MESSAGE_EFFECTS = {
53
+ "\u{1F525}": "5104841245755180586",
54
+ "\u{1F44D}": "5107584321108051014",
55
+ "\u{1F44E}": "5104858069142078462",
56
+ "\u2764\uFE0F": "5159385139981059251",
57
+ "\u{1F389}": "5046509860389126442",
58
+ "\u{1F4A9}": "5046589136895476101"
59
+ };
60
+ var messageEffectIdCodes = Object.keys(MESSAGE_EFFECTS);
61
+ var isMessageEffect = (input) => {
62
+ return typeof input === "string" && input in MESSAGE_EFFECTS;
63
+ };
64
+
65
+ // src/client/config.ts
66
+ var makeTgBotClientConfig = (input) => TgBotClientConfig.of({
67
+ ...input,
68
+ ["base-url"]: input["base-url"] ?? defaultBaseUrl
69
+ });
70
+ var TgBotClientConfig = class extends Context.Tag("TgBotClientConfig")() {
71
+ };
72
+
73
+ // src/client/execute-request/_service.ts
74
+ var Micro2 = __toESM(require("effect/Micro"));
75
+ var Context2 = __toESM(require("effect/Context"));
76
+
77
+ // src/client/execute-request/execute.ts
78
+ var Micro = __toESM(require("effect/Micro"));
79
+ var String = __toESM(require("effect/String"));
80
+
81
+ // src/client/errors.ts
82
+ var Data = __toESM(require("effect/Data"));
83
+ var TgBotClientError = class _TgBotClientError extends Data.TaggedError("TgBotClientError") {
84
+ static missingSuccess = new _TgBotClientError({
85
+ reason: {
86
+ type: "ClientInternalError",
87
+ cause: "Expected 'success' to be defined"
88
+ }
89
+ });
90
+ };
91
+
92
+ // src/client/guards.ts
93
+ var isFileContent = (input) => typeof input == "object" && input != null && ("file_content" in input && input.file_content instanceof Uint8Array) && ("file_name" in input && typeof input.file_name == "string");
94
+ var isTgBotApiResponse = (input) => typeof input == "object" && input != null && ("ok" in input && typeof input.ok == "boolean");
95
+ var isTgBotClientSettingsInput = (input) => typeof input == "object" && input != null && ("bot-token" in input && typeof input["bot-token"] == "string");
96
+
97
+ // src/client/execute-request/payload.ts
98
+ var makePayload = (body) => {
99
+ const entries = Object.entries(body);
100
+ if (entries.length == 0) return void 0;
101
+ const result = new FormData();
102
+ for (const [key, value] of entries) {
103
+ if (!value) continue;
104
+ if (typeof value != "object") {
105
+ result.append(key, `${value}`);
106
+ } else if (isFileContent(value)) {
107
+ result.append(key, new Blob([value.file_content]), value.file_name);
108
+ } else {
109
+ result.append(key, JSON.stringify(value));
110
+ }
111
+ }
112
+ return result;
113
+ };
114
+
115
+ // src/client/execute-request/execute.ts
116
+ var execute = (config, method, input) => Micro.gen(function* () {
117
+ const httpResponse = yield* Micro.tryPromise({
118
+ try: () => fetch(
119
+ `${config["base-url"]}/bot${config["bot-token"]}/${String.snakeToCamel(method)}`,
120
+ {
121
+ body: makePayload(input) ?? null,
122
+ method: "POST"
123
+ }
124
+ ),
125
+ catch: (cause) => new TgBotClientError({
126
+ reason: { type: "ClientInternalError", cause }
127
+ })
128
+ });
129
+ const response = yield* Micro.tryPromise({
130
+ try: () => httpResponse.json(),
131
+ catch: () => new TgBotClientError({
132
+ reason: { type: "UnexpectedResponse", response: httpResponse }
133
+ })
134
+ });
135
+ if (!isTgBotApiResponse(response)) {
136
+ return yield* Micro.fail(new TgBotClientError({
137
+ reason: { type: "UnexpectedResponse", response }
138
+ }));
139
+ }
140
+ if (!httpResponse.ok) {
141
+ return yield* Micro.fail(new TgBotClientError({
142
+ reason: {
143
+ type: "NotOkResponse",
144
+ ...response.error_code ? { errorCode: response.error_code } : void 0,
145
+ ...response.description ? { details: response.description } : void 0
146
+ }
147
+ }));
148
+ }
149
+ return response.result;
150
+ });
151
+
152
+ // src/client/execute-request/_service.ts
153
+ var ClientExecuteRequestService = class extends Context2.Tag("ClientExecuteRequestService")() {
154
+ };
155
+ var ClientExecuteRequestServiceDefault = Micro2.gen(function* () {
156
+ const config = yield* Micro2.service(TgBotClientConfig);
157
+ return {
158
+ execute: (method, input) => execute(config, method, input)
159
+ };
160
+ });
161
+
162
+ // src/client/file/_service.ts
163
+ var Micro4 = __toESM(require("effect/Micro"));
164
+ var Context3 = __toESM(require("effect/Context"));
165
+
166
+ // src/client/file/get-file.ts
167
+ var Micro3 = __toESM(require("effect/Micro"));
168
+ var getFile = (fileId, config, execute2) => Micro3.gen(function* () {
169
+ const response = yield* execute2.execute("get_file", { file_id: fileId });
170
+ const file_path = response.file_path;
171
+ if (!file_path || file_path.length == 0) {
172
+ return yield* Micro3.fail(
173
+ new TgBotClientError({
174
+ reason: {
175
+ type: "UnableToGetFile",
176
+ cause: "File path not defined"
177
+ }
178
+ })
179
+ );
180
+ }
181
+ const file_name = file_path.replaceAll("/", "-");
182
+ const url = `${config["base-url"]}/file/bot${config["bot-token"]}/${file_path}`;
183
+ const fileContent = yield* Micro3.tryPromise({
184
+ try: () => fetch(url).then((_) => _.arrayBuffer()),
185
+ catch: (cause) => new TgBotClientError({
186
+ reason: { type: "UnableToGetFile", cause }
187
+ })
188
+ });
189
+ const file = new File([new Uint8Array(fileContent)], file_name);
190
+ return file;
191
+ });
192
+
193
+ // src/client/file/_service.ts
194
+ var ClientFileService = class extends Context3.Tag("ClientFileService")() {
195
+ };
196
+ var ClientFileServiceDefault = Micro4.gen(function* () {
197
+ const config = yield* Micro4.service(TgBotClientConfig);
198
+ const execute2 = yield* Micro4.service(ClientExecuteRequestService);
199
+ return {
200
+ getFile: (input) => getFile(input.file_id, config, execute2)
201
+ };
202
+ }).pipe(
203
+ Micro4.provideServiceEffect(ClientExecuteRequestService, ClientExecuteRequestServiceDefault)
204
+ );
205
+
206
+ // src/client/_client.ts
207
+ var makeTgBotClient = (input) => {
208
+ const config = makeTgBotClientConfig(input);
209
+ const client = Micro5.gen(function* () {
210
+ const execute2 = yield* Micro5.service(ClientExecuteRequestService);
211
+ const file = yield* Micro5.service(ClientFileService);
212
+ return {
213
+ execute: (method, input2) => execute2.execute(method, input2).pipe(Micro5.runPromise),
214
+ getFile: (input2) => file.getFile(input2).pipe(Micro5.runPromise)
215
+ };
216
+ }).pipe(
217
+ Micro5.provideServiceEffect(ClientExecuteRequestService, ClientExecuteRequestServiceDefault),
218
+ Micro5.provideServiceEffect(ClientFileService, ClientFileServiceDefault),
219
+ Micro5.provideService(TgBotClientConfig, config),
220
+ Micro5.runSync
221
+ );
222
+ return client;
223
+ };
224
+
225
+ // src/bot/run.ts
226
+ var Micro12 = __toESM(require("effect/Micro"));
227
+
228
+ // src/bot/factory/_service.ts
229
+ var Micro11 = __toESM(require("effect/Micro"));
230
+ var Context5 = __toESM(require("effect/Context"));
231
+
232
+ // src/bot/update-poller/_service.ts
233
+ var Micro8 = __toESM(require("effect/Micro"));
234
+ var Context4 = __toESM(require("effect/Context"));
235
+
236
+ // src/bot/update-poller/poll-and-handle.ts
237
+ var Micro7 = __toESM(require("effect/Micro"));
238
+
239
+ // src/bot/update-poller/settings.ts
240
+ var makeSettingsFrom = (input) => {
241
+ let limit = input.batch_size ?? 10;
242
+ let timeout = input.timeout ?? 10;
243
+ let max_empty_responses = input.max_empty_responses;
244
+ if (limit < 10 || limit > 100) {
245
+ console.warn("Wrong limit, must be in [10..100], using 10 instead");
246
+ limit = 10;
247
+ }
248
+ if (timeout < 2 || timeout > 10) {
249
+ console.warn("Wrong timeout, must be in [2..10], using 2 instead");
250
+ limit = 10;
251
+ }
252
+ if (max_empty_responses && max_empty_responses < 2) {
253
+ console.warn("Wrong max_empty_responses, must be in [2..infinity], using infinity");
254
+ max_empty_responses = void 0;
255
+ }
256
+ return {
257
+ limit,
258
+ timeout,
259
+ max_empty_responses
260
+ };
261
+ };
262
+
263
+ // src/bot/update-poller/fetch-updates.ts
264
+ var Micro6 = __toESM(require("effect/Micro"));
265
+
266
+ // src/bot/message-handler/utils.ts
267
+ var extractUpdate = (input) => {
268
+ for (const [field, value] of Object.entries(input)) {
269
+ if (field == "update_id") {
270
+ continue;
271
+ }
272
+ return {
273
+ type: field,
274
+ ...value
275
+ };
276
+ }
277
+ return void 0;
278
+ };
279
+
280
+ // src/bot/update-poller/fetch-updates.ts
281
+ var fetchUpdates = ({ state, settings, execute: execute2, handlers }) => Micro6.gen(function* () {
282
+ const updateId = state.lastUpdateId;
283
+ console.info("getting updates", state);
284
+ const updates = yield* execute2("get_updates", {
285
+ ...settings,
286
+ ...updateId ? { offset: updateId } : void 0
287
+ }).pipe(
288
+ Micro6.andThen((_) => _.sort((_2) => _2.update_id))
289
+ );
290
+ let lastSuccessId = void 0;
291
+ let hasError = false;
292
+ for (const updateObject of updates) {
293
+ const update = extractUpdate(updateObject);
294
+ if (!update) {
295
+ console.warn("Unknown update", update);
296
+ hasError = true;
297
+ break;
298
+ }
299
+ const handler = handlers[`on_${update.type}`];
300
+ if (!handler) {
301
+ console.warn("Handler for update not defined", update);
302
+ hasError = true;
303
+ break;
304
+ }
305
+ const handleResult = handler(update);
306
+ if ("chat" in update) {
307
+ const response = yield* execute2(`send_${handleResult.type}`, {
308
+ ...handleResult,
309
+ chat_id: update.chat.id
310
+ });
311
+ console.log("bot response", response);
312
+ }
313
+ if (!handleResult) {
314
+ hasError = true;
315
+ console.log(handleResult);
316
+ break;
317
+ }
318
+ ;
319
+ lastSuccessId = updateObject.update_id;
320
+ }
321
+ if (hasError && lastSuccessId) {
322
+ const resp = (
323
+ //commit successfully handled messages
324
+ yield* execute2("get_updates", {
325
+ offset: lastSuccessId,
326
+ limit: 0
327
+ })
328
+ );
329
+ }
330
+ return { updates, lastSuccessId, hasError };
331
+ });
332
+
333
+ // src/bot/update-poller/poll-and-handle.ts
334
+ var pollAndHandle = (input) => {
335
+ const state = {
336
+ lastUpdateId: void 0,
337
+ emptyResponses: 0
338
+ };
339
+ const settings = makeSettingsFrom(input.settings);
340
+ return Micro7.delay(1e3)(
341
+ fetchUpdates({
342
+ state,
343
+ settings,
344
+ execute: input.execute,
345
+ handlers: input.settings
346
+ })
347
+ ).pipe(
348
+ Micro7.repeat({
349
+ while: ({ updates, lastSuccessId, hasError }) => {
350
+ if (hasError) {
351
+ console.warn("error in handler, quitting");
352
+ return false;
353
+ }
354
+ if (updates.length == 0) {
355
+ state.emptyResponses += 1;
356
+ if (settings.max_empty_responses && state.emptyResponses > settings.max_empty_responses) {
357
+ console.info("too many empty responses, quitting");
358
+ return false;
359
+ }
360
+ } else {
361
+ state.emptyResponses = 0;
362
+ }
363
+ ;
364
+ if (lastSuccessId) {
365
+ state.lastUpdateId = lastSuccessId + 1;
366
+ }
367
+ return true;
368
+ }
369
+ })
370
+ );
371
+ };
372
+
373
+ // src/bot/update-poller/_service.ts
374
+ var BotUpdatePollerService = class extends Context4.Tag("BotUpdatePollerService")() {
375
+ };
376
+ var BotUpdatesPollerServiceDefault = Micro8.gen(function* () {
377
+ console.log("Initiating BotUpdatesPollerServiceDefault");
378
+ const state = {
379
+ fiber: void 0
380
+ };
381
+ const client = yield* Micro8.service(ClientExecuteRequestService);
382
+ const runBot = (messageHandler) => Micro8.gen(function* () {
383
+ console.log(state);
384
+ const startFiber = pollAndHandle({
385
+ settings: messageHandler,
386
+ execute: client.execute
387
+ }).pipe(
388
+ Micro8.forkDaemon,
389
+ Micro8.tap(
390
+ (fiber) => fiber.addObserver((exit) => {
391
+ console.log("bot's fiber has been closed", exit);
392
+ if (messageHandler.onExit) {
393
+ messageHandler.onExit(exit);
394
+ }
395
+ })
396
+ )
397
+ );
398
+ if (state.fiber) {
399
+ console.log("killing previous bot's fiber");
400
+ yield* Micro8.fiberInterrupt(state.fiber);
401
+ }
402
+ state.fiber = yield* startFiber;
403
+ console.log("Reading bot's updates.....", state.fiber == null);
404
+ return state.fiber;
405
+ });
406
+ return {
407
+ runBot
408
+ };
409
+ }).pipe(
410
+ Micro8.provideServiceEffect(ClientExecuteRequestService, ClientExecuteRequestServiceDefault)
411
+ );
412
+
413
+ // src/bot/factory/client-config.ts
414
+ var Micro9 = __toESM(require("effect/Micro"));
415
+ var makeClientConfigFrom = (input) => Micro9.gen(function* () {
416
+ if (input.type == "config") {
417
+ return makeTgBotClientConfig(input);
418
+ }
419
+ const config = yield* Micro9.tryPromise({
420
+ try: async () => {
421
+ const { readFileSync } = await import("fs");
422
+ return JSON.parse(await readFileSync("config.json", "utf-8"));
423
+ },
424
+ catch: (error) => {
425
+ console.warn(error);
426
+ return "ReadingConfigError";
427
+ }
428
+ });
429
+ if (!isTgBotClientSettingsInput(config)) {
430
+ return yield* Micro9.fail("InvalidConfig");
431
+ }
432
+ return makeTgBotClientConfig(config);
433
+ });
434
+
435
+ // src/bot/factory/make-bot.ts
436
+ var Micro10 = __toESM(require("effect/Micro"));
437
+ var makeBot = (messageHandler) => Micro10.gen(function* () {
438
+ const { runBot } = yield* Micro10.service(BotUpdatePollerService);
439
+ return {
440
+ fiber: yield* runBot(messageHandler),
441
+ runBot
442
+ };
443
+ }).pipe(
444
+ Micro10.tapError((error) => {
445
+ console.error(error);
446
+ return Micro10.void;
447
+ })
448
+ );
449
+
450
+ // src/bot/factory/_service.ts
451
+ var BotFactoryService = class extends Context5.Tag("BotFactoryService")() {
452
+ };
453
+ var BotFactoryServiceDefault = {
454
+ makeBot,
455
+ runBot: (input) => Micro11.gen(function* () {
456
+ console.log("client");
457
+ const client = yield* makeClientConfigFrom(input);
458
+ const poller = yield* BotUpdatesPollerServiceDefault.pipe(
459
+ Micro11.provideService(TgBotClientConfig, client)
460
+ );
461
+ const bot = yield* makeBot(input).pipe(
462
+ Micro11.provideService(BotUpdatePollerService, poller)
463
+ );
464
+ const reload = (input2) => bot.runBot(input2).pipe(Micro11.runPromise);
465
+ return {
466
+ reload
467
+ };
468
+ })
469
+ };
470
+
471
+ // src/bot/run.ts
472
+ var runTgChatBot = (input) => BotFactoryServiceDefault.runBot(input).pipe(Micro12.runPromise);
473
+ // Annotate the CommonJS export names for ESM import in node:
474
+ 0 && (module.exports = {
475
+ BotFactoryService,
476
+ BotFactoryServiceDefault,
477
+ MESSAGE_EFFECTS,
478
+ defaultBaseUrl,
479
+ isMessageEffect,
480
+ makeTgBotClient,
481
+ messageEffectIdCodes,
482
+ runTgChatBot
483
+ });