API & Services
High-level overview of API integration and services in AquaGen.
API Client
Overview
Central HTTP client using Axios 1.10.0 for all API calls.
Location: libs/shared/src/services/api/apiClient.js
Configuration
- Base URL:
https://prod-aquagen.azurewebsites.net/api/user/ - Timeout: 50 seconds
- Token: JWT Bearer authentication
Request Interceptor
Automatically adds to every request:
Authorization: Bearer {token}x-browser-name- Browser infox-browser-version- Versionx-device-type- Desktop/mobilex-os- Operating systemx-device-id- Device fingerprint
Response Interceptor
Handles special status codes:
- 200 - Success
- 400 - Bad request
- 401 - Unauthorized → Redirect to login
- 420 - Payment required → Subscription expired
- 440 - Token expired → Refresh token
- 500 - Server error
Methods
import { apiClient } from '@aquagen-mf-webapp/shared/services';
// GET request
const data = await apiClient.get('/endpoint');
// POST request
const result = await apiClient.post('/endpoint', { data });
// PUT request
await apiClient.put('/endpoint', { data });
// DELETE request
await apiClient.del('/endpoint');
// File upload
await apiClient.postFile('/upload', formData);
Core Services
1. Analytics Service
Purpose: Track user events and page views
Providers:
- Google Analytics 4
- Mixpanel
Location: libs/shared/src/services/analytics/
Usage:
import { AnalyticsService } from '@aquagen-mf-webapp/shared/services';
AnalyticsService.sendEvent('BUTTON_CLICK', { button: 'save' });
AnalyticsService.pageView('/dashboard');
2. Device Fingerprint Service
Purpose: Unique device identification using FingerprintJS
Location: libs/shared/src/services/deviceFingerprint/
Collects:
- Browser info
- Device type
- Screen resolution
- OS details
- Unique hash
3. WebSocket Service
Purpose: Real-time data updates via Azure Web PubSub
Location: libs/shared/src/services/websocket/
Features:
- Live water data updates
- Alert notifications
- Real-time monitoring
4. Local Storage Service
Purpose: Browser localStorage wrapper
Location: libs/shared/src/services/localdb/
Usage:
import { LocalDBInstance, LocalDBKeys } from '@aquagen-mf-webapp/shared/services';
// Store data
LocalDBInstance.setItem(LocalDBKeys.loginResponse, data);
// Retrieve data
const data = LocalDBInstance.getItem(LocalDBKeys.loginResponse);
// Remove
LocalDBInstance.removeItem(LocalDBKeys.loginResponse);
5. Session Storage Service
Purpose: Browser sessionStorage wrapper
Location: libs/shared/src/services/sessionStorage/
Usage: Similar to LocalDB but session-scoped
6. Notification Service
Purpose: Browser push notifications
Location: libs/shared/src/services/notificationUtil.js
Features:
- Request notification permission
- Show browser notifications
- Handle notification clicks
API Endpoints
Authentication
POST /login- User loginPOST /logout- User logoutPOST /refresh- Refresh tokenPOST /otp/send- Send OTPPOST /otp/verify- Verify OTP
Dashboard
GET /landingPage/userData- Dashboard dataGET /landingPage/monthsData- Monthly summary
Monitoring
GET /deviceData- Device dataGET /deviceDataV2- Device data v2GET /granular/category- Granular dataGET /granular/unit- Unit data
Alerts
GET /alerts- Get alertsGET /alerts/unitGraph- Alert graphsPOST /alerts/acknowledge- Acknowledge alert
Water Features
GET /waterBalance/data- Water balanceGET /waterNeutrality- Neutrality dataGET /wri/- Water Risk IndexGET /gwi/data- Ground Water Index
AI
POST /gpt/aqua- AquaGPT chatGET /gpt/stream/aqua- Streaming responses
SCADA
GET /scada/graphEditor- SCADA editor dataPOST /scada/data- Save SCADA diagram
Account
GET /accounts/settings- User settingsPUT /accounts/settings- Update settingsGET /accounts/landingpage- Account info
Reports
GET /reports/- Generate reportsPOST /reports/schedule- Schedule report
Environment URLs
| Environment | Base URL |
|---|---|
| Production | https://prod-aquagen.azurewebsites.net/api/user/ |
| Dev | https://dev2-aquagenapi.azurewebsites.net/api/user/ |
| Demo | https://aqua-demo-api.azurewebsites.net/api/user/ |
| Local | http://localhost:5001/api/user/ |
Location: libs/shared/src/services/api/urls.js
Error Handling
try {
const data = await apiClient.get('/endpoint');
// Handle success
} catch (error) {
if (error.response?.status === 401) {
// Unauthorized - redirect to login
} else if (error.response?.status === 440) {
// Token expired - refresh
} else {
// Other error
console.error(error);
}
}
Integration Pattern
Component
│
▼
Store (Context)
│
▼
Controller (Business Logic)
│
▼
DataSource (API Calls)
│
▼
API Client (Axios)
│
▼
Backend API
Best Practices
- Use apiClient - Don't create new axios instances
- Handle errors - Always use try/catch
- Check token - API client handles automatically
- Use interceptors - Don't manually add headers
- Follow patterns - Component → Store → Controller → DataSource → API
Next Steps
- See Authentication for login API
- Check State Management for data flow
- Review Permissions for API access control
Last Updated: February 2026