From bd2172b773980f531c9f52fd968bdf41b4d8e65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Fri, 1 Sep 2023 13:07:15 +0200 Subject: [PATCH] chore: handle messages via websockets (#2473) * chore: handle messages via websockets * chore: update domain events * fix: specs * fix: adjust server revision creation delay --- ...nts-npm-2.121.0-77d4c0f05d-49d4a83421.zip} | Bin 104915 -> 106504 bytes .../AsymmetricMessageServerHash.ts | 2 +- .../src/Domain/Api/WebSocketsEventData.ts | 7 ---- .../src/Domain/Api/WebSocketsServiceEvent.ts | 1 + .../src/Domain/Api/WebsocketsService.ts | 19 ++++------- .../AsymmetricMessageService.spec.ts | 11 +++++++ .../AsymmetricMessageService.ts | 30 +++++++++++------- .../UseCase/ResendMessage.ts | 2 +- packages/services/src/Domain/index.ts | 1 - packages/snjs/mocha/history.test.js | 1 + packages/snjs/mocha/lib/factory.js | 2 +- packages/snjs/package.json | 2 +- yarn.lock | 10 +++--- 13 files changed, 47 insertions(+), 41 deletions(-) rename .yarn/cache/{@standardnotes-domain-events-npm-2.120.0-f3a9eaf351-bcd6caf10b.zip => @standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip} (80%) delete mode 100644 packages/services/src/Domain/Api/WebSocketsEventData.ts diff --git a/.yarn/cache/@standardnotes-domain-events-npm-2.120.0-f3a9eaf351-bcd6caf10b.zip b/.yarn/cache/@standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip similarity index 80% rename from .yarn/cache/@standardnotes-domain-events-npm-2.120.0-f3a9eaf351-bcd6caf10b.zip rename to .yarn/cache/@standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip index 3c9d306f2307e4630b9a04b765d7fd0da99a8e7a..4be25714a69987feef985f73bda91874f3362f63 100644 GIT binary patch delta 6770 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 -} diff --git a/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts b/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts index c0e27c147..dd1daec3a 100644 --- a/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts +++ b/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts @@ -1,4 +1,5 @@ export enum WebSocketsServiceEvent { UserRoleMessageReceived = 'WebSocketMessageReceived', NotificationAddedForUser = 'NotificationAddedForUser', + MessageSentToUser = 'MessageSentToUser', } diff --git a/packages/services/src/Domain/Api/WebsocketsService.ts b/packages/services/src/Domain/Api/WebsocketsService.ts index 32e764bc2..c34ae2ce9 100644 --- a/packages/services/src/Domain/Api/WebsocketsService.ts +++ b/packages/services/src/Domain/Api/WebsocketsService.ts @@ -1,18 +1,13 @@ import { isErrorResponse } from '@standardnotes/responses' -import { - DomainEventInterface, - UserRolesChangedEvent, - NotificationAddedForUserEvent, -} from '@standardnotes/domain-events' +import { DomainEventInterface } from '@standardnotes/domain-events' import { WebSocketApiServiceInterface } from '@standardnotes/api' import { WebSocketsServiceEvent } from './WebSocketsServiceEvent' import { StorageServiceInterface } from '../Storage/StorageServiceInterface' import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface' import { AbstractService } from '../Service/AbstractService' import { StorageKey } from '../Storage/StorageKeys' -import { WebSocketsEventData } from './WebSocketsEventData' -export class WebSocketsService extends AbstractService { +export class WebSocketsService extends AbstractService { private webSocket?: WebSocket constructor( @@ -68,13 +63,13 @@ export class WebSocketsService extends AbstractService { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, }, { uuid: 'misc-message', @@ -98,6 +99,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 1, updated_at_timestamp: 1, + replaceability_identifier: null, }, ] @@ -135,6 +137,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageTrustedContactShare = { @@ -168,6 +171,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, }, { uuid: 'older-message', @@ -176,6 +180,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 1, updated_at_timestamp: 1, + replaceability_identifier: null, }, ] @@ -202,6 +207,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageTrustedContactShare = { @@ -230,6 +236,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageSenderKeypairChanged = { @@ -259,6 +266,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageSharedVaultRootKeyChanged = { @@ -287,6 +295,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageSharedVaultMetadataChanged = { @@ -317,6 +326,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageSharedVaultInvite = { @@ -343,6 +353,7 @@ describe('AsymmetricMessageService', () => { encrypted_message: 'encrypted_message', created_at_timestamp: 2, updated_at_timestamp: 2, + replaceability_identifier: null, } const decryptedMessagePayload: AsymmetricMessageTrustedContactShare = { diff --git a/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.ts b/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.ts index bb55da5af..7419bcc37 100644 --- a/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.ts +++ b/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.ts @@ -1,14 +1,6 @@ -import { GetKeyPairs } from './../Encryption/UseCase/GetKeyPairs' -import { SyncServiceInterface } from './../Sync/SyncServiceInterface' -import { SessionsClientInterface } from './../Session/SessionsClientInterface' -import { MutatorClientInterface } from './../Mutator/MutatorClientInterface' +import { MessageSentToUserEvent } from '@standardnotes/domain-events' import { AsymmetricMessageServerHash } from '@standardnotes/responses' -import { SyncEvent, SyncEventReceivedAsymmetricMessagesData } from '../Event/SyncEvent' -import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface' -import { InternalEventHandlerInterface } from '../Internal/InternalEventHandlerInterface' -import { InternalEventInterface } from '../Internal/InternalEventInterface' -import { AbstractService } from '../Service/AbstractService' -import { GetTrustedPayload } from './UseCase/GetTrustedPayload' +import { AsymmetricMessageServer } from '@standardnotes/api' import { AsymmetricMessageSharedVaultRootKeyChanged, AsymmetricMessagePayloadType, @@ -21,8 +13,19 @@ import { PayloadEmitSource, VaultListingInterface, } from '@standardnotes/models' +import { Result } from '@standardnotes/domain-core' + +import { GetKeyPairs } from './../Encryption/UseCase/GetKeyPairs' +import { SyncServiceInterface } from './../Sync/SyncServiceInterface' +import { SessionsClientInterface } from './../Session/SessionsClientInterface' +import { MutatorClientInterface } from './../Mutator/MutatorClientInterface' +import { SyncEvent, SyncEventReceivedAsymmetricMessagesData } from '../Event/SyncEvent' +import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface' +import { InternalEventHandlerInterface } from '../Internal/InternalEventHandlerInterface' +import { InternalEventInterface } from '../Internal/InternalEventInterface' +import { AbstractService } from '../Service/AbstractService' +import { GetTrustedPayload } from './UseCase/GetTrustedPayload' import { HandleRootKeyChangedMessage } from './UseCase/HandleRootKeyChangedMessage' -import { AsymmetricMessageServer } from '@standardnotes/api' import { GetOutboundMessages } from './UseCase/GetOutboundMessages' import { GetInboundMessages } from './UseCase/GetInboundMessages' import { GetVault } from '../Vault/UseCase/GetVault' @@ -32,7 +35,7 @@ import { FindContact } from '../Contacts/UseCase/FindContact' import { CreateOrEditContact } from '../Contacts/UseCase/CreateOrEditContact' import { ReplaceContactData } from '../Contacts/UseCase/ReplaceContactData' import { EncryptionProviderInterface } from '../Encryption/EncryptionProviderInterface' -import { Result } from '@standardnotes/domain-core' +import { WebSocketsServiceEvent } from '../Api/WebSocketsServiceEvent' export class AsymmetricMessageService extends AbstractService @@ -82,6 +85,9 @@ export class AsymmetricMessageService case SyncEvent.ReceivedAsymmetricMessages: void this.handleRemoteReceivedAsymmetricMessages(event.payload as SyncEventReceivedAsymmetricMessagesData) break + case WebSocketsServiceEvent.MessageSentToUser: + void this.handleRemoteReceivedAsymmetricMessages([(event as MessageSentToUserEvent).payload.message]) + break } } diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendMessage.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendMessage.ts index 556322681..348352d5e 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendMessage.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendMessage.ts @@ -37,7 +37,7 @@ export class ResendMessage implements UseCaseInterface { const sendMessageResult = await this.sendMessage.execute({ recipientUuid: params.recipient.contactUuid, encryptedMessage: encryptedMessage.getValue(), - replaceabilityIdentifier: params.rawMessage.replaceabilityIdentifier, + replaceabilityIdentifier: params.rawMessage.replaceability_identifier || undefined, }) return sendMessageResult diff --git a/packages/services/src/Domain/index.ts b/packages/services/src/Domain/index.ts index ad5c76674..35d65d138 100644 --- a/packages/services/src/Domain/index.ts +++ b/packages/services/src/Domain/index.ts @@ -4,7 +4,6 @@ export * from './Api/ApiServiceEventData' export * from './Api/LegacyApiServiceInterface' export * from './Api/MetaReceivedData' export * from './Api/SessionRefreshedData' -export * from './Api/WebSocketsEventData' export * from './Api/WebsocketsService' export * from './Api/WebSocketsServiceEvent' export * from './Application/AppGroupManagedApplication' diff --git a/packages/snjs/mocha/history.test.js b/packages/snjs/mocha/history.test.js index a684e2f39..7161055c9 100644 --- a/packages/snjs/mocha/history.test.js +++ b/packages/snjs/mocha/history.test.js @@ -267,6 +267,7 @@ describe('history manager', () => { it('should save initial revisions on server', async () => { const item = await Factory.createSyncedNote(application) + expect(item).to.be.ok await Factory.sleep(Factory.ServerRevisionCreationDelay) diff --git a/packages/snjs/mocha/lib/factory.js b/packages/snjs/mocha/lib/factory.js index d8557a9cb..5d4e919fd 100644 --- a/packages/snjs/mocha/lib/factory.js +++ b/packages/snjs/mocha/lib/factory.js @@ -288,7 +288,7 @@ export async function storagePayloadCount(application) { * Controlled via docker/syncing-server-js.env */ export const ServerRevisionFrequency = 2.1 -export const ServerRevisionCreationDelay = 1.0 +export const ServerRevisionCreationDelay = 1.5 export function yesterday() { return new Date(new Date().setDate(new Date().getDate() - 1)) diff --git a/packages/snjs/package.json b/packages/snjs/package.json index f998fcc2d..1ce5499f6 100644 --- a/packages/snjs/package.json +++ b/packages/snjs/package.json @@ -38,7 +38,7 @@ "@standardnotes/api": "workspace:*", "@standardnotes/common": "^1.50.0", "@standardnotes/domain-core": "^1.25.0", - "@standardnotes/domain-events": "^2.120.0", + "@standardnotes/domain-events": "^2.121.0", "@standardnotes/encryption": "workspace:*", "@standardnotes/features": "workspace:*", "@standardnotes/files": "workspace:*", diff --git a/yarn.lock b/yarn.lock index 3708368fb..f7d5f53e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4349,13 +4349,13 @@ __metadata: languageName: node linkType: hard -"@standardnotes/domain-events@npm:^2.120.0": - version: 2.120.0 - resolution: "@standardnotes/domain-events@npm:2.120.0" +"@standardnotes/domain-events@npm:^2.121.0": + version: 2.121.0 + resolution: "@standardnotes/domain-events@npm:2.121.0" dependencies: "@standardnotes/predicates": 1.6.9 "@standardnotes/security": 1.12.0 - checksum: bcd6caf10bc050199db4d0fb13605d43773418c1420efea583381ae6cd33a1a365451a61f3d8d6e08d19a52005e5d67ad2b4c8f3b8f951269b1a2a4bc0ac33cf + checksum: 49d4a834212f24b4469487ce6126d554e50145dee665326e2fc0536a1890febbca4e8c07e37666bfced9d5bfd36d175edfeb1483876326a4c964805993dba7ec languageName: node linkType: hard @@ -4829,7 +4829,7 @@ __metadata: "@standardnotes/api": "workspace:*" "@standardnotes/common": ^1.50.0 "@standardnotes/domain-core": ^1.25.0 - "@standardnotes/domain-events": ^2.120.0 + "@standardnotes/domain-events": ^2.121.0 "@standardnotes/encryption": "workspace:*" "@standardnotes/features": "workspace:*" "@standardnotes/files": "workspace:*"