75 lines
2.5 KiB
Markdown
75 lines
2.5 KiB
Markdown
# Project Readme Hints
|
|
|
|
## Architecture Overview
|
|
|
|
This package implements a comprehensive UniFi API client supporting four different UniFi applications:
|
|
|
|
### Entry Points
|
|
|
|
1. **UnifiAccount** - Site Manager (cloud) API
|
|
- Uses API key authentication via `X-API-Key` header
|
|
- Base URL: `https://api.ui.com/v1`
|
|
- Managers: SiteManager, HostManager
|
|
|
|
2. **UnifiController** - Network Controller API (local)
|
|
- Uses session cookie authentication
|
|
- Supports multiple controller types: `unifi-os`, `udm-pro`, `standalone`
|
|
- Managers: DeviceManager, ClientManager
|
|
|
|
3. **UnifiProtect** - Protect NVR API (local)
|
|
- Uses session cookie + CSRF token authentication
|
|
- Fetches bootstrap on login for camera/NVR info
|
|
- Manager: CameraManager
|
|
|
|
4. **UnifiAccess** - Access Controller API (local)
|
|
- Uses bearer token authentication
|
|
- Default port: 12445
|
|
- Manager: DoorManager
|
|
|
|
### Key Files
|
|
|
|
- `ts/classes.unifihttp.ts` - Base HTTP client with SSL handling
|
|
- `ts/interfaces/*.ts` - All TypeScript interfaces
|
|
- `ts/unifi.logger.ts` - Logging utility
|
|
|
|
### Authentication Notes
|
|
|
|
- **UniFi OS consoles** (UDM, UDM Pro, Cloud Key Gen2+) authenticate at console level (`/api/auth/login`) then access Network API via `/proxy/network`
|
|
- **Standalone controllers** authenticate directly at `/api/login`
|
|
- **Protect API** is behind `/proxy/protect/api`
|
|
- **Access API** uses port 12445 with bearer token
|
|
|
|
### SSL/TLS
|
|
|
|
All local APIs default to `verifySsl: false` to support self-signed certificates common on UniFi devices.
|
|
|
|
### Testing Environment Variables
|
|
|
|
Required in `.nogit/env.json`:
|
|
```json
|
|
{
|
|
"UNIFI_CONSOLE_IP": "192.168.x.x",
|
|
"UNIFI_NETWORK_DEV_KEY": "xxx",
|
|
"UNIFI_PROTECT_DEV_KEY": "xxx"
|
|
}
|
|
```
|
|
|
|
### Test Files
|
|
|
|
- `test/test.ts` - Unit tests (no credentials needed)
|
|
- `test/test.network.ts` - Network Controller integration tests
|
|
- `test/test.protect.ts` - Protect API integration tests (defensive - handles missing NVR/camera data gracefully)
|
|
|
|
### API Notes
|
|
|
|
- **Network API** works perfectly with local console API keys
|
|
- **Protect API** bootstrap structure may vary - NVR info may not be available with API key auth
|
|
- **Events endpoint** may return array or `{data: [...]}` format - CameraManager handles both
|
|
- **Site Manager cloud API** (`api.ui.com`) requires different keys (from ui.com portal), not local console keys
|
|
|
|
### Documentation Sources
|
|
|
|
- Local docs in `.nogit/docs/` contain OpenAPI specs from console
|
|
- Network API: `/unifi-api/network` on console
|
|
- Protect API: `/unifi-api/protect` on console
|