@amityco/ts-sdk
Version:
Amity Social Cloud Typescript SDK
90 lines (76 loc) • 2.12 kB
text/typescript
export const ContentFeedType = Object.freeze({
STORY: 'story',
CLIP: 'clip',
CHAT: 'chat',
POST: 'post',
MESSAGE: 'message',
});
declare global {
namespace Amity {
type ContentType = 'text' | 'image' | 'file' | 'video' | 'poll' | 'json' | string;
type ContentFeedType = ValueOf<typeof ContentFeedType>;
type ContentDataText = {
text: string;
};
type ContentDataFile = {
fileId: Amity.File<'file'>['fileId'];
};
type ContentDataImage = {
fileId: Amity.File<'image'>['fileId'];
caption?: string;
};
type Attachment = {
type: 'image' | 'link';
url?: string;
fileId?: Amity.File<'image'>['fileId'];
};
type ContentDataVideo = {
thumbnailFileId: Amity.File<'image'>['fileId'];
videoFileId: {
[K in Amity.VideoSize]?: Amity.File<'video'>['fileId'];
};
};
type ContentDataPoll = {
pollId: Amity.Poll['pollId'];
};
type ContentData<T extends ContentType> = T extends 'text'
? ContentDataText
: T extends 'file'
? ContentDataFile
: T extends 'image'
? ContentDataImage
: T extends 'video'
? ContentDataVideo
: T extends 'poll'
? ContentDataPoll
: T extends 'json'
? Record<string, unknown>
: T extends string
? string | Record<string, unknown> // custom type
: never;
type Content<T extends ContentType> = {
// dataType still retained to maintain backward compatibility
dataType?: T;
dataTypes?: T[];
data?: ContentData<T>;
};
type ContentSettingText = {
contentType: 'text';
allowed: boolean;
};
type ContentSettingVideo = {
contentType: 'video';
allowed: boolean;
maxDurationSeconds: number;
transcodeConfig: {
maxResolution: Amity.VideoResolution;
minResolution: Amity.VideoResolution;
};
};
type ContentSetting<T extends ContentType = 'text' | 'video'> = T extends 'text'
? ContentSettingText
: T extends 'video'
? ContentSettingVideo
: never;
}
}