重构ossStore

This commit is contained in:
2025-06-19 23:07:06 +08:00
parent 6e73220962
commit 0758b9f75a
5 changed files with 89 additions and 67 deletions

View File

@@ -3,30 +3,22 @@ import { StsToken } from "@/lib/api/oss";
import OSS from "ali-oss";
import { useEffect } from "react";
export function useOssStore(options: { region: string; bucket: string; onStsTokenDataChanged?: (data: StsToken | undefined) => void; }) {
const { stsTokenData, isLoading, error } = useOssSts();
export function useOssStore(options: { onStsTokenDataChanged?: (data: StsToken | undefined) => void; } = {}) {
const { stsTokenData, isLoading, error, mutate } = useOssSts();
useEffect(() => {
options.onStsTokenDataChanged?.(stsTokenData);
}, [stsTokenData])
}, [stsTokenData]);
/** @todo */
const refresh = async () => {
await mutate();
}
return {
stsTokenData,
isLoading,
error,
store: stsTokenData ? new OSS({
region: options.region,
bucket: options.bucket,
accessKeyId: stsTokenData.AccessKeyId,
accessKeySecret: stsTokenData.AccessKeySecret,
stsToken: stsTokenData.SecurityToken,
refreshSTSToken: () => new Promise(resolve => {
resolve({
accessKeyId: stsTokenData.AccessKeyId,
accessKeySecret: stsTokenData.AccessKeySecret,
stsToken: stsTokenData.SecurityToken,
})
}),
}) : undefined,
refresh,
}
}

View File

@@ -3,12 +3,12 @@ import { toast } from "sonner";
import useSWR from "swr";
export function useOssSts() {
const { data: stsTokenData, isLoading, error } = useSWR(
const { data: stsTokenData, isLoading, error, mutate } = useSWR(
'/api/oss/sts',
() => OssApi.getStsToken(),
{
shouldRetryOnError: false,
refreshInterval: 59 * 60 * 1000,
// refreshInterval: 59 * 60 * 1000,
revalidateOnFocus: false,
onError: (e) => {
toast.error(`${e.message || e}`)
@@ -20,5 +20,6 @@ export function useOssSts() {
stsTokenData,
isLoading,
error,
mutate,
}
}