Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / keys.ts
blobfc48bbf78c8486ee61d7b56bfe09b0f7b7796fcf
1 import type { ProductParam } from '@proton/shared/lib/apps/product';
2 import { getProductHeaders } from '@proton/shared/lib/apps/product';
4 import type { AddressKeyPayload, AddressKeyPayloadV2, SignedKeyList } from '../interfaces';
6 interface GetPublicKeysForInboxParams {
7     Email: string;
8     Fingerprint?: string;
11 /** @deprecated in favor of `getAllPublicKeys` */
12 export const getPublicKeys = (params: GetPublicKeysForInboxParams) => ({
13     url: 'core/v4/keys',
14     method: 'get',
15     params,
16 });
18 interface GetAllPublicKeysParams {
19     Email: string;
20     InternalOnly?: 0 | 1;
23 export const getAllPublicKeys = (params: GetAllPublicKeysParams) => ({
24     url: 'core/v4/keys/all',
25     method: 'get',
26     params,
27 });
29 export const getKeySalts = () => ({
30     url: 'core/v4/keys/salts',
31     method: 'get',
32 });
34 interface CreateUserKeyPayload {
35     Primary: number;
36     PrivateKey: string;
39 export const createUserKeyRoute = (data: CreateUserKeyPayload) => ({
40     url: 'core/v4/keys/user',
41     method: 'post',
42     data,
43 });
45 interface AddressKeyToken {
46     AddressKeyID: string;
47     KeyPacket: string;
48     Signature: string;
51 interface AddressTokensPayload {
52     AddressKeyTokens: AddressKeyToken[];
55 export const replaceAddressTokens = (data: AddressTokensPayload) => ({
56     url: 'core/v4/keys/tokens',
57     method: 'put',
58     data,
59 });
61 interface CreateAddressKeyPayload {
62     AddressID: string;
63     Primary: number;
64     PrivateKey: string;
65     SignedKeyList: SignedKeyList;
66     AddressForwardingID?: string;
67     GroupMemberID?: string;
70 export const createAddressKeyRoute = (data: CreateAddressKeyPayload) => ({
71     url: 'core/v4/keys',
72     method: 'post',
73     data,
74 });
76 interface CreateAddressKeyPayloadV2 extends CreateAddressKeyPayload {
77     Token: string;
78     Signature: string;
81 export const createAddressKeyRouteV2 = (data: CreateAddressKeyPayloadV2) => ({
82     url: 'core/v4/keys/address',
83     method: 'post',
84     data,
85 });
87 interface CreateGroupAddressKeyPayload {
88     AddressID: string;
89     PrivateKey: string;
90     OrgToken: string;
91     OrgSignature: string;
92     SignedKeyList: SignedKeyList;
95 export const createGroupAddressKeyRoute = (data: CreateGroupAddressKeyPayload) => ({
96     url: 'core/v4/keys/group',
97     method: 'post',
98     data,
99 });
101 export enum AddressActiveStatus {
102     INACTIVE = 0,
103     ACTIVE = 1,
106 export interface ActiveAddressKeyPayload {
107     AddressKeyID: string;
108     Active: AddressActiveStatus;
111 interface UpdateAddressActiveKeysRoutePayload {
112     AddressID: string;
113     Keys: ActiveAddressKeyPayload[];
114     SignedKeyList: SignedKeyList;
117 export const updateAddressActiveKeysRoute = (data: UpdateAddressActiveKeysRoutePayload) => ({
118     url: 'core/v4/keys/address/active',
119     method: 'put',
120     data,
123 interface BaseSetupKeysPayload {
124     PrimaryKey: string;
125     KeySalt: string;
126     AddressKeys: (AddressKeyPayload | AddressKeyPayloadV2)[];
129 interface UnprivatizationSetupKeysPayload extends BaseSetupKeysPayload {
130     OrgActivationToken: string;
131     OrgPrimaryUserKey: string;
134 type SetupKeysPayload = UnprivatizationSetupKeysPayload | BaseSetupKeysPayload;
136 export const setupKeys = (data: SetupKeysPayload, product: ProductParam) => ({
137     url: 'core/v4/keys/setup',
138     method: 'post',
139     timeout: 60_000,
140     data,
141     headers: getProductHeaders(product, {
142         endpoint: 'core/v4/keys/setup',
143         product,
144     }),
147 interface ActivateKeyPayload {
148     ID: string;
149     PrivateKey: string;
150     SignedKeyList: SignedKeyList;
153 export const activateKeyRoute = ({ ID, ...data }: ActivateKeyPayload) => ({
154     url: `core/v4/keys/${ID}/activate`,
155     method: 'put',
156     data,
159 interface ActivateKeyPayloadV2 extends ActivateKeyPayload {
160     Signature: string;
161     Token: string;
164 export const activateKeyRouteV2 = ({ ID, ...data }: ActivateKeyPayloadV2) => ({
165     url: `core/v4/keys/address/${ID}`,
166     method: 'put',
167     data,
170 export const reactiveLegacyAddressKeyRouteV2 = ({ ID, ...data }: ActivateKeyPayloadV2) => ({
171     url: `core/v4/keys/address/${ID}`,
172     method: 'put',
173     data,
176 interface ReactivateKeyPayload {
177     ID: string;
178     PrivateKey: string;
179     SignedKeyList?: SignedKeyList;
182 export const reactivateKeyRoute = ({ ID, PrivateKey, SignedKeyList }: ReactivateKeyPayload) => ({
183     url: `core/v4/keys/${ID}`,
184     method: 'put',
185     data: {
186         PrivateKey,
187         SignedKeyList,
188     },
191 interface ReactivateUserKeyPayloadV2 {
192     ID: string;
193     PrivateKey: string;
194     AddressKeyFingerprints: string[];
195     SignedKeyLists: {
196         [key: string]: SignedKeyList;
197     };
200 export const reactivateUserKeyRouteV2 = ({ ID, ...data }: ReactivateUserKeyPayloadV2) => ({
201     url: `core/v4/keys/user/${ID}`,
202     method: 'put',
203     data,
206 interface SetKeyPrimaryPayload {
207     ID: string;
208     SignedKeyList: SignedKeyList;
211 export const setKeyPrimaryRoute = ({ ID, ...data }: SetKeyPrimaryPayload) => ({
212     url: `core/v4/keys/${ID}/primary`,
213     method: 'put',
214     data,
217 interface SetKeyFlagsPayload {
218     ID: string;
219     Flags: number;
220     SignedKeyList: SignedKeyList;
223 export const setKeyFlagsRoute = ({ ID, ...data }: SetKeyFlagsPayload) => ({
224     url: `core/v4/keys/${ID}/flags`,
225     method: 'put',
226     data,
229 interface RemoveKeyPayload {
230     ID: string;
231     SignedKeyList: SignedKeyList;
234 export const removeKeyRoute = ({ ID, ...data }: RemoveKeyPayload) => ({
235     url: `core/v4/keys/${ID}/delete`,
236     method: 'put',
237     data,
240 export interface UpdatePrivateKeyPayload {
241     KeySalt: string;
242     Keys: { ID: string; PrivateKey: string }[];
243     OrganizationKey?: string;
244     PersistPasswordScope?: boolean;
247 export interface UpdatePrivateKeyPayloadV2 {
248     KeySalt: string;
249     UserKeys: { ID: string; PrivateKey: string }[];
250     OrganizationKey?: string;
251     PersistPasswordScope?: boolean;
254 export const updatePrivateKeyRoute = (data: UpdatePrivateKeyPayload | UpdatePrivateKeyPayloadV2) => ({
255     url: 'core/v4/keys/private',
256     method: 'put',
257     data,
260 export interface ResetKeysPayload {
261     Username: string;
262     Token: string;
263     KeySalt: string;
266 export interface ResetKeysPayloadWithKeys extends ResetKeysPayload {
267     PrimaryKey: string;
268     AddressKeys: AddressKeyPayload[];
271 export interface ResetKeysPayloadV2 extends ResetKeysPayload {
272     PrimaryKey: string;
273     AddressKeys: AddressKeyPayloadV2[];
276 export const resetKeysRoute = (data: ResetKeysPayloadWithKeys | ResetKeysPayloadV2 | ResetKeysPayload) => ({
277     url: 'core/v4/keys/reset',
278     method: 'post',
279     data,
282 interface UpgradeKeyPayload {
283     ID: string;
284     PrivateKey: string;
287 interface UpgradeKeysPayload {
288     KeySalt: string;
289     Keys: UpgradeKeyPayload[];
290     OrganizationKey?: string;
293 export interface UpgradeAddressKeyPayload {
294     ID: string;
295     PrivateKey: string;
296     Token: string;
297     Signature: string;
300 interface UpgradeKeysPayloadV2 {
301     KeySalt: string;
302     UserKeys: UpgradeKeyPayload[];
303     AddressKeys: UpgradeAddressKeyPayload[];
304     OrganizationKey?: string;
305     SignedKeyLists: {
306         [key: string]: SignedKeyList;
307     };
310 export const upgradeKeysRoute = (data: UpgradeKeysPayload | UpgradeKeysPayloadV2) => ({
311     url: 'core/v4/keys/private/upgrade',
312     method: 'post',
313     data,
316 export interface MigrateAddressKeyPayload {
317     ID: string;
318     Token: string;
319     Signature: string;
320     PrivateKey: string;
323 export interface MigrateAddressKeysPayload {
324     AddressKeys: MigrateAddressKeyPayload[];
325     SignedKeyLists: { [key: string]: SignedKeyList };
328 export const migrateAddressKeysRoute = (data: MigrateAddressKeysPayload) => ({
329     url: 'core/v4/keys/migrate',
330     method: 'post',
331     data,
334 export interface GetSignedKeyListsParams {
335     AfterRevision?: number;
336     Identifier: string;
339 export const getSignedKeyListsRoute = (params: GetSignedKeyListsParams) => ({
340     url: 'core/v4/keys/signedkeylists',
341     method: 'get',
342     params,
345 export interface GetSignedKeyListParams {
346     Revision: number;
347     Identifier: string;
350 export const getSignedKeyListRoute = (params: GetSignedKeyListParams) => ({
351     url: 'keys/signedkeylist',
352     method: 'get',
353     params,
356 export interface UpdateSignedKeyListPayload {
357     AddressID: string;
358     SignedKeyList: SignedKeyList;
361 export const updateSignedKeyListRoute = (data: UpdateSignedKeyListPayload) => ({
362     url: 'core/v4/keys/signedkeylists',
363     method: 'post',
364     data,
367 export interface UpdateSignedKeyListSignatureData {
368     AddressID: string;
369     Revision: number;
370     Signature: string;
373 export const updateSignedKeyListSignatureRoute = (data: UpdateSignedKeyListSignatureData) => ({
374     url: 'core/v4/keys/signedkeylists/signature',
375     method: 'put',
376     data,