Skip to content
Source
Sign inSign up

CursorAccountReader.ts

33 lines1.1 KB

1import * as Context from "effect/Context";
2import * as Digest from "effect/crypto/Digest";
3import * as Effect from "effect/Effect";
4import * as HttpClient from "effect/http/HttpClient";
5import * as Layer from "effect/Layer";
6​
7import type { CursorCredentialSource } from "./accountCache.ts";
8import { readCursorAccountUsage, type CursorAccountUsageReadResult } from "./accountUsage.ts";
9​
10export class CursorAccountReader extends Context.Service<
11 CursorAccountReader,
12 {
13 readonly read: (
14 credentialSource: CursorCredentialSource,
15 sinceMs: number,
16 untilMs: number,
17 ) => Effect.Effect<CursorAccountUsageReadResult>;
18 }
19>()("@t3tools/provider-cursor/server/CursorAccountReader") {}
20​
21export const layer = Layer.effect(
22 CursorAccountReader,
23 Effect.gen(function* () {
24 const context = yield* Effect.context<Digest.Digest | HttpClient.HttpClient>();
25 return CursorAccountReader.of({
26 read: Effect.fn("CursorAccountReader.read")(function (credentialSource, sinceMs, untilMs) {
27 return readCursorAccountUsage(credentialSource, sinceMs, untilMs).pipe(
28 Effect.provideContext(context),
29 );
30 }),
31 });
32 }),
33);