Group V2 invite links: in-conversation messages

This commit is contained in:
Scott Nonnenberg 2020-12-18 11:27:43 -08:00
parent 8e7379a591
commit 272e6cc614
10 changed files with 1775 additions and 206 deletions

94
ts/textsecure.d.ts vendored
View file

@ -169,13 +169,15 @@ type DeviceNameProtobufTypes = {
type GroupsProtobufTypes = {
AvatarUploadAttributes: typeof AvatarUploadAttributesClass;
Member: typeof MemberClass;
PendingMember: typeof PendingMemberClass;
MemberPendingProfileKey: typeof MemberPendingProfileKeyClass;
MemberPendingAdminApproval: typeof MemberPendingAdminApprovalClass;
AccessControl: typeof AccessControlClass;
Group: typeof GroupClass;
GroupChange: typeof GroupChangeClass;
GroupChanges: typeof GroupChangesClass;
GroupAttributeBlob: typeof GroupAttributeBlobClass;
GroupExternalCredential: typeof GroupExternalCredentialClass;
GroupInviteLink: typeof GroupInviteLinkClass;
};
type SignalServiceProtobufTypes = {
@ -227,7 +229,7 @@ type ProtobufCollectionType = {
// with a type that the app can use. Being more rigorous with these
// types would require code changes, out of scope for now.
export type ProtoBinaryType = any;
type ProtoBigNumberType = any;
export type ProtoBigNumberType = any;
// Groups.proto
@ -272,17 +274,29 @@ export declare namespace MemberClass {
}
}
export declare class PendingMemberClass {
export declare class MemberPendingProfileKeyClass {
static decode: (
data: ArrayBuffer | ByteBufferClass,
encoding?: string
) => PendingMemberClass;
) => MemberPendingProfileKeyClass;
member?: MemberClass;
addedByUserId?: ProtoBinaryType;
timestamp?: ProtoBigNumberType;
}
export declare class MemberPendingAdminApprovalClass {
static decode: (
data: ArrayBuffer | ByteBufferClass,
encoding?: string
) => MemberPendingProfileKeyClass;
userId?: ProtoBinaryType;
profileKey?: ProtoBinaryType;
presentation?: ProtoBinaryType;
timestamp?: ProtoBigNumberType;
}
export declare class AccessControlClass {
static decode: (
data: ArrayBuffer | ByteBufferClass,
@ -291,6 +305,7 @@ export declare class AccessControlClass {
attributes?: AccessRequiredEnum;
members?: AccessRequiredEnum;
addFromInviteLink?: AccessRequiredEnum;
}
export type AccessRequiredEnum = number;
@ -298,10 +313,11 @@ export type AccessRequiredEnum = number;
// Note: we need to use namespaces to express nested classes in Typescript
export declare namespace AccessControlClass {
class AccessRequired {
static ANY: number;
static UNKNOWN: number;
static ANY: number;
static MEMBER: number;
static ADMINISTRATOR: number;
static UNSATISFIABLE: number;
}
}
@ -319,7 +335,9 @@ export declare class GroupClass {
accessControl?: AccessControlClass;
version?: number;
members?: Array<MemberClass>;
pendingMembers?: Array<PendingMemberClass>;
membersPendingProfileKey?: Array<MemberPendingProfileKeyClass>;
membersPendingAdminApproval?: Array<MemberPendingAdminApprovalClass>;
inviteLinkPassword?: ProtoBinaryType;
}
export declare class GroupChangeClass {
@ -351,18 +369,31 @@ export declare namespace GroupChangeClass {
modifyMemberProfileKeys?: Array<
GroupChangeClass.Actions.ModifyMemberProfileKeyAction
>;
addPendingMembers?: Array<GroupChangeClass.Actions.AddPendingMemberAction>;
addPendingMembers?: Array<
GroupChangeClass.Actions.AddMemberPendingProfileKeyAction
>;
deletePendingMembers?: Array<
GroupChangeClass.Actions.DeletePendingMemberAction
GroupChangeClass.Actions.DeleteMemberPendingProfileKeyAction
>;
promotePendingMembers?: Array<
GroupChangeClass.Actions.PromotePendingMemberAction
GroupChangeClass.Actions.PromoteMemberPendingProfileKeyAction
>;
modifyTitle?: GroupChangeClass.Actions.ModifyTitleAction;
modifyAvatar?: GroupChangeClass.Actions.ModifyAvatarAction;
modifyDisappearingMessagesTimer?: GroupChangeClass.Actions.ModifyDisappearingMessagesTimerAction;
modifyAttributesAccess?: GroupChangeClass.Actions.ModifyAttributesAccessControlAction;
modifyMemberAccess?: GroupChangeClass.Actions.ModifyMembersAccessControlAction;
modifyAddFromInviteLinkAccess?: GroupChangeClass.Actions.ModifyAddFromInviteLinkAccessControlAction;
addMemberPendingAdminApprovals?: Array<
GroupChangeClass.Actions.AddMemberPendingAdminApprovalAction
>;
deleteMemberPendingAdminApprovals?: Array<
GroupChangeClass.Actions.DeleteMemberPendingAdminApprovalAction
>;
promoteMemberPendingAdminApprovals?: Array<
GroupChangeClass.Actions.PromoteMemberPendingAdminApprovalAction
>;
modifyInviteLinkPassword?: GroupChangeClass.Actions.ModifyInviteLinkPasswordAction;
}
}
@ -370,6 +401,7 @@ export declare namespace GroupChangeClass {
export declare namespace GroupChangeClass.Actions {
class AddMemberAction {
added?: MemberClass;
joinFromInviteLink?: boolean;
}
class DeleteMemberAction {
@ -389,15 +421,15 @@ export declare namespace GroupChangeClass.Actions {
uuid: string;
}
class AddPendingMemberAction {
added?: PendingMemberClass;
class AddMemberPendingProfileKeyAction {
added?: MemberPendingProfileKeyClass;
}
class DeletePendingMemberAction {
class DeleteMemberPendingProfileKeyAction {
deletedUserId?: ProtoBinaryType;
}
class PromotePendingMemberAction {
class PromoteMemberPendingProfileKeyAction {
presentation?: ProtoBinaryType;
// The result of decryption
@ -405,6 +437,19 @@ export declare namespace GroupChangeClass.Actions {
uuid: string;
}
class AddMemberPendingAdminApprovalAction {
added?: MemberPendingAdminApprovalClass;
}
class DeleteMemberPendingAdminApprovalAction {
deletedUserId?: ProtoBinaryType;
}
class PromoteMemberPendingAdminApprovalAction {
userId?: ProtoBinaryType;
role?: MemberRoleEnum;
}
class ModifyTitleAction {
title?: ProtoBinaryType;
}
@ -424,6 +469,14 @@ export declare namespace GroupChangeClass.Actions {
class ModifyMembersAccessControlAction {
membersAccess?: AccessRequiredEnum;
}
class ModifyAddFromInviteLinkAccessControlAction {
addFromInviteLinkAccess?: AccessRequiredEnum;
}
class ModifyInviteLinkPasswordAction {
inviteLinkPassword?: ProtoBinaryType;
}
}
export declare class GroupChangesClass {
@ -452,6 +505,21 @@ export declare class GroupExternalCredentialClass {
token?: string;
}
export declare class GroupInviteLinkClass {
v1Contents?: GroupInviteLinkClass.GroupInviteLinkContentsV1;
// Note: this isn't part of the proto, but our protobuf library tells us which
// field has been set with this prop.
contents?: 'v1Contents';
}
export declare namespace GroupInviteLinkClass {
class GroupInviteLinkContentsV1 {
groupMasterKey?: ProtoBinaryType;
inviteLinkPassword?: ProtoBinaryType;
}
}
export declare class GroupAttributeBlobClass {
static decode: (
data: ArrayBuffer | ByteBufferClass,