diff --git a/www/app/[domain]/browse/page.tsx b/www/app/[domain]/browse/page.tsx index b2359b9e..46a81295 100644 --- a/www/app/[domain]/browse/page.tsx +++ b/www/app/[domain]/browse/page.tsx @@ -72,18 +72,18 @@ export default function TranscriptBrowser() { <> )} - {item.sourceLanguage ? ( + {item.source_language ? (
- {item.sourceLanguage} + {item.source_language}
) : ( <> )}
- {new Date(item.createdAt).toLocaleDateString("en-US")} + {new Date(item.created_at).toLocaleDateString("en-US")}
-
{item.shortSummary}
+
{item.short_summary}
))} diff --git a/www/app/[domain]/transcripts/[transcriptId]/page.tsx b/www/app/[domain]/transcripts/[transcriptId]/page.tsx index 18debf69..356cb7b5 100644 --- a/www/app/[domain]/transcripts/[transcriptId]/page.tsx +++ b/www/app/[domain]/transcripts/[transcriptId]/page.tsx @@ -19,6 +19,7 @@ import { useRouter } from "next/navigation"; import { faSpinner } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { featureEnabled } from "../../domainContext"; +import { toShareMode } from "../../../lib/shareMode"; type TranscriptDetails = { params: { @@ -110,10 +111,10 @@ export default function TranscriptDetails(details: TranscriptDetails) {
- {transcript.response.longSummary ? ( + {transcript.response.long_summary ? ( setShowModal(true)} /> @@ -142,8 +143,8 @@ export default function TranscriptDetails(details: TranscriptDetails) {
diff --git a/www/app/[domain]/transcripts/createTranscript.ts b/www/app/[domain]/transcripts/createTranscript.ts index 9ad1abe0..08eff7da 100644 --- a/www/app/[domain]/transcripts/createTranscript.ts +++ b/www/app/[domain]/transcripts/createTranscript.ts @@ -1,48 +1,38 @@ -import { useEffect, useState } from "react"; -import { - DefaultApi, - V1TranscriptsCreateRequest, -} from "../../api/apis/DefaultApi"; -import { GetTranscript } from "../../api"; +import { useState } from "react"; import { useError } from "../../(errors)/errorContext"; -import getApi from "../../lib/getApi"; +import { GetTranscript, CreateTranscript } from "../../api"; +import useApi from "../../lib/useApi"; -type CreateTranscript = { - response: GetTranscript | null; + +type UseTranscript = { + transcript: GetTranscript | null; loading: boolean; error: Error | null; - create: (params: V1TranscriptsCreateRequest["createTranscript"]) => void; + create: (transcriptCreationDetails: CreateTranscript) => void; }; -const useCreateTranscript = (): CreateTranscript => { - const [response, setResponse] = useState(null); +const useCreateTranscript = (): UseTranscript => { + const [transcript, setTranscript] = useState(null); const [loading, setLoading] = useState(false); const [error, setErrorState] = useState(null); const { setError } = useError(); - const api = getApi(); + const api = useApi(); - const create = (params: V1TranscriptsCreateRequest["createTranscript"]) => { + const create = (transcriptCreationDetails: CreateTranscript) => { if (loading || !api) return; setLoading(true); - const requestParameters: V1TranscriptsCreateRequest = { - createTranscript: { - name: params.name || "Unnamed Transcript", // Default - targetLanguage: params.targetLanguage || "en", // Default - }, - }; console.debug( "POST - /v1/transcripts/ - Requesting new transcription creation", - requestParameters, + transcriptCreationDetails, ); - api - .v1TranscriptsCreate(requestParameters) - .then((result) => { - setResponse(result); + api.v1TranscriptsCreate(transcriptCreationDetails) + .then((transcript) => { + setTranscript(transcript); setLoading(false); - console.debug("New transcript created:", result); + console.debug("New transcript created:", transcript); }) .catch((err) => { setError( @@ -54,7 +44,7 @@ const useCreateTranscript = (): CreateTranscript => { }); }; - return { response, loading, error, create }; + return { transcript, loading, error, create }; }; export default useCreateTranscript; diff --git a/www/app/[domain]/transcripts/finalSummary.tsx b/www/app/[domain]/transcripts/finalSummary.tsx index f7d7ac23..cb361118 100644 --- a/www/app/[domain]/transcripts/finalSummary.tsx +++ b/www/app/[domain]/transcripts/finalSummary.tsx @@ -2,8 +2,9 @@ import { useRef, useState } from "react"; import React from "react"; import Markdown from "react-markdown"; import "../../styles/markdown.css"; -import getApi from "../../lib/getApi"; import { featureEnabled } from "../domainContext"; +import { UpdateTranscript } from "../../api"; +import useApi from "../../lib/useApi"; type FinalSummaryProps = { summary: string; @@ -19,17 +20,17 @@ export default function FinalSummary(props: FinalSummaryProps) { const [isEditMode, setIsEditMode] = useState(false); const [preEditSummary, setPreEditSummary] = useState(props.summary); const [editedSummary, setEditedSummary] = useState(props.summary); - const api = getApi(); const updateSummary = async (newSummary: string, transcriptId: string) => { - if (!api) return; try { - const updatedTranscript = await api.v1TranscriptUpdate({ + const api = useApi(); + const requestBody: UpdateTranscript = { + long_summary: newSummary, + }; + const updatedTranscript = await api?.v1TranscriptUpdate( transcriptId, - updateTranscript: { - longSummary: newSummary, - }, - }); + requestBody, + ); console.log("Updated long summary:", updatedTranscript); } catch (err) { console.error("Failed to update long summary:", err); diff --git a/www/app/[domain]/transcripts/new/page.tsx b/www/app/[domain]/transcripts/new/page.tsx index 045c2db5..21def9d2 100644 --- a/www/app/[domain]/transcripts/new/page.tsx +++ b/www/app/[domain]/transcripts/new/page.tsx @@ -18,7 +18,7 @@ const TranscriptCreate = () => { const isAuthenticated = useFiefIsAuthenticated(); const requireLogin = featureEnabled("requireLogin"); - const [name, setName] = useState(); + const [name, setName] = useState(""); const nameChange = (event: React.ChangeEvent) => { setName(event.target.value); }; @@ -35,13 +35,13 @@ const TranscriptCreate = () => { const send = () => { if (loadingSend || createTranscript.loading || permissionDenied) return; setLoadingSend(true); - createTranscript.create({ name, targetLanguage }); + createTranscript.create({ name, target_language: targetLanguage }); }; useEffect(() => { - createTranscript.response && - router.push(`/transcripts/${createTranscript.response.id}/record`); - }, [createTranscript.response]); + createTranscript.transcript && + router.push(`/transcripts/${createTranscript.transcript.id}/record`); + }, [createTranscript.transcript]); useEffect(() => { if (createTranscript.error) setLoadingSend(false); diff --git a/www/app/[domain]/transcripts/shareLink.tsx b/www/app/[domain]/transcripts/shareLink.tsx index dd66d6cb..4b30e7f9 100644 --- a/www/app/[domain]/transcripts/shareLink.tsx +++ b/www/app/[domain]/transcripts/shareLink.tsx @@ -1,6 +1,5 @@ import React, { useState, useRef, useEffect, use } from "react"; import { featureEnabled } from "../domainContext"; -import getApi from "../../lib/getApi"; import { useFiefUserinfo } from "@fief/fief/nextjs/react"; import SelectSearch from "react-select-search"; import "react-select-search/style.css"; @@ -8,26 +7,30 @@ import "../../styles/button.css"; import "../../styles/form.scss"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faSpinner } from "@fortawesome/free-solid-svg-icons"; - +import { DefaultService, UpdateTranscript } from "../../api"; +import { ShareMode, toShareMode } from "../../lib/shareMode"; +import useApi from "../../lib/useApi"; type ShareLinkProps = { transcriptId: string; userId: string | null; - shareMode: string; + shareMode: ShareMode; }; const ShareLink = (props: ShareLinkProps) => { const [isCopied, setIsCopied] = useState(false); + const [api, setApi] = useState(null); const inputRef = useRef(null); const [currentUrl, setCurrentUrl] = useState(""); const requireLogin = featureEnabled("requireLogin"); const [isOwner, setIsOwner] = useState(false); - const [shareMode, setShareMode] = useState(props.shareMode); + const [shareMode, setShareMode] = useState(props.shareMode); const [shareLoading, setShareLoading] = useState(false); const userinfo = useFiefUserinfo(); - const api = getApi(); useEffect(() => { setCurrentUrl(window.location.href); + const api = useApi(); + setApi(api); }, []); useEffect(() => { @@ -48,18 +51,24 @@ const ShareLink = (props: ShareLinkProps) => { }; const updateShareMode = async (selectedShareMode: string) => { - if (!api) return; setShareLoading(true); - const updatedTranscript = await api.v1TranscriptUpdate({ - transcriptId: props.transcriptId, - updateTranscript: { - shareMode: selectedShareMode, - }, - }); - setShareMode(updatedTranscript.shareMode); + const requestBody: UpdateTranscript = { + share_mode: toShareMode(selectedShareMode), + }; + const api = useApi(); + + if (!api) + throw new Error("ShareLink's API should always be ready at this point"); + + const updatedTranscript = await api.v1TranscriptUpdate( + props.transcriptId, + requestBody, + ); + setShareMode(toShareMode(updatedTranscript.share_mode)); setShareLoading(false); }; const privacyEnabled = featureEnabled("privacy"); + const apiReady = api != null; return (
{

This transcript is public. Everyone can access it.

)} - {isOwner && api && ( + {isOwner && apiReady (
{ { name: "Secure", value: "semi-private" }, { name: "Public", value: "public" }, ]} - value={shareMode} + value={shareMode?.toString()} onChange={updateShareMode} closeOnSelect={true} /> diff --git a/www/app/[domain]/transcripts/transcriptTitle.tsx b/www/app/[domain]/transcripts/transcriptTitle.tsx index afc29e51..9b95315b 100644 --- a/www/app/[domain]/transcripts/transcriptTitle.tsx +++ b/www/app/[domain]/transcripts/transcriptTitle.tsx @@ -1,5 +1,6 @@ -import { useState } from "react"; -import getApi from "../../lib/getApi"; +import { useEffect, useState } from "react"; +import { UpdateTranscript } from "../../api"; +import useApi from "../../lib/useApi"; type TranscriptTitle = { title: string; @@ -10,17 +11,17 @@ const TranscriptTitle = (props: TranscriptTitle) => { const [displayedTitle, setDisplayedTitle] = useState(props.title); const [preEditTitle, setPreEditTitle] = useState(props.title); const [isEditing, setIsEditing] = useState(false); - const api = getApi(); const updateTitle = async (newTitle: string, transcriptId: string) => { - if (!api) return; try { - const updatedTranscript = await api.v1TranscriptUpdate({ + const requestBody: UpdateTranscript = { + title: newTitle, + }; + const api = useApi(); + const updatedTranscript = await api?.v1TranscriptUpdate( transcriptId, - updateTranscript: { - title: newTitle, - }, - }); + requestBody, + ); console.log("Updated transcript:", updatedTranscript); } catch (err) { console.error("Failed to update transcript:", err); diff --git a/www/app/[domain]/transcripts/useMp3.ts b/www/app/[domain]/transcripts/useMp3.ts index 363a4190..9cfff0c7 100644 --- a/www/app/[domain]/transcripts/useMp3.ts +++ b/www/app/[domain]/transcripts/useMp3.ts @@ -1,6 +1,6 @@ import { useContext, useEffect, useState } from "react"; import { DomainContext } from "../domainContext"; -import getApi from "../../lib/getApi"; +import getApi from "../../lib/useApi"; import { useFiefAccessTokenInfo } from "@fief/fief/build/esm/nextjs/react"; export type Mp3Response = { diff --git a/www/app/[domain]/transcripts/useTopics.ts b/www/app/[domain]/transcripts/useTopics.ts index de4097b3..2a78efaf 100644 --- a/www/app/[domain]/transcripts/useTopics.ts +++ b/www/app/[domain]/transcripts/useTopics.ts @@ -1,11 +1,7 @@ import { useEffect, useState } from "react"; -import { - DefaultApi, - V1TranscriptGetTopicsRequest, -} from "../../api/apis/DefaultApi"; import { useError } from "../../(errors)/errorContext"; import { Topic } from "./webSocketTypes"; -import getApi from "../../lib/getApi"; +import useApi from "../../lib/useApi"; import { shouldShowError } from "../../lib/errorUtils"; type TranscriptTopics = { @@ -19,17 +15,13 @@ const useTopics = (id: string): TranscriptTopics => { const [loading, setLoading] = useState(false); const [error, setErrorState] = useState(null); const { setError } = useError(); - const api = getApi(); + const api = useApi(); useEffect(() => { if (!id || !api) return; setLoading(true); - const requestParameters: V1TranscriptGetTopicsRequest = { - transcriptId: id, - }; - api - .v1TranscriptGetTopics(requestParameters) + api.v1TranscriptGetTopics(id) .then((result) => { setTopics(result); setLoading(false); diff --git a/www/app/[domain]/transcripts/useTranscript.ts b/www/app/[domain]/transcripts/useTranscript.ts index 91700d7a..4b19c616 100644 --- a/www/app/[domain]/transcripts/useTranscript.ts +++ b/www/app/[domain]/transcripts/useTranscript.ts @@ -1,9 +1,8 @@ import { useEffect, useState } from "react"; -import { V1TranscriptGetRequest } from "../../api/apis/DefaultApi"; import { GetTranscript } from "../../api"; import { useError } from "../../(errors)/errorContext"; -import getApi from "../../lib/getApi"; import { shouldShowError } from "../../lib/errorUtils"; +import useApi from "../../lib/useApi"; type ErrorTranscript = { error: Error; @@ -30,17 +29,14 @@ const useTranscript = ( const [loading, setLoading] = useState(true); const [error, setErrorState] = useState(null); const { setError } = useError(); - const api = getApi(); + const api = useApi(); useEffect(() => { if (!id || !api) return; setLoading(true); - const requestParameters: V1TranscriptGetRequest = { - transcriptId: id, - }; - api - .v1TranscriptGet(requestParameters) + + api.v1TranscriptGet(id) .then((result) => { setResponse(result); setLoading(false); @@ -55,7 +51,7 @@ const useTranscript = ( } setErrorState(error); }); - }, [id, !api]); + }, [id, api]); return { response, loading, error } as | ErrorTranscript diff --git a/www/app/[domain]/transcripts/useTranscriptList.ts b/www/app/[domain]/transcripts/useTranscriptList.ts index 7b5abb37..7b8fe288 100644 --- a/www/app/[domain]/transcripts/useTranscriptList.ts +++ b/www/app/[domain]/transcripts/useTranscriptList.ts @@ -1,32 +1,29 @@ import { useEffect, useState } from "react"; -import { GetTranscriptFromJSON, PageGetTranscript } from "../../api"; import { useError } from "../../(errors)/errorContext"; -import getApi from "../../lib/getApi"; +import useApi from "../../lib/useApi"; +import { Page_GetTranscript_ } from "../../api"; type TranscriptList = { - response: PageGetTranscript | null; + response: Page_GetTranscript_ | null; loading: boolean; error: Error | null; }; //always protected const useTranscriptList = (page: number): TranscriptList => { - const [response, setResponse] = useState(null); + const [response, setResponse] = useState(null); const [loading, setLoading] = useState(true); const [error, setErrorState] = useState(null); const { setError } = useError(); - const api = getApi(); + const api = useApi(); useEffect(() => { - if (!api) return; setLoading(true); - api - .v1TranscriptsList({ page }) + if (!api) + +return; + api.v1TranscriptsList(page) .then((response) => { - // issue with API layer, conversion for items is not happening - response.items = response.items.map((item) => - GetTranscriptFromJSON(item), - ); setResponse(response); setLoading(false); }) @@ -36,7 +33,7 @@ const useTranscriptList = (page: number): TranscriptList => { setError(err); setErrorState(err); }); - }, [!api, page]); + }, [api, page]); return { response, loading, error }; }; diff --git a/www/app/[domain]/transcripts/useWaveform.ts b/www/app/[domain]/transcripts/useWaveform.ts index f80ad78c..19291c93 100644 --- a/www/app/[domain]/transcripts/useWaveform.ts +++ b/www/app/[domain]/transcripts/useWaveform.ts @@ -1,8 +1,7 @@ import { useEffect, useState } from "react"; -import { V1TranscriptGetAudioWaveformRequest } from "../../api/apis/DefaultApi"; import { AudioWaveform } from "../../api"; import { useError } from "../../(errors)/errorContext"; -import getApi from "../../lib/getApi"; +import useApi from "../../lib/useApi"; import { shouldShowError } from "../../lib/errorUtils"; type AudioWaveFormResponse = { @@ -16,16 +15,13 @@ const useWaveform = (id: string): AudioWaveFormResponse => { const [loading, setLoading] = useState(true); const [error, setErrorState] = useState(null); const { setError } = useError(); - const api = getApi(); + const api = useApi(); useEffect(() => { if (!id || !api) return; setLoading(true); - const requestParameters: V1TranscriptGetAudioWaveformRequest = { - transcriptId: id, - }; api - .v1TranscriptGetAudioWaveform(requestParameters) + .v1TranscriptGetAudioWaveform(id) .then((result) => { setWaveform(result); setLoading(false); diff --git a/www/app/[domain]/transcripts/useWebRTC.ts b/www/app/[domain]/transcripts/useWebRTC.ts index edd3bef0..042e9600 100644 --- a/www/app/[domain]/transcripts/useWebRTC.ts +++ b/www/app/[domain]/transcripts/useWebRTC.ts @@ -1,11 +1,8 @@ import { useEffect, useState } from "react"; import Peer from "simple-peer"; -import { - DefaultApi, - V1TranscriptRecordWebrtcRequest, -} from "../../api/apis/DefaultApi"; import { useError } from "../../(errors)/errorContext"; -import getApi from "../../lib/getApi"; +import useApi from "../../lib/useApi"; +import { RtcOffer } from "../../api"; const useWebRTC = ( stream: MediaStream | null, @@ -13,10 +10,10 @@ const useWebRTC = ( ): Peer => { const [peer, setPeer] = useState(null); const { setError } = useError(); - const api = getApi(); + const api = useApi(); useEffect(() => { - if (!stream || !transcriptId) { + if (!stream || !transcriptId || !api) { return; } @@ -38,16 +35,13 @@ const useWebRTC = ( p.on("signal", (data: any) => { if (!api) return; if ("sdp" in data) { - const requestParameters: V1TranscriptRecordWebrtcRequest = { - transcriptId: transcriptId, - rtcOffer: { + const rtcOffer : RtcOffer = { sdp: data.sdp, type: data.type, - }, - }; + }; api - .v1TranscriptRecordWebrtc(requestParameters) + .v1TranscriptRecordWebrtc(transcriptId, rtcOffer) .then((answer) => { try { p.signal(answer); diff --git a/www/app/api/Api.ts b/www/app/api/Api.ts new file mode 100644 index 00000000..d80252ec --- /dev/null +++ b/www/app/api/Api.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseHttpRequest } from "./core/BaseHttpRequest"; +import type { OpenAPIConfig } from "./core/OpenAPI"; +import { FetchHttpRequest } from "./core/FetchHttpRequest"; + +import { DefaultService } from "./services/DefaultService"; + +type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest; + +export class Api { + public readonly default: DefaultService; + + public readonly request: BaseHttpRequest; + + constructor( + config?: Partial, + HttpRequest: HttpRequestConstructor = FetchHttpRequest, + ) { + this.request = new HttpRequest({ + BASE: config?.BASE ?? "", + VERSION: config?.VERSION ?? "0.1.0", + WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false, + CREDENTIALS: config?.CREDENTIALS ?? "include", + TOKEN: config?.TOKEN, + USERNAME: config?.USERNAME, + PASSWORD: config?.PASSWORD, + HEADERS: config?.HEADERS, + ENCODE_PATH: config?.ENCODE_PATH, + }); + + this.default = new DefaultService(this.request); + } +} diff --git a/www/app/api/OpenApi.ts b/www/app/api/OpenApi.ts new file mode 100644 index 00000000..70ac35d9 --- /dev/null +++ b/www/app/api/OpenApi.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseHttpRequest } from "./core/BaseHttpRequest"; +import type { OpenAPIConfig } from "./core/OpenAPI"; +import { FetchHttpRequest } from "./core/FetchHttpRequest"; + +import { DefaultService } from "./services/DefaultService"; + +type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest; + +export class OpenApi { + public readonly default: DefaultService; + + public readonly request: BaseHttpRequest; + + constructor( + config?: Partial, + HttpRequest: HttpRequestConstructor = FetchHttpRequest, + ) { + this.request = new HttpRequest({ + BASE: config?.BASE ?? "", + VERSION: config?.VERSION ?? "0.1.0", + WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false, + CREDENTIALS: config?.CREDENTIALS ?? "include", + TOKEN: config?.TOKEN, + USERNAME: config?.USERNAME, + PASSWORD: config?.PASSWORD, + HEADERS: config?.HEADERS, + ENCODE_PATH: config?.ENCODE_PATH, + }); + + this.default = new DefaultService(this.request); + } +} diff --git a/www/app/api/core/BaseHttpRequest.ts b/www/app/api/core/BaseHttpRequest.ts new file mode 100644 index 00000000..f0781151 --- /dev/null +++ b/www/app/api/core/BaseHttpRequest.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiRequestOptions } from "./ApiRequestOptions"; +import type { CancelablePromise } from "./CancelablePromise"; +import type { OpenAPIConfig } from "./OpenAPI"; + +export abstract class BaseHttpRequest { + constructor(public readonly config: OpenAPIConfig) {} + + public abstract request(options: ApiRequestOptions): CancelablePromise; +} diff --git a/www/app/api/core/FetchHttpRequest.ts b/www/app/api/core/FetchHttpRequest.ts new file mode 100644 index 00000000..3683c443 --- /dev/null +++ b/www/app/api/core/FetchHttpRequest.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiRequestOptions } from "./ApiRequestOptions"; +import { BaseHttpRequest } from "./BaseHttpRequest"; +import type { CancelablePromise } from "./CancelablePromise"; +import type { OpenAPIConfig } from "./OpenAPI"; +import { request as __request } from "./request"; + +export class FetchHttpRequest extends BaseHttpRequest { + constructor(config: OpenAPIConfig) { + super(config); + } + + /** + * Request method + * @param options The request options from the service + * @returns CancelablePromise + * @throws ApiError + */ + public override request(options: ApiRequestOptions): CancelablePromise { + return __request(this.config, options); + } +} diff --git a/www/app/api/index.ts b/www/app/api/index.ts index a1543438..61227da5 100644 --- a/www/app/api/index.ts +++ b/www/app/api/index.ts @@ -2,7 +2,10 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +export { OpenApi } from "./OpenApi"; + export { ApiError } from "./core/ApiError"; +export { BaseHttpRequest } from "./core/BaseHttpRequest"; export { CancelablePromise, CancelError } from "./core/CancelablePromise"; export { OpenAPI } from "./core/OpenAPI"; export type { OpenAPIConfig } from "./core/OpenAPI"; diff --git a/www/app/api/services/DefaultService.ts b/www/app/api/services/DefaultService.ts index dd9538f5..0a0ce0c5 100644 --- a/www/app/api/services/DefaultService.ts +++ b/www/app/api/services/DefaultService.ts @@ -22,18 +22,19 @@ import type { UpdateTranscript } from "../models/UpdateTranscript"; import type { UserInfo } from "../models/UserInfo"; import type { CancelablePromise } from "../core/CancelablePromise"; -import { OpenAPI } from "../core/OpenAPI"; -import { request as __request } from "../core/request"; +import type { BaseHttpRequest } from "../core/BaseHttpRequest"; export class DefaultService { + constructor(public readonly httpRequest: BaseHttpRequest) {} + /** * Metrics * Endpoint that serves Prometheus metrics. * @returns any Successful Response * @throws ApiError */ - public static metrics(): CancelablePromise { - return __request(OpenAPI, { + public metrics(): CancelablePromise { + return this.httpRequest.request({ method: "GET", url: "/metrics", }); @@ -46,11 +47,11 @@ export class DefaultService { * @returns Page_GetTranscript_ Successful Response * @throws ApiError */ - public static v1TranscriptsList( + public v1TranscriptsList( page: number = 1, size: number = 50, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts", query: { @@ -69,10 +70,10 @@ export class DefaultService { * @returns GetTranscript Successful Response * @throws ApiError */ - public static v1TranscriptsCreate( + public v1TranscriptsCreate( requestBody: CreateTranscript, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "POST", url: "/v1/transcripts", body: requestBody, @@ -89,10 +90,10 @@ export class DefaultService { * @returns GetTranscript Successful Response * @throws ApiError */ - public static v1TranscriptGet( + public v1TranscriptGet( transcriptId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}", path: { @@ -111,11 +112,11 @@ export class DefaultService { * @returns GetTranscript Successful Response * @throws ApiError */ - public static v1TranscriptUpdate( + public v1TranscriptUpdate( transcriptId: string, requestBody: UpdateTranscript, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "PATCH", url: "/v1/transcripts/{transcript_id}", path: { @@ -135,10 +136,10 @@ export class DefaultService { * @returns DeletionStatus Successful Response * @throws ApiError */ - public static v1TranscriptDelete( + public v1TranscriptDelete( transcriptId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "DELETE", url: "/v1/transcripts/{transcript_id}", path: { @@ -156,10 +157,10 @@ export class DefaultService { * @returns GetTranscriptTopic Successful Response * @throws ApiError */ - public static v1TranscriptGetTopics( + public v1TranscriptGetTopics( transcriptId: string, ): CancelablePromise> { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/topics", path: { @@ -177,10 +178,10 @@ export class DefaultService { * @returns GetTranscriptTopicWithWords Successful Response * @throws ApiError */ - public static v1TranscriptGetTopicsWithWords( + public v1TranscriptGetTopicsWithWords( transcriptId: string, ): CancelablePromise> { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/topics/with-words", path: { @@ -199,11 +200,11 @@ export class DefaultService { * @returns GetTranscriptTopicWithWordsPerSpeaker Successful Response * @throws ApiError */ - public static v1TranscriptGetTopicsWithWordsPerSpeaker( + public v1TranscriptGetTopicsWithWordsPerSpeaker( transcriptId: string, topicId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/topics/{topic_id}/words-per-speaker", path: { @@ -223,11 +224,11 @@ export class DefaultService { * @returns any Successful Response * @throws ApiError */ - public static v1TranscriptHeadAudioMp3( + public v1TranscriptHeadAudioMp3( transcriptId: string, token?: string | null, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "HEAD", url: "/v1/transcripts/{transcript_id}/audio/mp3", path: { @@ -249,11 +250,11 @@ export class DefaultService { * @returns any Successful Response * @throws ApiError */ - public static v1TranscriptGetAudioMp3( + public v1TranscriptGetAudioMp3( transcriptId: string, token?: string | null, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/audio/mp3", path: { @@ -274,10 +275,10 @@ export class DefaultService { * @returns AudioWaveform Successful Response * @throws ApiError */ - public static v1TranscriptGetAudioWaveform( + public v1TranscriptGetAudioWaveform( transcriptId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/audio/waveform", path: { @@ -295,10 +296,10 @@ export class DefaultService { * @returns Participant Successful Response * @throws ApiError */ - public static v1TranscriptGetParticipants( + public v1TranscriptGetParticipants( transcriptId: string, ): CancelablePromise> { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/participants", path: { @@ -317,11 +318,11 @@ export class DefaultService { * @returns Participant Successful Response * @throws ApiError */ - public static v1TranscriptAddParticipant( + public v1TranscriptAddParticipant( transcriptId: string, requestBody: CreateParticipant, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "POST", url: "/v1/transcripts/{transcript_id}/participants", path: { @@ -342,11 +343,11 @@ export class DefaultService { * @returns Participant Successful Response * @throws ApiError */ - public static v1TranscriptGetParticipant( + public v1TranscriptGetParticipant( transcriptId: string, participantId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/participants/{participant_id}", path: { @@ -367,12 +368,12 @@ export class DefaultService { * @returns Participant Successful Response * @throws ApiError */ - public static v1TranscriptUpdateParticipant( + public v1TranscriptUpdateParticipant( transcriptId: string, participantId: string, requestBody: UpdateParticipant, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "PATCH", url: "/v1/transcripts/{transcript_id}/participants/{participant_id}", path: { @@ -394,11 +395,11 @@ export class DefaultService { * @returns DeletionStatus Successful Response * @throws ApiError */ - public static v1TranscriptDeleteParticipant( + public v1TranscriptDeleteParticipant( transcriptId: string, participantId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "DELETE", url: "/v1/transcripts/{transcript_id}/participants/{participant_id}", path: { @@ -418,11 +419,11 @@ export class DefaultService { * @returns SpeakerAssignmentStatus Successful Response * @throws ApiError */ - public static v1TranscriptAssignSpeaker( + public v1TranscriptAssignSpeaker( transcriptId: string, requestBody: SpeakerAssignment, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "PATCH", url: "/v1/transcripts/{transcript_id}/speaker/assign", path: { @@ -443,11 +444,11 @@ export class DefaultService { * @returns SpeakerAssignmentStatus Successful Response * @throws ApiError */ - public static v1TranscriptMergeSpeaker( + public v1TranscriptMergeSpeaker( transcriptId: string, requestBody: SpeakerMerge, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "PATCH", url: "/v1/transcripts/{transcript_id}/speaker/merge", path: { @@ -468,11 +469,11 @@ export class DefaultService { * @returns any Successful Response * @throws ApiError */ - public static v1TranscriptRecordUpload( + public v1TranscriptRecordUpload( transcriptId: string, formData: Body_transcript_record_upload_v1_transcripts__transcript_id__record_upload_post, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "POST", url: "/v1/transcripts/{transcript_id}/record/upload", path: { @@ -492,10 +493,10 @@ export class DefaultService { * @returns any Successful Response * @throws ApiError */ - public static v1TranscriptGetWebsocketEvents( + public v1TranscriptGetWebsocketEvents( transcriptId: string, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "GET", url: "/v1/transcripts/{transcript_id}/events", path: { @@ -514,11 +515,11 @@ export class DefaultService { * @returns any Successful Response * @throws ApiError */ - public static v1TranscriptRecordWebrtc( + public v1TranscriptRecordWebrtc( transcriptId: string, requestBody: RtcOffer, ): CancelablePromise { - return __request(OpenAPI, { + return this.httpRequest.request({ method: "POST", url: "/v1/transcripts/{transcript_id}/record/webrtc", path: { @@ -537,8 +538,8 @@ export class DefaultService { * @returns any Successful Response * @throws ApiError */ - public static v1UserMe(): CancelablePromise { - return __request(OpenAPI, { + public v1UserMe(): CancelablePromise { + return this.httpRequest.request({ method: "GET", url: "/v1/me", }); diff --git a/www/app/lib/shareMode.ts b/www/app/lib/shareMode.ts new file mode 100644 index 00000000..504d888a --- /dev/null +++ b/www/app/lib/shareMode.ts @@ -0,0 +1,7 @@ +export type ShareMode = "public" | "semi-private" | "private" | null; + +export function toShareMode(value: string | undefined | null): ShareMode { + return value === "public" || value === "semi-private" || value === "private" + ? value + : null; +} diff --git a/www/app/lib/getApi.ts b/www/app/lib/useApi.ts similarity index 55% rename from www/app/lib/getApi.ts rename to www/app/lib/useApi.ts index 236f9579..6485eba4 100644 --- a/www/app/lib/getApi.ts +++ b/www/app/lib/useApi.ts @@ -1,15 +1,15 @@ -import { DefaultService, OpenAPI } from "../api"; - import { useFiefAccessTokenInfo } from "@fief/fief/nextjs/react"; import { useContext, useEffect, useState } from "react"; import { DomainContext, featureEnabled } from "../[domain]/domainContext"; import { CookieContext } from "../(auth)/fiefWrapper"; +import { OpenApi, DefaultService } from "../api"; -export default function getApi(): DefaultService | undefined { +export default function useApi(): DefaultService | null { const accessTokenInfo = useFiefAccessTokenInfo(); const api_url = useContext(DomainContext).api_url; const requireLogin = featureEnabled("requireLogin"); - const [api, setApi] = useState(); + const [ready, setReady] = useState(false); + const [api, setApi] = useState(null); const { hasAuthCookie } = useContext(CookieContext); if (!api_url) throw new Error("no API URL"); @@ -19,18 +19,16 @@ export default function getApi(): DefaultService | undefined { return; } - // const apiConfiguration = new Configuration({ - // basePath: api_url, - // accessToken: accessTokenInfo - // ? "Bearer " + accessTokenInfo.access_token - // : undefined, - // }); - OpenAPI.BASE = api_url; - if (accessTokenInfo) { - OpenAPI.TOKEN = "Bearer " + accessTokenInfo.access_token; - } - setApi(DefaultService); + if (!accessTokenInfo) + return; + + const openApi = new OpenApi({ + BASE: api_url, + TOKEN: accessTokenInfo?.access_token + }); + + setApi(openApi); }, [!accessTokenInfo, hasAuthCookie]); - return api; + return api?.default ?? null; } diff --git a/www/package.json b/www/package.json index c20463c8..8713fb53 100644 --- a/www/package.json +++ b/www/package.json @@ -8,7 +8,7 @@ "start": "next start", "lint": "next lint", "format": "prettier --write .", - "openapi": "openapi --input http://127.0.0.1:1250/openapi.json --output app/api && yarn format", + "openapi": "openapi --input http://127.0.0.1:1250/openapi.json --name OpenApi --output app/api && yarn format", "openapi-old": "openapi-generator-cli generate -i http://localhost:1250/openapi.json -g typescript-fetch -o app/api && yarn format" }, "dependencies": {