chore: resolve compilation errors

pull/2963/head
Audric Ackermann 1 year ago
parent 3eac45d534
commit d839ff936d

@ -85,7 +85,7 @@ const handleAcceptConversationRequest = async (convoId: string) => {
await convo.commit();
if (convo.isPrivate()) {
await convo.addOutgoingApprovalMessage(Date.now());
await approveConvoAndSendResponse(convoId, true);
await approveConvoAndSendResponse(convoId);
} else if (PubKey.is03Pubkey(convoId)) {
const found = await UserGroupsWrapperActions.getGroup(convoId);
if (!found) {

@ -22,7 +22,6 @@ import {
getSortedMessagesOfSelectedConversation,
} from '../../state/selectors/conversations';
import { getSelectedConversationKey } from '../../state/selectors/selectedConversation';
import { ConversationMessageRequestButtons } from './MessageRequestButtons';
import { SessionMessagesList } from './SessionMessagesList';
import { TypingBubble } from './TypingBubble';

@ -2,8 +2,8 @@ import React from 'react';
import { useSelector } from 'react-redux';
import styled from 'styled-components';
import {
useConversationUsernameOrShorten,
useIsIncomingRequest,
useNicknameOrProfileNameOrShortenedPubkey,
} from '../../hooks/useParamSelector';
import { PubKey } from '../../session/types';
import {
@ -106,7 +106,7 @@ export const InvitedToGroupControlMessage = () => {
const groupName = useLibGroupInviteGroupName(selectedConversation) || window.i18n('unknown');
const conversationOrigin = useSelectedConversationIdOrigin();
const adminNameInvitedUs =
useConversationUsernameOrShorten(conversationOrigin) || window.i18n('unknown');
useNicknameOrProfileNameOrShortenedPubkey(conversationOrigin) || window.i18n('unknown');
const isGroupPendingInvite = useLibGroupInvitePending(selectedConversation);
if (
!selectedConversation ||

@ -21,6 +21,7 @@ import { TextWithChildren } from '../basic/Text';
import { ExpirableReadableMessage } from './message/message-item/ExpirableReadableMessage';
// eslint-disable-next-line import/order
import { ConversationInteraction } from '../../interactions';
import { ConvoHub } from '../../session/conversations';
import { updateConfirmModal } from '../../state/ducks/modalDialog';
import { SessionButtonColor } from '../basic/SessionButton';
import { SessionHtmlRenderer } from '../basic/SessionHTMLRenderer';

@ -13,7 +13,7 @@ import {
useSelectedIsKickedFromGroup,
useSelectedIsNoteToSelf,
useSelectedIsPublic,
useSelectedMembers,
useSelectedMembersCount,
useSelectedNicknameOrProfileNameOrShortenedPubkey,
useSelectedNotificationSetting,
useSelectedSubscriberCount,
@ -44,14 +44,13 @@ export const ConversationHeaderTitle = () => {
const isKickedFromGroup = useSelectedIsKickedFromGroup();
const isMe = useSelectedIsNoteToSelf();
const isGroup = useSelectedIsGroup();
const members = useSelectedMembers();
const selectedMembersCount = useSelectedMembersCount();
const expirationMode = useSelectedConversationDisappearingMode();
const expireTimer = useSelectedExpireTimer();
const [visibleSubtitle, setVisibleSubtitle] = useState<SubtitleStringsType>(
'disappearingMessages'
);
const [visibleSubtitle, setVisibleSubtitle] =
useState<SubtitleStringsType>('disappearingMessages');
const [subtitleStrings, setSubtitleStrings] = useState<SubtitleStrings>({});
const [subtitleArray, setSubtitleArray] = useState<Array<SubtitleStringsType>>([]);
@ -69,7 +68,7 @@ export const ConversationHeaderTitle = () => {
if (isPublic) {
memberCount = subscriberCount || 0;
} else {
memberCount = members.length;
memberCount = selectedMembersCount;
}
}
@ -79,7 +78,7 @@ export const ConversationHeaderTitle = () => {
}
return null;
}, [i18n, isGroup, isKickedFromGroup, isPublic, members.length, subscriberCount]);
}, [i18n, isGroup, isKickedFromGroup, isPublic, selectedMembersCount, subscriberCount]);
// TODO legacy messages support will be removed in a future release
// NOTE If disappearing messages is defined we must show it first
@ -88,12 +87,12 @@ export const ConversationHeaderTitle = () => {
expirationMode === 'deleteAfterRead'
? window.i18n('disappearingMessagesModeAfterRead')
: expirationMode === 'deleteAfterSend'
? window.i18n('disappearingMessagesModeAfterSend')
: expirationMode === 'legacy'
? isMe || (isGroup && !isPublic)
? window.i18n('disappearingMessagesModeAfterSend')
: window.i18n('disappearingMessagesModeAfterRead')
: null;
: expirationMode === 'legacy'
? isMe || (isGroup && !isPublic)
? window.i18n('disappearingMessagesModeAfterSend')
: window.i18n('disappearingMessagesModeAfterRead')
: null;
const abbreviatedExpireTime = isNumber(expireTimer)
? TimerOptions.getAbbreviated(expireTimer)

@ -1,5 +1,5 @@
import { isEqual } from 'lodash';
import React, { ReactElement, useState } from 'react';
import React, { useState } from 'react';
import useMount from 'react-use/lib/useMount';
import styled from 'styled-components';
@ -53,7 +53,7 @@ const ReactButton = styled.span`
}
`;
export const MessageReactBar = (props: Props): ReactElement => {
export const MessageReactBar = (props: Props) => {
const { action, additionalAction } = props;
const [recentReactions, setRecentReactions] = useState<RecentReactions>();

@ -1,8 +1,9 @@
import { isEmpty, isEqual } from 'lodash';
import React, { ReactElement, useEffect, useState } from 'react';
import React, { useEffect, useState } from 'react';
import styled from 'styled-components';
import { useMessageReactsPropsById } from '../../../../hooks/useParamSelector';
import { MessageRenderingProps } from '../../../../models/messageType';
import { REACT_LIMIT } from '../../../../session/constants';
import { useSelectedIsGroup } from '../../../../state/selectors/selectedConversation';
import { SortedReactionList } from '../../../../types/Reaction';
import { nativeEmojiData } from '../../../../util/emoji';
@ -10,7 +11,6 @@ import { Flex } from '../../../basic/Flex';
import { SessionIcon } from '../../../icon';
import { Reaction, ReactionProps } from '../reactions/Reaction';
import { StyledPopupContainer } from '../reactions/ReactionPopup';
import { REACT_LIMIT } from '../../../../session/constants';
export const popupXDefault = -81;
export const popupYDefault = -90;
@ -65,7 +65,7 @@ const StyledReadLess = styled.span`
type ReactionsProps = Omit<ReactionProps, 'emoji'>;
const Reactions = (props: ReactionsProps): ReactElement => {
const Reactions = (props: ReactionsProps) => {
const { messageId, reactions, inModal } = props;
return (
<StyledMessageReactions
@ -85,7 +85,7 @@ interface ExpandReactionsProps extends ReactionsProps {
handleExpand: () => void;
}
const CompressedReactions = (props: ExpandReactionsProps): ReactElement => {
const CompressedReactions = (props: ExpandReactionsProps) => {
const { messageId, reactions, inModal, handleExpand } = props;
return (
<StyledMessageReactions
@ -119,7 +119,7 @@ const CompressedReactions = (props: ExpandReactionsProps): ReactElement => {
);
};
const ExpandedReactions = (props: ExpandReactionsProps): ReactElement => {
const ExpandedReactions = (props: ExpandReactionsProps) => {
const { handleExpand } = props;
return (
<Flex container={true} flexDirection={'column'} alignItems={'center'} margin="4px 0 0">

@ -5,6 +5,7 @@ import styled from 'styled-components';
import { Data } from '../../../../data/data';
import { useMessageExpirationPropsById } from '../../../../hooks/useParamSelector';
import { MessageModelType } from '../../../../models/messageType';
import { ConvoHub } from '../../../../session/conversations';
import { PropsForExpiringMessage, messagesExpired } from '../../../../state/ducks/conversations';
import { getIncrement } from '../../../../util/timer';
import { ExpireTimer } from '../../ExpireTimer';

@ -1,4 +1,4 @@
import React, { ReactElement, useRef, useState } from 'react';
import React, { useRef, useState } from 'react';
import { useMouse } from 'react-use';
import styled from 'styled-components';
import { isUsAnySogsFromCache } from '../../../../session/apis/open_group_api/sogsv3/knownBlindedkeys';
@ -53,7 +53,7 @@ export type ReactionProps = {
handlePopupClick?: () => void;
};
export const Reaction = (props: ReactionProps): ReactElement => {
export const Reaction = (props: ReactionProps) => {
const {
emoji,
messageId,

@ -1,11 +1,11 @@
import React, { ReactElement, useEffect, useState } from 'react';
import React, { useEffect, useState } from 'react';
import { useSelector } from 'react-redux';
import styled from 'styled-components';
import { Data } from '../../../../data/data';
import { findAndFormatContact } from '../../../../models/message';
import { PubKey } from '../../../../session/types/PubKey';
import { isDarkTheme } from '../../../../state/selectors/theme';
import { nativeEmojiData } from '../../../../util/emoji';
import { findAndFormatContact } from '../../../../models/message';
export type TipPosition = 'center' | 'left' | 'right';
@ -142,7 +142,7 @@ type Props = {
onClick: (...args: Array<any>) => void;
};
export const ReactionPopup = (props: Props): ReactElement => {
export const ReactionPopup = (props: Props) => {
const { messageId, emoji, count, senders, tooltipPosition = 'center', onClick } = props;
const [contacts, setContacts] = useState<Array<string>>([]);

@ -1,6 +1,6 @@
import { useDispatch } from 'react-redux';
// eslint-disable-next-line import/no-named-default
import { ChangeEvent, MouseEvent, default as React, ReactElement, useState } from 'react';
import { ChangeEvent, MouseEvent, default as React, useState } from 'react';
import { QRCode } from 'react-qr-svg';
import styled from 'styled-components';
import { Avatar, AvatarSize } from '../avatar/Avatar';
@ -69,7 +69,7 @@ type ProfileAvatarProps = {
ourId: string;
};
export const ProfileAvatar = (props: ProfileAvatarProps): ReactElement => {
export const ProfileAvatar = (props: ProfileAvatarProps) => {
const { newAvatarObjectUrl, avatarPath, profileName, ourId } = props;
return (
<Avatar
@ -86,7 +86,7 @@ type ProfileHeaderProps = ProfileAvatarProps & {
setMode: (mode: ProfileDialogModes) => void;
};
const ProfileHeader = (props: ProfileHeaderProps): ReactElement => {
const ProfileHeader = (props: ProfileHeaderProps) => {
const { avatarPath, profileName, ourId, onClick, setMode } = props;
return (
@ -114,7 +114,7 @@ const ProfileHeader = (props: ProfileHeaderProps): ReactElement => {
};
type ProfileDialogModes = 'default' | 'edit' | 'qr';
export const EditProfileDialog = (): ReactElement => {
export const EditProfileDialog = () => {
const dispatch = useDispatch();
const _profileName = useOurConversationUsername() || '';

@ -1,14 +1,14 @@
import React, { ReactElement, useState } from 'react';
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import styled from 'styled-components';
import { useMessageReactsPropsById } from '../../hooks/useParamSelector';
import { clearSogsReactionByServerId } from '../../session/apis/open_group_api/sogsv3/sogsV3ClearReaction';
import { ConvoHub } from '../../session/conversations';
import { updateReactClearAllModal } from '../../state/ducks/modalDialog';
import { SessionWrapperModal } from '../SessionWrapperModal';
import { Flex } from '../basic/Flex';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
import { SessionSpinner } from '../basic/SessionSpinner';
import { SessionWrapperModal } from '../SessionWrapperModal';
type Props = {
reaction: string;
@ -46,7 +46,7 @@ const StyledReactClearAllContainer = styled(Flex)`
}
`;
export const ReactClearAllModal = (props: Props): ReactElement => {
export const ReactClearAllModal = (props: Props) => {
const { reaction, messageId } = props;
const [clearingInProgress, setClearingInProgress] = useState(false);

@ -1,9 +1,10 @@
import { isEmpty, isEqual } from 'lodash';
import React, { ReactElement, useEffect, useMemo, useState } from 'react';
import React, { useEffect, useMemo, useState } from 'react';
import { useDispatch } from 'react-redux';
import styled from 'styled-components';
import { Data } from '../../data/data';
import { useMessageReactsPropsById } from '../../hooks/useParamSelector';
import { findAndFormatContact } from '../../models/message';
import { isUsAnySogsFromCache } from '../../session/apis/open_group_api/sogsv3/knownBlindedkeys';
import { UserUtils } from '../../session/utils';
import {
@ -18,6 +19,7 @@ import {
import { SortedReactionList } from '../../types/Reaction';
import { nativeEmojiData } from '../../util/emoji';
import { Reactions } from '../../util/reactions';
import { SessionWrapperModal } from '../SessionWrapperModal';
import { Avatar, AvatarSize } from '../avatar/Avatar';
import { Flex } from '../basic/Flex';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
@ -25,8 +27,6 @@ import { SessionHtmlRenderer } from '../basic/SessionHTMLRenderer';
import { ContactName } from '../conversation/ContactName';
import { MessageReactions } from '../conversation/message/message-content/MessageReactions';
import { SessionIconButton } from '../icon';
import { SessionWrapperModal } from '../SessionWrapperModal';
import { findAndFormatContact } from '../../models/message';
const StyledReactListContainer = styled(Flex)`
width: 376px;
@ -218,7 +218,7 @@ const handleSenders = (senders: Array<string>, me: string) => {
return updatedSenders;
};
export const ReactListModal = (props: Props): ReactElement => {
export const ReactListModal = (props: Props) => {
const { reaction, messageId } = props;
const dispatch = useDispatch();

@ -906,7 +906,6 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
identifier: this.id,
body,
createAtNetworkTimestamp,
expireTimer: this.get('expireTimer'),
attachments,
preview: preview ? [preview] : [],
quote,
@ -1253,18 +1252,18 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
const left: Array<string> | undefined = Array.isArray(groupUpdate.left)
? groupUpdate.left
: groupUpdate.left
? [groupUpdate.left]
: undefined;
? [groupUpdate.left]
: undefined;
const kicked: Array<string> | undefined = Array.isArray(groupUpdate.kicked)
? groupUpdate.kicked
: groupUpdate.kicked
? [groupUpdate.kicked]
: undefined;
? [groupUpdate.kicked]
: undefined;
const joined: Array<string> | undefined = Array.isArray(groupUpdate.joined)
? groupUpdate.joined
: groupUpdate.joined
? [groupUpdate.joined]
: undefined;
? [groupUpdate.joined]
: undefined;
const forcedArrayUpdate: MessageGroupUpdate = {};

@ -349,7 +349,7 @@ async function deleteContactsFromDB(contactsToRemove: Array<string>) {
}
}
async function handleContactsUpdate() {
async function handleContactsUpdate(result: IncomingUserResult) {
const us = UserUtils.getOurPubKeyStrFromCache();
const allContactsInWrapper = await ContactsWrapperActions.getAll();
@ -407,7 +407,7 @@ async function handleContactsUpdate() {
providedDisappearingMode: wrapperConvo.expirationMode,
providedExpireTimer: wrapperConvo.expirationTimerSeconds,
providedSource: wrapperConvo.id,
receivedAt: result.latestEnvelopeTimestamp,
receivedAt: result.latestEnvelopeTimestamp, // this is most likely incorrect, but that's all we have
fromSync: true,
fromCurrentDevice: false,
shouldCommitConvo: false,
@ -947,7 +947,7 @@ async function processUserMergingResults(results: Map<ConfigWrapperUser, Incomin
await handleUserProfileUpdate(incomingResult);
break;
case SnodeNamespaces.UserContacts:
await handleContactsUpdate();
await handleContactsUpdate(incomingResult);
break;
case SnodeNamespaces.UserGroups:
await handleUserGroupsUpdate(incomingResult);

@ -48,6 +48,8 @@ async function sendInviteResponseToGroup({ groupPk }: { groupPk: GroupPubkeyType
groupPk,
isApproved: true,
createAtNetworkTimestamp: GetNetworkTime.now(),
expirationType: 'unknown', // TODO audric do we want those not expiring?
expireTimer: 0,
}),
});
@ -190,12 +192,14 @@ async function handleGroupInfoChangeMessage({
switch (change.type) {
case SignalService.GroupUpdateInfoChangeMessage.Type.NAME: {
await ClosedGroup.addUpdateMessage(
await ClosedGroup.addUpdateMessage({
convo,
{ newName: change.updatedName },
author,
envelopeTimestamp
);
diff: { newName: change.updatedName },
sender: author,
sentAt: envelopeTimestamp,
expireUpdate: null,
});
break;
}
@ -210,7 +214,14 @@ async function handleGroupInfoChangeMessage({
isFinite(change.updatedExpiration) &&
change.updatedExpiration >= 0
) {
await convo.updateExpireTimer(change.updatedExpiration, author, envelopeTimestamp);
await convo.updateExpireTimer({
providedExpireTimer: change.updatedExpiration,
providedSource: author,
receivedAt: envelopeTimestamp,
fromCurrentDevice: false,
fromSync: false,
fromConfigMessage: false,
});
}
break;
}
@ -244,33 +255,29 @@ async function handleGroupMemberChangeMessage({
return;
}
const sharedDetails = { convo, sender: author, sentAt: envelopeTimestamp, expireUpdate: null };
switch (change.type) {
case SignalService.GroupUpdateMemberChangeMessage.Type.ADDED: {
await ClosedGroup.addUpdateMessage(
convo,
{ joiningMembers: change.memberSessionIds },
author,
envelopeTimestamp
);
await ClosedGroup.addUpdateMessage({
diff: { joiningMembers: change.memberSessionIds },
...sharedDetails,
});
break;
}
case SignalService.GroupUpdateMemberChangeMessage.Type.REMOVED: {
await ClosedGroup.addUpdateMessage(
convo,
{ kickedMembers: change.memberSessionIds },
author,
envelopeTimestamp
);
await ClosedGroup.addUpdateMessage({
diff: { kickedMembers: change.memberSessionIds },
...sharedDetails,
});
break;
}
case SignalService.GroupUpdateMemberChangeMessage.Type.PROMOTED: {
await ClosedGroup.addUpdateMessage(
convo,
{ promotedMembers: change.memberSessionIds },
author,
envelopeTimestamp
);
await ClosedGroup.addUpdateMessage({
diff: { promotedMembers: change.memberSessionIds },
...sharedDetails,
});
break;
}
default:
@ -293,12 +300,13 @@ async function handleGroupMemberLeftMessage({
return;
}
await ClosedGroup.addUpdateMessage(
await ClosedGroup.addUpdateMessage({
convo,
{ leavingMembers: [author] },
author,
envelopeTimestamp
);
diff: { leavingMembers: [author] },
sender: author,
sentAt: envelopeTimestamp,
expireUpdate: null,
});
convo.set({
active_at: envelopeTimestamp,
});

@ -19,7 +19,7 @@ import { EmptySwarmError } from '../../utils/errors';
import { SeedNodeAPI } from '../seed_node_api';
import {
MAX_SUBREQUESTS_COUNT,
UpdateExpiryOnNodeSubRequest,
UpdateExpiryOnNodeUserSubRequest,
WithShortenOrExtend,
fakeHash,
} from './SnodeRequestTypes';
@ -155,7 +155,7 @@ type UpdatedExpiryWithHash = { messageHash: string; updatedExpiryMs: number };
async function updateExpiryOnNodes(
targetNode: Snode,
ourPubKey: string,
expireRequests: Array<UpdateExpiryOnNodeSubRequest>
expireRequests: Array<UpdateExpiryOnNodeUserSubRequest>
): Promise<Array<UpdatedExpiryWithHash>> {
try {
const result = await doSnodeBatchRequest(expireRequests, targetNode, 4000, ourPubKey, 'batch');
@ -290,7 +290,7 @@ export async function buildExpireRequestBatchExpiry(
export async function buildExpireRequestSingleExpiry(
expireDetails: ExpireMessageWithExpiryOnSnodeProps
): Promise<UpdateExpiryOnNodeSubRequest | null> {
): Promise<UpdateExpiryOnNodeUserSubRequest | null> {
const ourPubKey = UserUtils.getOurPubKeyStrFromCache();
if (!ourPubKey) {
window.log.error('[buildExpireRequestSingleExpiry] No user pubkey');

@ -53,6 +53,8 @@ async function getGroupInviteMessage({
createAtNetworkTimestamp,
adminSignature,
memberAuthData,
expirationType: 'unknown', // TODO audric do we want those not expiring?
expireTimer: 0,
});
return invite;
}
@ -76,6 +78,8 @@ async function getGroupPromoteMessage({
groupPk,
createAtNetworkTimestamp,
groupIdentitySeed: secretKey.slice(0, 32), // the seed is the first 32 bytes of the secretkey
expirationType: 'unknown', // TODO audric do we want those not expiring?
expireTimer: 0,
});
return msg;
}

@ -1,19 +1,18 @@
import { GroupPubkeyType } from 'libsession_util_nodejs';
import { SignalService } from '../../../../../protobuf';
import { LibSodiumWrappers } from '../../../../crypto';
import { DataMessage } from '../../DataMessage';
import { MessageParams } from '../../Message';
import { ExpirableMessage, ExpirableMessageParams } from '../../ExpirableMessage';
export type AdminSigDetails = {
secretKey: Uint8Array;
sodium: LibSodiumWrappers;
};
export interface GroupUpdateMessageParams extends MessageParams {
export interface GroupUpdateMessageParams extends ExpirableMessageParams {
groupPk: GroupPubkeyType;
}
export abstract class GroupUpdateMessage extends DataMessage {
export abstract class GroupUpdateMessage extends ExpirableMessage {
public readonly destination: GroupUpdateMessageParams['groupPk'];
constructor(params: GroupUpdateMessageParams) {

@ -9,9 +9,9 @@ import {
UserGroupsGet,
WithGroupPubkey,
} from 'libsession_util_nodejs';
import { base64_variants, from_base64 } from 'libsodium-wrappers-sumo';
import { intersection, isEmpty, uniq } from 'lodash';
import { ConfigDumpData } from '../../data/configDump/configDump';
import { ConversationModel } from '../../models/conversation';
import { ConversationTypeEnum } from '../../models/conversationAttributes';
import { HexString } from '../../node/hexStrings';
import { SignalService } from '../../protobuf';
@ -22,10 +22,10 @@ import { RevokeChanges, SnodeAPIRevoke } from '../../session/apis/snode_api/revo
import { SnodeGroupSignature } from '../../session/apis/snode_api/signature/groupSignature';
import { ConvoHub } from '../../session/conversations';
import { getSodiumRenderer } from '../../session/crypto';
import { DisappearingMessages } from '../../session/disappearing_messages';
import { ClosedGroup } from '../../session/group/closed-group';
import { GroupUpdateInfoChangeMessage } from '../../session/messages/outgoing/controlMessage/group_v2/to_group/GroupUpdateInfoChangeMessage';
import { GroupUpdateMemberChangeMessage } from '../../session/messages/outgoing/controlMessage/group_v2/to_group/GroupUpdateMemberChangeMessage';
import { GroupUpdateDeleteMessage } from '../../session/messages/outgoing/controlMessage/group_v2/to_user/GroupUpdateDeleteMessage';
import { PubKey } from '../../session/types';
import { UserUtils } from '../../session/utils';
import { getUserED25519KeyPairBytes } from '../../session/utils/User';
@ -487,11 +487,11 @@ async function handleRemoveMembers({
`DELETE${m}${createAtNetworkTimestamp}`,
{ secretKey }
);
const deleteMessage = new GroupUpdateDeleteMessage({
groupPk,
createAtNetworkTimestamp,
adminSignature: from_base64(adminSignature.signature, base64_variants.ORIGINAL),
});
// const deleteMessage = new GroupUpdateDeleteMessage({
// groupPk,
// createAtNetworkTimestamp,
// adminSignature: from_base64(adminSignature.signature, base64_variants.ORIGINAL),
// });
console.warn(
'TODO: poll from namespace -11, handle messages and sig for it, batch request handle 401/403, but 200 ok for this -11 namespace'
);
@ -538,6 +538,19 @@ async function getPendingRevokeChanges({
return revokeChanges;
}
function getConvoExpireDetailsForMsg(convo: ConversationModel) {
const expireTimer = convo.getExpireTimer();
const expireDetails = {
expirationType: DisappearingMessages.changeToDisappearingMessageType(
convo,
expireTimer,
convo.getExpirationMode()
),
expireTimer,
};
return expireDetails;
}
async function handleMemberChangeFromUIOrNot({
addMembersWithHistory,
addMembersWithoutHistory,
@ -606,16 +619,21 @@ async function handleMemberChangeFromUIOrNot({
await GroupInvite.addJob({ groupPk, member });
}
const sodium = await getSodiumRenderer();
const createAtNetworkTimestamp = GetNetworkTime.now();
const shared = {
convo,
sender: us,
sentAt: createAtNetworkTimestamp,
expireUpdate: null,
};
const allAdded = [...withHistory, ...withoutHistory]; // those are already enforced to be unique (and without intersection) in `validateMemberChange()`
const createAtNetworkTimestamp = GetNetworkTime.now();
if (fromCurrentDevice && allAdded.length) {
const msg = await ClosedGroup.addUpdateMessage(
convo,
{ joiningMembers: allAdded },
us,
createAtNetworkTimestamp
);
const msg = await ClosedGroup.addUpdateMessage({
diff: { joiningMembers: allAdded },
...shared,
});
await getMessageQueue().sendToGroupV2({
message: new GroupUpdateMemberChangeMessage({
added: allAdded,
@ -625,16 +643,15 @@ async function handleMemberChangeFromUIOrNot({
createAtNetworkTimestamp,
secretKey: group.secretKey,
sodium,
...getConvoExpireDetailsForMsg(convo),
}),
});
}
if (fromCurrentDevice && removed.length) {
const msg = await ClosedGroup.addUpdateMessage(
convo,
{ kickedMembers: removed },
us,
createAtNetworkTimestamp
);
const msg = await ClosedGroup.addUpdateMessage({
diff: { kickedMembers: removed },
...shared,
});
await getMessageQueue().sendToGroupV2({
message: new GroupUpdateMemberChangeMessage({
removed,
@ -644,6 +661,7 @@ async function handleMemberChangeFromUIOrNot({
createAtNetworkTimestamp,
secretKey: group.secretKey,
sodium,
...getConvoExpireDetailsForMsg(convo),
}),
});
}
@ -698,12 +716,13 @@ async function handleNameChangeFromUIOrNot({
const createAtNetworkTimestamp = GetNetworkTime.now();
if (fromCurrentDevice) {
const msg = await ClosedGroup.addUpdateMessage(
const msg = await ClosedGroup.addUpdateMessage({
convo,
{ newName },
us,
createAtNetworkTimestamp
);
diff: { newName },
sender: us,
sentAt: createAtNetworkTimestamp,
expireUpdate: null,
});
await getMessageQueue().sendToGroupV2({
message: new GroupUpdateInfoChangeMessage({
groupPk,
@ -713,6 +732,7 @@ async function handleNameChangeFromUIOrNot({
createAtNetworkTimestamp,
secretKey: group.secretKey,
sodium: await getSodiumRenderer(),
...getConvoExpireDetailsForMsg(convo),
}),
});
}

@ -1,5 +1,6 @@
import chai, { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import { PubkeyType } from 'libsession_util_nodejs';
import Sinon from 'sinon';
import { UpdateExpiryOnNodeUserSubRequest } from '../../../../session/apis/snode_api/SnodeRequestTypes';
import {
@ -19,7 +20,8 @@ chai.use(chaiAsPromised as any);
describe('ExpireRequest', () => {
const getLatestTimestampOffset = 200000;
const ourNumber = '37e1631b002de498caf7c5c1712718bde7f257c6dadeed0c21abf5e939e6c309';
const ourNumber =
'37e1631b002de498caf7c5c1712718bde7f257c6dadeed0c21abf5e939e6c309' as PubkeyType;
const ourUserEd25516Keypair = {
pubKey: '37e1631b002de498caf7c5c1712718bde7f257c6dadeed0c21abf5e939e6c309',
privKey:

@ -1,5 +1,6 @@
import chai, { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import { PubkeyType } from 'libsession_util_nodejs';
import Sinon from 'sinon';
import {
GetExpiriesFromNodeSubRequest,
@ -23,7 +24,8 @@ describe('GetExpiriesRequest', () => {
stubWindowLog();
const getLatestTimestampOffset = 200000;
const ourNumber = '37e1631b002de498caf7c5c1712718bde7f257c6dadeed0c21abf5e939e6c309';
const ourNumber =
'37e1631b002de498caf7c5c1712718bde7f257c6dadeed0c21abf5e939e6c309' as PubkeyType;
const ourUserEd25516Keypair = {
pubKey: '37e1631b002de498caf7c5c1712718bde7f257c6dadeed0c21abf5e939e6c309',
privKey:

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save