| 1 | import { z } from 'zod' |
| 2 | import { TikTokContentPostingEvent, TikTokPublishStatus } from './tiktok.interface' |
| 3 | |
| 4 | export enum TikTokPrivacyLevel { |
| 5 | Public = 'PUBLIC_TO_EVERYONE', |
| 6 | MutualFollowFriends = 'MUTUAL_FOLLOW_FRIENDS', |
| 7 | SelfOnly = 'SELF_ONLY', |
| 8 | FollowerOfCreator = 'FOLLOWER_OF_CREATOR', |
| 9 | } |
| 10 | |
| 11 | export enum TikTokPostSource { |
| 12 | FileUpload = 'FILE_UPLOAD', |
| 13 | PullFromUrl = 'PULL_FROM_URL', |
| 14 | } |
| 15 | |
| 16 | export enum TikTokContentPath { |
| 17 | Video = 'video', |
| 18 | Photo = 'photo', |
| 19 | } |
| 20 | |
| 21 | export const TiktokOptionSchema = z.object({ |
| 22 | privacy_level: z.enum(TikTokPrivacyLevel).optional().describe('隐私级别,必须在 creator_info 返回的可选值内'), |
| 23 | disable_duet: z.boolean().optional().describe('是否禁用合拍'), |
| 24 | disable_stitch: z.boolean().optional().describe('是否禁用拼接'), |
| 25 | disable_comment: z.boolean().optional().describe('是否禁用评论'), |
| 26 | brand_organic_toggle: z.boolean().optional().describe('品牌有机内容'), |
| 27 | brand_content_toggle: z.boolean().optional().describe('品牌内容'), |
| 28 | auto_add_music: z.boolean().optional().describe('图文发布自动配乐'), |
| 29 | photo_cover_index: z.number().int().min(0).optional().describe('图文封面图片下标'), |
| 30 | source: z.enum(TikTokPostSource).optional().describe('视频上传来源,FILE_UPLOAD 由后端上传,PULL_FROM_URL 由 TikTok 拉取已验证 URL'), |
| 31 | is_aigc: z.boolean().optional().describe('视频发布是否声明为 AI 生成内容'), |
| 32 | }) |
| 33 | |
| 34 | export type TiktokOption = z.infer<typeof TiktokOptionSchema> |
| 35 | |
| 36 | export const TikTokPublishDataOptionSchema = z.object({ |
| 37 | publishId: z.string().min(1).describe('TikTok Content Posting API publish_id,仅用于发布状态关联'), |
| 38 | source: z.enum(TikTokPostSource).optional().describe('发布媒体来源'), |
| 39 | contentPath: z.enum(TikTokContentPath).describe('公开作品链接路径类型'), |
| 40 | privacyLevel: z.enum(TikTokPrivacyLevel).optional().describe('发布时实际使用的 TikTok 隐私级别'), |
| 41 | username: z.string().min(1).optional().describe('TikTok username,用于构造 canonical 作品链接'), |
| 42 | publishStatus: z.enum(TikTokPublishStatus).optional().describe('TikTok Content Posting API 官方发布状态'), |
| 43 | finalPostId: z.string().min(1).optional().describe('TikTok 最终公开作品 post_id'), |
| 44 | error: z.string().optional().describe('TikTok 发布失败原因'), |
| 45 | webhookEvent: z.enum(TikTokContentPostingEvent).optional().describe('TikTok Content Posting webhook 事件'), |
| 46 | webhookCreateTime: z.number().int().optional().describe('TikTok Content Posting webhook create_time'), |
| 47 | webhookUserOpenId: z.string().optional().describe('TikTok Content Posting webhook user_openid'), |
| 48 | }) |
| 49 | |
| 50 | export type TikTokPublishDataOption = z.infer<typeof TikTokPublishDataOptionSchema> |
| 51 |