@grom.js/effect-tg 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/BotApi.d.ts +3 -15
  2. package/dist/BotApi.d.ts.map +1 -1
  3. package/dist/BotApi.js +0 -9
  4. package/dist/BotApi.js.map +1 -1
  5. package/dist/BotApiError.d.ts +91 -0
  6. package/dist/BotApiError.d.ts.map +1 -0
  7. package/dist/BotApiError.js +53 -0
  8. package/dist/BotApiError.js.map +1 -0
  9. package/dist/File.d.ts +14 -6
  10. package/dist/File.d.ts.map +1 -1
  11. package/dist/File.js +5 -15
  12. package/dist/File.js.map +1 -1
  13. package/dist/Runner.d.ts +1 -1
  14. package/dist/Runner.d.ts.map +1 -1
  15. package/dist/Send.d.ts +3 -2
  16. package/dist/Send.d.ts.map +1 -1
  17. package/dist/Send.js.map +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/internal/botApi.d.ts +1 -1
  23. package/dist/internal/botApi.d.ts.map +1 -1
  24. package/dist/internal/botApi.js +2 -2
  25. package/dist/internal/botApi.js.map +1 -1
  26. package/dist/internal/botApiError.d.ts +3 -0
  27. package/dist/internal/botApiError.d.ts.map +1 -0
  28. package/dist/internal/botApiError.js +34 -0
  29. package/dist/internal/botApiError.js.map +1 -0
  30. package/dist/internal/file.d.ts +7 -0
  31. package/dist/internal/file.d.ts.map +1 -0
  32. package/dist/internal/file.js +13 -0
  33. package/dist/internal/file.js.map +1 -0
  34. package/dist/internal/runner.d.ts +1 -1
  35. package/dist/internal/runner.d.ts.map +1 -1
  36. package/dist/internal/runner.js +1 -1
  37. package/dist/internal/runner.js.map +1 -1
  38. package/dist/internal/send.d.ts +1 -1
  39. package/dist/internal/send.d.ts.map +1 -1
  40. package/package.json +14 -11
  41. package/src/BotApi.ts +3 -16
  42. package/src/BotApiError.ts +81 -0
  43. package/src/File.ts +17 -27
  44. package/src/Send.ts +3 -2
  45. package/src/index.ts +1 -0
  46. package/src/internal/botApi.ts +3 -2
  47. package/src/internal/botApiError.ts +36 -0
  48. package/src/internal/file.ts +16 -0
  49. package/src/internal/runner.ts +2 -2
package/dist/BotApi.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type * as BotApiError from './BotApiError.ts';
1
2
  import type { MethodParams, MethodResults } from './internal/botApiMethods.gen.ts';
2
3
  import type { BotApiShape } from './internal/botApiShape.gen.ts';
3
4
  import type * as Types from './internal/botApiTypes.gen.ts';
