f1cff5441a
Signed-off-by: Sebastian <krupinski01@gmail.com>
71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
import { createFetchWrapper } from '@KTXC'
|
|
import type { ApiRequest, ApiResponse } from '@MailManager/types/common'
|
|
import type {
|
|
CompositionAttachmentAddRequest,
|
|
CompositionAttachmentAddResponse,
|
|
CompositionAttachmentRemoveRequest,
|
|
CompositionAttachmentRemoveResponse,
|
|
CompositionDiscardRequest,
|
|
CompositionDiscardResponse,
|
|
CompositionPatchRequest,
|
|
CompositionPatchResponse,
|
|
CompositionSendRequest,
|
|
CompositionSendResponse,
|
|
CompositionStageRequest,
|
|
CompositionStageResponse,
|
|
} from '@/types/composition'
|
|
|
|
const fetchWrapper = createFetchWrapper()
|
|
const API_URL = '/m/mail/compose/v1'
|
|
const API_VERSION = 1
|
|
|
|
function generateTransactionId(): string {
|
|
return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`
|
|
}
|
|
|
|
async function post<TRequest, TResponse>(operation: string, data: TRequest): Promise<TResponse> {
|
|
const request: ApiRequest<TRequest> = {
|
|
version: API_VERSION,
|
|
transaction: generateTransactionId(),
|
|
operation,
|
|
data,
|
|
}
|
|
|
|
const response: ApiResponse<TResponse> = await fetchWrapper.post(API_URL, request)
|
|
|
|
if (response.status === 'error') {
|
|
const errorMessage = `[${operation}] ${response.data.message}${response.data.code ? ` (code: ${response.data.code})` : ''}`
|
|
throw new Error(errorMessage)
|
|
}
|
|
|
|
return response.data
|
|
}
|
|
|
|
const compositionService = {
|
|
async stage(request: CompositionStageRequest): Promise<CompositionStageResponse> {
|
|
return await post<CompositionStageRequest, CompositionStageResponse>('stage', request)
|
|
},
|
|
|
|
async patch(request: CompositionPatchRequest): Promise<CompositionPatchResponse> {
|
|
return await post<CompositionPatchRequest, CompositionPatchResponse>('patch', request)
|
|
},
|
|
|
|
async discard(request: CompositionDiscardRequest): Promise<CompositionDiscardResponse> {
|
|
return await post<CompositionDiscardRequest, CompositionDiscardResponse>('discard', request)
|
|
},
|
|
|
|
async send(request: CompositionSendRequest): Promise<CompositionSendResponse> {
|
|
return await post<CompositionSendRequest, CompositionSendResponse>('send', request)
|
|
},
|
|
|
|
async attachmentAdd(request: CompositionAttachmentAddRequest): Promise<CompositionAttachmentAddResponse> {
|
|
return await post<CompositionAttachmentAddRequest, CompositionAttachmentAddResponse>('attachment.add', request)
|
|
},
|
|
|
|
async attachmentRemove(request: CompositionAttachmentRemoveRequest): Promise<CompositionAttachmentRemoveResponse> {
|
|
return await post<CompositionAttachmentRemoveRequest, CompositionAttachmentRemoveResponse>('attachment.remove', request)
|
|
}
|
|
|
|
}
|
|
|
|
export default compositionService |