57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import { unwrapApiResponse } from '@/utils/api-response'
|
|
import { request } from '@/utils/request'
|
|
|
|
import type {
|
|
ApiResponse,
|
|
SignatureUploadInput,
|
|
SignatureUploadResponse,
|
|
TokenConsumeRequest,
|
|
TokenConsumeResponse,
|
|
} from './types'
|
|
|
|
export function consumeSigningToken(payload: TokenConsumeRequest): Promise<TokenConsumeResponse> {
|
|
return request
|
|
.post<ApiResponse<TokenConsumeResponse>>('/v1/sign-deliveries/token/consume', payload, {
|
|
headers: {
|
|
'Idempotency-Key': createIdempotencyKey(),
|
|
},
|
|
})
|
|
.then(unwrapApiResponse)
|
|
}
|
|
|
|
function createIdempotencyKey(value?: string) {
|
|
if (value) {
|
|
return value
|
|
}
|
|
|
|
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
return `patient-h5-${crypto.randomUUID()}`
|
|
}
|
|
|
|
return `patient-h5-${Date.now()}-${Math.random().toString(36).slice(2)}`
|
|
}
|
|
|
|
export function uploadSigningSignature(
|
|
payload: SignatureUploadInput,
|
|
): Promise<SignatureUploadResponse> {
|
|
const formData = new FormData()
|
|
formData.append('file', payload.file, 'signature.png')
|
|
formData.append('metadata', payload.metadata)
|
|
|
|
return request
|
|
.post<ApiResponse<SignatureUploadResponse>>(
|
|
`/v1/sign-deliveries/${encodeURIComponent(payload.taskId)}/signature`,
|
|
formData,
|
|
{
|
|
params: {
|
|
deliveryId: payload.deliveryId,
|
|
uploadToken: payload.uploadToken,
|
|
},
|
|
headers: {
|
|
'Idempotency-Key': createIdempotencyKey(payload.idempotencyKey),
|
|
},
|
|
},
|
|
)
|
|
.then(unwrapApiResponse)
|
|
}
|