Files
reflector/www/app/api/schemas.gen.ts
Mathieu Virbel 311d453e41 feat: implement frontend for calendar integration (Phase 3 & 4)
## 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.
2025-08-18 19:29:56 -06:00

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;