Files
Desktop/ts/types/groups.std.ts
Fedor Indutny 44076ece79 Rename files
2025-10-16 23:45:44 -07:00

157 lines
4.2 KiB
TypeScript

// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { ServiceIdString, AciString, PniString } from './ServiceId.std.js';
export const ID_V1_LENGTH = 16;
export const ID_LENGTH = 32;
type GroupV2AccessCreateChangeType = {
type: 'create';
};
type GroupV2AccessAttributesChangeType = {
type: 'access-attributes';
newPrivilege: number;
};
type GroupV2AccessMembersChangeType = {
type: 'access-members';
newPrivilege: number;
};
type GroupV2AccessInviteLinkChangeType = {
type: 'access-invite-link';
newPrivilege: number;
};
type GroupV2AnnouncementsOnlyChangeType = {
type: 'announcements-only';
announcementsOnly: boolean;
};
type GroupV2AvatarChangeType = {
type: 'avatar';
removed: boolean;
};
type GroupV2TitleChangeType = {
type: 'title';
// Allow for null, because the title could be removed entirely
newTitle?: string;
};
type GroupV2GroupLinkAddChangeType = {
type: 'group-link-add';
privilege: number;
};
type GroupV2GroupLinkResetChangeType = {
type: 'group-link-reset';
};
type GroupV2GroupLinkRemoveChangeType = {
type: 'group-link-remove';
};
// No disappearing messages timer change type - message.expirationTimerUpdate used instead
type GroupV2MemberAddChangeType = {
type: 'member-add';
aci: AciString;
};
type GroupV2MemberAddFromInviteChangeType = {
type: 'member-add-from-invite';
aci: AciString;
pni?: PniString;
inviter?: AciString;
};
type GroupV2MemberAddFromLinkChangeType = {
type: 'member-add-from-link';
aci: AciString;
};
type GroupV2MemberAddFromAdminApprovalChangeType = {
type: 'member-add-from-admin-approval';
aci: AciString;
};
type GroupV2MemberPrivilegeChangeType = {
type: 'member-privilege';
aci: AciString;
newPrivilege: number;
};
type GroupV2MemberRemoveChangeType = {
type: 'member-remove';
aci: AciString;
};
type GroupV2PendingAddOneChangeType = {
type: 'pending-add-one';
serviceId: ServiceIdString;
};
type GroupV2PendingAddManyChangeType = {
type: 'pending-add-many';
count: number;
};
// Note: pending-remove is only used if user didn't also join the group at the same time
type GroupV2PendingRemoveOneChangeType = {
type: 'pending-remove-one';
serviceId?: ServiceIdString;
inviter?: AciString;
};
// Note: pending-remove is only used if user didn't also join the group at the same time
type GroupV2PendingRemoveManyChangeType = {
type: 'pending-remove-many';
count: number;
inviter?: AciString;
};
type GroupV2AdminApprovalAddOneChangeType = {
type: 'admin-approval-add-one';
aci: AciString;
};
// Note: admin-approval-remove-one is only used if user didn't also join the group at
// the same time
type GroupV2AdminApprovalRemoveOneChangeType = {
type: 'admin-approval-remove-one';
aci: AciString;
inviter?: AciString;
};
type GroupV2AdminApprovalBounceChangeType = {
type: 'admin-approval-bounce';
times: number;
isApprovalPending: boolean;
aci: AciString;
};
export type GroupV2DescriptionChangeType = {
type: 'description';
removed?: boolean;
// Adding this field; cannot remove previous field for backwards compatibility
description?: string;
};
export type GroupV2SummaryType = {
type: 'summary';
};
export type GroupV2ChangeDetailType =
| GroupV2AccessAttributesChangeType
| GroupV2AccessCreateChangeType
| GroupV2AccessInviteLinkChangeType
| GroupV2AccessMembersChangeType
| GroupV2AdminApprovalAddOneChangeType
| GroupV2AdminApprovalRemoveOneChangeType
| GroupV2AdminApprovalBounceChangeType
| GroupV2AnnouncementsOnlyChangeType
| GroupV2AvatarChangeType
| GroupV2DescriptionChangeType
| GroupV2GroupLinkAddChangeType
| GroupV2GroupLinkRemoveChangeType
| GroupV2GroupLinkResetChangeType
| GroupV2MemberAddChangeType
| GroupV2MemberAddFromAdminApprovalChangeType
| GroupV2MemberAddFromInviteChangeType
| GroupV2MemberAddFromLinkChangeType
| GroupV2MemberPrivilegeChangeType
| GroupV2MemberRemoveChangeType
| GroupV2PendingAddManyChangeType
| GroupV2PendingAddOneChangeType
| GroupV2PendingRemoveManyChangeType
| GroupV2PendingRemoveOneChangeType
| GroupV2SummaryType
| GroupV2TitleChangeType;
export type GroupV2ChangeType = {
from?: ServiceIdString;
details: ReadonlyArray<GroupV2ChangeDetailType>;
};