@@ -12,23 +13,10 @@ export declare class BotApi extends BotApi_base {
12
13
  export declare namespace BotApi {
13
14
  type Service = BotApiShape;
14
15
  }
15
- export interface Method<M extends keyof MethodParams, E = BotApiError | BotApiTransport.BotApiTransportError, R = never> {
16
+ export interface Method<M extends keyof MethodParams, E = BotApiError.BotApiError | BotApiTransport.BotApiTransportError, R = never> {
16
17
  (params: MethodParams[M]): Effect.Effect<MethodResults[M], E, R>;
17
18
  }
18
- declare const BotApiError_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 & {
19
- readonly _tag: "@grom.js/effect-tg/BotApi/BotApiError";
20
- } & Readonly<A>;
21
- /**
22
- * Error returned from the Bot API server in case of unsuccessful method call.
23
- */
24
- export declare class BotApiError extends BotApiError_base<{
25
- code: number;
26
- description: string;
27
- parameters?: Types.ResponseParameters;
28
- }> {
29
- get message(): string;
30
- }
31
19
  export declare const make: (transport: BotApiTransport.BotApiTransport.Service) => BotApiShape;
32
20
  export declare const layer: Layer.Layer<BotApi, never, BotApiTransport.BotApiTransport>;
33
- export declare const callMethod: <M extends keyof MethodParams>(method: M, params: MethodParams[M]) => Effect.Effect<MethodResults[M], BotApiError | BotApiTransport.BotApiTransportError, BotApi>;
21
+ export declare const callMethod: <M extends keyof MethodParams>(method: M, params: MethodParams[M]) => Effect.Effect<MethodResults[M], BotApiError.BotApiError | BotApiTransport.BotApiTransportError, BotApi>;
34
22
  //# sourceMappingURL=BotApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BotApi.d.ts","sourceRoot":"","sources":["../src/BotApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,KAAK,KAAK,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAGvD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;;AAElD,qBAAa,MAAO,SAAQ,WAGzB;CAAG;AAEN,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,OAAO,GAAG,WAAW,CAAA;CAClC;AAED,MAAM,WAAW,MAAM,CACrB,CAAC,SAAS,MAAM,YAAY,EAC5B,CAAC,GAAG,WAAW,GAAG,eAAe,CAAC,oBAAoB,EACtD,CAAC,GAAG,KAAK;IAET,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CACjE;;;;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,iBAA0D;IACzF,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAA;CACtC,CAAC;IACA,IAAa,OAAO,WAEnB;CACF;AAED,eAAO,MAAM,IAAI,EAAE,CACjB,SAAS,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,KAC/C,WAA2B,CAAA;AAEhC,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,MAAM,EACN,KAAK,EACL,eAAe,CAAC,eAAe,CAIhC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EACpD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KACpB,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,CAAC,CAAC,EAChB,WAAW,GAAG,eAAe,CAAC,oBAAoB,EAClD,MAAM,CAMA,CAAA"}
1
+ {"version":3,"file":"BotApi.d.ts","sourceRoot":"","sources":["../src/BotApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,WAAW,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,KAAK,KAAK,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAGvD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;;AAElD,qBAAa,MAAO,SAAQ,WAGzB;CAAG;AAEN,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,OAAO,GAAG,WAAW,CAAA;CAClC;AAED,MAAM,WAAW,MAAM,CACrB,CAAC,SAAS,MAAM,YAAY,EAC5B,CAAC,GAAG,WAAW,CAAC,WAAW,GAAG,eAAe,CAAC,oBAAoB,EAClE,CAAC,GAAG,KAAK;IAET,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CACjE;AAED,eAAO,MAAM,IAAI,EAAE,CACjB,SAAS,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,KAC/C,WAA2B,CAAA;AAEhC,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,MAAM,EACN,KAAK,EACL,eAAe,CAAC,eAAe,CAIhC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EACpD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KACpB,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,CAAC,CAAC,EAChB,WAAW,CAAC,WAAW,GAAG,eAAe,CAAC,oBAAoB,EAC9D,MAAM,CAMA,CAAA"}
package/dist/BotApi.js CHANGED
@@ -1,19 +1,10 @@
1
1
  import * as Context from 'effect/Context';
2
- import * as Data from 'effect/Data';
3
2
  import * as Effect from 'effect/Effect';
4
3
  import * as Layer from 'effect/Layer';
5
4
  import * as BotApiTransport from "./BotApiTransport.js";
6
5
  import * as internal from "./internal/botApi.js";
7
6
  export class BotApi extends Context.Tag('@grom.js/effect-tg/BotApi')() {
8
7
  }
9
- /**
10
- * Error returned from the Bot API server in case of unsuccessful method call.
11
- */
12
- export class BotApiError extends Data.TaggedError('@grom.js/effect-tg/BotApi/BotApiError') {
13
- get message() {
14
- return `(${this.code}) ${this.description}`;
15
- }
16
- }
17
8
  export const make = internal.make;
18
9
  export const layer = Layer.effect(BotApi, Effect.andThen(BotApiTransport.BotApiTransport, internal.make));
19
10
  export const callMethod = (method, params = undefined) => BotApi.pipe(Effect.flatMap((api) => api[method](params)));
@@ -1 +1 @@
1
- {"version":3,"file":"BotApi.js","sourceRoot":"","sources":["../src/BotApi.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAIhD,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAGjE;CAAG;AAcN;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,uCAAuC,CAIvF;IACA,IAAa,OAAO;QAClB,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAA;IAC7C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAEE,QAAQ,CAAC,IAAI,CAAA;AAEhC,MAAM,CAAC,MAAM,KAAK,GAId,KAAK,CAAC,MAAM,CACd,MAAM,EACN,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAC/D,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAOnB,CACF,MAAc,EACd,SAAkB,SAAS,EAC3B,EAAE,CAAC,MAAM,CAAC,IAAI,CACd,MAAM,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAC3C,CAAA"}
1
+ {"version":3,"file":"BotApi.js","sourceRoot":"","sources":["../src/BotApi.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAIhD,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAGjE;CAAG;AAcN,MAAM,CAAC,MAAM,IAAI,GAEE,QAAQ,CAAC,IAAI,CAAA;AAEhC,MAAM,CAAC,MAAM,KAAK,GAId,KAAK,CAAC,MAAM,CACd,MAAM,EACN,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAC/D,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAOnB,CACF,MAAc,EACd,SAAkB,SAAS,EAC3B,EAAE,CAAC,MAAM,CAAC,IAAI,CACd,MAAM,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAC3C,CAAA"}
@@ -0,0 +1,91 @@
1
+ import type * as Duration from 'effect/Duration';
2
+ import type * as BotApi from './BotApi.ts';
3
+ declare const BotApiError_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 & {
4
+ readonly _tag: "@grom.js/effect-tg/BotApiError";
5
+ } & Readonly<A>;
6
+ /**
7
+ * Error returned from the Bot API server in case of unsuccessful method call.
8
+ */
9
+ export declare class BotApiError extends BotApiError_base<{
10
+ code: number;
11
+ description: string;
12
+ parameters?: BotApi.Types.ResponseParameters;
13
+ }> {
14
+ get message(): string;
15
+ }
16
+ /**
17
+ * Attempts to narrow a {@link BotApiError} to a more specific {@link KnownError}.
18
+ *
19
+ * **Warning!** Error types are detected based on the error code and message
20
+ * returned from the Bot API, which are not guaranteed to be the same in
21
+ * the future. If they change, this function may not determine error type
22
+ * correctly.
23
+ *
24
+ * @see {@link https://github.com/tdlib/telegram-bot-api telegram-bot-api source code}
25
+ */
26
+ export declare const narrow: (error: BotApiError) => KnownError | BotApiError;
27
+ export type KnownError = TooManyRequests | BotBlockedByUser | MessageNotModified | ReplyMarkupTooLong | QueryIdInvalid | MediaGroupedInvalid;
28
+ declare const TooManyRequests_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 & {
29
+ readonly _tag: "@grom.js/effect-tg/BotApiError/TooManyRequests";
30
+ } & Readonly<A>;
31
+ /**
32
+ * Flood limit exceeded. Need to wait `retryAfter` before retrying.
33
+ */
34
+ export declare class TooManyRequests extends TooManyRequests_base<{
35
+ cause: BotApiError;
36
+ retryAfter: Duration.Duration;
37
+ }> {
38
+ }
39
+ declare const BotBlockedByUser_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 & {
40
+ readonly _tag: "@grom.js/effect-tg/BotApiError/BotBlockedByUser";
41
+ } & Readonly<A>;
42
+ /**
43
+ * Bot was blocked by the user.
44
+ */
45
+ export declare class BotBlockedByUser extends BotBlockedByUser_base<{
46
+ cause: BotApiError;
47
+ }> {
48
+ }
49
+ declare const MessageNotModified_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 & {
50
+ readonly _tag: "@grom.js/effect-tg/BotApiError/MessageNotModified";
51
+ } & Readonly<A>;
52
+ /**
53
+ * Message was not modified as its content and reply markup
54
+ * are exactly the same as the current one.
55
+ */
56
+ export declare class MessageNotModified extends MessageNotModified_base<{
57
+ cause: BotApiError;
58
+ }> {
59
+ }
60
+ declare const ReplyMarkupTooLong_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 & {
61
+ readonly _tag: "@grom.js/effect-tg/BotApiError/ReplyMarkupTooLong";
62
+ } & Readonly<A>;
63
+ /**
64
+ * Message reply markup is too long.
65
+ */
66
+ export declare class ReplyMarkupTooLong extends ReplyMarkupTooLong_base<{
67
+ cause: BotApiError;
68
+ }> {
69
+ }
70
+ declare const QueryIdInvalid_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 & {
71
+ readonly _tag: "@grom.js/effect-tg/BotApiError/QueryIdInvalid";
72
+ } & Readonly<A>;
73
+ /**
74
+ * Query has expired, or ID is invalid.
75
+ */
76
+ export declare class QueryIdInvalid extends QueryIdInvalid_base<{
77
+ cause: BotApiError;
78
+ }> {
79
+ }
80
+ declare const MediaGroupedInvalid_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 & {
81
+ readonly _tag: "@grom.js/effect-tg/BotApiError/MediaGroupedInvalid";
82
+ } & Readonly<A>;
83
+ /**
84
+ * Invalid combination of media types in the media group.
85
+ */
86
+ export declare class MediaGroupedInvalid extends MediaGroupedInvalid_base<{
87
+ cause: BotApiError;
88
+ }> {
89
+ }
90
+ export {};
91
+ //# sourceMappingURL=BotApiError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BotApiError.d.ts","sourceRoot":"","sources":["../src/BotApiError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;;;;AAI1C;;GAEG;AACH,qBAAa,WAAY,SAAQ,iBAAmD;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAA;CAC7C,CAAC;IACA,IAAa,OAAO,WAEnB;CACF;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,UAAU,GAAG,WAA6B,CAAA;AAEvF,MAAM,MAAM,UAAU,GAChB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,cAAc,GACd,mBAAmB,CAAA;;;;AAEzB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,qBAAmE;IACtG,KAAK,EAAE,WAAW,CAAA;IAClB,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAA;CAC9B,CAAC;CAAG;;;;AAEL;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,sBAAoE;IACxG,KAAK,EAAE,WAAW,CAAA;CACnB,CAAC;CAAG;;;;AAEL;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,wBAAsE;IAC5G,KAAK,EAAE,WAAW,CAAA;CACnB,CAAC;CAAG;;;;AAEL;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,wBAAsE;IAC5G,KAAK,EAAE,WAAW,CAAA;CACnB,CAAC;CAAG;;;;AAEL;;GAEG;AACH,qBAAa,cAAe,SAAQ,oBAAkE;IACpG,KAAK,EAAE,WAAW,CAAA;CACnB,CAAC;CAAG;;;;AAEL;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,yBAAuE;IAC9G,KAAK,EAAE,WAAW,CAAA;CACnB,CAAC;CAAG"}
@@ -0,0 +1,53 @@
1
+ import * as Data from 'effect/Data';
2
+ import * as internal from "./internal/botApiError.js";
3
+ /**
4
+ * Error returned from the Bot API server in case of unsuccessful method call.
5
+ */
6
+ export class BotApiError extends Data.TaggedError('@grom.js/effect-tg/BotApiError') {
7
+ get message() {
8
+ return `(${this.code}) ${this.description}`;
9
+ }
10
+ }
11
+ /**
12
+ * Attempts to narrow a {@link BotApiError} to a more specific {@link KnownError}.
13
+ *
14
+ * **Warning!** Error types are detected based on the error code and message
15
+ * returned from the Bot API, which are not guaranteed to be the same in
16
+ * the future. If they change, this function may not determine error type
17
+ * correctly.
18
+ *
19
+ * @see {@link https://github.com/tdlib/telegram-bot-api telegram-bot-api source code}
20
+ */
21
+ export const narrow = internal.narrow;
22
+ /**
23
+ * Flood limit exceeded. Need to wait `retryAfter` before retrying.
24
+ */
25
+ export class TooManyRequests extends Data.TaggedError('@grom.js/effect-tg/BotApiError/TooManyRequests') {
26
+ }
27
+ /**
28
+ * Bot was blocked by the user.
29
+ */
30
+ export class BotBlockedByUser extends Data.TaggedError('@grom.js/effect-tg/BotApiError/BotBlockedByUser') {
31
+ }
32
+ /**
33
+ * Message was not modified as its content and reply markup
34
+ * are exactly the same as the current one.
35
+ */
36
+ export class MessageNotModified extends Data.TaggedError('@grom.js/effect-tg/BotApiError/MessageNotModified') {
37
+ }
38
+ /**
39
+ * Message reply markup is too long.
40
+ */
41
+ export class ReplyMarkupTooLong extends Data.TaggedError('@grom.js/effect-tg/BotApiError/ReplyMarkupTooLong') {
42
+ }
43
+ /**
44
+ * Query has expired, or ID is invalid.
45
+ */
46
+ export class QueryIdInvalid extends Data.TaggedError('@grom.js/effect-tg/BotApiError/QueryIdInvalid') {
47
+ }
48
+ /**
49
+ * Invalid combination of media types in the media group.
50
+ */
51
+ export class MediaGroupedInvalid extends Data.TaggedError('@grom.js/effect-tg/BotApiError/MediaGroupedInvalid') {
52
+ }
53
+ //# sourceMappingURL=BotApiError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BotApiError.js","sourceRoot":"","sources":["../src/BotApiError.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAErD;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAIhF;IACA,IAAa,OAAO;QAClB,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAA;IAC7C,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAqD,QAAQ,CAAC,MAAM,CAAA;AAUvF;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,IAAI,CAAC,WAAW,CAAC,gDAAgD,CAGpG;CAAG;AAEL;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,IAAI,CAAC,WAAW,CAAC,iDAAiD,CAEtG;CAAG;AAEL;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,mDAAmD,CAE1G;CAAG;AAEL;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,mDAAmD,CAE1G;CAAG;AAEL;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,IAAI,CAAC,WAAW,CAAC,+CAA+C,CAElG;CAAG;AAEL;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CAAC,oDAAoD,CAE5G;CAAG"}
package/dist/File.d.ts CHANGED
@@ -1,9 +1,13 @@
1
+ import type * as HttpClient from '@effect/platform/HttpClient';
2
+ import type * as HttpClientError from '@effect/platform/HttpClientError';
3
+ import type * as HttpClientResponse from '@effect/platform/HttpClientResponse';
4
+ import type * as Effect from 'effect/Effect';
1
5
  import type * as Stream from 'effect/Stream';
2
- import * as HttpClient from '@effect/platform/HttpClient';
6
+ import type * as BotApi from './BotApi.ts';
7
+ import type * as BotApiError from './BotApiError.ts';
8
+ import type * as BotApiTransport from './BotApiTransport.ts';
9
+ import type * as BotApiUrl from './BotApiUrl.ts';
3
10
  import * as Brand from 'effect/Brand';
4
- import * as Effect from 'effect/Effect';
5
- import * as BotApi from './BotApi.ts';
6
- import * as BotApiUrl from './BotApiUrl.ts';
7
11
  export type FileId = string & Brand.Brand<'FileId'>;
8
12
  export declare const FileId: Brand.Brand.Constructor<FileId>;
9
13
  export type External = URL & Brand.Brand<'External'>;
@@ -17,7 +21,11 @@ export declare class InputFile extends InputFile_base<{
17
21
  mimeType?: string;
18
22
  }> {
19
23
  }
20
- export declare const download: (fileId: FileId) => Effect.Effect<ArrayBuffer, BotApi.BotApiError | import("./BotApiTransport.ts").BotApiTransportError | import("@effect/platform/HttpClientError").HttpClientError, BotApiUrl.BotApiUrl | HttpClient.HttpClient | BotApi.BotApi>;
21
- export declare const downloadStream: (fileId: FileId) => Effect.Effect<Stream.Stream<Uint8Array<ArrayBufferLike>, import("@effect/platform/HttpClientError").ResponseError, never>, BotApi.BotApiError | import("./BotApiTransport.ts").BotApiTransportError | import("@effect/platform/HttpClientError").HttpClientError, BotApiUrl.BotApiUrl | HttpClient.HttpClient | BotApi.BotApi>;
24
+ /**
25
+ * Downloads a file from the Bot API server.
26
+ *
27
+ * @see {@link https://core.telegram.org/bots/api#getfile Bot API • getFile}
28
+ */
29
+ export declare const get: (fileId: FileId) => Effect.Effect<HttpClientResponse.HttpClientResponse, BotApiError.BotApiError | BotApiTransport.BotApiTransportError | HttpClientError.HttpClientError, BotApi.BotApi | BotApiUrl.BotApiUrl | HttpClient.HttpClient>;
22
30
  export {};
23
31
  //# sourceMappingURL=File.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../src/File.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AACzD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACnD,eAAO,MAAM,MAAM,iCAA0B,CAAA;AAE7C,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AACpD,eAAO,MAAM,QAAQ,mCAA4B,CAAA;;;;AAEjD,qBAAa,SAAU,SAAQ,eAA8B;IAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAC;CAAG;AAgBL,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,mOAItC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,mUAI5C,CAAA"}
1
+ {"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../src/File.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,UAAU,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,KAAK,eAAe,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,KAAK,kBAAkB,MAAM,qCAAqC,CAAA;AAC9E,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,KAAK,WAAW,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACnD,eAAO,MAAM,MAAM,iCAA0B,CAAA;AAE7C,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AACpD,eAAO,MAAM,QAAQ,mCAA4B,CAAA;;;;AAEjD,qBAAa,SAAU,SAAQ,eAA8B;IAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAC;CAAG;AAEL;;;;GAIG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CACjD,kBAAkB,CAAC,kBAAkB,EACrC,WAAW,CAAC,WAAW,GAAG,eAAe,CAAC,oBAAoB,GAAG,eAAe,CAAC,eAAe,EAChG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,UAAU,CAC7C,CAAA"}
package/dist/File.js CHANGED
@@ -1,24 +1,14 @@
1
- import * as HttpClient from '@effect/platform/HttpClient';
2
1
  import * as Brand from 'effect/Brand';
3
2
  import * as Data from 'effect/Data';
4
- import * as Effect from 'effect/Effect';
5
- import * as BotApi from "./BotApi.js";
6
- import * as BotApiUrl from "./BotApiUrl.js";
3
+ import * as internal from "./internal/file.js";
7
4
  export const FileId = Brand.nominal();
8
5
  export const External = Brand.nominal();
9
6
  export class InputFile extends Data.TaggedClass('InputFile') {
10
7
  }
11
8
  /**
12
- * @internal
9
+ * Downloads a file from the Bot API server.
10
+ *
11
+ * @see {@link https://core.telegram.org/bots/api#getfile Bot API • getFile}
13
12
  */
14
- const downloadRequest = Effect.fnUntraced(function* (fileId) {
15
- const file = yield* BotApi.callMethod('getFile', { file_id: fileId });
16
- if (file.file_path == null) {
17
- return yield* Effect.die(new Error(`Bot API returned no file path for file "${fileId}".`));
18
- }
19
- const url = yield* BotApiUrl.BotApiUrl;
20
- return yield* HttpClient.get(url.toFile(file.file_path));
21
- });
22
- export const download = (fileId) => (downloadRequest(fileId).pipe(Effect.flatMap(request => request.arrayBuffer)));
23
- export const downloadStream = (fileId) => (downloadRequest(fileId).pipe(Effect.andThen(request => request.stream)));
13
+ export const get = internal.get;
24
14
  //# sourceMappingURL=File.js.map
package/dist/File.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"File.js","sourceRoot":"","sources":["../src/File.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AACzD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAG3C,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAU,CAAA;AAG7C,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAY,CAAA;AAEjD,MAAM,OAAO,SAAU,SAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAIzD;CAAG;AAEL;;GAEG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CACvC,QAAQ,CAAC,EAAE,MAAc;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IACrE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,2CAA2C,MAAM,IAAI,CAAC,CAAC,CAAA;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAC1C,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAC/C,CACF,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAChD,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAC1C,CACF,CAAA"}
1
+ {"version":3,"file":"File.js","sourceRoot":"","sources":["../src/File.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAG9C,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAU,CAAA;AAG7C,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAY,CAAA;AAEjD,MAAM,OAAO,SAAU,SAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAIzD;CAAG;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,GAAG,GAIZ,QAAQ,CAAC,GAAG,CAAA"}
package/dist/Runner.d.ts CHANGED
@@ -14,5 +14,5 @@ export interface Runner<E = never, R = never> {
14
14
  */
15
15
  export declare const makeSimple: (options?: {
16
16
  allowedUpdates?: string[];
17
- }) => Runner<import("./BotApi.ts").BotApiError | import("./BotApiTransport.ts").BotApiTransportError, import("./BotApi.ts").BotApi>;
17
+ }) => Runner<import("./BotApiError.ts").BotApiError | import("./BotApiTransport.ts").BotApiTransportError, import("./BotApi.ts").BotApi>;
18
18
  //# sourceMappingURL=Runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Runner.d.ts","sourceRoot":"","sources":["../src/Runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAGpC;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK;IAC1C,QAAQ,CAAC,GAAG,EAAE;QACZ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAC3C,KAAK,EACL,CAAC,GAAG,EAAE,EACN,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAC5B,CAAA;KACF,CAAA;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU;kBAHqD,CAAC;mIAGhC,CAAA"}
1
+ {"version":3,"file":"Runner.d.ts","sourceRoot":"","sources":["../src/Runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAGpC;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK;IAC1C,QAAQ,CAAC,GAAG,EAAE;QACZ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAC3C,KAAK,EACL,CAAC,GAAG,EAAE,EACN,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAC5B,CAAA;KACF,CAAA;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU;kBAFpB,CAAA;wIAE0C,CAAA"}
package/dist/Send.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * Utilities for sending messages.
3
3
  */
4
4
  import type * as BotApi from './BotApi.ts';
5
+ import type * as BotApiError from './BotApiError.ts';
5
6
  import type * as BotApiTransport from './BotApiTransport.ts';
6
7
  import type * as Content from './Content.ts';
7
8
  import type * as Dialog_ from './Dialog.ts';
@@ -54,8 +55,8 @@ export declare const sendMessage: (params: {
54
55
  dialog: Dialog_.Dialog;
55
56
  options?: Options;
56
57
  markup?: Markup.Markup;
57
- }) => Effect.Effect<BotApi.Types.Message, BotApi.BotApiError | BotApiTransport.BotApiTransportError, BotApi.BotApi>;
58
- type MessageToSendEffect = Effect.Effect<BotApi.Types.Message, BotApi.BotApiError | BotApiTransport.BotApiTransportError, BotApi.BotApi | Dialog>;
58
+ }) => Effect.Effect<BotApi.Types.Message, BotApiError.BotApiError | BotApiTransport.BotApiTransportError, BotApi.BotApi>;
59
+ type MessageToSendEffect = Effect.Effect<BotApi.Types.Message, BotApiError.BotApiError | BotApiTransport.BotApiTransportError, BotApi.BotApi | Dialog>;
59
60
  /**
60
61
  * A message prepared to be sent.
61
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Send.d.ts","sourceRoot":"","sources":["../src/Send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Send.d.ts","sourceRoot":"","sources":["../src/Send.ts"],"names":[],"mappings":"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"}
package/dist/Send.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Send.js","sourceRoot":"","sources":["../src/Send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Send.js","sourceRoot":"","sources":["../src/Send.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * as Bot from './Bot.ts';
2
2
  export * as BotApi from './BotApi.ts';
3
+ export * as BotApiError from './BotApiError.ts';
3
4
  export * as BotApiTransport from './BotApiTransport.ts';
4
5
  export * as BotApiUrl from './BotApiUrl.ts';
5
6
  export * as Content from './Content.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * as Bot from "./Bot.js";
2
2
  export * as BotApi from "./BotApi.js";
3
+ export * as BotApiError from "./BotApiError.js";
3
4
  export * as BotApiTransport from "./BotApiTransport.js";
4
5
  export * as BotApiUrl from "./BotApiUrl.js";
5
6
  export * as Content from "./Content.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA"}
@@ -1,4 +1,4 @@
1
+ import type * as BotApi from '../BotApi.ts';
1
2
  import type * as BotApiTransport from '../BotApiTransport.ts';
2
- import * as BotApi from '../BotApi.ts';
3
3
  export declare const make: (transport: BotApiTransport.BotApiTransport.Service) => BotApi.BotApi.Service;
4
4
  //# sourceMappingURL=botApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"botApi.d.ts","sourceRoot":"","sources":["../../src/internal/botApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAA;AAE7D,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,IAAI,GACf,WAAW,eAAe,CAAC,eAAe,CAAC,OAAO,KACjD,MAAM,CAAC,MAAM,CAAC,OAwBhB,CAAA"}
1
+ {"version":3,"file":"botApi.d.ts","sourceRoot":"","sources":["../../src/internal/botApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAA;AAI7D,eAAO,MAAM,IAAI,GACf,WAAW,eAAe,CAAC,eAAe,CAAC,OAAO,KACjD,MAAM,CAAC,MAAM,CAAC,OAwBhB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import * as Effect from 'effect/Effect';
2
- import * as BotApi from "../BotApi.js";
2
+ import * as BotApiError from "../BotApiError.js";
3
3
  export const make = (transport) => new Proxy({}, {
4
4
  get: (_target, prop) => {
5
5
  if (typeof prop !== 'string') {
@@ -11,7 +11,7 @@ export const make = (transport) => new Proxy({}, {
11
11
  if (response.ok) {
12
12
  return response.result;
13
13
  }
14
- return yield* Effect.fail(new BotApi.BotApiError({
14
+ return yield* Effect.fail(new BotApiError.BotApiError({
15
15
  code: response.error_code,
16
16
  description: response.description,
17
17
  parameters: response.parameters,
@@ -1 +1 @@
1
- {"version":3,"file":"botApi.js","sourceRoot":"","sources":["../../src/internal/botApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,SAAkD,EAC3B,EAAE,CACzB,IAAI,KAAK,CAAC,EAAE,EAAE;IACZ,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,MAAM,CAAC,UAAU,CACtB,QAAQ,CAAC,EAAE,SAAyC,EAAE;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC7D,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,QAAQ,CAAC,MAAM,CAAA;YACxB,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,MAAM,CAAC,WAAW,CAAC;gBACrB,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CACH,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC;CACF,CACF,CAAA"}
1
+ {"version":3,"file":"botApi.js","sourceRoot":"","sources":["../../src/internal/botApi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,SAAkD,EAC3B,EAAE,CACzB,IAAI,KAAK,CAAC,EAAE,EAAE;IACZ,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,MAAM,CAAC,UAAU,CACtB,QAAQ,CAAC,EAAE,SAAyC,EAAE;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC7D,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,QAAQ,CAAC,MAAM,CAAA;YACxB,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,WAAW,CAAC,WAAW,CAAC;gBAC1B,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CACH,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC;CACF,CACF,CAAA"}
@@ -0,0 +1,3 @@
1
+ import * as BotApiError from '../BotApiError.ts';
2
+ export declare const narrow: (error: BotApiError.BotApiError) => BotApiError.KnownError | BotApiError.BotApiError;
3
+ //# sourceMappingURL=botApiError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botApiError.d.ts","sourceRoot":"","sources":["../../src/internal/botApiError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAEhD,eAAO,MAAM,MAAM,GACjB,OAAO,WAAW,CAAC,WAAW,KAC7B,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,WA8BvC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import * as Duration from 'effect/Duration';
2
+ import * as BotApiError from "../BotApiError.js";
3
+ export const narrow = (error) => {
4
+ const code = error.code;
5
+ const msg = error.message.toLowerCase();
6
+ const params = error.parameters;
7
+ if (code === 429 && params?.retry_after != null) {
8
+ return new BotApiError.TooManyRequests({
9
+ cause: error,
10
+ retryAfter: Duration.seconds(params.retry_after),
11
+ });
12
+ }
13
+ if (code === 403) {
14
+ if (msg.includes('bot was blocked by the user')) {
15
+ return new BotApiError.BotBlockedByUser({ cause: error });
16
+ }
17
+ }
18
+ if (code === 400) {
19
+ if (msg.includes('message is not modified')) {
20
+ return new BotApiError.MessageNotModified({ cause: error });
21
+ }
22
+ if (msg.includes('reply markup too long')) {
23
+ return new BotApiError.ReplyMarkupTooLong({ cause: error });
24
+ }
25
+ if (msg.includes('query is too old') && msg.includes('query id is invalid')) {
26
+ return new BotApiError.QueryIdInvalid({ cause: error });
27
+ }
28
+ if (msg.includes('can\'t use the media of the specified type in the album')) {
29
+ return new BotApiError.MediaGroupedInvalid({ cause: error });
30
+ }
31
+ }
32
+ return error;
33
+ };
34
+ //# sourceMappingURL=botApiError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botApiError.js","sourceRoot":"","sources":["../../src/internal/botApiError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,KAA8B,EACoB,EAAE;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAA;IAC/B,IAAI,IAAI,KAAK,GAAG,IAAI,MAAM,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,WAAW,CAAC,eAAe,CAAC;YACrC,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;SACjD,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC5E,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,yDAAyD,CAAC,EAAE,CAAC;YAC5E,OAAO,IAAI,WAAW,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { FileId } from '../File.ts';
2
+ import * as HttpClient from '@effect/platform/HttpClient';
3
+ import * as Effect from 'effect/Effect';
4
+ import * as BotApi from '../BotApi.ts';
5
+ import * as BotApiUrl from '../BotApiUrl.ts';
6
+ export declare const get: (fileId: FileId) => Effect.Effect<import("@effect/platform/HttpClientResponse").HttpClientResponse, import("../BotApiError.ts").BotApiError | import("@effect/platform/HttpClientError").HttpClientError | import("../BotApiTransport.ts").BotApiTransportError, BotApiUrl.BotApiUrl | HttpClient.HttpClient | BotApi.BotApi>;
7
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/internal/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C,eAAO,MAAM,GAAG,+TASf,CAAA"}
@@ -0,0 +1,13 @@
1
+ import * as HttpClient from '@effect/platform/HttpClient';
2
+ import * as Effect from 'effect/Effect';
3
+ import * as BotApi from "../BotApi.js";
4
+ import * as BotApiUrl from "../BotApiUrl.js";
5
+ export const get = Effect.fnUntraced(function* (fileId) {
6
+ const file = yield* BotApi.callMethod('getFile', { file_id: fileId });
7
+ if (file.file_path == null) {
8
+ return yield* Effect.die(new Error(`Bot API returned no file path for file "${fileId}".`));
9
+ }
10
+ const url = yield* BotApiUrl.BotApiUrl;
11
+ return yield* HttpClient.get(url.toFile(file.file_path));
12
+ });
13
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/internal/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAClC,QAAQ,CAAC,EAAE,MAAc;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IACrE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,2CAA2C,MAAM,IAAI,CAAC,CAAC,CAAA;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC,CACF,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { BotApiError } from '../BotApi.ts';
1
+ import type { BotApiError } from '../BotApiError.ts';
2
2
  import type { BotApiTransportError } from '../BotApiTransport.ts';
3
3
  import type { Runner } from '../Runner.ts';
4
4
  import { BotApi } from '../BotApi.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/internal/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAM1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,UAAU,GAAI,UAAU;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,KAAG,MAAM,CAAC,WAAW,GAAG,oBAAoB,EAAE,MAAM,CA4CnD,CAAA"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/internal/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAM1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,UAAU,GAAI,UAAU;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,KAAG,MAAM,CAAC,WAAW,GAAG,oBAAoB,EAAE,MAAM,CA4CnD,CAAA"}
@@ -20,7 +20,7 @@ export const makeSimple = (options) => ({
20
20
  .pipe(Effect.retry({
21
21
  schedule: Schedule.spaced(Duration.seconds(3)),
22
22
  while: error => Match.value(error).pipe(Match.tagsExhaustive({
23
- '@grom.js/effect-tg/BotApi/BotApiError': error => Effect.succeed(error.code >= 500 || (error.code !== 401
23
+ '@grom.js/effect-tg/BotApiError': error => Effect.succeed(error.code >= 500 || (error.code !== 401
24
24
  && error.code !== 403
25
25
  && error.code !== 404)),
26
26
  '@grom.js/effect-tg/BotApiTransport/BotApiTransportError': () => Effect.succeed(true),
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/internal/runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAE1B,EAAsD,EAAE,CAAC,CAAC;IACzD,GAAG,EAAE,MAAM,CAAC,UAAU,CACpB,QAAQ,CAAC,EAAE,GAAG;QACZ,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;QACzB,IAAI,YAAgC,CAAA;QACpC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;iBACxB,UAAU,CAAC;gBACV,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC;gBAC3D,eAAe,EAAE,cAAc;gBAC/B,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,CAAC;aACT,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,KAAK,CAAC;gBACX,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9C,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACrC,KAAK,CAAC,cAAc,CAAC;oBACnB,uCAAuC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC9D,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,CACnB,KAAK,CAAC,IAAI,KAAK,GAAG;2BACf,KAAK,CAAC,IAAI,KAAK,GAAG;2BAClB,KAAK,CAAC,IAAI,KAAK,GAAG,CACtB,CACF;oBACD,yDAAyD,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;iBACtF,CAAC,CACH;aACF,CAAC,CACH,CAAA;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,CAAC,MAAM;qBACV,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;qBACnC,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CACvB,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CACxC,CAAC,CACH,CAAA;gBACH,YAAY,GAAG,MAAM,CAAC,SAAS,CAAA;YACjC,CAAC;QACH,CAAC;IACH,CAAC,CACF;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/internal/runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAE1B,EAAsD,EAAE,CAAC,CAAC;IACzD,GAAG,EAAE,MAAM,CAAC,UAAU,CACpB,QAAQ,CAAC,EAAE,GAAG;QACZ,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;QACzB,IAAI,YAAgC,CAAA;QACpC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;iBACxB,UAAU,CAAC;gBACV,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC;gBAC3D,eAAe,EAAE,cAAc;gBAC/B,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,CAAC;aACT,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,KAAK,CAAC;gBACX,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9C,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACrC,KAAK,CAAC,cAAc,CAAC;oBACnB,gCAAgC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CACvD,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,CACnB,KAAK,CAAC,IAAI,KAAK,GAAG;2BACf,KAAK,CAAC,IAAI,KAAK,GAAG;2BAClB,KAAK,CAAC,IAAI,KAAK,GAAG,CACtB,CACF;oBACD,yDAAyD,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;iBACtF,CAAC,CACH;aACF,CAAC,CACH,CAAA;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,CAAC,MAAM;qBACV,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;qBACnC,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CACvB,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CACxC,CAAC,CACH,CAAA;gBACH,YAAY,GAAG,MAAM,CAAC,SAAS,CAAA;YACjC,CAAC;QACH,CAAC;IACH,CAAC,CACF;CACF,CAAC,CAAA"}
@@ -9,5 +9,5 @@ export declare const sendMessage: (params: {
9
9
  dialog: Dialog_.Dialog;
10
10
  options?: Send.Options;
11
11
  markup?: Markup.Markup;
12
- }) => Effect.Effect<BotApi.Types.Message, BotApi.BotApiError | import("../BotApiTransport.ts").BotApiTransportError, BotApi.BotApi>;
12
+ }) => Effect.Effect<BotApi.Types.Message, import("../BotApiError.ts").BotApiError | import("../BotApiTransport.ts").BotApiTransportError, BotApi.BotApi>;
13
13
  //# sourceMappingURL=send.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/internal/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAE7C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAA;AAIvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAoRtC,eAAO,MAAM,WAAW;aACb,OAAO,CAAC,OAAO;YAChB,OAAO,CAAC,MAAM;cACZ,IAAI,CAAC,OAAO;aACb,MAAM,CAAC,MAAM;mIAyBtB,CAAA"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/internal/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAE7C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAA;AAIvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAoRtC,eAAO,MAAM,WAAW;aACb,OAAO,CAAC,OAAO;YAChB,OAAO,CAAC,MAAM;cACZ,IAAI,CAAC,OAAO;aACb,MAAM,CAAC,MAAM;wJAyBtB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grom.js/effect-tg",
3
3
  "type": "module",
4
- "version": "0.5.0",
4
+ "version": "0.7.0",
5
5
  "description": "Effectful library for crafting Telegram bots.",
6
6
  "author": {
7
7
  "name": "Vladislav Deryabkin",
@@ -31,19 +31,22 @@
31
31
  "node": "22.x"
32
32
  },
33
33
  "peerDependencies": {
34
- "@effect/platform": "^0.93.1",
35
- "@grom.js/tgx": "^0.5.2",
36
- "effect": "^3.19.3"
34
+ "@effect/platform": "^0.94.0",
35
+ "@grom.js/tgx": "^0.5.0",
36
+ "effect": "^3.19.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@antfu/eslint-config": "6.5.1",
40
- "@effect/language-service": "0.60.0",
39
+ "@antfu/eslint-config": "7.0.1",
40
+ "@effect/language-service": "0.65.0",
41
+ "@effect/platform": "0.94.1",
41
42
  "@grom.js/bot-api-spec": "0.4.1",
42
- "@types/node": "22.19.2",
43
- "bumpp": "10.3.2",
44
- "eslint": "9.39.1",
45
- "eslint-plugin-format": "1.1.0",
46
- "knip": "5.72.0",
43
+ "@grom.js/tgx": "0.5.2",
44
+ "@types/node": "22.19.6",
45
+ "bumpp": "10.4.0",
46
+ "effect": "3.19.14",
47
+ "eslint": "9.39.2",
48
+ "eslint-plugin-format": "1.3.1",
49
+ "knip": "5.81.0",
47
50
  "taze": "19.9.2",
48
51
  "ts-morph": "27.0.2",
49
52
  "typescript": "5.9.3"
package/src/BotApi.ts CHANGED
@@ -1,8 +1,8 @@
1
+ import type * as BotApiError from './BotApiError.ts'
1
2
  import type { MethodParams, MethodResults } from './internal/botApiMethods.gen.ts'
2
3
  import type { BotApiShape } from './internal/botApiShape.gen.ts'
3
4
  import type * as Types from './internal/botApiTypes.gen.ts'
4
5
  import * as Context from 'effect/Context'
5
- import * as Data from 'effect/Data'
6
6
  import * as Effect from 'effect/Effect'
7
7
  import * as Layer from 'effect/Layer'
8
8
  import * as BotApiTransport from './BotApiTransport.ts'
@@ -21,25 +21,12 @@ export declare namespace BotApi {
21
21
 
22
22
  export interface Method<
23
23
  M extends keyof MethodParams,
24
- E = BotApiError | BotApiTransport.BotApiTransportError,
24
+ E = BotApiError.BotApiError | BotApiTransport.BotApiTransportError,
25
25
  R = never,
26
26
  > {
27
27
  (params: MethodParams[M]): Effect.Effect<MethodResults[M], E, R>
28
28
  }
29
29
 
30
- /**
31
- * Error returned from the Bot API server in case of unsuccessful method call.
32
- */
33
- export class BotApiError extends Data.TaggedError('@grom.js/effect-tg/BotApi/BotApiError')<{
34
- code: number
35
- description: string
36
- parameters?: Types.ResponseParameters
37
- }> {
38
- override get message() {
39
- return `(${this.code}) ${this.description}`
40
- }
41
- }
42
-
43
30
  export const make: (
44
31
  transport: BotApiTransport.BotApiTransport.Service,
45
32
  ) => BotApiShape = internal.make
@@ -58,7 +45,7 @@ export const callMethod: <M extends keyof MethodParams>(
58
45
  params: MethodParams[M],
59
46
  ) => Effect.Effect<
60
47
  MethodResults[M],
61
- BotApiError | BotApiTransport.BotApiTransportError,
48
+ BotApiError.BotApiError | BotApiTransport.BotApiTransportError,
62
49
  BotApi
63
50
  > = (
64
51
  method: string,
@@ -0,0 +1,81 @@
1
+ import type * as Duration from 'effect/Duration'
2
+ import type * as BotApi from './BotApi.ts'
3
+ import * as Data from 'effect/Data'
4
+ import * as internal from './internal/botApiError.ts'
5
+
6
+ /**
7
+ * Error returned from the Bot API server in case of unsuccessful method call.
8
+ */
9
+ export class BotApiError extends Data.TaggedError('@grom.js/effect-tg/BotApiError')<{
10
+ code: number
11
+ description: string
12
+ parameters?: BotApi.Types.ResponseParameters
13
+ }> {
14
+ override get message() {
15
+ return `(${this.code}) ${this.description}`
16
+ }
17
+ }
18
+
19
+ /**
20
+ * Attempts to narrow a {@link BotApiError} to a more specific {@link KnownError}.
21
+ *
22
+ * **Warning!** Error types are detected based on the error code and message
23
+ * returned from the Bot API, which are not guaranteed to be the same in
24
+ * the future. If they change, this function may not determine error type
25
+ * correctly.
26
+ *
27
+ * @see {@link https://github.com/tdlib/telegram-bot-api telegram-bot-api source code}
28
+ */
29
+ export const narrow: (error: BotApiError) => KnownError | BotApiError = internal.narrow
30
+
31
+ export type KnownError
32
+ = | TooManyRequests
33
+ | BotBlockedByUser
34
+ | MessageNotModified
35
+ | ReplyMarkupTooLong
36
+ | QueryIdInvalid
37
+ | MediaGroupedInvalid
38
+
39
+ /**
40
+ * Flood limit exceeded. Need to wait `retryAfter` before retrying.
41
+ */
42
+ export class TooManyRequests extends Data.TaggedError('@grom.js/effect-tg/BotApiError/TooManyRequests')<{
43
+ cause: BotApiError
44
+ retryAfter: Duration.Duration
45
+ }> {}
46
+
47
+ /**
48
+ * Bot was blocked by the user.
49
+ */
50
+ export class BotBlockedByUser extends Data.TaggedError('@grom.js/effect-tg/BotApiError/BotBlockedByUser')<{
51
+ cause: BotApiError
52
+ }> {}
53
+
54
+ /**
55
+ * Message was not modified as its content and reply markup
56
+ * are exactly the same as the current one.
57
+ */
58
+ export class MessageNotModified extends Data.TaggedError('@grom.js/effect-tg/BotApiError/MessageNotModified')<{
59
+ cause: BotApiError
60
+ }> {}
61
+
62
+ /**
63
+ * Message reply markup is too long.
64
+ */
65
+ export class ReplyMarkupTooLong extends Data.TaggedError('@grom.js/effect-tg/BotApiError/ReplyMarkupTooLong')<{
66
+ cause: BotApiError
67
+ }> {}
68
+
69
+ /**
70
+ * Query has expired, or ID is invalid.
71
+ */
72
+ export class QueryIdInvalid extends Data.TaggedError('@grom.js/effect-tg/BotApiError/QueryIdInvalid')<{
73
+ cause: BotApiError
74
+ }> {}
75
+
76
+ /**
77
+ * Invalid combination of media types in the media group.
78
+ */
79
+ export class MediaGroupedInvalid extends Data.TaggedError('@grom.js/effect-tg/BotApiError/MediaGroupedInvalid')<{
80
+ cause: BotApiError
81
+ }> {}
package/src/File.ts CHANGED
@@ -1,10 +1,15 @@
1
+ import type * as HttpClient from '@effect/platform/HttpClient'
2
+ import type * as HttpClientError from '@effect/platform/HttpClientError'
3
+ import type * as HttpClientResponse from '@effect/platform/HttpClientResponse'
4
+ import type * as Effect from 'effect/Effect'
1
5
  import type * as Stream from 'effect/Stream'
2
- import * as HttpClient from '@effect/platform/HttpClient'
6
+ import type * as BotApi from './BotApi.ts'
7
+ import type * as BotApiError from './BotApiError.ts'
8
+ import type * as BotApiTransport from './BotApiTransport.ts'
9
+ import type * as BotApiUrl from './BotApiUrl.ts'
3
10
  import * as Brand from 'effect/Brand'
4
11
  import * as Data from 'effect/Data'
5
- import * as Effect from 'effect/Effect'
6
- import * as BotApi from './BotApi.ts'
7
- import * as BotApiUrl from './BotApiUrl.ts'
12
+ import * as internal from './internal/file.ts'
8
13
 
9
14
  export type FileId = string & Brand.Brand<'FileId'>
10
15
  export const FileId = Brand.nominal<FileId>()
@@ -19,27 +24,12 @@ export class InputFile extends Data.TaggedClass('InputFile')<{
19
24
  }> {}
20
25
 
21
26
  /**
22
- * @internal
27
+ * Downloads a file from the Bot API server.
28
+ *
29
+ * @see {@link https://core.telegram.org/bots/api#getfile Bot API • getFile}
23
30
  */
24
- const downloadRequest = Effect.fnUntraced(
25
- function* (fileId: FileId) {
26
- const file = yield* BotApi.callMethod('getFile', { file_id: fileId })
27
- if (file.file_path == null) {
28
- return yield* Effect.die(new Error(`Bot API returned no file path for file "${fileId}".`))
29
- }
30
- const url = yield* BotApiUrl.BotApiUrl
31
- return yield* HttpClient.get(url.toFile(file.file_path))
32
- },
33
- )
34
-
35
- export const download = (fileId: FileId) => (
36
- downloadRequest(fileId).pipe(
37
- Effect.flatMap(request => request.arrayBuffer),
38
- )
39
- )
40
-
41
- export const downloadStream = (fileId: FileId) => (
42
- downloadRequest(fileId).pipe(
43
- Effect.andThen(request => request.stream),
44
- )
45
- )
31
+ export const get: (fileId: FileId) => Effect.Effect<
32
+ HttpClientResponse.HttpClientResponse,
33
+ BotApiError.BotApiError | BotApiTransport.BotApiTransportError | HttpClientError.HttpClientError,
34
+ BotApi.BotApi | BotApiUrl.BotApiUrl | HttpClient.HttpClient
35
+ > = internal.get
package/src/Send.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import type * as BotApi from './BotApi.ts'
6
+ import type * as BotApiError from './BotApiError.ts'
6
7
  import type * as BotApiTransport from './BotApiTransport.ts'
7
8
  import type * as Content from './Content.ts'
8
9
  import type * as Dialog_ from './Dialog.ts'
@@ -73,7 +74,7 @@ export const sendMessage: (params: {
73
74
  markup?: Markup.Markup
74
75
  }) => Effect.Effect<
75
76
  BotApi.Types.Message,
76
- BotApi.BotApiError | BotApiTransport.BotApiTransportError,
77
+ BotApiError.BotApiError | BotApiTransport.BotApiTransportError,
77
78
  BotApi.BotApi
78
79
  > = internal.sendMessage
79
80
 
@@ -81,7 +82,7 @@ export const sendMessage: (params: {
81
82
 
82
83
  type MessageToSendEffect = Effect.Effect<
83
84
  BotApi.Types.Message,
84
- BotApi.BotApiError | BotApiTransport.BotApiTransportError,
85
+ BotApiError.BotApiError | BotApiTransport.BotApiTransportError,
85
86
  BotApi.BotApi | Dialog
86
87
  >
87
88
 
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * as Bot from './Bot.ts'
2
2
  export * as BotApi from './BotApi.ts'
3
+ export * as BotApiError from './BotApiError.ts'
3
4
  export * as BotApiTransport from './BotApiTransport.ts'
4
5
  export * as BotApiUrl from './BotApiUrl.ts'
5
6
  export * as Content from './Content.ts'
@@ -1,6 +1,7 @@
1
+ import type * as BotApi from '../BotApi.ts'
1
2
  import type * as BotApiTransport from '../BotApiTransport.ts'
2
3
  import * as Effect from 'effect/Effect'
3
- import * as BotApi from '../BotApi.ts'
4
+ import * as BotApiError from '../BotApiError.ts'
4
5
 
5
6
  export const make = (
6
7
  transport: BotApiTransport.BotApiTransport.Service,
@@ -18,7 +19,7 @@ export const make = (
18
19
  return response.result
19
20
  }
20
21
  return yield* Effect.fail(
21
- new BotApi.BotApiError({
22
+ new BotApiError.BotApiError({
22
23
  code: response.error_code,
23
24
  description: response.description,
24
25
  parameters: response.parameters,
@@ -0,0 +1,36 @@
1
+ import * as Duration from 'effect/Duration'
2
+ import * as BotApiError from '../BotApiError.ts'
3
+
4
+ export const narrow = (
5
+ error: BotApiError.BotApiError,
6
+ ): BotApiError.KnownError | BotApiError.BotApiError => {
7
+ const code = error.code
8
+ const msg = error.message.toLowerCase()
9
+ const params = error.parameters
10
+ if (code === 429 && params?.retry_after != null) {
11
+ return new BotApiError.TooManyRequests({
12
+ cause: error,
13
+ retryAfter: Duration.seconds(params.retry_after),
14
+ })
15
+ }
16
+ if (code === 403) {
17
+ if (msg.includes('bot was blocked by the user')) {
18
+ return new BotApiError.BotBlockedByUser({ cause: error })
19
+ }
20
+ }
21
+ if (code === 400) {
22
+ if (msg.includes('message is not modified')) {
23
+ return new BotApiError.MessageNotModified({ cause: error })
24
+ }
25
+ if (msg.includes('reply markup too long')) {
26
+ return new BotApiError.ReplyMarkupTooLong({ cause: error })
27
+ }
28
+ if (msg.includes('query is too old') && msg.includes('query id is invalid')) {
29
+ return new BotApiError.QueryIdInvalid({ cause: error })
30
+ }
31
+ if (msg.includes('can\'t use the media of the specified type in the album')) {
32
+ return new BotApiError.MediaGroupedInvalid({ cause: error })
33
+ }
34
+ }
35
+ return error
36
+ }
@@ -0,0 +1,16 @@
1
+ import type { FileId } from '../File.ts'
2
+ import * as HttpClient from '@effect/platform/HttpClient'
3
+ import * as Effect from 'effect/Effect'
4
+ import * as BotApi from '../BotApi.ts'
5
+ import * as BotApiUrl from '../BotApiUrl.ts'
6
+
7
+ export const get = Effect.fnUntraced(
8
+ function* (fileId: FileId) {
9
+ const file = yield* BotApi.callMethod('getFile', { file_id: fileId })
10
+ if (file.file_path == null) {
11
+ return yield* Effect.die(new Error(`Bot API returned no file path for file "${fileId}".`))
12
+ }
13
+ const url = yield* BotApiUrl.BotApiUrl
14
+ return yield* HttpClient.get(url.toFile(file.file_path))
15
+ },
16
+ )
@@ -1,4 +1,4 @@
1
- import type { BotApiError } from '../BotApi.ts'
1
+ import type { BotApiError } from '../BotApiError.ts'
2
2
  import type { BotApiTransportError } from '../BotApiTransport.ts'
3
3
  import type { Runner } from '../Runner.ts'
4
4
  import * as Duration from 'effect/Duration'
@@ -29,7 +29,7 @@ export const makeSimple = (options?: {
29
29
  schedule: Schedule.spaced(Duration.seconds(3)),
30
30
  while: error => Match.value(error).pipe(
31
31
  Match.tagsExhaustive({
32
- '@grom.js/effect-tg/BotApi/BotApiError': error => Effect.succeed(
32
+ '@grom.js/effect-tg/BotApiError': error => Effect.succeed(
33
33
  error.code >= 500 || (
34
34
  error.code !== 401
35
35
  && error.code !== 403