import * as Config from "effect/Config"; import * as Effect from "effect/Effect"; import * as Clank from "../Util/Clank.ts"; import { AuthError } from "./AuthProvider.ts"; export const getEnv = (key: string) => Config.string(key).pipe(Effect.orElseSucceed(() => undefined)); export const getEnvRequired = (key: string) => Config.string(key).pipe( Effect.catch(() => Effect.fail(new AuthError({ message: `Missing required env: ${key}` })), ), ); export const getEnvRedacted = (key: string) => Config.redacted(key).pipe(Effect.orElseSucceed(() => undefined)); export const getEnvRedactedRequired = (key: string) => Config.redacted(key).pipe( Effect.catch(() => Effect.fail(new AuthError({ message: `Missing required env: ${key}` })), ), ); export const retryOnce = ( self: Effect.Effect, ) => self.pipe( Effect.retry({ times: 1, while: (e) => e instanceof Clank.PromptCancelled, }), Effect.mapError( (e) => new AuthError({ message: "User cancelled prompt", cause: e }), ), );