wcz-layout
Version:
151 lines (150 loc) • 5.72 kB
JavaScript
import { n as serverEnv } from "./env-Dgbk8SQN.js";
import { t as getAppToken } from "./msalServer-coQaBOlr.js";
import { t as FileMetaSchema } from "./FileMeta--27aYkPB.js";
import { z } from "zod";
import { createServerFn, createServerOnlyFn } from "@tanstack/react-start";
import axios from "axios";
import { uuidv7 } from "uuidv7";
import { Upload } from "tus-js-client";
//#region src/queries/server/externalApi.ts
function createExternalApi(baseURL, scopeKey) {
const api = axios.create({ baseURL });
api.interceptors.request.use(async (config) => {
const accessToken = await getAppToken(scopeKey);
config.headers.set("Authorization", `Bearer ${accessToken}`);
return config;
});
return api;
}
//#endregion
//#region src/queries/server/file.ts
let fileApi = null;
const getFileApi = createServerOnlyFn(() => {
const baseUrl = serverEnv.FILE_BASE_URL;
if (!baseUrl) throw new Error("FILE_BASE_URL is not defined in server environment variables.");
fileApi ??= createExternalApi(baseUrl, "file");
return fileApi;
});
const GetFileMetasSchema = z.object({
appName: z.string().min(1).max(255),
subId: z.uuid()
});
const FileSchema = z.object({
appName: z.string().min(1).max(255),
id: z.uuid()
});
const UpdateFileMetaSchema = FileMetaSchema.extend({ fileName: z.string().min(1).max(255) });
const DeleteFileSchema = FileSchema;
const BatchDeleteFilesSchema = GetFileMetasSchema;
const UploadFileMetaSchema = z.object({
appName: z.string().min(1).max(255),
subId: z.uuid(),
file: z.instanceof(File)
});
const getFileMetas = createServerFn({ method: "GET" }).inputValidator(GetFileMetasSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("subId", data.subId);
return api.request({
url: `/v1/meta?${queryParams.toString()}`,
method: "GET"
}).then((r) => r.data);
});
const getFileThumbnail = createServerFn({ method: "GET" }).inputValidator(FileSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
const response = await api.request({
url: `/v1/thumbnail?${queryParams.toString()}`,
method: "GET",
responseType: "arraybuffer"
});
return new Response(response.data, { headers: { "Content-Type": response.headers["content-type"] } });
});
const getFile = createServerFn({ method: "GET" }).inputValidator(FileSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
const response = await api.request({
url: `/v1?${queryParams.toString()}`,
method: "GET",
responseType: "arraybuffer"
});
return new Response(response.data, { headers: { "Content-Type": response.headers["content-type"] } });
});
const downloadFile = createServerFn({ method: "GET" }).inputValidator(FileSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
const response = await api.request({
url: `/v1/download?${queryParams.toString()}`,
method: "GET",
responseType: "arraybuffer"
});
return new Response(response.data, { headers: { "Content-Type": response.headers["content-type"] } });
});
const updateFileMeta = createServerFn({ method: "POST" }).inputValidator(UpdateFileMetaSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
return api.request({
url: `/v1/meta?${queryParams.toString()}`,
method: "PUT",
data
}).then((r) => r.data);
});
const deleteFile = createServerFn({ method: "POST" }).inputValidator(DeleteFileSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
return api.request({
url: `/v1?${queryParams.toString()}`,
method: "DELETE"
}).then((r) => r.data);
});
const batchDeleteFiles = createServerFn({ method: "POST" }).inputValidator(BatchDeleteFilesSchema).handler(async ({ data }) => {
const api = getFileApi();
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("subId", data.subId);
return api.request({
url: `/v1?${queryParams.toString()}`,
method: "DELETE"
}).then((r) => r.data);
});
const uploadFile = createServerFn({ method: "POST" }).inputValidator(UploadFileMetaSchema).handler(async ({ data }) => {
const accessToken = await getAppToken("file");
const buffer = Buffer.from(await data.file.arrayBuffer());
const id = uuidv7();
await new Promise((resolve, reject) => {
new Upload(buffer, {
endpoint: `${serverEnv.FILE_BASE_URL}/v1/upload`,
chunkSize: 1048576,
metadata: {
id,
appName: data.appName,
subId: data.subId,
fileName: data.file.name,
fileExtension: data.file.type
},
headers: { Authorization: `Bearer ${accessToken}` },
onError: reject,
onSuccess: () => resolve()
}).start();
});
return {
id,
appName: data.appName,
subId: data.subId,
fileName: data.file.name
};
});
//#endregion
export { batchDeleteFiles as a, getFile as c, updateFileMeta as d, uploadFile as f, UploadFileMetaSchema as i, getFileMetas as l, GetFileMetasSchema as n, deleteFile as o, createExternalApi as p, UpdateFileMetaSchema as r, downloadFile as s, FileSchema as t, getFileThumbnail as u };
//# sourceMappingURL=file-BHdm6ob1.js.map