refactor: http service (#2233)

This commit is contained in:
Mo
2023-02-28 20:43:25 -06:00
committed by GitHub
parent 6e7618b258
commit e7f1d35341
142 changed files with 1116 additions and 1307 deletions

View File

@@ -1,10 +1,11 @@
import { HttpResponse } from '@standardnotes/responses'
import { ApiVersion } from '../../Api'
import { ApiCallError } from '../../Error/ApiCallError'
import { ErrorMessage } from '../../Error/ErrorMessage'
import {
GenerateRecoveryCodesResponse,
RecoveryKeyParamsResponse,
SignInWithRecoveryCodesResponse,
GenerateRecoveryCodesResponseBody,
RecoveryKeyParamsResponseBody,
SignInWithRecoveryCodesResponseBody,
} from '../../Response'
import { AuthServerInterface } from '../../Server'
@@ -18,7 +19,7 @@ export class AuthApiService implements AuthApiServiceInterface {
this.operationsInProgress = new Map()
}
async generateRecoveryCodes(): Promise<GenerateRecoveryCodesResponse> {
async generateRecoveryCodes(): Promise<HttpResponse<GenerateRecoveryCodesResponseBody>> {
if (this.operationsInProgress.get(AuthApiOperations.GenerateRecoveryCodes)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -40,7 +41,7 @@ export class AuthApiService implements AuthApiServiceInterface {
username: string
codeChallenge: string
recoveryCodes: string
}): Promise<RecoveryKeyParamsResponse> {
}): Promise<HttpResponse<RecoveryKeyParamsResponseBody>> {
if (this.operationsInProgress.get(AuthApiOperations.GetRecoveryKeyParams)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -68,7 +69,7 @@ export class AuthApiService implements AuthApiServiceInterface {
password: string
codeVerifier: string
recoveryCodes: string
}): Promise<SignInWithRecoveryCodesResponse> {
}): Promise<HttpResponse<SignInWithRecoveryCodesResponseBody>> {
if (this.operationsInProgress.get(AuthApiOperations.SignInWithRecoveryCodes)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}

View File

@@ -1,20 +1,21 @@
import { HttpResponse } from '@standardnotes/responses'
import {
GenerateRecoveryCodesResponse,
RecoveryKeyParamsResponse,
SignInWithRecoveryCodesResponse,
GenerateRecoveryCodesResponseBody,
RecoveryKeyParamsResponseBody,
SignInWithRecoveryCodesResponseBody,
} from '../../Response'
export interface AuthApiServiceInterface {
generateRecoveryCodes(): Promise<GenerateRecoveryCodesResponse>
generateRecoveryCodes(): Promise<HttpResponse<GenerateRecoveryCodesResponseBody>>
recoveryKeyParams(dto: {
username: string
codeChallenge: string
recoveryCodes: string
}): Promise<RecoveryKeyParamsResponse>
}): Promise<HttpResponse<RecoveryKeyParamsResponseBody>>
signInWithRecoveryCodes(dto: {
username: string
password: string
codeVerifier: string
recoveryCodes: string
}): Promise<SignInWithRecoveryCodesResponse>
}): Promise<HttpResponse<SignInWithRecoveryCodesResponseBody>>
}

View File

