Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / members.ts
blob578961e8c61dc6970308820d4cead148a4926e2d
1 import type { Address, Api, Member, SignedKeyList } from '../interfaces';
2 import type { UnprivatizeMemberResult } from '../keys/unprivatization';
3 import queryPages from './helpers/queryPages';
4 import type { PaginationParams } from './interface';
6 export const queryMembers = (params?: PaginationParams) => ({
7     method: 'get',
8     url: 'core/v4/members',
9     params: {
10         ...params,
11         IncludeAddresses: 1,
12     },
13 });
15 export const getAllMembers = (api: Api) => {
16     return queryPages((Page, PageSize) => {
17         return api<{ Members: Member[]; Total: number }>(
18             queryMembers({
19                 Page,
20                 PageSize,
21             })
22         );
23     }).then((pages) => {
24         return pages.flatMap(({ Members }) => Members);
25     });
28 export const getMember = (memberID: string) => ({
29     method: 'get',
30     url: `core/v4/members/${memberID}`,
31 });
33 export const getSelfMember = () => ({
34     method: 'get',
35     url: 'core/v4/members/me',
36 });
38 export const queryAddresses = (memberID: string, params?: PaginationParams) => ({
39     method: 'get',
40     url: `core/v4/members/${memberID}/addresses`,
41     params,
42 });
44 export const getAllMemberAddresses = (api: Api, memberID: string) => {
45     return queryPages((page, pageSize) => {
46         return api<{ Addresses: Address[]; Total: number }>(
47             queryAddresses(memberID, {
48                 Page: page,
49                 PageSize: pageSize,
50             })
51         );
52     }).then((pages) => {
53         return pages.flatMap(({ Addresses = [] }) => Addresses);
54     });
57 interface MemberPayload {
58     Name: string;
59     Private: number;
60     MaxSpace: number;
61     MaxVPN: number;
62     MaxAI: number;
65 interface UnprivatizationInvitation {
66     Email: string;
67     Data: string;
68     Signature: string;
69     PrivateIntent: boolean;
71 interface InviteMemberPayload extends Omit<MemberPayload, 'Private'> {
72     Invitation: UnprivatizationInvitation;
75 export const createMember = (data: MemberPayload | InviteMemberPayload) => ({
76     method: 'post',
77     url: 'core/v4/members',
78     data,
79 });
81 export const queryMemberUnprivatizationInfo = () => ({
82     method: 'get',
83     url: `core/v4/members/me/unprivatize`,
84 });
86 export const unprivatizeMemberKeysRoute = (memberID: string, data: UnprivatizeMemberResult) => ({
87     method: 'post',
88     url: `core/v4/members/${memberID}/keys/unprivatize`,
89     data,
90 });
92 export const checkMemberAddressAvailability = (data: { Local: string; Domain: string }) => ({
93     method: 'post',
94     url: `core/v4/members/addresses/available`,
95     data,
96 });
98 export const createMemberAddress = (memberID: string, data: { Local: string; Domain: string }) => ({
99     method: 'post',
100     url: `core/v4/members/${memberID}/addresses`,
101     data,
104 export const updateName = (memberID: string, Name: string) => ({
105     method: 'put',
106     url: `core/v4/members/${memberID}/name`,
107     data: { Name },
110 export const updateQuota = (memberID: string, MaxSpace: number) => ({
111     method: 'put',
112     url: `core/v4/members/${memberID}/quota`,
113     data: { MaxSpace },
116 export const updateRole = (memberID: string, Role: number) => ({
117     method: 'put',
118     url: `core/v4/members/${memberID}/role`,
119     data: { Role },
122 export const activatePasswordlessKey = (data: { TokenKeyPacket: string; Signature: string }) => ({
123     method: 'put',
124     url: `core/v4/organizations/keys/activate`,
125     data,
128 export const updateRolePasswordless = ({
129     memberID,
130     ...data
131 }: {
132     memberID: string;
133     Role: number;
134 } & (
135     | {
136           OrganizationKeyActivation: { TokenKeyPacket: string; Signature: string };
137       }
138     | {
139           OrganizationKeyInvitation: {
140               TokenKeyPacket: string;
141               Signature: string;
142               SignatureAddressID: string;
143               EncryptionAddressID: string;
144           };
145       }
146 )) => ({
147     method: 'put',
148     url: `core/v4/members/${memberID}/role`,
149     data,
152 export const updateVPN = (memberID: string, MaxVPN: number) => ({
153     method: 'put',
154     url: `core/v4/members/${memberID}/vpn`,
155     data: { MaxVPN },
158 export const updateAI = (memberID: string, MaxAI: number) => ({
159     method: 'put',
160     url: `core/v4/members/${memberID}/ai`,
161     data: { MaxAI },
164 export const resendUnprivatizationLink = (memberID: string) => ({
165     method: 'post',
166     url: `core/v4/members/${memberID}/unprivatize/resend`,
169 export const removeMember = (memberID: string) => ({
170     method: 'delete',
171     url: `core/v4/members/${memberID}`,
174 export const privatizeMember = (memberID: string) => ({
175     method: 'put',
176     url: `core/v4/members/${memberID}/privatize`,
179 export const authMember = (memberID: string, data: { Unlock?: boolean } = {}) => ({
180     method: 'post',
181     url: `core/v4/members/${memberID}/auth`,
182     data,
185 export const inviteMember = (email: string, maxSpace: number) => ({
186     url: `core/v4/members/invitations`,
187     method: 'post',
188     data: {
189         Email: email,
190         MaxSpace: maxSpace,
191     },
194 export const deleteMember = (memberId: string) => ({
195     url: `core/v4/members/${memberId}`,
196     method: 'delete',
199 export const editMemberInvitation = (memberID: string, maxSpace: number) => ({
200     method: 'put',
201     url: `core/v4/members/invitations/${memberID}`,
202     data: {
203         MaxSpace: maxSpace,
204     },
207 export const updateAddressFlags = (
208     addressID: string,
209     Encrypt: boolean,
210     Sign: boolean,
211     SignedKeyList: SignedKeyList
212 ) => ({
213     method: 'put',
214     url: `core/v4/addresses/${addressID}/encryption`,
215     data: {
216         Encrypt: Encrypt ? 1 : 0,
217         Sign: Sign ? 1 : 0,
218         SignedKeyList,
219     },