1.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