| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import path from "path"
- import { Global } from "../global"
- import fs from "fs/promises"
- import { z } from "zod"
- export namespace Auth {
- export const Oauth = z
- .object({
- type: z.literal("oauth"),
- refresh: z.string(),
- access: z.string(),
- expires: z.number(),
- })
- .openapi({ ref: "OAuth" })
- export const Api = z
- .object({
- type: z.literal("api"),
- key: z.string(),
- })
- .openapi({ ref: "ApiAuth" })
- export const WellKnown = z
- .object({
- type: z.literal("wellknown"),
- key: z.string(),
- token: z.string(),
- })
- .openapi({ ref: "WellKnownAuth" })
- export const Info = z.discriminatedUnion("type", [Oauth, Api, WellKnown]).openapi({ ref: "Auth" })
- export type Info = z.infer<typeof Info>
- const filepath = path.join(Global.Path.data, "auth.json")
- export async function get(providerID: string) {
- const file = Bun.file(filepath)
- return file
- .json()
- .catch(() => ({}))
- .then((x) => x[providerID] as Info | undefined)
- }
- export async function all(): Promise<Record<string, Info>> {
- const file = Bun.file(filepath)
- return file.json().catch(() => ({}))
- }
- export async function set(key: string, info: Info) {
- const file = Bun.file(filepath)
- const data = await all()
- await Bun.write(file, JSON.stringify({ ...data, [key]: info }, null, 2))
- await fs.chmod(file.name!, 0o600)
- }
- export async function remove(key: string) {
- const file = Bun.file(filepath)
- const data = await all()
- delete data[key]
- await Bun.write(file, JSON.stringify(data, null, 2))
- await fs.chmod(file.name!, 0o600)
- }
- }
|