All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Released sections are generated by semantic-release
from Conventional Commit messages on main (see .releaserc.json), so they do not
need to be written by hand. Anything merged but not yet released belongs under
Unreleased; copy the template at the bottom of this
file when starting a new section.
- In-memory TTL cache for the deterministic IoT readings. Entries are keyed
solar:<projectId>:<hourSeed>andsatellite:<projectId>:<hourSeed>and expire at the next hour boundary, so repeated reads within an hour no longer recompute the simulation. Disable withIOT_CACHE_DISABLED=true; cap retained entries withIOT_CACHE_MAX_SIZE(default1000, oldest evicted first) (#221) - Upper bound on the
:idproject parameter. IDs outside1..MAX_PROJECT_ID(default1000000) are rejected with a400, alongside the existing rejection of floats, signed and non-numeric values (#223) bun run dev:no-watch, which keeps the previous non-watching development server (#222)- Changelog conventions and a copyable entry template, linked from the README (#224)
bun run devnow runs undernode --watch, so the server restarts on save (#222)src/routes/iot.tsre-exports the simulation fromsrc/lib/iot.tsinstead of keeping a second copy of it, so the HTTP routes and the hourly cron read through one implementation and therefore one cache (#221)
1.0.0 - 2026-07-29
Initial version.
- Health check endpoint with uptime and last cron run status
- IoT simulation endpoints for solar panel and satellite readings
- Soroban ProjectRegistry contract integration for impact score updates
- Admin endpoint for batch score updates with Bearer token authentication
- Hourly cron job for automatic on-chain score updates
- GraphQL API layer via graphql-http
- gRPC service layer with proto definitions
- Rate limiting for public and admin endpoints
- Swagger/OpenAPI documentation via swagger-ui-express
- Load testing suite with k6 (smoke, average, stress, spike, GraphQL scenarios)
- Jest test suite with ts-jest and Supertest
- ESLint + Prettier code quality tooling
- Husky pre-commit hooks with lint-staged
- CI pipeline with GitHub Actions (build + test)
- CORS configuration for frontend integration
- WebSocket support with token-based authentication
- Input sanitization and security headers
- Upgraded to Express 5
- Migrated to TypeScript strict mode
- Bearer token authentication for admin endpoints
- Rate limiting to prevent abuse
- Security policy documentation
Copy this into a new ## [Unreleased] section and drop the categories that do not
apply. Keep them in this order, and write entries for the person upgrading — what
changed and what they need to do about it, rather than which files moved. Link the
issue or PR at the end of each entry.
## [Unreleased]
### Added <!-- new features -->
### Changed <!-- changes in existing behaviour -->
### Deprecated <!-- soon-to-be-removed features -->
### Removed <!-- features removed in this release -->
### Fixed <!-- bug fixes -->
### Security <!-- vulnerabilities addressed -->