wcz-layout
Version:
178 lines (177 loc) • 6.48 kB
JavaScript
import { t as serverEnv } from "./env-CGwonXSv.mjs";
import { l as getAccessToken } from "./utils-CnwPC4sC.mjs";
import { t as getAppToken } from "./msalServer-VQVVDgat.mjs";
import { r as apiMiddleware, t as authenticationMiddleware } from "./authMiddleware-DkRImzMr.mjs";
import { t as FileMetaSchema } from "./FileMeta-DDqUju1Y.mjs";
import { z } from "zod";
import { createServerFn } from "@tanstack/react-start";
import { uuidv7 } from "uuidv7";
import { setResponseHeaders } from "@tanstack/react-start/server";
import https from "node:https";
import { Readable } from "node:stream";
import { DefaultHttpStack, Upload } from "tus-js-client";
//#region src/data/server/file.ts
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" }).validator(GetFileMetasSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("subId", data.subId);
const { data: fileMetas } = await context.api.request({
url: `/v1/meta?${queryParams.toString()}`,
method: "GET"
});
return fileMetas;
});
const getFileThumbnail = createServerFn({ method: "GET" }).validator(FileSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
const response = await context.api.request({
url: `/v1/thumbnail?${queryParams.toString()}`,
method: "GET",
responseType: "stream"
});
setResponseHeaders(new Headers({
"Content-Type": response.headers["content-type"],
"Cache-Control": "private, max-age=3600, immutable"
}));
return Readable.toWeb(response.data);
});
const getFile = createServerFn({ method: "GET" }).validator(FileSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
const response = await context.api.request({
url: `/v1?${queryParams.toString()}`,
method: "GET",
responseType: "stream"
});
setResponseHeaders(new Headers({
"Content-Type": response.headers["content-type"],
"Cache-Control": "private, max-age=3600, immutable"
}));
return Readable.toWeb(response.data);
});
const downloadFile = createServerFn({ method: "GET" }).validator(FileSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
const response = await context.api.request({
url: `/v1/download?${queryParams.toString()}`,
method: "GET",
responseType: "stream"
});
setResponseHeaders(new Headers({
"Content-Type": response.headers["content-type"],
"Cache-Control": "private, max-age=3600, immutable"
}));
return Readable.toWeb(response.data);
});
const updateFileMeta = createServerFn({ method: "POST" }).validator(UpdateFileMetaSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
await context.api.request({
url: `/v1/meta?${queryParams.toString()}`,
method: "PUT",
data
});
});
const deleteFile = createServerFn({ method: "POST" }).validator(DeleteFileSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("id", data.id);
await context.api.request({
url: `/v1?${queryParams.toString()}`,
method: "DELETE"
});
});
const batchDeleteFiles = createServerFn({ method: "POST" }).validator(BatchDeleteFilesSchema).middleware([apiMiddleware({
baseURL: "FILE_BASE_URL",
scopeKey: "file"
})]).handler(async ({ data, context }) => {
const queryParams = new URLSearchParams();
queryParams.append("appName", data.appName);
queryParams.append("subId", data.subId);
await context.api.request({
url: `/v1?${queryParams.toString()}`,
method: "DELETE"
});
});
const insecureHttpsAgent = new https.Agent({ rejectUnauthorized: false });
const uploadFile = createServerFn({ method: "POST" }).validator((data) => UploadFileMetaSchema.parse({
appName: data.get("appName"),
subId: data.get("subId"),
file: data.get("file")
})).middleware([authenticationMiddleware()]).handler(async ({ data }) => {
let accessToken;
try {
accessToken = await getAccessToken("file");
} catch {
accessToken = await getAppToken("file");
}
const buffer = Buffer.from(await data.file.arrayBuffer());
const id = uuidv7();
const dotIndex = data.file.name.lastIndexOf(".");
const fileExtension = dotIndex >= 0 ? data.file.name.slice(dotIndex + 1) : "";
await new Promise((resolve, reject) => {
new Upload(buffer, {
endpoint: `${serverEnv.FILE_BASE_URL}/v1/upload`,
httpStack: new DefaultHttpStack({ agent: insecureHttpsAgent }),
chunkSize: 1048576,
metadata: {
id,
appName: data.appName,
subId: data.subId,
fileName: data.file.name,
fileExtension,
mimeType: 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, UpdateFileMetaSchema as r, downloadFile as s, FileSchema as t, getFileThumbnail as u };
//# sourceMappingURL=file-bAh5yYg7.mjs.map