From 4ca291291c8f2bc8656c6e83b70a3ede1fcb3d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Fri, 1 Sep 2023 17:04:32 +0200 Subject: [PATCH] chore: add handling shared vault invites via websockets (#2475) --- ...nts-npm-2.122.0-e9214530a6-9dd2f02f1c.zip} | Bin 106504 -> 108162 bytes .../SharedVaultInviteServerHash.ts | 4 +- packages/responses/src/Domain/index.ts | 4 ++ .../src/Domain/Api/WebSocketsServiceEvent.ts | 1 + .../src/Domain/Api/WebsocketsService.ts | 3 ++ .../AsymmetricMessageService.ts | 4 +- .../UseCase/GetTrustedPayload.spec.ts | 2 +- .../UseCase/GetTrustedPayload.ts | 6 +-- .../UseCase/GetUntrustedPayload.ts | 6 +-- .../Domain/VaultInvite/VaultInviteService.ts | 40 ++++++++++-------- packages/snjs/package.json | 2 +- yarn.lock | 10 ++--- 12 files changed, 47 insertions(+), 35 deletions(-) rename .yarn/cache/{@standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip => @standardnotes-domain-events-npm-2.122.0-e9214530a6-9dd2f02f1c.zip} (82%) diff --git a/.yarn/cache/@standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip b/.yarn/cache/@standardnotes-domain-events-npm-2.122.0-e9214530a6-9dd2f02f1c.zip similarity index 82% rename from .yarn/cache/@standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip rename to .yarn/cache/@standardnotes-domain-events-npm-2.122.0-e9214530a6-9dd2f02f1c.zip index 4be25714a69987feef985f73bda91874f3362f63..afb796a969ebb209b45b4ec52ed93c7cfb0c83d5 100644 GIT binary patch delta 6761 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 diff --git a/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts b/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts index 2ec88e24b..18aae857b 100644 --- a/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts +++ b/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts @@ -1,6 +1,4 @@ -import { AsymmetricMessageServerHash } from '../AsymmetricMessage/AsymmetricMessageServerHash' - -export interface SharedVaultInviteServerHash extends AsymmetricMessageServerHash { +export interface SharedVaultInviteServerHash { uuid: string shared_vault_uuid: string user_uuid: string diff --git a/packages/responses/src/Domain/index.ts b/packages/responses/src/Domain/index.ts index fd5f9d193..bb3ec6e85 100644 --- a/packages/responses/src/Domain/index.ts +++ b/packages/responses/src/Domain/index.ts @@ -67,3 +67,7 @@ export * from './User/SettingData' export * from './User/UpdateSettingResponse' export * from './Notification/NotificationServerHash' + +export * from './SharedVaults/SharedVaultInviteServerHash' +export * from './SharedVaults/SharedVaultServerHash' +export * from './SharedVaults/SharedVaultUserServerHash' diff --git a/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts b/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts index dd1daec3a..e8c6ce61e 100644 --- a/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts +++ b/packages/services/src/Domain/Api/WebSocketsServiceEvent.ts @@ -2,4 +2,5 @@ export enum WebSocketsServiceEvent { UserRoleMessageReceived = 'WebSocketMessageReceived', NotificationAddedForUser = 'NotificationAddedForUser', MessageSentToUser = 'MessageSentToUser', + UserInvitedToSharedVault = 'UserInvitedToSharedVault', } diff --git a/packages/services/src/Domain/Api/WebsocketsService.ts b/packages/services/src/Domain/Api/WebsocketsService.ts index c34ae2ce9..9261e8d5d 100644 --- a/packages/services/src/Domain/Api/WebsocketsService.ts +++ b/packages/services/src/Domain/Api/WebsocketsService.ts @@ -71,6 +71,9 @@ export class WebSocketsService extends AbstractService { describe('execute', () => { const mockDto = { privateKey: 'test-private-key', - message: {} as AsymmetricMessageServerHash, + payload: {} as AsymmetricMessageServerHash, sender: {} as TrustedContactInterface, ownUserUuid: 'test-user-uuid', } diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetTrustedPayload.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetTrustedPayload.ts index 510c84a51..871cdf6ab 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetTrustedPayload.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetTrustedPayload.ts @@ -1,4 +1,4 @@ -import { AsymmetricMessageServerHash } from '@standardnotes/responses' +import { AsymmetricMessageServerHash, SharedVaultInviteServerHash } from '@standardnotes/responses' import { AsymmetricMessagePayload, TrustedContactInterface } from '@standardnotes/models' import { DecryptMessage } from '../../Encryption/UseCase/Asymmetric/DecryptMessage' import { Result, SyncUseCaseInterface } from '@standardnotes/domain-core' @@ -8,12 +8,12 @@ export class GetTrustedPayload implements SyncUseCaseInterface(dto: { privateKey: string - message: AsymmetricMessageServerHash + payload: AsymmetricMessageServerHash | SharedVaultInviteServerHash sender: TrustedContactInterface ownUserUuid: string }): Result { const result = this.decryptMessage.execute({ - message: dto.message.encrypted_message, + message: dto.payload.encrypted_message, sender: dto.sender, privateKey: dto.privateKey, }) diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetUntrustedPayload.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetUntrustedPayload.ts index 8b9fe9b42..e8cd6b884 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetUntrustedPayload.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetUntrustedPayload.ts @@ -1,4 +1,4 @@ -import { AsymmetricMessageServerHash } from '@standardnotes/responses' +import { AsymmetricMessageServerHash, SharedVaultInviteServerHash } from '@standardnotes/responses' import { AsymmetricMessagePayload } from '@standardnotes/models' import { DecryptMessage } from '../../Encryption/UseCase/Asymmetric/DecryptMessage' import { Result, SyncUseCaseInterface } from '@standardnotes/domain-core' @@ -8,10 +8,10 @@ export class GetUntrustedPayload implements SyncUseCaseInterface(dto: { privateKey: string - message: AsymmetricMessageServerHash + payload: AsymmetricMessageServerHash | SharedVaultInviteServerHash }): Result { const result = this.decryptMessage.execute({ - message: dto.message.encrypted_message, + message: dto.payload.encrypted_message, sender: undefined, privateKey: dto.privateKey, }) diff --git a/packages/services/src/Domain/VaultInvite/VaultInviteService.ts b/packages/services/src/Domain/VaultInvite/VaultInviteService.ts index c6c984738..1fa70a91b 100644 --- a/packages/services/src/Domain/VaultInvite/VaultInviteService.ts +++ b/packages/services/src/Domain/VaultInvite/VaultInviteService.ts @@ -1,3 +1,20 @@ +import { UserInvitedToSharedVaultEvent } from '@standardnotes/domain-events' +import { + ClientDisplayableError, + SharedVaultInviteServerHash, + SharedVaultUserServerHash, + isClientDisplayableError, + isErrorResponse, +} from '@standardnotes/responses' +import { ContentType, Result } from '@standardnotes/domain-core' +import { SharedVaultInvitesServer } from '@standardnotes/api' +import { + AsymmetricMessageSharedVaultInvite, + PayloadEmitSource, + SharedVaultListingInterface, + TrustedContactInterface, +} from '@standardnotes/models' + import { AcceptVaultInvite } from './UseCase/AcceptVaultInvite' import { SyncEvent, SyncEventReceivedSharedVaultInvitesData } from './../Event/SyncEvent' import { InternalEventInterface } from './../Internal/InternalEventInterface' @@ -15,26 +32,12 @@ import { SyncServiceInterface } from './../Sync/SyncServiceInterface' import { InternalEventBusInterface } from './../Internal/InternalEventBusInterface' import { SessionsClientInterface } from './../Session/SessionsClientInterface' import { GetAllContacts } from './../Contacts/UseCase/GetAllContacts' -import { - AsymmetricMessageSharedVaultInvite, - PayloadEmitSource, - SharedVaultListingInterface, - TrustedContactInterface, -} from '@standardnotes/models' import { VaultInviteServiceInterface } from './VaultInviteServiceInterface' -import { - ClientDisplayableError, - SharedVaultInviteServerHash, - SharedVaultUserServerHash, - isClientDisplayableError, - isErrorResponse, -} from '@standardnotes/responses' import { AbstractService } from './../Service/AbstractService' import { VaultInviteServiceEvent } from './VaultInviteServiceEvent' -import { ContentType, Result } from '@standardnotes/domain-core' -import { SharedVaultInvitesServer } from '@standardnotes/api' import { GetKeyPairs } from '../Encryption/UseCase/GetKeyPairs' import { DecryptErroredPayloads } from '../Encryption/UseCase/DecryptErroredPayloads' +import { WebSocketsServiceEvent } from '../Api/WebSocketsServiceEvent' export class VaultInviteService extends AbstractService @@ -98,6 +101,9 @@ export class VaultInviteService case SyncEvent.ReceivedSharedVaultInvites: await this.processInboundInvites(event.payload as SyncEventReceivedSharedVaultInvitesData) break + case WebSocketsServiceEvent.UserInvitedToSharedVault: + await this.processInboundInvites([(event as UserInvitedToSharedVaultEvent).payload.invite]) + break } } @@ -261,7 +267,7 @@ export class VaultInviteService const sender = this._findContact.execute({ userUuid: invite.sender_uuid }) if (!sender.isFailed()) { const trustedMessage = this._getTrustedPayload.execute({ - message: invite, + payload: invite, privateKey: keys.getValue().encryption.privateKey, ownUserUuid: this.session.userUuid, sender: sender.getValue(), @@ -279,7 +285,7 @@ export class VaultInviteService } const untrustedMessage = this._getUntrustedPayload.execute({ - message: invite, + payload: invite, privateKey: keys.getValue().encryption.privateKey, }) diff --git a/packages/snjs/package.json b/packages/snjs/package.json index 1ce5499f6..0110cd209 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.121.0", + "@standardnotes/domain-events": "^2.122.0", "@standardnotes/encryption": "workspace:*", "@standardnotes/features": "workspace:*", "@standardnotes/files": "workspace:*", diff --git a/yarn.lock b/yarn.lock index f7d5f53e6..6f2bd5b12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4349,13 +4349,13 @@ __metadata: languageName: node linkType: hard -"@standardnotes/domain-events@npm:^2.121.0": - version: 2.121.0 - resolution: "@standardnotes/domain-events@npm:2.121.0" +"@standardnotes/domain-events@npm:^2.122.0": + version: 2.122.0 + resolution: "@standardnotes/domain-events@npm:2.122.0" dependencies: "@standardnotes/predicates": 1.6.9 "@standardnotes/security": 1.12.0 - checksum: 49d4a834212f24b4469487ce6126d554e50145dee665326e2fc0536a1890febbca4e8c07e37666bfced9d5bfd36d175edfeb1483876326a4c964805993dba7ec + checksum: 9dd2f02f1c9c91b3380d0db88dba3e504aaa14b7e58dcb519611dd8b15edb27c111805eb0e34f1612751fb59428296a216e39b5711892f6c8f1fc1f057e61c50 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.121.0 + "@standardnotes/domain-events": ^2.122.0 "@standardnotes/encryption": "workspace:*" "@standardnotes/features": "workspace:*" "@standardnotes/files": "workspace:*"