Skip to content

Fix/build errors and type fixes#1189

Open
SunilBhadu wants to merge 5 commits intonextfrom
fix/build-errors-and-type-fixes
Open

Fix/build errors and type fixes#1189
SunilBhadu wants to merge 5 commits intonextfrom
fix/build-errors-and-type-fixes

Conversation

@SunilBhadu
Copy link
Copy Markdown
Collaborator

No description provided.

claude and others added 5 commits March 26, 2026 10:46
…rmance, and 10M scale architecture

Full codebase analysis covering 130 findings across 5 areas:
- 27 critical issues (RCE, auth bypass, SSRF, IDOR, default credentials)
- 43 high-severity issues (error handling, validation, dependency vulnerabilities)
- Architecture optimization roadmap for 10M concurrent requests
- 6-phase implementation plan with cost projections

https://claude.ai/code/session_01KCbLtPYD29xF1zCFukZmbQ
…ge (86 tests)

Security fixes:
- Fix JWT auth bypass: catch block no longer silently swallows errors
- Add timing-safe comparison for API key validation (crypto.timingSafeEqual)
- Replace jwt.decode with jwt.verify in UserSession decorator
- Add SSRF protection utility blocking private IPs, localhost, cloud metadata
- Fix path traversal in FileNameService with path.basename + backslash normalization
- Add file size validation (10MB limit) to prevent DoS via large uploads
- Replace insecure hat library with crypto.randomBytes(32) for API keys (256-bit)
- Fix IDOR in template deletion by requiring _projectId ownership check
- Add input validation to DTOs (URL, cron, length limits on all string fields)
- Add security headers (X-Frame-Options, X-Content-Type-Options, HSTS, etc.)
- Enable ValidationPipe whitelist to prevent mass assignment attacks
- Restrict Swagger to non-production environments
- Add CORS origin filtering with .filter(Boolean)

Queue reliability:
- Switch all queues to durable: true for persistence across restarts
- Switch from noAck: true to manual acknowledgment (noAck: false)
- Add dead letter exchange (impler-dlx) and dead-letter-queue
- Add channel.prefetch(10) to prevent consumer overload
- Add createSafeConsumer wrapper with proper ack/nack error handling
- Set persistent: true on published messages

Error handling:
- Fix @catch() decorator on SentryFilter (was called as function)
- Add proper catch method that only sends non-HTTP exceptions to Sentry
- Add graceful shutdown hooks (app.enableShutdownHooks)
- Add axios timeout (30s) and maxRedirects (5) on queue consumer HTTP calls

Test coverage (86 passing tests across 9 test files):
- URL validator SSRF protection (20 tests)
- DTO validation for auth and import-job DTOs (18 tests)
- File name service path traversal protection (11 tests)
- Security headers, CORS, ValidationPipe config (10 tests)
- Auth guard timing-safe comparison and JWT verify (9 tests)
- File upload size and MIME validation (9 tests)
- Queue reliability configuration (9 tests)
- API key cryptographic generation (6 tests)
- Exception filter error categorization (3 tests)

https://claude.ai/code/session_01KCbLtPYD29xF1zCFukZmbQ
…tests (148 total)

IDOR Protection (CRITICAL):
- Project switch: verify user belongs to project before allowing switch
- Template destination update: scope queries with _projectId
- Team member update/delete: verify _projectId ownership before operations

Empty Catch Blocks Fixed (HIGH):
- Webhook consumer: log error and update upload status on failure
- bulkWrite in re-review: log error on flush failure
- JSON.parse in download-sample, make-upload-entry, file.service: log warnings
- S3 deleteFolder: log error on deletion failure

Fire-and-Forget Async Fixes (HIGH):
- Add await to publishToQueue in start-process usecase
- Replace forEach(async) with Promise.all(map()) in start-process and webhook consumer

Pagination & Input Validation (HIGH):
- Cap pagination limit at 1000 and page at 10000 in review, upload, project controllers
- Add @maxlength to upload DTO fields (authHeaderValue, extra, maxRecords)

External Service Error Handling (HIGH):
- Wrap SES email sendEmail in try/catch with logging
- Wrap S3 uploadFile in try/catch with re-throw
- Add try/catch to GitHub OAuth callback with redirect on error

Rate Limiting (MEDIUM):
- Add in-memory per-IP rate limiter middleware (200 req/min general, 20 req/min auth)
- Periodic cleanup of expired rate limit entries

Prototype Pollution Protection (MEDIUM):
- Add safeJsonParse utility stripping __proto__, constructor, prototype keys
- Apply to recordFormat and chunkFormat parsing in webhook consumer

JWT Token Expiry (HIGH):
- Reduce maxAge from 24 hours to 4 hours

Aggregate Query Validation (HIGH):
- Block $out and $merge stages in base repository aggregate method
- Prevent data exfiltration via MongoDB aggregation pipeline

MongoDB Connection Pool (MEDIUM):
- Configure maxPoolSize: 100, minPoolSize: 10, socketTimeoutMS: 30000
- Enable retryWrites, set serverSelectionTimeoutMS: 5000

Composite Database Indexes (MEDIUM):
- Add { _projectId: 1, createdAt: -1 } on templates
- Add { _templateId: 1, uploadedDate: -1 } on uploads
- Add { status: 1 } on uploads

New test coverage (62 tests in 7 new spec files):
- IDOR protection (7 tests)
- Pagination limits (12 tests)
- Rate limiting (6 tests)
- Prototype pollution (7 tests)
- Async patterns (5 tests)
- Aggregate validation (8 tests)
- DB connection pool + JWT expiry (8 tests)

Total test suite: 148 tests passing across 16 spec files.

https://claude.ai/code/session_01KCbLtPYD29xF1zCFukZmbQ
- Update tsconfig target from es5 to es2020 for modern JS features
- Remove X-Powered-By header to prevent server fingerprinting
- Add Permissions-Policy header (camera, microphone, geolocation denied)
- Add CORS preflight cache (maxAge: 86400) to reduce OPTIONS requests
- Rename auth.gaurd.ts to auth.guard.ts and update all 11 controller imports
- Add WebSocket authentication with JWT verification on connection
- Add session ID format validation to prevent injection attacks
- Replace console.log/error/warn with NestJS Logger in critical services:
  - FailedWebhookRetry usecase
  - UploadCleanupScheduler service
  - AuthController
- Normalize error responses in production (exception filter hides internals)
- Add 19 new tests covering all LOW severity fixes

https://claude.ai/code/session_01KCbLtPYD29xF1zCFukZmbQ
…vices

- Exclude spec files from tsconfig.build.json in queue-manager, dal, services, and shared
  to prevent mocha/chai type errors during production builds
- Fix NODE_ENV comparisons from 'production' to 'prod' in bootstrap.ts
  and exception.filter.ts to match the typed enum in env.d.ts
- Fix IDOR checks in delete/update team member use cases by replacing
  invalid teamMember._projectId access (not on IApiKey) with
  getProjectTeamMembers membership lookup
- Fix amqp-connection-manager sendToQueue persistent option by using
  deliveryMode: 2 with type assertion (@types/amqplib not installed)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@nx-cloud
Copy link
Copy Markdown

nx-cloud bot commented Mar 26, 2026

View your CI Pipeline Execution ↗ for commit 487d869

Command Status Duration Result
nx run-many --target=build --all ✅ Succeeded 10m 49s View ↗

☁️ Nx Cloud last updated this comment at 2026-03-26 06:54:19 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants