Extension Backend
Build a secure, maintainable backend API for a Chrome extension. Recommended stack: NestJS + MongoDB (Mongoose).
When to Activate
Activate this skill when extension work requires:
- License verification / payment webhooks
- User authentication / account management
- Data sync across devices
- External API proxy (hide API keys from extension)
- Any server-side logic
Workflow (Execute This)
Step 1: Ask user to confirm requirements
- Do you need a backend? (explain why: API keys, auth, payments, sync)
- Stack preference: NestJS + MongoDB (recommended) or custom?
- Hosting target: Vercel / Railway / Fly.io / AWS / self-hosted?
- Features needed (pick from):
- User auth (Google OAuth via chrome.identity) - License/subscription verification - Payment webhooks (Stripe, Paddle, etc.) - Data sync / storage API - External API proxy - Rate limiting
Step 2: Fetch framework docs
Use docs-seeker skill to fetch latest docs:
- NestJS: https://docs.nestjs.com/
- Mongoose: https://mongoosejs.com/docs/
- TypeScript style: https://google.github.io/styleguide/tsguide.html
- JavaScript style: https://google.github.io/styleguide/jsguide.html
Step 3: Scaffold the backend
npx @nestjs/cli new extension-backend --strict --package-manager pnpm
cd extension-backend
pnpm add @nestjs/mongoose mongoose @nestjs/config class-validator class-transformer
pnpm add helmet @nestjs/throttler
pnpm add -D @types/expressStep 4: Project structure
src/
├── main.ts # Bootstrap, CORS, helmet, validation
├── app.module.ts # Root module
├── config/
│ └── configuration.ts # Env-based config
├── auth/
│ ├── auth.module.ts # Auth module
│ ├── auth.controller.ts # POST /auth/verify-token
│ ├── auth.service.ts # Token validation logic
│ └── guards/auth.guard.ts # Global auth guard
├── license/
│ ├── license.module.ts
│ ├── license.controller.ts # GET /license/verify
│ ├── license.service.ts # License CRUD
│ └── schemas/license.schema.ts # Mongoose schema
├── webhook/
│ ├── webhook.module.ts
│ ├── webhook.controller.ts # POST /webhook/stripe
│ └── webhook.service.ts # Process payment events
└── common/
├── filters/http-exception.filter.ts
├── interceptors/logging.interceptor.ts
└── dto/ # Shared DTOsStep 5: Essential endpoints
| Method | Endpoint | Purpose | Auth |
|---|---|---|---|
| POST | /auth/verify-token | Verify Google OAuth token | No |
| GET | /license/verify | Check user subscription status | Yes |
| POST | /webhook/stripe | Receive payment events | Signature |
| GET | /health | Health check | No |
Step 6: Security checklist
See references/security-patterns.md for implementation details.
- Helmet middleware enabled
- CORS restricted to
chrome-extension://<ID>origin - Rate limiting (ThrottlerModule)
- Input validation (class-validator on all DTOs)
- Webhook signature verification
- No secrets in response bodies
- MongoDB injection prevention (Mongoose sanitizes by default)
- HTTPS only in production
References
references/nestjs-setup.md— Bootstrap, modules, CORS, env configreferences/security-patterns.md— Auth guard, rate limiting, webhook verification, CORSreferences/mongoose-patterns.md— Schemas, services, queries, indexesreferences/extension-api-patterns.md— Endpoints the extension calls, token flow
Related Skills
extension-payment— Payment gateway integration (calls this backend)extension-dev— Extension-side feature developmentextension-analyze— Security audit for both extension and backend