Merge branch 'IDTEAM-1.26.0' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / api / drive / files.ts
blob3c3e499b2e714d5b9e696343559c185ce10a4b7c
1 import { UPLOAD_TIMEOUT } from '../../drive/constants';
2 import type {
3     CreateDriveFile,
4     PublicCreateDriveFile,
5     Thumbnail,
6     UpdateFileRevision,
7 } from '../../interfaces/drive/file';
9 export const queryCreateFile = (shareId: string, data: CreateDriveFile) => {
10     return {
11         method: 'post',
12         timeout: UPLOAD_TIMEOUT,
13         url: `drive/shares/${shareId}/files`,
14         silence: true,
15         data,
16     };
19 export const queryFileRevisions = (shareId: string, linkId: string) => {
20     return {
21         method: 'get',
22         url: `drive/shares/${shareId}/files/${linkId}/revisions`,
23         silence: true,
24     };
26 export const queryFileRevision = (
27     shareId: string,
28     linkId: string,
29     revisionId: string,
30     pagination?: { FromBlockIndex: number; PageSize: number }
31 ) => {
32     const query = {
33         method: 'get',
34         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}`,
35         silence: true,
36     };
38     if (pagination) {
39         return {
40             ...query,
41             params: pagination,
42         };
43     }
45     return query;
48 export const queryFileRevisionThumbnail = (
49     shareId: string,
50     linkId: string,
51     revisionId: string,
52     thumbnailType: 1 | 2 | 3 = 1
53 ) => {
54     return {
55         method: 'get',
56         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}/thumbnail?Type=${thumbnailType}`,
57         silence: true,
58     };
61 /**
62  * This route should never be called without also instanciating a verifier.
63  * See the file uploader in the Drive app.
64  */
65 export const queryVerificationData = (shareId: string, linkId: string, revisionId: string) => {
66     return {
67         method: 'get',
68         url: `drive/shares/${shareId}/links/${linkId}/revisions/${revisionId}/verification`,
69         silence: true,
70     };
73 export const queryRequestUpload = (data: {
74     BlockList: {
75         Hash: string;
76         EncSignature: string;
77         Size: number;
78         Index: number;
79         Verifier: {
80             Token: string;
81         };
82     }[];
83     ThumbnailList?: Omit<Thumbnail, 'ThumbnailID'>[];
84     AddressID: string;
85     ShareID: string;
86     LinkID: string;
87     RevisionID: string;
88     Thumbnail?: number;
89     ThumbnailHash?: string;
90     ThumbnailSize?: number;
91 }) => {
92     return {
93         method: 'post',
94         url: 'drive/blocks',
95         data,
96     };
99 export const queryFileBlock = (url: string) => {
100     return {
101         method: 'get',
102         output: 'stream',
103         credentials: 'omit',
104         url,
105     };
108 export const queryUploadFileBlock = (url: string, chunk: Uint8Array) => {
109     return {
110         method: 'put',
111         input: 'binary',
112         data: new Blob([chunk]),
113         url,
114     };
117 export const queryCreateFileRevision = (
118     shareId: string,
119     linkId: string,
120     currentRevisionId: string,
121     clientUID?: string
122 ) => {
123     return {
124         method: 'post',
125         timeout: UPLOAD_TIMEOUT,
126         url: `drive/shares/${shareId}/files/${linkId}/revisions`,
127         silence: true,
128         data: {
129             CurrentRevisionID: currentRevisionId,
130             ClientUID: clientUID,
131         },
132     };
135 export const queryUpdateFileRevision = (
136     shareID: string,
137     linkID: string,
138     revisionId: string,
139     data: UpdateFileRevision
140 ) => {
141     return {
142         method: 'put',
143         timeout: UPLOAD_TIMEOUT,
144         url: `drive/shares/${shareID}/files/${linkID}/revisions/${revisionId}`,
145         data,
146     };
149 export const queryDeleteFileRevision = (shareId: string, linkId: string, revisionId: string) => {
150     return {
151         method: 'delete',
152         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}`,
153     };
156 export const queryRestoreFileRevision = (shareId: string, linkId: string, revisionId: string) => {
157     return {
158         method: 'post',
159         url: `drive/shares/${shareId}/files/${linkId}/revisions/${revisionId}/restore`,
160     };
163 /** Public **/
164 export const queryPublicCreateFile = (token: string, data: PublicCreateDriveFile) => {
165     return {
166         method: 'post',
167         timeout: UPLOAD_TIMEOUT,
168         url: `drive/urls/${token}/files`,
169         silence: true,
170         data,
171     };
174 export const queryPublicRequestUpload = (
175     token: string,
176     data: {
177         BlockList: {
178             Hash: string;
179             EncSignature?: string;
180             Size: number;
181             Index: number;
182             Verifier: {
183                 Token: string;
184             };
185         }[];
186         ThumbnailList?: Omit<Thumbnail, 'ThumbnailID'>[];
187         SignatureEmail?: string;
188         LinkID: string;
189         RevisionID: string;
190         Thumbnail?: number;
191         ThumbnailHash?: string;
192         ThumbnailSize?: number;
193     }
194 ) => {
195     return {
196         method: 'post',
197         url: `drive/urls/${token}/blocks`,
198         data,
199     };
203  * This route should never be called without also instanciating a verifier.
204  * See the file uploader in the Drive app.
205  */
206 export const queryPublicVerificationData = (token: string, linkId: string, revisionId: string) => {
207     return {
208         method: 'get',
209         url: `drive/urls/${token}/links/${linkId}/revisions/${revisionId}/verification`,
210         silence: true,
211     };
214 export const queryPublicUpdateFileRevision = (
215     token: string,
216     linkID: string,
217     revisionId: string,
218     data: Omit<UpdateFileRevision, 'SignatureAddress'> & {
219         SignatureEmail?: string;
220     }
221 ) => {
222     return {
223         method: 'put',
224         timeout: UPLOAD_TIMEOUT,
225         url: `drive/urls/${token}/files/${linkID}/revisions/${revisionId}`,
226         data,
227     };