/opt/mawid/apps/api/src/whatsapp
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);
});
});