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

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 +2821 -0
  2. package/dist/index.js +462 -0
  3. package/dist/index.mjs +418 -0
  4. package/package.json +15 -15
  5. package/readme.md +1 -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.mjs ADDED
@@ -0,0 +1,418 @@
1
+ // src/client/_client.ts
2
+ import * as Micro5 from "effect/Micro";
3
+
4
+ // src/client/config.ts
5
+ import * as Context from "effect/Context";
6
+
7
+ // src/const.ts
8
+ var defaultBaseUrl = "https://api.telegram.org";
9
+ var MESSAGE_EFFECTS = {
10
+ "\u{1F525}": "5104841245755180586",
11
+ "\u{1F44D}": "5107584321108051014",
12
+ "\u{1F44E}": "5104858069142078462",
13
+ "\u2764\uFE0F": "5159385139981059251",
14
+ "\u{1F389}": "5046509860389126442",
15
+ "\u{1F4A9}": "5046589136895476101"
16
+ };
17
+ var messageEffectIdCodes = Object.keys(MESSAGE_EFFECTS);
18
+ var isMessageEffect = (input) => {
19
+ return typeof input === "string" && input in MESSAGE_EFFECTS;
20
+ };
21
+
22
+ // src/client/config.ts
23
+ var makeTgBotClientConfig = (input) => TgBotClientConfig.of({
24
+ ...input,
25
+ ["base-url"]: input["base-url"] ?? defaultBaseUrl
26
+ });
27
+ var TgBotClientConfig = class extends Context.Tag("TgBotClientConfig")() {
28
+ };
29
+
30
+ // src/client/execute-request/_service.ts
31
+ import * as Micro2 from "effect/Micro";
32
+ import * as Context2 from "effect/Context";
33
+
34
+ // src/client/execute-request/execute.ts
35
+ import * as Micro from "effect/Micro";
36
+ import * as String from "effect/String";
37
+
38
+ // src/client/errors.ts
39
+ import * as Data from "effect/Data";
40
+ var TgBotClientError = class _TgBotClientError extends Data.TaggedError("TgBotClientError") {
41
+ static missingSuccess = new _TgBotClientError({
42
+ reason: {
43
+ type: "ClientInternalError",
44
+ cause: "Expected 'success' to be defined"
45
+ }
46
+ });
47
+ };
48
+
49
+ // src/client/guards.ts
50
+ 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");
51
+ var isTgBotApiResponse = (input) => typeof input == "object" && input != null && ("ok" in input && typeof input.ok == "boolean");
52
+ var isTgBotClientSettingsInput = (input) => typeof input == "object" && input != null && ("bot-token" in input && typeof input["bot-token"] == "string");
53
+
54
+ // src/client/execute-request/payload.ts
55
+ var makePayload = (body) => {
56
+ const entries = Object.entries(body);
57
+ if (entries.length == 0) return void 0;
58
+ const result = new FormData();
59
+ for (const [key, value] of entries) {
60
+ if (!value) continue;
61
+ if (typeof value != "object") {
62
+ result.append(key, `${value}`);
63
+ } else if (isFileContent(value)) {
64
+ result.append(key, new Blob([value.file_content]), value.file_name);
65
+ } else {
66
+ result.append(key, JSON.stringify(value));
67
+ }
68
+ }
69
+ return result;
70
+ };
71
+
72
+ // src/client/execute-request/execute.ts
73
+ var execute = (config, method, input) => Micro.gen(function* () {
74
+ const httpResponse = yield* Micro.tryPromise({
75
+ try: () => fetch(
76
+ `${config["base-url"]}/bot${config["bot-token"]}/${String.snakeToCamel(method)}`,
77
+ {
78
+ body: makePayload(input) ?? null,
79
+ method: "POST"
80
+ }
81
+ ),
82
+ catch: (cause) => new TgBotClientError({
83
+ reason: { type: "ClientInternalError", cause }
84
+ })
85
+ });
86
+ const response = yield* Micro.tryPromise({
87
+ try: () => httpResponse.json(),
88
+ catch: () => new TgBotClientError({
89
+ reason: { type: "UnexpectedResponse", response: httpResponse }
90
+ })
91
+ });
92
+ if (!isTgBotApiResponse(response)) {
93
+ return yield* Micro.fail(new TgBotClientError({
94
+ reason: { type: "UnexpectedResponse", response }
95
+ }));
96
+ }
97
+ if (!httpResponse.ok) {
98
+ return yield* Micro.fail(new TgBotClientError({
99
+ reason: {
100
+ type: "NotOkResponse",
101
+ ...response.error_code ? { errorCode: response.error_code } : void 0,
102
+ ...response.description ? { details: response.description } : void 0
103
+ }
104
+ }));
105
+ }
106
+ return response.result;
107
+ });
108
+
109
+ // src/client/execute-request/_service.ts
110
+ var ClientExecuteRequestService = class extends Context2.Tag("ClientExecuteRequestService")() {
111
+ };
112
+ var ClientExecuteRequestServiceDefault = Micro2.gen(function* () {
113
+ const config = yield* Micro2.service(TgBotClientConfig);
114
+ return {
115
+ execute: (method, input) => execute(config, method, input)
116
+ };
117
+ });
118
+
119
+ // src/client/file/_service.ts
120
+ import * as Micro4 from "effect/Micro";
121
+ import * as Context3 from "effect/Context";
122
+
123
+ // src/client/file/get-file.ts
124
+ import * as Micro3 from "effect/Micro";
125
+ var getFile = (fileId, config, execute2) => Micro3.gen(function* () {
126
+ const response = yield* execute2.execute("get_file", { file_id: fileId });
127
+ const file_path = response.file_path;
128
+ if (!file_path || file_path.length == 0) {
129
+ return yield* Micro3.fail(
130
+ new TgBotClientError({
131
+ reason: {
132
+ type: "UnableToGetFile",
133
+ cause: "File path not defined"
134
+ }
135
+ })
136
+ );
137
+ }
138
+ const file_name = file_path.replaceAll("/", "-");
139
+ const url = `${config["base-url"]}/file/bot${config["bot-token"]}/${file_path}`;
140
+ const fileContent = yield* Micro3.tryPromise({
141
+ try: () => fetch(url).then((_) => _.arrayBuffer()),
142
+ catch: (cause) => new TgBotClientError({
143
+ reason: { type: "UnableToGetFile", cause }
144
+ })
145
+ });
146
+ const file = new File([new Uint8Array(fileContent)], file_name);
147
+ return file;
148
+ });
149
+
150
+ // src/client/file/_service.ts
151
+ var ClientFileService = class extends Context3.Tag("ClientFileService")() {
152
+ };
153
+ var ClientFileServiceDefault = Micro4.gen(function* () {
154
+ const config = yield* Micro4.service(TgBotClientConfig);
155
+ const execute2 = yield* Micro4.service(ClientExecuteRequestService);
156
+ return {
157
+ getFile: (input) => getFile(input.file_id, config, execute2)
158
+ };
159
+ }).pipe(
160
+ Micro4.provideServiceEffect(ClientExecuteRequestService, ClientExecuteRequestServiceDefault)
161
+ );
162
+
163
+ // src/client/_client.ts
164
+ var makeTgBotClient = (input) => {
165
+ const config = makeTgBotClientConfig(input);
166
+ const client = Micro5.gen(function* () {
167
+ const execute2 = yield* Micro5.service(ClientExecuteRequestService);
168
+ const file = yield* Micro5.service(ClientFileService);
169
+ return {
170
+ execute: (method, input2) => execute2.execute(method, input2).pipe(Micro5.runPromise),
171
+ getFile: (input2) => file.getFile(input2).pipe(Micro5.runPromise)
172
+ };
173
+ }).pipe(
174
+ Micro5.provideServiceEffect(ClientExecuteRequestService, ClientExecuteRequestServiceDefault),
175
+ Micro5.provideServiceEffect(ClientFileService, ClientFileServiceDefault),
176
+ Micro5.provideService(TgBotClientConfig, config),
177
+ Micro5.runSync
178
+ );
179
+ return client;
180
+ };
181
+
182
+ // src/bot/run.ts
183
+ import * as Micro12 from "effect/Micro";
184
+
185
+ // src/bot/factory/_service.ts
186
+ import * as Micro11 from "effect/Micro";
187
+ import * as Context5 from "effect/Context";
188
+
189
+ // src/bot/factory/client-config.ts
190
+ import * as Micro6 from "effect/Micro";
191
+ var makeClientConfigFrom = (input) => Micro6.gen(function* () {
192
+ if (input.type == "config") {
193
+ return makeTgBotClientConfig(input);
194
+ }
195
+ const config = yield* Micro6.tryPromise({
196
+ try: async () => {
197
+ const { readFile } = await import("fs/promises");
198
+ return JSON.parse(await readFile("config.json", "utf-8"));
199
+ },
200
+ catch: (error) => {
201
+ console.warn(error);
202
+ return "ReadingConfigError";
203
+ }
204
+ });
205
+ if (!isTgBotClientSettingsInput(config)) {
206
+ return yield* Micro6.fail("InvalidConfig");
207
+ }
208
+ return makeTgBotClientConfig(config);
209
+ });
210
+
211
+ // src/bot/factory/make-bot.ts
212
+ import * as Micro10 from "effect/Micro";
213
+
214
+ // src/bot/update-poller/_service.ts
215
+ import * as Micro9 from "effect/Micro";
216
+ import * as Context4 from "effect/Context";
217
+
218
+ // src/bot/update-poller/poll-and-handle.ts
219
+ import * as Micro8 from "effect/Micro";
220
+
221
+ // src/bot/update-poller/settings.ts
222
+ var makeSettingsFrom = (input) => {
223
+ let limit = input.batch_size ?? 10;
224
+ let timeout = input.timeout ?? 10;
225
+ let max_empty_responses = input.max_empty_responses;
226
+ if (limit < 10 || limit > 100) {
227
+ console.warn("Wrong limit, must be in [10..100], using 10 instead");
228
+ limit = 10;
229
+ }
230
+ if (timeout < 2 || timeout > 10) {
231
+ console.warn("Wrong timeout, must be in [2..10], using 2 instead");
232
+ limit = 10;
233
+ }
234
+ if (max_empty_responses && max_empty_responses < 2) {
235
+ console.warn("Wrong max_empty_responses, must be in [2..infinity], using infinity");
236
+ max_empty_responses = void 0;
237
+ }
238
+ return {
239
+ limit,
240
+ timeout,
241
+ max_empty_responses
242
+ };
243
+ };
244
+
245
+ // src/bot/update-poller/fetch-updates.ts
246
+ import * as Micro7 from "effect/Micro";
247
+
248
+ // src/bot/message-handler/utils.ts
249
+ var extractUpdate = (input) => {
250
+ for (const [field, value] of Object.entries(input)) {
251
+ if (field == "update_id") {
252
+ continue;
253
+ }
254
+ return {
255
+ type: field,
256
+ ...value
257
+ };
258
+ }
259
+ return void 0;
260
+ };
261
+
262
+ // src/bot/update-poller/fetch-updates.ts
263
+ var fetchUpdates = ({ state, settings, execute: execute2, handlers }) => Micro7.gen(function* () {
264
+ const updateId = state.lastUpdateId;
265
+ console.info("getting updates", state);
266
+ const updates = yield* execute2("get_updates", {
267
+ ...settings,
268
+ ...updateId ? { offset: updateId } : void 0
269
+ }).pipe(
270
+ Micro7.andThen((_) => _.sort((_2) => _2.update_id))
271
+ );
272
+ let lastSuccessId = void 0;
273
+ let hasError = false;
274
+ for (const updateObject of updates) {
275
+ const update = extractUpdate(updateObject);
276
+ if (!update) {
277
+ console.warn("Unknown update", update);
278
+ hasError = true;
279
+ break;
280
+ }
281
+ const handler = handlers[`on_${update.type}`];
282
+ if (!handler) {
283
+ console.warn("Handler for update not defined", update);
284
+ hasError = true;
285
+ break;
286
+ }
287
+ const handleResult = handler(update);
288
+ if ("chat" in update) {
289
+ const response = yield* execute2(`send_${handleResult.type}`, {
290
+ ...handleResult,
291
+ chat_id: update.chat.id
292
+ });
293
+ console.log("bot response", response);
294
+ }
295
+ if (!handleResult) {
296
+ hasError = true;
297
+ console.log(handleResult);
298
+ break;
299
+ }
300
+ ;
301
+ lastSuccessId = updateObject.update_id;
302
+ }
303
+ if (hasError && lastSuccessId) {
304
+ const resp = (
305
+ //commit successfully handled messages
306
+ yield* execute2("get_updates", {
307
+ offset: lastSuccessId,
308
+ limit: 0
309
+ })
310
+ );
311
+ }
312
+ return { updates, lastSuccessId, hasError };
313
+ });
314
+
315
+ // src/bot/update-poller/poll-and-handle.ts
316
+ var pollAndHandle = (input) => {
317
+ const state = {
318
+ lastUpdateId: void 0,
319
+ emptyResponses: 0
320
+ };
321
+ const settings = makeSettingsFrom(input.settings);
322
+ return Micro8.delay(1e3)(
323
+ fetchUpdates({
324
+ state,
325
+ settings,
326
+ execute: input.execute,
327
+ handlers: input.settings
328
+ })
329
+ ).pipe(
330
+ Micro8.repeat({
331
+ while: ({ updates, lastSuccessId, hasError }) => {
332
+ if (hasError) {
333
+ console.warn("error in handler, quitting");
334
+ return false;
335
+ }
336
+ if (updates.length == 0) {
337
+ state.emptyResponses += 1;
338
+ if (settings.max_empty_responses && state.emptyResponses > settings.max_empty_responses) {
339
+ console.info("too many empty responses, quitting");
340
+ return false;
341
+ }
342
+ } else {
343
+ state.emptyResponses = 0;
344
+ }
345
+ ;
346
+ if (lastSuccessId) {
347
+ state.lastUpdateId = lastSuccessId + 1;
348
+ }
349
+ return true;
350
+ }
351
+ })
352
+ );
353
+ };
354
+
355
+ // src/bot/update-poller/_service.ts
356
+ var BotUpdatePollerService = class extends Context4.Tag("BotUpdatePollerService")() {
357
+ };
358
+ var BotUpdatesPollerServiceDefault = Micro9.gen(function* () {
359
+ const state = {
360
+ isActive: false
361
+ };
362
+ const client = yield* Micro9.service(ClientExecuteRequestService);
363
+ const runBot = (messageHandler) => Micro9.gen(function* () {
364
+ if (state.isActive) {
365
+ return yield* Micro9.fail("AlreadyRunning");
366
+ }
367
+ const fiber = yield* pollAndHandle({
368
+ settings: messageHandler,
369
+ execute: client.execute
370
+ }).pipe(Micro9.forkDaemon);
371
+ fiber.addObserver((exit) => {
372
+ console.log("bot's fiber has been closed", exit);
373
+ state.isActive = false;
374
+ });
375
+ console.log("Reading bot's updates...");
376
+ return fiber;
377
+ });
378
+ return {
379
+ runBot
380
+ };
381
+ }).pipe(
382
+ Micro9.provideServiceEffect(ClientExecuteRequestService, ClientExecuteRequestServiceDefault)
383
+ );
384
+
385
+ // src/bot/factory/make-bot.ts
386
+ var makeBot = (messageHandler) => Micro10.gen(function* () {
387
+ const { runBot } = yield* Micro10.service(BotUpdatePollerService);
388
+ return yield* runBot(messageHandler);
389
+ }).pipe(
390
+ Micro10.provideServiceEffect(BotUpdatePollerService, BotUpdatesPollerServiceDefault),
391
+ Micro10.tapError((error) => {
392
+ console.error(error);
393
+ return Micro10.void;
394
+ })
395
+ );
396
+
397
+ // src/bot/factory/_service.ts
398
+ var BotFactoryService = class extends Context5.Tag("BotFactoryService")() {
399
+ };
400
+ var BotFactoryServiceDefault = {
401
+ makeBot,
402
+ runBot: (input) => makeBot(input).pipe(
403
+ Micro11.provideServiceEffect(TgBotClientConfig, makeClientConfigFrom(input))
404
+ )
405
+ };
406
+
407
+ // src/bot/run.ts
408
+ var runTgChatBot = (input) => BotFactoryServiceDefault.runBot(input).pipe(Micro12.runPromiseExit);
409
+ export {
410
+ BotFactoryService,
411
+ BotFactoryServiceDefault,
412
+ MESSAGE_EFFECTS,
413
+ defaultBaseUrl,
414
+ isMessageEffect,
415
+ makeTgBotClient,
416
+ messageEffectIdCodes,
417
+ runTgChatBot
418
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-ak/tg-bot-client",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "homepage": "https://effect-ak.github.io/telegram-bot-client",
5
5
  "author": {
6
6
  "name": "Aleksandr Kondaurov",
@@ -11,7 +11,9 @@
11
11
  },
12
12
  "description": "Telegram bot client",
13
13
  "files": [
14
- "dist"
14
+ "dist/index.js",
15
+ "dist/index.mjs",
16
+ "dist/index.d.ts"
15
17
  ],
16
18
  "keywords": [
17
19
  "telegram",
@@ -21,21 +23,23 @@
21
23
  "url": "https://github.com/effect-ak/tg-bot-client"
22
24
  },
23
25
  "license": "MIT",
24
- "main": "./dist/cjs/index.js",
25
- "module": "./dist/esm/index.js",
26
- "types": "./dist/dts/index.d.ts",
26
+ "types": "./dist/index.d.ts",
27
+ "main": "./dist/index.js",
28
+ "module": "./dist/index.mjs",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "require": "./dist/index.js",
33
+ "import": "./dist/index.mjs"
34
+ }
35
+ },
27
36
  "devDependencies": {
28
- "@babel/cli": "^7.26.4",
29
- "@babel/core": "^7.26.0",
30
- "@babel/plugin-transform-export-namespace-from": "^7.25.9",
31
- "@babel/plugin-transform-modules-commonjs": "^7.26.3",
32
37
  "@types/node": "^22.10.1",
33
38
  "@types/js-yaml": "^4.0.9",
34
39
  "js-yaml": "^4.1.0",
35
40
  "node-html-parser": "^6.1.13",
36
41
  "openapi-types": "^12.1.3",
37
42
  "ts-morph": "^24.0.0",
38
- "tsc-alias": "^1.8.10",
39
43
  "tsx": "^4.19.2",
40
44
  "typescript": "^5.7.2",
41
45
  "vite-tsconfig-paths": "^5.1.4",
@@ -45,11 +49,7 @@
45
49
  "effect": "^3.4.0"
46
50
  },
