Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / api / user.ts
blobc9392e38f5778c5c6d89b72b24a5aa334bbb73ee
1 import type { ProductParam } from '../apps/product';
2 import { getProductHeaders } from '../apps/product';
3 import type { CLIENT_TYPES } from '../constants';
4 import type { FetchConfig } from '../fetch/interface';
5 import type { HumanVerificationMethodType } from '../interfaces';
7 export const getUser = () => ({
8     url: 'core/v4/users',
9     method: 'get',
10 });
12 export const queryCreateUser = (
13     data: {
14         Username: string;
15         Domain?: string;
16         Email?: string;
17         Phone?: string;
18         Type: CLIENT_TYPES; // 1 = mail, 2 = VPN
19         Referrer?: string;
20         ReferralIdentifier?: string;
21         ReferralID?: string; // Invite
22         TokenPayment?: string;
23         Payload?: {
24             [key: string]: string;
25         };
26         Salt?: string;
27     },
28     product: ProductParam
29 ): FetchConfig => ({
30     url: 'core/v4/users',
31     method: 'post',
32     data,
33     headers: getProductHeaders(product, {
34         endpoint: 'core/v4/users',
35         product,
36     }),
37 });
39 export const getRecoveryMethods = (Username: string): FetchConfig => ({
40     url: 'core/v4/users/reset',
41     method: 'get',
42     params: { Username },
43 });
45 export const queryCreateUserExternal = (
46     data: {
47         Email: string;
48         Token?: string;
49         TokenType?: HumanVerificationMethodType;
50         Type: CLIENT_TYPES; // 1 = mail, 2 = VPN
51         Referrer?: string;
52         TokenPayment?: string;
53         TokenPreVerifiedAddress?: string;
54         Payload?: {
55             [key: string]: string;
56         };
57         Salt?: string;
58     },
59     product: ProductParam
60 ): FetchConfig => ({
61     url: 'core/v4/users/external',
62     method: 'post',
63     data,
64     headers: getProductHeaders(product, {
65         endpoint: 'core/v4/users/external',
66         product,
67     }),
68 });
70 export const queryUnlock = (): FetchConfig => ({
71     url: 'core/v4/users/unlock',
72     method: 'put',
73 });
75 export const canDelete = (): FetchConfig => ({
76     url: 'core/v4/users/delete',
77     method: 'get',
78 });
80 export const deleteUser = (data: { Reason?: string; Feedback?: string; Email?: string }): FetchConfig => ({
81     url: 'core/v4/users/delete',
82     method: 'put',
83     data,
84 });
86 export const unlockPasswordChanges = (): FetchConfig => ({
87     url: 'core/v4/users/password',
88     method: 'put',
89 });
91 export const lockSensitiveSettings = (): FetchConfig => ({
92     url: 'core/v4/users/lock',
93     method: 'put',
94 });
96 export const getHumanVerificationMethods = (): FetchConfig => ({
97     url: 'core/v4/users/human',
98     method: 'get',
99 });
101 export const queryVerificationCode = (
102     Type: 'email' | 'sms',
103     Destination:
104         | {
105               Address: string;
106               Phone?: never;
107           }
108         | {
109               Address?: never;
110               Phone: string;
111           }
112 ) => ({
113     url: 'core/v4/users/code',
114     method: 'post',
115     data: { Type, Destination },
118 export const queryCheckUsernameAvailability = (Name: string, ParseDomain?: boolean) => ({
119     url: 'core/v4/users/available',
120     method: 'get',
121     params: { Name, ParseDomain: ParseDomain ? 1 : 0 },
124 export const queryCheckEmailAvailability = (Name: string) => ({
125     url: 'core/v4/users/availableExternal',
126     method: 'get',
127     params: { Name },
130 export const queryDirectSignupStatus = (
131     Type: CLIENT_TYPES // 1 = mail, 2 = VPN
132 ): FetchConfig => ({
133     url: 'core/v4/users/direct',
134     method: 'get',
135     params: { Type },
138 export const queryCheckVerificationCode = (
139     Token: string,
140     TokenType: 'email' | 'sms' | 'invite' | 'coupon' | 'payment',
141     Type: CLIENT_TYPES // 1 = mail, 2 = VPN
142 ): FetchConfig => ({
143     url: 'core/v4/users/check',
144     method: 'put',
145     data: { Token, TokenType, Type },
148 export const getInvitations = (): FetchConfig => ({
149     url: 'core/v4/users/invitations',
150     method: 'get',
153 export const acceptInvitation = (invitationID: string): FetchConfig => ({
154     url: `core/v4/users/invitations/${invitationID}/accept`,
155     method: 'post',
158 export const rejectInvitation = (invitationID: string): FetchConfig => ({
159     url: `core/v4/users/invitations/${invitationID}/reject`,
160     method: 'post',
163 export const disableUser = (data: { JWT: string }): FetchConfig => ({
164     url: `core/v4/users/disable/${data.JWT}`,
165     method: 'get',