diff --git a/openapi.json b/openapi.json new file mode 100644 index 00000000..5bc74d33 --- /dev/null +++ b/openapi.json @@ -0,0 +1,680 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "FastAPI", + "version": "0.1.0" + }, + "paths": { + "/offer": { + "post": { + "summary": "Rtc Offer", + "operationId": "rtc_offer_offer_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RtcOffer" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transcripts": { + "get": { + "summary": "Transcripts List", + "operationId": "transcripts_list_v1_transcripts_get", + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 1, + "title": "Page" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 50, + "title": "Size" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Page_GetTranscript_" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "post": { + "summary": "Transcripts Create", + "operationId": "transcripts_create_v1_transcripts_post", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTranscript" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTranscript" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transcripts/{transcript_id}": { + "get": { + "summary": "Transcript Get", + "operationId": "transcript_get_v1_transcripts__transcript_id__get", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTranscript" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "patch": { + "summary": "Transcript Update", + "operationId": "transcript_update_v1_transcripts__transcript_id__patch", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTranscript" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTranscript" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "summary": "Transcript Delete", + "operationId": "transcript_delete_v1_transcripts__transcript_id__delete", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletionStatus" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transcripts/{transcript_id}/audio": { + "get": { + "summary": "Transcript Get Audio", + "operationId": "transcript_get_audio_v1_transcripts__transcript_id__audio_get", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transcripts/{transcript_id}/topics": { + "get": { + "summary": "Transcript Get Topics", + "operationId": "transcript_get_topics_v1_transcripts__transcript_id__topics_get", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TranscriptTopic" + }, + "title": "Response Transcript Get Topics V1 Transcripts Transcript Id Topics Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transcripts/{transcript_id}/events": { + "get": { + "summary": "Transcript Get Websocket Events", + "operationId": "transcript_get_websocket_events_v1_transcripts__transcript_id__events_get", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transcripts/{transcript_id}/record/webrtc": { + "post": { + "summary": "Transcript Record Webrtc", + "operationId": "transcript_record_webrtc_v1_transcripts__transcript_id__record_webrtc_post", + "parameters": [ + { + "name": "transcript_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Transcript Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RtcOffer" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "CreateTranscript": { + "properties": { + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "CreateTranscript" + }, + "DeletionStatus": { + "properties": { + "status": { + "type": "string", + "title": "Status" + } + }, + "type": "object", + "required": [ + "status" + ], + "title": "DeletionStatus" + }, + "GetTranscript": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "status": { + "type": "string", + "title": "Status" + }, + "locked": { + "type": "boolean", + "title": "Locked" + }, + "duration": { + "type": "integer", + "title": "Duration" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + } + }, + "type": "object", + "required": [ + "id", + "name", + "status", + "locked", + "duration", + "created_at" + ], + "title": "GetTranscript" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "Page_GetTranscript_": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/GetTranscript" + }, + "type": "array", + "title": "Items" + }, + "total": { + "type": "integer", + "minimum": 0.0, + "title": "Total" + }, + "page": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Page" + }, + "size": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Size" + }, + "pages": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Pages" + } + }, + "type": "object", + "required": [ + "items", + "total", + "page", + "size" + ], + "title": "Page[GetTranscript]" + }, + "RtcOffer": { + "properties": { + "sdp": { + "type": "string", + "title": "Sdp" + }, + "type": { + "type": "string", + "title": "Type" + } + }, + "type": "object", + "required": [ + "sdp", + "type" + ], + "title": "RtcOffer" + }, + "TranscriptTopic": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "title": { + "type": "string", + "title": "Title" + }, + "summary": { + "type": "string", + "title": "Summary" + }, + "transcript": { + "type": "string", + "title": "Transcript" + }, + "timestamp": { + "type": "number", + "title": "Timestamp" + } + }, + "type": "object", + "required": [ + "title", + "summary", + "transcript", + "timestamp" + ], + "title": "TranscriptTopic" + }, + "UpdateTranscript": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Locked" + } + }, + "type": "object", + "title": "UpdateTranscript" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + } + } + } +} \ No newline at end of file diff --git a/www/app/components/dashboard.js b/www/app/components/dashboard.js index 9c73f6f3..8c9f02f3 100644 --- a/www/app/components/dashboard.js +++ b/www/app/components/dashboard.js @@ -36,6 +36,18 @@ export function Dashboard({ } }; + const formatTime = (seconds) => { + let hours = Math.floor(seconds / 3600); + let minutes = Math.floor((seconds % 3600) / 60); + let secs = Math.floor(seconds % 60); + + let timeString = `${hours > 0 ? hours + ":" : ""}${minutes + .toString() + .padStart(2, "0")}:${secs.toString().padStart(2, "0")}`; + + return timeString; + }; + return ( <>