2023-01-26 13:44:04 +01:00
|
|
|
import { setCookie } from "cookies-next";
|
2023-01-09 11:43:48 +01:00
|
|
|
import { FileUploadResponse } from "../types/File.type";
|
2022-10-09 22:30:32 +02:00
|
|
|
import {
|
2022-12-12 11:54:13 +01:00
|
|
|
CreateShare,
|
2023-01-26 13:44:04 +01:00
|
|
|
MyReverseShare,
|
2022-10-09 22:30:32 +02:00
|
|
|
MyShare,
|
|
|
|
|
Share,
|
|
|
|
|
ShareMetaData,
|
|
|
|
|
} from "../types/share.type";
|
|
|
|
|
import api from "./api.service";
|
|
|
|
|
|
2022-12-12 11:54:13 +01:00
|
|
|
const create = async (share: CreateShare) => {
|
|
|
|
|
const { id, expiration, recipients, security, description } = share;
|
|
|
|
|
return (
|
|
|
|
|
await api.post("shares", {
|
|
|
|
|
id,
|
|
|
|
|
expiration,
|
|
|
|
|
recipients,
|
|
|
|
|
security,
|
|
|
|
|
description,
|
|
|
|
|
})
|
|
|
|
|
).data;
|
2022-10-09 22:30:32 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const completeShare = async (id: string) => {
|
|
|
|
|
return (await api.post(`shares/${id}/complete`)).data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const get = async (id: string): Promise<Share> => {
|
2022-12-06 10:54:17 +01:00
|
|
|
const shareToken = sessionStorage.getItem(`share_${id}_token`);
|
2022-10-09 22:30:32 +02:00
|
|
|
return (
|
|
|
|
|
await api.get(`shares/${id}`, {
|
|
|
|
|
headers: { "X-Share-Token": shareToken ?? "" },
|
|
|
|
|
})
|
|
|
|
|
).data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getMetaData = async (id: string): Promise<ShareMetaData> => {
|
2022-12-06 10:54:17 +01:00
|
|
|
const shareToken = sessionStorage.getItem(`share_${id}_token`);
|
2022-10-09 22:30:32 +02:00
|
|
|
return (
|
|
|
|
|
await api.get(`shares/${id}/metaData`, {
|
|
|
|
|
headers: { "X-Share-Token": shareToken ?? "" },
|
|
|
|
|
})
|
|
|
|
|
).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) => {
|
|
|
|
|
const { token } = (await api.post(`/shares/${id}/token`, { password })).data;
|
2022-10-09 22:30:32 +02:00
|
|
|
|
2022-12-06 10:54:17 +01:00
|
|
|
sessionStorage.setItem(`share_${id}_token`, token);
|
2022-10-09 22:30:32 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const isShareIdAvailable = async (id: string): Promise<boolean> => {
|
|
|
|
|
return (await api.get(`shares/isShareIdAvailable/${id}`)).data.isAvailable;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getFileDownloadUrl = async (shareId: string, fileId: string) => {
|
2022-12-06 10:54:17 +01:00
|
|
|
const shareToken = sessionStorage.getItem(`share_${shareId}_token`);
|
2022-10-09 22:30:32 +02:00
|
|
|
return (
|
|
|
|
|
await api.get(`shares/${shareId}/files/${fileId}/download`, {
|
|
|
|
|
headers: { "X-Share-Token": shareToken ?? "" },
|
|
|
|
|
})
|
|
|
|
|
).data.url;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const downloadFile = async (shareId: string, fileId: string) => {
|
|
|
|
|
window.location.href = await getFileDownloadUrl(shareId, fileId);
|
|
|
|
|
};
|
|
|
|
|
|
2022-10-12 23:24:11 +02:00
|
|
|
const uploadFile = async (
|
|
|
|
|
shareId: string,
|
2023-01-09 11:43:48 +01:00
|
|
|
readerEvent: ProgressEvent<FileReader>,
|
|
|
|
|
file: {
|
|
|
|
|
id?: string;
|
|
|
|
|
name: string;
|
|
|
|
|
},
|
|
|
|
|
chunkIndex: number,
|
|
|
|
|
totalChunks: number
|
|
|
|
|
): Promise<FileUploadResponse> => {
|
|
|
|
|
const data = readerEvent.target!.result;
|
2022-10-12 23:24:11 +02:00
|
|
|
|
2023-01-09 11:43:48 +01:00
|
|
|
return (
|
|
|
|
|
await api.post(`shares/${shareId}/files`, data, {
|
|
|
|
|
headers: { "Content-Type": "application/octet-stream" },
|
|
|
|
|
params: {
|
|
|
|
|
id: file.id,
|
|
|
|
|
name: file.name,
|
|
|
|
|
chunkIndex,
|
|
|
|
|
totalChunks,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
).data;
|
2022-10-09 22:30:32 +02:00
|
|
|
};
|
|
|
|
|
|
2023-01-26 13:44:04 +01:00
|
|
|
const createReverseShare = async (
|
|
|
|
|
shareExpiration: string,
|
|
|
|
|
maxShareSize: number,
|
|
|
|
|
sendEmailNotification: boolean
|
|
|
|
|
) => {
|
|
|
|
|
return (
|
|
|
|
|
await api.post("reverseShares", {
|
|
|
|
|
shareExpiration,
|
|
|
|
|
maxShareSize: maxShareSize.toString(),
|
|
|
|
|
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}`);
|
|
|
|
|
};
|
|
|
|
|
|
2022-10-09 22:30:32 +02:00
|
|
|
export default {
|
|
|
|
|
create,
|
|
|
|
|
completeShare,
|
2022-10-13 23:23:33 +02:00
|
|
|
getShareToken,
|
2022-10-09 22:30:32 +02:00
|
|
|
get,
|
|
|
|
|
remove,
|
|
|
|
|
getMetaData,
|
|
|
|
|
getMyShares,
|
|
|
|
|
isShareIdAvailable,
|
|
|
|
|
downloadFile,
|
|
|
|
|
uploadFile,
|
2023-01-26 13:44:04 +01:00
|
|
|
setReverseShare,
|
|
|
|
|
createReverseShare,
|
|
|
|
|
getMyReverseShares,
|
|
|
|
|
removeReverseShare,
|
2022-10-09 22:30:32 +02:00
|
|
|
};
|