@grom.js/effect-tg 0.2.5 → 0.3.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.
package/dist/BotApi.d.ts CHANGED
@@ -1,7 +1,9 @@
1
+ import type { BotApiTransport } from './BotApiTransport.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';
6
+ import * as Layer from 'effect/Layer';
5
7
  export type { MethodParams, MethodResults, Types };
6
8
  declare const BotApi_base: Context.TagClass<BotApi, "@grom.js/effect-tg/BotApi", BotApiShape>;
7
9
  export declare class BotApi extends BotApi_base {
@@ -19,9 +21,5 @@ export declare class BotApiError extends BotApiError_base<{
19
21
  }> {
20
22
  get message(): string;
21
23
  }
22
- export declare const make: (options: {
23
- transport: {
24
- sendRequest: (method: string, params: unknown) => import("effect/Effect").Effect<import("./BotApiTransport.ts").BotApiResponse, import("./BotApiTransport.ts").BotApiTransportError>;
25
- };
26
- }) => import("effect/Effect").Effect<BotApiShape, never, never>;
24
+ export declare const layer: Layer.Layer<BotApi, never, BotApiTransport>;
27
25
  //# 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;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,IAAI;;;;+DAAgB,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 make = internal.make;
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
  }>;
@@ -29,16 +30,10 @@ export declare class BotApiTransportError extends BotApiTransportError_base<{
29
30
  cause: unknown;
30
31
  }> {
31
32
  }
