Sequence Diagrams

Visual representations of the IDI Integration API interaction flows.

Mission Flow

sequenceDiagram
    autonumber
    participant Client
    participant REST API
    participant MQTT Broker
    participant WSS Server
    participant Drone System
    participant Dock

    rect rgb(240, 248, 255)
        Note over Client,REST API: Phase 1: Mission Creation
        Client->>REST API: POST /v3/jobs/create<br/>[JWT + Idempotency-Key]
        REST API->>REST API: Validate JWT & Idempotency
        REST API->>Drone System: Queue Mission Command
        REST API-->>Client: 201 Created {jobID}
    end

    rect rgb(255, 248, 240)
        Note over Client,WSS Server: Phase 2: Subscribe to Updates (MQTTS or WSS)
        alt MQTTS Connection
            Client->>MQTT Broker: CONNECT [JWT as password]
            MQTT Broker-->>Client: CONNACK
            Client->>MQTT Broker: SUBSCRIBE {jobID}/JOB/STATUS
            MQTT Broker-->>Client: SUBACK
        else WSS Connection
            Client->>WSS Server: WSS /v3/jobs/{jobID}/status/ws<br/>[JWT token]
            WSS Server-->>Client: 101 Switching Protocols
        end
    end

    rect rgb(240, 255, 240)
        Note over Drone System,Client: Phase 3: Mission Execution
        Dock->>Dock: Open hatch
        Drone System->>MQTT Broker: Publish: PENDING → INPROGRESS
        MQTT Broker->>WSS Server: Forward status
        par Notify via MQTTS
            MQTT Broker-->>Client: Job Status Update
        and Notify via WSS
            WSS Server-->>Client: Job Status Update
        end

        loop Every 1 second (1 Hz)
            Drone System->>MQTT Broker: Publish telemetry<br/>{navigation, droneState}
            MQTT Broker->>WSS Server: Forward telemetry
            par MQTTS Stream
                MQTT Broker-->>Client: Status Update
            and WSS Stream
                WSS Server-->>Client: Status Update
            end
        end

        Drone System->>MQTT Broker: Publish: INPROGRESS → COMPLETED
        MQTT Broker->>WSS Server: Forward completion
        par MQTTS Notification
            MQTT Broker-->>Client: Job Completed
        and WSS Notification
            WSS Server-->>Client: Job Completed
        end
    end

Authentication Flow

sequenceDiagram
    autonumber
    participant Client
    participant Auth Server
    participant REST API
    participant MQTT Broker
    participant WSS Server

    rect rgb(255, 245, 238)
        Note over Client,Auth Server: JWT Acquisition
        Client->>Auth Server: POST /auth/token<br/>{client_id, client_secret}
        Auth Server->>Auth Server: Validate credentials
        Auth Server-->>Client: {access_token, expires_in, scope}
    end

    rect rgb(240, 248, 255)
        Note over Client,REST API: REST Authentication
        Client->>REST API: POST /v3/jobs/create<br/>Authorization: Bearer {token}
        REST API->>REST API: Validate JWT signature & claims
        REST API-->>Client: 201 Created
    end

    rect rgb(255, 248, 240)
        Note over Client,MQTT Broker: MQTTS Authentication
        Client->>MQTT Broker: CONNECT<br/>username: {client_id}<br/>password: {jwt_token}
        MQTT Broker->>MQTT Broker: Validate JWT
        MQTT Broker-->>Client: CONNACK (success)
    end

    rect rgb(240, 255, 240)
        Note over Client,WSS Server: WebSocket Authentication
        Client->>WSS Server: WSS Upgrade Request<br/>?token={jwt_token}
        WSS Server->>WSS Server: Validate JWT
        WSS Server-->>Client: 101 Switching Protocols
    end

Stream Sharing Flow

sequenceDiagram
    autonumber
    participant Manager
    participant REST API
    participant External Viewer
    participant MQTT Broker
    participant Drone System

    rect rgb(240, 248, 255)
        Note over Manager,REST API: Create Share Link
        Manager->>REST API: POST /v3/streams/share<br/>{DeviceGroupID, role: VIEWER, timeout: 60}
        REST API->>REST API: Validate MANAGER role
        REST API->>REST API: Generate shareID & expiry
        REST API-->>Manager: 201 {shareID, shareLink, expiresAt}
    end

    Manager->>External Viewer: Share link via email/chat

    rect rgb(255, 248, 240)
        Note over External Viewer,MQTT Broker: External Access via Share
        External Viewer->>MQTT Broker: CONNECT<br/>credentials: {shareID}
        MQTT Broker->>MQTT Broker: Validate shareID & expiry
        MQTT Broker-->>External Viewer: CONNACK
        External Viewer->>MQTT Broker: SUBSCRIBE {shareID}/SHARE/STATUS
    end

    rect rgb(240, 255, 240)
        Note over Drone System,External Viewer: Filtered Telemetry Stream
        loop Every 1 second
            Drone System->>MQTT Broker: Full telemetry
            MQTT Broker->>MQTT Broker: Filter by VIEWER role
            MQTT Broker-->>External Viewer: Filtered status update
        end
    end

    rect rgb(255, 240, 240)
        Note over MQTT Broker,External Viewer: Share Expiration
        MQTT Broker->>MQTT Broker: shareID expired
        MQTT Broker-->>External Viewer: DISCONNECT
    end

Resource Status Monitoring

