summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/app/src/components/dialog-connect-provider.tsx25
1 files changed, 21 insertions, 4 deletions
diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx
index 4d24b2315..90f4f41f7 100644
--- a/packages/app/src/components/dialog-connect-provider.tsx
+++ b/packages/app/src/components/dialog-connect-provider.tsx
@@ -103,6 +103,24 @@ export function DialogConnectProvider(props: { provider: string }) {
return value.label ?? ""
}
+ function formatError(value: unknown, fallback: string): string {
+ if (value && typeof value === "object" && "data" in value) {
+ const data = (value as { data?: { message?: unknown } }).data
+ if (typeof data?.message === "string" && data.message) return data.message
+ }
+ if (value && typeof value === "object" && "error" in value) {
+ const nested = formatError((value as { error?: unknown }).error, "")
+ if (nested) return nested
+ }
+ if (value && typeof value === "object" && "message" in value) {
+ const message = (value as { message?: unknown }).message
+ if (typeof message === "string" && message) return message
+ }
+ if (value instanceof Error && value.message) return value.message
+ if (typeof value === "string" && value) return value
+ return fallback
+ }
+
async function selectMethod(index: number) {
if (timer.current !== undefined) {
clearTimeout(timer.current)
@@ -141,7 +159,7 @@ export function DialogConnectProvider(props: { provider: string }) {
})
.catch((e) => {
if (!alive.value) return
- dispatch({ type: "auth.error", error: String(e) })
+ dispatch({ type: "auth.error", error: formatError(e, language.t("common.requestFailed")) })
})
}
}
@@ -328,8 +346,7 @@ export function DialogConnectProvider(props: { provider: string }) {
await complete()
return
}
- const message = result.error instanceof Error ? result.error.message : String(result.error)
- setFormStore("error", message || language.t("provider.connect.oauth.code.invalid"))
+ setFormStore("error", formatError(result.error, language.t("provider.connect.oauth.code.invalid")))
}
return (
@@ -385,7 +402,7 @@ export function DialogConnectProvider(props: { provider: string }) {
if (!alive.value) return
if (!result.ok) {
- const message = result.error instanceof Error ? result.error.message : String(result.error)
+ const message = formatError(result.error, language.t("common.requestFailed"))
dispatch({ type: "auth.error", error: message })
return
}