@grom.js/effect-tg 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Bot.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type * as Effect from 'effect/Effect';
2
+ import type { BotApi } from './index.ts';
3
+ import * as Context from 'effect/Context';
4
+ export type Bot<E = never, R = never> = Effect.Effect<void, E, R | Update>;
5
+ declare const Update_base: Context.TagClass<Update, "@grom.js/effect-tg/Bot/Update", BotApi.Types.Update>;
6
+ export declare class Update extends Update_base {
7
+ }
8
+ export {};
9
+ //# sourceMappingURL=Bot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bot.d.ts","sourceRoot":"","sources":["../src/Bot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAA;;AAE1E,qBAAa,MAAO,SAAQ,WAGzB;CAAG"}
package/dist/Bot.js ADDED
@@ -0,0 +1,3 @@
1
+ import * as Context from 'effect/Context';
2
+ export class Update extends Context.Tag('@grom.js/effect-tg/Bot/Update')() {
3
+ }
package/dist/BotApi.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import type * as Layer from 'effect/Layer';
2
1
  import type { BotApiTransport } from './BotApiTransport.ts';
3
2
  import type { MethodParams, MethodResults } from './internal/botApiMethods.gen.ts';
4
3
  import type { BotApiShape } from './internal/botApiShape.gen.ts';
5
4
  import type * as Types from './internal/botApiTypes.gen.ts';
6
5
  import * as Context from 'effect/Context';
6
+ import * as Layer from 'effect/Layer';
7
7
  export type { MethodParams, MethodResults, Types };
8
8
  declare const BotApi_base: Context.TagClass<BotApi, "@grom.js/effect-tg/BotApi", BotApiShape>;
9
9
  export declare class BotApi extends BotApi_base {
@@ -1 +1 @@
1
- {"version":3,"file":"BotApi.d.ts","sourceRoot":"","sources":["../src/BotApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,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;AAIzC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;;AAElD,qBAAa,MAAO,SAAQ,WAGzB;CAAG;;;;AAEN;;GAEG;AACH,qBAAa,WAAY,SAAQ,iBAAmD;IAClF,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,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,CAAkB,CAAA"}
1
+ {"version":3,"file":"BotApi.d.ts","sourceRoot":"","sources":["../src/BotApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,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,KAAK,MAAM,cAAc,CAAA;AAGrC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;;AAElD,qBAAa,MAAO,SAAQ,WAGzB;CAAG;;;;AAEN;;GAEG;AACH,qBAAa,WAAY,SAAQ,iBAAmD;IAClF,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,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,MAAM,EACN,KAAK,EACL,eAAe,CACsB,CAAA"}
package/dist/BotApi.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as Context from 'effect/Context';
2
2
  import * as Data from 'effect/Data';
3
+ import * as Layer from 'effect/Layer';
3
4
  import * as internal from "./internal/botApi.js";
4
5
  export class BotApi extends Context.Tag('@grom.js/effect-tg/BotApi')() {
5
6
  }
@@ -11,4 +12,4 @@ export class BotApiError extends Data.TaggedError('@grom.js/effect-tg/BotApiErro
11
12
  return `(${this.code}) ${this.description}`;
12
13
  }
13
14
  }
14
- export const layer = internal.layer;
15
+ export const layer = Layer.effect(BotApi, internal.make);
@@ -1,6 +1,7 @@
1
1
  import type * as Effect from 'effect/Effect';
2
2
  import type * as Types from './internal/botApiTypes.gen.ts';
3
3
  import * as Context from 'effect/Context';
4
+ import * as Layer from 'effect/Layer';
4
5
  declare const BotApiTransport_base: Context.TagClass<BotApiTransport, "@grom.js/effect-tg/BotApiTransport", {
5
6
  sendRequest: (method: string, params: unknown) => Effect.Effect<BotApiResponse, BotApiTransportError>;
6
7
  }>;
@@ -31,8 +32,8 @@ export declare class BotApiTransportError extends BotApiTransportError_base<{
31
32
  }
32
33
  export declare const layerWith: (options: {
33
34
  makeUrl: (method: string) => URL;
34
- }) => import("effect/Layer").Layer<BotApiTransport, never, import("@effect/platform/HttpClient").HttpClient>;
35
- export declare const layerProd: (token: string) => import("effect/Layer").Layer<BotApiTransport, never, import("@effect/platform/HttpClient").HttpClient>;
36
- export declare const layerTest: (token: string) => import("effect/Layer").Layer<BotApiTransport, never, import("@effect/platform/HttpClient").HttpClient>;
35
+ }) => Layer.Layer<BotApiTransport, never, import("@effect/platform/HttpClient").HttpClient>;
36
+ export declare const layerProd: (token: string) => Layer.Layer<BotApiTransport, never, import("@effect/platform/HttpClient").HttpClient>;
37
+ export declare const layerTest: (token: string) => Layer.Layer<BotApiTransport, never, import("@effect/platform/HttpClient").HttpClient>;
37
38
  export {};
