UNPKG

ems-editor

Version:

EMS Video Editor SDK - Universal JavaScript SDK for external video editor integration

310 lines (309 loc) 8.94 kB
/** * EMS Editor SDK - Simple and Reliable * Handles communication between external apps and iframe editor */ import type { RenderOptions, MAMUploadCallbacks, StartRenderWithMAMUploadResult, MAMUploadTracker, LoadWorkspaceOptions, LoadWorkspaceResult, WorkspaceLoadingCallbacks, QuickRenderOptions, QuickRenderResult, RenderResult } from './types'; export interface EMSEditorConfig { serverUrl: string; sessionId?: string; } export interface WebSocketMessage { type: string; payload: any; sessionId?: string; } export interface AssetInfo { id: string | number; name: string; type: 'video' | 'audio' | 'image'; fileUrl: string; proxyUrl?: string; width?: number; height?: number; duration?: number; mamAssetId?: string | number; } export interface ImportFromAssetsResult { success: boolean; templateId: string; workspaceId: string; templateName: string; tracksCount: number; elementsCount: number; timestamp: string; error?: string; } export interface GenerateTemplateOptions { name?: string; description?: string; width?: number; height?: number; fps?: number; backgroundColor?: string; layout?: 'sequential' | 'parallel' | 'custom'; assetPlacement?: 'auto' | 'manual'; customPosition?: { [assetId: string]: { startFrame: number; endFrame?: number; }; }; enableTransitions?: boolean; transitionDuration?: number; audioMixing?: 'separate' | 'mixed' | 'background'; trackNaming?: 'auto' | 'asset-based' | 'type-based'; } export declare class EMSEditor { private config; private ws; private sessionId; private connected; private ready; private eventListeners; private iframe; private templateIsDirty; constructor(config: EMSEditorConfig); private connect; private registerSession; private handleMessage; /** * Set iframe reference for the editor */ setIframe(iframe: HTMLIFrameElement): void; /** * Login to MAM system */ loginToMAM(mamConfig: any): Promise<void>; /** * Logout from MAM system */ logoutFromMAM(): Promise<void>; /** * Set theme (light or dark) */ setTheme(theme: 'light' | 'dark'): Promise<void>; /** * Update theme with preset theme ID or custom theme object */ updateTheme(themeId?: string, customTheme?: any): Promise<void>; /** * Customize theme with primary, secondary, background colors */ customizeTheme(themeConfig: { primary?: string; secondary?: string; background?: string; accent?: string; }): Promise<void>; /** * Generate color palette from base color */ private generateColorPalette; /** * Adjust color lightness */ private adjustColor; /** * Import template */ importTemplate(templateData: any): Promise<ImportFromAssetsResult>; /** * Import template from assets array - Auto-generates template with video/audio track separation */ importFromAssets(assets: AssetInfo[], options?: { name?: string; description?: string; width?: number; height?: number; fps?: number; backgroundColor?: string; }): Promise<ImportFromAssetsResult>; /** * Generate a template from assets without importing it * Returns the template object for further customization or use */ generateTemplate(assets: AssetInfo[], options?: GenerateTemplateOptions): any; /** * Generate quick template with minimal configuration * Simplified API for basic use cases */ generateQuickTemplate(assets: AssetInfo[], name?: string): any; /** * Generate template from single asset with text overlay */ generateSingleAssetTemplate(asset: AssetInfo, options?: { name?: string; overlayText?: string; textStyle?: any; duration?: number; }): any; /** * Generate tracks from assets with proper video/audio separation */ private generateTracksFromAssets; /** * Find existing track or create new one */ private findOrCreateTrack; /** * Create video element with linking */ private createVideoElement; /** * Create audio element with linking */ private createAudioElement; /** * Create audio-only element */ private createAudioOnlyElement; /** * Create image element */ private createImageElement; /** * Calculate transform for asset positioning */ private calculateTransform; /** * Generate UUID */ private generateUUID; /** * Generate element ID */ private generateElementId; /** * Start render process */ startRender(renderOptions: RenderOptions): Promise<void>; /** * Clear all workspaces/tabs in the editor */ clearWorkspaces(): Promise<void>; /** * Create a new workspace */ createWorkspace(options?: { name?: string; description?: string; width?: number; height?: number; fps?: number; duration?: number; quality?: 'low' | 'medium' | 'high'; settings?: Record<string, any>; }): Promise<{ workspaceId: string; success: boolean; }>; /** * Get list of all open workspaces in the editor */ getWorkspacesList(): Promise<any[]>; /** * Rename a workspace by its ID */ renameWorkspace(workspaceId: string, newName: string): Promise<{ success: boolean; workspaceId: string; newName: string; }>; /** * Add a template to an existing workspace */ addTemplateToWorkspace(workspaceId: string, template: any, mergeMode?: 'append' | 'replace'): Promise<{ success: boolean; workspaceId: string; templateId: string; mergeMode: string; }>; /** * Load workspace from server by workspace ID */ loadWorkspaceFromServer(options: LoadWorkspaceOptions, callbacks?: WorkspaceLoadingCallbacks): Promise<LoadWorkspaceResult>; /** * MAM Upload Event Handlers */ /** * Track MAM upload progress for a specific job */ trackMAMUpload(jobId: string, callbacks?: MAMUploadCallbacks): MAMUploadTracker; /** * Start render with MAM upload tracking */ startRenderWithMAMUpload(renderOptions: RenderOptions, mamUploadCallbacks?: MAMUploadCallbacks): Promise<StartRenderWithMAMUploadResult>; /** * Quick render current workspace with minimal options * Uses current workspace template with optional overrides */ quickRender(options?: QuickRenderOptions): Promise<QuickRenderResult>; /** * Get render job result and status by job ID */ getRenderResult(jobId: string): Promise<RenderResult>; /** * Wait for render job to complete with polling * Polls the job status until completion or failure */ waitForRenderComplete(jobId: string, options?: { onProgress?: (result: RenderResult) => void; pollInterval?: number; timeout?: number; }): Promise<RenderResult>; /** * Get user-friendly status message for render job status */ private getStatusMessage; isConnected(): boolean; isReady(): boolean; isDirty(): boolean; getSessionId(): string; on(event: string, listener: Function): void; off(event: string, listener: Function): void; once(event: string, listener: Function): void; private emit; private sendMessage; /** * Generate advanced tracks from assets with enhanced options */ private generateAdvancedTracksFromAssets; /** * Find existing track or create new advanced one */ private findOrCreateAdvancedTrack; /** * Create advanced video element */ private createAdvancedVideoElement; /** * Create advanced audio element */ private createAdvancedAudioElement; /** * Create advanced audio-only element */ private createAdvancedAudioOnlyElement; /** * Create advanced image element */ private createAdvancedImageElement; /** * Generate asset library from assets */ private generateAssetLibrary; /** * Generate transitions between assets */ private generateTransitions; /** * Generate tags based on assets */ private generateTags; /** * Disconnect and cleanup */ destroy(): void; } export type { RenderOptions, MAMUploadCallbacks, StartRenderWithMAMUploadResult, MAMUploadTracker, MAMUploadEventResult, MAMUploadCompleteResult, MAMUploadStage, LoadWorkspaceOptions, LoadWorkspaceResult, WorkspaceLoadingCallbacks, WorkspaceLoadingProgress } from './types'; export default EMSEditor;