feat(sticker-pack): implement native sticker pack support (3-30 stickers)
Implementa suporte completo para envio de pacotes de stickers seguindo o padrão oficial do WhatsApp (3-30 stickers por pack). **Novos Recursos:** - Tipos TypeScript: Sticker e StickerPack com documentação completa - Função prepareStickerPackMessage() com criptografia AES-256-CBC + HMAC - Conversão automática para WebP usando Sharp - Detecção de stickers animados via VP8X header - Deduplicação automática de stickers por hash SHA256 - Compressão ZIP usando fflate (level 0 para performance) - Upload de thumbnail 252x252 JPEG com mesma mediaKey - Validações conforme especificações oficiais WhatsApp **Especificações Implementadas:** - Mínimo 3, máximo 30 stickers (padrão oficial WhatsApp) - Limite 1MB por sticker (hard limit) - Recomendado: 100KB estático, 500KB animado - Formato WebP obrigatório - Tray icon 252x252 pixels - Limite total pack: 30MB **Arquivos Modificados:** - src/Types/Message.ts: tipos Sticker e StickerPack - src/Defaults/index.ts: media paths e HKDF keys - src/Utils/sticker-pack.ts: implementação core (440 linhas) - src/Utils/messages-media.ts: export getImageProcessingLibrary, mediaKey opcional - src/Utils/messages.ts: integração com generateWAMessageContent - src/Socket/messages-send.ts: detecção de tipo 'sticker_pack' - package.json: dependência fflate@^0.8.2 **Segurança:** - Criptografia AES-256-CBC com autenticação HMAC-SHA256 - HKDF key derivation para separação de chaves - Reutilização intencional de mediaKey (protocolo WhatsApp) - Validação de tamanhos e formatos **Compatibilidade:** - ✅ Não impacta mensagens interativas existentes - ✅ Tipos completamente separados no union type - ✅ Sharp como peer dependency opcional - ✅ Graceful degradation se Sharp não instalado **Uso:** \`\`\`typescript await sock.sendMessage(jid, { stickerPack: { name: 'Meu Pack', publisher: 'Autor', cover: coverBuffer, stickers: [ { data: sticker1, emojis: ['😀'] }, { data: sticker2, emojis: ['😎'] } ] } }) \`\`\` https://claude.ai/code/session_01FaRqGuPecEyPx1qiuRV8Ye
This commit is contained in:
@@ -123,7 +123,9 @@ export const MEDIA_PATH_MAP: { [T in MediaType]?: string } = {
|
||||
'product-catalog-image': '/product/image',
|
||||
'md-app-state': '',
|
||||
'md-msg-hist': '/mms/md-app-state',
|
||||
'biz-cover-photo': '/pps/biz-cover-photo'
|
||||
'biz-cover-photo': '/pps/biz-cover-photo',
|
||||
'sticker-pack': '/mms/sticker-pack',
|
||||
'thumbnail-sticker-pack': '/mms/thumbnail-sticker-pack'
|
||||
}
|
||||
|
||||
export const MEDIA_HKDF_KEY_MAPPING = {
|
||||
@@ -145,7 +147,9 @@ export const MEDIA_HKDF_KEY_MAPPING = {
|
||||
'product-catalog-image': '',
|
||||
'payment-bg-image': 'Payment Background',
|
||||
ptv: 'Video',
|
||||
'biz-cover-photo': 'Image'
|
||||
'biz-cover-photo': 'Image',
|
||||
'sticker-pack': 'Sticker Pack',
|
||||
'thumbnail-sticker-pack': 'Sticker Pack Thumbnail'
|
||||
}
|
||||
|
||||
export type MediaType = keyof typeof MEDIA_HKDF_KEY_MAPPING
|
||||
|
||||
Reference in New Issue
Block a user