Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / fetch / helpers.ts
blob8db0a36eef93a66cda31e2189356b4f1a6a6eb7d
1 import { createApiError } from './ApiError';
3 const appendQueryParams = (url: URL, params: { [key: string]: any }) => {
4     Object.keys(params).forEach((key) => {
5         const value = params[key];
6         if (typeof value === 'undefined') {
7             return;
8         }
9         url.searchParams.append(key, value);
10     });
13 export const createUrl = (urlString: string, params: { [key: string]: any } = {}, origin?: string) => {
14     let url: URL;
15     if (origin) {
16         url = new URL(urlString, origin);
17     } else {
18         url = new URL(urlString);
19     }
20     appendQueryParams(url, params);
21     return url;
24 export const checkStatus = (response: Response, config: any) => {
25     const { status } = response;
27     if (status >= 200 && status < 300) {
28         return response;
29     }
31     return response
32         .json()
33         .catch(() => {
34             return {};
35         })
36         .then((data) => {
37             throw createApiError('StatusCodeError', response, config, data);
38         });
41 export const getDateHeader = (headers: Headers) => {
42     const dateHeader = headers?.get?.('date');
43     if (!dateHeader) {
44         return;
45     }
46     const newServerTime = new Date(dateHeader);
47     if (Number.isNaN(+newServerTime)) {
48         return;
49     }
50     return newServerTime;
53 export const serializeFormData = (data: { [key: string]: any }) => {
54     const formData = new FormData();
55     Object.keys(data).forEach((key) => {
56         if (Array.isArray(data[key])) {
57             data[key].forEach((val: any) => formData.append(key, val));
58         } else {
59             formData.append(key, data[key]);
60         }
61     });
62     return formData;
65 export const serializeData = (data: any, input: string) => {
66     if (!data) {
67         return {};
68     }
69     if (input === 'json') {
70         return {
71             body: JSON.stringify(data),
72             headers: {
73                 'Content-Type': 'application/json',
74             },
75         };
76     }
77     if (input === 'form') {
78         return {
79             body: serializeFormData(data),
80         };
81     }
82     if (input === 'protobuf') {
83         return {
84             body: data,
85             headers: {
86                 'content-type': 'application/x-protobuf',
87             },
88         };
89     }
90     return {};