2022-03-04 21:14:52 +00:00
|
|
|
// Copyright 2020-2022 Signal Messenger, LLC
|
2020-10-30 20:34:04 +00:00
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2020-07-27 18:15:32 +00:00
|
|
|
import * as Backbone from 'backbone';
|
2020-07-10 18:28:49 +00:00
|
|
|
|
2020-09-09 02:25:05 +00:00
|
|
|
import { GroupV2ChangeType } from './groups';
|
2020-11-03 01:19:52 +00:00
|
|
|
import { LocalizerType, BodyRangeType, BodyRangesType } from './types/Util';
|
2020-12-07 20:43:19 +00:00
|
|
|
import { CallHistoryDetailsFromDiskType } from './types/Calling';
|
2021-05-28 16:15:17 +00:00
|
|
|
import { CustomColorType } from './types/Colors';
|
2021-05-25 22:40:04 +00:00
|
|
|
import { DeviceType } from './textsecure/Types';
|
2020-07-10 18:28:49 +00:00
|
|
|
import { SendOptionsType } from './textsecure/SendMessage';
|
2021-05-06 00:09:29 +00:00
|
|
|
import { SendMessageChallengeData } from './textsecure/Errors';
|
2020-09-24 20:57:54 +00:00
|
|
|
import { UserMessage } from './types/Message';
|
|
|
|
import { MessageModel } from './models/messages';
|
|
|
|
import { ConversationModel } from './models/conversations';
|
|
|
|
import { ProfileNameChangeType } from './util/getStringForProfileChange';
|
2020-11-20 17:30:45 +00:00
|
|
|
import { CapabilitiesType } from './textsecure/WebAPI';
|
2021-08-12 18:15:55 +00:00
|
|
|
import { ReadStatus } from './messages/MessageReadStatus';
|
2021-07-19 22:44:49 +00:00
|
|
|
import {
|
|
|
|
SendState,
|
|
|
|
SendStateByConversationId,
|
|
|
|
} from './messages/MessageSendState';
|
2021-06-01 23:30:25 +00:00
|
|
|
import { GroupNameCollisionsWithIdsByTitle } from './util/groupMemberNameCollisions';
|
2021-06-08 21:31:35 +00:00
|
|
|
import { ConversationColorType } from './types/Colors';
|
2021-11-15 21:54:33 +00:00
|
|
|
import {
|
|
|
|
AttachmentDraftType,
|
|
|
|
AttachmentType,
|
|
|
|
ThumbnailType,
|
|
|
|
} from './types/Attachment';
|
2021-08-20 01:56:39 +00:00
|
|
|
import { EmbeddedContactType } from './types/EmbeddedContact';
|
2021-07-13 18:54:53 +00:00
|
|
|
import { SignalService as Proto } from './protobuf';
|
2021-08-06 00:17:05 +00:00
|
|
|
import { AvatarDataType } from './types/Avatar';
|
2021-10-26 22:59:08 +00:00
|
|
|
import { UUIDStringType } from './types/UUID';
|
2021-10-29 23:19:44 +00:00
|
|
|
import { ReactionSource } from './reactions/ReactionSource';
|
2021-07-13 18:54:53 +00:00
|
|
|
|
|
|
|
import AccessRequiredEnum = Proto.AccessControl.AccessRequired;
|
|
|
|
import MemberRoleEnum = Proto.Member.Role;
|
2020-07-27 18:15:32 +00:00
|
|
|
|
2020-09-24 20:57:54 +00:00
|
|
|
export type WhatIsThis = any;
|
|
|
|
|
2021-06-17 17:15:10 +00:00
|
|
|
export type LastMessageStatus =
|
|
|
|
| 'paused'
|
|
|
|
| 'error'
|
|
|
|
| 'partial-sent'
|
|
|
|
| 'sending'
|
|
|
|
| 'sent'
|
|
|
|
| 'delivered'
|
2021-07-27 15:42:25 +00:00
|
|
|
| 'read'
|
|
|
|
| 'viewed';
|
2020-07-27 18:15:32 +00:00
|
|
|
|
|
|
|
type TaskResultType = any;
|
|
|
|
|
2021-12-08 19:52:46 +00:00
|
|
|
export type SenderKeyInfoType = {
|
|
|
|
createdAtDate: number;
|
|
|
|
distributionId: string;
|
|
|
|
memberDevices: Array<DeviceType>;
|
|
|
|
};
|
|
|
|
|
2021-01-14 18:07:05 +00:00
|
|
|
export type CustomError = Error & {
|
2020-09-24 20:57:54 +00:00
|
|
|
identifier?: string;
|
|
|
|
number?: string;
|
2021-05-06 00:09:29 +00:00
|
|
|
data?: object;
|
|
|
|
retryAfter?: number;
|
2021-01-14 18:07:05 +00:00
|
|
|
};
|
2020-09-24 20:57:54 +00:00
|
|
|
|
2020-12-01 23:45:39 +00:00
|
|
|
export type GroupMigrationType = {
|
|
|
|
areWeInvited: boolean;
|
|
|
|
droppedMemberIds: Array<string>;
|
|
|
|
invitedMembers: Array<GroupV2PendingMemberType>;
|
|
|
|
};
|
|
|
|
|
2022-03-04 21:14:52 +00:00
|
|
|
export type PreviewMessageType = Array<WhatIsThis>;
|
|
|
|
|
2021-04-14 22:15:57 +00:00
|
|
|
export type QuotedMessageType = {
|
|
|
|
attachments: Array<typeof window.WhatIsThis>;
|
|
|
|
// `author` is an old attribute that holds the author's E164. We shouldn't use it for
|
|
|
|
// new messages, but old messages might have this attribute.
|
|
|
|
author?: string;
|
2021-06-25 16:08:16 +00:00
|
|
|
authorUuid?: string;
|
|
|
|
bodyRanges?: BodyRangesType;
|
2021-07-09 19:36:10 +00:00
|
|
|
id: number;
|
2021-04-14 22:15:57 +00:00
|
|
|
referencedMessageNotFound: boolean;
|
2021-06-02 16:42:19 +00:00
|
|
|
isViewOnce: boolean;
|
2021-06-25 16:08:16 +00:00
|
|
|
text?: string;
|
|
|
|
messageId: string;
|
2021-04-14 22:15:57 +00:00
|
|
|
};
|
|
|
|
|
2022-03-16 17:30:14 +00:00
|
|
|
type StoryReplyContextType = {
|
|
|
|
attachment?: AttachmentType;
|
|
|
|
authorUuid?: string;
|
|
|
|
messageId: string;
|
|
|
|
};
|
|
|
|
|
2022-03-04 21:14:52 +00:00
|
|
|
export type StickerMessageType = {
|
|
|
|
packId: string;
|
|
|
|
stickerId: number;
|
|
|
|
packKey: string;
|
|
|
|
data?: AttachmentType;
|
|
|
|
};
|
|
|
|
|
2021-05-06 00:09:29 +00:00
|
|
|
export type RetryOptions = Readonly<{
|
|
|
|
type: 'session-reset';
|
|
|
|
uuid: string;
|
|
|
|
e164: string;
|
|
|
|
now: number;
|
|
|
|
}>;
|
|
|
|
|
2021-06-23 16:14:11 +00:00
|
|
|
export type GroupV1Update = {
|
|
|
|
avatarUpdated?: boolean;
|
|
|
|
joined?: Array<string>;
|
|
|
|
left?: string | 'You';
|
|
|
|
name?: string;
|
|
|
|
};
|
|
|
|
|
2021-10-29 23:19:44 +00:00
|
|
|
export type MessageReactionType = {
|
|
|
|
emoji: undefined | string;
|
|
|
|
fromId: string;
|
|
|
|
targetAuthorUuid: string;
|
|
|
|
targetTimestamp: number;
|
|
|
|
timestamp: number;
|
|
|
|
isSentByConversationId?: Record<string, boolean>;
|
|
|
|
};
|
|
|
|
|
2020-09-11 19:37:01 +00:00
|
|
|
export type MessageAttributesType = {
|
2021-06-17 17:15:10 +00:00
|
|
|
bodyPending?: boolean;
|
|
|
|
bodyRanges?: BodyRangesType;
|
|
|
|
callHistoryDetails?: CallHistoryDetailsFromDiskType;
|
|
|
|
changedId?: string;
|
2021-09-24 00:49:05 +00:00
|
|
|
dataMessage?: Uint8Array | null;
|
2021-06-17 17:15:10 +00:00
|
|
|
decrypted_at?: number;
|
|
|
|
deletedForEveryone?: boolean;
|
2020-09-29 22:55:56 +00:00
|
|
|
deletedForEveryoneTimestamp?: number;
|
2021-04-05 22:18:19 +00:00
|
|
|
errors?: Array<CustomError>;
|
2021-06-17 17:15:10 +00:00
|
|
|
expirationStartTimestamp?: number | null;
|
|
|
|
expireTimer?: number;
|
2020-12-01 23:45:39 +00:00
|
|
|
groupMigration?: GroupMigrationType;
|
2021-06-23 16:14:11 +00:00
|
|
|
group_update?: GroupV1Update;
|
2021-06-17 17:15:10 +00:00
|
|
|
hasAttachments?: boolean;
|
|
|
|
hasFileAttachments?: boolean;
|
|
|
|
hasVisualMediaAttachments?: boolean;
|
|
|
|
isErased?: boolean;
|
|
|
|
isTapToViewInvalid?: boolean;
|
|
|
|
isViewOnce?: boolean;
|
|
|
|
key_changed?: string;
|
|
|
|
local?: boolean;
|
|
|
|
logger?: unknown;
|
|
|
|
message?: unknown;
|
|
|
|
messageTimer?: unknown;
|
|
|
|
profileChange?: ProfileNameChangeType;
|
2021-04-14 22:15:57 +00:00
|
|
|
quote?: QuotedMessageType;
|
2021-10-29 23:19:44 +00:00
|
|
|
reactions?: Array<MessageReactionType>;
|
2021-06-17 17:15:10 +00:00
|
|
|
requiredProtocolVersion?: number;
|
2021-05-06 00:09:29 +00:00
|
|
|
retryOptions?: RetryOptions;
|
2021-08-02 21:55:31 +00:00
|
|
|
sourceDevice?: number;
|
2021-12-08 19:52:46 +00:00
|
|
|
storyId?: string;
|
2022-03-16 17:30:14 +00:00
|
|
|
storyReplyContext?: StoryReplyContextType;
|
2021-06-17 17:15:10 +00:00
|
|
|
supportedVersionAtReceive?: unknown;
|
|
|
|
synced?: boolean;
|
|
|
|
unidentifiedDeliveryReceived?: boolean;
|
|
|
|
verified?: boolean;
|
|
|
|
verifiedChanged?: string;
|
2020-09-24 20:57:54 +00:00
|
|
|
|
2020-07-27 18:15:32 +00:00
|
|
|
id: string;
|
2021-06-17 17:15:10 +00:00
|
|
|
type:
|
2021-04-05 22:18:19 +00:00
|
|
|
| 'call-history'
|
|
|
|
| 'chat-session-refreshed'
|
2021-05-28 19:11:19 +00:00
|
|
|
| 'delivery-issue'
|
|
|
|
| 'group'
|
2021-04-05 22:18:19 +00:00
|
|
|
| 'group-v1-migration'
|
|
|
|
| 'group-v2-change'
|
2021-05-28 19:11:19 +00:00
|
|
|
| 'incoming'
|
|
|
|
| 'keychange'
|
|
|
|
| 'message-history-unsynced'
|
|
|
|
| 'outgoing'
|
2021-04-05 22:18:19 +00:00
|
|
|
| 'profile-change'
|
2021-12-08 19:52:46 +00:00
|
|
|
| 'story'
|
2021-05-28 19:11:19 +00:00
|
|
|
| 'timer-notification'
|
2021-06-01 20:45:43 +00:00
|
|
|
| 'universal-timer-notification'
|
2021-08-05 23:34:49 +00:00
|
|
|
| 'change-number-notification'
|
2021-05-28 19:11:19 +00:00
|
|
|
| 'verified-change';
|
2021-06-17 17:15:10 +00:00
|
|
|
body?: string;
|
|
|
|
attachments?: Array<AttachmentType>;
|
2022-03-04 21:14:52 +00:00
|
|
|
preview?: PreviewMessageType;
|
|
|
|
sticker?: StickerMessageType;
|
2021-05-03 16:38:20 +00:00
|
|
|
sent_at: number;
|
2021-06-17 17:15:10 +00:00
|
|
|
unidentifiedDeliveries?: Array<string>;
|
2021-08-20 01:56:39 +00:00
|
|
|
contact?: Array<EmbeddedContactType>;
|
2020-09-24 20:57:54 +00:00
|
|
|
conversationId: string;
|
2021-06-17 17:15:10 +00:00
|
|
|
reaction?: WhatIsThis;
|
2020-09-09 02:25:05 +00:00
|
|
|
|
|
|
|
expirationTimerUpdate?: {
|
|
|
|
expireTimer: number;
|
2020-09-24 20:57:54 +00:00
|
|
|
fromSync?: unknown;
|
2020-09-09 02:25:05 +00:00
|
|
|
source?: string;
|
|
|
|
sourceUuid?: string;
|
|
|
|
};
|
|
|
|
// Legacy fields for timer update notification only
|
|
|
|
flags?: number;
|
|
|
|
groupV2Change?: GroupV2ChangeType;
|
|
|
|
// Required. Used to sort messages in the database for the conversation timeline.
|
2021-04-05 22:18:19 +00:00
|
|
|
received_at: number;
|
2021-03-04 21:44:57 +00:00
|
|
|
received_at_ms?: number;
|
2020-09-09 02:25:05 +00:00
|
|
|
// More of a legacy feature, needed as we were updating the schema of messages in the
|
|
|
|
// background, when we were still in IndexedDB, before attachments had gone to disk
|
|
|
|
// We set this so that the idle message upgrade process doesn't pick this message up
|
2021-06-17 17:15:10 +00:00
|
|
|
schemaVersion?: number;
|
2021-05-27 20:17:05 +00:00
|
|
|
// This should always be set for new messages, but older messages may not have them. We
|
|
|
|
// may not have these for outbound messages, either, as we have not needed them.
|
|
|
|
serverGuid?: string;
|
2020-09-09 02:25:05 +00:00
|
|
|
serverTimestamp?: number;
|
2020-09-24 20:57:54 +00:00
|
|
|
source?: string;
|
2021-10-26 22:59:08 +00:00
|
|
|
sourceUuid?: UUIDStringType;
|
2020-07-27 18:15:32 +00:00
|
|
|
|
2020-09-24 20:57:54 +00:00
|
|
|
timestamp: number;
|
2020-12-01 23:45:39 +00:00
|
|
|
|
|
|
|
// Backwards-compatibility with prerelease data schema
|
|
|
|
invitedGV2Members?: Array<GroupV2PendingMemberType>;
|
|
|
|
droppedGV2MemberIds?: Array<string>;
|
2021-07-09 19:36:10 +00:00
|
|
|
|
|
|
|
sendHQImages?: boolean;
|
2021-07-19 22:44:49 +00:00
|
|
|
|
2021-08-12 18:15:55 +00:00
|
|
|
// Should only be present for incoming messages
|
|
|
|
readStatus?: ReadStatus;
|
|
|
|
|
2021-07-19 22:44:49 +00:00
|
|
|
// Should only be present for outgoing messages
|
|
|
|
sendStateByConversationId?: SendStateByConversationId;
|
2022-03-04 19:22:31 +00:00
|
|
|
|
|
|
|
// Should only be present for messages deleted for everyone
|
|
|
|
deletedForEveryoneSendStatus?: Record<string, boolean>;
|
|
|
|
deletedForEveryoneFailed?: boolean;
|
2020-09-24 20:57:54 +00:00
|
|
|
};
|
2020-07-27 18:15:32 +00:00
|
|
|
|
2020-09-24 20:57:54 +00:00
|
|
|
export type ConversationAttributesTypeType = 'private' | 'group';
|
2020-07-27 18:15:32 +00:00
|
|
|
|
2022-03-09 20:23:21 +00:00
|
|
|
export type ConversationLastProfileType = Readonly<{
|
|
|
|
profileKey: string;
|
|
|
|
profileKeyVersion: string;
|
|
|
|
}>;
|
|
|
|
|
2020-09-11 19:37:01 +00:00
|
|
|
export type ConversationAttributesType = {
|
2021-04-05 22:18:19 +00:00
|
|
|
accessKey?: string | null;
|
2020-10-06 17:06:34 +00:00
|
|
|
addedBy?: string;
|
2021-11-02 23:01:13 +00:00
|
|
|
badges?: Array<
|
|
|
|
| { id: string }
|
|
|
|
| {
|
|
|
|
id: string;
|
|
|
|
expiresAt: number;
|
|
|
|
isVisible: boolean;
|
|
|
|
}
|
|
|
|
>;
|
2020-11-20 17:30:45 +00:00
|
|
|
capabilities?: CapabilitiesType;
|
2020-10-16 18:31:57 +00:00
|
|
|
color?: string;
|
2021-06-08 21:31:35 +00:00
|
|
|
conversationColor?: ConversationColorType;
|
2021-05-28 16:15:17 +00:00
|
|
|
customColor?: CustomColorType;
|
|
|
|
customColorId?: string;
|
2021-02-11 19:21:20 +00:00
|
|
|
discoveredUnregisteredAt?: number;
|
2021-08-30 21:32:56 +00:00
|
|
|
draftChanged?: boolean;
|
2021-11-15 21:54:33 +00:00
|
|
|
draftAttachments?: Array<AttachmentDraftType>;
|
2021-04-05 22:18:19 +00:00
|
|
|
draftBodyRanges?: Array<BodyRangeType>;
|
|
|
|
draftTimestamp?: number | null;
|
2022-03-04 21:14:52 +00:00
|
|
|
hideStory?: boolean;
|
2020-09-24 20:57:54 +00:00
|
|
|
inbox_position: number;
|
2020-09-29 22:07:03 +00:00
|
|
|
isPinned: boolean;
|
2020-10-28 21:54:33 +00:00
|
|
|
lastMessageDeletedForEveryone: boolean;
|
2021-04-05 22:18:19 +00:00
|
|
|
lastMessageStatus?: LastMessageStatus | null;
|
2020-10-28 22:54:32 +00:00
|
|
|
markedUnread: boolean;
|
2020-09-24 20:57:54 +00:00
|
|
|
messageCount: number;
|
2021-04-05 22:18:19 +00:00
|
|
|
messageCountBeforeMessageRequests?: number | null;
|
|
|
|
messageRequestResponseType?: number;
|
|
|
|
muteExpiresAt?: number;
|
2021-08-05 12:35:33 +00:00
|
|
|
dontNotifyForMentionsIfMuted?: boolean;
|
2021-04-23 14:04:05 +00:00
|
|
|
profileAvatar?: null | {
|
|
|
|
hash: string;
|
|
|
|
path: string;
|
|
|
|
};
|
2021-04-05 22:18:19 +00:00
|
|
|
profileKeyCredential?: string | null;
|
2022-03-09 20:23:21 +00:00
|
|
|
lastProfile?: ConversationLastProfileType;
|
2021-04-05 22:18:19 +00:00
|
|
|
quotedMessageId?: string | null;
|
|
|
|
sealedSender?: unknown;
|
2020-09-24 20:57:54 +00:00
|
|
|
sentMessageCount: number;
|
2021-04-05 22:18:19 +00:00
|
|
|
sharedGroupNames?: Array<string>;
|
2020-09-24 20:57:54 +00:00
|
|
|
|
2020-07-27 18:15:32 +00:00
|
|
|
id: string;
|
2020-09-24 20:57:54 +00:00
|
|
|
type: ConversationAttributesTypeType;
|
2021-04-05 22:18:19 +00:00
|
|
|
timestamp?: number | null;
|
2020-07-27 18:15:32 +00:00
|
|
|
|
2020-09-09 02:25:05 +00:00
|
|
|
// Shared fields
|
2020-07-27 18:15:32 +00:00
|
|
|
active_at?: number | null;
|
2020-09-24 20:57:54 +00:00
|
|
|
draft?: string | null;
|
2022-03-29 01:10:08 +00:00
|
|
|
hasPostedStory?: boolean;
|
2020-07-27 18:15:32 +00:00
|
|
|
isArchived?: boolean;
|
2020-09-24 20:57:54 +00:00
|
|
|
lastMessage?: string | null;
|
2020-09-09 02:25:05 +00:00
|
|
|
name?: string;
|
2020-09-09 00:56:23 +00:00
|
|
|
needsStorageServiceSync?: boolean;
|
2020-07-27 18:15:32 +00:00
|
|
|
needsVerification?: boolean;
|
|
|
|
profileSharing: boolean;
|
|
|
|
storageID?: string;
|
2022-02-08 18:00:18 +00:00
|
|
|
storageVersion?: number;
|
2021-03-18 17:09:27 +00:00
|
|
|
storageUnknownFields?: string;
|
2020-07-27 18:15:32 +00:00
|
|
|
unreadCount?: number;
|
|
|
|
version: number;
|
2020-09-09 02:25:05 +00:00
|
|
|
|
|
|
|
// Private core info
|
2021-10-26 22:59:08 +00:00
|
|
|
uuid?: UUIDStringType;
|
2020-09-09 02:25:05 +00:00
|
|
|
e164?: string;
|
|
|
|
|
|
|
|
// Private other fields
|
2021-01-26 01:01:19 +00:00
|
|
|
about?: string;
|
|
|
|
aboutEmoji?: string;
|
2020-09-24 20:57:54 +00:00
|
|
|
profileFamilyName?: string;
|
|
|
|
profileKey?: string;
|
|
|
|
profileName?: string;
|
2020-09-09 02:25:05 +00:00
|
|
|
verified?: number;
|
2021-03-18 17:09:27 +00:00
|
|
|
profileLastFetchedAt?: number;
|
2021-06-01 20:45:43 +00:00
|
|
|
pendingUniversalTimer?: string;
|
2021-11-01 19:13:35 +00:00
|
|
|
username?: string;
|
2020-09-09 02:25:05 +00:00
|
|
|
|
|
|
|
// Group-only
|
|
|
|
groupId?: string;
|
2021-01-29 22:16:48 +00:00
|
|
|
// A shorthand, representing whether the user is part of the group. Not strictly for
|
|
|
|
// when the user manually left the group. But historically, that was the only way
|
|
|
|
// to leave a group.
|
2021-04-05 22:18:19 +00:00
|
|
|
left?: boolean;
|
2020-09-09 02:25:05 +00:00
|
|
|
groupVersion?: number;
|
|
|
|
|
|
|
|
// GroupV1 only
|
|
|
|
members?: Array<string>;
|
2020-11-20 17:30:45 +00:00
|
|
|
derivedGroupV2Id?: string;
|
2020-09-09 02:25:05 +00:00
|
|
|
|
|
|
|
// GroupV2 core info
|
|
|
|
masterKey?: string;
|
|
|
|
secretParams?: string;
|
|
|
|
publicParams?: string;
|
|
|
|
revision?: number;
|
2021-12-08 19:52:46 +00:00
|
|
|
senderKeyInfo?: SenderKeyInfoType;
|
2020-09-09 02:25:05 +00:00
|
|
|
|
|
|
|
// GroupV2 other fields
|
|
|
|
accessControl?: {
|
2020-12-01 23:45:39 +00:00
|
|
|
attributes: AccessRequiredEnum;
|
|
|
|
members: AccessRequiredEnum;
|
2020-12-18 19:27:43 +00:00
|
|
|
addFromInviteLink: AccessRequiredEnum;
|
2020-09-09 02:25:05 +00:00
|
|
|
};
|
2021-07-20 20:18:35 +00:00
|
|
|
announcementsOnly?: boolean;
|
2020-09-09 02:25:05 +00:00
|
|
|
avatar?: {
|
|
|
|
url: string;
|
|
|
|
path: string;
|
2021-01-29 22:16:48 +00:00
|
|
|
hash?: string;
|
2020-09-24 20:57:54 +00:00
|
|
|
} | null;
|
2021-08-06 00:17:05 +00:00
|
|
|
avatars?: Array<AvatarDataType>;
|
2021-06-02 00:24:28 +00:00
|
|
|
description?: string;
|
2020-09-09 02:25:05 +00:00
|
|
|
expireTimer?: number;
|
|
|
|
membersV2?: Array<GroupV2MemberType>;
|
|
|
|
pendingMembersV2?: Array<GroupV2PendingMemberType>;
|
2020-12-18 19:27:43 +00:00
|
|
|
pendingAdminApprovalV2?: Array<GroupV2PendingAdminApprovalType>;
|
2022-03-23 22:34:51 +00:00
|
|
|
bannedMembersV2?: Array<GroupV2BannedMemberType>;
|
2020-12-18 19:27:43 +00:00
|
|
|
groupInviteLinkPassword?: string;
|
2020-11-20 17:30:45 +00:00
|
|
|
previousGroupV1Id?: string;
|
|
|
|
previousGroupV1Members?: Array<string>;
|
2021-06-01 23:30:25 +00:00
|
|
|
acknowledgedGroupNameCollisions?: GroupNameCollisionsWithIdsByTitle;
|
2021-01-29 22:16:48 +00:00
|
|
|
|
|
|
|
// Used only when user is waiting for approval to join via link
|
|
|
|
isTemporary?: boolean;
|
|
|
|
temporaryMemberCount?: number;
|
2021-04-30 19:40:25 +00:00
|
|
|
|
|
|
|
// Avatars are blurred for some unapproved conversations, but users can manually unblur
|
|
|
|
// them. If the avatar was unblurred and then changed, we don't update this value so
|
|
|
|
// the new avatar gets blurred.
|
|
|
|
//
|
|
|
|
// This value is useless once the message request has been approved. We don't clean it
|
|
|
|
// up but could. We don't persist it but could (though we'd probably want to clean it
|
|
|
|
// up in that case).
|
|
|
|
unblurredAvatarPath?: string;
|
2020-09-09 02:25:05 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export type GroupV2MemberType = {
|
2021-10-26 22:59:08 +00:00
|
|
|
uuid: UUIDStringType;
|
2020-12-01 23:45:39 +00:00
|
|
|
role: MemberRoleEnum;
|
2020-09-09 02:25:05 +00:00
|
|
|
joinedAtVersion: number;
|
2020-12-18 19:27:43 +00:00
|
|
|
|
|
|
|
// Note that these are temporary flags, generated by applyGroupChange, but eliminated
|
|
|
|
// by applyGroupState. They are used to make our diff-generation more intelligent but
|
|
|
|
// not after that.
|
|
|
|
joinedFromLink?: boolean;
|
|
|
|
approvedByAdmin?: boolean;
|
2020-09-09 02:25:05 +00:00
|
|
|
};
|
2021-01-29 21:19:24 +00:00
|
|
|
|
2020-09-09 02:25:05 +00:00
|
|
|
export type GroupV2PendingMemberType = {
|
2021-10-26 22:59:08 +00:00
|
|
|
addedByUserId?: UUIDStringType;
|
|
|
|
uuid: UUIDStringType;
|
2020-09-09 02:25:05 +00:00
|
|
|
timestamp: number;
|
2020-12-01 23:45:39 +00:00
|
|
|
role: MemberRoleEnum;
|
2020-07-27 18:15:32 +00:00
|
|
|
};
|
2021-01-29 21:19:24 +00:00
|
|
|
|
2022-03-23 22:34:51 +00:00
|
|
|
export type GroupV2BannedMemberType = {
|
|
|
|
uuid: UUIDStringType;
|
|
|
|
timestamp: number;
|
|
|
|
};
|
|
|
|
|
2020-12-18 19:27:43 +00:00
|
|
|
export type GroupV2PendingAdminApprovalType = {
|
2021-10-26 22:59:08 +00:00
|
|
|
uuid: UUIDStringType;
|
2020-12-18 19:27:43 +00:00
|
|
|
timestamp: number;
|
|
|
|
};
|
2020-07-27 18:15:32 +00:00
|
|
|
|
2020-09-24 20:57:54 +00:00
|
|
|
export type VerificationOptions = {
|
2021-09-24 00:49:05 +00:00
|
|
|
key?: null | Uint8Array;
|
2020-09-09 00:56:23 +00:00
|
|
|
viaStorageServiceSync?: boolean;
|
|
|
|
};
|
|
|
|
|
2021-05-06 00:09:29 +00:00
|
|
|
export type ShallowChallengeError = CustomError & {
|
|
|
|
readonly retryAfter: number;
|
|
|
|
readonly data: SendMessageChallengeData;
|
|
|
|
};
|
|
|
|
|
2021-04-26 16:38:50 +00:00
|
|
|
export declare class ConversationModelCollectionType extends Backbone.Collection<ConversationModel> {
|
2020-07-27 18:15:32 +00:00
|
|
|
resetLookups(): void;
|
|
|
|
}
|
|
|
|
|
2021-04-26 16:38:50 +00:00
|
|
|
export declare class MessageModelCollectionType extends Backbone.Collection<MessageModel> {}
|
2021-05-13 19:10:20 +00:00
|
|
|
|
|
|
|
export type ReactionAttributesType = {
|
|
|
|
emoji: string;
|
|
|
|
remove?: boolean;
|
|
|
|
targetAuthorUuid: string;
|
|
|
|
targetTimestamp: number;
|
2021-10-13 16:29:15 +00:00
|
|
|
fromId: string;
|
2021-05-13 19:10:20 +00:00
|
|
|
timestamp: number;
|
2021-10-29 23:19:44 +00:00
|
|
|
source: ReactionSource;
|
2021-05-13 19:10:20 +00:00
|
|
|
};
|