Files
swiss-datashare/frontend/src/services/share.service.ts

158 lines
3.8 KiB
TypeScript
Raw Normal View History

import { deleteCookie, setCookie } from "cookies-next";
2023-01-31 09:03:03 +01:00
import mime from "mime-types";
import { FileUploadResponse } from "../types/File.type";
2023-01-31 09:03:03 +01:00
import {
2022-12-12 11:54:13 +01:00
CreateShare,
MyReverseShare,
MyShare,
Share,
ShareMetaData,
} from "../types/share.type";
import api from "./api.service";
const list = async (): Promise<MyShare[]> => {
return (await api.get(`shares/all`)).data;
};
2022-12-12 11:54:13 +01:00
const create = async (share: CreateShare) => {
return (await api.post("shares", share)).data;
};
const completeShare = async (id: string) => {
const response = (await api.post(`shares/${id}/complete`)).data;
deleteCookie("reverse_share_token");
return response;
};
const revertComplete = async (id: string) => {
return (await api.delete(`shares/${id}/complete`)).data;
};
const get = async (id: string): Promise<Share> => {
return (await api.get(`shares/${id}`)).data;
};
const getFromOwner = async (id: string): Promise<Share> => {
return (await api.get(`shares/${id}/from-owner`)).data;
};
const getMetaData = async (id: string): Promise<ShareMetaData> => {
return (await api.get(`shares/${id}/metaData`)).data;
};
const remove = async (id: string) => {
await api.delete(`shares/${id}`);
};
const getMyShares = async (): Promise<MyShare[]> => {
return (await api.get("shares")).data;
};
2022-10-13 23:23:33 +02:00
const getShareToken = async (id: string, password?: string) => {
await api.post(`/shares/${id}/token`, { password });
};
const isShareIdAvailable = async (id: string): Promise<boolean> => {
2023-01-31 09:03:03 +01:00
return (await api.get(`/shares/isShareIdAvailable/${id}`)).data.isAvailable;
};
const doesFileSupportPreview = (fileName: string) => {
2023-03-14 12:09:21 +01:00
const mimeType = (mime.contentType(fileName) || "").split(";")[0];
2023-01-31 09:03:03 +01:00
if (!mimeType) return false;
const supportedMimeTypes = [
mimeType.startsWith("video/"),
mimeType.startsWith("image/"),
mimeType.startsWith("audio/"),
2023-03-14 16:08:57 +01:00
mimeType.startsWith("text/"),
2023-01-31 09:03:03 +01:00
mimeType == "application/pdf",
];
return supportedMimeTypes.some((isSupported) => isSupported);
};
const downloadFile = async (shareId: string, fileId: string) => {
window.location.href = `${window.location.origin}/api/shares/${shareId}/files/${fileId}`;
};
const removeFile = async (shareId: string, fileId: string) => {
await api.delete(`shares/${shareId}/files/${fileId}`);
};
const uploadFile = async (
shareId: string,
chunk: Blob,
file: {
id?: string;
name: string;
},
chunkIndex: number,
2023-08-17 14:47:58 +02:00
totalChunks: number,
): Promise<FileUploadResponse> => {
return (
await api.post(`shares/${shareId}/files`, chunk, {
headers: { "Content-Type": "application/octet-stream" },
params: {
id: file.id,
name: file.name,
chunkIndex,
totalChunks,
},
})
).data;
};
const createReverseShare = async (
shareExpiration: string,
maxShareSize: number,
maxUseCount: number,
2023-08-17 14:47:58 +02:00
sendEmailNotification: boolean,
) => {
return (
await api.post("reverseShares", {
shareExpiration,
maxShareSize: maxShareSize.toString(),
maxUseCount,
sendEmailNotification,
})
).data;
};
const getMyReverseShares = async (): Promise<MyReverseShare[]> => {
return (await api.get("reverseShares")).data;
};
const setReverseShare = async (reverseShareToken: string) => {
const { data } = await api.get(`/reverseShares/${reverseShareToken}`);
setCookie("reverse_share_token", reverseShareToken);
return data;
};
const removeReverseShare = async (id: string) => {
await api.delete(`/reverseShares/${id}`);
};
export default {
list,
create,
completeShare,
revertComplete,
2022-10-13 23:23:33 +02:00
getShareToken,
get,
getFromOwner,
remove,
getMetaData,
2023-01-31 09:03:03 +01:00
doesFileSupportPreview,
getMyShares,
isShareIdAvailable,
downloadFile,
removeFile,
uploadFile,
setReverseShare,
createReverseShare,
getMyReverseShares,
removeReverseShare,
};