Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / groups.ts
blobe5052a5a3c434aa3b662b8efff19c6549d13d7c1
1 import type {
2     Address,
3     GROUP_MEMBER_PERMISSIONS,
4     GroupFlags,
5     GroupMemberType,
6     GroupPermissions,
7     ProxyInstances,
8 } from '../interfaces';
10 interface GroupParameters {
11     Name: string;
12     Email: string;
13     ParentGroup?: string;
14     Permissions: number;
15     Description: string;
16     Flags: GroupFlags;
19 export const createGroup = (groupParams: GroupParameters) => ({
20     method: 'post',
21     url: 'core/v4/groups',
22     data: {
23         ...groupParams,
24     },
25 });
27 export const editGroup = (groupID: string, groupParams: Partial<GroupParameters>) => ({
28     method: 'put',
29     url: `core/v4/groups/${groupID}`,
30     data: {
31         ...groupParams,
32     },
33 });
35 export const deleteGroup = (groupID: string) => ({
36     method: 'delete',
37     url: `core/v4/groups/${groupID}`,
38 });
40 export interface GroupResult {
41     ID: string;
42     Name: string;
43     Description: string;
44     Address: Address;
45     CreateTime: number;
46     Permissions: GroupPermissions;
47     Flags: GroupFlags;
50 export const getGroups = () => ({
51     method: 'get',
52     url: 'core/v4/groups',
53 });
55 export const getGroupMembers = (groupID: string) => ({
56     method: 'get',
57     url: `core/v4/groups/${groupID}/members`,
58 });
60 export interface GroupMemberParameters {
61     Type: GroupMemberType;
62     GroupID: string; // encrypted
63     Email: string;
64     AddressSignaturePacket: string;
65     GroupMemberAddressPrivateKey?: string; // Only for internal E2EE member
66     ActivationToken?: string; // Only for internal E2EE member
67     ProxyInstances?: ProxyInstances[]; // Only for E2EE member
68     Token?: string;
69     Signature?: string;
70     Permissions?: GROUP_MEMBER_PERMISSIONS;
73 export const addGroupMember = (addMemberParams: GroupMemberParameters) => ({
74     method: 'post',
75     url: 'core/v4/groups/members',
76     data: {
77         ...addMemberParams,
78     },
79 });
81 export const updateGroupMember = (groupMemberID: string, groupMemberParams: Partial<GroupMemberParameters>) => ({
82     method: 'put',
83     url: `core/v4/groups/members/${groupMemberID}`,
84     data: {
85         ...groupMemberParams,
86     },
87 });
89 export const deleteGroupMember = (groupMemberID: string) => ({
90     method: 'delete',
91     url: `core/v4/groups/members/${groupMemberID}`,
92 });
94 export const deleteAllGroupMembers = (groupID: string) => ({
95     method: 'delete',
96     url: `core/v4/groups/members/${groupID}`,
97 });
99 export const resendGroupInvitation = (groupMemberID: string) => ({
100     method: 'put',
101     url: `core/v4/groups/members/${groupMemberID}/reinvite`,
104 export const getGroupMembership = () => ({
105     method: 'get',
106     url: `core/v4/groups/members/internal`,
109 export const getExternalGroupMembership = (jwt: string) => ({
110     method: 'get',
111     url: `core/v4/groups/members/external/${jwt}`,
114 export const acceptExternalGroupMembership = (jwt: string) => ({
115     method: 'put',
116     url: `core/v4/groups/external/${jwt}`,
119 export const declineExternalGroupMembership = (jwt: string) => ({
120     method: 'delete',
121     url: `core/v4/groups/external/${jwt}`,