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

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 (86) hide show
  1. package/dist/cjs/bot/factory/_service.js +59 -0
  2. package/dist/cjs/bot/factory/client-config.js +68 -0
  3. package/dist/cjs/bot/factory/make-bot.js +59 -0
  4. package/dist/cjs/bot/message-handler/_service.js +51 -0
  5. package/dist/cjs/bot/message-handler/types.js +5 -0
  6. package/dist/cjs/bot/message-handler/utils.js +19 -0
  7. package/dist/cjs/bot/run.js +10 -0
  8. package/dist/cjs/bot/update-poller/_service.js +78 -0
  9. package/dist/cjs/bot/update-poller/errors.js +5 -0
  10. package/dist/cjs/bot/update-poller/fetch-updates.js +109 -0
  11. package/dist/cjs/bot/update-poller/poll-and-handle.js +89 -0
  12. package/dist/cjs/bot/update-poller/settings.js +23 -0
  13. package/dist/cjs/client/_client.js +56 -14
  14. package/dist/cjs/client/config.js +56 -0
  15. package/dist/cjs/client/errors.js +47 -9
  16. package/dist/cjs/client/execute-request/_service.js +59 -0
  17. package/dist/cjs/client/execute-request/execute.js +98 -0
  18. package/dist/cjs/client/{request.js → execute-request/payload.js} +2 -2
  19. package/dist/cjs/client/file/_service.js +61 -0
  20. package/dist/cjs/client/file/get-file.js +77 -0
  21. package/dist/cjs/client/guards.js +12 -0
  22. package/dist/cjs/const.js +20 -0
  23. package/dist/cjs/index.js +24 -22
  24. package/dist/dts/bot/factory/_service.d.ts +37 -0
  25. package/dist/dts/bot/factory/client-config.d.ts +3 -0
  26. package/dist/dts/bot/factory/make-bot.d.ts +7 -0
  27. package/dist/dts/bot/message-handler/_service.d.ts +6 -0
  28. package/dist/dts/bot/message-handler/types.d.ts +16 -0
  29. package/dist/dts/bot/message-handler/utils.d.ts +6 -0
  30. package/dist/dts/bot/run.d.ts +7 -0
  31. package/dist/dts/bot/update-poller/_service.d.ts +21 -0
  32. package/dist/dts/bot/update-poller/errors.d.ts +1 -0
  33. package/dist/dts/bot/update-poller/fetch-updates.d.ts +17 -0
  34. package/dist/dts/bot/update-poller/poll-and-handle.d.ts +16 -0
  35. package/dist/dts/bot/update-poller/settings.d.ts +6 -0
  36. package/dist/dts/client/_client.d.ts +6 -17
  37. package/dist/dts/client/config.d.ts +8 -0
  38. package/dist/dts/client/errors.d.ts +6 -4
  39. package/dist/dts/client/execute-request/_service.d.ts +15 -0
  40. package/dist/dts/client/execute-request/execute.d.ts +5 -0
  41. package/dist/dts/client/file/_service.d.ts +16 -0
  42. package/dist/dts/client/file/get-file.d.ts +5 -0
  43. package/dist/dts/client/guards.d.ts +17 -0
  44. package/dist/dts/index.d.ts +4 -1
  45. package/dist/dts/specification/api.d.ts +14 -14
  46. package/dist/dts/specification/types.d.ts +77 -77
  47. package/dist/esm/bot/factory/_service.js +49 -0
  48. package/dist/esm/bot/factory/client-config.js +57 -0
  49. package/dist/esm/bot/factory/make-bot.js +46 -0
  50. package/dist/esm/bot/message-handler/_service.js +41 -0
  51. package/dist/esm/bot/message-handler/types.js +2 -0
  52. package/dist/esm/bot/message-handler/utils.js +16 -0
  53. package/dist/esm/bot/run.js +10 -0
  54. package/dist/esm/bot/update-poller/_service.js +68 -0
  55. package/dist/esm/bot/update-poller/errors.js +2 -0
  56. package/dist/esm/bot/update-poller/fetch-updates.js +86 -0
  57. package/dist/esm/bot/update-poller/poll-and-handle.js +74 -0
  58. package/dist/esm/bot/update-poller/settings.js +19 -0
  59. package/dist/esm/client/_client.js +50 -12
  60. package/dist/esm/client/config.js +46 -0
  61. package/dist/esm/client/errors.js +42 -8
  62. package/dist/esm/client/execute-request/_service.js +49 -0
  63. package/dist/esm/client/execute-request/execute.js +74 -0
  64. package/dist/esm/client/{request.js → execute-request/payload.js} +7 -5
  65. package/dist/esm/client/file/_service.js +51 -0
  66. package/dist/esm/client/file/get-file.js +61 -0
  67. package/dist/esm/client/guards.js +13 -0
  68. package/dist/esm/const.js +17 -0
  69. package/dist/esm/index.js +21 -4
  70. package/dist/esm/specification/api.js +2 -1
  71. package/dist/esm/specification/types.js +2 -1
  72. package/package.json +13 -9
  73. package/readme.md +75 -25
  74. package/dist/cjs/client/const.js +0 -20
  75. package/dist/cjs/client/download-file.js +0 -44
  76. package/dist/cjs/client/execute-request.js +0 -69
  77. package/dist/cjs/client/response.js +0 -22
  78. package/dist/dts/client/download-file.d.ts +0 -13
  79. package/dist/dts/client/execute-request.d.ts +0 -13
  80. package/dist/dts/client/response.d.ts +0 -7
  81. package/dist/esm/client/const.js +0 -13
  82. package/dist/esm/client/download-file.js +0 -36
  83. package/dist/esm/client/execute-request.js +0 -62
  84. package/dist/esm/client/response.js +0 -15
  85. /package/dist/dts/client/{request.d.ts → execute-request/payload.d.ts} +0 -0
  86. /package/dist/dts/{client/const.d.ts → const.d.ts} +0 -0
