|
1 | 1 | // Pure TypeScript interfaces for better IDE support and performance |
2 | | -import type { Media } from "@/schemas/common"; |
3 | | -import { Jid, MessageId } from "@/types/tags"; |
4 | | -import { phoneNumberFromJid } from "@/utils/phone-numer-from-jid"; |
5 | | -import { BaseMessageOptions } from "./base"; |
6 | | - |
7 | | -// Raw response interface from API |
8 | | -export interface ImageMessageResponseRaw { |
9 | | - key: { |
10 | | - remoteJid: string; |
11 | | - id: string; |
12 | | - }; |
13 | | - message: { |
14 | | - imageMessage: { |
15 | | - url: string; |
16 | | - mimetype?: string; |
17 | | - fileSha256: string; |
18 | | - fileLength: number | string; |
19 | | - height: number; |
20 | | - width: number; |
21 | | - mediaKey: string; |
22 | | - caption?: string; |
23 | | - fileEncSha256: string; |
24 | | - directPath: string; |
25 | | - mediaKeyTimestamp: number | string; |
26 | | - }; |
27 | | - }; |
28 | | - messageType: "image"; |
29 | | - messageTimestamp: string | Date; |
30 | | -} |
| 2 | +import { MediaMessageOptions, MediaMessageResponse } from "./media"; |
31 | 3 |
|
32 | 4 | // Request interfaces |
33 | | -export interface ImageMessageOptions extends BaseMessageOptions { |
34 | | - /** |
35 | | - * Image URL or file in base64 |
36 | | - */ |
37 | | - image: Media; |
38 | | - /** |
39 | | - * Caption to send with image |
40 | | - */ |
41 | | - caption?: string; |
42 | | - /** |
43 | | - * Image mimetype |
44 | | - */ |
45 | | - mimetype?: string; |
46 | | -} |
47 | | - |
48 | | -export interface ImageMessageBody extends BaseMessageOptions { |
49 | | - media: Media; |
50 | | - mediatype: "image"; |
51 | | - caption?: string; |
52 | | - mimetype?: string; |
53 | | -} |
| 5 | +export interface ImageMessageOptions extends MediaMessageOptions {} |
54 | 6 |
|
55 | 7 | // Response interfaces |
56 | | -export interface ImageMessageResponse { |
57 | | - receiver: { |
58 | | - phoneNumber: string; |
59 | | - jid: Jid; |
60 | | - }; |
61 | | - media: { |
62 | | - url: string; |
63 | | - caption?: string; |
64 | | - mimetype?: string; |
65 | | - length: number; |
66 | | - height: number; |
67 | | - width: number; |
68 | | - sha256: string; |
69 | | - encryptedSha256: string; |
70 | | - directPath: string; |
71 | | - key: string; |
72 | | - keyTimestamp: Date; |
73 | | - }; |
74 | | - id: MessageId; |
75 | | - timestamp: Date; |
| 8 | +export interface ImageMessageResponse extends MediaMessageResponse { |
| 9 | + message: MediaMessageResponse["message"] & { |
| 10 | + imageMessage: MediaMessageResponse["message"]["imageMessage"]; |
| 11 | + }; |
76 | 12 | } |
77 | | - |
78 | | -// Transform functions |
79 | | -export const ImageMessageBodyTransform = ( |
80 | | - { image, ...data }: ImageMessageOptions |
81 | | -): ImageMessageBody => ({ ...data, media: image, mediatype: "image" }); |
82 | | - |
83 | | -export const ImageMessageResponseTransform = (data: ImageMessageResponseRaw): ImageMessageResponse => ({ |
84 | | - receiver: { |
85 | | - phoneNumber: phoneNumberFromJid(data.key.remoteJid), |
86 | | - jid: Jid(data.key.remoteJid), |
87 | | - }, |
88 | | - media: { |
89 | | - url: data.message.imageMessage.url, |
90 | | - caption: data.message.imageMessage.caption, |
91 | | - mimetype: data.message.imageMessage.mimetype, |
92 | | - length: Number(data.message.imageMessage.fileLength), |
93 | | - height: data.message.imageMessage.height, |
94 | | - width: data.message.imageMessage.width, |
95 | | - sha256: data.message.imageMessage.fileSha256, |
96 | | - encryptedSha256: data.message.imageMessage.fileEncSha256, |
97 | | - directPath: data.message.imageMessage.directPath, |
98 | | - key: data.message.imageMessage.mediaKey, |
99 | | - keyTimestamp: new Date(Number(data.message.imageMessage.mediaKeyTimestamp)), |
100 | | - }, |
101 | | - id: MessageId(data.key.id), |
102 | | - timestamp: new Date(data.messageTimestamp), |
103 | | -}); |
104 | | - |
105 | | -// Backward compatibility aliases |
106 | | -export const BodySchema = { parse: ImageMessageBodyTransform }; |
107 | | -export const ResponseSchema = { parse: ImageMessageResponseTransform }; |
0 commit comments