UNPKG

stream-chat

Version:

JS SDK for the Stream Chat API

96 lines (95 loc) 4.22 kB
import type { Attachment, FileUploadConfig, GiphyData } from '../types'; export type LocalAttachment = AnyLocalAttachment | LocalUploadAttachment; export type LocalUploadAttachment = LocalFileAttachment | LocalImageAttachment | LocalAudioAttachment | LocalVideoAttachment | LocalVoiceRecordingAttachment; export type LocalVoiceRecordingAttachment<CustomLocalMetadata = Record<string, unknown>> = LocalAttachmentCast<VoiceRecordingAttachment, LocalAttachmentUploadMetadata & CustomLocalMetadata>; export type LocalAudioAttachment<CustomLocalMetadata = Record<string, unknown>> = LocalAttachmentCast<AudioAttachment, LocalAttachmentUploadMetadata & CustomLocalMetadata>; export type LocalVideoAttachment<CustomLocalMetadata = Record<string, unknown>> = LocalAttachmentCast<VideoAttachment, LocalAttachmentUploadMetadata & CustomLocalMetadata>; export type LocalImageAttachment<CustomLocalMetadata = Record<string, unknown>> = LocalAttachmentCast<ImageAttachment, LocalImageAttachmentUploadMetadata & CustomLocalMetadata>; export type LocalFileAttachment<CustomLocalMetadata = Record<string, unknown>> = LocalAttachmentCast<FileAttachment, LocalAttachmentUploadMetadata & CustomLocalMetadata>; export type AnyLocalAttachment<CustomLocalMetadata = Record<string, unknown>> = LocalAttachmentCast<Attachment, LocalAttachmentMetadata<CustomLocalMetadata>>; export type LocalAttachmentCast<A, L = Record<string, unknown>> = A & { localMetadata: L & BaseLocalAttachmentMetadata; }; export type LocalAttachmentMetadata<CustomLocalMetadata = Record<string, unknown>> = CustomLocalMetadata & BaseLocalAttachmentMetadata & LocalImageAttachmentUploadMetadata; export type UploadedAttachment = AudioAttachment | FileAttachment | ImageAttachment | VideoAttachment | VoiceRecordingAttachment; export type VoiceRecordingAttachment = Attachment & { asset_url: string; type: 'voiceRecording'; duration?: number; file_size?: number; mime_type?: string; title?: string; waveform_data?: Array<number>; }; export type FileAttachment = Attachment & { type: 'file'; asset_url?: string; file_size?: number; mime_type?: string; title?: string; }; export type AudioAttachment = Attachment & { type: 'audio'; asset_url?: string; file_size?: number; mime_type?: string; title?: string; }; export type VideoAttachment = Attachment & { type: 'video'; asset_url?: string; file_size?: number; mime_type?: string; thumb_url?: string; title?: string; }; export type ImageAttachment = Attachment & { type: 'image'; fallback?: string; image_url?: string; original_height?: number; original_width?: number; }; export type GiphyAttachment = Attachment & { type: 'giphy'; giphy?: GiphyData; title?: string; title_link?: string; thumbnail_url?: string; }; export type BaseLocalAttachmentMetadata = { id: string; }; export type LocalAttachmentUploadMetadata = { file: File | FileReference; /** * Local preview URI, typically a Blob URL from `URL.createObjectURL(file)` * or (for React Native `FileReference`) the provided `uri`. */ previewUri?: string; uploadState: AttachmentLoadingState; uploadPermissionCheck?: UploadPermissionCheckResult; /** 0–100 while uploading when progress tracking is enabled; undefined otherwise or when indeterminate */ uploadProgress?: number; }; export type LocalImageAttachmentUploadMetadata = LocalAttachmentUploadMetadata & { /** * @deprecated `previewUri` is now available on `LocalAttachmentUploadMetadata`. */ previewUri?: string; }; export type LocalNotImageAttachment = LocalFileAttachment | LocalAudioAttachment | LocalVideoAttachment | LocalVoiceRecordingAttachment; export type AttachmentLoadingState = 'uploading' | 'finished' | 'failed' | 'blocked' | 'pending'; export type UploadPermissionCheckResult = { uploadBlocked: boolean; reason?: keyof FileUploadConfig; }; export type FileLike = File | Blob; export type FileReference = Pick<File, 'name' | 'size' | 'type'> & { uri: string; height?: number; width?: number; duration?: number; waveform_data?: number[]; thumb_url?: string; };