@@ -0,0 +1,16 @@
1
+ import * as Micro from "effect/Micro";
2
+ import type { ClientExecuteRequestServiceInterface } from "../../client/execute-request/_service.js";
3
+ import type { BotMessageHandlerSettings } from "../../bot/message-handler/types.js";
4
+ export type State = {
5
+ lastUpdateId: number | undefined;
6
+ emptyResponses: number;
7
+ };
8
+ export type PollAndHandleInput = {
9
+ settings: BotMessageHandlerSettings;
10
+ execute: ClientExecuteRequestServiceInterface["execute"];
11
+ };
12
+ export declare const pollAndHandle: (input: PollAndHandleInput) => Micro.Micro<{
13
+ updates: import("../../index.js").Update[];
14
+ lastSuccessId: number | undefined;
15
+ hasError: boolean;
16
+ }, import("../../client/errors.js").TgBotClientError, never>;
@@ -0,0 +1,6 @@
1
+ import type { BotMessageHandlerSettings } from "../../bot/message-handler/types.js";
2
+ export type SafeSettings = ReturnType<typeof makeSettingsFrom>;
3
+ export declare const makeSettingsFrom: (input: BotMessageHandlerSettings) => {
4
+ readonly limit: number;
5
+ readonly timeout: number;
6
+ };
@@ -1,19 +1,8 @@
1
- import type { SetOptional } from "type-fest";
2
- export type BotConfig = {
3
- token: string;
4
- baseUrl: string;
5
- };
1
+ import { ClientFileServiceInterface } from "./file/_service.js";
2
+ import { Api } from "../specification/api.js";
3
+ import type { TgBotClientSettingsInput } from "./guards.js";
6
4
  export type TgBotClient = ReturnType<typeof makeTgBotClient>;
