Spaces:
Runtime error
Runtime error
| import { BadRequestException } from '@nestjs/common'; | |
| import { ApiProperty } from '@nestjs/swagger'; | |
| import { BooleanString } from '@waha/nestjs/validation/BooleanString'; | |
| import { WAMessageAck, WAMessageAckName } from '@waha/structures/enums.dto'; | |
| import { | |
| LimitOffsetParams, | |
| PaginationParams, | |
| } from '@waha/structures/pagination.dto'; | |
| import { ChatIdProperty } from '@waha/structures/properties.dto'; | |
| import { SessionConfig } from '@waha/structures/sessions.dto'; | |
| import { Transform, Type } from 'class-transformer'; | |
| import { | |
| IsArray, | |
| IsBoolean, | |
| IsEnum, | |
| IsNumber, | |
| IsOptional, | |
| IsString, | |
| ValidateNested, | |
| } from 'class-validator'; | |
| /** | |
| * Queries | |
| */ | |
| export class GetChatMessagesFilter { | |
| ({ | |
| required: false, | |
| description: 'Filter messages before this timestamp (inclusive)', | |
| }) | |
| () | |
| () | |
| (() => Number) | |
| 'filter.timestamp.lte'?: number; | |
| ({ | |
| required: false, | |
| description: 'Filter messages after this timestamp (inclusive)', | |
| }) | |
| () | |
| () | |
| (() => Number) | |
| 'filter.timestamp.gte'?: number; | |
| ({ | |
| required: false, | |
| description: 'From me filter (by default shows all messages)', | |
| }) | |
| (BooleanString) | |
| () | |
| () | |
| 'filter.fromMe'?: boolean; | |
| ({ | |
| required: false, | |
| description: 'Filter messages by acknowledgment status', | |
| enum: WAMessageAckName, | |
| }) | |
| (WAMessageAckName) | |
| () | |
| 'filter.ack'?: WAMessageAck; | |
| } | |
| export function transformAck( | |
| filter: GetChatMessagesFilter, | |
| ): GetChatMessagesFilter { | |
| if (!filter) return filter; | |
| if (!filter['filter.ack']) return filter; | |
| const ackName = filter['filter.ack']; | |
| // @ts-ignore | |
| const ack: WAMessageAck = WAMessageAck[ackName]; | |
| if (ack == null) { | |
| throw new BadRequestException(`Invalid ack: '${ackName}'`); | |
| } | |
| filter['filter.ack'] = ack; | |
| return filter; | |
| } | |
| export class ChatPictureQuery { | |
| (BooleanString) | |
| () | |
| () | |
| ({ | |
| example: false, | |
| required: false, | |
| description: | |
| 'Refresh the picture from the server (24h cache by default). Do not refresh if not needed, you can get rate limit error', | |
| }) | |
| refresh?: boolean = false; | |
| } | |
| export class ChatPictureResponse { | |
| url: string; | |
| } | |
| export class GetChatMessagesQuery { | |
| () | |
| () | |
| (() => Number) | |
| limit: number = 10; | |
| () | |
| () | |
| (() => Number) | |
| offset?: number; | |
| ({ | |
| example: false, | |
| required: false, | |
| description: 'Download media for messages', | |
| }) | |
| (BooleanString) | |
| () | |
| () | |
| downloadMedia: boolean = true; | |
| } | |
| export class ReadChatMessagesQuery { | |
| ({ | |
| example: 30, | |
| required: false, | |
| description: 'How much messages to read (latest first)', | |
| }) | |
| (() => Number) | |
| () | |
| () | |
| messages: number; | |
| ({ | |
| required: false, | |
| description: 'How much days to read (latest first)', | |
| }) | |
| (() => Number) | |
| () | |
| () | |
| days: number = 7; | |
| } | |
| export class ReadChatMessagesResponse { | |
| ({ | |
| required: false, | |
| description: 'Messages IDs that have been read', | |
| }) | |
| ids?: string[]; | |
| } | |
| export class GetChatMessageQuery { | |
| ({ | |
| example: true, | |
| required: false, | |
| description: 'Download media for messages', | |
| }) | |
| (BooleanString) | |
| () | |
| () | |
| downloadMedia: boolean = true; | |
| } | |
| export enum ChatSortField { | |
| CONVERSATION_TIMESTAMP = 'conversationTimestamp', | |
| ID = 'id', | |
| NAME = 'name', | |
| } | |
| export class ChatsPaginationParams extends PaginationParams { | |
| ({ | |
| description: 'Sort by field', | |
| enum: ChatSortField, | |
| }) | |
| () | |
| (ChatSortField) | |
| sortBy?: string; | |
| } | |
| export enum PinDuration { | |
| DAY = 86400, | |
| WEEK = 604800, | |
| MONTH = 2592000, | |
| } | |
| export class PinMessageRequest { | |
| () | |
| (PinDuration) | |
| ({ | |
| description: | |
| 'Duration in seconds. 24 hours (86400), 7 days (604800), 30 days (2592000)', | |
| example: 86400, | |
| }) | |
| duration: number; | |
| } | |
| export class OverviewPaginationParams extends LimitOffsetParams { | |
| () | |
| () | |
| (() => Number) | |
| limit?: number = 20; | |
| } | |
| export class OverviewFilter { | |
| () | |
| () | |
| ({ each: true }) | |
| (({ value }) => (Array.isArray(value) ? value : [value])) | |
| ({ | |
| description: 'Filter by chat ids', | |
| required: false, | |
| example: ['111111111@c.us'], | |
| }) | |
| ids?: string[]; | |
| } | |
| export class OverviewBodyRequest { | |
| () | |
| (() => OverviewPaginationParams) | |
| pagination: OverviewPaginationParams; | |
| () | |
| (() => OverviewFilter) | |
| filter: OverviewFilter; | |
| } | |
| export class ChatSummary { | |
| id: string; | |
| name: string | null; | |
| picture: string | null; | |
| lastMessage: any; | |
| _chat: any; | |
| } | |
| /** | |
| * Events | |
| */ | |
| export class ChatArchiveEvent { | |
| () | |
| id: string; | |
| archived: boolean; | |
| timestamp: number; | |
| } | |