Merge branch 'IDTEAM-1.26.0' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / api / addresses.ts
blob884d327a9c63db1c5a631912cd96bf87bdc789d8
1 import type { ADDRESS_PERMISSIONS } from '@proton/shared/lib/constants';
3 import type { Address, Api, SignedKeyList } from '../interfaces';
4 import queryPages from './helpers/queryPages';
5 import type { PaginationParams } from './interface';
7 export const queryAddresses = (params?: PaginationParams) => ({
8     url: 'core/v4/addresses',
9     method: 'get',
10     params,
11 });
13 export const getAllAddresses = (api: Api): Promise<Address[]> => {
14     return queryPages((page, pageSize) => {
15         return api<{ Addresses: Address[]; Total: number }>(
16             queryAddresses({
17                 Page: page,
18                 PageSize: pageSize,
19             })
20         );
21     }).then((pages) => {
22         return pages.flatMap(({ Addresses }) => Addresses);
23     });
26 interface CreateAddressArgs {
27     MemberID?: string;
28     Local: string;
29     Domain: string;
30     DisplayName?: string;
31     Signature?: string;
34 export const createAddress = ({ MemberID, Local, Domain, DisplayName, Signature }: CreateAddressArgs) => ({
35     url: 'core/v4/addresses',
36     method: 'post',
37     data: { MemberID, Local, Domain, DisplayName, Signature },
38 });
40 export const orderAddress = (AddressIDs: string[]) => ({
41     url: 'core/v4/addresses/order',
42     method: 'put',
43     data: { AddressIDs },
44 });
46 interface SetupAddressArgs {
47     Domain: string;
48     DisplayName: string;
49     Signature?: string;
52 export const setupAddress = ({ Domain, DisplayName, Signature }: SetupAddressArgs) => ({
53     url: 'core/v4/addresses/setup',
54     method: 'post',
55     data: { Domain, DisplayName, Signature },
56 });
58 export const getAddress = (addressID: string) => ({
59     url: `core/v4/addresses/${addressID}`,
60     method: 'get',
61 });
63 export const getCanonicalAddresses = (Emails: string[]) => ({
64     // params doesn't work correctly so
65     url: `core/v4/addresses/canonical?${Emails.map((email) => `Emails[]=${email}`).join('&')}`,
66     method: 'get',
67     // params: { Emails },
68 });
70 export const updateAddress = (
71     addressID: string,
72     { DisplayName, Signature }: { DisplayName?: string; Signature?: string }
73 ) => ({
74     url: `core/v4/addresses/${addressID}`,
75     method: 'put',
76     data: { DisplayName, Signature },
77 });
79 export const enableAddress = (addressID: string) => ({
80     url: `core/v4/addresses/${addressID}/enable`,
81     method: 'put',
82 });
84 export const disableAddress = (addressID: string) => ({
85     url: `core/v4/addresses/${addressID}/disable`,
86     method: 'put',
87 });
89 export const deleteAddress = (addressID: string) => ({
90     url: `core/v4/addresses/${addressID}/delete`,
91     method: 'put',
92 });
94 interface RenamedAddressKey {
95     ID: string;
96     PrivateKey: string;
99 interface RenameInternalAddressData {
100     Local: string;
101     AddressKeys: RenamedAddressKey[];
104 export const renameInternalAddress = (addressID: string, data: RenameInternalAddressData) => ({
105     url: `core/v4/addresses/${addressID}/rename/internal`,
106     method: 'put',
107     data,
110 interface RenameExternalAddressData {
111     Local: string;
112     Domain: string;
113     AddressKeys: RenamedAddressKey[];
116 export const renameExternalAddress = (addressID: string, data: RenameExternalAddressData) => ({
117     url: `core/v4/addresses/${addressID}/rename/external`,
118     method: 'put',
119     data,
122 export const addressType = (addressID: string, data: { Type: number; SignedKeyList: SignedKeyList }) => ({
123     url: `core/v4/addresses/${addressID}/type`,
124     method: 'put',
125     data,
128 export const switchAddressesOrganizationPermissions = ({
129     Ids,
130     Permissions,
131 }: {
132     Ids: string[];
133     Permissions: ADDRESS_PERMISSIONS[];
134 }) => ({
135     url: `core/v4/members/addresses/permissions/organization/switch`,
136     method: 'put',
137     data: { Ids, Permissions },
140 export const getAllowAddressDeletion = () => ({
141     url: `core/v4/addresses/allowAddressDeletion`,
142     method: 'get',