cms.c2sgmbh/package.json
Martin Porwoll 19fcb4d837 feat: implement multi-tenant email system with logging
- Add Payload email adapter for system emails (auth, password reset)
- Add EmailLogs collection for tracking all sent emails
- Extend Tenants collection with SMTP configuration fields
- Implement tenant-specific email service with transporter caching
- Add /api/send-email endpoint with:
  - Authentication required
  - Tenant access control (users can only send for their tenants)
  - Rate limiting (10 emails/minute per user)
- Add form submission notification hook with email logging
- Add cache invalidation hook for tenant email config changes

Security:
- SMTP passwords are never returned in API responses
- Passwords are preserved when field is left empty on update
- Only super admins can delete email logs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 20:16:54 +00:00

74 lines
2.6 KiB
JSON

{
"name": "payload-cms",
"version": "1.0.0",
"description": "A blank template to get started with Payload 3.0",
"license": "MIT",
"type": "module",
"scripts": {
"build": "cross-env NODE_OPTIONS=\"--no-deprecation --max-old-space-size=2048\" next build",
"dev": "cross-env NODE_OPTIONS=--no-deprecation next dev",
"devsafe": "rm -rf .next && cross-env NODE_OPTIONS=--no-deprecation next dev",
"generate:importmap": "cross-env NODE_OPTIONS=--no-deprecation payload generate:importmap",
"generate:types": "cross-env NODE_OPTIONS=--no-deprecation payload generate:types",
"lint": "cross-env NODE_OPTIONS=--no-deprecation next lint",
"payload": "cross-env NODE_OPTIONS=--no-deprecation payload",
"start": "cross-env NODE_OPTIONS=--no-deprecation next start",
"test": "pnpm run test:int && pnpm run test:e2e",
"test:e2e": "test -f .next/BUILD_ID || (echo 'Error: No build found. Run pnpm build first.' && exit 1) && cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" pnpm exec playwright test",
"test:int": "cross-env NODE_OPTIONS=--no-deprecation vitest run --config ./vitest.config.mts"
},
"dependencies": {
"@payloadcms/db-postgres": "3.65.0",
"@payloadcms/next": "3.65.0",
"@payloadcms/plugin-form-builder": "3.65.0",
"@payloadcms/plugin-multi-tenant": "^3.65.0",
"@payloadcms/plugin-nested-docs": "3.65.0",
"@payloadcms/plugin-redirects": "3.65.0",
"@payloadcms/plugin-seo": "3.65.0",
"@payloadcms/richtext-lexical": "3.65.0",
"@payloadcms/translations": "^3.65.0",
"@payloadcms/ui": "3.65.0",
"cross-env": "^7.0.3",
"dotenv": "16.4.7",
"graphql": "^16.8.1",
"ioredis": "^5.8.2",
"next": "15.4.7",
"node-cron": "^4.2.1",
"nodemailer": "^7.0.11",
"payload": "3.65.0",
"react": "19.1.0",
"react-dom": "19.1.0",
"sharp": "0.34.2"
},
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
"@playwright/test": "1.56.1",
"@testing-library/react": "16.3.0",
"@types/node": "^22.5.4",
"@types/node-cron": "^3.0.11",
"@types/nodemailer": "^7.0.4",
"@types/react": "19.1.8",
"@types/react-dom": "19.1.6",
"@vitejs/plugin-react": "4.5.2",
"eslint": "^9.16.0",
"eslint-config-next": "15.4.7",
"jsdom": "26.1.0",
"playwright": "1.56.1",
"playwright-core": "1.56.1",
"prettier": "^3.2.5",
"typescript": "5.7.3",
"vite-tsconfig-paths": "5.1.4",
"vitest": "3.2.3"
},
"engines": {
"node": "^18.20.2 || >=20.9.0",
"pnpm": "^9 || ^10"
},
"pnpm": {
"onlyBuiltDependencies": [
"sharp",
"esbuild",
"unrs-resolver"
]
}
}