Skip to content

Feat/multi 494 495 496 497 - #550

Merged
ritaifeoluwa merged 6 commits into
SmartDropLabs:mainfrom
Feyisara2108:feat/multi-494-495-496-497
Oct 18, 2026
Merged

ritaifeoluwa merged 6 commits into
SmartDropLabs:mainfrom
Feyisara2108:feat/multi-494-495-496-497

Conversation

@Feyisara2108

Copy link
Copy Markdown
Contributor

Closes #494
Closes #495
Closes #496
Closes #497

…rtDropLabs#494)

- add src/utils/dates.js (nowIso, toIso, startOfUtcDay, utcDayKey,
  assertUtcTimeZone) as the single source of UTC instant handling
- pin PostgreSQL sessions to UTC per pooled connection (src/database,
  knexfile) so DB-rendered timestamps match application output
- rotate log files on UTC dates (winston-daily-rotate-file utc: true)
- serialize api key audit created_at via nowIso() instead of a bare Date
- default TZ=UTC at process start / in Dockerfile / docker-compose, and
  warn when an operator overrides it with a non-UTC zone
- document the standard in README (Time handling) and .env.example
- add test/timezone.test.js running helpers under UTC, America/New_York
  and Asia/Tokyo and asserting identical UTC results
…rtDropLabs#495)

- warmCacheInBackground: non-blocking startup, Redis NX lock so one
  replica warms at a time, jitter, TTL, max entries, concurrency, and
  per-entry/total timeouts
- warmCache preserves summary shape and logs; timers cleared
- config: CACHE_WARM_* vars and config.cacheWarm + reload propagation
- /health now exposes cache_warm (optimization, not readiness)
…rtDropLabs#495)

- warmCacheInBackground: non-blocking startup, Redis NX lock (one replica warms at a time), jitter, TTL, max entries, concurrency, per-entry and overall timeouts
- warmCache preserves existing summary shape and logs; timers cleared
- config: CACHE_WARM_* env vars, config.cacheWarm + reload propagation
- /health exposes cache_warm (optimization, not readiness dependency)
- update startupBanner.test mock to new cacheWarm exports
…lt (SmartDropLabs#496)

- add src/auth/cookies.js (setCookie/clearCookie/buildCookieOptions) with
  HttpOnly, SameSite=Strict, Secure gated by req.secure or X-Forwarded-Proto
- config: trustProxy (default false), cookie defaults (secure auto, sameSite
  Strict, path /, domain)
- index: app.set('trust proxy', config.trustProxy) only when boolean
- add test/cookies.test.js covering secure flags and defaults; note
  rateLimit uses req.ip (no trust-proxy assumption without enabling it)
…hooks (SmartDropLabs#497)

- webhookRetryWorker.stop() returns a resolved promise (awaitable) and
  accepts optional drainMs (config.webhooks.shutdownDrainMs)
- leaderAwareJob.stop() awaits underlying job.stop() if it returns a promise
- config: add webhook queue knobs (shutdownDrainMs, leaseMs, recoverBatch,
  dlqMax, deliveryTtlSeconds) — non-breaking defaults
@drips-wave

drips-wave Bot commented Oct 18, 2026

Copy link
Copy Markdown

@Feyisara2108 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@ritaifeoluwa
ritaifeoluwa merged commit e74bc81 into SmartDropLabs:main Oct 18, 2026
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.

[bug] Queue messages not persisted [security] No secure cookie flags [performance] No cache warming [bug] Time zone handling inconsistent

2 participants