diff --git a/lib/tunnelbroker/use-peer-to-peer-message-handler.js b/lib/tunnelbroker/use-peer-to-peer-message-handler.js --- a/lib/tunnelbroker/use-peer-to-peer-message-handler.js +++ b/lib/tunnelbroker/use-peer-to-peer-message-handler.js @@ -383,10 +383,7 @@ const clientMessageID = getClientMessageIDFromTunnelbrokerMessageID( tunnelbrokerMessageID, ); - await sqliteAPI.removeOutboundP2PMessagesOlderThan( - clientMessageID, - deviceID, - ); + await sqliteAPI.removeOutboundP2PMessage(clientMessageID, deviceID); } catch (e) { console.log( `Error removing message after processing: ${ diff --git a/lib/types/sqlite-types.js b/lib/types/sqlite-types.js --- a/lib/types/sqlite-types.js +++ b/lib/types/sqlite-types.js @@ -65,7 +65,7 @@ +resetOutboundP2PMessagesForDevice: ( deviceID: string, ) => Promise>, - +removeOutboundP2PMessagesOlderThan: ( + +removeOutboundP2PMessage: ( messageID: string, deviceID: string, ) => Promise, diff --git a/lib/utils/__mocks__/config.js b/lib/utils/__mocks__/config.js --- a/lib/utils/__mocks__/config.js +++ b/lib/utils/__mocks__/config.js @@ -39,7 +39,7 @@ processDBStoreOperations: jest.fn(), getAllOutboundP2PMessages: jest.fn(), markOutboundP2PMessageAsSent: jest.fn(), - removeOutboundP2PMessagesOlderThan: jest.fn(), + removeOutboundP2PMessage: jest.fn(), resetOutboundP2PMessagesForDevice: jest.fn(), getRelatedMessages: jest.fn(), getOutboundP2PMessagesByID: jest.fn(), diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h b/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h --- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h +++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseQueryExecutor.h @@ -154,8 +154,8 @@ virtual std::vector getOutboundP2PMessagesByID(const std::vector &ids) const = 0; virtual std::vector getAllOutboundP2PMessages() const = 0; - virtual void removeOutboundP2PMessagesOlderThan( - std::string lastConfirmedMessageID, + virtual void removeOutboundP2PMessage( + std::string confirmedMessageID, std::string deviceID) const = 0; virtual void removeAllOutboundP2PMessages(const std::string &deviceID) const = 0; diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h --- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h +++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h @@ -170,8 +170,8 @@ std::vector getOutboundP2PMessagesByID( const std::vector &ids) const override; std::vector getAllOutboundP2PMessages() const override; - void removeOutboundP2PMessagesOlderThan( - std::string lastConfirmedMessageID, + void removeOutboundP2PMessage( + std::string confirmedMessageID, std::string deviceID) const override; void removeAllOutboundP2PMessages(const std::string &deviceID) const override; void setCiphertextForOutboundP2PMessage( diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp --- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp +++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp @@ -2488,24 +2488,19 @@ return messages; } -void SQLiteQueryExecutor::removeOutboundP2PMessagesOlderThan( - std::string lastConfirmedMessageID, +void SQLiteQueryExecutor::removeOutboundP2PMessage( + std::string confirmedMessageID, std::string deviceID) const { std::string query = "DELETE FROM outbound_p2p_messages " - "WHERE timestamp <= (" - " SELECT timestamp " - " FROM outbound_p2p_messages" - " WHERE message_id = ?" - ") " - "AND device_id IN (?);"; + "WHERE message_id = ? AND device_id = ?;"; comm::SQLiteStatementWrapper preparedSQL( SQLiteQueryExecutor::getConnection(), query, "Failed to remove messages to device"); - bindStringToSQL(lastConfirmedMessageID.c_str(), preparedSQL, 1); + bindStringToSQL(confirmedMessageID.c_str(), preparedSQL, 1); bindStringToSQL(deviceID.c_str(), preparedSQL, 2); sqlite3_step(preparedSQL); diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.h b/native/cpp/CommonCpp/NativeModules/CommCoreModule.h --- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.h +++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.h @@ -252,7 +252,7 @@ jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) override; - virtual jsi::Value removeOutboundP2PMessagesOlderThan( + virtual jsi::Value removeOutboundP2PMessage( jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) override; diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp --- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp +++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp @@ -2853,7 +2853,7 @@ }); } -jsi::Value CommCoreModule::removeOutboundP2PMessagesOlderThan( +jsi::Value CommCoreModule::removeOutboundP2PMessage( jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) { @@ -2865,8 +2865,8 @@ taskType job = [=]() { std::string error; try { - DatabaseManager::getQueryExecutor() - .removeOutboundP2PMessagesOlderThan(messageIDCpp, deviceIDCpp); + DatabaseManager::getQueryExecutor().removeOutboundP2PMessage( + messageIDCpp, deviceIDCpp); } catch (std::system_error &e) { error = e.what(); } diff --git a/native/cpp/CommonCpp/_generated/commJSI-generated.cpp b/native/cpp/CommonCpp/_generated/commJSI-generated.cpp --- a/native/cpp/CommonCpp/_generated/commJSI-generated.cpp +++ b/native/cpp/CommonCpp/_generated/commJSI-generated.cpp @@ -217,8 +217,8 @@ static jsi::Value __hostFunction_CommCoreModuleSchemaCxxSpecJSI_markOutboundP2PMessageAsSent(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->markOutboundP2PMessageAsSent(rt, args[0].asString(rt), args[1].asString(rt)); } -static jsi::Value __hostFunction_CommCoreModuleSchemaCxxSpecJSI_removeOutboundP2PMessagesOlderThan(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - return static_cast(&turboModule)->removeOutboundP2PMessagesOlderThan(rt, args[0].asString(rt), args[1].asString(rt)); +static jsi::Value __hostFunction_CommCoreModuleSchemaCxxSpecJSI_removeOutboundP2PMessage(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + return static_cast(&turboModule)->removeOutboundP2PMessage(rt, args[0].asString(rt), args[1].asString(rt)); } static jsi::Value __hostFunction_CommCoreModuleSchemaCxxSpecJSI_resetOutboundP2PMessagesForDevice(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->resetOutboundP2PMessagesForDevice(rt, args[0].asString(rt)); @@ -304,7 +304,7 @@ methodMap_["getOutboundP2PMessagesByID"] = MethodMetadata {1, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_getOutboundP2PMessagesByID}; methodMap_["getAllOutboundP2PMessages"] = MethodMetadata {0, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_getAllOutboundP2PMessages}; methodMap_["markOutboundP2PMessageAsSent"] = MethodMetadata {2, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_markOutboundP2PMessageAsSent}; - methodMap_["removeOutboundP2PMessagesOlderThan"] = MethodMetadata {2, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_removeOutboundP2PMessagesOlderThan}; + methodMap_["removeOutboundP2PMessage"] = MethodMetadata {2, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_removeOutboundP2PMessage}; methodMap_["resetOutboundP2PMessagesForDevice"] = MethodMetadata {1, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_resetOutboundP2PMessagesForDevice}; methodMap_["getSyncedDatabaseVersion"] = MethodMetadata {0, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_getSyncedDatabaseVersion}; methodMap_["markPrekeysAsPublished"] = MethodMetadata {0, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_markPrekeysAsPublished}; diff --git a/native/cpp/CommonCpp/_generated/commJSI.h b/native/cpp/CommonCpp/_generated/commJSI.h --- a/native/cpp/CommonCpp/_generated/commJSI.h +++ b/native/cpp/CommonCpp/_generated/commJSI.h @@ -86,7 +86,7 @@ virtual jsi::Value getOutboundP2PMessagesByID(jsi::Runtime &rt, jsi::Array ids) = 0; virtual jsi::Value getAllOutboundP2PMessages(jsi::Runtime &rt) = 0; virtual jsi::Value markOutboundP2PMessageAsSent(jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) = 0; - virtual jsi::Value removeOutboundP2PMessagesOlderThan(jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) = 0; + virtual jsi::Value removeOutboundP2PMessage(jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) = 0; virtual jsi::Value resetOutboundP2PMessagesForDevice(jsi::Runtime &rt, jsi::String deviceID) = 0; virtual jsi::Value getSyncedDatabaseVersion(jsi::Runtime &rt) = 0; virtual jsi::Value markPrekeysAsPublished(jsi::Runtime &rt) = 0; @@ -641,13 +641,13 @@ return bridging::callFromJs( rt, &T::markOutboundP2PMessageAsSent, jsInvoker_, instance_, std::move(messageID), std::move(deviceID)); } - jsi::Value removeOutboundP2PMessagesOlderThan(jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) override { + jsi::Value removeOutboundP2PMessage(jsi::Runtime &rt, jsi::String messageID, jsi::String deviceID) override { static_assert( - bridging::getParameterCount(&T::removeOutboundP2PMessagesOlderThan) == 3, - "Expected removeOutboundP2PMessagesOlderThan(...) to have 3 parameters"); + bridging::getParameterCount(&T::removeOutboundP2PMessage) == 3, + "Expected removeOutboundP2PMessage(...) to have 3 parameters"); return bridging::callFromJs( - rt, &T::removeOutboundP2PMessagesOlderThan, jsInvoker_, instance_, std::move(messageID), std::move(deviceID)); + rt, &T::removeOutboundP2PMessage, jsInvoker_, instance_, std::move(messageID), std::move(deviceID)); } jsi::Value resetOutboundP2PMessagesForDevice(jsi::Runtime &rt, jsi::String deviceID) override { static_assert( diff --git a/native/database/sqlite-api.js b/native/database/sqlite-api.js --- a/native/database/sqlite-api.js +++ b/native/database/sqlite-api.js @@ -22,8 +22,7 @@ markOutboundP2PMessageAsSent: commCoreModule.markOutboundP2PMessageAsSent, resetOutboundP2PMessagesForDevice: commCoreModule.resetOutboundP2PMessagesForDevice, - removeOutboundP2PMessagesOlderThan: - commCoreModule.removeOutboundP2PMessagesOlderThan, + removeOutboundP2PMessage: commCoreModule.removeOutboundP2PMessage, async processDBStoreOperations( storeOperations: StoreOperations, diff --git a/native/schema/CommCoreModuleSchema.js b/native/schema/CommCoreModuleSchema.js --- a/native/schema/CommCoreModuleSchema.js +++ b/native/schema/CommCoreModuleSchema.js @@ -181,7 +181,7 @@ messageID: string, deviceID: string, ) => Promise; - +removeOutboundP2PMessagesOlderThan: ( + +removeOutboundP2PMessage: ( messageID: string, deviceID: string, ) => Promise; diff --git a/web/cpp/SQLiteQueryExecutorBindings.cpp b/web/cpp/SQLiteQueryExecutorBindings.cpp --- a/web/cpp/SQLiteQueryExecutorBindings.cpp +++ b/web/cpp/SQLiteQueryExecutorBindings.cpp @@ -291,8 +291,8 @@ "addOutboundP2PMessages", &SQLiteQueryExecutor::addOutboundP2PMessages) .function( - "removeOutboundP2PMessagesOlderThan", - &SQLiteQueryExecutor::removeOutboundP2PMessagesOlderThan) + "removeOutboundP2PMessage", + &SQLiteQueryExecutor::removeOutboundP2PMessage) .function( "removeAllOutboundP2PMessages", &SQLiteQueryExecutor::removeAllOutboundP2PMessages) diff --git a/web/database/sqlite-api.js b/web/database/sqlite-api.js --- a/web/database/sqlite-api.js +++ b/web/database/sqlite-api.js @@ -117,14 +117,14 @@ return messageIDs ? [...messageIDs] : []; }, - async removeOutboundP2PMessagesOlderThan( + async removeOutboundP2PMessage( messageID: string, deviceID: string, ): Promise { const sharedWorker = await getCommSharedWorker(); await sharedWorker.schedule({ - type: workerRequestMessageTypes.REMOVE_OUTBOUND_P2P_MESSAGES, + type: workerRequestMessageTypes.REMOVE_OUTBOUND_P2P_MESSAGE, messageID, deviceID, }); diff --git a/web/shared-worker/_generated/comm_query_executor.wasm b/web/shared-worker/_generated/comm_query_executor.wasm index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@ { - queryExecutor?.removeOutboundP2PMessagesOlderThan( + it('should remove message', () => { + queryExecutor?.removeOutboundP2PMessage( TEST_MSG_4.messageID, TEST_MSG_4.deviceID, ); - expect(queryExecutor?.getAllOutboundP2PMessages().length).toBe(1); - expect(queryExecutor?.getAllOutboundP2PMessages()).toStrictEqual([ - TEST_MSG_2, - ]); - }); - - it('should remove older messages', () => { - queryExecutor?.removeOutboundP2PMessagesOlderThan( - TEST_MSG_1.messageID, - TEST_MSG_1.deviceID, - ); + expect(queryExecutor?.getAllOutboundP2PMessages().length).toBe(3); expect(queryExecutor?.getAllOutboundP2PMessages()).toStrictEqual([ + TEST_MSG_3, + TEST_MSG_1, TEST_MSG_2, - TEST_MSG_4, ]); }); diff --git a/web/shared-worker/types/sqlite-query-executor.js b/web/shared-worker/types/sqlite-query-executor.js --- a/web/shared-worker/types/sqlite-query-executor.js +++ b/web/shared-worker/types/sqlite-query-executor.js @@ -175,10 +175,7 @@ restoreFromBackupLog(backupLog: Uint8Array): void; addOutboundP2PMessages(messages: $ReadOnlyArray): void; - removeOutboundP2PMessagesOlderThan( - lastConfirmedMessageID: string, - deviceID: string, - ): void; + removeOutboundP2PMessage(confirmedMessageID: string, deviceID: string): void; removeAllOutboundP2PMessages(deviceID: string): void; getOutboundP2PMessagesByID( ids: $ReadOnlyArray, diff --git a/web/shared-worker/worker/shared-worker.js b/web/shared-worker/worker/shared-worker.js --- a/web/shared-worker/worker/shared-worker.js +++ b/web/shared-worker/worker/shared-worker.js @@ -358,9 +358,9 @@ message.deviceID, ); } else if ( - message.type === workerRequestMessageTypes.REMOVE_OUTBOUND_P2P_MESSAGES + message.type === workerRequestMessageTypes.REMOVE_OUTBOUND_P2P_MESSAGE ) { - sqliteQueryExecutor.removeOutboundP2PMessagesOlderThan( + sqliteQueryExecutor.removeOutboundP2PMessage( message.messageID, message.deviceID, ); diff --git a/web/types/worker-types.js b/web/types/worker-types.js --- a/web/types/worker-types.js +++ b/web/types/worker-types.js @@ -43,7 +43,7 @@ REMOVE_INBOUND_P2P_MESSAGES: 17, GET_OUTBOUND_P2P_MESSAGES: 18, MARK_OUTBOUND_P2P_MESSAGE_AS_SENT: 19, - REMOVE_OUTBOUND_P2P_MESSAGES: 20, + REMOVE_OUTBOUND_P2P_MESSAGE: 20, GET_RELATED_MESSAGES: 21, GET_OUTBOUND_P2P_MESSAGES_BY_ID: 22, SEARCH_MESSAGES: 23, @@ -59,7 +59,7 @@ workerRequestMessageTypes.INITIALIZE_CRYPTO_ACCOUNT, workerRequestMessageTypes.REMOVE_INBOUND_P2P_MESSAGES, workerRequestMessageTypes.MARK_OUTBOUND_P2P_MESSAGE_AS_SENT, - workerRequestMessageTypes.REMOVE_OUTBOUND_P2P_MESSAGES, + workerRequestMessageTypes.REMOVE_OUTBOUND_P2P_MESSAGE, workerRequestMessageTypes.RESET_OUTBOUND_P2P_MESSAGES, ]; @@ -188,7 +188,7 @@ +deviceID: string, }; -export type RemoveOutboundP2PMessagesRequestMessage = { +export type RemoveOutboundP2PMessageRequestMessage = { +type: 20, +messageID: string, +deviceID: string, @@ -238,7 +238,7 @@ | RemoveInboundP2PMessagesRequestMessage | GetOutboundP2PMessagesRequestMessage | MarkOutboundP2PMessageAsSentRequestMessage - | RemoveOutboundP2PMessagesRequestMessage + | RemoveOutboundP2PMessageRequestMessage | GetRelatedMessagesRequestMessage | GetOutboundP2PMessagesByIDRequestMessage | SearchMessagesRequestMessage