mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
* feat(rooms): add webhook notifications for transcript completion
- Add webhook_url and webhook_secret fields to rooms table
- Create Celery task with 24-hour retry window using exponential backoff
- Send transcript metadata, diarized text, topics, and summaries via webhook
- Add HMAC signature verification for webhook security
- Add test endpoint POST /v1/rooms/{room_id}/webhook/test
- Update frontend with webhook configuration UI and test button
- Auto-generate webhook secret if not provided
- Trigger webhook after successful file pipeline processing for room recordings
* style: linting
* fix: remove unwanted files
* fix: update openapi gen
* fix: self-review
* docs: add comprehensive webhook documentation
- Document webhook configuration, events, and payloads
- Include transcript.completed and test event examples
- Add security considerations and best practices
- Provide example webhook receiver implementation
- Document retry policy and signature verification
* fix: remove audio_mp3_url from webhook payload
- Remove audio download URL generation from webhook
- Update documentation to reflect the change
- Keep only frontend_url for accessing transcripts
* docs: remove unwanted section
* fix: correct API method name and type imports for rooms
- Fix v1RoomsRetrieve to v1RoomsGet
- Update Room type to RoomDetails throughout frontend
- Fix type imports in useRoomList, RoomList, RoomTable, and RoomCards
* feat: add show/hide toggle for webhook secret field
- Add eye icon button to reveal/hide webhook secret when editing
- Show password dots when webhook secret is hidden
- Reset visibility state when opening/closing dialog
- Only show toggle button when editing existing room with secret
* fix: resolve event loop conflict in webhook test endpoint
- Extract webhook test logic into shared async function
- Call async function directly from FastAPI endpoint
- Keep Celery task wrapper for background processing
- Fixes RuntimeError: event loop already running
* refactor: remove unnecessary Celery task for webhook testing
- Webhook testing is synchronous and provides immediate feedback
- No need for background processing via Celery
- Keep only the async function called directly from API endpoint
* feat: improve webhook test error messages and display
- Show HTTP status code in error messages
- Parse JSON error responses to extract meaningful messages
- Improved UI layout for webhook test results
- Added colored background for success/error states
- Better text wrapping for long error messages
* docs: adjust doc
* fix: review
* fix: update attempts to match close 24h
* fix: add event_id
* fix: changed to uuid, to have new event_id when reprocess.
* style: linting
* fix: alembic revision
1746 lines
30 KiB
TypeScript
1746 lines
30 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 $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",
|
|
},
|
|
webhook_url: {
|
|
type: "string",
|
|
title: "Webhook Url",
|
|
},
|
|
webhook_secret: {
|
|
type: "string",
|
|
title: "Webhook Secret",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"name",
|
|
"zulip_auto_post",
|
|
"zulip_stream",
|
|
"zulip_topic",
|
|
"is_locked",
|
|
"room_mode",
|
|
"recording_type",
|
|
"recording_trigger",
|
|
"is_shared",
|
|
"webhook_url",
|
|
"webhook_secret",
|
|
],
|
|
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 $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_RoomDetails_ = {
|
|
properties: {
|
|
items: {
|
|
items: {
|
|
$ref: "#/components/schemas/RoomDetails",
|
|
},
|
|
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[RoomDetails]",
|
|
} 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",
|
|
},
|
|
},
|
|
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 $RoomDetails = {
|
|
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",
|
|
},
|
|
webhook_url: {
|
|
type: "string",
|
|
title: "Webhook Url",
|
|
},
|
|
webhook_secret: {
|
|
type: "string",
|
|
title: "Webhook Secret",
|
|
},
|
|
},
|
|
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",
|
|
"webhook_url",
|
|
"webhook_secret",
|
|
],
|
|
title: "RoomDetails",
|
|
} 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: 0,
|
|
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",
|
|
},
|
|
room_name: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Room Name",
|
|
},
|
|
source_kind: {
|
|
$ref: "#/components/schemas/SourceKind",
|
|
},
|
|
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",
|
|
},
|
|
total_match_count: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
title: "Total Match Count",
|
|
description: "Total number of matches found in the transcript",
|
|
default: 0,
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"id",
|
|
"source_kind",
|
|
"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: {
|
|
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",
|
|
},
|
|
webhook_url: {
|
|
type: "string",
|
|
title: "Webhook Url",
|
|
},
|
|
webhook_secret: {
|
|
type: "string",
|
|
title: "Webhook Secret",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: [
|
|
"name",
|
|
"zulip_auto_post",
|
|
"zulip_stream",
|
|
"zulip_topic",
|
|
"is_locked",
|
|
"room_mode",
|
|
"recording_type",
|
|
"recording_trigger",
|
|
"is_shared",
|
|
"webhook_url",
|
|
"webhook_secret",
|
|
],
|
|
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 $WebhookTestResult = {
|
|
properties: {
|
|
success: {
|
|
type: "boolean",
|
|
title: "Success",
|
|
},
|
|
message: {
|
|
type: "string",
|
|
title: "Message",
|
|
default: "",
|
|
},
|
|
error: {
|
|
type: "string",
|
|
title: "Error",
|
|
default: "",
|
|
},
|
|
status_code: {
|
|
anyOf: [
|
|
{
|
|
type: "integer",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Status Code",
|
|
},
|
|
response_preview: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
title: "Response Preview",
|
|
},
|
|
},
|
|
type: "object",
|
|
required: ["success"],
|
|
title: "WebhookTestResult",
|
|
} 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;
|