32
- export declare const makeWith: (options: {
33
+ export declare const layerWith: (options: {
33
34
  makeUrl: (method: string) => URL;
34
- }) => Effect.Effect<{
35
- sendRequest: (method: string, params: unknown) => Effect.Effect<BotApiResponse, BotApiTransportError>;
36
- }, never, import("@effect/platform/HttpClient").HttpClient>;
37
- export declare const makeProd: (token: string) => Effect.Effect<{
38
- sendRequest: (method: string, params: unknown) => Effect.Effect<BotApiResponse, BotApiTransportError>;
39
- }, never, import("@effect/platform/HttpClient").HttpClient>;
40
- export declare const makeTest: (token: string) => Effect.Effect<{
41
- sendRequest: (method: string, params: unknown) => Effect.Effect<BotApiResponse, BotApiTransportError>;
42
- }, 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>;
43
38
  export {};
44
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,QAAQ;;;iBA9BJ,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,KACZ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC;2DA2BnB,CAAA;AAEzC,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM;iBAhCrB,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,KACZ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC;2DAiC3D,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM;iBAtCrB,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,KACZ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC;2DAuC3D,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,10 +9,10 @@ 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 makeWith = internal.makeWith;
12
- export const makeProd = (token) => (makeWith({
12
+ export const layerWith = (options) => Layer.effect(BotApiTransport, internal.makeWith(options));
13
+ export const layerProd = (token) => (layerWith({
13
14
  makeUrl: method => new URL(`https://api.telegram.org/bot${token}/${method}`),
14
15
  }));
15
- export const makeTest = (token) => (makeWith({
16
+ export const layerTest = (token) => (layerWith({
16
17
  makeUrl: method => new URL(`https://api.telegram.org/bot${token}/test/${method}`),
17
18
  }));
@@ -3,30 +3,34 @@
3
3
  *
4
4
  * @see https://core.telegram.org/bots/api#setwebhook
5
5
  */
6
+ import type * as HttpServerError from '@effect/platform/HttpServerError';
6
7
  import type * as BotApi from './BotApi.ts';
7
8
  import * as HttpApiMiddleware from '@effect/platform/HttpApiMiddleware';
8
- import * as Context from 'effect/Context';
9
+ import * as $Context from 'effect/Context';
10
+ import * as Effect from 'effect/Effect';
9
11
  import * as Layer from 'effect/Layer';
10
12
  import * as Redacted from 'effect/Redacted';
11
13
  import * as Schema from 'effect/Schema';
12
14
  export declare const SECRET_HEADER = "x-telegram-bot-api-secret-token";
13
15
  declare const VerificationFailedError_base: Schema.TaggedErrorClass<VerificationFailedError, "@grom.js/effect-tg/BotApiWebhook/VerificationFailedError", {
14
16
  readonly _tag: Schema.tag<"@grom.js/effect-tg/BotApiWebhook/VerificationFailedError">;
15
- } & {
16
- reason: Schema.Literal<["MISSING_HEADER", "INVALID_SECRET", "INVALID_REQUEST", "BROKEN_TRANSPORT"]>;
17
17
  }>;
18
18
  export declare class VerificationFailedError extends VerificationFailedError_base {
19
19
  }
20
- declare const Update_base: Context.TagClass<Update, "@grom.js/effect-tg/BotApiWebhook/Update", BotApi.Types.Update>;
21
- export declare class Update extends Update_base {
20
+ declare const Context_base: $Context.TagClass<Context, "@grom.js/effect-tg/BotApiWebhook/Context", {
21
+ update: Effect.Effect<BotApi.Types.Update, HttpServerError.RequestError>;
22
+ }>;
23
+ export declare class Context extends Context_base {
22
24
  }
23
25
  declare const VerifyMiddleware_base: HttpApiMiddleware.TagClass.Base<VerifyMiddleware, "@grom.js/effect-tg/BotApiWebhook/VerifyMiddleware", {
24
26
  readonly optional: false;
25
27
  readonly failure: typeof VerificationFailedError;
26
- readonly provides: typeof Update;
27
- }, HttpApiMiddleware.HttpApiMiddleware<BotApi.Types.Update, VerificationFailedError>>;
28
+ readonly provides: typeof Context;
29
+ }, HttpApiMiddleware.HttpApiMiddleware<{
30
+ update: Effect.Effect<BotApi.Types.Update, HttpServerError.RequestError>;
31
+ }, VerificationFailedError>>;
28
32
  export declare class VerifyMiddleware extends VerifyMiddleware_base {
29
- static live(options: {
33
+ static layer(options: {
30
34
  /**
31
35
  * Telegram webhook secret token.
32
36
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BotApiWebhook.d.ts","sourceRoot":"","sources":["../src/BotApiWebhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,iBAAiB,MAAM,oCAAoC,CAAA;AAGvE,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,aAAa,oCAAoC,CAAA;;;;;;AAG9D,qBAAa,uBAAwB,SAAQ,4BAc5C;CAAG;;AAEJ,qBAAa,MAAO,SAAQ,WAGzB;CAAG;;;;;;AAEN,qBAAa,gBAAiB,SAAQ,qBAOrC;WACe,IAAI,CAAC,OAAO,EAAE;QAC1B;;WAEG;QACH,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;KAClC;CA+BF"}
1
+ {"version":3,"file":"BotApiWebhook.d.ts","sourceRoot":"","sources":["../src/BotApiWebhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,eAAe,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,iBAAiB,MAAM,oCAAoC,CAAA;AAGvE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,aAAa,oCAAoC,CAAA;;;;AAG9D,qBAAa,uBAAwB,SAAQ,4BAO5C;CAAG;;YAIQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,YAAY,CAAC;;AAF5E,qBAAa,OAAQ,SAAQ,YAG1B;CAAG;;;;;;YADM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,YAAY,CAAC;;AAG5E,qBAAa,gBAAiB,SAAQ,qBAOrC;WACe,KAAK,CAAC,OAAO,EAAE;QAC3B;;WAEG;QACH,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;KAClC;CAkBF"}
@@ -3,48 +3,41 @@
3
3
  *
4
4
  * @see https://core.telegram.org/bots/api#setwebhook
5
5
  */
6
- import { Buffer } from 'node:buffer';
7
- import * as crypto from 'node:crypto';
8
6
  import * as HttpApiMiddleware from '@effect/platform/HttpApiMiddleware';
9
7
  import * as HttpApiSchema from '@effect/platform/HttpApiSchema';
10
8
  import * as HttpServerRequest from '@effect/platform/HttpServerRequest';
11
- import * as Context from 'effect/Context';
9
+ import * as $Context from 'effect/Context';
12
10
  import * as Effect from 'effect/Effect';
13
11
  import * as Layer from 'effect/Layer';
14
- import * as Match from 'effect/Match';
15
12
  import * as Redacted from 'effect/Redacted';
16
13
  import * as Schema from 'effect/Schema';
17
14
  export const SECRET_HEADER = 'x-telegram-bot-api-secret-token';
18
15
  // eslint-disable-next-line unicorn/throw-new-error
19
- export class VerificationFailedError extends Schema.TaggedError()('@grom.js/effect-tg/BotApiWebhook/VerificationFailedError', Schema.Struct({
20
- reason: Schema.Literal('MISSING_HEADER', 'INVALID_SECRET', 'INVALID_REQUEST', 'BROKEN_TRANSPORT'),
21
- }), HttpApiSchema.annotations({
16
+ export class VerificationFailedError extends Schema.TaggedError()('@grom.js/effect-tg/BotApiWebhook/VerificationFailedError', {}, HttpApiSchema.annotations({
22
17
  status: 401,
23
- description: 'Webhook verification failed.',
18
+ description: 'Missing or invalid webhook secret.',
24
19
  })) {
25
20
  }
26
- export class Update extends Context.Tag('@grom.js/effect-tg/BotApiWebhook/Update')() {
21
+ export class Context extends $Context.Tag('@grom.js/effect-tg/BotApiWebhook/Context')() {
27
22
  }
28
23
  export class VerifyMiddleware extends HttpApiMiddleware.Tag()('@grom.js/effect-tg/BotApiWebhook/VerifyMiddleware', {
29
24
  optional: false,
30
25
  failure: VerificationFailedError,
31
- provides: Update,
26
+ provides: Context,
32
27
  }) {
33
- static live(options) {
28
+ static layer(options) {
34
29
  return Layer.succeed(VerifyMiddleware, Effect.gen(function* () {
35
- const req = yield* HttpServerRequest.HttpServerRequest;
36
- const actual = req.headers[SECRET_HEADER];
30
+ const request = yield* HttpServerRequest.HttpServerRequest;
31
+ const actual = request.headers[SECRET_HEADER];
37
32
  if (actual == null) {
38
- return yield* new VerificationFailedError({ reason: 'MISSING_HEADER' });
33
+ return yield* new VerificationFailedError();
39
34
  }
40
- const equal = crypto.timingSafeEqual(Buffer.from(Redacted.value(options.secret)), Buffer.from(actual));
41
- if (!equal) {
42
- return yield* new VerificationFailedError({ reason: 'INVALID_SECRET' });
35
+ if (actual !== Redacted.value(options.secret)) {
36
+ return yield* new VerificationFailedError();
43
37
  }
44
- const update = yield* req.json.pipe(Effect.catchTag('RequestError', error => (new VerificationFailedError({
45
- reason: Match.value(error.reason).pipe(Match.when('Decode', () => 'INVALID_REQUEST'), Match.when('Transport', () => 'BROKEN_TRANSPORT'), Match.exhaustive),
46
- }))));
47
- return update;
38
+ return {
39
+ update: Effect.map(request.json, update => update),
40
+ };
48
41
  }));
49
42
  }
50
43
  }
@@ -1,7 +1,5 @@
1
- import type { BotApiTransport } from '../BotApiTransport.ts';
2
1
  import type { BotApiShape } from './botApiShape.gen.ts';
3
2
  import * as Effect from 'effect/Effect';
4
- export declare const make: (options: {
5
- transport: typeof BotApiTransport.Service;
6
- }) => Effect.Effect<BotApiShape, never, never>;
3
+ import { BotApiTransport } from '../BotApiTransport.ts';
4
+ export declare const make: Effect.Effect<BotApiShape, never, BotApiTransport>;
7
5
  //# 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,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,eAAO,MAAM,IAAI,GAAI,SAAS;IAC5B,SAAS,EAAE,OAAO,eAAe,CAAC,OAAO,CAAA;CAC1C,6CA2BA,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,6 +1,8 @@
1
1
  import * as Effect from 'effect/Effect';
2
2
  import { BotApiError } from "../BotApi.js";
3
- export const make = (options) => (Effect.gen(function* () {
3
+ import { BotApiTransport } from "../BotApiTransport.js";
4
+ export const make = Effect.gen(function* () {
5
+ const transport = yield* BotApiTransport;
4
6
  const botApi = new Proxy({}, {
5
7
  get: (_target, prop) => {
6
8
  if (typeof prop !== 'string') {
@@ -8,7 +10,7 @@ export const make = (options) => (Effect.gen(function* () {
8
10
  }
9
11
  const method = prop;
10
12
  return (params = {}) => (Effect.gen(function* () {
11
- const response = yield* options.transport.sendRequest(method, params);
13
+ const response = yield* transport.sendRequest(method, params);
12
14
  if (response.ok) {
13
15
  return response.result;
14
16
  }
@@ -21,4 +23,4 @@ export const make = (options) => (Effect.gen(function* () {
21
23
  },
22
24
  });
23
25
  return botApi;
24
- }));
26
+ });
@@ -1,10 +1,7 @@
1
- import type { BotApiResponse } from '../BotApiTransport.ts';
1
+ import type { BotApiTransport } from '../BotApiTransport.ts';
2
2
  import * as HttpClient from '@effect/platform/HttpClient';
3
3
  import * as Effect from 'effect/Effect';
4
- import { BotApiTransportError } from '../BotApiTransport.ts';
5
4
  export declare const makeWith: (options: {
6
5
  makeUrl: (method: string) => URL;
7
- }) => Effect.Effect<{
8
- sendRequest: (method: string, params: unknown) => Effect.Effect<BotApiResponse, BotApiTransportError>;
9
- }, never, HttpClient.HttpClient>;
6
+ }) => Effect.Effect<typeof BotApiTransport.Service, never, HttpClient.HttpClient>;
10
7
  //# sourceMappingURL=botApiTransport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"botApiTransport.d.ts","sourceRoot":"","sources":["../../src/internal/botApiTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAA;AAE5E,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5D,eAAO,MAAM,QAAQ,GAAI,SAAS;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAA;CACjC;;gCAwBA,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"}
@@ -2,10 +2,10 @@ 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
4
  import { BotApiTransportError } from "../BotApiTransport.js";
5
- export const makeWith = (options) => (Effect.gen(function* () {
5
+ export const makeWith = (options) => Effect.gen(function* () {
6
6
  const { makeUrl } = options;
7
7
  const client = yield* HttpClient.HttpClient;
8
- const transport = {
8
+ return {
9
9
  sendRequest: (method, params) => (Effect
10
10
  .gen(function* () {
11
11
  const url = makeUrl(method);
@@ -17,5 +17,4 @@ export const makeWith = (options) => (Effect.gen(function* () {
17
17
  })
18
18
  .pipe(Effect.catchAll(error => (Effect.fail(new BotApiTransportError({ cause: error })))))),
19
19
  };
20
- return transport;
21
- }));
20
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grom.js/effect-tg",
3
3
  "type": "module",
4
- "version": "0.2.5",
4
+ "version": "0.3.1",
5
5
  "description": "Effectful library for crafting Telegram bots.",
6
6
  "author": {
7
7
  "name": "Vladislav Deryabkin",