This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
WhatsApp TypeScript SDK. Published npm package providing type-safe WhatsApp Business Platform integration.
pnpm dev # Watch mode development
pnpm build # Clean production build
pnpm test # Run all tests
pnpm test:watch # Watch mode tests
pnpm lint # Biome linting
pnpm format # Biome formatting (auto-fix)
pnpm typecheck # TypeScript checkingTo run a single test file:
pnpm vitest run src/api/messages/__test__/unit.test.tssrc/core/whatsapp/WhatsApp.ts - Primary SDK class that composes all API domain classes (messages, media, template, flow, phone, profile, etc.).
Each API domain follows a consistent pattern:
{Name}Api.ts- Main class extending BaseAPI with methods for that domaintypes/- TypeScript interfaces for request/response payloads__test__/unit.test.ts- Colocated unit tests
Key domains: messages, media, template, flow, phone, profile, calling, commerce, payments, groups, waba, qrCode, registration, twoStepVerification, encryption
WebhookProcessor.ts- Framework-agnostic webhook handlingframeworks/- Express.js and Next.js adapterstypes/- Webhook event type definitions
enums.ts- All SDK enums (MessageTypesEnum, TemplateStatusEnum, etc.)base.ts- BaseAPI class definition- Request/response types shared across modules
meta-cloud-api # Main SDK (WhatsApp class)
meta-cloud-api/types # Type definitions only
meta-cloud-api/enums # Enums only
meta-cloud-api/utils # Utilities only
Use these official docs when updating src/api endpoints or types:
- Overview: https://developers.facebook.com/documentation/business-messaging/whatsapp/overview/
- Messages: https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/
- Media: https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/media/
- Templates: https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/
- Flows: https://developers.facebook.com/documentation/business-messaging/whatsapp/flows/
- Phone Numbers: https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers/
- Registration: https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/registration/
- Two-Step Verification: https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/two-step-verification/
- Business Profiles: https://developers.facebook.com/documentation/business-messaging/whatsapp/business-profiles/
- QR Codes: https://developers.facebook.com/documentation/business-messaging/whatsapp/qr-codes/
- WABA: https://developers.facebook.com/documentation/business-messaging/whatsapp/whatsapp-business-accounts/
- Block Users: https://developers.facebook.com/documentation/business-messaging/whatsapp/block-users/
- Encryption: https://developers.facebook.com/docs/whatsapp/cloud-api/reference/whatsapp-business-encryption/
- Calling: https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/reference/
- Groups: https://developers.facebook.com/documentation/business-messaging/whatsapp/groups/reference/
- Marketing Messages: https://developers.facebook.com/documentation/business-messaging/whatsapp/marketing-messages/send-marketing-messages/
- Commerce Settings: https://developers.facebook.com/documentation/business-messaging/whatsapp/catalogs/sell-products-and-services/set-commerce-settings/
- Payments (India): https://developers.facebook.com/documentation/business-messaging/whatsapp/payments/payments-in/onboarding-apis/
- TypeScript with strict mode, ESM modules
- 4-space indentation, single quotes, semicolons
- Path aliases:
@core/*,@api/*,@shared/* - API files include top-level doc link:
// Docs: <url> - Request payloads as plain objects (not builders)
- Conventional Commits:
feat:,fix:,docs:,chore:,refactor:,test:
Tests colocated at src/api/<domain>/__test__/unit.test.ts. Focus on endpoint paths, query params, and payloads. Uses Vitest with mocks (vi.mock, vi.fn()).
Required: Node.js >= 18, pnpm >= 10. See .env.example for required variables (CLOUD_API_ACCESS_TOKEN, WA_PHONE_NUMBER_ID, WA_BUSINESS_ACCOUNT_ID).