Issues with context provision in TypeScript Effect library function

what I am doing wrong here? in the api function? is it how I provide the context?
class DataFetchingConfigContext
  extends Context.Tag("DatafetchingConfigContext")<
    DataFetchingConfigContext,
    typeof DataFetchingConfig.Type
  >() {}
const DataFetchingConfigLive = Layer.effect(
  DataFetchingConfigContext,
  Effect.gen(function* () {
    return yield* S.decodeUnknown(DataFetchingConfig)(dataConfig);
  }),
);

const Fetch = Context.GenericTag<"Fetch", typeof fetch>("Fetch");

const api = (
  endpoint: string,
  errorMessage: string,
): Effect.Effect<unknown, Error, "Fetch" | DataFetchingConfigContext> =>
  Effect.gen(function* () {
    const config = yield* DataFetchingConfigLive;
    const baseUrl = `${config.csgo_api.url}/${config.csgo_api.lang}`;
    const url =`${baseUrl}/${endpoint}.json`
    return yield* Fetch.pipe(Effect.flatMap((fetch) =>
      pipe(
        Effect.tryPromise({
          try: () => fetch(url),
          catch: (e) => new Error(`${errorMessage}`, { cause: e }),
        }),
        Effect.andThen((res) =>
          res.ok
            ? Effect.tryPromise({
              try: () => res.json(),
              catch: (e) =>
                new Error(`Error parsing ${endpoint} json`, { cause: e }),
            })
            : Effect.fail(new Error(`Error ${res.status}`, { cause: res }))
        ),
      )
    ));
  });
Was this page helpful?