59 lines
1.1 KiB
TypeScript
59 lines
1.1 KiB
TypeScript
import { S3MediaData } from '@waha/structures/media.s3.dto';
|
|
|
|
/**
|
|
* Handles saving data to the physical storage
|
|
*/
|
|
interface Message {
|
|
// false_111111111@c.us_AAAAAAAAAAAAAA
|
|
id: string;
|
|
|
|
// 1111111@c.us
|
|
chatId: string;
|
|
}
|
|
|
|
interface File {
|
|
extension: string;
|
|
filename?: string;
|
|
}
|
|
|
|
export interface MediaData {
|
|
session: string;
|
|
message: Message;
|
|
file: File;
|
|
}
|
|
|
|
/**
|
|
* For stored media data
|
|
*/
|
|
export interface MediaStorageData {
|
|
url: string;
|
|
s3?: S3MediaData;
|
|
}
|
|
|
|
abstract class IMediaStorage {
|
|
abstract init(): Promise<void>;
|
|
|
|
abstract save(buffer: Buffer, data: MediaData): Promise<boolean>;
|
|
|
|
abstract exists(data: MediaData): Promise<boolean>;
|
|
|
|
abstract getStorageData(data: MediaData): Promise<MediaStorageData>;
|
|
|
|
abstract purge(): Promise<void>;
|
|
|
|
abstract close(): Promise<void>;
|
|
}
|
|
|
|
export function getMetadata(data: MediaData): any {
|
|
const now = new Date();
|
|
return {
|
|
'waha-session': data.session,
|
|
'waha-chat-id': data.message.chatId,
|
|
'waha-message-id': data.message.id,
|
|
'waha-media-filename': data.file.filename,
|
|
'waha-created-at': now.getTime(),
|
|
};
|
|
}
|
|
|
|
export { IMediaStorage };
|