UNPKG

n8n-nodes-wechat-publish

Version:

N8N nodes for WeChat Official Account publishing - Create drafts and publish articles to WeChat Official Account platform

240 lines (239 loc) 5.12 kB
/** * WeChat API Response Types */ export interface WeChatApiResponse<T = any> { errcode?: number; errmsg?: string; data?: T; } /** * Access Token Response */ export interface AccessTokenResponse { access_token: string; expires_in: number; } /** * Draft Article Structure */ export interface DraftArticle { article_type: 'news' | 'newspic'; title: string; author?: string; digest?: string; content: string; content_source_url?: string; thumb_media_id: string; need_open_comment?: 0 | 1; only_fans_can_comment?: 0 | 1; pic_crop_235_1?: string; pic_crop_1_1?: string; image_info?: { image_list: Array<{ image_media_id: string; }>; }; cover_info?: { crop_percent_list: Array<{ ratio: '1_1' | '16_9' | '2.35_1'; x1: string; y1: string; x2: string; y2: string; }>; }; product_info?: { footer_product_info: { product_key: string; }; }; } /** * Create Draft Request */ export interface CreateDraftRequest { articles: DraftArticle[]; } /** * Create Draft Response */ export interface CreateDraftResponse { media_id: string; } /** * Get Draft Response */ export interface GetDraftResponse { media_id: string; content: { news_item: DraftArticle[]; }; update_time: number; } /** * Publish Request */ export interface PublishRequest { media_id: string; } /** * Publish Response */ export interface PublishResponse { publish_id: string; } /** * Publish Status Response */ export interface PublishStatusResponse { publish_id: string; publish_status: 0 | 1 | 2 | 3; article_id?: string; article_url?: string; fail_idx?: number[]; } /** * Media Upload Response */ export interface MediaUploadResponse { media_id: string; url: string; } /** * WeChat API Client Configuration */ export interface WeChatApiConfig { appId: string; appSecret: string; baseUrl: string; timeout: number; } /** * Meme API Response Types */ export interface MemeItem { postLink: string; subreddit: string; title: string; url: string; nsfw: boolean; spoiler: boolean; author: string; ups: number; preview: string[]; } export interface MemeApiResponse { postLink?: string; subreddit?: string; title?: string; url?: string; nsfw?: boolean; spoiler?: boolean; author?: string; ups?: number; preview?: string[]; count?: number; memes?: MemeItem[]; } /** * Batch Upload Memes Response */ export interface BatchUploadMemesResponse { success_count: number; failed_count: number; duplicated_count: number; media_ids: string[]; failed_urls: string[]; processed_memes: Array<{ url: string; title: string; media_id?: string; error?: string; is_duplicate?: boolean; }>; } /** * WeChat Node Operations */ export type WeChatOperation = 'createDraft' | 'getDraft' | 'deleteDraft' | 'publishDraft' | 'getPublishStatus' | 'uploadMedia' | 'getMaterialList' | 'batchUploadMemes' | 'batchPublishDrafts'; /** * Material item in the list */ export interface MaterialItem { media_id: string; name?: string; update_time: number; url?: string; } /** * Get material list request */ export interface GetMaterialListRequest { type: string; offset: number; count: number; } /** * Get material list response */ export interface GetMaterialListResponse { total_count: number; item_count: number; item: MaterialItem[]; } /** * Node Operation Parameters */ export interface NodeOperationParams { operation: WeChatOperation; mediaId?: string; publishId?: string; title?: string; content?: string; author?: string; digest?: string; thumbMediaId?: string; contentSourceUrl?: string; needOpenComment?: boolean; onlyFansCanComment?: boolean; picCrop235?: string; picCrop11?: string; articleType?: 'news' | 'newspic'; imageList?: string[]; productKey?: string; materialType?: 'image' | 'video' | 'voice' | 'news'; offset?: number; count?: number; memeCount?: number; subreddit?: string; skipNsfw?: boolean; skipSpoiler?: boolean; minUps?: number; enableImageInsertion?: boolean; imageInsertionMode?: 'auto' | 'manual' | 'paragraph'; insertionImageIds?: string[]; maxImagesPerArticle?: number; imageInsertionStrategy?: 'random' | 'sequential' | 'balanced'; } /** * Image Insertion Configuration */ export interface ImageInsertionConfig { enabled: boolean; mode: 'auto' | 'manual' | 'paragraph'; imageIds: string[]; maxImages: number; strategy: 'random' | 'sequential' | 'balanced'; } /** * Content Processing Result */ export interface ContentProcessingResult { processedContent: string; insertedImages: number; imagePositions: Array<{ imageId: string; position: number; context: string; }>; }