refactor: http service (#2233)
This commit is contained in:
5
packages/responses/src/Domain/Http/DeprecatedError.ts
Normal file
5
packages/responses/src/Domain/Http/DeprecatedError.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export type DeprecatedError = {
|
||||
message: string
|
||||
status: number
|
||||
tag?: string
|
||||
}
|
||||
13
packages/responses/src/Domain/Http/DeprecatedHttpResponse.ts
Normal file
13
packages/responses/src/Domain/Http/DeprecatedHttpResponse.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { DeprecatedError } from './DeprecatedError'
|
||||
import { HttpStatusCode } from './HttpStatusCode'
|
||||
import { DeprecatedResponseMeta } from './DeprecatedResponseMeta'
|
||||
|
||||
export type DeprecatedHttpResponse = {
|
||||
status: HttpStatusCode
|
||||
error?: DeprecatedError
|
||||
data?: {
|
||||
error?: DeprecatedError
|
||||
}
|
||||
meta?: DeprecatedResponseMeta
|
||||
headers?: Map<string, string | null>
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import { DeprecatedError } from './DeprecatedError'
|
||||
import { HttpStatusCode } from './HttpStatusCode'
|
||||
|
||||
export type DeprecatedMinimalHttpResponse = {
|
||||
status: HttpStatusCode
|
||||
error?: DeprecatedError
|
||||
headers?: Map<string, string | null>
|
||||
}
|
||||
11
packages/responses/src/Domain/Http/DeprecatedResponseMeta.ts
Normal file
11
packages/responses/src/Domain/Http/DeprecatedResponseMeta.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Role } from '@standardnotes/security'
|
||||
|
||||
export type DeprecatedResponseMeta = {
|
||||
auth: {
|
||||
userUuid?: string
|
||||
roles?: Role[]
|
||||
}
|
||||
server: {
|
||||
filesServerUrl?: string
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
export enum StatusCode {
|
||||
export enum DeprecatedStatusCode {
|
||||
LocalValidationError = 10,
|
||||
CanceledMfa = 11,
|
||||
UnknownError = 12,
|
||||
|
||||
HttpStatusMinSuccess = 200,
|
||||
HttpStatusNoContent = 204,
|
||||
@@ -1,10 +0,0 @@
|
||||
export type Error = {
|
||||
message: string
|
||||
status: number
|
||||
tag?: string
|
||||
/** In the case of MFA required responses,
|
||||
* the required prompt is returned as part of the error */
|
||||
payload?: {
|
||||
mfa_key?: string
|
||||
}
|
||||
}
|
||||
15
packages/responses/src/Domain/Http/ErrorTag.ts
Normal file
15
packages/responses/src/Domain/Http/ErrorTag.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export enum ErrorTag {
|
||||
MfaInvalid = 'mfa-invalid',
|
||||
MfaRequired = 'mfa-required',
|
||||
U2FRequired = 'u2f-required',
|
||||
RefreshTokenInvalid = 'invalid-refresh-token',
|
||||
RefreshTokenExpired = 'expired-refresh-token',
|
||||
AccessTokenExpired = 'expired-access-token',
|
||||
ParametersInvalid = 'invalid-parameters',
|
||||
RevokedSession = 'revoked-session',
|
||||
AuthInvalid = 'invalid-auth',
|
||||
ReadOnlyAccess = 'read-only-access',
|
||||
|
||||
ClientValidationError = 'client-validation-error',
|
||||
ClientCanceledMfa = 'client-canceled-mfa',
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
import { HttpResponse } from './HttpResponse'
|
||||
import { StatusCode } from './StatusCode'
|
||||
|
||||
export function isErrorResponseExpiredToken(errorResponse: HttpResponse): boolean {
|
||||
return errorResponse.status === StatusCode.HttpStatusExpiredAccessToken
|
||||
}
|
||||
6
packages/responses/src/Domain/Http/HttpError.ts
Normal file
6
packages/responses/src/Domain/Http/HttpError.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { ErrorTag } from './ErrorTag'
|
||||
|
||||
export type HttpError = {
|
||||
message: string
|
||||
tag?: ErrorTag
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import { HttpError } from './HttpError'
|
||||
|
||||
export type HttpErrorResponseBody = {
|
||||
error: HttpError
|
||||
}
|
||||
1
packages/responses/src/Domain/Http/HttpHeaders.ts
Normal file
1
packages/responses/src/Domain/Http/HttpHeaders.ts
Normal file
@@ -0,0 +1 @@
|
||||
export type HttpHeaders = Map<string, string | null>
|
||||
13
packages/responses/src/Domain/Http/HttpRequest.ts
Normal file
13
packages/responses/src/Domain/Http/HttpRequest.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { HttpRequestParams } from './HttpRequestParams'
|
||||
import { HttpVerb } from './HttpVerb'
|
||||
|
||||
export type HttpRequest = {
|
||||
url: string
|
||||
params?: HttpRequestParams
|
||||
rawBytes?: Uint8Array
|
||||
verb: HttpVerb
|
||||
authentication?: string
|
||||
customHeaders?: Record<string, string>[]
|
||||
responseType?: XMLHttpRequestResponseType
|
||||
external?: boolean
|
||||
}
|
||||
1
packages/responses/src/Domain/Http/HttpRequestParams.ts
Normal file
1
packages/responses/src/Domain/Http/HttpRequestParams.ts
Normal file
@@ -0,0 +1 @@
|
||||
export type HttpRequestParams = unknown
|
||||
@@ -1,13 +1,26 @@
|
||||
import { StatusCode } from './StatusCode'
|
||||
import { Error } from './Error'
|
||||
import { ResponseMeta } from './ResponseMeta'
|
||||
import { HttpErrorResponseBody } from './HttpErrorResponseBody'
|
||||
import { HttpResponseMeta } from './HttpResponseMeta'
|
||||
import { HttpHeaders } from './HttpHeaders'
|
||||
import { HttpStatusCode } from './HttpStatusCode'
|
||||
|
||||
export type HttpResponse = {
|
||||
status?: StatusCode
|
||||
error?: Error
|
||||
data?: {
|
||||
error?: Error
|
||||
}
|
||||
meta?: ResponseMeta
|
||||
headers?: Map<string, string | null>
|
||||
type AnySuccessRecord = Record<string, unknown> & { error?: never }
|
||||
|
||||
interface HttpResponseBase {
|
||||
status: HttpStatusCode
|
||||
meta?: HttpResponseMeta
|
||||
headers?: HttpHeaders
|
||||
}
|
||||
|
||||
export interface HttpErrorResponse extends HttpResponseBase {
|
||||
data: HttpErrorResponseBody
|
||||
}
|
||||
|
||||
export interface HttpSuccessResponse<T = AnySuccessRecord> extends HttpResponseBase {
|
||||
data: T
|
||||
}
|
||||
|
||||
export type HttpResponse<T = AnySuccessRecord> = HttpErrorResponse | HttpSuccessResponse<T>
|
||||
|
||||
export function isErrorResponse<T>(response: HttpResponse<T>): response is HttpErrorResponse {
|
||||
return (response.data as HttpErrorResponseBody)?.error != undefined
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Role } from '@standardnotes/security'
|
||||
|
||||
export type ResponseMeta = {
|
||||
export type HttpResponseMeta = {
|
||||
auth: {
|
||||
userUuid?: string
|
||||
roles?: Role[]
|
||||
11
packages/responses/src/Domain/Http/HttpStatusCode.ts
Normal file
11
packages/responses/src/Domain/Http/HttpStatusCode.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export enum HttpStatusCode {
|
||||
Success = 200,
|
||||
NoContent = 204,
|
||||
MultipleChoices = 300,
|
||||
BadRequest = 400,
|
||||
Unauthorized = 401,
|
||||
Forbidden = 403,
|
||||
Gone = 410,
|
||||
ExpiredAccessToken = 498,
|
||||
InternalServerError = 500,
|
||||
}
|
||||
7
packages/responses/src/Domain/Http/HttpVerb.ts
Normal file
7
packages/responses/src/Domain/Http/HttpVerb.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export enum HttpVerb {
|
||||
Get = 'GET',
|
||||
Post = 'POST',
|
||||
Put = 'PUT',
|
||||
Patch = 'PATCH',
|
||||
Delete = 'DELETE',
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import { StatusCode } from './StatusCode'
|
||||
import { Error } from './Error'
|
||||
|
||||
export type MinimalHttpResponse = {
|
||||
status?: StatusCode
|
||||
error?: Error
|
||||
headers?: Map<string, string | null>
|
||||
}
|
||||
15
packages/responses/src/Domain/Http/index.ts
Normal file
15
packages/responses/src/Domain/Http/index.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export * from './ErrorTag'
|
||||
export * from './HttpErrorResponseBody'
|
||||
export * from './HttpHeaders'
|
||||
export * from './HttpRequest'
|
||||
export * from './HttpRequestParams'
|
||||
export * from './HttpResponse'
|
||||
export * from './HttpResponseMeta'
|
||||
export * from './HttpVerb'
|
||||
export * from './DeprecatedError'
|
||||
export * from './DeprecatedHttpResponse'
|
||||
export * from './DeprecatedMinimalHttpResponses'
|
||||
export * from './DeprecatedResponseMeta'
|
||||
export * from './DeprecatedStatusCode'
|
||||
export * from './HttpStatusCode'
|
||||
export * from './HttpError'
|
||||
Reference in New Issue
Block a user