fix: hit expire endpoint when send is successful

we need the returned messageHash from the swarm
pull/2971/head
William Grant 2 years ago
parent 238a16149d
commit c1dc2e5a6c

@ -42,7 +42,6 @@ import { Data } from '../data/data';
import { OpenGroupData } from '../data/opengroups';
import { SettingsKey } from '../data/settings-key';
import { isUsAnySogsFromCache } from '../session/apis/open_group_api/sogsv3/knownBlindedkeys';
import { expireMessageOnSnode } from '../session/apis/snode_api/expireRequest';
import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime';
import { SnodeNamespaces } from '../session/apis/snode_api/namespaces';
import { DURATION } from '../session/constants';
@ -1179,35 +1178,6 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
expiresAt,
sentAt: this.get('sent_at'),
});
const messageHash = this.get('messageHash');
if (messageHash) {
const newTTL = await expireMessageOnSnode({
messageHash,
expireTimer: this.get('expireTimer') * 1000,
shorten: true,
});
if (newTTL) {
window.log.debug(
`WIP: [setToExpire] messageHash ${messageHash} has a new TTL of ${newTTL} which expires at ${new Date(
newTTL
).toUTCString()}`
);
this.set({
expires_at: newTTL,
});
if (id) {
await this.commit();
}
} else {
window.log.warn(
`WIP: [setToExpire]\nmessageHash ${messageHash} has no new TTL.\n Keeping the old one ${expiresAt} which expires at ${new Date(
expiresAt
).toUTCString()}`
);
}
}
}
}

@ -262,9 +262,6 @@ async function handleRegularMessage(
await sendingDeviceConversation.updateBlocksSogsMsgReqsTimestamp(updateBlockTimestamp, false);
}
// Expire timer updates are now explicit.
// We don't handle an expire timer from a incoming message except if it is an ExpireTimerUpdate message.
if (type === 'incoming') {
if (conversation.isPrivate()) {
const incomingMessageCount = await Data.getMessageCountByType(

@ -37,6 +37,10 @@ import { OpenGroupVisibleMessage } from '../messages/outgoing/visibleMessage/Ope
import { ed25519Str } from '../onions/onionPath';
import { PubKey } from '../types';
import { RawMessage } from '../types/RawMessage';
import {
changeToDisappearingMessageConversationType,
updateMessageExpiryOnSwarm,
} from '../../util/expiringMessages';
// ================ SNODE STORE ================
@ -154,9 +158,37 @@ async function send(
!isEmpty(batchResult[0].body.hash)
) {
const messageSendHash = batchResult[0].body.hash;
const foundMessage = await Data.getMessageById(encryptedAndWrapped.identifier);
let foundMessage = await Data.getMessageById(encryptedAndWrapped.identifier);
if (foundMessage) {
await foundMessage.updateMessageHash(messageSendHash);
const convo = foundMessage.getConversation();
const expireTimer = foundMessage.get('expireTimer');
const expirationType = foundMessage.get('expirationType');
if (
convo &&
expirationType &&
expireTimer > 0 &&
// a message has started to disappear
foundMessage.get('expirationStartTimestamp')
) {
const expirationMode = changeToDisappearingMessageConversationType(
convo,
expirationType,
expireTimer
);
const canBeDeleteAfterRead = convo && !convo.isMe() && convo.isPrivate();
// TODO legacy messages support will be removed in a future release
if (
canBeDeleteAfterRead &&
(expirationMode === 'legacy' || expirationMode === 'deleteAfterRead')
) {
foundMessage = await updateMessageExpiryOnSwarm(foundMessage);
}
}
await foundMessage.commit();
window?.log?.info(
`updated message ${foundMessage.get('id')} with hash: ${foundMessage.get(
@ -343,7 +375,7 @@ async function encryptMessagesAndWrap(
/**
* Send a list of messages to a single service node.
* Used currently only for sending SharedConfigMessage to multiple messages at a time.
* Used currently only for sending SharedConfigMessage for multiple messages at a time.
*
* @param params the messages to deposit
* @param destination the pubkey we should deposit those message for

@ -12,6 +12,7 @@ import { ConversationModel } from '../models/conversation';
import { MessageModel } from '../models/message';
import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime';
import { ReleasedFeatures } from './releaseFeature';
import { expireMessageOnSnode } from '../session/apis/snode_api/expireRequest';
// NOTE this must match Content.ExpirationType in the protobuf
// TODO double check this
@ -635,3 +636,51 @@ export async function checkHasOutdatedDisappearingMessageClient(
await convoToUpdate.commit();
}
}
export async function updateMessageExpiryOnSwarm(message: MessageModel, shouldCommit?: boolean) {
window.log.debug(`WIP: [updateMessageExpiryOnSwarm]\nmessage: ${JSON.stringify(message)}`);
const messageHash = message.get('messageHash');
const expiresAt = message.get('expires_at');
if (!messageHash) {
window.log.debug(
`WIP: [updateMessageExpiryOnSwarm] Missing messageHash message: ${JSON.stringify(message)}`
);
return message;
}
const newTTL = await expireMessageOnSnode({
messageHash,
expireTimer: message.get('expireTimer') * 1000,
shorten: true,
});
if (newTTL && newTTL !== expiresAt) {
message.set({
expires_at: newTTL,
});
window.log.debug(
`WIP: [updateMessageExpiryOnSwarm] messageHash ${messageHash} has a new TTL of ${newTTL} which expires at ${new Date(
newTTL
).toUTCString()}`
);
if (shouldCommit) {
await message.commit();
}
} else {
window.log.warn(
`WIP: [updateMessageExpiryOnSwarm]\nmessageHash ${messageHash} has no new TTL.${
expiresAt
? `\nKeeping the old one ${expiresAt}which expires at ${new Date(
expiresAt
).toUTCString()}`
: ''
}`
);
}
return message;
}

Loading…
Cancel
Save