ente/src/services/fileService.ts

71 lines
2 KiB
TypeScript
Raw Normal View History

import { getEndpoint } from "utils/common/apiUtil";
import HTTPService from "./HTTPService";
2020-09-27 17:18:57 +00:00
import * as Comlink from "comlink";
const decryptMetadata: any = typeof window !== 'undefined'
&& Comlink.wrap(new Worker("worker/decryptMetadata.worker.js", { type: 'module' }));
const decryptThumbnail: any = typeof window !== 'undefined'
&& Comlink.wrap(new Worker("worker/decryptThumbnail.worker.js", { type: 'module' }));
const ENDPOINT = getEndpoint();
export interface decryptionParams {
encryptedKey: string;
keyDecryptionNonce: string;
header: string;
nonce: string;
};
export interface fileData {
id: number;
file: {
decryptionParams: decryptionParams;
},
thumbnail: {
decryptionParams: decryptionParams;
},
metadata: {
2020-09-20 15:18:35 +00:00
currentTime: number;
modificationTime: number;
latitude: number;
longitude: number;
title: string;
deviceFolder: string;
};
2020-09-20 15:23:48 +00:00
src: string,
w: number,
h: number,
data?: string;
};
const getFileMetaDataUsingWorker = (data: any, key: string) => {
2020-09-27 17:18:57 +00:00
return decryptMetadata({ data, key });
}
2020-09-20 15:18:35 +00:00
const getFileUsingWorker = (data: any, key: string) => {
2020-09-27 17:18:57 +00:00
return decryptThumbnail({ data, key });
2020-09-20 15:18:35 +00:00
}
export const getFiles = async (sinceTime: string, token: string, limit: string, key: string) => {
const resp = await HTTPService.get(`${ENDPOINT}/encrypted-files/diff`, {
2020-09-20 15:18:35 +00:00
sinceTime, token, limit,
});
const promises: Promise<fileData>[] = resp.data.diff.map((data) => getFileMetaDataUsingWorker(data, key));
const decrypted = await Promise.all(promises);
return decrypted;
}
2020-09-20 15:18:35 +00:00
export const getPreview = async (token: string, data: fileData, key: string) => {
const resp = await HTTPService.get(
`${ENDPOINT}/encrypted-files/preview/${data.id}`,
{ token }, null, { responseType: 'arraybuffer' },
);
2020-09-20 15:23:48 +00:00
const decrypted: any = await getFileUsingWorker({
2020-09-20 15:18:35 +00:00
...data,
file: resp.data,
}, key);
const url = URL.createObjectURL(new Blob([decrypted.data]));
2020-09-20 15:18:35 +00:00
return url;
}