From 6f8257cbcae8a092c6a83d56daf4b9d832dcd148 Mon Sep 17 00:00:00 2001 From: Mo Date: Wed, 5 Jul 2023 09:12:16 -0500 Subject: [PATCH 1/6] chore(fix): fixes sync response not correctly identifying all errors --- .../snjs/lib/Services/Sync/Account/Response.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/snjs/lib/Services/Sync/Account/Response.ts b/packages/snjs/lib/Services/Sync/Account/Response.ts index 5e8e02d10b4..3a2869252c5 100644 --- a/packages/snjs/lib/Services/Sync/Account/Response.ts +++ b/packages/snjs/lib/Services/Sync/Account/Response.ts @@ -35,8 +35,6 @@ export class ServerSyncResponse { private successResponseData: RawSyncResponse | undefined constructor(public rawResponse: HttpResponse) { - this.rawResponse = rawResponse - if (!isErrorResponse(rawResponse)) { this.successResponseData = rawResponse.data } @@ -101,7 +99,19 @@ export class ServerSyncResponse { } public get error(): HttpError | undefined { - return isErrorResponse(this.rawResponse) ? this.rawResponse.data?.error : undefined + if (this.hasError) { + if (isErrorResponse(this.rawResponse)) { + const error = this.rawResponse.data?.error + if (error) { + return error + } + } + return { + message: 'Unknown error', + } + } else { + return undefined + } } public get status(): number { @@ -123,6 +133,6 @@ export class ServerSyncResponse { } public get hasError(): boolean { - return this.error != undefined + return isErrorResponse(this.rawResponse) } } From ce34210b539bf3f588004bb158e04b9f1073c034 Mon Sep 17 00:00:00 2001 From: Mo Date: Wed, 5 Jul 2023 09:13:26 -0500 Subject: [PATCH 2/6] refactor: lint --- .../snjs/lib/Services/Sync/Account/Response.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/snjs/lib/Services/Sync/Account/Response.ts b/packages/snjs/lib/Services/Sync/Account/Response.ts index 3a2869252c5..8475783e2dc 100644 --- a/packages/snjs/lib/Services/Sync/Account/Response.ts +++ b/packages/snjs/lib/Services/Sync/Account/Response.ts @@ -99,16 +99,15 @@ export class ServerSyncResponse { } public get error(): HttpError | undefined { - if (this.hasError) { - if (isErrorResponse(this.rawResponse)) { - const error = this.rawResponse.data?.error - if (error) { - return error + if (isErrorResponse(this.rawResponse)) { + const error = this.rawResponse.data?.error + if (error) { + return error + } else { + return { + message: 'Unknown error', } } - return { - message: 'Unknown error', - } } else { return undefined } From d3e56b04f950a82118ccd31a2359cdc51678cb89 Mon Sep 17 00:00:00 2001 From: Mo Date: Wed, 5 Jul 2023 09:24:36 -0500 Subject: [PATCH 3/6] refactor: make error object optional in error response; not always present, such as in 404 errors --- .../src/Domain/Error/ClientDisplayableError.ts | 4 ++-- .../src/Domain/Http/HttpErrorResponseBody.ts | 2 +- packages/responses/src/Domain/Http/HttpResponse.ts | 12 ++++++++++++ .../UseCase/GetInboundAsymmetricMessages.ts | 2 +- .../UseCase/GetOutboundAsymmetricMessages.ts | 2 +- .../UseCase/SendAsymmetricMessageUseCase.ts | 2 +- packages/services/src/Domain/Files/FileService.ts | 4 ++-- .../services/src/Domain/Revision/RevisionManager.ts | 8 ++++---- .../UseCase/SendSharedVaultInviteUseCase.ts | 2 +- .../SharedVaults/UseCase/UpdateSharedVaultInvite.ts | 2 +- .../src/Domain/Subscription/SubscriptionManager.ts | 6 +++--- packages/services/src/Domain/User/UserService.ts | 10 ++++++++-- packages/snjs/lib/Services/Api/ApiService.ts | 2 +- .../snjs/lib/Services/Session/SessionManager.ts | 13 +++++++------ packages/snjs/lib/Services/Sync/Account/Response.ts | 10 ++-------- 15 files changed, 47 insertions(+), 34 deletions(-) diff --git a/packages/responses/src/Domain/Error/ClientDisplayableError.ts b/packages/responses/src/Domain/Error/ClientDisplayableError.ts index e42138d7aa2..052230fb1b6 100644 --- a/packages/responses/src/Domain/Error/ClientDisplayableError.ts +++ b/packages/responses/src/Domain/Error/ClientDisplayableError.ts @@ -1,4 +1,4 @@ -import { HttpErrorResponse } from '../Http' +import { HttpErrorResponse, getErrorFromErrorResponse } from '../Http' export class ClientDisplayableError { constructor(public text: string, public title?: string, public tag?: string) { @@ -14,7 +14,7 @@ export class ClientDisplayableError { } static FromNetworkError(error: HttpErrorResponse) { - return new ClientDisplayableError(error.data.error.message) + return new ClientDisplayableError(getErrorFromErrorResponse(error).message) } } diff --git a/packages/responses/src/Domain/Http/HttpErrorResponseBody.ts b/packages/responses/src/Domain/Http/HttpErrorResponseBody.ts index 6ec191c9884..254132a477f 100644 --- a/packages/responses/src/Domain/Http/HttpErrorResponseBody.ts +++ b/packages/responses/src/Domain/Http/HttpErrorResponseBody.ts @@ -1,5 +1,5 @@ import { HttpError } from './HttpError' export type HttpErrorResponseBody = { - error: HttpError + error?: HttpError } diff --git a/packages/responses/src/Domain/Http/HttpResponse.ts b/packages/responses/src/Domain/Http/HttpResponse.ts index 19af8125842..8b9294d0e4c 100644 --- a/packages/responses/src/Domain/Http/HttpResponse.ts +++ b/packages/responses/src/Domain/Http/HttpResponse.ts @@ -2,6 +2,7 @@ import { HttpErrorResponseBody } from './HttpErrorResponseBody' import { HttpResponseMeta } from './HttpResponseMeta' import { HttpHeaders } from './HttpHeaders' import { HttpStatusCode } from './HttpStatusCode' +import { HttpError } from './HttpError' type AnySuccessRecord = Record & { error?: never } @@ -24,3 +25,14 @@ export type HttpResponse = HttpErrorResponse | HttpSuccess export function isErrorResponse(response: HttpResponse): response is HttpErrorResponse { return (response.data as HttpErrorResponseBody)?.error != undefined || response.status >= 400 } + +export function getErrorFromErrorResponse(response: HttpErrorResponse): HttpError { + const embeddedError = response.data.error + if (embeddedError) { + return embeddedError + } + + return { + message: 'Unknown error', + } +} diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetInboundAsymmetricMessages.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetInboundAsymmetricMessages.ts index 91bd668ae77..011d186b297 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetInboundAsymmetricMessages.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetInboundAsymmetricMessages.ts @@ -8,7 +8,7 @@ export class GetInboundAsymmetricMessages { const response = await this.messageServer.getMessages() if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } return response.data.messages diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetOutboundAsymmetricMessages.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetOutboundAsymmetricMessages.ts index 5ee97691acb..a1fe86f05dd 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/GetOutboundAsymmetricMessages.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/GetOutboundAsymmetricMessages.ts @@ -8,7 +8,7 @@ export class GetOutboundAsymmetricMessages { const response = await this.messageServer.getOutboundUserMessages() if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } return response.data.messages diff --git a/packages/services/src/Domain/AsymmetricMessage/UseCase/SendAsymmetricMessageUseCase.ts b/packages/services/src/Domain/AsymmetricMessage/UseCase/SendAsymmetricMessageUseCase.ts index 175903e27bc..96cf6dfc98e 100644 --- a/packages/services/src/Domain/AsymmetricMessage/UseCase/SendAsymmetricMessageUseCase.ts +++ b/packages/services/src/Domain/AsymmetricMessage/UseCase/SendAsymmetricMessageUseCase.ts @@ -16,7 +16,7 @@ export class SendAsymmetricMessageUseCase { }) if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } return response.data.message diff --git a/packages/services/src/Domain/Files/FileService.ts b/packages/services/src/Domain/Files/FileService.ts index 87a311b0c2f..dee2614e108 100644 --- a/packages/services/src/Domain/Files/FileService.ts +++ b/packages/services/src/Domain/Files/FileService.ts @@ -386,7 +386,7 @@ export class FileService extends AbstractService implements FilesClientInterface const result = await this.api.deleteFile(tokenResult, file.shared_vault_uuid ? 'shared-vault' : 'user') - if (result.data?.error) { + if (isErrorResponse(result)) { const deleteAnyway = await this.alertService.confirm( spaceSeparatedStrings( 'This file could not be deleted from the server, possibly because you are attempting to delete a file item', @@ -400,7 +400,7 @@ export class FileService extends AbstractService implements FilesClientInterface ) if (!deleteAnyway) { - return ClientDisplayableError.FromError(result.data?.error) + return ClientDisplayableError.FromNetworkError(result) } } diff --git a/packages/services/src/Domain/Revision/RevisionManager.ts b/packages/services/src/Domain/Revision/RevisionManager.ts index 5b6dbd9b0df..f8085db6748 100644 --- a/packages/services/src/Domain/Revision/RevisionManager.ts +++ b/packages/services/src/Domain/Revision/RevisionManager.ts @@ -1,6 +1,6 @@ import { RevisionApiServiceInterface } from '@standardnotes/api' import { Uuid } from '@standardnotes/domain-core' -import { isErrorResponse } from '@standardnotes/responses' +import { getErrorFromErrorResponse, isErrorResponse } from '@standardnotes/responses' import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface' import { AbstractService } from '../Service/AbstractService' @@ -21,7 +21,7 @@ export class RevisionManager extends AbstractService implements RevisionClientIn const result = await this.revisionApiService.listRevisions(itemUuid.value) if (isErrorResponse(result)) { - throw new Error(result.data.error.message) + throw new Error(getErrorFromErrorResponse(result).message) } return result.data.revisions @@ -31,7 +31,7 @@ export class RevisionManager extends AbstractService implements RevisionClientIn const result = await this.revisionApiService.deleteRevision(itemUuid.value, revisionUuid.value) if (isErrorResponse(result)) { - throw new Error(result.data.error.message) + throw new Error(getErrorFromErrorResponse(result).message) } return result.data.message @@ -41,7 +41,7 @@ export class RevisionManager extends AbstractService implements RevisionClientIn const result = await this.revisionApiService.getRevision(itemUuid.value, revisionUuid.value) if (isErrorResponse(result)) { - throw new Error(result.data.error.message) + throw new Error(getErrorFromErrorResponse(result).message) } return result.data.revision diff --git a/packages/services/src/Domain/SharedVaults/UseCase/SendSharedVaultInviteUseCase.ts b/packages/services/src/Domain/SharedVaults/UseCase/SendSharedVaultInviteUseCase.ts index 445d7f5e341..26bc59d5741 100644 --- a/packages/services/src/Domain/SharedVaults/UseCase/SendSharedVaultInviteUseCase.ts +++ b/packages/services/src/Domain/SharedVaults/UseCase/SendSharedVaultInviteUseCase.ts @@ -23,7 +23,7 @@ export class SendSharedVaultInviteUseCase { }) if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } return response.data.invite diff --git a/packages/services/src/Domain/SharedVaults/UseCase/UpdateSharedVaultInvite.ts b/packages/services/src/Domain/SharedVaults/UseCase/UpdateSharedVaultInvite.ts index 847888d8767..901ce68e431 100644 --- a/packages/services/src/Domain/SharedVaults/UseCase/UpdateSharedVaultInvite.ts +++ b/packages/services/src/Domain/SharedVaults/UseCase/UpdateSharedVaultInvite.ts @@ -23,7 +23,7 @@ export class UpdateSharedVaultInviteUseCase { }) if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } return response.data.invite diff --git a/packages/services/src/Domain/Subscription/SubscriptionManager.ts b/packages/services/src/Domain/Subscription/SubscriptionManager.ts index d43965ec748..52f4eaab203 100644 --- a/packages/services/src/Domain/Subscription/SubscriptionManager.ts +++ b/packages/services/src/Domain/Subscription/SubscriptionManager.ts @@ -4,7 +4,7 @@ import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface import { AbstractService } from '../Service/AbstractService' import { SubscriptionClientInterface } from './SubscriptionClientInterface' import { AppleIAPReceipt } from './AppleIAPReceipt' -import { isErrorResponse } from '@standardnotes/responses' +import { getErrorFromErrorResponse, isErrorResponse } from '@standardnotes/responses' export class SubscriptionManager extends AbstractService implements SubscriptionClientInterface { constructor( @@ -19,7 +19,7 @@ export class SubscriptionManager extends AbstractService implements Subscription const result = await this.subscriptionApiService.acceptInvite(inviteUuid) if (isErrorResponse(result)) { - return { success: false, message: result.data.error.message } + return { success: false, message: getErrorFromErrorResponse(result).message } } return result.data @@ -81,7 +81,7 @@ export class SubscriptionManager extends AbstractService implements Subscription }) if (isErrorResponse(result)) { - return { success: false, message: result.data.error.message } + return { success: false, message: getErrorFromErrorResponse(result).message } } return result.data diff --git a/packages/services/src/Domain/User/UserService.ts b/packages/services/src/Domain/User/UserService.ts index c155a252f1c..7355e54d6f9 100644 --- a/packages/services/src/Domain/User/UserService.ts +++ b/packages/services/src/Domain/User/UserService.ts @@ -1,6 +1,12 @@ import { Base64String } from '@standardnotes/sncrypto-common' import { EncryptionProviderInterface, SNRootKey, SNRootKeyParams } from '@standardnotes/encryption' -import { HttpResponse, SignInResponse, User, isErrorResponse } from '@standardnotes/responses' +import { + HttpResponse, + SignInResponse, + User, + getErrorFromErrorResponse, + isErrorResponse, +} from '@standardnotes/responses' import { KeyParamsOrigination, UserRequestType } from '@standardnotes/common' import { UuidGenerator } from '@standardnotes/utils' import { UserApiServiceInterface, UserRegistrationResponseBody } from '@standardnotes/api' @@ -227,7 +233,7 @@ export class UserService if (isErrorResponse(response)) { return { error: true, - message: response.data.error.message, + message: getErrorFromErrorResponse(response).message, } } diff --git a/packages/snjs/lib/Services/Api/ApiService.ts b/packages/snjs/lib/Services/Api/ApiService.ts index 126849018e1..7bd602202fb 100644 --- a/packages/snjs/lib/Services/Api/ApiService.ts +++ b/packages/snjs/lib/Services/Api/ApiService.ts @@ -664,7 +664,7 @@ export class SNApiService }) if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } const data = response.data return { diff --git a/packages/snjs/lib/Services/Session/SessionManager.ts b/packages/snjs/lib/Services/Session/SessionManager.ts index 94bd1f09bcd..50f2d077eed 100644 --- a/packages/snjs/lib/Services/Session/SessionManager.ts +++ b/packages/snjs/lib/Services/Session/SessionManager.ts @@ -45,6 +45,7 @@ import { ChangeCredentialsResponse, SessionListResponse, HttpSuccessResponse, + getErrorFromErrorResponse, } from '@standardnotes/responses' import { CopyPayloadWithContentOverride, RootKeyWithKeyPairsInterface } from '@standardnotes/models' import { LegacySession, MapperInterface, Result, Session, SessionToken } from '@standardnotes/domain-core' @@ -316,7 +317,7 @@ export class SNSessionManager const result = await this.apiService.getSubscription(this.getSureUser().uuid) if (isErrorResponse(result)) { - return ClientDisplayableError.FromError(result.data?.error) + return ClientDisplayableError.FromNetworkError(result) } const subscription = result.data.subscription @@ -328,7 +329,7 @@ export class SNSessionManager const response = await this.apiService.getAvailableSubscriptions() if (isErrorResponse(response)) { - return ClientDisplayableError.FromError(response.data.error) + return ClientDisplayableError.FromNetworkError(response) } return response.data @@ -418,8 +419,8 @@ export class SNSessionManager ephemeral, }) - if ('error' in registerResponse.data) { - throw new ApiCallError(registerResponse.data.error.message) + if (isErrorResponse(registerResponse)) { + throw new ApiCallError(getErrorFromErrorResponse(registerResponse).message) } await this.handleAuthentication({ @@ -492,8 +493,8 @@ export class SNSessionManager const result = await this.performSignIn(email, password, strict, ephemeral, minAllowedVersion) if ( isErrorResponse(result.response) && - result.response.data.error.tag !== ErrorTag.ClientValidationError && - result.response.data.error.tag !== ErrorTag.ClientCanceledMfa + getErrorFromErrorResponse(result.response).tag !== ErrorTag.ClientValidationError && + getErrorFromErrorResponse(result.response).tag !== ErrorTag.ClientCanceledMfa ) { const cleanedEmail = cleanedEmailString(email) if (cleanedEmail !== email) { diff --git a/packages/snjs/lib/Services/Sync/Account/Response.ts b/packages/snjs/lib/Services/Sync/Account/Response.ts index 8475783e2dc..29cae06d395 100644 --- a/packages/snjs/lib/Services/Sync/Account/Response.ts +++ b/packages/snjs/lib/Services/Sync/Account/Response.ts @@ -9,6 +9,7 @@ import { RawSyncResponse, UserEventServerHash, AsymmetricMessageServerHash, + getErrorFromErrorResponse, } from '@standardnotes/responses' import { FilterDisallowedRemotePayloadsAndMap, @@ -100,14 +101,7 @@ export class ServerSyncResponse { public get error(): HttpError | undefined { if (isErrorResponse(this.rawResponse)) { - const error = this.rawResponse.data?.error - if (error) { - return error - } else { - return { - message: 'Unknown error', - } - } + return getErrorFromErrorResponse(this.rawResponse) } else { return undefined } From 212507e65f87678e4c8c970f84b5af71ce534d3a Mon Sep 17 00:00:00 2001 From: Mo Date: Wed, 5 Jul 2023 09:26:30 -0500 Subject: [PATCH 4/6] chore: lint --- .../Components/AccountMenu/SignIn.tsx | 4 ++-- .../Components/SessionsModal/SessionsModal.tsx | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/web/src/javascripts/Components/AccountMenu/SignIn.tsx b/packages/web/src/javascripts/Components/AccountMenu/SignIn.tsx index 0ed7b92e5fe..714e088b52b 100644 --- a/packages/web/src/javascripts/Components/AccountMenu/SignIn.tsx +++ b/packages/web/src/javascripts/Components/AccountMenu/SignIn.tsx @@ -12,7 +12,7 @@ import Icon from '@/Components/Icon/Icon' import IconButton from '@/Components/Button/IconButton' import AdvancedOptions from './AdvancedOptions' import HorizontalSeparator from '../Shared/HorizontalSeparator' -import { isErrorResponse } from '@standardnotes/snjs' +import { getErrorFromErrorResponse, isErrorResponse } from '@standardnotes/snjs' type Props = { viewControllerManager: ViewControllerManager @@ -99,7 +99,7 @@ const SignInPane: FunctionComponent = ({ application, viewControllerManag .signIn(email, password, isStrictSignin, isEphemeral, shouldMergeLocal) .then((response) => { if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } viewControllerManager.accountMenuController.closeAccountMenu() }) diff --git a/packages/web/src/javascripts/Components/SessionsModal/SessionsModal.tsx b/packages/web/src/javascripts/Components/SessionsModal/SessionsModal.tsx index b15302c534a..f587ddbf033 100644 --- a/packages/web/src/javascripts/Components/SessionsModal/SessionsModal.tsx +++ b/packages/web/src/javascripts/Components/SessionsModal/SessionsModal.tsx @@ -1,5 +1,12 @@ import { ViewControllerManager } from '@/Controllers/ViewControllerManager' -import { SNApplication, SessionStrings, UuidString, SessionListEntry, isErrorResponse } from '@standardnotes/snjs' +import { + SNApplication, + SessionStrings, + UuidString, + SessionListEntry, + isErrorResponse, + getErrorFromErrorResponse, +} from '@standardnotes/snjs' import { FunctionComponent, useState, useEffect, useRef, useMemo } from 'react' import { WebApplication } from '@/Application/WebApplication' import { observer } from 'mobx-react-lite' @@ -64,9 +71,10 @@ function useSessions( if (!response) { setSessions(sessionsBeforeRevoke) } else if (isErrorResponse(response)) { - if (response.data?.error.message) { - setErrorMessage(response.data?.error.message || 'An unknown error occured while revoking the session.') - } + setErrorMessage( + getErrorFromErrorResponse(response).message || 'An unknown error occured while revoking the session.', + ) + setSessions(sessionsBeforeRevoke) } else { setSessions(sessions.filter((session) => session.uuid !== uuid)) From 10b6e1a121e92d06d2e70611735c783567276f24 Mon Sep 17 00:00:00 2001 From: Mo Date: Wed, 5 Jul 2023 09:29:08 -0500 Subject: [PATCH 5/6] chore: lint --- packages/api/src/Domain/Http/HttpService.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/api/src/Domain/Http/HttpService.ts b/packages/api/src/Domain/Http/HttpService.ts index 3e76b2e5ae6..9364b705181 100644 --- a/packages/api/src/Domain/Http/HttpService.ts +++ b/packages/api/src/Domain/Http/HttpService.ts @@ -315,12 +315,14 @@ export class HttpService implements HttpServiceInterface { console.error(error) } if (httpStatus >= HttpStatusCode.Success && httpStatus < HttpStatusCode.InternalServerError) { - if ( - httpStatus === HttpStatusCode.Forbidden && - response.data && - (response as HttpErrorResponse).data.error !== undefined - ) { - ;(response as HttpErrorResponse).data.error.message = ErrorMessage.RateLimited + if (httpStatus === HttpStatusCode.Forbidden && isErrorResponse(response)) { + if (!response.data.error) { + response.data.error = { + message: ErrorMessage.RateLimited, + } + } else { + response.data.error.message = ErrorMessage.RateLimited + } } resolve(response) } else { From 348c17205f13c401f66514ccf9ffb569142442dc Mon Sep 17 00:00:00 2001 From: Mo Date: Wed, 5 Jul 2023 11:11:38 -0500 Subject: [PATCH 6/6] chore: lint --- .../snjs/lib/Services/Settings/SettingsGateway.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/snjs/lib/Services/Settings/SettingsGateway.ts b/packages/snjs/lib/Services/Settings/SettingsGateway.ts index 2fd15c1753b..54acb291689 100644 --- a/packages/snjs/lib/Services/Settings/SettingsGateway.ts +++ b/packages/snjs/lib/Services/Settings/SettingsGateway.ts @@ -1,7 +1,7 @@ import { SettingsList } from './SettingsList' import { SettingName } from '@standardnotes/settings' import { API_MESSAGE_INVALID_SESSION } from '@standardnotes/services' -import { HttpStatusCode, isErrorResponse, User } from '@standardnotes/responses' +import { getErrorFromErrorResponse, HttpStatusCode, isErrorResponse, User } from '@standardnotes/responses' import { SettingsServerInterface } from './SettingsServerInterface' /** @@ -34,7 +34,7 @@ export class SettingsGateway { const response = await this.settingsApi.listSettings(this.userUuid) if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } if (response.data == undefined || response.data.settings == undefined) { @@ -53,7 +53,7 @@ export class SettingsGateway { } if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } return response?.data?.setting?.value ?? undefined @@ -71,7 +71,7 @@ export class SettingsGateway { } if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } return response?.data?.setting?.value ?? undefined @@ -89,7 +89,7 @@ export class SettingsGateway { } if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } return response.data?.success ?? false @@ -98,14 +98,14 @@ export class SettingsGateway { async updateSetting(name: SettingName, payload: string, sensitive: boolean): Promise { const response = await this.settingsApi.updateSetting(this.userUuid, name.value, payload, sensitive) if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } } async deleteSetting(name: SettingName): Promise { const response = await this.settingsApi.deleteSetting(this.userUuid, name.value) if (isErrorResponse(response)) { - throw new Error(response.data?.error.message) + throw new Error(getErrorFromErrorResponse(response).message) } }