Changelog
What's new in AmpNexus
Release notes pulled straight from our delivery pipeline — every entry ships with verified quality and performance data.
180 releases
- stableService
Firmware API – 1.0.0
firmware-apiQualitytests: 151 passedcoverage: 0% line1.0.0 (2025-12-09)
Bug Fixes
- Add debug logging (4330cf0)
- Add reconnection loop to AMQP consumer (4ffd536)
- Added additional node_modules (3cf11bb)
- Added duplicate rollout detection and reporting (f4e9e49)
- Added Prisma Client copy in Docker stage (ec77acf)
- Auto-create devices when assigning to cohorts (f58cd5b)
- build: Correct relative imports in version lifecycle routes to resolve module-not-found during Next build (21b9a0d)
- ci: Corrected typo in lint stage of Staging Pipeline (a2fda2a)
- ci: Removed tsx from Dockerfile (88e78d8)
- Cleaned up prisma Migrations (15fec12)
- Corrected CI Pipeline template (5209d7e)
- Corrected Migration (6e49672)
- improve S3 presigned URL generation and upload error handling (89acc6d)
- platform-owner: Finalise auth/rbac updates and ensure group listing aligns with new guards (a3284fe)
- prisma: Add Device.groupMemberships back-relation to satisfy FirmwareGroupDevice.device relation validation (30da89d)
- Remove minHwRev requirement so it is optional (42c2d91)
- Remove public from Dockerfile copy block (f17c261)
- Removed Copying files from prod stage (a558e2a)
- Resolve build issue in withdraw route (a5dfcdc)
- Resolve Next.js 15 build issues and type errors (03b3b8c)
- Resolve Prisma DeviceRolloutStatus enum issues and add device counts to cohorts (404f788)
- Resolve tenant-auth route imports (d6087ae)
Documentation
- Establish consistent tenant scoping requirements for all API endpoints (b34d8bb)
Features
- Add enhanced debug logging for tenant resolution in cohorts API - Add detailed logging to trace as_tenant parameter handling - Log auth mode, path tenant, and query parameters at each step - Track data being created in POST requests - Count items returned in GET requests - Enhanced requireTargetTenant logging to debug parameter extraction (f727081)
- Add proper tenant validation to firmware version lifecycle endpoints (94f6b2e)
- Add tenant-scoped firmware version lifecycle endpoints (de2a523)
- Added DB Migration (be60e46)
- Added health endpoints (ad5d715)
- Added SSE Endpoints for rollout stats (13eb595)
- Allow api-key callers through platform RBAC checks (fd54680)
- api: Add firmware versions list endpoint (64ad495)
- api: Enhance versions endpoint with product display names (c72e2b6)
- api: Rollout detail/devices endpoints + operator intents (pause/resume/cancel/promote) with RBAC & AMQP publish - Detail endpoint with KPIs and policy - Devices listing with filters and pagination - Intent routes publishing to AMQP and updating status - RolloutStatus enum: add 'cancelled' + migration - Tests added; docs updated (7814799)
- auth-mapping: Add FirmwareAuthMapping model, admin CRUD endpoints, and internal FusionAuth access-token exchange with in-memory cache + tests - Prisma model + migration - Admin routes guarded by AUTH_MAPPING_ADMIN with redacted secrets - Internal service token exchange guarded by SERVICE_ORCHESTRATOR with rate limiting - getFaAccessToken helper using Map+TTL cache and FA token POST - Tests for CRUD and token exchange behaviors Docs: implements docs/codex_prompt_firmware_api_fa_mapping.md (92c1f4b)
- auth: Add TenantAuthMap model + admin CRUD; update JWT verification to use DB map for JWKS selection; document endpoints - Prisma model + migration - lib/auth: resolve faTenantId via prisma.tenantAuthMap - Admin routes for tenant-auth mapping - Tests for admin list/upsert - Update API docs (596d303)
- cohorts: Drop groups compatibility; rename DB to Cohort/CohortDevice; implement /cohorts API and update rollouts + tests - Prisma: Cohort/CohortDevice models, migration renaming tables and groupId->cohortId - API: cohorts handlers for list/create/get/update/delete + membership and device-cohorts - Rollouts: accept cohorts_any with groups_any fallback, resolve via cohorts - Build: fix import paths in new routes - Tests: updated mocks and expectations (18d5954)
- Enable tenant-based firmware isolation (a46776a)
- groups+policy+audit: add FirmwareGroup, membership, and download audit; enforce policy gates; expand rollout cohorts; enrich approval event (b516c96)
- groups: Membership read APIs + serial resolver - GET groups/{groupId}/devices with pagination and search - GET devices/{deviceId}/groups list memberships - Add lib/devices resolver for serial→deviceId - Prisma relation for FirmwareGroupDevice.device - Tests added; docs updated (6e53993)
- groups: Tenant group CRUD + membership endpoints; OpenAPI docs; seed script - Routes: list/create, get/update/delete, replace membership - Validation schemas for group payloads - OpenAPI paths and schemas - Seed script and npm script - Tests for group flows (1213098)
- implement tenant-scoped release endpoint and update documentation (6d15479)
- lifecycle: Add submit/approve/withdraw/release endpoints; require tenant releases in manifest - Prisma: FirmwareRelease model present; FirmwareVersion state fields used - Routes: versions submit/approve/withdraw, releases create - Manifest: filters by FirmwareRelease for target tenant + state=released - Tests: add lifecycle tests; update manifest tests for new RBAC and release gating (3b95c62)
- Migrate uploads endpoint to tenant-aware architecture (48f294c)
- orchestrator-schema: Add IntentDedupe table (+ TTL index), Device.siteId and tenant/site index, and rollout tenant index - Prisma schema updates - Migration for IntentDedupe, Device.siteId, and indexes - Lint clean; tests passing (2b2398e)
- platform-owner: Add platform owner mode with as_tenant support - Env vars: PLATFORM_TENANT_SLUG, PLATFORM_FA_TENANT_ID, PLATFORM_SCOPE - lib/auth: verifyForPathTenant for dual-mode verification - lib/rbac: requireTenantScopeOrPlatform + requireTargetTenant - Rollout detail + intents honor platform mode and as_tenant; queries filter by target tenant - Update K8s configmap/secret for platform vars - Tests updated to reflect new guards (809dea8)
- Removed Next.js version (fbc48b3)
- service-token: Add service token auth and internal download-url endpoint - Env: SERVICE_ORCHESTRATOR_TOKENS in .env and K8s Secret - lib/service-auth.ts guard for internal routes - POST tenants/{tenantId}/internal/download-url for orchestrator with audit and policy checks - Protect internal FA token exchange with service-token fallback - Tests for internal route (49e524e)
- Trust api-auth headers for firmware-api auth (f289e97)
- Updated migrations to include firmware approvals (d321b04)
- Updated to more closly match the API Firmware contract following refactor to rust (e64558f)
- Use JWT tid claim for tenant validation instead of hardcoded mappings (acdce4b)
BREAKING CHANGES
- All firmware API endpoints now MUST follow tenant-scoped URL patterns
- Update firmware_api_endpoint_contract_v2.md with mandatory tenant scoping
- Add comprehensive tenant scoping rules and security guidelines
- Create portal_integration_guidelines.md with frontend integration patterns
- Add tenant_scoping_migration_checklist.md for implementation guidance
- Mark all non-tenant-scoped endpoints as deprecated
This prevents future security issues by ensuring consistent tenant isolation,
platform admin support, and clear audit trails across all API endpoints.Key Changes:
- /versions/{id}/submit → /tenants/{tenantId}/versions/{id}/submit
- /uploads → /tenants/{tenantId}/uploads
- /releases → /tenants/{tenantId}/releases
- All endpoints require tenant validation and as_tenant support
- stableService
Tenant API – 1.1.0
tenant-apiQualitytests: 16 passedcoverage: 0% line1.1.0 (2025-12-09)
Bug Fixes
- Added a check to skip organization role hierarchy validation if the user has PLATFORM_ADMIN scope. (b53245d)
- Correct set_user_roles calls to use FusionAuth user ID instead of tenant ID (e38c09a)
- Create ingress automatically when DNS verification succeeds (ceaff6e)
- Deletion of user of fusionauth (5c2d76b)
- Exclude deleted users from duplicate email check (4b5a77a)
- Lowercase env var keys to match struct field names (72bc7af)
- Prevent final env merge from overriding FUSIONAUTH_ISSUER (19ed068)
- Reactivate deleted users instead of failing with duplicate error (51a2174)
- Remove /api prefix from routes to match ingress pattern (7a45ad5)
- Remove invalid memberships join in get_user_highest_role (35a1181)
- Serialize DomainResponse as camelCase for frontend compatibility (16c4eba)
- Sync role template permissions to FusionAuth before assigning to user… (ede4d51)
- Use base issuer URL for FusionAuth tenants without appending slug (90e9ab8)
- Use letsencrypt-prod-http01 for tenant domain certificates (2f344e1)
Features
- Add continuous provisioning status monitoring for domains (38fbafc)
- Add CP_METER and REPORTING permissions to tenant seeding (67d1f03)
- Add custom app_name support for tenant branding (a76ab89)
- Add End User role template with meter and reporting permissions (3278ffb)
- Add FusionAuth credentials to domain tenant info for custom domain auth… (d7fdcc6)
- Add FusionAuth redirect URL update to automatic domain verification (f9691ae)
- Add FusionAuth user deletion and fix lambda configuration (7c78faa)
- Add health endpoint log filtering to reduce log noise (c43b992)
- Add logo_url and app_name to TenantInfo in domain lookup responses (f59fc1b)
- Add S3 logo upload, K8s ingress automation, and GitOps compatibility (93bd5b0)
- Added database and rabbitmq endpoints (8b3fb8c)
- Added Organisation Name to locations payload response (c1f1805)
- Added release configuration and moved docs (d77fae1)
- Added support for dynamic tenant logo (e1306d4)
- Auto-assign 'Charge Point Operator' role template when none provided (41d3743)
- Delete old logo from S3 when uploading new one (cdbeaea)
- Delete tenant logo from S3 when deleting tenant (3149c01)
- Delete TLS certificate secret when deleting domain ingress (0b18763)
- Improve domain lookup function for login support (5442e6a)
- Monitoring job creates ingresses for verified domains without them (6609d0f)
- Refactored permission to ensure frontend and backend is consistent (39b393a)
- release: Updated CI Pipeline dispatcher to use environment specific rust service template with release-api support (c5ccf97)
- Return organisation with tenant (1c7dfc2)
Reverts
- Remove camelCase serialization - keep tenant-api snake_case (4dc1e01)
- stableService
Meter API – 1.0.0
meter-apiQualitytests: 46 passedcoverage: 0% line1.0.0 (2025-12-09)
Bug Fixes
- Add AMQP queue and exchange declaration to prevent NOT_FOUND errors (62481fd)
- Configure service for port 80 access and enhanced staging logs (55bece0)
- Corrected Exchange name and queue (d6e65c7)
- Prevent AMQP consumer from exiting on connection loss (14f5788)
- Resolve clippy warnings with allow annotations (224486f)
- Update route syntax from Axum v0.6 (:) to v0.7+ ({}) format (317719f)
- Updated device routing keys to enable processing device-setup payloads (cde23bb)
Features
- Add health endpoint log filtering to reduce log noise (e7e6f03)
- Added CI Pipeline config (a27e525)
- Added device storage (a9e203f)
- Added health endpoints for database and rabbitmq (f1c5cdf)
- Changed all provisioning queues to upsert (f9c2ea2)
- Consume meter samples from OCPP core via AMQP (ac6bfdd)
- Fixed DeviceCreatedMessage to match device-setup's payload (Uuid instead of String for entity_id) (a9e1f29)
- Implement event-driven architecture with AMQP publisher and extended handlers (4e09d98)
- Updated http port to 8088 (954dc1a)
- stableService
Ocpp API – 1.0.1
ocpp-apiQualitytests: 28 passedcoverage: 0% line1.0.1 (2025-12-09)
Bug Fixes
- Test Release CI Publication (eb0b624)
- stableService
API Auth – 1.0.0
api-authQualitytests: 64 passedcoverage: 0% line1.0.0 (2025-12-09)
Bug Fixes
- Add lookup method to find tenant mapping by FusionAuth UUID (a58ec19)
- Add openssl to container image to resolve issues with Prisma client (6251a79)
- Added openssl 3 config for generator client (d47f634)
- Api Key search tenantId or tenantSlug (f794255)
- Corrected health check (d408f67)
- Handle auth_request URIs without /api/service prefix in tenant extraction (3df7a61)
- Hide health log output to container console (bc8db72)
- Improved URL matching as part of the tenantId detection for /verify (e4d9eb7)
- Increase SSE connection limit and sse detection logic, increased SSE test coverage (39f1fb3)
- Removed duplicate releaserc file (a251636)
- Removed missing path copy statement in Dockerfile (3b9eb6b)
- Resolved build issues (c62c03d)
- Resolved regex build issue (63cb213)
- Set both tenant_id and tenant_slug when creating API keys (888561c)
- Support both versioned and non-versioned API paths in tenant URI parsing (ae5d2fa)
- Updated auth to check correct fusionauth field (86c2b8b)
- Updated tenant map (5abdcd5)
- Updated the key-creation payload schema so expiresAt can be null as well as an ISO string (ec6be4d)
- Updated the regex so /verify can extract tenant slugs from paths. (5fa2a35)
- Updated verify endpoint to check req.url (a3beaec)
Features
- Accept tenantId and tenantSlug from request body (8861376)
- Add release config file (ae95d0a)
- Add support for multiple JWT_AUDIENCE's (07ea3e7)
- Added additional error logs for authentication failures to assist with developer troubleshooting (8c4c678)
- Added API Key CRUD handlers (ccd1a16)
- Added health handlers (157ada9)
- Added platform admin role to API Key issue auth check (51734d1)
- Added Platform Admin scope to service tokens (0d14992)
- Added release config (9420614)
- Added release config (1c9a14d)
- Added support for API Keys (cf7cae1)
- Grant scope to service tokens (0ae6c5f)
- Hide helath check logs (2aa27db)
- Refactored and built as a rust application to increase performance and implement rate limiting (3091343)
- Support both tenant ID and slug for API key validation (5a1cf11)
- Updated Dockerfile for rust application (f95e690)
- Updated platform detection so JWTs whose tenantId matches either PLATFORM_TENANT_SLUG or PLATFORM_FA_TENANT_ID are treated as platform tokens. (2fb11c1)