wa-api-v2 / src /structures /webhooks.dto.ts
baagas0's picture
init
b62a170
import { ApiProperty } from '@nestjs/swagger';
import { MessageDestination } from './chatting.dto';
import {
WAHAEngine,
WAHAEvents,
WAHASessionStatus,
WAMessageAck,
} from './enums.dto';
import { WAHAEnvironment } from './environment.dto';
import { WAHAChatPresences } from './presence.dto';
import { ChatIdProperty, MessageIdProperty } from './properties.dto';
import { WAMessage, WAMessageReaction } from './responses.dto';
import { MeInfo } from './sessions.dto';
export class WAMessageAckBody {
@MessageIdProperty()
id: string;
@ChatIdProperty()
from: string;
@ChatIdProperty()
to: string;
@ChatIdProperty()
participant: string;
fromMe: boolean;
ack: WAMessageAck;
ackName: string;
}
export class WAGroupPayload {
@ApiProperty({
description: 'ID that represents the groupNotification',
})
id: any;
@ApiProperty({
description: 'Unix timestamp for when the groupNotification was created',
})
timestamp: number;
@ChatIdProperty({
description: 'ID for the Chat that this groupNotification was sent for',
})
chatId: string;
@ApiProperty({
description: 'ContactId for the user that produced the GroupNotification',
})
author: string;
@ApiProperty({
description: 'Extra content',
})
body: string;
@ApiProperty({
description:
'Contact IDs for the users that were affected by this GroupNotification',
})
recipientIds: string[];
}
export class PollVote extends MessageDestination {
@ApiProperty({
description: 'Option that user has selected',
example: ['Awesome!'],
})
selectedOptions: string[];
@ApiProperty({
description: 'Timestamp, ms',
example: 1692861369,
})
timestamp: number;
}
export class PollVotePayload {
vote: PollVote;
poll: MessageDestination;
}
export class WAMessageRevokedBody {
after?: WAMessage;
before?: WAMessage;
}
export class WASessionStatusBody {
@ApiProperty({
example: 'default',
})
name: string;
status: WAHASessionStatus;
}
export class WAHAWebhook {
@ApiProperty({
example: 'default',
})
session: string;
@ApiProperty({
example: WAHAEngine.WEBJS,
})
engine: WAHAEngine;
me?: MeInfo;
environment: WAHAEnvironment;
event: WAHAEvents;
payload:
| WAGroupPayload
// eslint-disable-next-line @typescript-eslint/ban-types
| object;
}
class WAHAWebhookSessionStatus extends WAHAWebhook {
@ApiProperty({
description: 'The event is triggered when the session status changes.',
})
event = WAHAEvents.SESSION_STATUS;
payload: WASessionStatusBody;
}
class WAHAWebhookMessage extends WAHAWebhook {
@ApiProperty({ description: 'Incoming message.' })
event = WAHAEvents.MESSAGE;
payload: WAMessage;
}
class WAHAWebhookMessageReaction extends WAHAWebhook {
@ApiProperty({
description:
'The event is triggered when a user reacts or removes a reaction.',
})
event = WAHAEvents.MESSAGE_REACTION;
payload: WAMessageReaction;
}
class WAHAWebhookMessageAny extends WAHAWebhook {
@ApiProperty({
description: 'Fired on all message creations, including your own.',
})
event = WAHAEvents.MESSAGE_ANY;
payload: WAMessage;
}
class WAHAWebhookMessageAck extends WAHAWebhook {
@ApiProperty({
description:
'Receive events when server or recipient gets the message, read or played it.',
})
event = WAHAEvents.MESSAGE_ACK;
payload: WAMessageAckBody;
}
class WAHAWebhookMessageRevoked extends WAHAWebhook {
@ApiProperty({
description:
'The event is triggered when a user, whether it be you or any other participant, ' +
'revokes a previously sent message.',
})
event = WAHAEvents.MESSAGE_REVOKED;
payload: WAMessageRevokedBody;
}
class WAHAWebhookStateChange extends WAHAWebhook {
@ApiProperty({
description: 'It’s an internal engine’s state, not session status.',
})
event = WAHAEvents.STATE_CHANGE;
payload: any;
}
class WAHAWebhookGroupJoin extends WAHAWebhook {
@ApiProperty({
description: 'Some one join a group.',
})
event = WAHAEvents.GROUP_JOIN;
payload: any;
}
class WAHAWebhookGroupLeave extends WAHAWebhook {
@ApiProperty({
description: 'Some one left a group.',
})
event = WAHAEvents.GROUP_LEAVE;
payload: any;
}
class WAHAWebhookPresenceUpdate extends WAHAWebhook {
@ApiProperty({
description: 'The most recent presence information for a chat.',
})
event = WAHAEvents.PRESENCE_UPDATE;
payload: WAHAChatPresences;
}
class WAHAWebhookPollVote extends WAHAWebhook {
@ApiProperty({
description: 'With this event, you receive new votes for the poll sent.',
})
event = WAHAEvents.POLL_VOTE;
payload: PollVotePayload;
}
class WAHAWebhookPollVoteFailed extends WAHAWebhook {
@ApiProperty({
description:
'There may be cases when WAHA fails to decrypt a vote from the user. ' +
'Read more about how to handle such events: https://waha.devlike.pro/docs/how-to/polls/#pollvotefailed',
})
event = WAHAEvents.POLL_VOTE_FAILED;
payload: PollVotePayload;
}
const WAHA_WEBHOOKS = [
WAHAWebhookSessionStatus,
WAHAWebhookMessage,
WAHAWebhookMessageReaction,
WAHAWebhookMessageAny,
WAHAWebhookMessageAck,
WAHAWebhookMessageRevoked,
WAHAWebhookStateChange,
WAHAWebhookGroupJoin,
WAHAWebhookGroupLeave,
WAHAWebhookPresenceUpdate,
WAHAWebhookPollVote,
WAHAWebhookPollVoteFailed,
];
export { WAHA_WEBHOOKS };