/opt/mawid/apps/api/src/whatsapp
NameSizeModeActions
owner-notifier.service.ts17450644editdlrm
wa-core.module.ts13520644editdlrm
wa-http.client.ts17360644editdlrm
wa-inbound.service.spec.ts50660644editdlrm
wa-inbound.service.ts54310644editdlrm
wa-outbound.worker.ts27230644editdlrm
wa-queue.ts4470644editdlrm
wa-sender.service.ts49590644editdlrm
wa-signature.spec.ts12640644editdlrm
wa-signature.ts6620644editdlrm
wa-types.ts16830644editdlrm
wa-webhook.controller.spec.ts26840644editdlrm
wa-webhook.controller.ts23080644editdlrm
wa-window.spec.ts8600644editdlrm
wa-window.ts5090644editdlrm
whatsapp.module.ts5790644editdlrm
Edit: /opt/mawid/apps/api/src/whatsapp/wa-signature.spec.ts (1264B)
import { createHmac } from 'node:crypto'; import { verifyWaSignature } from './wa-signature'; const SECRET = 'test-app-secret'; const sign = (body: Buffer, secret = SECRET) => `sha256=${createHmac('sha256', secret).update(body).digest('hex')}`; describe('verifyWaSignature', () => { const body = Buffer.from(JSON.stringify({ object: 'whatsapp_business_account', entry: [] })); it('accepts a valid signature', () => { expect(verifyWaSignature(body, sign(body), SECRET)).toBe(true); }); it('rejects a tampered payload', () => { const signature = sign(body); const tampered = Buffer.from(body.toString().replace('entry', 'ENTRY')); expect(verifyWaSignature(tampered, signature, SECRET)).toBe(false); }); it('rejects a signature from the wrong secret', () => { expect(verifyWaSignature(body, sign(body, 'other-secret'), SECRET)).toBe(false); }); it('rejects missing raw body, missing header, and malformed header', () => { expect(verifyWaSignature(undefined, sign(body), SECRET)).toBe(false); expect(verifyWaSignature(body, undefined, SECRET)).toBe(false); expect(verifyWaSignature(body, 'md5=abc', SECRET)).toBe(false); expect(verifyWaSignature(body, 'sha256=notlongenough', SECRET)).toBe(false); }); });