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 4be25714a..afb796a96 100644 Binary files a/.yarn/cache/@standardnotes-domain-events-npm-2.121.0-77d4c0f05d-49d4a83421.zip and b/.yarn/cache/@standardnotes-domain-events-npm-2.122.0-e9214530a6-9dd2f02f1c.zip differ 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:*"