@@ -1,14 +1,15 @@
import { ErrorMessage } from '../../Error/ErrorMessage'
import { ApiCallError } from '../../Error/ApiCallError'
import { HttpResponse } from '@standardnotes/responses'
import { AuthenticatorApiServiceInterface } from './AuthenticatorApiServiceInterface'
import { AuthenticatorApiOperations } from './AuthenticatorApiOperations'
import {
ListAuthenticatorsResponse,
DeleteAuthenticatorResponse,
GenerateAuthenticatorRegistrationOptionsResponse,
VerifyAuthenticatorRegistrationResponseResponse,
GenerateAuthenticatorAuthenticationOptionsResponse,
ListAuthenticatorsResponseBody,
DeleteAuthenticatorResponseBody,
GenerateAuthenticatorRegistrationOptionsResponseBody,
VerifyAuthenticatorRegistrationResponseBody,
GenerateAuthenticatorAuthenticationOptionsResponseBody,
} from '../../Response'
import { AuthenticatorServerInterface } from '../../Server/Authenticator/AuthenticatorServerInterface'
@@ -19,7 +20,7 @@ export class AuthenticatorApiService implements AuthenticatorApiServiceInterface
this.operationsInProgress = new Map()
}
async list(): Promise<ListAuthenticatorsResponse> {
async list(): Promise<HttpResponse<ListAuthenticatorsResponseBody>> {
if (this.operationsInProgress.get(AuthenticatorApiOperations.List)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -37,7 +38,7 @@ export class AuthenticatorApiService implements AuthenticatorApiServiceInterface
}
}
async delete(authenticatorId: string): Promise<DeleteAuthenticatorResponse> {
async delete(authenticatorId: string): Promise<HttpResponse<DeleteAuthenticatorResponseBody>> {
if (this.operationsInProgress.get(AuthenticatorApiOperations.Delete)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -57,7 +58,7 @@ export class AuthenticatorApiService implements AuthenticatorApiServiceInterface
}
}
async generateRegistrationOptions(): Promise<GenerateAuthenticatorRegistrationOptionsResponse> {
async generateRegistrationOptions(): Promise<HttpResponse<GenerateAuthenticatorRegistrationOptionsResponseBody>> {
if (this.operationsInProgress.get(AuthenticatorApiOperations.GenerateRegistrationOptions)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -79,7 +80,7 @@ export class AuthenticatorApiService implements AuthenticatorApiServiceInterface
userUuid: string,
name: string,
attestationResponse: Record<string, unknown>,
): Promise<VerifyAuthenticatorRegistrationResponseResponse> {
): Promise<HttpResponse<VerifyAuthenticatorRegistrationResponseBody>> {
if (this.operationsInProgress.get(AuthenticatorApiOperations.VerifyRegistrationResponse)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -101,7 +102,9 @@ export class AuthenticatorApiService implements AuthenticatorApiServiceInterface
}
}
async generateAuthenticationOptions(username: string): Promise<GenerateAuthenticatorAuthenticationOptionsResponse> {
async generateAuthenticationOptions(
username: string,
): Promise<HttpResponse<GenerateAuthenticatorAuthenticationOptionsResponseBody>> {
if (this.operationsInProgress.get(AuthenticatorApiOperations.GenerateAuthenticationOptions)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}

View File

@@ -1,19 +1,22 @@
import { HttpResponse } from '@standardnotes/responses'
import {
ListAuthenticatorsResponse,
DeleteAuthenticatorResponse,
GenerateAuthenticatorRegistrationOptionsResponse,
VerifyAuthenticatorRegistrationResponseResponse,
GenerateAuthenticatorAuthenticationOptionsResponse,
ListAuthenticatorsResponseBody,
DeleteAuthenticatorResponseBody,
GenerateAuthenticatorRegistrationOptionsResponseBody,
VerifyAuthenticatorRegistrationResponseBody,
GenerateAuthenticatorAuthenticationOptionsResponseBody,
} from '../../Response'
export interface AuthenticatorApiServiceInterface {
list(): Promise<ListAuthenticatorsResponse>
delete(authenticatorId: string): Promise<DeleteAuthenticatorResponse>
generateRegistrationOptions(): Promise<GenerateAuthenticatorRegistrationOptionsResponse>
list(): Promise<HttpResponse<ListAuthenticatorsResponseBody>>
delete(authenticatorId: string): Promise<HttpResponse<DeleteAuthenticatorResponseBody>>
generateRegistrationOptions(): Promise<HttpResponse<GenerateAuthenticatorRegistrationOptionsResponseBody>>
verifyRegistrationResponse(
userUuid: string,
name: string,
attestationResponse: Record<string, unknown>,
): Promise<VerifyAuthenticatorRegistrationResponseResponse>
generateAuthenticationOptions(username: string): Promise<GenerateAuthenticatorAuthenticationOptionsResponse>
): Promise<HttpResponse<VerifyAuthenticatorRegistrationResponseBody>>
generateAuthenticationOptions(
username: string,
): Promise<HttpResponse<GenerateAuthenticatorAuthenticationOptionsResponseBody>>
}

View File

@@ -1,12 +1,13 @@
import { ErrorMessage } from '../../Error/ErrorMessage'
import { ApiCallError } from '../../Error/ApiCallError'
import { HttpResponse } from '@standardnotes/responses'
import { RevisionApiServiceInterface } from './RevisionApiServiceInterface'
import { RevisionApiOperations } from './RevisionApiOperations'
import { RevisionServerInterface } from '../../Server'
import { DeleteRevisionResponse } from '../../Response/Revision/DeleteRevisionResponse'
import { GetRevisionResponse } from '../../Response/Revision/GetRevisionResponse'
import { ListRevisionsResponse } from '../../Response/Revision/ListRevisionsResponse'
import { DeleteRevisionResponseBody } from '../../Response/Revision/DeleteRevisionResponseBody'
import { GetRevisionResponseBody } from '../../Response/Revision/GetRevisionResponseBody'
import { ListRevisionsResponseBody } from '../../Response/Revision/ListRevisionsResponseBody'
export class RevisionApiService implements RevisionApiServiceInterface {
private operationsInProgress: Map<RevisionApiOperations, boolean>
@@ -15,7 +16,7 @@ export class RevisionApiService implements RevisionApiServiceInterface {
this.operationsInProgress = new Map()
}
async listRevisions(itemUuid: string): Promise<ListRevisionsResponse> {
async listRevisions(itemUuid: string): Promise<HttpResponse<ListRevisionsResponseBody>> {
if (this.operationsInProgress.get(RevisionApiOperations.List)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -35,7 +36,7 @@ export class RevisionApiService implements RevisionApiServiceInterface {
}
}
async getRevision(itemUuid: string, revisionUuid: string): Promise<GetRevisionResponse> {
async getRevision(itemUuid: string, revisionUuid: string): Promise<HttpResponse<GetRevisionResponseBody>> {
if (this.operationsInProgress.get(RevisionApiOperations.Get)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -56,7 +57,7 @@ export class RevisionApiService implements RevisionApiServiceInterface {
}
}
async deleteRevision(itemUuid: string, revisionUuid: string): Promise<DeleteRevisionResponse> {
async deleteRevision(itemUuid: string, revisionUuid: string): Promise<HttpResponse<DeleteRevisionResponseBody>> {
if (this.operationsInProgress.get(RevisionApiOperations.Delete)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}

View File

@@ -1,9 +1,10 @@
import { DeleteRevisionResponse } from '../../Response/Revision/DeleteRevisionResponse'
import { GetRevisionResponse } from '../../Response/Revision/GetRevisionResponse'
import { ListRevisionsResponse } from '../../Response/Revision/ListRevisionsResponse'
import { HttpResponse } from '@standardnotes/responses'
import { DeleteRevisionResponseBody } from '../../Response/Revision/DeleteRevisionResponseBody'
import { GetRevisionResponseBody } from '../../Response/Revision/GetRevisionResponseBody'
import { ListRevisionsResponseBody } from '../../Response/Revision/ListRevisionsResponseBody'
export interface RevisionApiServiceInterface {
listRevisions(itemUuid: string): Promise<ListRevisionsResponse>
getRevision(itemUuid: string, revisionUuid: string): Promise<GetRevisionResponse>
deleteRevision(itemUuid: string, revisionUuid: string): Promise<DeleteRevisionResponse>
listRevisions(itemUuid: string): Promise<HttpResponse<ListRevisionsResponseBody>>
getRevision(itemUuid: string, revisionUuid: string): Promise<HttpResponse<GetRevisionResponseBody>>
deleteRevision(itemUuid: string, revisionUuid: string): Promise<HttpResponse<DeleteRevisionResponseBody>>
}

View File

@@ -3,14 +3,15 @@ import { ApiCallError } from '../../Error/ApiCallError'
import { ApiVersion } from '../../Api/ApiVersion'
import { ApiEndpointParam } from '../../Request/ApiEndpointParam'
import { SubscriptionServerInterface } from '../../Server/Subscription/SubscriptionServerInterface'
import { SubscriptionInviteResponse } from '../../Response/Subscription/SubscriptionInviteResponse'
import { SubscriptionInviteListResponse } from '../../Response/Subscription/SubscriptionInviteListResponse'
import { SubscriptionInviteCancelResponse } from '../../Response/Subscription/SubscriptionInviteCancelResponse'
import { SubscriptionInviteAcceptResponse } from '../../Response/Subscription/SubscriptionInviteAcceptResponse'
import { AppleIAPConfirmResponseBody } from './../../Response/Subscription/AppleIAPConfirmResponseBody'
import { SubscriptionInviteAcceptResponseBody } from '../../Response/Subscription/SubscriptionInviteAcceptResponseBody'
import { SubscriptionInviteCancelResponseBody } from '../../Response/Subscription/SubscriptionInviteCancelResponseBody'
import { SubscriptionInviteListResponseBody } from '../../Response/Subscription/SubscriptionInviteListResponseBody'
import { SubscriptionInviteResponseBody } from '../../Response/Subscription/SubscriptionInviteResponseBody'
import { HttpResponse } from '@standardnotes/responses'
import { SubscriptionApiServiceInterface } from './SubscriptionApiServiceInterface'
import { SubscriptionApiOperations } from './SubscriptionApiOperations'
import { AppleIAPConfirmResponse } from './../../Response/Subscription/AppleIAPConfirmResponse'
import { AppleIAPConfirmRequestParams } from '../../Request'
export class SubscriptionApiService implements SubscriptionApiServiceInterface {
@@ -20,7 +21,7 @@ export class SubscriptionApiService implements SubscriptionApiServiceInterface {
this.operationsInProgress = new Map()
}
async listInvites(): Promise<SubscriptionInviteListResponse> {
async listInvites(): Promise<HttpResponse<SubscriptionInviteListResponseBody>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.ListingInvites)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -40,7 +41,7 @@ export class SubscriptionApiService implements SubscriptionApiServiceInterface {
}
}
async cancelInvite(inviteUuid: string): Promise<SubscriptionInviteCancelResponse> {
async cancelInvite(inviteUuid: string): Promise<HttpResponse<SubscriptionInviteCancelResponseBody>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.CancelingInvite)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -61,7 +62,7 @@ export class SubscriptionApiService implements SubscriptionApiServiceInterface {
}
}
async invite(inviteeEmail: string): Promise<SubscriptionInviteResponse> {
async invite(inviteeEmail: string): Promise<HttpResponse<SubscriptionInviteResponseBody>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.Inviting)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -82,7 +83,7 @@ export class SubscriptionApiService implements SubscriptionApiServiceInterface {
}
}
async acceptInvite(inviteUuid: string): Promise<SubscriptionInviteAcceptResponse> {
async acceptInvite(inviteUuid: string): Promise<HttpResponse<SubscriptionInviteAcceptResponseBody>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.AcceptingInvite)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
@@ -102,7 +103,7 @@ export class SubscriptionApiService implements SubscriptionApiServiceInterface {
}
}
async confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<AppleIAPConfirmResponse> {
async confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<HttpResponse<AppleIAPConfirmResponseBody>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.ConfirmAppleIAP)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}

View File

@@ -1,14 +1,15 @@
import { AppleIAPConfirmResponse } from './../../Response/Subscription/AppleIAPConfirmResponse'
import { AppleIAPConfirmRequestParams } from '../../Request'
import { SubscriptionInviteAcceptResponse } from '../../Response/Subscription/SubscriptionInviteAcceptResponse'
import { SubscriptionInviteCancelResponse } from '../../Response/Subscription/SubscriptionInviteCancelResponse'
import { SubscriptionInviteListResponse } from '../../Response/Subscription/SubscriptionInviteListResponse'
import { SubscriptionInviteResponse } from '../../Response/Subscription/SubscriptionInviteResponse'
import { AppleIAPConfirmResponseBody } from './../../Response/Subscription/AppleIAPConfirmResponseBody'
import { SubscriptionInviteAcceptResponseBody } from '../../Response/Subscription/SubscriptionInviteAcceptResponseBody'
import { SubscriptionInviteCancelResponseBody } from '../../Response/Subscription/SubscriptionInviteCancelResponseBody'
import { SubscriptionInviteListResponseBody } from '../../Response/Subscription/SubscriptionInviteListResponseBody'
import { SubscriptionInviteResponseBody } from '../../Response/Subscription/SubscriptionInviteResponseBody'
import { HttpResponse } from '@standardnotes/responses'
export interface SubscriptionApiServiceInterface {
invite(inviteeEmail: string): Promise<SubscriptionInviteResponse>
listInvites(): Promise<SubscriptionInviteListResponse>
cancelInvite(inviteUuid: string): Promise<SubscriptionInviteCancelResponse>
acceptInvite(inviteUuid: string): Promise<SubscriptionInviteAcceptResponse>
confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<AppleIAPConfirmResponse>
invite(inviteeEmail: string): Promise<HttpResponse<SubscriptionInviteResponseBody>>
listInvites(): Promise<HttpResponse<SubscriptionInviteListResponseBody>>
cancelInvite(inviteUuid: string): Promise<HttpResponse<SubscriptionInviteCancelResponseBody>>
acceptInvite(inviteUuid: string): Promise<HttpResponse<SubscriptionInviteAcceptResponseBody>>
confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<HttpResponse<AppleIAPConfirmResponseBody>>
}

View File

@@ -3,12 +3,14 @@ import { UserRequestType } from '@standardnotes/common'
import { ErrorMessage } from '../../Error/ErrorMessage'
import { ApiCallError } from '../../Error/ApiCallError'
import { UserRegistrationResponse } from '../../Response/User/UserRegistrationResponse'
import { UserServerInterface } from '../../Server/User/UserServerInterface'
import { ApiVersion } from '../../Api/ApiVersion'
import { ApiEndpointParam } from '../../Request/ApiEndpointParam'
import { UserRequestResponse } from '../../Response/UserRequest/UserRequestResponse'
import { UserDeletionResponse } from '../../Response/User/UserDeletionResponse'
import { HttpResponse } from '@standardnotes/responses'
import { UserDeletionResponseBody } from '../../Response/User/UserDeletionResponseBody'
import { UserRegistrationResponseBody } from '../../Response/User/UserRegistrationResponseBody'
import { UserRequestResponseBody } from '../../Response/UserRequest/UserRequestResponseBody'
import { UserRequestServerInterface } from '../../Server/UserRequest/UserRequestServerInterface'
import { UserApiOperations } from './UserApiOperations'
@@ -21,7 +23,7 @@ export class UserApiService implements UserApiServiceInterface {
this.operationsInProgress = new Map()
}
async deleteAccount(userUuid: string): Promise<UserDeletionResponse> {
async deleteAccount(userUuid: string): Promise<HttpResponse<UserDeletionResponseBody>> {
this.lockOperation(UserApiOperations.DeletingAccount)
try {
@@ -37,7 +39,10 @@ export class UserApiService implements UserApiServiceInterface {
}
}
async submitUserRequest(dto: { userUuid: string; requestType: UserRequestType }): Promise<UserRequestResponse> {
async submitUserRequest(dto: {
userUuid: string
requestType: UserRequestType
}): Promise<HttpResponse<UserRequestResponseBody>> {
this.lockOperation(UserApiOperations.SubmittingRequest)
try {
@@ -59,7 +64,7 @@ export class UserApiService implements UserApiServiceInterface {
serverPassword: string
keyParams: RootKeyParamsInterface
ephemeral: boolean
}): Promise<UserRegistrationResponse> {
}): Promise<HttpResponse<UserRegistrationResponseBody>> {
this.lockOperation(UserApiOperations.Registering)
try {

View File

@@ -1,9 +1,10 @@
import { UserRequestType } from '@standardnotes/common'
import { type RootKeyParamsInterface } from '@standardnotes/models'
import { HttpResponse } from '@standardnotes/responses'
import { UserDeletionResponse } from '../../Response/User/UserDeletionResponse'
import { UserRegistrationResponse } from '../../Response/User/UserRegistrationResponse'
import { UserRequestResponse } from '../../Response/UserRequest/UserRequestResponse'
import { UserDeletionResponseBody } from '../../Response/User/UserDeletionResponseBody'
import { UserRegistrationResponseBody } from '../../Response/User/UserRegistrationResponseBody'
import { UserRequestResponseBody } from '../../Response/UserRequest/UserRequestResponseBody'
export interface UserApiServiceInterface {
register(registerDTO: {
@@ -11,7 +12,10 @@ export interface UserApiServiceInterface {
serverPassword: string
keyParams: RootKeyParamsInterface
ephemeral: boolean
}): Promise<UserRegistrationResponse>
submitUserRequest(dto: { userUuid: string; requestType: UserRequestType }): Promise<UserRequestResponse>
deleteAccount(userUuid: string): Promise<UserDeletionResponse>
}): Promise<HttpResponse<UserRegistrationResponseBody>>
submitUserRequest(dto: {
userUuid: string
requestType: UserRequestType
}): Promise<HttpResponse<UserRequestResponseBody>>
deleteAccount(userUuid: string): Promise<HttpResponse<UserDeletionResponseBody>>
}

View File

@@ -4,7 +4,8 @@ import { ApiCallError } from '../../Error/ApiCallError'
import { WebSocketApiServiceInterface } from './WebSocketApiServiceInterface'
import { WebSocketApiOperations } from './WebSocketApiOperations'
import { WebSocketServerInterface } from '../../Server'
import { WebSocketConnectionTokenResponse } from '../../Response'
import { HttpResponse } from '@standardnotes/responses'
import { WebSocketConnectionTokenResponseBody } from '../../Response'
export class WebSocketApiService implements WebSocketApiServiceInterface {
private operationsInProgress: Map<WebSocketApiOperations, boolean>
@@ -13,7 +14,7 @@ export class WebSocketApiService implements WebSocketApiServiceInterface {
this.operationsInProgress = new Map()
}
async createConnectionToken(): Promise<WebSocketConnectionTokenResponse> {
async createConnectionToken(): Promise<HttpResponse<WebSocketConnectionTokenResponseBody>> {
if (this.operationsInProgress.get(WebSocketApiOperations.CreatingConnectionToken)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}

View File

@@ -1,5 +1,6 @@
import { WebSocketConnectionTokenResponse } from '../../Response'
import { HttpResponse } from '@standardnotes/responses'
import { WebSocketConnectionTokenResponseBody } from '../../Response'
export interface WebSocketApiServiceInterface {
createConnectionToken(): Promise<WebSocketConnectionTokenResponse>
createConnectionToken(): Promise<HttpResponse<WebSocketConnectionTokenResponseBody>>
}