Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / drive / files.ts
bloba78b18474a0292deecd938a8ef482f5b382e9c27
1 import { UPLOAD_TIMEOUT } from '../../drive/constants';
2 import type { CreateDriveFile, Thumbnail, UpdateFileRevision } from '../../interfaces/drive/file';
4 export const queryCreateFile = (shareId: string, data: CreateDriveFile) => {
5     return {
6         method: 'post',
7         timeout: UPLOAD_TIMEOUT,
8         url: `drive/shares/${shareId}/files`,
9         silence: true,
10         data,
11     };
14 export const queryFileRevisions = (shareId: string, linkId: string) => {
15     return {
16         method: 'get',
17         url: `drive/shares/${shareId}/files/${linkId}/revisions`,
18         silence: true,
19     };
21 export const queryFileRevision = (
22     shareId: string,
23     linkId: string,
24     revisionId: string,
25     pagination?: { FromBlockIndex: number; PageSize: number }
26 ) => {
27     const query = {
28         method: 'get',
29         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}`,
30         silence: true,
31     };
33     if (pagination) {
34         return {
35             ...query,
36             params: pagination,
37         };
38     }
40     return query;
43 export const queryFileRevisionThumbnail = (
44     shareId: string,
45     linkId: string,
46     revisionId: string,
47     thumbnailType: 1 | 2 | 3 = 1
48 ) => {
49     return {
50         method: 'get',
51         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}/thumbnail?Type=${thumbnailType}`,
52         silence: true,
53     };
56 /**
57  * This route should never be called without also instanciating a verifier.
58  * See the file uploader in the Drive app.
59  */
60 export const queryVerificationData = (shareId: string, linkId: string, revisionId: string) => {
61     return {
62         method: 'get',
63         url: `drive/shares/${shareId}/links/${linkId}/revisions/${revisionId}/verification`,
64         silence: true,
65     };
68 export const queryRequestUpload = (data: {
69     BlockList: {
70         Hash: string;
71         EncSignature: string;
72         Size: number;
73         Index: number;
74         Verifier: {
75             Token: string;
76         };
77     }[];
78     ThumbnailList?: Omit<Thumbnail, 'ThumbnailID'>[];
79     AddressID: string;
80     ShareID: string;
81     LinkID: string;
82     RevisionID: string;
83     Thumbnail?: number;
84     ThumbnailHash?: string;
85     ThumbnailSize?: number;
86 }) => {
87     return {
88         method: 'post',
89         url: 'drive/blocks',
90         data,
91     };
94 export const queryFileBlock = (url: string) => {
95     return {
96         method: 'get',
97         output: 'stream',
98         credentials: 'omit',
99         url,
100     };
103 export const queryUploadFileBlock = (url: string, chunk: Uint8Array) => {
104     return {
105         method: 'put',
106         input: 'binary',
107         data: new Blob([chunk]),
108         url,
109     };
112 export const queryCreateFileRevision = (
113     shareId: string,
114     linkId: string,
115     currentRevisionId: string,
116     clientUID?: string
117 ) => {
118     return {
119         method: 'post',
120         timeout: UPLOAD_TIMEOUT,
121         url: `drive/shares/${shareId}/files/${linkId}/revisions`,
122         silence: true,
123         data: {
124             CurrentRevisionID: currentRevisionId,
125             ClientUID: clientUID,
126         },
127     };
130 export const queryUpdateFileRevision = (
131     shareID: string,
132     linkID: string,
133     revisionId: string,
134     data: UpdateFileRevision
135 ) => {
136     return {
137         method: 'put',
138         timeout: UPLOAD_TIMEOUT,
139         url: `drive/shares/${shareID}/files/${linkID}/revisions/${revisionId}`,
140         data,
141     };
144 export const queryDeleteFileRevision = (shareId: string, linkId: string, revisionId: string) => {
145     return {
146         method: 'delete',
147         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}`,
148     };
151 export const queryRestoreFileRevision = (shareId: string, linkId: string, revisionId: string) => {
152     return {
153         method: 'post',
154         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}/restore`,
155     };