sequenceDiagram
    autonumber
    participant Client A
    participant Client B
    participant MQTT Broker
    participant WSS Server
    participant Device Group

    par MQTTS Connection
        Client A->>MQTT Broker: CONNECT [JWT]
        MQTT Broker-->>Client A: CONNACK
        Client A->>MQTT Broker: SUBSCRIBE<br/>{DeviceGroupID}/DEVICE/STATUS
        MQTT Broker-->>Client A: SUBACK
    and WSS Connection
        Client B->>WSS Server: WSS /v3/devices/{DeviceGroupID}/status/ws
        WSS Server-->>Client B: 101 Upgrade
    end

    loop Every 1 second (1 Hz)
        Device Group->>Device Group: Collect telemetry

        par Broadcast to all subscribers
            Device Group->>MQTT Broker: Publish status
            MQTT Broker-->>Client A: {droneState, dockState,<br/>navigation, weather}
        and
            Device Group->>WSS Server: Push status
            WSS Server-->>Client B: {droneState, dockState,<br/>navigation, weather}
        end
    end

Error Handling Flow

sequenceDiagram
    autonumber
    participant Client
    participant REST API
    participant MQTT Broker

    rect rgb(255, 240, 240)
        Note over Client,REST API: Authentication Error
        Client->>REST API: POST /v3/jobs/create<br/>[Invalid/Expired JWT]
        REST API-->>Client: 401 Unauthorized<br/>{error: "INVALID_TOKEN"}
    end

    rect rgb(255, 245, 238)
        Note over Client,REST API: Idempotency Conflict
        Client->>REST API: POST /v3/jobs/create<br/>[Same Idempotency-Key, Different Payload]
        REST API-->>Client: 409 Conflict<br/>{error: "IDEMPOTENCY_CONFLICT"}
    end

    rect rgb(255, 248, 240)
        Note over Client,REST API: Rate Limit Exceeded
        Client->>REST API: POST /v3/jobs/create (61st request)
        REST API-->>Client: 429 Too Many Requests<br/>X-RateLimit-Reset: {timestamp}
    end

    rect rgb(240, 240, 255)
        Note over Client,MQTT Broker: Connection Failure Recovery
        Client->>MQTT Broker: CONNECT [JWT]
        MQTT Broker-->>Client: CONNACK
        Client->>MQTT Broker: SUBSCRIBE {jobID}/JOB/STATUS

        Note over MQTT Broker: Connection lost
        MQTT Broker--xClient: Disconnect

        Client->>Client: Exponential backoff
        Client->>MQTT Broker: RECONNECT [JWT]
        MQTT Broker-->>Client: CONNACK
        Client->>MQTT Broker: RE-SUBSCRIBE
    end

Drone State Transitions

stateDiagram-v2
    [*] --> DOCKED: Initial State

    DOCKED --> GPS_NORMAL: Dock Opens / Pre-flight Check
    GPS_NORMAL --> WAYPOINT: Mission Started
    GPS_NORMAL --> HOVER: Hover Command
    GPS_NORMAL --> ORBIT: Orbit Command

    WAYPOINT --> HOVER: Waypoint Reached
    WAYPOINT --> RETURNING: Mission Complete / Low Battery

    HOVER --> WAYPOINT: Continue Mission
    HOVER --> ORBIT: Switch to Orbit
    HOVER --> RETURNING: Return Command

    ORBIT --> HOVER: Exit Orbit
    ORBIT --> RETURNING: Return Command

    RETURNING --> LANDED: Approach Dock
    LANDED --> DOCKED: Dock Closes

    MANUAL --> GPS_NORMAL: Auto Mode Enabled
    GPS_NORMAL --> MANUAL: Manual Override

    note right of DOCKED: Charging/Cooling
    note right of WAYPOINT: Following Mission Path
    note right of RETURNING: RTH Active

Job State Lifecycle

stateDiagram-v2
    [*] --> PENDING: CreateJob API Called

    PENDING --> INPROGRESS: Drone Launched
    PENDING --> CANCELLED: User Cancellation
    PENDING --> FAILED: Pre-flight Check Failed

    INPROGRESS --> COMPLETED: Mission Successful
    INPROGRESS --> FAILED: Error During Execution
    INPROGRESS --> CANCELLED: User Cancellation

    COMPLETED --> [*]
    FAILED --> [*]
    CANCELLED --> [*]

    note right of PENDING: Awaiting drone availability
    note right of INPROGRESS: Telemetry streaming at 1Hz
    note right of COMPLETED: Final status published

System Architecture

flowchart TB
    subgraph Clients
        WebApp[Web Application]
        MobileApp[Mobile App]
        ThirdParty[Third-Party Integration]
    end

    subgraph "IDI-FLY-V3 API Gateway"
        REST[REST API<br/>HTTPS :443]
        WSS[WebSocket Server<br/>WSS :443]
        MQTT[MQTT Broker<br/>MQTTS :8883]
    end

    subgraph "Core Services"
        Auth[Auth Service<br/>JWT Validation]
        JobMgr[Job Manager]
        ShareMgr[Share Manager]
        Telemetry[Telemetry Processor]
    end

    subgraph "Field Devices"
        Drone1[Drone System 1]
        Dock1[Dock Platform 1]
        Drone2[Drone System 2]
        Dock2[Dock Platform 2]
    end

    WebApp --> REST
    WebApp --> WSS
    MobileApp --> REST
    MobileApp --> MQTT
    ThirdParty --> REST
    ThirdParty --> MQTT

    REST --> Auth
    WSS --> Auth
    MQTT --> Auth

    REST --> JobMgr
    REST --> ShareMgr

    JobMgr --> Telemetry
    ShareMgr --> Telemetry

    Telemetry --> WSS
    Telemetry --> MQTT

    Drone1 --> Telemetry
    Dock1 --> Telemetry
    Drone2 --> Telemetry
    Dock2 --> Telemetry

IDI Integration API Documentation © 2025