Init claude commit.
This commit is contained in:
130
CLAUDE.md
Normal file
130
CLAUDE.md
Normal file
@ -0,0 +1,130 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Overview
|
||||
|
||||
This is a TypeScript client library for controlling Eufy Security devices by connecting to Eufy cloud servers and local/remote stations over P2P. The library is published to npm as `eufy-security-client`.
|
||||
|
||||
**Important:** This project is NOT affiliated with Anker/Eufy Security. It is a personal project maintained in spare time.
|
||||
|
||||
## Development Commands
|
||||
|
||||
### Build
|
||||
```bash
|
||||
npm run build # Full build (compiles TypeScript)
|
||||
npm run build:ts # TypeScript compilation + copy proto files
|
||||
```
|
||||
|
||||
### Development
|
||||
```bash
|
||||
npm run watch # Watch mode (auto-recompile on changes)
|
||||
npm run watch:ts # Watch TypeScript files only
|
||||
```
|
||||
|
||||
### Linting
|
||||
```bash
|
||||
npm run lint # Run ESLint on TypeScript source files
|
||||
```
|
||||
|
||||
### Testing
|
||||
Currently, there are no tests configured (`npm test` exits with error).
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
The library is organized into four major subsystems, each with its own directory:
|
||||
|
||||
1. **HTTP API (`src/http/`)** - Eufy Cloud API communication
|
||||
- `api.ts`: Main HTTPApi class handling authentication and cloud requests
|
||||
- `device.ts`: Device class hierarchy (Camera, Lock, Doorbell, Sensor types, etc.)
|
||||
- `station.ts`: Station/Hub management
|
||||
- Uses encrypted API v2 communication with RSA/ECDH key exchange
|
||||
- Handles authentication including 2FA and captcha
|
||||
|
||||
2. **P2P Communication (`src/p2p/`)** - Direct peer-to-peer connection with stations/devices
|
||||
- `session.ts`: P2PClientProtocol handles UDP-based P2P protocol
|
||||
- Supports local and remote connectivity to stations
|
||||
- Handles livestreaming, video download, commands (lock/unlock, enable/disable, etc.)
|
||||
- Complex packet sequencing and encryption handling
|
||||
- Supports multiple encryption types (none, type1, type2)
|
||||
|
||||
3. **Push Notifications (`src/push/`)** - Unified push message interface
|
||||
- `service.ts`: PushNotificationService manages FCM-based notifications
|
||||
- `parser.ts`: Normalizes different push notification types
|
||||
- Handles motion, person detection, doorbell ring events, etc.
|
||||
|
||||
4. **MQTT (`src/mqtt/`)** - MQTT subscription for certain devices
|
||||
- Supports Smart Lock Touch & Wifi and similar MQTT-enabled devices
|
||||
|
||||
### Main Entry Point
|
||||
|
||||
- **`src/eufysecurity.ts`**: The `EufySecurity` class is the high-level orchestrator
|
||||
- Must be initialized with `EufySecurity.initialize()` (async factory pattern)
|
||||
- Manages all stations, devices, and houses
|
||||
- Coordinates HTTP API, P2P connections, push notifications, and MQTT
|
||||
- Emits typed events for device/station state changes
|
||||
- Handles persistent data storage for credentials and state
|
||||
|
||||
### Key Design Patterns
|
||||
|
||||
- **Typed Event Emitters**: Uses `tiny-typed-emitter` throughout for type-safe events
|
||||
- **Async Initialization**: Main classes use static `initialize()` factory methods instead of constructors
|
||||
- **Persistent Data**: Credentials and session data saved to filesystem (default: `.eufy-security-client/`)
|
||||
- **Property System**: Devices/stations have a metadata-driven property system with read-only/write restrictions
|
||||
- **Command Queue**: P2P commands are queued and executed sequentially per station
|
||||
|
||||
### Communication Layers
|
||||
|
||||
```
|
||||
EufySecurity (High-level API)
|
||||
├── HTTPApi (Cloud API for device metadata, authentication)
|
||||
├── P2PClientProtocol (Direct station communication for commands/streaming)
|
||||
├── PushNotificationService (Real-time event notifications)
|
||||
└── MQTTService (MQTT-enabled device events)
|
||||
```
|
||||
|
||||
### Device Hierarchy
|
||||
|
||||
All devices inherit from base `Device` class with specialized subclasses:
|
||||
- Camera types: `Camera`, `IndoorCamera`, `SoloCamera`, `FloodlightCamera`, `WallLightCam`, `GarageCamera`
|
||||
- Doorbell types: `BatteryDoorbellCamera`, `WiredDoorbellCamera`, `DoorbellLock`
|
||||
- Lock types: `Lock`, `LockKeypad`
|
||||
- Sensors: `EntrySensor`, `MotionSensor`
|
||||
- Other: `Keypad`, `SmartSafe`, `SmartDrop`, `Tracker`
|
||||
|
||||
Each device type has specific properties and commands based on hardware capabilities.
|
||||
|
||||
## TypeScript Configuration
|
||||
|
||||
- Target: ES2022
|
||||
- Module: Node16 with Node16 resolution
|
||||
- Strict mode enabled
|
||||
- Build output: `build/` directory
|
||||
- Source maps generated
|
||||
- Declaration files (`.d.ts`) generated for npm package
|
||||
|
||||
## Publishing
|
||||
|
||||
- Main entry: `build/index.js`
|
||||
- Requires Node.js >= 20.0.0
|
||||
- Uses `prepublishOnly` script to ensure build runs before publishing
|
||||
- Proto files (`.proto`) and certificates (`.crt`) are copied to build directory
|
||||
|
||||
## P2P Protocol Notes
|
||||
|
||||
The P2P protocol is UDP-based with custom sequencing and encryption:
|
||||
- Supports local (LAN) and remote (through Eufy cloud) connections
|
||||
- Uses magic word `0xf1e2d3c4` in packet headers
|
||||
- Multiple encryption modes with AES and RSA
|
||||
- Handles livestreaming with separate video/audio packet sequencing
|
||||
- Energy-saving devices have different keepalive/timeout strategies
|
||||
- Smart locks use BLE-style command structures wrapped in P2P
|
||||
|
||||
## Logging
|
||||
|
||||
Uses `typescript-logging` with category-based logging:
|
||||
- Categories: HTTP, P2P, PUSH, MQTT
|
||||
- Configurable log levels per category
|
||||
- Default logger can be replaced via `EufySecurity.initialize()` config
|
||||
Reference in New Issue
Block a user