diff --git a/packages/components/src/api/ApiConfig.ts b/packages/components/src/api/ApiConfig.ts index 21e3b0d299..60a5fe787c 100644 --- a/packages/components/src/api/ApiConfig.ts +++ b/packages/components/src/api/ApiConfig.ts @@ -392,6 +392,12 @@ class ApiConfig { return `${this.getApiOrigin()}/voice_clone_requests/check`; } + // =============== File Uploads =============== + + uploadAudio(): string { + return `${this.getApiOrigin()}/v1/media_uploads/upload_audio`; + } + uploadMedia(): string { return `${this.getApiOrigin()}/v1/media_uploads/upload`; } diff --git a/packages/components/src/api/upload/UploadAudio.ts b/packages/components/src/api/upload/UploadAudio.ts new file mode 100644 index 0000000000..b35e53209d --- /dev/null +++ b/packages/components/src/api/upload/UploadAudio.ts @@ -0,0 +1,55 @@ +import { ApiConfig } from "../ApiConfig"; + +export interface UploadAudioRequest { + uuid_idempotency_token: string, + file: any, +} + +export interface UploadAudioSuccessResponse { + success: boolean, + upload_token: string, +} + +export interface UploadAudioErrorResponse { + success: boolean, +} + +type UploadAudioResponse = UploadAudioSuccessResponse | UploadAudioErrorResponse; + +export function UploadAudioIsOk(response: UploadAudioResponse): response is UploadAudioSuccessResponse { + return response?.success === true; +} + +export function UploadAudioIsError(response: UploadAudioResponse): response is UploadAudioErrorResponse { + return response?.success === false; +} + +export async function UploadAudio(request: UploadAudioRequest) : Promise +{ + const endpoint = new ApiConfig().uploadAudio(); + + const formData = new FormData(); + + formData.append('uuid_idempotency_token', request.uuid_idempotency_token); + formData.append('file', request.file); + + return fetch(endpoint, { + method: 'POST', + credentials: 'include', + headers: { + 'Accept': 'application/json', + }, + body: formData, + }) + .then(res => res.json()) + .then(res => { + if (res && 'success' in res) { + return res; + } else { + return { success : false }; + } + }) + .catch(e => { + return { success : false }; + }); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/vc/vc_model_list/components/UploadComponent.tsx b/packages/fakeyou.com/src/v2/view/pages/vc/vc_model_list/components/UploadComponent.tsx index a47d6e7073..f19068a139 100644 --- a/packages/fakeyou.com/src/v2/view/pages/vc/vc_model_list/components/UploadComponent.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/vc/vc_model_list/components/UploadComponent.tsx @@ -4,7 +4,7 @@ import React, { useState } from "react"; import { FileUploader } from "react-drag-drop-files"; import { InputVcAudioPlayer } from "../../../../_common/InputVcAudioPlayer"; import { v4 as uuidv4 } from "uuid"; -import { UploadMedia, UploadMediaIsOk, UploadMediaRequest } from "@storyteller/components/src/api/upload/UploadMedia"; +import { UploadAudio, UploadAudioIsOk, UploadAudioRequest } from "@storyteller/components/src/api/upload/UploadAudio"; const FILE_TYPES = ["MP3", "WAV", "FLAC"]; @@ -44,14 +44,14 @@ function UploadComponent(props: Props) { return false; } - const request : UploadMediaRequest = { + const request : UploadAudioRequest = { uuid_idempotency_token: idempotencyToken, file: file, } - let result = await UploadMedia(request); + let result = await UploadAudio(request); - if (UploadMediaIsOk(result)) { + if (UploadAudioIsOk(result)) { setIsUploadDisabled(true); props.setMediaUploadToken(result.upload_token); console.log('TOKEN', result.upload_token)