47
51
  "scripts": {
48
- "docgen": "docgen",
49
52
  "gen": "tsx ./codegen/main",
50
- "run-bot": "tsx ./src/bot/run",
51
- "build": "pnpm build-esm && pnpm build-cjs",
52
- "build-esm": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
53
- "build-cjs": "babel dist/esm --out-dir dist/cjs"
53
+ "echo-bot": "tsx ./example/echo-bot.ts"
54
54
  }
55
55
  }
package/readme.md CHANGED
@@ -69,7 +69,7 @@ await client.execute("send_document", {
69
69
  chat_id: "???", // replace ??? with the chat number
70
70
  message_effect_id: MESSAGE_EFFECTS["🎉"],
71
71
  document: {
72
- file_content: Buffer.from("Hello!"),
72
+ file_content: new TextEncoder().encode("Hello!"),
73
73
  file_name: "hello.txt"
74
74
  },
75
75
  caption: "simple text file"
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = {
8
- enumerable: true,
9
- get: function () {
10
- return m[k];
11
- }
12
- };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- } : function (o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- });
19
- var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
20
- Object.defineProperty(o, "default", {
21
- enumerable: true,
22
- value: v
23
- });
24
- } : function (o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = void 0 && (void 0).__importStar || function () {
28
- var ownKeys = function (o) {
29
- ownKeys = Object.getOwnPropertyNames || function (o) {
30
- var ar = [];
31
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
- return ar;
33
- };
34
- return ownKeys(o);
35
- };
36
- return function (mod) {
37
- if (mod && mod.__esModule) return mod;
38
- var result = {};
39
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
- __setModuleDefault(result, mod);
41
- return result;
42
- };
43
- }();
44
- Object.defineProperty(exports, "__esModule", {
45
- value: true
46
- });
47
- exports.BotFactoryServiceDefault = exports.BotFactoryService = void 0;
48
- const Micro = __importStar(require("effect/Micro"));
49
- const Context = __importStar(require("effect/Context"));
50
- const config_js_1 = require("../../client/config.js");
51
- const client_config_js_1 = require("./client-config.js");
52
- const make_bot_js_1 = require("./make-bot.js");
53
- class BotFactoryService extends Context.Tag("BotFactoryService")() {}
54
- exports.BotFactoryService = BotFactoryService;
55
- ;
56
- exports.BotFactoryServiceDefault = {
57
- makeBot: make_bot_js_1.makeBot,
58
- runBot: input => (0, make_bot_js_1.makeBot)(input).pipe(Micro.provideServiceEffect(config_js_1.TgBotClientConfig, (0, client_config_js_1.makeClientConfigFrom)(input)))
59
- };
@@ -1,68 +0,0 @@
1
- "use strict";
2
-
3
- var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = {
8
- enumerable: true,
9
- get: function () {
10
- return m[k];
11
- }
12
- };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- } : function (o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- });
19
- var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
20
- Object.defineProperty(o, "default", {
21
- enumerable: true,
22
- value: v
23
- });
24
- } : function (o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = void 0 && (void 0).__importStar || function () {
28
- var ownKeys = function (o) {
29
- ownKeys = Object.getOwnPropertyNames || function (o) {
30
- var ar = [];
31
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
- return ar;
33
- };
34
- return ownKeys(o);
35
- };
36
- return function (mod) {
37
- if (mod && mod.__esModule) return mod;
38
- var result = {};
39
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
- __setModuleDefault(result, mod);
41
- return result;
42
- };
43
- }();
44
- Object.defineProperty(exports, "__esModule", {
45
- value: true
46
- });
47
- exports.makeClientConfigFrom = void 0;
48
- const Micro = __importStar(require("effect/Micro"));
49
- const fs_1 = require("fs");
50
- const config_js_1 = require("../../client/config.js");
51
- const guards_js_1 = require("../../client/guards.js");
52
- const makeClientConfigFrom = input => Micro.gen(function* () {
53
- if (input.type == "config") {
54
- return (0, config_js_1.makeTgBotClientConfig)(input);
55
- }
56
- const config = yield* Micro.try({
57
- try: () => JSON.parse((0, fs_1.readFileSync)("config.json").toString("utf-8")),
58
- catch: error => {
59
- console.warn(error);
60
- return "ReadingConfigError";
61
- }
62
- });
63
- if (!(0, guards_js_1.isTgBotClientSettingsInput)(config)) {
64
- return yield* Micro.fail("InvalidConfig");
65
- }
66
- return (0, config_js_1.makeTgBotClientConfig)(config);
67
- });
68
- exports.makeClientConfigFrom = makeClientConfigFrom;
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = {
8
- enumerable: true,
9
- get: function () {
10
- return m[k];
11
- }
12
- };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- } : function (o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- });
19
- var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
20
- Object.defineProperty(o, "default", {
21
- enumerable: true,
22
- value: v
23
- });
24
- } : function (o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = void 0 && (void 0).__importStar || function () {
28
- var ownKeys = function (o) {
29
- ownKeys = Object.getOwnPropertyNames || function (o) {
30
- var ar = [];
31
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
- return ar;
33
- };
34
- return ownKeys(o);
35
- };
36
- return function (mod) {
37
- if (mod && mod.__esModule) return mod;
38
- var result = {};
39
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
- __setModuleDefault(result, mod);
41
- return result;
42
- };
43
- }();
44
- Object.defineProperty(exports, "__esModule", {
45
- value: true
46
- });
47
- exports.makeBot = void 0;
48
- const Micro = __importStar(require("effect/Micro"));
49
- const _service_js_1 = require("../../bot/update-poller/_service.js");
50
- const makeBot = messageHandler => Micro.gen(function* () {
51
- const {
52
- runBot
53
- } = yield* Micro.service(_service_js_1.BotUpdatePollerService);
54
- return yield* runBot(messageHandler);
55
- }).pipe(Micro.provideServiceEffect(_service_js_1.BotUpdatePollerService, _service_js_1.BotUpdatesPollerServiceDefault), Micro.tapError(error => {
56
- console.error(error);
57
- return Micro.void;
58
- }));
59
- exports.makeBot = makeBot;