mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 12:19:06 +00:00
## Frontend Implementation
### Meeting Selection & Management
- Created MeetingSelection component for choosing between multiple active meetings
- Shows both active meetings and upcoming calendar events (30 min ahead)
- Displays meeting metadata with privacy controls (owner-only details)
- Supports creation of unscheduled meetings alongside calendar meetings
### Waiting Room
- Added waiting page for users joining before scheduled start time
- Shows countdown timer until meeting begins
- Auto-transitions to meeting when calendar event becomes active
- Handles early joining with proper routing
### Meeting Info Panel
- Created collapsible info panel showing meeting details
- Displays calendar metadata (title, description, attendees)
- Shows participant count and duration
- Privacy-aware: sensitive info only visible to room owners
### ICS Configuration UI
- Integrated ICS settings into room configuration dialog
- Test connection functionality with immediate feedback
- Manual sync trigger with detailed results
- Shows last sync time and ETag for monitoring
- Configurable sync intervals (1 min to 1 hour)
### Routing & Navigation
- New /room/{roomName} route for meeting selection
- Waiting room at /room/{roomName}/wait?eventId={id}
- Classic room page at /{roomName} with meeting info
- Uses sessionStorage to pass selected meeting between pages
### API Integration
- Added new endpoints for active/upcoming meetings
- Regenerated TypeScript client with latest OpenAPI spec
- Proper error handling and loading states
- Auto-refresh every 30 seconds for live updates
### UI/UX Improvements
- Color-coded badges for meeting status
- Attendee status indicators (accepted/declined/tentative)
- Responsive design with Chakra UI components
- Clear visual hierarchy between active and upcoming meetings
- Smart truncation for long attendee lists
This completes the frontend implementation for calendar integration,
enabling users to seamlessly join scheduled meetings from their
calendar applications.
1938 lines
32 KiB
TypeScript
1938 lines
32 KiB
TypeScript
// This file is auto-generated by @hey-api/openapi-ts
|
|
|
|
export const $AudioWaveform = {
|
|
properties: {
|
|
data: {
|
|
items: {
|
|
type: "number",
|
|
},
|
|
type: "array",
|
|
title: "Data",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["data"],
|
|
title: "AudioWaveform",
|
|
} as const;
|
|
|
|
export const $Body_transcript_record_upload_v1_transcripts__transcript_id__record_upload_post =
|
|
{
|
|
properties: {
|
|
chunk: {
|
|
type: "string",
|
|
format: "binary",
|
|
title: "Chunk",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["chunk"],
|
|
title:
|
|
"Body_transcript_record_upload_v1_transcripts__transcript_id__record_upload_post",
|
|
} as const;
|
|
|
|
export const $CalendarEventResponse = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
room_id: {
|
|
type: "string",
|
|
title: "Room Id",
|
|
},
|
|
ics_uid: {
|
|
type: "string",
|
|
title: "Ics Uid",
|
|
},
|
|
title: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Title",
|
|
},
|
|
description: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Description",
|
|
},
|
|
start_time: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Start Time",
|
|
},
|
|
end_time: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "End Time",
|
|
},
|
|
attendees: {
|
|
anyOf: [
|
|
{
|
|
items: {
|
|
additionalProperties: true,
|
|
type: "object",
|
|
},
|
|
type: "array",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Attendees",
|
|
},
|
|
location: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Location",
|
|
},
|
|
last_synced: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Last Synced",
|
|
},
|
|
created_at: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Created At",
|
|
},
|
|
updated_at: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Updated At",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"room_id",
|
|
"ics_uid",
|
|
"start_time",
|
|
"end_time",
|
|
"last_synced",
|
|
"created_at",
|
|
"updated_at",
|
|
],
|
|
title: "CalendarEventResponse",
|
|
} as const;
|
|
|
|
export const $CreateParticipant = {
|
|
properties: {
|
|
speaker: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Speaker",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["name"],
|
|
title: "CreateParticipant",
|
|
} as const;
|
|
|
|
export const $CreateRoom = {
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
zulip_auto_post: {
|
|
type: "boolean",
|
|
title: "Zulip Auto Post",
|
|
},
|
|
zulip_stream: {
|
|
type: "string",
|
|
title: "Zulip Stream",
|
|
},
|
|
zulip_topic: {
|
|
type: "string",
|
|
title: "Zulip Topic",
|
|
},
|
|
is_locked: {
|
|
type: "boolean",
|
|
title: "Is Locked",
|
|
},
|
|
room_mode: {
|
|
type: "string",
|
|
title: "Room Mode",
|
|
},
|
|
recording_type: {
|
|
type: "string",
|
|
title: "Recording Type",
|
|
},
|
|
recording_trigger: {
|
|
type: "string",
|
|
title: "Recording Trigger",
|
|
},
|
|
is_shared: {
|
|
type: "boolean",
|
|
title: "Is Shared",
|
|
},
|
|
ics_url: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Url",
|
|
},
|
|
ics_fetch_interval: {
|
|
type: "integer",
|
|
title: "Ics Fetch Interval",
|
|
default: 300,
|
|
},
|
|
ics_enabled: {
|
|
type: "boolean",
|
|
title: "Ics Enabled",
|
|
default: false,
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"name",
|
|
"zulip_auto_post",
|
|
"zulip_stream",
|
|
"zulip_topic",
|
|
"is_locked",
|
|
"room_mode",
|
|
"recording_type",
|
|
"recording_trigger",
|
|
"is_shared",
|
|
],
|
|
title: "CreateRoom",
|
|
} as const;
|
|
|
|
export const $CreateTranscript = {
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
source_language: {
|
|
type: "string",
|
|
title: "Source Language",
|
|
default: "en",
|
|
},
|
|
target_language: {
|
|
type: "string",
|
|
title: "Target Language",
|
|
default: "en",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["name"],
|
|
title: "CreateTranscript",
|
|
} as const;
|
|
|
|
export const $DeletionStatus = {
|
|
properties: {
|
|
status: {
|
|
type: "string",
|
|
title: "Status",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["status"],
|
|
title: "DeletionStatus",
|
|
} as const;
|
|
|
|
export const $GetTranscript = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
user_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "User Id",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
status: {
|
|
type: "string",
|
|
title: "Status",
|
|
},
|
|
locked: {
|
|
type: "boolean",
|
|
title: "Locked",
|
|
},
|
|
duration: {
|
|
type: "number",
|
|
title: "Duration",
|
|
},
|
|
title: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Title",
|
|
},
|
|
short_summary: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Short Summary",
|
|
},
|
|
long_summary: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Long Summary",
|
|
},
|
|
created_at: {
|
|
type: "string",
|
|
title: "Created At",
|
|
},
|
|
share_mode: {
|
|
type: "string",
|
|
title: "Share Mode",
|
|
default: "private",
|
|
},
|
|
source_language: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Source Language",
|
|
},
|
|
target_language: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Target Language",
|
|
},
|
|
reviewed: {
|
|
type: "boolean",
|
|
title: "Reviewed",
|
|
},
|
|
meeting_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Meeting Id",
|
|
},
|
|
source_kind: {
|
|
$ref: "#/components/schemas/SourceKind",
|
|
},
|
|
room_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Id",
|
|
},
|
|
room_name: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Name",
|
|
},
|
|
audio_deleted: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Audio Deleted",
|
|
},
|
|
participants: {
|
|
anyOf: [
|
|
{
|
|
items: {
|
|
$ref: "#/components/schemas/TranscriptParticipant",
|
|
},
|
|
type: "array",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Participants",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"user_id",
|
|
"name",
|
|
"status",
|
|
"locked",
|
|
"duration",
|
|
"title",
|
|
"short_summary",
|
|
"long_summary",
|
|
"created_at",
|
|
"source_language",
|
|
"target_language",
|
|
"reviewed",
|
|
"meeting_id",
|
|
"source_kind",
|
|
"participants",
|
|
],
|
|
title: "GetTranscript",
|
|
} as const;
|
|
|
|
export const $GetTranscriptMinimal = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
user_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "User Id",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
status: {
|
|
type: "string",
|
|
title: "Status",
|
|
},
|
|
locked: {
|
|
type: "boolean",
|
|
title: "Locked",
|
|
},
|
|
duration: {
|
|
type: "number",
|
|
title: "Duration",
|
|
},
|
|
title: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Title",
|
|
},
|
|
short_summary: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Short Summary",
|
|
},
|
|
long_summary: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Long Summary",
|
|
},
|
|
created_at: {
|
|
type: "string",
|
|
title: "Created At",
|
|
},
|
|
share_mode: {
|
|
type: "string",
|
|
title: "Share Mode",
|
|
default: "private",
|
|
},
|
|
source_language: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Source Language",
|
|
},
|
|
target_language: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Target Language",
|
|
},
|
|
reviewed: {
|
|
type: "boolean",
|
|
title: "Reviewed",
|
|
},
|
|
meeting_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Meeting Id",
|
|
},
|
|
source_kind: {
|
|
$ref: "#/components/schemas/SourceKind",
|
|
},
|
|
room_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Id",
|
|
},
|
|
room_name: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Name",
|
|
},
|
|
audio_deleted: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Audio Deleted",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"user_id",
|
|
"name",
|
|
"status",
|
|
"locked",
|
|
"duration",
|
|
"title",
|
|
"short_summary",
|
|
"long_summary",
|
|
"created_at",
|
|
"source_language",
|
|
"target_language",
|
|
"reviewed",
|
|
"meeting_id",
|
|
"source_kind",
|
|
],
|
|
title: "GetTranscriptMinimal",
|
|
} as const;
|
|
|
|
export const $GetTranscriptSegmentTopic = {
|
|
properties: {
|
|
text: {
|
|
type: "string",
|
|
title: "Text",
|
|
},
|
|
start: {
|
|
type: "number",
|
|
title: "Start",
|
|
},
|
|
speaker: {
|
|
type: "integer",
|
|
title: "Speaker",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["text", "start", "speaker"],
|
|
title: "GetTranscriptSegmentTopic",
|
|
} as const;
|
|
|
|
export const $GetTranscriptTopic = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
title: {
|
|
type: "string",
|
|
title: "Title",
|
|
},
|
|
summary: {
|
|
type: "string",
|
|
title: "Summary",
|
|
},
|
|
timestamp: {
|
|
type: "number",
|
|
title: "Timestamp",
|
|
},
|
|
duration: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Duration",
|
|
},
|
|
transcript: {
|
|
type: "string",
|
|
title: "Transcript",
|
|
},
|
|
segments: {
|
|
items: {
|
|
$ref: "#/components/schemas/GetTranscriptSegmentTopic",
|
|
},
|
|
type: "array",
|
|
title: "Segments",
|
|
default: [],
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["id", "title", "summary", "timestamp", "duration", "transcript"],
|
|
title: "GetTranscriptTopic",
|
|
} as const;
|
|
|
|
export const $GetTranscriptTopicWithWords = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
title: {
|
|
type: "string",
|
|
title: "Title",
|
|
},
|
|
summary: {
|
|
type: "string",
|
|
title: "Summary",
|
|
},
|
|
timestamp: {
|
|
type: "number",
|
|
title: "Timestamp",
|
|
},
|
|
duration: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Duration",
|
|
},
|
|
transcript: {
|
|
type: "string",
|
|
title: "Transcript",
|
|
},
|
|
segments: {
|
|
items: {
|
|
$ref: "#/components/schemas/GetTranscriptSegmentTopic",
|
|
},
|
|
type: "array",
|
|
title: "Segments",
|
|
default: [],
|
|
},
|
|
words: {
|
|
items: {
|
|
$ref: "#/components/schemas/Word",
|
|
},
|
|
type: "array",
|
|
title: "Words",
|
|
default: [],
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["id", "title", "summary", "timestamp", "duration", "transcript"],
|
|
title: "GetTranscriptTopicWithWords",
|
|
} as const;
|
|
|
|
export const $GetTranscriptTopicWithWordsPerSpeaker = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
title: {
|
|
type: "string",
|
|
title: "Title",
|
|
},
|
|
summary: {
|
|
type: "string",
|
|
title: "Summary",
|
|
},
|
|
timestamp: {
|
|
type: "number",
|
|
title: "Timestamp",
|
|
},
|
|
duration: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Duration",
|
|
},
|
|
transcript: {
|
|
type: "string",
|
|
title: "Transcript",
|
|
},
|
|
segments: {
|
|
items: {
|
|
$ref: "#/components/schemas/GetTranscriptSegmentTopic",
|
|
},
|
|
type: "array",
|
|
title: "Segments",
|
|
default: [],
|
|
},
|
|
words_per_speaker: {
|
|
items: {
|
|
$ref: "#/components/schemas/SpeakerWords",
|
|
},
|
|
type: "array",
|
|
title: "Words Per Speaker",
|
|
default: [],
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["id", "title", "summary", "timestamp", "duration", "transcript"],
|
|
title: "GetTranscriptTopicWithWordsPerSpeaker",
|
|
} as const;
|
|
|
|
export const $HTTPValidationError = {
|
|
properties: {
|
|
detail: {
|
|
items: {
|
|
$ref: "#/components/schemas/ValidationError",
|
|
},
|
|
type: "array",
|
|
title: "Detail",
|
|
},
|
|
},
|
|
type: "object",
|
|
title: "HTTPValidationError",
|
|
} as const;
|
|
|
|
export const $ICSStatus = {
|
|
properties: {
|
|
status: {
|
|
type: "string",
|
|
title: "Status",
|
|
},
|
|
last_sync: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
format: "date-time",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Last Sync",
|
|
},
|
|
next_sync: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
format: "date-time",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Next Sync",
|
|
},
|
|
last_etag: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Last Etag",
|
|
},
|
|
events_count: {
|
|
type: "integer",
|
|
title: "Events Count",
|
|
default: 0,
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["status"],
|
|
title: "ICSStatus",
|
|
} as const;
|
|
|
|
export const $ICSSyncResult = {
|
|
properties: {
|
|
status: {
|
|
type: "string",
|
|
title: "Status",
|
|
},
|
|
hash: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Hash",
|
|
},
|
|
events_found: {
|
|
type: "integer",
|
|
title: "Events Found",
|
|
default: 0,
|
|
},
|
|
events_created: {
|
|
type: "integer",
|
|
title: "Events Created",
|
|
default: 0,
|
|
},
|
|
events_updated: {
|
|
type: "integer",
|
|
title: "Events Updated",
|
|
default: 0,
|
|
},
|
|
events_deleted: {
|
|
type: "integer",
|
|
title: "Events Deleted",
|
|
default: 0,
|
|
},
|
|
error: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Error",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["status"],
|
|
title: "ICSSyncResult",
|
|
} as const;
|
|
|
|
export const $Meeting = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
room_name: {
|
|
type: "string",
|
|
title: "Room Name",
|
|
},
|
|
room_url: {
|
|
type: "string",
|
|
title: "Room Url",
|
|
},
|
|
host_room_url: {
|
|
type: "string",
|
|
title: "Host Room Url",
|
|
},
|
|
start_date: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Start Date",
|
|
},
|
|
end_date: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "End Date",
|
|
},
|
|
recording_type: {
|
|
type: "string",
|
|
enum: ["none", "local", "cloud"],
|
|
title: "Recording Type",
|
|
default: "cloud",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"room_name",
|
|
"room_url",
|
|
"host_room_url",
|
|
"start_date",
|
|
"end_date",
|
|
],
|
|
title: "Meeting",
|
|
} as const;
|
|
|
|
export const $MeetingConsentRequest = {
|
|
properties: {
|
|
consent_given: {
|
|
type: "boolean",
|
|
title: "Consent Given",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["consent_given"],
|
|
title: "MeetingConsentRequest",
|
|
} as const;
|
|
|
|
export const $Page_GetTranscriptMinimal_ = {
|
|
properties: {
|
|
items: {
|
|
items: {
|
|
$ref: "#/components/schemas/GetTranscriptMinimal",
|
|
},
|
|
type: "array",
|
|
title: "Items",
|
|
},
|
|
total: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Total",
|
|
},
|
|
page: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Page",
|
|
},
|
|
size: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Size",
|
|
},
|
|
pages: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Pages",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["items", "page", "size"],
|
|
title: "Page[GetTranscriptMinimal]",
|
|
} as const;
|
|
|
|
export const $Page_Room_ = {
|
|
properties: {
|
|
items: {
|
|
items: {
|
|
$ref: "#/components/schemas/Room",
|
|
},
|
|
type: "array",
|
|
title: "Items",
|
|
},
|
|
total: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Total",
|
|
},
|
|
page: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Page",
|
|
},
|
|
size: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Size",
|
|
},
|
|
pages: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Pages",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["items", "page", "size"],
|
|
title: "Page[Room]",
|
|
} as const;
|
|
|
|
export const $Participant = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
speaker: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Speaker",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["id", "speaker", "name"],
|
|
title: "Participant",
|
|
} as const;
|
|
|
|
export const $Room = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
user_id: {
|
|
type: "string",
|
|
title: "User Id",
|
|
},
|
|
created_at: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Created At",
|
|
},
|
|
zulip_auto_post: {
|
|
type: "boolean",
|
|
title: "Zulip Auto Post",
|
|
},
|
|
zulip_stream: {
|
|
type: "string",
|
|
title: "Zulip Stream",
|
|
},
|
|
zulip_topic: {
|
|
type: "string",
|
|
title: "Zulip Topic",
|
|
},
|
|
is_locked: {
|
|
type: "boolean",
|
|
title: "Is Locked",
|
|
},
|
|
room_mode: {
|
|
type: "string",
|
|
title: "Room Mode",
|
|
},
|
|
recording_type: {
|
|
type: "string",
|
|
title: "Recording Type",
|
|
},
|
|
recording_trigger: {
|
|
type: "string",
|
|
title: "Recording Trigger",
|
|
},
|
|
is_shared: {
|
|
type: "boolean",
|
|
title: "Is Shared",
|
|
},
|
|
ics_url: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Url",
|
|
},
|
|
ics_fetch_interval: {
|
|
type: "integer",
|
|
title: "Ics Fetch Interval",
|
|
default: 300,
|
|
},
|
|
ics_enabled: {
|
|
type: "boolean",
|
|
title: "Ics Enabled",
|
|
default: false,
|
|
},
|
|
ics_last_sync: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
format: "date-time",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Last Sync",
|
|
},
|
|
ics_last_etag: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Last Etag",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"name",
|
|
"user_id",
|
|
"created_at",
|
|
"zulip_auto_post",
|
|
"zulip_stream",
|
|
"zulip_topic",
|
|
"is_locked",
|
|
"room_mode",
|
|
"recording_type",
|
|
"recording_trigger",
|
|
"is_shared",
|
|
],
|
|
title: "Room",
|
|
} as const;
|
|
|
|
export const $RtcOffer = {
|
|
properties: {
|
|
sdp: {
|
|
type: "string",
|
|
title: "Sdp",
|
|
},
|
|
type: {
|
|
type: "string",
|
|
title: "Type",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["sdp", "type"],
|
|
title: "RtcOffer",
|
|
} as const;
|
|
|
|
export const $SearchResponse = {
|
|
properties: {
|
|
results: {
|
|
items: {
|
|
$ref: "#/components/schemas/SearchResult",
|
|
},
|
|
type: "array",
|
|
title: "Results",
|
|
},
|
|
total: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
title: "Total",
|
|
description: "Total number of search results",
|
|
},
|
|
query: {
|
|
type: "string",
|
|
minLength: 1,
|
|
title: "Query",
|
|
description: "Search query text",
|
|
},
|
|
limit: {
|
|
type: "integer",
|
|
maximum: 100,
|
|
minimum: 1,
|
|
title: "Limit",
|
|
description: "Results per page",
|
|
},
|
|
offset: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
title: "Offset",
|
|
description: "Number of results to skip",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["results", "total", "query", "limit", "offset"],
|
|
title: "SearchResponse",
|
|
} as const;
|
|
|
|
export const $SearchResult = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
minLength: 1,
|
|
title: "Id",
|
|
},
|
|
title: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Title",
|
|
},
|
|
user_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "User Id",
|
|
},
|
|
room_id: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Id",
|
|
},
|
|
created_at: {
|
|
type: "string",
|
|
title: "Created At",
|
|
},
|
|
status: {
|
|
type: "string",
|
|
minLength: 1,
|
|
title: "Status",
|
|
},
|
|
rank: {
|
|
type: "number",
|
|
maximum: 1,
|
|
minimum: 0,
|
|
title: "Rank",
|
|
},
|
|
duration: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Duration",
|
|
description: "Duration in seconds",
|
|
},
|
|
search_snippets: {
|
|
items: {
|
|
type: "string",
|
|
},
|
|
type: "array",
|
|
title: "Search Snippets",
|
|
description: "Text snippets around search matches",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"created_at",
|
|
"status",
|
|
"rank",
|
|
"duration",
|
|
"search_snippets",
|
|
],
|
|
title: "SearchResult",
|
|
description: "Public search result model with computed fields.",
|
|
} as const;
|
|
|
|
export const $SourceKind = {
|
|
type: "string",
|
|
enum: ["room", "live", "file"],
|
|
title: "SourceKind",
|
|
} as const;
|
|
|
|
export const $SpeakerAssignment = {
|
|
properties: {
|
|
speaker: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Speaker",
|
|
},
|
|
participant: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Participant",
|
|
},
|
|
timestamp_from: {
|
|
type: "number",
|
|
title: "Timestamp From",
|
|
},
|
|
timestamp_to: {
|
|
type: "number",
|
|
title: "Timestamp To",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["timestamp_from", "timestamp_to"],
|
|
title: "SpeakerAssignment",
|
|
} as const;
|
|
|
|
export const $SpeakerAssignmentStatus = {
|
|
properties: {
|
|
status: {
|
|
type: "string",
|
|
title: "Status",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["status"],
|
|
title: "SpeakerAssignmentStatus",
|
|
} as const;
|
|
|
|
export const $SpeakerMerge = {
|
|
properties: {
|
|
speaker_from: {
|
|
type: "integer",
|
|
title: "Speaker From",
|
|
},
|
|
speaker_to: {
|
|
type: "integer",
|
|
title: "Speaker To",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["speaker_from", "speaker_to"],
|
|
title: "SpeakerMerge",
|
|
} as const;
|
|
|
|
export const $SpeakerWords = {
|
|
properties: {
|
|
speaker: {
|
|
type: "integer",
|
|
title: "Speaker",
|
|
},
|
|
words: {
|
|
items: {
|
|
$ref: "#/components/schemas/Word",
|
|
},
|
|
type: "array",
|
|
title: "Words",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["speaker", "words"],
|
|
title: "SpeakerWords",
|
|
} as const;
|
|
|
|
export const $Stream = {
|
|
properties: {
|
|
stream_id: {
|
|
type: "integer",
|
|
title: "Stream Id",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["stream_id", "name"],
|
|
title: "Stream",
|
|
} as const;
|
|
|
|
export const $Topic = {
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["name"],
|
|
title: "Topic",
|
|
} as const;
|
|
|
|
export const $TranscriptParticipant = {
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
speaker: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Speaker",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
title: "Name",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["speaker", "name"],
|
|
title: "TranscriptParticipant",
|
|
} as const;
|
|
|
|
export const $UpdateParticipant = {
|
|
properties: {
|
|
speaker: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Speaker",
|
|
},
|
|
name: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Name",
|
|
},
|
|
},
|
|
type: "object",
|
|
title: "UpdateParticipant",
|
|
} as const;
|
|
|
|
export const $UpdateRoom = {
|
|
properties: {
|
|
name: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Name",
|
|
},
|
|
zulip_auto_post: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Zulip Auto Post",
|
|
},
|
|
zulip_stream: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Zulip Stream",
|
|
},
|
|
zulip_topic: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Zulip Topic",
|
|
},
|
|
is_locked: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Is Locked",
|
|
},
|
|
room_mode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Mode",
|
|
},
|
|
recording_type: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Recording Type",
|
|
},
|
|
recording_trigger: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Recording Trigger",
|
|
},
|
|
is_shared: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Is Shared",
|
|
},
|
|
ics_url: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Url",
|
|
},
|
|
ics_fetch_interval: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Fetch Interval",
|
|
},
|
|
ics_enabled: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Ics Enabled",
|
|
},
|
|
},
|
|
type: "object",
|
|
title: "UpdateRoom",
|
|
} as const;
|
|
|
|
export const $UpdateTranscript = {
|
|
properties: {
|
|
name: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Name",
|
|
},
|
|
locked: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Locked",
|
|
},
|
|
title: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Title",
|
|
},
|
|
short_summary: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Short Summary",
|
|
},
|
|
long_summary: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Long Summary",
|
|
},
|
|
share_mode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["public", "semi-private", "private"],
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Share Mode",
|
|
},
|
|
participants: {
|
|
anyOf: [
|
|
{
|
|
items: {
|
|
$ref: "#/components/schemas/TranscriptParticipant",
|
|
},
|
|
type: "array",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Participants",
|
|
},
|
|
reviewed: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Reviewed",
|
|
},
|
|
audio_deleted: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Audio Deleted",
|
|
},
|
|
},
|
|
type: "object",
|
|
title: "UpdateTranscript",
|
|
} as const;
|
|
|
|
export const $UserInfo = {
|
|
properties: {
|
|
sub: {
|
|
type: "string",
|
|
title: "Sub",
|
|
},
|
|
email: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Email",
|
|
},
|
|
email_verified: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Email Verified",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["sub", "email", "email_verified"],
|
|
title: "UserInfo",
|
|
} as const;
|
|
|
|
export const $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",
|
|
} as const;
|
|
|
|
export const $WherebyWebhookEvent = {
|
|
properties: {
|
|
apiVersion: {
|
|
type: "string",
|
|
title: "Apiversion",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
title: "Id",
|
|
},
|
|
createdAt: {
|
|
type: "string",
|
|
format: "date-time",
|
|
title: "Createdat",
|
|
},
|
|
type: {
|
|
type: "string",
|
|
title: "Type",
|
|
},
|
|
data: {
|
|
additionalProperties: true,
|
|
type: "object",
|
|
title: "Data",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["apiVersion", "id", "createdAt", "type", "data"],
|
|
title: "WherebyWebhookEvent",
|
|
} as const;
|
|
|
|
export const $Word = {
|
|
properties: {
|
|
text: {
|
|
type: "string",
|
|
title: "Text",
|
|
},
|
|
start: {
|
|
type: "number",
|
|
minimum: 0,
|
|
title: "Start",
|
|
description: "Time in seconds with float part",
|
|
},
|
|
end: {
|
|
type: "number",
|
|
minimum: 0,
|
|
title: "End",
|
|
description: "Time in seconds with float part",
|
|
},
|
|
speaker: {
|
|
type: "integer",
|
|
title: "Speaker",
|
|
default: 0,
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["text", "start", "end"],
|
|
title: "Word",
|
|
} as const;
|