Skip to main content

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 info
  • x-browser-version - Version
  • x-device-type - Desktop/mobile
  • x-os - Operating system
  • x-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 login
  • POST /logout - User logout
  • POST /refresh - Refresh token
  • POST /otp/send - Send OTP
  • POST /otp/verify - Verify OTP

Dashboard

  • GET /landingPage/userData - Dashboard data
  • GET /landingPage/monthsData - Monthly summary

Monitoring

  • GET /deviceData - Device data
  • GET /deviceDataV2 - Device data v2
  • GET /granular/category - Granular data
  • GET /granular/unit - Unit data

Alerts

  • GET /alerts - Get alerts
  • GET /alerts/unitGraph - Alert graphs
  • POST /alerts/acknowledge - Acknowledge alert

Water Features

  • GET /waterBalance/data - Water balance
  • GET /waterNeutrality - Neutrality data
  • GET /wri/ - Water Risk Index
  • GET /gwi/data - Ground Water Index

AI

  • POST /gpt/aqua - AquaGPT chat
  • GET /gpt/stream/aqua - Streaming responses

SCADA

  • GET /scada/graphEditor - SCADA editor data
  • POST /scada/data - Save SCADA diagram

Account

  • GET /accounts/settings - User settings
  • PUT /accounts/settings - Update settings
  • GET /accounts/landingpage - Account info

Reports

  • GET /reports/ - Generate reports
  • POST /reports/schedule - Schedule report

Environment URLs

EnvironmentBase URL
Productionhttps://prod-aquagen.azurewebsites.net/api/user/
Devhttps://dev2-aquagenapi.azurewebsites.net/api/user/
Demohttps://aqua-demo-api.azurewebsites.net/api/user/
Localhttp://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

  1. Use apiClient - Don't create new axios instances
  2. Handle errors - Always use try/catch
  3. Check token - API client handles automatically
  4. Use interceptors - Don't manually add headers
  5. Follow patterns - Component → Store → Controller → DataSource → API

Next Steps


Last Updated: February 2026