7
- export declare const makeTgBotClient: (inputConfig: SetOptional<BotConfig, "baseUrl">) => {
8
- readonly getFile: (input: {
9
- file_id: string;
10
- }) => Promise<{
11
- success?: File;
12
- error?: import("./errors.js").TgBotClientError;
13
- }>;
14
- readonly execute: <M extends keyof import("../specification/api.js").Api>(method: M, input: Parameters<import("../specification/api.js").Api[M]>[0]) => Promise<{
15
- success?: ReturnType<import("../specification/api.js").Api[M]>;
16
- error?: import("./errors.js").TgBotClientError;
17
- }>;
18
- readonly unsafeExecute: <M extends keyof import("../specification/api.js").Api>(method: M, input: Parameters<import("../specification/api.js").Api[M]>[0]) => Promise<ReturnType<import("../specification/api.js").Api[M]>>;
5
+ export declare const makeTgBotClient: (input: TgBotClientSettingsInput) => {
6
+ execute: <M extends keyof Api>(method: M, input: Parameters<Api[M]>[0]) => Promise<ReturnType<Api[M]>>;
7
+ getFile: (input: Parameters<ClientFileServiceInterface["getFile"]>[0]) => Promise<File>;
19
8
  };
@@ -0,0 +1,8 @@
1
+ import * as Context from "effect/Context";
2
+ import { TgBotClientSettingsInput } from "./guards.js";
3
+ export type TgBotClientConfigObject = Required<TgBotClientSettingsInput>;
4
+ export declare const makeTgBotClientConfig: (input: TgBotClientSettingsInput) => Required<TgBotClientSettingsInput>;
5
+ declare const TgBotClientConfig_base: Context.TagClass<TgBotClientConfig, "TgBotClientConfig", Required<TgBotClientSettingsInput>>;
6
+ export declare class TgBotClientConfig extends TgBotClientConfig_base {
7
+ }
8
+ export {};
@@ -12,10 +12,12 @@ type ErrorReason = {
12
12
  readonly type: "UnableToGetFile";
13
13
  readonly cause: unknown;
14
14
  };
15
- export declare class TgBotClientError extends Error {
16
- readonly reason: ErrorReason;
17
- readonly _tag = "TgBotClientError";
18
- constructor(reason: ErrorReason);
15
+ declare const TgBotClientError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
16
+ readonly _tag: "TgBotClientError";
17
+ } & Readonly<A>;
18
+ export declare class TgBotClientError extends TgBotClientError_base<{
19
+ reason: ErrorReason;
20
+ }> {
19
21
  static readonly missingSuccess: TgBotClientError;
20
22
  }
21
23
  export {};
@@ -0,0 +1,15 @@
1
+ import * as Micro from "effect/Micro";
2
+ import * as Context from "effect/Context";
3
+ import type { Api } from "../../specification/api.js";
4
+ import { TgBotClientError } from "../errors.js";
5
+ import { TgBotClientConfig } from "../config.js";
6
+ export type ClientExecuteRequestServiceInterface = Micro.Micro.Success<typeof ClientExecuteRequestServiceDefault>;
7
+ declare const ClientExecuteRequestService_base: Context.TagClass<ClientExecuteRequestService, "ClientExecuteRequestService", {
8
+ execute: <M extends keyof Api>(method: M, input: Parameters<Api[M]>[0]) => Micro.Micro<ReturnType<Api[M]>, TgBotClientError>;
9
+ }>;
10
+ export declare class ClientExecuteRequestService extends ClientExecuteRequestService_base {
11
+ }
12
+ export declare const ClientExecuteRequestServiceDefault: Micro.Micro<{
13
+ readonly execute: <M extends keyof Api>(method: M, input: Parameters<Api[M]>[0]) => Micro.Micro<ReturnType<Api[M]>, TgBotClientError, never>;
14
+ }, never, TgBotClientConfig>;
15
+ export {};
@@ -0,0 +1,5 @@
1
+ import * as Micro from "effect/Micro";
2
+ import type { Api } from "../../specification/api.js";
3
+ import { TgBotClientError } from "../errors.js";
4
+ import { TgBotClientConfigObject } from "../config.js";
5
+ export declare const execute: <M extends keyof Api>(config: TgBotClientConfigObject, method: M, input: Parameters<Api[M]>[0]) => Micro.Micro<ReturnType<Api[M]>, TgBotClientError>;
@@ -0,0 +1,16 @@
1
+ import * as Micro from "effect/Micro";
2
+ import * as Context from "effect/Context";
3
+ import { TgBotClientConfig } from "../config.js";
4
+ import { getFile } from "./get-file.js";
5
+ export type ClientFileServiceInterface = Context.Tag.Service<typeof ClientFileService>;
6
+ declare const ClientFileService_base: Context.TagClass<ClientFileService, "ClientFileService", {
7
+ getFile: (input: {
8
+ file_id: string;
9
+ }) => ReturnType<typeof getFile>;
10
+ }>;
11
+ export declare class ClientFileService extends ClientFileService_base {
12
+ }
13
+ export declare const ClientFileServiceDefault: Micro.Micro<{
14
+ readonly getFile: (input: Parameters<ClientFileServiceInterface["getFile"]>[0]) => Micro.Micro<File, import("../errors.js").TgBotClientError, never>;
15
+ }, never, TgBotClientConfig>;
16
+ export {};
@@ -0,0 +1,5 @@
1
+ import * as Micro from "effect/Micro";
2
+ import { TgBotClientError } from "../errors.js";
3
+ import { TgBotClientConfigObject } from "../config.js";
4
+ import { ClientExecuteRequestServiceInterface } from "../execute-request/_service.js";
5
+ export declare const getFile: (fileId: string, config: TgBotClientConfigObject, execute: ClientExecuteRequestServiceInterface) => Micro.Micro<File, TgBotClientError>;
@@ -0,0 +1,17 @@
1
+ export type FileContent = {
2
+ file_content: Uint8Array;
3
+ file_name: string;
4
+ };
5
+ export declare const isFileContent: (input: unknown) => input is FileContent;
6
+ export type TgBotApiResponseSchema = {
7
+ ok: boolean;
8
+ error_code?: number;
9
+ description?: string;
10
+ result?: unknown;
11
+ };
12
+ export declare const isTgBotApiResponse: (input: unknown) => input is TgBotApiResponseSchema;
13
+ export type TgBotClientSettingsInput = {
14
+ ["bot-token"]: string;
15
+ ["base-url"]?: string;
16
+ };
17
+ export declare const isTgBotClientSettingsInput: (input: unknown) => input is TgBotClientSettingsInput;
@@ -1,2 +1,5 @@
1
- export * from "./client/const.js";
2
1
  export * from "./client/_client.js";
2
+ export * from "./bot/run.js";
3
+ export * from "./specification/api.js";
4
+ export * from "./specification/types.js";
5
+ export * from "./const.js";
@@ -196,7 +196,7 @@ export interface CopyMessageInput {
196
196
  message_id: number;
197
197
  message_thread_id?: number;
198
198
  caption?: string;
199
- parse_mode?: string;
199
+ parse_mode?: "HTML" | "MarkdownV2";
200
200
  caption_entities?: T.MessageEntity[];
201
201
  show_caption_above_media?: boolean;
202
202
  disable_notification?: boolean;
@@ -329,7 +329,7 @@ export interface EditMessageCaptionInput {
329
329
  message_id?: number;
330
330
  inline_message_id?: string;
331
331
  caption?: string;
332
- parse_mode?: string;
332
+ parse_mode?: "HTML" | "MarkdownV2";
333
333
  caption_entities?: T.MessageEntity[];
334
334
  show_caption_above_media?: boolean;
335
335
  reply_markup?: T.InlineKeyboardMarkup;
@@ -368,7 +368,7 @@ export interface EditMessageTextInput {
368
368
  chat_id?: number | string;
369
369
  message_id?: number;
370
370
  inline_message_id?: string;
371
- parse_mode?: string;
371
+ parse_mode?: "HTML" | "MarkdownV2";
372
372
  entities?: T.MessageEntity[];
373
373
  link_preview_options?: T.LinkPreviewOptions;
374
374
  reply_markup?: T.InlineKeyboardMarkup;
@@ -553,7 +553,7 @@ export interface SendAnimationInput {
553
553
  height?: number;
554
554
  thumbnail?: T.InputFile | string;
555
555
  caption?: string;
556
- parse_mode?: string;
556
+ parse_mode?: "HTML" | "MarkdownV2";
557
557
  caption_entities?: T.MessageEntity[];
558
558
  show_caption_above_media?: boolean;
559
559
  has_spoiler?: boolean;
@@ -570,7 +570,7 @@ export interface SendAudioInput {
570
570
  business_connection_id?: string;
571
571
  message_thread_id?: number;
572
572
  caption?: string;
573
- parse_mode?: string;
573
+ parse_mode?: "HTML" | "MarkdownV2";
574
574
  caption_entities?: T.MessageEntity[];
575
575
  duration?: number;
576
576
  performer?: string;
@@ -623,7 +623,7 @@ export interface SendDocumentInput {
623
623
  message_thread_id?: number;
624
624
  thumbnail?: T.InputFile | string;
625
625
  caption?: string;
626
- parse_mode?: string;
626
+ parse_mode?: "HTML" | "MarkdownV2";
627
627
  caption_entities?: T.MessageEntity[];
628
628
  disable_content_type_detection?: boolean;
629
629
  disable_notification?: boolean;
@@ -649,7 +649,7 @@ export interface SendGiftInput {
649
649
  user_id: number;
650
650
  gift_id: string;
651
651
  text?: string;
652
- text_parse_mode?: string;
652
+ text_parse_mode?: "HTML" | "MarkdownV2";
653
653
  text_entities?: T.MessageEntity[];
654
654
  }
655
655
  export interface SendInvoiceInput {
@@ -716,7 +716,7 @@ export interface SendMessageInput {
716
716
  text: string;
717
717
  business_connection_id?: string;
718
718
  message_thread_id?: number;
719
- parse_mode?: string;
719
+ parse_mode?: "HTML" | "MarkdownV2";
720
720
  entities?: T.MessageEntity[];
721
721
  link_preview_options?: T.LinkPreviewOptions;
722
722
  disable_notification?: boolean;
@@ -733,7 +733,7 @@ export interface SendPaidMediaInput {
733
733
  business_connection_id?: string;
734
734
  payload?: string;
735
735
  caption?: string;
736
- parse_mode?: string;
736
+ parse_mode?: "HTML" | "MarkdownV2";
737
737
  caption_entities?: T.MessageEntity[];
738
738
  show_caption_above_media?: boolean;
739
739
  disable_notification?: boolean;
@@ -748,7 +748,7 @@ export interface SendPhotoInput {
748
748
  business_connection_id?: string;
749
749
  message_thread_id?: number;
750
750
  caption?: string;
751
- parse_mode?: string;
751
+ parse_mode?: "HTML" | "MarkdownV2";
752
752
  caption_entities?: T.MessageEntity[];
753
753
  show_caption_above_media?: boolean;
754
754
  has_spoiler?: boolean;
@@ -765,14 +765,14 @@ export interface SendPollInput {
765
765
  options: T.InputPollOption[];
766
766
  business_connection_id?: string;
767
767
  message_thread_id?: number;
768
- question_parse_mode?: string;
768
+ question_parse_mode?: "HTML" | "MarkdownV2";
769
769
  question_entities?: T.MessageEntity[];
770
770
  is_anonymous?: boolean;
771
771
  type?: string;
772
772
  allows_multiple_answers?: boolean;
773
773
  correct_option_id?: number;
774
774
  explanation?: string;
775
- explanation_parse_mode?: string;
775
+ explanation_parse_mode?: "HTML" | "MarkdownV2";
776
776
  explanation_entities?: T.MessageEntity[];
777
777
  open_period?: number;
778
778
  close_date?: number;
@@ -826,7 +826,7 @@ export interface SendVideoInput {
826
826
  height?: number;
827
827
  thumbnail?: T.InputFile | string;
828
828
  caption?: string;
829
- parse_mode?: string;
829
+ parse_mode?: "HTML" | "MarkdownV2";
830
830
  caption_entities?: T.MessageEntity[];
831
831
  show_caption_above_media?: boolean;
832
832
  has_spoiler?: boolean;
@@ -859,7 +859,7 @@ export interface SendVoiceInput {
859
859
  business_connection_id?: string;
860
860
  message_thread_id?: number;
861
861
  caption?: string;
862
- parse_mode?: string;
862
+ parse_mode?: "HTML" | "MarkdownV2";
863
863
  caption_entities?: T.MessageEntity[];
864
864
  duration?: number;
865
865
  disable_notification?: boolean;