feat: map all WA media types

This commit is contained in:
Adhiraj Singh
2022-09-15 15:08:49 +05:30
parent b05ce25dfa
commit 3a891e071e
6 changed files with 32 additions and 21 deletions

View File

@@ -60,17 +60,37 @@ export const DEFAULT_LEGACY_CONNECTION_CONFIG: LegacySocketConfig = {
expectResponseTimeout: 60_000,
}
export const MEDIA_PATH_MAP: { [T in MediaType]: string } = {
export const MEDIA_PATH_MAP: { [T in MediaType]?: string } = {
image: '/mms/image',
video: '/mms/video',
document: '/mms/document',
audio: '/mms/audio',
sticker: '/mms/image',
history: '',
'product-image': '/product/image',
'thumbnail-link': '/mms/image',
'product-catalog-image': '/product/image',
'md-app-state': ''
}
export const MEDIA_HKDF_KEY_MAPPING = {
'audio': 'Audio',
'document': 'Document',
'gif': 'Video',
'image': 'Image',
'ppic': '',
'product': 'Image',
'ptt': 'Audio',
'sticker': 'Image',
'video': 'Video',
'thumbnail-document': 'Document Thumbnail',
'thumbnail-image': 'Image Thumbnail',
'thumbnail-video': 'Video Thumbnail',
'thumbnail-link': 'Link Thumbnail',
'md-msg-hist': 'History',
'md-app-state': 'App State',
'product-catalog-image': '',
'payment-bg-image': 'Payment Background',
}
export const MEDIA_KEYS = Object.keys(MEDIA_PATH_MAP) as MediaType[]
export const MIN_PREKEY_COUNT = 5

View File

@@ -3,6 +3,7 @@ import type { Logger } from 'pino'
import type { Readable } from 'stream'
import type { URL } from 'url'
import { proto } from '../../WAProto'
import { MEDIA_HKDF_KEY_MAPPING } from '../Defaults'
import type { GroupMetadata } from './GroupMetadata'
// export the WAMessage Prototypes
@@ -75,7 +76,8 @@ type WithDimensions = {
width?: number
height?: number
}
export type MediaType = 'image' | 'video' | 'sticker' | 'audio' | 'document' | 'history' | 'md-app-state' | 'product-image'
export type MediaType = keyof typeof MEDIA_HKDF_KEY_MAPPING
export type AnyMediaMessageContent = (
({
image: WAMediaUpload

View File

@@ -239,7 +239,7 @@ export const uploadingNecessaryImages = async(
const { directPath } = await waUploadToServer(
toReadable(Buffer.concat(contentBlocks)),
{
mediaType: 'product-image',
mediaType: 'product-catalog-image',
fileEncSha256B64: sha,
timeoutMs
}

View File

@@ -10,7 +10,7 @@ import { downloadContentFromMessage } from './messages-media'
const inflatePromise = promisify(inflate)
export const downloadHistory = async(msg: proto.Message.IHistorySyncNotification) => {
const stream = await downloadContentFromMessage(msg, 'history')
const stream = await downloadContentFromMessage(msg, 'md-msg-hist')
const bufferArray: Buffer[] = []
for await (const chunk of stream) {
bufferArray.push(chunk)

View File

@@ -11,7 +11,7 @@ import type { Logger } from 'pino'
import { Readable, Transform } from 'stream'
import { URL } from 'url'
import { proto } from '../../WAProto'
import { DEFAULT_ORIGIN, MEDIA_PATH_MAP } from '../Defaults'
import { DEFAULT_ORIGIN, MEDIA_HKDF_KEY_MAPPING, MEDIA_PATH_MAP } from '../Defaults'
import { BaileysEventMap, CommonSocketConfig, DownloadableMessage, MediaConnInfo, MediaDecryptionKeyInfo, MediaType, MessageType, WAGenericMediaMessage, WAMediaUpload, WAMediaUploadFunction, WAMessageContent } from '../Types'
import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildBuffer, jidNormalizedUser } from '../WABinary'
import { aesDecryptGCM, aesEncryptGCM, hkdf } from './crypto'
@@ -50,16 +50,7 @@ const getImageProcessingLibrary = async() => {
}
export const hkdfInfoKey = (type: MediaType) => {
let str: string = type
if(type === 'sticker') {
str = 'image'
}
if(type === 'md-app-state') {
str = 'App State'
}
const hkdfInfo = str[0].toUpperCase() + str.slice(1)
const hkdfInfo = MEDIA_HKDF_KEY_MAPPING[type]
return `WhatsApp ${hkdfInfo} Keys`
}

View File

@@ -37,15 +37,13 @@ type MediaUploadData = {
mimetype?: string
}
const MIMETYPE_MAP: { [T in MediaType]: string } = {
const MIMETYPE_MAP: { [T in MediaType]?: string } = {
image: 'image/jpeg',
video: 'video/mp4',
document: 'application/pdf',
audio: 'audio/ogg; codecs=opus',
sticker: 'image/webp',
history: 'application/x-protobuf',
'product-image': 'image/jpeg',
'md-app-state': 'application/x-protobuf',
'product-catalog-image': 'image/jpeg',
}
const MessageTypeProto = {