mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-05 08:33:10 +00:00
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { Effect } from "effect"
|
|
import z from "zod"
|
|
import { runtime } from "@/effect/runtime"
|
|
import * as S from "./service"
|
|
|
|
export { OAUTH_DUMMY_KEY } from "./service"
|
|
|
|
function runPromise<A>(f: (service: S.AuthService.Service) => Effect.Effect<A, S.AuthServiceError>) {
|
|
return runtime.runPromise(S.AuthService.use(f))
|
|
}
|
|
|
|
export namespace Auth {
|
|
export const Oauth = z
|
|
.object({
|
|
type: z.literal("oauth"),
|
|
refresh: z.string(),
|
|
access: z.string(),
|
|
expires: z.number(),
|
|
accountId: z.string().optional(),
|
|
enterpriseUrl: z.string().optional(),
|
|
})
|
|
.meta({ ref: "OAuth" })
|
|
|
|
export const Api = z
|
|
.object({
|
|
type: z.literal("api"),
|
|
key: z.string(),
|
|
})
|
|
.meta({ ref: "ApiAuth" })
|
|
|
|
export const WellKnown = z
|
|
.object({
|
|
type: z.literal("wellknown"),
|
|
key: z.string(),
|
|
token: z.string(),
|
|
})
|
|
.meta({ ref: "WellKnownAuth" })
|
|
|
|
export const Info = z.discriminatedUnion("type", [Oauth, Api, WellKnown]).meta({ ref: "Auth" })
|
|
export type Info = z.infer<typeof Info>
|
|
|
|
export async function get(providerID: string) {
|
|
return runPromise((service) => service.get(providerID))
|
|
}
|
|
|
|
export async function all(): Promise<Record<string, Info>> {
|
|
return runPromise((service) => service.all())
|
|
}
|
|
|
|
export async function set(key: string, info: Info) {
|
|
return runPromise((service) => service.set(key, info))
|
|
}
|
|
|
|
export async function remove(key: string) {
|
|
return runPromise((service) => service.remove(key))
|
|
}
|
|
}
|