import { Type, Static, TSchema } from '@sinclair/typebox' export type RequestHeaders = Static export const RequestHeaders = Type.Record(Type.String(), Type.Any()) export type SharedSummarizeOpts = Static>> export const SharedSummarizeOpts = (T: T) => Type.Object({ extraOpts: Type.Optional(T), headers: Type.Optional(RequestHeaders) }) export type SharedSummarizeExtraOpts = Static export const SharedSummarizeExtraOpts = Type.Object({ bypassCache: Type.Optional(Type.Boolean()), sessionId: Type.Optional(Type.String()) }) export enum EnumSummarizeStatus { UNKNOWN, GENERATING, SUCCESS, FAILED, NOT_FOUND_IN_CACHE } export type SummarizeStatus = Static export const SummarizeStatus = Type.Enum(EnumSummarizeStatus) export type SummarizeType = Static export const SummarizeType = Type.Union([ Type.Literal("article"), Type.Literal("text"), Type.Literal("file"), Type.Literal("video") ]) export type MinimalSummarizeResponse = Static>> export const MinimalSummarizeResponse = (T: T) => Type.Object({ pollIntervalMs: Type.Number(), sessionId: Type.String(), statusCode: SummarizeStatus, title: Type.String(), type: T }) export type SummarizeResponse = Static>> export const SummarizeResponse = (T: T) => Type.Intersect([ MinimalSummarizeResponse(T), Type.Object({ chapters: Type.Array(SummarizeChapter(SummarizeThesisWithLink)), haveChapters: Type.Boolean(), normalizedUrl: Type.String(), sharingUrl: Type.String(), summaryAgeSeconds: Type.Number(), thesis: Type.Array(SummarizeThesis) }) ]) export type SummarizeThesis = Static export const SummarizeThesis = Type.Object({ id: Type.Number(), content: Type.String() }) export type SummarizeThesisWithLink = Static export const SummarizeThesisWithLink = Type.Intersect([ SummarizeThesis, Type.Object({ link: Type.String() }) ]) export type SummarizeThesisWithTime = Static export const SummarizeThesisWithTime = Type.Intersect([ SummarizeThesis, Type.Object({ startTime: Type.Number() }) ]) export type SummarizeChapter = Static>> export const SummarizeChapter = (T: T) => Type.Object({ id: Type.Number(), content: Type.String(), theses: Type.Array(T) }) export type VideoSummarizeChapter = Static export const VideoSummarizeChapter = Type.Intersect([ SummarizeChapter(SummarizeThesis), Type.Object({ startTime: Type.Number() }) ]) export type VideoSummarizeExtraOpts = Static export const VideoSummarizeExtraOpts = Type.Intersect([ SharedSummarizeExtraOpts, Type.Object({ videoTitle: Type.Optional(Type.String()) }) ]) export type VideoSummarizeOpts = Static export const VideoSummarizeOpts = Type.Intersect([ SharedSummarizeOpts(VideoSummarizeExtraOpts), Type.Object({ url: Type.String(), language: Type.String() }) ]) export type VideoSummarizeResponse = Static export const VideoSummarizeResponse = Type.Intersect([ MinimalSummarizeResponse(Type.Literal("video")), Type.Object({ chapters: Type.Array(VideoSummarizeChapter), unknown0: Type.Optional(Type.String()), haveChapters: Type.Literal(true), thesis: Type.Array(SummarizeThesisWithTime) }) ]) export type ArticleSummarizeExtraOpts = Static export const ArticleSummarizeExtraOpts = SharedSummarizeExtraOpts export type ArticleSummarizeOpts = Static export const ArticleSummarizeOpts = Type.Intersect([ SharedSummarizeOpts(ArticleSummarizeExtraOpts), Type.Object({ url: Type.String() }) ]) export type ArticleSummarizeResponse = Static export const ArticleSummarizeResponse = SummarizeResponse(Type.Literal("article")) export type TextSummarizeExtraOpts = Static export const TextSummarizeExtraOpts = SharedSummarizeExtraOpts export type TextSummarizeOpts = Static export const TextSummarizeOpts = Type.Intersect([ SharedSummarizeOpts(ArticleSummarizeExtraOpts), Type.Object({ text: Type.String() }) ]) export type TextSummarizeResponse = Static export const TextSummarizeResponse = SummarizeResponse(Type.Literal("text")) export type GetSharingContentOpts = Static export const GetSharingContentOpts = Type.Object({ token: Type.String(), headers: Type.Optional(RequestHeaders) }) export type SharingVideoSummarizeResponse = Static export const SharingVideoSummarizeResponse = Type.Intersect([ MinimalSummarizeResponse(Type.Literal("video")), Type.Object({ contentId: Type.String(), keypoints: Type.Array(VideoSummarizeChapter), normalizedUrl: Type.String(), sharingUrl: Type.String(), summaryAgeSeconds: Type.Number() }) ])