4ce4204b6c
CI / Lint (push) Failing after 2s
CI / Build (push) Has been skipped
SDK CI / PHP SDK (push) Failing after 1s
Split PHP SDK / PHP SDK tests (push) Failing after 1s
CI / Test (push) Failing after 1s
CI / Dashboard (push) Failing after 0s
SDK CI / JavaScript SDK (push) Failing after 0s
SDK CI / Python SDK (push) Failing after 2s
SDK CI / Java SDK (push) Failing after 1s
Split PHP SDK / Mirror sdk/php -> rmyndharis/openwa-php (push) Has been skipped
CI / Test (PostgreSQL migrations) (push) Failing after 7m47s
CI / Docker Build (push) Has been skipped
90 lines
3.5 KiB
Markdown
90 lines
3.5 KiB
Markdown
# Contributing to OpenWA
|
|
|
|
Thanks for your interest in improving OpenWA! This guide covers how to get set up, the
|
|
conventions we follow, and how to get a change merged. Contributions of all sizes are
|
|
welcome — bug fixes, features, docs, and tests.
|
|
|
|
## Project layout
|
|
|
|
OpenWA is a NestJS (backend) + React/Vite (dashboard) project:
|
|
|
|
- `src/` — the NestJS API. Feature modules under `src/modules/` (session, message,
|
|
webhook, queue, audit, settings, infra, …), the WhatsApp engine abstraction under
|
|
`src/engine/`, and shared utilities under `src/common/`.
|
|
- `dashboard/` — the React dashboard.
|
|
- `docs/` — architecture, API specification, and operational docs.
|
|
|
|
See `docs/03-system-architecture.md` for the bigger picture.
|
|
|
|
## Getting started
|
|
|
|
OpenWA targets **Node.js 22+**.
|
|
|
|
```bash
|
|
# backend
|
|
npm install
|
|
cp .env.example .env # adjust as needed
|
|
npm run start:dev # hot-reload, default port 2785
|
|
|
|
# dashboard (separate terminal)
|
|
cd dashboard && npm install && npm run dev
|
|
```
|
|
|
|
Default storage is SQLite, so no external services are required to run locally.
|
|
|
|
## Before opening a pull request
|
|
|
|
Please make sure these pass locally:
|
|
|
|
```bash
|
|
npm run build # NestJS build (tsc)
|
|
npm test # unit tests (Jest)
|
|
npm run lint # ESLint
|
|
npm run format # Prettier
|
|
npm --prefix dashboard run build # dashboard type-check + build
|
|
```
|
|
|
|
- Add or update tests for behavior changes — specs are colocated as `*.spec.ts`.
|
|
- Keep each PR focused on one logical change; it makes review (and credit) much easier.
|
|
- Update `docs/` and the `CHANGELOG.md` `[Unreleased]` section when your change is
|
|
user-visible. (Maintainers own version stamping and release cutting.)
|
|
|
|
## Conventions
|
|
|
|
- **Commits:** [Conventional Commits](https://www.conventionalcommits.org/) —
|
|
`feat(...)`, `fix(...)`, `docs(...)`, `chore(...)`, etc.
|
|
- **Style:** single quotes, 2-space indentation, 120-column width, semicolons — all
|
|
enforced by Prettier + ESLint. Run `npm run format` before committing.
|
|
- **Types:** explicit types, avoid `any`.
|
|
- **Requests:** validate request bodies with DTOs + `class-validator`.
|
|
- **Errors & logging:** throw NestJS HTTP exceptions; use the project `LoggerService`
|
|
(`createLogger`) rather than `console.*`.
|
|
- **Database:** changes to the persisted (data) schema need a TypeORM migration under
|
|
`src/database/migrations/`.
|
|
|
|
## Scope notes (please read before large PRs)
|
|
|
|
- The default engine is **whatsapp-web.js**. Some capabilities are engine-limited — for
|
|
example, interactive **Buttons / List** messages are not supported on whatsapp-web.js,
|
|
so PRs adding them won't function against the default engine.
|
|
- The **REST API is the public contract**. Please avoid changing response shapes or
|
|
status codes without opening an issue to discuss first.
|
|
- For substantial architectural changes (new frameworks, large rewrites), please open an
|
|
issue to align on the approach before investing the work.
|
|
|
|
## Reporting issues
|
|
|
|
Use the **Bug report** or **Feature request** issue templates — the structured fields
|
|
(version, deployment, engine, logs, reproduction) make triage much faster. For security
|
|
vulnerabilities, see [`SECURITY.md`](SECURITY.md) — please do **not** open a public issue.
|
|
|
|
## Code of conduct
|
|
|
|
This project follows the [Contributor Covenant](CODE_OF_CONDUCT.md). By participating,
|
|
you're expected to uphold it.
|
|
|
|
## License
|
|
|
|
By contributing, you agree that your contributions are licensed under the project's
|
|
[MIT License](LICENSE).
|