38
39
  //# sourceMappingURL=BotApiTransport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BotApiTransport.d.ts","sourceRoot":"","sources":["../src/BotApiTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;;iBAOxB,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,KACZ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC;;AAN5D,qBAAa,eAAgB,SAAQ,oBAQlC;CACF;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB;IACA,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG;IACF,EAAE,EAAE,KAAK,CAAA;IACT,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAA;CACtC,CAAA;;;;AAEH;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,0BAA4D;IACpG,KAAK,EAAE,OAAO,CAAA;CACf,CAAC;CAAG;AAEL,eAAO,MAAM,SAAS;;4GAAqB,CAAA;AAE3C,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,2GAItC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,2GAItC,CAAA"}
1
+ {"version":3,"file":"BotApiTransport.d.ts","sourceRoot":"","sources":["../src/BotApiTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;;iBAMpB,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,KACZ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC;;AAN5D,qBAAa,eAAgB,SAAQ,oBAQlC;CACF;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB;IACA,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG;IACF,EAAE,EAAE,KAAK,CAAA;IACT,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAA;CACtC,CAAA;;;;AAEH;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,0BAA4D;IACpG,KAAK,EAAE,OAAO,CAAA;CACf,CAAC;CAAG;AAEL,eAAO,MAAM,SAAS,GAAI,SAAS;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAA;CACjC,0FAA8D,CAAA;AAE/D,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,0FAItC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,0FAItC,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import * as Context from 'effect/Context';
2
2
  import * as Data from 'effect/Data';
3
+ import * as Layer from 'effect/Layer';
3
4
  import * as internal from "./internal/botApiTransport.js";
4
5
  export class BotApiTransport extends Context.Tag('@grom.js/effect-tg/BotApiTransport')() {
5
6
  }
@@ -8,7 +9,7 @@ export class BotApiTransport extends Context.Tag('@grom.js/effect-tg/BotApiTrans
8
9
  */
9
10
  export class BotApiTransportError extends Data.TaggedError('@grom.js/effect-tg/BotApiTransportError') {
10
11
  }
11
- export const layerWith = internal.layerWith;
12
+ export const layerWith = (options) => Layer.effect(BotApiTransport, internal.makeWith(options));
12
13
  export const layerProd = (token) => (layerWith({
13
14
  makeUrl: method => new URL(`https://api.telegram.org/bot${token}/${method}`),
14
15
  }));
@@ -0,0 +1,6 @@
1
+ import type { Bot } from './Bot.ts';
2
+ export interface Middleware {
3
+ <E, R>(self: Bot<E, R>): Bot<any, any>;
4
+ }
5
+ export declare const make: <M extends Middleware>(middleware: M) => M;
6
+ //# sourceMappingURL=Middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../src/Middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAEnC,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CACvC;AAED,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,KAAK,CAAU,CAAA"}
@@ -0,0 +1 @@
1
+ export const make = m => m;
@@ -0,0 +1,18 @@
1
+ import type * as Effect from 'effect/Effect';
2
+ import type { Bot, Update } from './Bot.ts';
3
+ /**
4
+ * Runner runs a bot using long polling.
5
+ */
6
+ export interface Runner<E = never, R = never> {
7
+ readonly run: {
8
+ <E1, R1>(bot: Bot<E1, R1>): Effect.Effect<never, E | E1, R | Exclude<R1, Update>>;
9
+ };
10
+ }
11
+ /**
12
+ * Creates a simple runner that fetches updates by calling `BotApi.getUpdates`
13
+ * method and handles them one by one.
14
+ */
15
+ export declare const makeSimple: (options: void | {
16
+ allowedUpdates?: string[];
17
+ }) => Runner<import("./BotApi.ts").BotApiError | import("./BotApiTransport.ts").BotApiTransportError, import("./BotApi.ts").BotApi>;
18
+ //# sourceMappingURL=Runner.d.ts.map
@@ -0,0 +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,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAG3C;;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,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CACvC,KAAK,EACL,CAAC,GAAG,EAAE,EACN,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CACxB,CAAA;KACF,CAAA;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU;kBAFnB,CAAC;mIAEwC,CAAA"}
package/dist/Runner.js ADDED
@@ -0,0 +1,6 @@
1
+ import * as internal from "./internal/runner.js";
2
+ /**
3
+ * Creates a simple runner that fetches updates by calling `BotApi.getUpdates`
4
+ * method and handles them one by one.
5
+ */
6
+ export const makeSimple = internal.makeSimple;
package/dist/Text.d.ts CHANGED
@@ -1,9 +1,10 @@
1
+ import type { TgxElement } from '@grom.js/tgx/types';
1
2
  import type { MethodParams, Types } from './BotApi.ts';
2
3
  import * as Data from 'effect/Data';
3
4
  /**
4
5
  * Formatted text.
5
6
  */
6
- export type Text = Plain | Html | Markdown;
7
+ export type Text = Plain | Html | Markdown | Tgx;
7
8
  export declare class Plain extends Data.Class<{
8
9
  text: string;
9
10
  entities?: Array<Types.MessageEntity>;
@@ -20,6 +21,11 @@ export declare class Markdown extends Data.Class<{
20
21
  }> {
21
22
  sendParams(): SendParams;
22
23
  }
24
+ export declare class Tgx extends Data.Class<{
25
+ tgx: TgxElement;
26
+ }> {
27
+ sendParams(): SendParams;
28
+ }
23
29
  type SendParams = Pick<MethodParams['sendMessage'], 'text' | 'entities' | 'parse_mode'>;
24
30
  export {};
25
31
  //# sourceMappingURL=Text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../src/Text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC;;GAEG;AACH,MAAM,MAAM,IAAI,GACV,KAAK,GACL,IAAI,GACJ,QAAQ,CAAA;AAEd,qBAAa,KAAM,SAAQ,IAAI,CAAC,KAAK,CAAC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;CACtC,CAAC;IACA,UAAU,IAAI,UAAU;CAGzB;AAED,qBAAa,IAAK,SAAQ,IAAI,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;IACpD,UAAU,IAAI,UAAU;CAGzB;AAED,qBAAa,QAAS,SAAQ,IAAI,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;IAC5D,UAAU,IAAI,UAAU;CAGzB;AAED,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC,CAAA"}
1
+ {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../src/Text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEtD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC;;GAEG;AACH,MAAM,MAAM,IAAI,GACV,KAAK,GACL,IAAI,GACJ,QAAQ,GACR,GAAG,CAAA;AAET,qBAAa,KAAM,SAAQ,IAAI,CAAC,KAAK,CAAC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;CACtC,CAAC;IACA,UAAU,IAAI,UAAU;CAGzB;AAED,qBAAa,IAAK,SAAQ,IAAI,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;IACpD,UAAU,IAAI,UAAU;CAGzB;AAED,qBAAa,QAAS,SAAQ,IAAI,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;IAC5D,UAAU,IAAI,UAAU;CAGzB;AAED,qBAAa,GAAI,SAAQ,IAAI,CAAC,KAAK,CAAC;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC;IACtD,UAAU,IAAI,UAAU;CAGzB;AAED,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC,CAAA"}
package/dist/Text.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { html as tgxToHtml } from '@grom.js/tgx';
1
2
  import * as Data from 'effect/Data';
2
3
  export class Plain extends Data.Class {
3
4
  sendParams() {
@@ -14,3 +15,8 @@ export class Markdown extends Data.Class {
14
15
  return { text: this.markdown, parse_mode: 'MarkdownV2' };
15
16
  }
16
17
  }
18
+ export class Tgx extends Data.Class {
19
+ sendParams() {
20
+ return { text: tgxToHtml(this.tgx), parse_mode: 'HTML' };
21
+ }
22
+ }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * as Bot from './Bot.ts';
1
2
  export * as BotApi from './BotApi.ts';
2
3
  export * as BotApiTransport from './BotApiTransport.ts';
3
4
  export * as BotApiWebhook from './BotApiWebhook.ts';
@@ -5,6 +6,8 @@ export * as Chat from './Chat.ts';
5
6
  export * as Content from './Content.ts';
6
7
  export * as InputFile from './InputFile.ts';
7
8
  export * as LinkPreview from './LinkPreview.ts';
9
+ export * as Middleware from './Middleware.ts';
10
+ export * as Runner from './Runner.ts';
8
11
  export * as Send from './Send.ts';
9
12
  export * as Text from './Text.ts';
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,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,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,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,3 +1,4 @@
1
+ export * as Bot from "./Bot.js";
1
2
  export * as BotApi from "./BotApi.js";
2
3
  export * as BotApiTransport from "./BotApiTransport.js";
3
4
  export * as BotApiWebhook from "./BotApiWebhook.js";
@@ -5,5 +6,7 @@ export * as Chat from "./Chat.js";
5
6
  export * as Content from "./Content.js";
6
7
  export * as InputFile from "./InputFile.js";
7
8
  export * as LinkPreview from "./LinkPreview.js";
9
+ export * as Middleware from "./Middleware.js";
10
+ export * as Runner from "./Runner.js";
8
11
  export * as Send from "./Send.js";
9
12
  export * as Text from "./Text.js";
@@ -1,5 +1,5 @@
1
- import * as Layer from 'effect/Layer';
2
- import { BotApi } from '../BotApi.ts';
1
+ import type { BotApiShape } from './botApiShape.gen.ts';
2
+ import * as Effect from 'effect/Effect';
3
3
  import { BotApiTransport } from '../BotApiTransport.ts';
4
- export declare const layer: Layer.Layer<BotApi, never, BotApiTransport>;
4
+ export declare const make: Effect.Effect<BotApiShape, never, BotApiTransport>;
5
5
  //# sourceMappingURL=botApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"botApi.d.ts","sourceRoot":"","sources":["../../src/internal/botApi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,eAAO,MAAM,KAAK,6CA6BjB,CAAA"}
1
+ {"version":3,"file":"botApi.d.ts","sourceRoot":"","sources":["../../src/internal/botApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,eAAO,MAAM,IAAI,oDA0Bf,CAAA"}
@@ -1,8 +1,7 @@
1
1
  import * as Effect from 'effect/Effect';
2
- import * as Layer from 'effect/Layer';
3
- import { BotApi, BotApiError } from "../BotApi.js";
2
+ import { BotApiError } from "../BotApi.js";
4
3
  import { BotApiTransport } from "../BotApiTransport.js";
5
- export const layer = Layer.effect(BotApi, Effect.gen(function* () {
4
+ export const make = Effect.gen(function* () {
6
5
  const transport = yield* BotApiTransport;
7
6
  const botApi = new Proxy({}, {
8
7
  get: (_target, prop) => {
@@ -24,4 +23,4 @@ export const layer = Layer.effect(BotApi, Effect.gen(function* () {
24
23
  },
25
24
  });
26
25
  return botApi;
27
- }));
26
+ });
@@ -1,7 +1,7 @@
1
+ import type { BotApiTransport } from '../BotApiTransport.ts';
1
2
  import * as HttpClient from '@effect/platform/HttpClient';
2
- import * as Layer from 'effect/Layer';
3
- import { BotApiTransport } from '../BotApiTransport.ts';
4
- export declare const layerWith: (options: {
3
+ import * as Effect from 'effect/Effect';
4
+ export declare const makeWith: (options: {
5
5
  makeUrl: (method: string) => URL;
6
- }) => Layer.Layer<BotApiTransport, never, HttpClient.HttpClient>;
6
+ }) => Effect.Effect<typeof BotApiTransport.Service, never, HttpClient.HttpClient>;
7
7
  //# sourceMappingURL=botApiTransport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"botApiTransport.d.ts","sourceRoot":"","sources":["../../src/internal/botApiTransport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AAEzD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,eAAe,EAAwB,MAAM,uBAAuB,CAAA;AAE7E,eAAO,MAAM,SAAS,GAAI,SAAS;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAA;CACjC,+DAyBA,CAAA"}
1
+ {"version":3,"file":"botApiTransport.d.ts","sourceRoot":"","sources":["../../src/internal/botApiTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5E,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,eAAO,MAAM,QAAQ,GAAI,SAAS;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAA;CACjC,KAAG,MAAM,CAAC,MAAM,CACf,OAAO,eAAe,CAAC,OAAO,EAC9B,KAAK,EACL,UAAU,CAAC,UAAU,CAsBrB,CAAA"}
@@ -1,12 +1,11 @@
1
1
  import * as HttpBody from '@effect/platform/HttpBody';
2
2
  import * as HttpClient from '@effect/platform/HttpClient';
3
3
  import * as Effect from 'effect/Effect';
4
- import * as Layer from 'effect/Layer';
5
- import { BotApiTransport, BotApiTransportError } from "../BotApiTransport.js";
6
- export const layerWith = (options) => Layer.effect(BotApiTransport, Effect.gen(function* () {
4
+ import { BotApiTransportError } from "../BotApiTransport.js";
5
+ export const makeWith = (options) => Effect.gen(function* () {
7
6
  const { makeUrl } = options;
8
7
  const client = yield* HttpClient.HttpClient;
9
- const transport = {
8
+ return {
10
9
  sendRequest: (method, params) => (Effect
11
10
  .gen(function* () {
12
11
  const url = makeUrl(method);
@@ -18,5 +17,4 @@ export const layerWith = (options) => Layer.effect(BotApiTransport, Effect.gen(f
18
17
  })
19
18
  .pipe(Effect.catchAll(error => (Effect.fail(new BotApiTransportError({ cause: error })))))),
20
19
  };
21
- return transport;
22
- }));
20
+ });
@@ -0,0 +1,8 @@
1
+ import type { BotApiError } from '../BotApi.ts';
2
+ import type { BotApiTransportError } from '../BotApiTransport.ts';
3
+ import type { Runner } from '../Runner.ts';
4
+ import { BotApi } from '../BotApi.ts';
5
+ export declare const makeSimple: (options: void | {
6
+ allowedUpdates?: string[];
7
+ }) => Runner<BotApiError | BotApiTransportError, BotApi>;
8
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +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,SAAS,IAAI,GAAG;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,KAAG,MAAM,CAAC,WAAW,GAAG,oBAAoB,EAAE,MAAM,CA+CnD,CAAA"}
@@ -0,0 +1,34 @@
1
+ import * as Duration from 'effect/Duration';
2
+ import * as Effect from 'effect/Effect';
3
+ import * as Match from 'effect/Match';
4
+ import * as Schedule from 'effect/Schedule';
5
+ import { Update } from "../Bot.js";
6
+ import { BotApi } from "../BotApi.js";
7
+ export const makeSimple = (options) => ({
8
+ run: bot => Effect.gen(function* () {
9
+ const { allowedUpdates } = options ?? {};
10
+ const api = yield* BotApi;
11
+ let lastUpdateId;
12
+ while (true) {
13
+ const [update] = yield* api
14
+ .getUpdates({
15
+ offset: lastUpdateId == null ? undefined : lastUpdateId + 1,
16
+ allowed_updates: allowedUpdates,
17
+ timeout: 30,
18
+ limit: 1,
19
+ })
20
+ .pipe(Effect.retry({
21
+ schedule: Schedule.spaced(Duration.seconds(3)),
22
+ while: error => Match.value(error).pipe(Match.tag('@grom.js/effect-tg/BotApiError', error => Effect.succeed(error.code >= 500 || (error.code !== 401
23
+ && error.code !== 403
24
+ && error.code !== 404))), Match.tag('@grom.js/effect-tg/BotApiTransportError', () => Effect.succeed(true)), Match.exhaustive),
25
+ }));
26
+ if (update) {
27
+ yield* Effect
28
+ .provideService(bot, Update, update)
29
+ .pipe(Effect.catchAll(error => (Effect.logError('Error in bot:', error))));
30
+ lastUpdateId = update.update_id;
31
+ }
32
+ }
33
+ }),
34
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grom.js/effect-tg",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "description": "Effectful library for crafting Telegram bots.",
6
6
  "author": {
7
7
  "name": "Vladislav Deryabkin",
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@effect/platform": "^0.93.1",
34
+ "@grom.js/tgx": "^0.5.2",
34
35
  "effect": "^3.19.3"
35
36
  },
36
37
  "devDependencies": {