Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
5.9 KiB
JSON

{"repo": "ai-patrick/swcmas", "files": {"docker-compose.yml": {"317c2c5e687788bb2f3738e94720f9c86d6f017c": {"t": 1785745238.8525236, "n": 1152, "h": "c81a52e327199585", "c": "version: '3.8'\n\nservices:\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: swcmas-backend\n ports:\n - \"5000:5000\"\n environment:\n - NODE_ENV=development\n - PORT=5000\n - MONGODB_URI=mongodb://mongo:27017/swcmas\n - JWT_SECRET=production_super_secret_jwt_key_2026\n - JWT_EXPIRES_IN=7d\n - EMAIL_HOST=smtp.mailtrap.io\n - EMAIL_PORT=2525\n - EMAIL_USER=your_mailtrap_user\n - EMAIL_PASS=your_mailtrap_pass\n - DEEPSEEK_API_KEY=your_api_key_here\n depends_on:\n - mongo\n restart: unless-stopped\n networks:\n - swcmas-network\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: swcmas-frontend\n ports:\n - \"80:80\"\n depends_on:\n - backend\n restart: unless-stopped\n networks:\n - swcmas-network\n\n mongo:\n image: mongo:6.0\n container_name: swcmas-mongo\n ports:\n - \"27017:27017\"\n volumes:\n - swcmas-data:/data/db\n restart: unless-stopped\n networks:\n - swcmas-network\n\nnetworks:\n swcmas-network:\n driver: bridge\n\nvolumes:\n swcmas-data:"}, "c4557e4d695ceaa114b9ec08dc5c0240ad44256b": {"t": 1785749108.3283174, "n": 1149, "h": "39664c174a23169a", "c": "version: '3.8'\n\nservices:\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: swcmas-backend\n ports:\n - \"5000:5000\"\n environment:\n - NODE_ENV=production\n - PORT=5000\n - MONGO_URI=mongodb://mongo:27017/swcmas\n - JWT_SECRET=production_super_secret_jwt_key_2026\n - JWT_EXPIRES_IN=7d\n - EMAIL_HOST=smtp.mailtrap.io\n - EMAIL_PORT=2525\n - EMAIL_USER=your_mailtrap_user\n - EMAIL_PASS=your_mailtrap_pass\n - DEEPSEEK_API_KEY=your_api_key_here\n depends_on:\n - mongo\n restart: unless-stopped\n networks:\n - swcmas-network\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: swcmas-frontend\n ports:\n - \"80:80\"\n depends_on:\n - backend\n restart: unless-stopped\n networks:\n - swcmas-network\n\n mongo:\n image: mongo:6.0\n container_name: swcmas-mongo\n ports:\n - \"27017:27017\"\n volumes:\n - swcmas-data:/data/db\n restart: unless-stopped\n networks:\n - swcmas-network\n\nnetworks:\n swcmas-network:\n driver: bridge\n\nvolumes:\n swcmas-data:"}}, "backend/src/config/index.js": {"317c2c5e687788bb2f3738e94720f9c86d6f017c": {"t": 1786068267.0207644, "n": 3013, "h": "0b3ea5aead6b1ba5", "c": "const dotenv = require('dotenv');\nconst path = require('path');\n\ndotenv.config({ path: path.join(__dirname, '..', '..', '.env') });\n\nconst config = {\n env: process.env.NODE_ENV || 'development',\n port: parseInt(process.env.PORT, 10) || 5000,\n apiPrefix: process.env.API_PREFIX || '/api/v1',\n\n mongodb: {\n uri: process.env.MONGODB_URI || 'mongodb://localhost:27017/swcmas',\n },\n\n jwt: {\n accessSecret: process.env.JWT_ACCESS_SECRET || 'default-access-secret',\n refreshSecret: process.env.JWT_REFRESH_SECRET || 'default-refresh-secret',\n accessExpiry: process.env.JWT_ACCESS_EXPIRY || '15m',\n refreshExpiry: process.env.JWT_REFRESH_EXPIRY || '7d',\n },\n\n bcrypt: {\n saltRounds: parseInt(process.env.BCRYPT_SALT_ROUNDS, 10) || 12,\n },\n\n cloudinary: {\n cloudName: process.env.CLOUDINARY_CLOUD_NAME,\n apiKey: process.env.CLOUDINARY_API_KEY,\n apiSecret: process.env.CLOUDINARY_API_SECRET,\n },\n\n deepseek: {\n apiKey: process.env.DEEPSEEK_API_KEY,\n apiUrl: process.env.DEEPSEEK_API_URL || 'https://api.deepseek.com/v1',\n },\n\n smtp: {\n host: process.env.SMTP_HOST,\n port: parseInt(process.env.SMTP_PORT, 10) || 587,\n user: process.env.SMTP_USER,\n pass: process.env.SMTP_PASS,\n from: process.env.EMAIL_FROM || 'noreply@swcmas.com',\n },\n\n frontendUrl: process.env.FRONTEND_URL || 'http://localhost:5173',\n\n rateLimit: {\n windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS, 10) || 900000,\n max: parseInt(process.env.RATE_LIMIT_MAX, 10) || 100,\n },\n\n logLevel: process.env.LOG_LEVEL || 'debug',\n logFile: process.env.LOG_FILE || 'logs/app.log',\n // Maximum collections per collector per day (to avoid overload)\n maxCollectionsPerCollectorDay: parseInt(process.env.MAX_COLLECTIONS_PER_COLLECTOR_DAY, 10) || 10,\n\n allowedOrigins: [\n 'http://localhost:5173',\n 'http://localhost:3000',\n 'http://localhost:80',\n 'http://localhost',\n ],\n\n roles: {\n COUNTY_ADMIN: 'county_admin',\n COUNTY_OFFICER: 'county_officer',\n LANDLORD: 'landlord',\n WASTE_COLLECTOR: 'waste_collector',\n RESIDENT: 'resident',\n },\n\n complaintTypes: [\n 'missed_collection',\n 'illegal_dumping',\n 'overflowing_bins',\n 'bad_odor',\n 'burning_waste',\n 'other',\n ],\n\n complaintStatuses: ['pending', 'in_progress', 'resolved', 'rejected'],\n complaintPriorities: ['low', 'medium', 'high', 'critical'],\n\n collectionStatuses: ['scheduled', 'in_progress', 'completed', 'verified', 'disputed'],\n verificationStatuses: ['pending', 'verified', 'suspicious', 'requires_investigation', 'disputed'],\n\n reportTypes: ['daily', 'weekly', 'monthly'],\n\n anomalyTypes: [\n 'false_reporting',\n 'suspicious_duration',\n 'repeated_complaints',\n 'collection_gap',\n 'collector_anomaly',\n 'collector_performance',\n ],\n\n anomalySeverities: ['low', 'medium', 'high', 'critical'],\n\n notificationTypes: [\n 'collection_reminder',\n 'complaint_update',\n 'verification_request',\n 'alert',\n 'system',\n ],\n};\n\nmodule.exports = config;"}}}}