stream-chat
Version:
JS SDK for the Stream Chat API
79 lines (78 loc) • 3.62 kB
TypeScript
import type { Attachment, FileUploadConfig } 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 BaseLocalAttachmentMetadata = {
id: string;
};
export type LocalAttachmentUploadMetadata = {
file: File | FileReference;
uploadState: AttachmentLoadingState;
uploadPermissionCheck?: UploadPermissionCheckResult;
};
export type LocalImageAttachmentUploadMetadata = 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;
};