2
0
Эх сурвалжийг харах

fix: ensure Auth.all returns valid objs (#5128)

ry2009 2 сар өмнө
parent
commit
725f658260

+ 9 - 6
packages/opencode/src/auth/index.ts

@@ -35,16 +35,19 @@ export namespace Auth {
   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)
+    const auth = await all()
+    return auth[providerID]
   }
 
   export async function all(): Promise<Record<string, Info>> {
     const file = Bun.file(filepath)
-    return file.json().catch(() => ({}))
+    const data = await file.json().catch(() => ({} as Record<string, unknown>))
+    return Object.entries(data).reduce((acc, [key, value]) => {
+      const parsed = Info.safeParse(value)
+      if (!parsed.success) return acc
+      acc[key] = parsed.data
+      return acc
+    }, {} as Record<string, Info>)
   }
 
   export async function set(key: string, info: Info) {

+ 1 - 1
packages/opencode/src/cli/cmd/auth.ts

@@ -29,7 +29,7 @@ export const AuthListCommand = cmd({
     const homedir = os.homedir()
     const displayPath = authPath.startsWith(homedir) ? authPath.replace(homedir, "~") : authPath
     prompts.intro(`Credentials ${UI.Style.TEXT_DIM}${displayPath}`)
-    const results = await Auth.all().then((x) => Object.entries(x))
+    const results = Object.entries(await Auth.all())
     const database = await ModelsDev.get()
 
     for (const [providerID, result] of results) {