Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: fix handling failures upon shared vault invite accepting #2443

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1,9 +1,11 @@
import { AsymmetricMessageSharedVaultInvite } from '@standardnotes/models'
import { SharedVaultInvitesServerInterface } from '@standardnotes/api'
import { SharedVaultInviteServerHash } from '@standardnotes/responses'
import { SharedVaultInviteServerHash, getErrorFromErrorResponse, isErrorResponse } from '@standardnotes/responses'
import { Result, UseCaseInterface } from '@standardnotes/domain-core'

import { ProcessAcceptedVaultInvite } from '../../AsymmetricMessage/UseCase/ProcessAcceptedVaultInvite'

export class AcceptVaultInvite {
export class AcceptVaultInvite implements UseCaseInterface<void> {
constructor(
private inviteServer: SharedVaultInvitesServerInterface,
private processInvite: ProcessAcceptedVaultInvite,
Expand All @@ -12,12 +14,17 @@ export class AcceptVaultInvite {
async execute(dto: {
invite: SharedVaultInviteServerHash
message: AsymmetricMessageSharedVaultInvite
}): Promise<void> {
await this.processInvite.execute(dto.message, dto.invite.shared_vault_uuid, dto.invite.sender_uuid)

await this.inviteServer.acceptInvite({
}): Promise<Result<void>> {
const acceptResponse = await this.inviteServer.acceptInvite({
sharedVaultUuid: dto.invite.shared_vault_uuid,
inviteUuid: dto.invite.uuid,
})
if (isErrorResponse(acceptResponse)) {
return Result.fail(`Could not accept vault invitation: ${getErrorFromErrorResponse(acceptResponse).message}`)
}

await this.processInvite.execute(dto.message, dto.invite.shared_vault_uuid, dto.invite.sender_uuid)

return Result.ok()
}
}
14 changes: 11 additions & 3 deletions packages/services/src/Domain/VaultInvite/VaultInviteService.ts
Expand Up @@ -135,12 +135,18 @@ export class VaultInviteService
return response.data.invites
}

public async acceptInvite(pendingInvite: InviteRecord): Promise<void> {
public async acceptInvite(pendingInvite: InviteRecord): Promise<Result<void>> {
if (!pendingInvite.trusted) {
throw new Error('Cannot accept untrusted invite')
return Result.fail('Cannot accept untrusted invite')
}

await this._acceptVaultInvite.execute({ invite: pendingInvite.invite, message: pendingInvite.message })
const acceptResult = await this._acceptVaultInvite.execute({
invite: pendingInvite.invite,
message: pendingInvite.message,
})
if (acceptResult.isFailed()) {
return Result.fail(acceptResult.getError())
}

delete this.pendingInvites[pendingInvite.invite.uuid]

Expand All @@ -149,6 +155,8 @@ export class VaultInviteService
await this._decryptErroredPayloads.execute()

await this.sync.syncSharedVaultsFromScratch([pendingInvite.invite.shared_vault_uuid])

return Result.ok()
}

public async getInvitableContactsForSharedVault(
Expand Down
Expand Up @@ -18,5 +18,5 @@ export interface VaultInviteServiceInterface extends ApplicationServiceInterface
getOutboundInvites(
sharedVault?: SharedVaultListingInterface,
): Promise<SharedVaultInviteServerHash[] | ClientDisplayableError>
acceptInvite(pendingInvite: InviteRecord): Promise<void>
acceptInvite(pendingInvite: InviteRecord): Promise<Result<void>>
}
Expand Up @@ -23,7 +23,10 @@ const InviteItem = ({ inviteRecord }: Props) => {
}, [])

const acceptInvite = useCallback(async () => {
await application.vaultInvites.acceptInvite(inviteRecord)
const result = await application.vaultInvites.acceptInvite(inviteRecord)
if (result.isFailed()) {
await application.alerts.alert(result.getError())
}
}, [application, inviteRecord])

const closeAddContactModal = () => setIsAddContactModalOpen(false)
Expand Down