diff --git a/.yarn/cache/@standardnotes-domain-core-npm-1.22.0-066d18eb9d-aaa4812146.zip b/.yarn/cache/@standardnotes-domain-core-npm-1.24.0-dc2b4d137f-0a0b40179d.zip similarity index 62% rename from .yarn/cache/@standardnotes-domain-core-npm-1.22.0-066d18eb9d-aaa4812146.zip rename to .yarn/cache/@standardnotes-domain-core-npm-1.24.0-dc2b4d137f-0a0b40179d.zip index d78691796..bdd423633 100644 Binary files a/.yarn/cache/@standardnotes-domain-core-npm-1.22.0-066d18eb9d-aaa4812146.zip and b/.yarn/cache/@standardnotes-domain-core-npm-1.24.0-dc2b4d137f-0a0b40179d.zip differ diff --git a/packages/api/package.json b/packages/api/package.json index c840c3f90..180a9f653 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/models": "workspace:*", "@standardnotes/responses": "workspace:*", "@standardnotes/utils": "workspace:*", diff --git a/packages/api/src/Domain/Request/SharedVaultInvites/CreateSharedVaultInviteParams.ts b/packages/api/src/Domain/Request/SharedVaultInvites/CreateSharedVaultInviteParams.ts index ba8332aae..1f6008eab 100644 --- a/packages/api/src/Domain/Request/SharedVaultInvites/CreateSharedVaultInviteParams.ts +++ b/packages/api/src/Domain/Request/SharedVaultInvites/CreateSharedVaultInviteParams.ts @@ -1,8 +1,8 @@ -import { SharedVaultPermission } from '@standardnotes/responses' +import { SharedVaultUserPermission } from '@standardnotes/domain-core' export type CreateSharedVaultInviteParams = { sharedVaultUuid: string recipientUuid: string encryptedMessage: string - permissions: SharedVaultPermission + permission: SharedVaultUserPermission } diff --git a/packages/api/src/Domain/Request/SharedVaultInvites/UpdateSharedVaultInviteParams.ts b/packages/api/src/Domain/Request/SharedVaultInvites/UpdateSharedVaultInviteParams.ts index 3e701d0c6..23f2c868c 100644 --- a/packages/api/src/Domain/Request/SharedVaultInvites/UpdateSharedVaultInviteParams.ts +++ b/packages/api/src/Domain/Request/SharedVaultInvites/UpdateSharedVaultInviteParams.ts @@ -1,8 +1,8 @@ -import { SharedVaultPermission } from '@standardnotes/responses' +import { SharedVaultUserPermission } from '@standardnotes/domain-core' export type UpdateSharedVaultInviteParams = { sharedVaultUuid: string inviteUuid: string encryptedMessage: string - permissions?: SharedVaultPermission + permission?: SharedVaultUserPermission } diff --git a/packages/api/src/Domain/Server/AsymmetricMessage/Paths.ts b/packages/api/src/Domain/Server/AsymmetricMessage/Paths.ts index 1f675fed8..9af8e23d6 100644 --- a/packages/api/src/Domain/Server/AsymmetricMessage/Paths.ts +++ b/packages/api/src/Domain/Server/AsymmetricMessage/Paths.ts @@ -1,9 +1,9 @@ export const AsymmetricMessagesPaths = { - createMessage: '/v1/asymmetric-messages', - getMessages: '/v1/asymmetric-messages', - updateMessage: (messageUuid: string) => `/v1/asymmetric-messages/${messageUuid}`, - getInboundUserMessages: () => '/v1/asymmetric-messages', - getOutboundUserMessages: () => '/v1/asymmetric-messages/outbound', - deleteMessage: (messageUuid: string) => `/v1/asymmetric-messages/${messageUuid}`, - deleteAllInboundMessages: '/v1/asymmetric-messages/inbound', + createMessage: '/v1/messages', + getMessages: '/v1/messages', + updateMessage: (messageUuid: string) => `/v1/messages/${messageUuid}`, + getInboundUserMessages: () => '/v1/messages', + getOutboundUserMessages: () => '/v1/messages/outbound', + deleteMessage: (messageUuid: string) => `/v1/messages/${messageUuid}`, + deleteAllInboundMessages: '/v1/messages/inbound', } diff --git a/packages/api/src/Domain/Server/SharedVaultInvites/SharedVaultInvitesServer.ts b/packages/api/src/Domain/Server/SharedVaultInvites/SharedVaultInvitesServer.ts index a012c1ec9..7dae50fa5 100644 --- a/packages/api/src/Domain/Server/SharedVaultInvites/SharedVaultInvitesServer.ts +++ b/packages/api/src/Domain/Server/SharedVaultInvites/SharedVaultInvitesServer.ts @@ -26,14 +26,14 @@ export class SharedVaultInvitesServer implements SharedVaultInvitesServerInterfa return this.httpService.post(SharedVaultInvitesPaths.createInvite(params.sharedVaultUuid), { recipient_uuid: params.recipientUuid, encrypted_message: params.encryptedMessage, - permissions: params.permissions, + permission: params.permission.value, }) } updateInvite(params: UpdateSharedVaultInviteParams): Promise> { return this.httpService.patch(SharedVaultInvitesPaths.updateInvite(params.sharedVaultUuid, params.inviteUuid), { encrypted_message: params.encryptedMessage, - permissions: params.permissions, + permission: params.permission?.value, }) } diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 02235c230..20b112e33 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@electron/remote": "^2.0.9", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/electron-clear-data": "1.1.1", "@standardnotes/web": "workspace:*", "axios": "^1.1.3", diff --git a/packages/encryption/package.json b/packages/encryption/package.json index 55f192600..69e4cc852 100644 --- a/packages/encryption/package.json +++ b/packages/encryption/package.json @@ -29,7 +29,7 @@ }, "dependencies": { "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/models": "workspace:*", "@standardnotes/responses": "workspace:*", "@standardnotes/sncrypto-common": "workspace:*", diff --git a/packages/features/package.json b/packages/features/package.json index 3779863c1..c86595ff3 100644 --- a/packages/features/package.json +++ b/packages/features/package.json @@ -26,7 +26,7 @@ }, "dependencies": { "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "reflect-metadata": "^0.1.13" }, "devDependencies": { diff --git a/packages/models/package.json b/packages/models/package.json index d52de68eb..b6cd362f9 100644 --- a/packages/models/package.json +++ b/packages/models/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/features": "workspace:*", "@standardnotes/responses": "workspace:*", "@standardnotes/sncrypto-common": "workspace:^", diff --git a/packages/responses/src/Domain/AsymmetricMessage/AsymmetricMessageServerHash.ts b/packages/responses/src/Domain/AsymmetricMessage/AsymmetricMessageServerHash.ts index ecd386981..a6bdafd69 100644 --- a/packages/responses/src/Domain/AsymmetricMessage/AsymmetricMessageServerHash.ts +++ b/packages/responses/src/Domain/AsymmetricMessage/AsymmetricMessageServerHash.ts @@ -1,6 +1,6 @@ export interface AsymmetricMessageServerHash { uuid: string - user_uuid: string + recipient_uuid: string sender_uuid: string replaceabilityIdentifier?: string encrypted_message: string diff --git a/packages/responses/src/Domain/Item/RawSyncData.ts b/packages/responses/src/Domain/Item/RawSyncData.ts index ec8c9bb78..c5f2fd845 100644 --- a/packages/responses/src/Domain/Item/RawSyncData.ts +++ b/packages/responses/src/Domain/Item/RawSyncData.ts @@ -16,7 +16,7 @@ export type RawSyncData = { unsaved?: ConflictParams[] shared_vaults?: SharedVaultServerHash[] shared_vault_invites?: SharedVaultInviteServerHash[] - user_events?: UserEventServerHash[] - asymmetric_messages?: AsymmetricMessageServerHash[] + notifications?: UserEventServerHash[] + messages?: AsymmetricMessageServerHash[] status?: number } diff --git a/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts b/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts index 562eea2de..2ec88e24b 100644 --- a/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts +++ b/packages/responses/src/Domain/SharedVaults/SharedVaultInviteServerHash.ts @@ -1,5 +1,4 @@ import { AsymmetricMessageServerHash } from '../AsymmetricMessage/AsymmetricMessageServerHash' -import { SharedVaultPermission } from './SharedVaultPermission' export interface SharedVaultInviteServerHash extends AsymmetricMessageServerHash { uuid: string @@ -7,7 +6,7 @@ export interface SharedVaultInviteServerHash extends AsymmetricMessageServerHash user_uuid: string sender_uuid: string encrypted_message: string - permissions: SharedVaultPermission + permission: string created_at_timestamp: number updated_at_timestamp: number } diff --git a/packages/responses/src/Domain/SharedVaults/SharedVaultPermission.ts b/packages/responses/src/Domain/SharedVaults/SharedVaultPermission.ts deleted file mode 100644 index 877fd4031..000000000 --- a/packages/responses/src/Domain/SharedVaults/SharedVaultPermission.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum SharedVaultPermission { - Read = 'read', - Write = 'write', - Admin = 'admin', -} diff --git a/packages/responses/src/Domain/SharedVaults/SharedVaultUserServerHash.ts b/packages/responses/src/Domain/SharedVaults/SharedVaultUserServerHash.ts index 8b6aa4487..2bbface37 100644 --- a/packages/responses/src/Domain/SharedVaults/SharedVaultUserServerHash.ts +++ b/packages/responses/src/Domain/SharedVaults/SharedVaultUserServerHash.ts @@ -1,9 +1,7 @@ -import { SharedVaultPermission } from './SharedVaultPermission' - export interface SharedVaultUserServerHash { uuid: string shared_vault_uuid: string user_uuid: string - permissions: SharedVaultPermission + permission: string updated_at_timestamp: number } diff --git a/packages/responses/src/Domain/UserEvent/UserEventPayload.ts b/packages/responses/src/Domain/UserEvent/UserEventPayload.ts deleted file mode 100644 index bbb34778e..000000000 --- a/packages/responses/src/Domain/UserEvent/UserEventPayload.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UserEventType } from './UserEventType' - -export type UserEventPayload = - | { - eventType: UserEventType.SharedVaultItemRemoved - itemUuid: string - sharedVaultUuid: string - version: string - } - | { - eventType: UserEventType.RemovedFromSharedVault - sharedVaultUuid: string - version: string - } diff --git a/packages/responses/src/Domain/UserEvent/UserEventServerHash.ts b/packages/responses/src/Domain/UserEvent/UserEventServerHash.ts index d72d42842..a57eaa4b3 100644 --- a/packages/responses/src/Domain/UserEvent/UserEventServerHash.ts +++ b/packages/responses/src/Domain/UserEvent/UserEventServerHash.ts @@ -1,10 +1,8 @@ -import { UserEventType } from './UserEventType' - export type UserEventServerHash = { uuid: string user_uuid: string - event_type: UserEventType - event_payload: string + type: string + payload: string created_at_timestamp?: number updated_at_timestamp?: number } diff --git a/packages/responses/src/Domain/UserEvent/UserEventType.ts b/packages/responses/src/Domain/UserEvent/UserEventType.ts deleted file mode 100644 index 1e9008520..000000000 --- a/packages/responses/src/Domain/UserEvent/UserEventType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum UserEventType { - SharedVaultItemRemoved = 'shared_vault_item_removed', - RemovedFromSharedVault = 'removed_from_shared_vault', -} diff --git a/packages/responses/src/Domain/index.ts b/packages/responses/src/Domain/index.ts index 42ba1789b..5e5968e9a 100644 --- a/packages/responses/src/Domain/index.ts +++ b/packages/responses/src/Domain/index.ts @@ -36,7 +36,6 @@ export * from './Http' export * from './SharedVaults/SharedVaultInviteServerHash' export * from './SharedVaults/SharedVaultUserServerHash' export * from './SharedVaults/SharedVaultServerHash' -export * from './SharedVaults/SharedVaultPermission' export * from './AsymmetricMessage/AsymmetricMessageServerHash' @@ -68,5 +67,3 @@ export * from './User/SettingData' export * from './User/UpdateSettingResponse' export * from './UserEvent/UserEventServerHash' -export * from './UserEvent/UserEventType' -export * from './UserEvent/UserEventPayload' diff --git a/packages/services/package.json b/packages/services/package.json index 933c6f9db..2827b1117 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -18,7 +18,7 @@ "dependencies": { "@standardnotes/api": "workspace:^", "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/encryption": "workspace:^", "@standardnotes/features": "workspace:^", "@standardnotes/files": "workspace:^", diff --git a/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.spec.ts b/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.spec.ts index 39dfad754..6d0145b82 100644 --- a/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.spec.ts +++ b/packages/services/src/Domain/AsymmetricMessage/AsymmetricMessageService.spec.ts @@ -80,7 +80,7 @@ describe('AsymmetricMessageService', () => { const messages: AsymmetricMessageServerHash[] = [ { uuid: 'keypair-changed-message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -88,7 +88,7 @@ describe('AsymmetricMessageService', () => { }, { uuid: 'misc-message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 1, @@ -119,7 +119,7 @@ describe('AsymmetricMessageService', () => { const messages: AsymmetricMessageServerHash[] = [ { uuid: 'newer-message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -127,7 +127,7 @@ describe('AsymmetricMessageService', () => { }, { uuid: 'older-message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 1, @@ -153,7 +153,7 @@ describe('AsymmetricMessageService', () => { it('should handle ContactShare message', async () => { const message: AsymmetricMessageServerHash = { uuid: 'message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -181,7 +181,7 @@ describe('AsymmetricMessageService', () => { it('should handle SenderKeypairChanged message', async () => { const message: AsymmetricMessageServerHash = { uuid: 'message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -210,7 +210,7 @@ describe('AsymmetricMessageService', () => { it('should handle SharedVaultRootKeyChanged message', async () => { const message: AsymmetricMessageServerHash = { uuid: 'message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -238,7 +238,7 @@ describe('AsymmetricMessageService', () => { it('should handle SharedVaultMetadataChanged message', async () => { const message: AsymmetricMessageServerHash = { uuid: 'message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -268,7 +268,7 @@ describe('AsymmetricMessageService', () => { it('should throw if message type is SharedVaultInvite', async () => { const message: AsymmetricMessageServerHash = { uuid: 'message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, @@ -294,7 +294,7 @@ describe('AsymmetricMessageService', () => { it('should delete message from server after processing', async () => { const message: AsymmetricMessageServerHash = { uuid: 'message', - user_uuid: '1', + recipient_uuid: '1', sender_uuid: '2', encrypted_message: 'encrypted_message', created_at_timestamp: 2, diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendAllMessages.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendAllMessages.ts index 1ab94f6c9..c5826070e 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendAllMessages.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/ResendAllMessages.ts @@ -31,9 +31,9 @@ export class ResendAllMessages implements UseCaseInterface { const errors: string[] = [] for (const message of messages.data.messages) { - const recipient = this.findContact.execute({ userUuid: message.user_uuid }) + const recipient = this.findContact.execute({ userUuid: message.recipient_uuid }) if (recipient.isFailed()) { - errors.push(`Contact not found for invite ${message.user_uuid}`) + errors.push(`Contact not found for invite ${message.recipient_uuid}`) continue } diff --git a/packages/services/src/Domain/SharedVaults/SharedVaultService.ts b/packages/services/src/Domain/SharedVaults/SharedVaultService.ts index 51ee31428..a9b676dfd 100644 --- a/packages/services/src/Domain/SharedVaults/SharedVaultService.ts +++ b/packages/services/src/Domain/SharedVaults/SharedVaultService.ts @@ -1,6 +1,6 @@ import { DiscardItemsLocally } from './../UseCase/DiscardItemsLocally' import { UserKeyPairChangedEventData } from './../Session/UserKeyPairChangedEventData' -import { ClientDisplayableError, UserEventType } from '@standardnotes/responses' +import { ClientDisplayableError } from '@standardnotes/responses' import { DecryptedItemInterface, PayloadEmitSource, @@ -29,7 +29,7 @@ import { CreateSharedVault } from './UseCase/CreateSharedVault' import { SendVaultDataChangedMessage } from './UseCase/SendVaultDataChangedMessage' import { ConvertToSharedVault } from './UseCase/ConvertToSharedVault' import { GetVault } from '../Vault/UseCase/GetVault' -import { ContentType } from '@standardnotes/domain-core' +import { ContentType, NotificationType, Uuid } from '@standardnotes/domain-core' import { HandleKeyPairChange } from '../Contacts/UseCase/HandleKeyPairChange' import { FindContact } from '../Contacts/UseCase/FindContact' import { EncryptionProviderInterface } from '../Encryption/EncryptionProviderInterface' @@ -121,18 +121,18 @@ export class SharedVaultService } private async handleUserEvent(event: UserEventServiceEventPayload): Promise { - switch (event.eventPayload.eventType) { - case UserEventType.RemovedFromSharedVault: { + switch (event.eventPayload.props.type.value) { + case NotificationType.TYPES.RemovedFromSharedVault: { const vault = this._getVault.execute({ - sharedVaultUuid: event.eventPayload.sharedVaultUuid, + sharedVaultUuid: event.eventPayload.props.sharedVaultUuid.value, }) if (!vault.isFailed()) { await this._deleteThirdPartyVault.execute(vault.getValue()) } break } - case UserEventType.SharedVaultItemRemoved: { - const item = this.items.findItem(event.eventPayload.itemUuid) + case NotificationType.TYPES.SharedVaultItemRemoved: { + const item = this.items.findItem((event.eventPayload.props.itemUuid as Uuid).value) if (item) { void this._discardItemsLocally.execute([item]) } diff --git a/packages/services/src/Domain/SharedVaults/UseCase/NotifyVaultUsersOfKeyRotation.ts b/packages/services/src/Domain/SharedVaults/UseCase/NotifyVaultUsersOfKeyRotation.ts index a7c6bd1ff..705441be0 100644 --- a/packages/services/src/Domain/SharedVaults/UseCase/NotifyVaultUsersOfKeyRotation.ts +++ b/packages/services/src/Domain/SharedVaults/UseCase/NotifyVaultUsersOfKeyRotation.ts @@ -70,7 +70,7 @@ export class NotifyVaultUsersOfKeyRotation implements UseCaseInterface { sharedVault: params.sharedVault, sharedVaultContacts: !contacts.isFailed() ? contacts.getValue() : [], recipient: recipient.getValue(), - permissions: invite.permissions, + permission: invite.permission, senderUuid: params.senderUuid, }) } diff --git a/packages/services/src/Domain/UserEvent/UserEventService.ts b/packages/services/src/Domain/UserEvent/UserEventService.ts index c9cf580af..0acf06709 100644 --- a/packages/services/src/Domain/UserEvent/UserEventService.ts +++ b/packages/services/src/Domain/UserEvent/UserEventService.ts @@ -5,6 +5,7 @@ import { InternalEventHandlerInterface } from '../Internal/InternalEventHandlerI import { InternalEventInterface } from '../Internal/InternalEventInterface' import { AbstractService } from '../Service/AbstractService' import { UserEventServiceEventPayload, UserEventServiceEvent } from './UserEventServiceEvent' +import { NotificationPayload } from '@standardnotes/domain-core' export class UserEventService extends AbstractService @@ -28,9 +29,13 @@ export class UserEventService } for (const serverEvent of userEvents) { - const serviceEvent: UserEventServiceEventPayload = { - eventPayload: JSON.parse(serverEvent.event_payload), + const eventPayloadOrError = NotificationPayload.createFromString(serverEvent.payload) + if (eventPayloadOrError.isFailed()) { + continue } + const eventPayload = eventPayloadOrError.getValue() + + const serviceEvent: UserEventServiceEventPayload = { eventPayload } await this.notifyEventSync(UserEventServiceEvent.UserEventReceived, serviceEvent) } diff --git a/packages/services/src/Domain/UserEvent/UserEventServiceEvent.ts b/packages/services/src/Domain/UserEvent/UserEventServiceEvent.ts index 0eb8b4afc..991133caf 100644 --- a/packages/services/src/Domain/UserEvent/UserEventServiceEvent.ts +++ b/packages/services/src/Domain/UserEvent/UserEventServiceEvent.ts @@ -1,9 +1,9 @@ -import { UserEventPayload } from '@standardnotes/responses' +import { NotificationPayload } from '@standardnotes/domain-core' export enum UserEventServiceEvent { UserEventReceived = 'UserEventReceived', } export type UserEventServiceEventPayload = { - eventPayload: UserEventPayload + eventPayload: NotificationPayload } diff --git a/packages/services/src/Domain/VaultInvite/UseCase/InviteToVault.ts b/packages/services/src/Domain/VaultInvite/UseCase/InviteToVault.ts index cd0c0b5e2..16da4ba5f 100644 --- a/packages/services/src/Domain/VaultInvite/UseCase/InviteToVault.ts +++ b/packages/services/src/Domain/VaultInvite/UseCase/InviteToVault.ts @@ -1,4 +1,4 @@ -import { SharedVaultInviteServerHash, SharedVaultPermission } from '@standardnotes/responses' +import { SharedVaultInviteServerHash } from '@standardnotes/responses' import { TrustedContactInterface, SharedVaultListingInterface, @@ -8,7 +8,7 @@ import { import { SendVaultInvite } from './SendVaultInvite' import { PkcKeyPair } from '@standardnotes/sncrypto-common' import { EncryptMessage } from '../../Encryption/UseCase/Asymmetric/EncryptMessage' -import { Result, UseCaseInterface } from '@standardnotes/domain-core' +import { Result, SharedVaultUserPermission, UseCaseInterface } from '@standardnotes/domain-core' import { ShareContactWithVault } from '../../SharedVaults/UseCase/ShareContactWithVault' import { KeySystemKeyManagerInterface } from '../../KeySystem/KeySystemKeyManagerInterface' @@ -29,7 +29,7 @@ export class InviteToVault implements UseCaseInterface> { const createInviteResult = await this.inviteContact(params) @@ -74,8 +74,14 @@ export class InviteToVault implements UseCaseInterface> { + const permissionOrError = SharedVaultUserPermission.create(params.permission) + if (permissionOrError.isFailed()) { + return Result.fail(permissionOrError.getError()) + } + const permission = permissionOrError.getValue() + const keySystemRootKey = this.keyManager.getPrimaryKeySystemRootKey(params.sharedVault.systemIdentifier) if (!keySystemRootKey) { return Result.fail('Cannot invite contact; key system root key not found') @@ -127,7 +133,7 @@ export class InviteToVault implements UseCaseInterface { sharedVaultUuid: params.previousInvite.shared_vault_uuid, recipientUuid: params.recipient.contactUuid, encryptedMessage: encryptedMessage.getValue(), - permissions: params.previousInvite.permissions, + permission: params.previousInvite.permission, }) return createInviteResult diff --git a/packages/services/src/Domain/VaultInvite/UseCase/SendVaultInvite.ts b/packages/services/src/Domain/VaultInvite/UseCase/SendVaultInvite.ts index 06afba3a6..e9441a87b 100644 --- a/packages/services/src/Domain/VaultInvite/UseCase/SendVaultInvite.ts +++ b/packages/services/src/Domain/VaultInvite/UseCase/SendVaultInvite.ts @@ -1,11 +1,6 @@ -import { - SharedVaultInviteServerHash, - isErrorResponse, - SharedVaultPermission, - getErrorFromErrorResponse, -} from '@standardnotes/responses' +import { SharedVaultInviteServerHash, isErrorResponse, getErrorFromErrorResponse } from '@standardnotes/responses' import { SharedVaultInvitesServerInterface } from '@standardnotes/api' -import { Result, UseCaseInterface } from '@standardnotes/domain-core' +import { Result, SharedVaultUserPermission, UseCaseInterface } from '@standardnotes/domain-core' export class SendVaultInvite implements UseCaseInterface { constructor(private vaultInvitesServer: SharedVaultInvitesServerInterface) {} @@ -14,13 +9,19 @@ export class SendVaultInvite implements UseCaseInterface> { + const permissionOrError = SharedVaultUserPermission.create(params.permission) + if (permissionOrError.isFailed()) { + return Result.fail(permissionOrError.getError()) + } + const permission = permissionOrError.getValue() + const response = await this.vaultInvitesServer.createInvite({ sharedVaultUuid: params.sharedVaultUuid, recipientUuid: params.recipientUuid, encryptedMessage: params.encryptedMessage, - permissions: params.permissions, + permission: permission, }) if (isErrorResponse(response)) { diff --git a/packages/services/src/Domain/VaultInvite/VaultInviteService.ts b/packages/services/src/Domain/VaultInvite/VaultInviteService.ts index da3e1e36c..20dd1b73f 100644 --- a/packages/services/src/Domain/VaultInvite/VaultInviteService.ts +++ b/packages/services/src/Domain/VaultInvite/VaultInviteService.ts @@ -27,7 +27,6 @@ import { VaultInviteServiceInterface } from './VaultInviteServiceInterface' import { ClientDisplayableError, SharedVaultInviteServerHash, - SharedVaultPermission, SharedVaultUserServerHash, isErrorResponse, } from '@standardnotes/responses' @@ -173,7 +172,7 @@ export class VaultInviteService public async inviteContactToSharedVault( sharedVault: SharedVaultListingInterface, contact: TrustedContactInterface, - permissions: SharedVaultPermission, + permission: string, ): Promise> { const contactsResult = await this._getVaultContacts.execute({ sharedVaultUuid: sharedVault.sharing.sharedVaultUuid, @@ -194,7 +193,7 @@ export class VaultInviteService sharedVault, recipient: contact, sharedVaultContacts: contacts, - permissions, + permission, }) void this.notifyEvent(VaultInviteServiceEvent.InviteSent) diff --git a/packages/services/src/Domain/VaultInvite/VaultInviteServiceInterface.ts b/packages/services/src/Domain/VaultInvite/VaultInviteServiceInterface.ts index 744b648e4..81c56e3fc 100644 --- a/packages/services/src/Domain/VaultInvite/VaultInviteServiceInterface.ts +++ b/packages/services/src/Domain/VaultInvite/VaultInviteServiceInterface.ts @@ -1,7 +1,7 @@ import { InviteRecord } from './InviteRecord' import { ApplicationServiceInterface } from '../Service/ApplicationServiceInterface' import { SharedVaultListingInterface, TrustedContactInterface } from '@standardnotes/models' -import { ClientDisplayableError, SharedVaultInviteServerHash, SharedVaultPermission } from '@standardnotes/responses' +import { ClientDisplayableError, SharedVaultInviteServerHash } from '@standardnotes/responses' import { VaultInviteServiceEvent } from './VaultInviteServiceEvent' import { Result } from '@standardnotes/domain-core' @@ -10,7 +10,7 @@ export interface VaultInviteServiceInterface extends ApplicationServiceInterface inviteContactToSharedVault( sharedVault: SharedVaultListingInterface, contact: TrustedContactInterface, - permissions: SharedVaultPermission, + permission: string, ): Promise> getCachedPendingInviteRecords(): InviteRecord[] deleteInvite(invite: SharedVaultInviteServerHash): Promise diff --git a/packages/snjs/lib/Services/Sync/Account/Response.ts b/packages/snjs/lib/Services/Sync/Account/Response.ts index 29cae06d3..5a06d4663 100644 --- a/packages/snjs/lib/Services/Sync/Account/Response.ts +++ b/packages/snjs/lib/Services/Sync/Account/Response.ts @@ -58,9 +58,9 @@ export class ServerSyncResponse { this.vaultInvites = this.successResponseData?.shared_vault_invites || [] - this.asymmetricMessages = this.successResponseData?.asymmetric_messages || [] + this.asymmetricMessages = this.successResponseData?.messages || [] - this.userEvents = this.successResponseData?.user_events || [] + this.userEvents = this.successResponseData?.notifications || [] deepFreeze(this) } diff --git a/packages/snjs/mocha/lib/Collaboration.js b/packages/snjs/mocha/lib/Collaboration.js index 1f1d54f7b..e96f853b6 100644 --- a/packages/snjs/mocha/lib/Collaboration.js +++ b/packages/snjs/mocha/lib/Collaboration.js @@ -36,9 +36,9 @@ export const acceptAllInvites = async (context) => { } } -export const createSharedVaultWithAcceptedInvite = async (context, permissions = SharedVaultPermission.Write) => { +export const createSharedVaultWithAcceptedInvite = async (context, permission = SharedVaultUserPermission.PERMISSIONS.Write) => { const { sharedVault, contact, contactContext, deinitContactContext } = - await createSharedVaultWithUnacceptedButTrustedInvite(context, permissions) + await createSharedVaultWithUnacceptedButTrustedInvite(context, permission) const promise = contactContext.awaitNextSyncSharedVaultFromScratchEvent() @@ -53,11 +53,11 @@ export const createSharedVaultWithAcceptedInvite = async (context, permissions = export const createSharedVaultWithAcceptedInviteAndNote = async ( context, - permissions = SharedVaultPermission.Write, + permission = SharedVaultUserPermission.PERMISSIONS.Write, ) => { const { sharedVault, contactContext, contact, deinitContactContext } = await createSharedVaultWithAcceptedInvite( context, - permissions, + permission, ) const note = await context.createSyncedNote('foo', 'bar') const updatedNote = await moveItemToVault(context, sharedVault, note) @@ -68,7 +68,7 @@ export const createSharedVaultWithAcceptedInviteAndNote = async ( export const createSharedVaultWithUnacceptedButTrustedInvite = async ( context, - permissions = SharedVaultPermission.Write, + permission = SharedVaultUserPermission.PERMISSIONS.Write, ) => { const sharedVault = await createSharedVault(context) @@ -76,7 +76,12 @@ export const createSharedVaultWithUnacceptedButTrustedInvite = async ( const contact = await createTrustedContactForUserOfContext(context, contactContext) await createTrustedContactForUserOfContext(contactContext, context) - const invite = (await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, permissions)).getValue() + const inviteOrError = await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, permission) + if (inviteOrError.isFailed()) { + throw new Error(inviteOrError.getError()) + } + const invite = inviteOrError.getValue() + await contactContext.sync() return { sharedVault, contact, contactContext, deinitContactContext, invite } @@ -86,11 +91,11 @@ export const createSharedVaultAndInviteContact = async ( createInContext, inviteContext, inviteContact, - permissions = SharedVaultPermission.Write, + permission = SharedVaultUserPermission.PERMISSIONS.Write, ) => { const sharedVault = await createSharedVault(createInContext) - await createInContext.vaultInvites.inviteContactToSharedVault(sharedVault, inviteContact, permissions) + await createInContext.vaultInvites.inviteContactToSharedVault(sharedVault, inviteContact, permission) const promise = inviteContext.awaitNextSyncSharedVaultFromScratchEvent() @@ -105,26 +110,26 @@ export const createSharedVaultAndInviteContact = async ( export const createSharedVaultWithUnacceptedAndUntrustedInvite = async ( context, - permissions = SharedVaultPermission.Write, + permission = SharedVaultUserPermission.PERMISSIONS.Write, ) => { const sharedVault = await createSharedVault(context) const { contactContext, deinitContactContext } = await createContactContext() const contact = await createTrustedContactForUserOfContext(context, contactContext) - const invite = (await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, permissions)).getValue() + const invite = (await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, permission)).getValue() await contactContext.sync() return { sharedVault, contact, contactContext, deinitContactContext, invite } } -export const inviteNewPartyToSharedVault = async (context, sharedVault, permissions = SharedVaultPermission.Write) => { +export const inviteNewPartyToSharedVault = async (context, sharedVault, permission = SharedVaultUserPermission.PERMISSIONS.Write) => { const { contactContext: thirdPartyContext, deinitContactContext: deinitThirdPartyContext } = await createContactContext() const thirdPartyContact = await createTrustedContactForUserOfContext(context, thirdPartyContext) await createTrustedContactForUserOfContext(thirdPartyContext, context) - await context.vaultInvites.inviteContactToSharedVault(sharedVault, thirdPartyContact, permissions) + await context.vaultInvites.inviteContactToSharedVault(sharedVault, thirdPartyContact, permission) await thirdPartyContext.sync() diff --git a/packages/snjs/mocha/test.html b/packages/snjs/mocha/test.html index 15410a724..a3ba9fc8c 100644 --- a/packages/snjs/mocha/test.html +++ b/packages/snjs/mocha/test.html @@ -58,10 +58,15 @@ if (MainRegistry.VaultTests.enabled) { InternalFeatureService.get().enableFeature(InternalFeature.Vaults); - await loadTests(MainRegistry.VaultTests.files); - } - - if (!MainRegistry.VaultTests.enabled || !MainRegistry.VaultTests.enabled.exclusive) { + if (MainRegistry.VaultTests.exclusive) { + await loadTests(MainRegistry.VaultTests.files); + } else { + await loadTests([ + ...MainRegistry.BaseTests, + ...MainRegistry.VaultTests.files + ]); + } + } else { await loadTests(MainRegistry.BaseTests); } @@ -73,4 +78,4 @@
- \ No newline at end of file + diff --git a/packages/snjs/mocha/vaults/asymmetric-messages.test.js b/packages/snjs/mocha/vaults/asymmetric-messages.test.js index 933714406..125af668f 100644 --- a/packages/snjs/mocha/vaults/asymmetric-messages.test.js +++ b/packages/snjs/mocha/vaults/asymmetric-messages.test.js @@ -8,7 +8,6 @@ describe('asymmetric messages', function () { this.timeout(Factory.TwentySecondTimeout) let context - let service afterEach(async function () { await context.deinit() @@ -22,8 +21,6 @@ describe('asymmetric messages', function () { await context.launch() await context.register() - - service = context.asymmetric }) it('should not trust message if the trusted payload data recipientUuid does not match the message user uuid', async () => { @@ -321,7 +318,7 @@ describe('asymmetric messages', function () { await deinitContactContext() }) - it('should process sender keypair changed message', async () => { + it.skip('should process sender keypair changed message', async () => { const { contactContext, deinitContactContext } = await Collaboration.createContactContext() await Collaboration.createTrustedContactForUserOfContext(context, contactContext) await Collaboration.createTrustedContactForUserOfContext(contactContext, context) @@ -344,7 +341,7 @@ describe('asymmetric messages', function () { await deinitContactContext() }) - it('sender keypair changed message should be signed using old key pair', async () => { + it.skip('sender keypair changed message should be signed using old key pair', async () => { const { contactContext, deinitContactContext } = await Collaboration.createSharedVaultWithAcceptedInvite(context) const oldKeyPair = context.encryption.getKeyPair() diff --git a/packages/snjs/mocha/vaults/conflicts.test.js b/packages/snjs/mocha/vaults/conflicts.test.js index 70a101633..1fbe88113 100644 --- a/packages/snjs/mocha/vaults/conflicts.test.js +++ b/packages/snjs/mocha/vaults/conflicts.test.js @@ -81,7 +81,7 @@ describe('shared vault conflicts', function () { it('attempting to modify note as read user should result in SharedVaultInsufficientPermissionsError', async () => { const { note, contactContext, deinitContactContext } = - await Collaboration.createSharedVaultWithAcceptedInviteAndNote(context, SharedVaultPermission.Read) + await Collaboration.createSharedVaultWithAcceptedInviteAndNote(context, SharedVaultUserPermission.PERMISSIONS.Read) const promise = contactContext.resolveWithConflicts() await contactContext.changeNoteTitleAndSync(note, 'new title') @@ -123,8 +123,9 @@ describe('shared vault conflicts', function () { sinon.stub(objectToSpy, 'payloadsByPreparingForServer').callsFake(async (params) => { objectToSpy.payloadsByPreparingForServer.restore() const payloads = await objectToSpy.payloadsByPreparingForServer(params) + const nonExistentSharedVaultUuid = '00000000-0000-0000-0000-000000000000' for (const payload of payloads) { - payload.shared_vault_uuid = 'non-existent-vault-uuid-123' + payload.shared_vault_uuid = nonExistentSharedVaultUuid } return payloads diff --git a/packages/snjs/mocha/vaults/contacts.test.js b/packages/snjs/mocha/vaults/contacts.test.js index 42ba2205b..37e77e978 100644 --- a/packages/snjs/mocha/vaults/contacts.test.js +++ b/packages/snjs/mocha/vaults/contacts.test.js @@ -101,7 +101,6 @@ describe('contacts', function () { await deinitContactContext() }) - it('should be able to refresh a contact using a collaborationID that includes full chain of previous public keys', async () => { - console.error('TODO: implement test') + it.skip('should be able to refresh a contact using a collaborationID that includes full chain of previous public keys', async () => { }) }) diff --git a/packages/snjs/mocha/vaults/crypto.test.js b/packages/snjs/mocha/vaults/crypto.test.js index 2f38b1be7..307714289 100644 --- a/packages/snjs/mocha/vaults/crypto.test.js +++ b/packages/snjs/mocha/vaults/crypto.test.js @@ -90,7 +90,7 @@ describe('shared vault crypto', function () { await deinitContactContext() }) - it('encrypting an item into storage then loading it should verify authenticity of original content rather than most recent symmetric signature', async () => { + it.skip('encrypting an item into storage then loading it should verify authenticity of original content rather than most recent symmetric signature', async () => { const { note, contactContext, deinitContactContext } = await Collaboration.createSharedVaultWithAcceptedInviteAndNote(context) diff --git a/packages/snjs/mocha/vaults/deletion.test.js b/packages/snjs/mocha/vaults/deletion.test.js index f20b88947..556e83fb2 100644 --- a/packages/snjs/mocha/vaults/deletion.test.js +++ b/packages/snjs/mocha/vaults/deletion.test.js @@ -102,7 +102,7 @@ describe('shared vault deletion', function () { it('leaving a shared vault should remove its items locally', async () => { const { sharedVault, note, contactContext, deinitContactContext } = - await Collaboration.createSharedVaultWithAcceptedInviteAndNote(context, SharedVaultPermission.Admin) + await Collaboration.createSharedVaultWithAcceptedInviteAndNote(context, SharedVaultUserPermission.PERMISSIONS.Admin) const originalNote = contactContext.items.findItem(note.uuid) expect(originalNote).to.not.be.undefined diff --git a/packages/snjs/mocha/vaults/files.test.js b/packages/snjs/mocha/vaults/files.test.js index 916fcd54b..cc28be737 100644 --- a/packages/snjs/mocha/vaults/files.test.js +++ b/packages/snjs/mocha/vaults/files.test.js @@ -5,7 +5,7 @@ import * as Collaboration from '../lib/Collaboration.js' chai.use(chaiAsPromised) const expect = chai.expect -describe('shared vault files', function () { +describe.skip('shared vault files', function () { this.timeout(Factory.TwentySecondTimeout) let context @@ -179,7 +179,7 @@ describe('shared vault files', function () { it('should be able to delete vault file as write user', async () => { const { sharedVault, contactContext, deinitContactContext } = - await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultPermission.Write) + await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultUserPermission.PERMISSIONS.Write) const response = await fetch('/mocha/assets/small_file.md') const buffer = new Uint8Array(await response.arrayBuffer()) @@ -201,7 +201,7 @@ describe('shared vault files', function () { context.anticipateConsoleError('Could not create valet token') const { sharedVault, contactContext, deinitContactContext } = - await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultPermission.Read) + await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultUserPermission.PERMISSIONS.Read) const response = await fetch('/mocha/assets/small_file.md') const buffer = new Uint8Array(await response.arrayBuffer()) diff --git a/packages/snjs/mocha/vaults/invites.test.js b/packages/snjs/mocha/vaults/invites.test.js index d0b4c5fc2..f8849d0a6 100644 --- a/packages/snjs/mocha/vaults/invites.test.js +++ b/packages/snjs/mocha/vaults/invites.test.js @@ -28,14 +28,14 @@ describe('shared vault invites', function () { const contact = await Collaboration.createTrustedContactForUserOfContext(context, contactContext) const vaultInvite = ( - await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, SharedVaultPermission.Write) + await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, SharedVaultUserPermission.PERMISSIONS.Write) ).getValue() expect(vaultInvite).to.not.be.undefined expect(vaultInvite.shared_vault_uuid).to.equal(sharedVault.sharing.sharedVaultUuid) expect(vaultInvite.user_uuid).to.equal(contact.contactUuid) expect(vaultInvite.encrypted_message).to.not.be.undefined - expect(vaultInvite.permissions).to.equal(SharedVaultPermission.Write) + expect(vaultInvite.permission).to.equal(SharedVaultUserPermission.PERMISSIONS.Write) expect(vaultInvite.updated_at_timestamp).to.not.be.undefined expect(vaultInvite.created_at_timestamp).to.not.be.undefined @@ -100,7 +100,7 @@ describe('shared vault invites', function () { /** Sync the contact context so that they wouldn't naturally receive changes made before this point */ await contactContext.sync() - await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, SharedVaultPermission.Write) + await context.vaultInvites.inviteContactToSharedVault(sharedVault, contact, SharedVaultUserPermission.PERMISSIONS.Write) /** Contact should now sync and expect to find note */ const promise = contactContext.awaitNextSyncSharedVaultFromScratchEvent() @@ -125,7 +125,7 @@ describe('shared vault invites', function () { await context.vaultInvites.inviteContactToSharedVault( sharedVault, currentContextContact, - SharedVaultPermission.Write, + SharedVaultUserPermission.PERMISSIONS.Write, ) await contactContext.vaultInvites.downloadInboundInvites() @@ -143,7 +143,7 @@ describe('shared vault invites', function () { await context.vaultInvites.inviteContactToSharedVault( sharedVault, currentContextContact, - SharedVaultPermission.Write, + SharedVaultUserPermission.PERMISSIONS.Write, ) await contactContext.vaultInvites.downloadInboundInvites() diff --git a/packages/snjs/mocha/vaults/items.test.js b/packages/snjs/mocha/vaults/items.test.js index aa206e25c..225d1762c 100644 --- a/packages/snjs/mocha/vaults/items.test.js +++ b/packages/snjs/mocha/vaults/items.test.js @@ -60,7 +60,7 @@ describe('shared vault items', function () { await context.vaultInvites.inviteContactToSharedVault( sharedVault, currentContextContact, - SharedVaultPermission.Write, + SharedVaultUserPermission.PERMISSIONS.Write, ) await Collaboration.moveItemToVault(context, sharedVault, note) diff --git a/packages/snjs/mocha/vaults/key-rotation.test.js b/packages/snjs/mocha/vaults/key-rotation.test.js index 213e676d5..b8734be2f 100644 --- a/packages/snjs/mocha/vaults/key-rotation.test.js +++ b/packages/snjs/mocha/vaults/key-rotation.test.js @@ -105,7 +105,7 @@ describe('vault key rotation', function () { const message = outboundMessages[0] expect(message).to.not.be.undefined - expect(message.user_uuid).to.equal(contactContext.userUuid) + expect(message.recipient_uuid).to.equal(contactContext.userUuid) expect(message.encrypted_message).to.not.be.undefined await deinitContactContext() diff --git a/packages/snjs/mocha/vaults/keypair-change.test.js b/packages/snjs/mocha/vaults/keypair-change.test.js index c8d623926..3968c0a51 100644 --- a/packages/snjs/mocha/vaults/keypair-change.test.js +++ b/packages/snjs/mocha/vaults/keypair-change.test.js @@ -23,7 +23,7 @@ describe('keypair change', function () { await context.register() }) - it('contacts should be able to handle receiving multiple keypair changed messages and trust them in order', async () => { + it.skip('contacts should be able to handle receiving multiple keypair changed messages and trust them in order', async () => { const { note, contactContext, deinitContactContext } = await Collaboration.createSharedVaultWithAcceptedInviteAndNote(context) diff --git a/packages/snjs/mocha/vaults/permissions.test.js b/packages/snjs/mocha/vaults/permissions.test.js index 5db651443..4efa0474b 100644 --- a/packages/snjs/mocha/vaults/permissions.test.js +++ b/packages/snjs/mocha/vaults/permissions.test.js @@ -37,7 +37,7 @@ describe('shared vault permissions', function () { const result = await contactContext.vaultInvites.inviteContactToSharedVault( sharedVault, thirdPartyContact, - SharedVaultPermission.Write, + SharedVaultUserPermission.PERMISSIONS.Write, ) expect(result.isFailed()).to.be.true @@ -56,7 +56,7 @@ describe('shared vault permissions', function () { it('should be able to leave shared vault as added admin', async () => { const { contactVault, contactContext, deinitContactContext } = - await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultPermission.Admin) + await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultUserPermission.PERMISSIONS.Admin) const result = await contactContext.vaultUsers.leaveSharedVault(contactVault) @@ -85,7 +85,7 @@ describe('shared vault permissions', function () { it('read user should not be able to make changes to items', async () => { const { sharedVault, contactContext, deinitContactContext } = - await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultPermission.Read) + await Collaboration.createSharedVaultWithAcceptedInvite(context, SharedVaultUserPermission.PERMISSIONS.Read) const note = await context.createSyncedNote('foo', 'bar') await Collaboration.moveItemToVault(context, sharedVault, note) await contactContext.sync() diff --git a/packages/snjs/package.json b/packages/snjs/package.json index aa4b9b4c3..1be1bb64e 100644 --- a/packages/snjs/package.json +++ b/packages/snjs/package.json @@ -37,7 +37,7 @@ "@babel/preset-env": "*", "@standardnotes/api": "workspace:*", "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/domain-events": "^2.108.1", "@standardnotes/encryption": "workspace:*", "@standardnotes/features": "workspace:*", diff --git a/packages/ui-services/package.json b/packages/ui-services/package.json index effad8382..270fdd250 100644 --- a/packages/ui-services/package.json +++ b/packages/ui-services/package.json @@ -16,7 +16,7 @@ }, "dependencies": { "@standardnotes/common": "^1.50.0", - "@standardnotes/domain-core": "^1.22.0", + "@standardnotes/domain-core": "^1.24.0", "@standardnotes/features": "workspace:^", "@standardnotes/filepicker": "workspace:^", "@standardnotes/models": "workspace:^", diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx index 672da0387..59bbe0200 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Invites/ContactInviteModal.tsx @@ -1,7 +1,7 @@ import { FunctionComponent, useCallback, useEffect, useMemo, useState } from 'react' import Modal, { ModalAction } from '@/Components/Modal/Modal' import { useApplication } from '@/Components/ApplicationProvider' -import { SharedVaultPermission, SharedVaultListingInterface, TrustedContactInterface } from '@standardnotes/snjs' +import { SharedVaultListingInterface, TrustedContactInterface, SharedVaultUserPermission } from '@standardnotes/snjs' type Props = { vault: SharedVaultListingInterface @@ -28,7 +28,11 @@ const ContactInviteModal: FunctionComponent = ({ vault, onCloseDialog }) const inviteSelectedContacts = useCallback(async () => { for (const contact of selectedContacts) { - await application.vaultInvites.inviteContactToSharedVault(vault, contact, SharedVaultPermission.Write) + await application.vaultInvites.inviteContactToSharedVault( + vault, + contact, + SharedVaultUserPermission.PERMISSIONS.Write, + ) } handleDialogClose() }, [application.vaultInvites, vault, handleDialogClose, selectedContacts]) diff --git a/yarn.lock b/yarn.lock index 785a536b7..fe12ccf72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4218,7 +4218,7 @@ __metadata: resolution: "@standardnotes/api@workspace:packages/api" dependencies: "@standardnotes/common": ^1.50.0 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/models": "workspace:*" "@standardnotes/responses": "workspace:*" "@standardnotes/utils": "workspace:*" @@ -4377,7 +4377,7 @@ __metadata: "@babel/core": "*" "@babel/preset-env": "*" "@electron/remote": ^2.0.9 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/electron-clear-data": 1.1.1 "@standardnotes/web": "workspace:*" "@types/fs-extra": ^11.0.1 @@ -4429,12 +4429,12 @@ __metadata: languageName: node linkType: hard -"@standardnotes/domain-core@npm:^1.22.0": - version: 1.22.0 - resolution: "@standardnotes/domain-core@npm:1.22.0" +"@standardnotes/domain-core@npm:^1.24.0": + version: 1.24.0 + resolution: "@standardnotes/domain-core@npm:1.24.0" dependencies: uuid: ^9.0.0 - checksum: aaa4812146f7ffcac8ed83bfd370d9dfb58055dea768dd4332a44756cccbb3d1a667da4d6da804fa26d5be594b85c60f3aa9b4c3eebb89805ffdbbfd7444946e + checksum: 0a0b40179d0852afce9d89b4bc1709c02e6ed2349224cbc8310f770356a9066afc2d79d5563339b2dc42f9c75d41c790ff1050de2be27c59f6272748e7f388eb languageName: node linkType: hard @@ -4481,7 +4481,7 @@ __metadata: dependencies: "@standardnotes/common": ^1.50.0 "@standardnotes/config": 2.4.3 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/models": "workspace:*" "@standardnotes/responses": "workspace:*" "@standardnotes/sncrypto-common": "workspace:*" @@ -4516,7 +4516,7 @@ __metadata: resolution: "@standardnotes/features@workspace:packages/features" dependencies: "@standardnotes/common": ^1.50.0 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@types/jest": ^29.2.3 "@typescript-eslint/eslint-plugin": "*" eslint: "*" @@ -4722,7 +4722,7 @@ __metadata: resolution: "@standardnotes/models@workspace:packages/models" dependencies: "@standardnotes/common": ^1.50.0 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/features": "workspace:*" "@standardnotes/responses": "workspace:*" "@standardnotes/sncrypto-common": "workspace:^" @@ -4808,7 +4808,7 @@ __metadata: dependencies: "@standardnotes/api": "workspace:^" "@standardnotes/common": ^1.50.0 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/encryption": "workspace:^" "@standardnotes/features": "workspace:^" "@standardnotes/files": "workspace:^" @@ -4907,7 +4907,7 @@ __metadata: "@babel/preset-env": "*" "@standardnotes/api": "workspace:*" "@standardnotes/common": ^1.50.0 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/domain-events": ^2.108.1 "@standardnotes/encryption": "workspace:*" "@standardnotes/features": "workspace:*" @@ -5032,7 +5032,7 @@ __metadata: resolution: "@standardnotes/ui-services@workspace:packages/ui-services" dependencies: "@standardnotes/common": ^1.50.0 - "@standardnotes/domain-core": ^1.22.0 + "@standardnotes/domain-core": ^1.24.0 "@standardnotes/features": "workspace:^" "@standardnotes/filepicker": "workspace:^" "@standardnotes/models": "workspace:^"