mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-26 21:39:43 +02:00
refactor(auth): reuse desktop token cache in API clients
This commit is contained in:
parent
652a25be37
commit
4b6bcaeb1b
2 changed files with 7 additions and 13 deletions
|
|
@ -16,7 +16,7 @@ import { z } from "zod";
|
||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible";
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible";
|
||||||
import { getDesktopAccessToken } from "@/lib/auth-fetch";
|
import { authenticatedFetch } from "@/lib/auth-fetch";
|
||||||
import { buildBackendUrl } from "@/lib/env-config";
|
import { buildBackendUrl } from "@/lib/env-config";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
|
|
@ -157,14 +157,10 @@ function truncateCommand(command: string, maxLen = 80): string {
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
async function downloadSandboxFile(threadId: string, filePath: string, fileName: string) {
|
async function downloadSandboxFile(threadId: string, filePath: string, fileName: string) {
|
||||||
const token = await getDesktopAccessToken();
|
|
||||||
const url = buildBackendUrl(`/api/v1/threads/${threadId}/sandbox/download`, {
|
const url = buildBackendUrl(`/api/v1/threads/${threadId}/sandbox/download`, {
|
||||||
path: filePath,
|
path: filePath,
|
||||||
});
|
});
|
||||||
const res = await fetch(url, {
|
const res = await authenticatedFetch(url);
|
||||||
headers: token ? { Authorization: `Bearer ${token}` } : undefined,
|
|
||||||
credentials: "include",
|
|
||||||
});
|
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
throw new Error(`Download failed: ${res.statusText}`);
|
throw new Error(`Download failed: ${res.statusText}`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import type { ZodType } from "zod";
|
import type { ZodType } from "zod";
|
||||||
|
import { getDesktopAccessToken } from "@/lib/auth-fetch";
|
||||||
import { buildBackendUrl } from "@/lib/env-config";
|
import { buildBackendUrl } from "@/lib/env-config";
|
||||||
import { getClientPlatform } from "../agent-filesystem";
|
import { getClientPlatform } from "../agent-filesystem";
|
||||||
import { handleUnauthorized, refreshSession } from "../auth-utils";
|
import { handleUnauthorized, refreshSession } from "../auth-utils";
|
||||||
|
|
@ -59,11 +60,6 @@ class BaseApiService {
|
||||||
return typeof window !== "undefined" && !!window.electronAPI;
|
return typeof window !== "undefined" && !!window.electronAPI;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getDesktopAccessToken(): Promise<string> {
|
|
||||||
if (!this.isDesktopClient) return "";
|
|
||||||
return (await window.electronAPI?.getAccessToken?.()) || "";
|
|
||||||
}
|
|
||||||
|
|
||||||
async request<T, R extends ResponseType = ResponseType.JSON>(
|
async request<T, R extends ResponseType = ResponseType.JSON>(
|
||||||
url: string,
|
url: string,
|
||||||
responseSchema?: ZodType<T>,
|
responseSchema?: ZodType<T>,
|
||||||
|
|
@ -90,7 +86,7 @@ class BaseApiService {
|
||||||
this.noAuthPrefixes.some((prefix) => url.startsWith(prefix)) ||
|
this.noAuthPrefixes.some((prefix) => url.startsWith(prefix)) ||
|
||||||
/^\/api\/v1\/invites\/[^/]+\/info$/.test(url);
|
/^\/api\/v1\/invites\/[^/]+\/info$/.test(url);
|
||||||
const desktopAccessToken =
|
const desktopAccessToken =
|
||||||
this.isDesktopClient && !isNoAuthEndpoint ? await this.getDesktopAccessToken() : "";
|
this.isDesktopClient && !isNoAuthEndpoint ? (await getDesktopAccessToken()) || "" : "";
|
||||||
const defaultOptions: RequestOptions = {
|
const defaultOptions: RequestOptions = {
|
||||||
headers: {
|
headers: {
|
||||||
...(desktopAccessToken ? { Authorization: `Bearer ${desktopAccessToken}` } : {}),
|
...(desktopAccessToken ? { Authorization: `Bearer ${desktopAccessToken}` } : {}),
|
||||||
|
|
@ -174,7 +170,9 @@ class BaseApiService {
|
||||||
} else if (!isNoAuthEndpoint && !isRefreshRetryBlocked(refreshRetryKey)) {
|
} else if (!isNoAuthEndpoint && !isRefreshRetryBlocked(refreshRetryKey)) {
|
||||||
const refreshed = await refreshSession();
|
const refreshed = await refreshSession();
|
||||||
if (refreshed) {
|
if (refreshed) {
|
||||||
const newToken = this.isDesktopClient ? await this.getDesktopAccessToken() : "";
|
const newToken = this.isDesktopClient
|
||||||
|
? (await getDesktopAccessToken({ forceRefresh: true })) || ""
|
||||||
|
: "";
|
||||||
return this.request(url, responseSchema, {
|
return this.request(url, responseSchema, {
|
||||||
...mergedOptions,
|
...mergedOptions,
|
||||||
headers: {
|
headers: {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue