# sealad886/homebridge-blink-cameras-new-api architecture

> Architecture diagram of the GitHub repository sealad886/homebridge-blink-cameras-new-api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sealad886/homebridge-blink-cameras-new-api
- Repository: https://github.com/sealad886/homebridge-blink-cameras-new-api
- Video tour (about a minute): https://gitdiagram.com/sealad886/homebridge-blink-cameras-new-api/video

## Overview

This is a Homebridge plugin that turns Blink accounts and devices into HomeKit controls, sensors, cameras, and optional Secure Video recordings. The main path is platform startup and device discovery, then HomeKit accessory behavior; live media and native-clip recording are distinct branches. OAuth and settings provide account onboarding, while the Blink API layer handles authenticated cloud operations. Edges reflect the supplied excerpts, SOURCE INDEX references, and README; several unsampled accessory and API details are therefore represented at subsystem level.

Main entry points: [`src/platform.ts`](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/platform.ts) (Platform runtime), [`src/native-recording-runtime.ts`](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/native-recording-runtime.ts) (Recording runtime), [`src/blink-api/client.ts`](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/client.ts) (Blink API client), [`src/homebridge-ui/hosted-auth-service.ts`](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/hosted-auth-service.ts) (Hosted sign-in)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_platform["Homebridge Platform"]
  node_platform["Platform runtime<br/>[platform.ts]"]
  node_settings["Settings inventory"]
  node_ui["Settings UI<br/>[settings-ui.js]"]
  node_ui_server["UI server<br/>[server.ts]"]
  node_hosted_auth["Hosted sign-in"]
end

subgraph group_blink["Blink Integration"]
  node_api_client["Blink API client<br/>[client.ts]"]
  node_auth["OAuth authentication<br/>[auth.ts]"]
  node_auth_store["Credential storage<br/>[auth-storage.ts]"]
  node_secure_file["Secure file I/O"]
  node_http["HTTP transport<br/>[http.ts]"]
  node_validation["Domain validation"]
  node_motion_events["Motion decoding<br/>[motion-events.ts]"]
  node_fcm["Push event source<br/>[source.ts]"]
  node_native_storage["Native clip storage<br/>[native-storage.ts]"]
end

subgraph group_homekit["HomeKit Devices"]
  node_network["Network controls<br/>[network.ts]"]
  node_camera["Camera accessories<br/>[camera.ts]"]
  node_doorbell["Doorbell accessories<br/>[doorbell.ts]"]
  node_owl["Owl accessories<br/>[owl.ts]"]
end

subgraph group_media["Media and Recording"]
  node_camera_source["Camera source<br/>[camera-source.ts]"]
  node_media_session["Media session<br/>[media-session.ts]"]
  node_media_worker["Codec worker<br/>[media-worker.ts]"]
  node_media_output["Media output<br/>[media-output.ts]"]
  node_recording_runtime["Recording runtime"]
  node_recording_coordinator["Clip coordinator"]
  node_recording_delegate["Recording delegate"]
end

node_operator(("Homebridge user"))
node_cloud(("Blink cloud"))

node_operator -->|"configures"| node_ui
node_ui -->|"submits settings"| node_ui_server
node_ui_server -->|"dispatches sign-in"| node_hosted_auth
node_hosted_auth -->|"starts login"| node_api_client
node_hosted_auth -->|"loads credentials"| node_auth_store
node_auth_store -->|"reads and writes"| node_secure_file
node_platform -->|"reads settings"| node_settings
node_platform -->|"uses client"| node_api_client
node_platform -->|"configures streaming"| node_camera_source
node_platform -->|"creates runtime"| node_recording_runtime
node_api_client -->|"uses authentication"| node_auth
node_api_client -->|"sends requests"| node_http
node_api_client -->|"validates responses"| node_validation
node_http -->|"requests API"| node_cloud
node_platform -->|"exposes controls"| node_network
node_platform -->|"exposes devices"| node_camera
node_platform -->|"exposes devices"| node_doorbell
node_platform -->|"exposes devices"| node_owl
node_camera_source -->|"reads camera data"| node_api_client
node_camera_source -->|"creates sessions"| node_media_session
node_media_session -->|"uses worker"| node_media_worker
node_media_session -->|"writes output"| node_media_output
node_media_worker -->|"produces media"| node_media_output
node_recording_runtime -->|"receives push events"| node_fcm
node_recording_runtime -->|"decodes motion"| node_motion_events
node_fcm -->|"provides notifications"| node_motion_events
node_motion_events -->|"notifies"| node_recording_coordinator
node_recording_runtime -->|"coordinates clips"| node_recording_coordinator
node_recording_runtime -->|"uses delegate"| node_recording_delegate
node_recording_runtime -->|"retrieves clips"| node_native_storage

click node_platform "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/platform.ts"
click node_settings "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/settings-inventory.ts"
click node_ui "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/public/settings-ui.js"
click node_ui_server "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/server.ts"
click node_hosted_auth "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/hosted-auth-service.ts"
click node_api_client "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/client.ts"
click node_auth "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/auth.ts"
click node_auth_store "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/auth-storage.ts"
click node_secure_file "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/secure-json-file.ts"
click node_http "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/http.ts"
click node_validation "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/domain-validation.ts"
click node_motion_events "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/motion-events.ts"
click node_fcm "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/fcm/source.ts"
click node_network "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/network.ts"
click node_camera "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/camera.ts"
click node_doorbell "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/doorbell.ts"
click node_owl "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/owl.ts"
click node_camera_source "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/camera-source.ts"
click node_media_session "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/media-session.ts"
click node_media_worker "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/media-worker.ts"
click node_media_output "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/media-output.ts"
click node_recording_runtime "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/native-recording-runtime.ts"
click node_recording_coordinator "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/native-recording-coordinator.ts"
click node_recording_delegate "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/native-recording-delegate.ts"
click node_native_storage "https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/native-storage.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_platform,node_settings,node_ui,node_ui_server,node_hosted_auth,node_operator toneBlue
class node_api_client,node_auth,node_auth_store,node_secure_file,node_http,node_validation,node_motion_events,node_fcm,node_native_storage toneAmber
class node_network,node_camera,node_doorbell,node_owl toneMint
class node_camera_source,node_media_session,node_media_worker,node_media_output,node_recording_runtime,node_recording_coordinator,node_recording_delegate toneRose
class node_cloud toneIndigo
```

## Components

### Homebridge Platform

- [Platform runtime](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/platform.ts): `src/platform.ts`
- [Settings inventory](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/settings-inventory.ts): `src/settings-inventory.ts`
- [Settings UI](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/public/settings-ui.js): `src/homebridge-ui/public/settings-ui.js`
- [UI server](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/server.ts): `src/homebridge-ui/server.ts`
- [Hosted sign-in](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/homebridge-ui/hosted-auth-service.ts): `src/homebridge-ui/hosted-auth-service.ts`

### Blink Integration

- [Blink API client](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/client.ts): `src/blink-api/client.ts`
- [OAuth authentication](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/auth.ts): `src/blink-api/auth.ts`
- [Credential storage](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/auth-storage.ts): `src/blink-api/auth-storage.ts`
- [Secure file I/O](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/secure-json-file.ts): `src/blink-api/secure-json-file.ts`
- [HTTP transport](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/http.ts): `src/blink-api/http.ts`
- [Domain validation](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/domain-validation.ts): `src/blink-api/domain-validation.ts`
- [Motion decoding](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/motion-events.ts): `src/blink-api/motion-events.ts`
- [Push event source](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/fcm/source.ts): `src/blink-api/fcm/source.ts`
- [Native clip storage](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/blink-api/native-storage.ts): `src/blink-api/native-storage.ts`

### HomeKit Devices

- [Network controls](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/network.ts): `src/accessories/network.ts`
- [Camera accessories](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/camera.ts): `src/accessories/camera.ts`
- [Doorbell accessories](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/doorbell.ts): `src/accessories/doorbell.ts`
- [Owl accessories](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/owl.ts): `src/accessories/owl.ts`

### Media and Recording

- [Camera source](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/camera-source.ts): `src/accessories/camera-source.ts`
- [Media session](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/media-session.ts): `src/accessories/media-session.ts`
- [Codec worker](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/media-worker.ts): `src/accessories/media-worker.ts`
- [Media output](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/media-output.ts): `src/accessories/media-output.ts`
- [Recording runtime](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/native-recording-runtime.ts): `src/native-recording-runtime.ts`
- [Clip coordinator](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/native-recording-coordinator.ts): `src/native-recording-coordinator.ts`
- [Recording delegate](https://github.com/sealad886/homebridge-blink-cameras-new-api/blob/main/src/accessories/native-recording-delegate.ts): `src/accessories/native-recording-delegate.ts`

### Other components

- **Homebridge user**
- **Blink cloud**

## Connections

- Homebridge user → Settings UI: configures (evidence: `README.md`)
- Settings UI → UI server: submits settings (evidence: `src/homebridge-ui/server.ts`)
- UI server → Hosted sign-in: dispatches sign-in (evidence: `src/homebridge-ui/server.ts`)
- Hosted sign-in → Blink API client: starts login (evidence: `src/homebridge-ui/hosted-auth-service.ts`)
- Hosted sign-in → Credential storage: loads credentials (evidence: `src/homebridge-ui/hosted-auth-service.ts`)
- Credential storage → Secure file I/O: reads and writes (evidence: `src/blink-api/auth-storage.ts`)
- Platform runtime → Settings inventory: reads settings (evidence: `src/platform.ts`)
- Platform runtime → Blink API client: uses client (evidence: `src/platform.ts`)
- Platform runtime → Camera source: configures streaming (evidence: `src/platform.ts`)
- Platform runtime → Recording runtime: creates runtime (evidence: `src/platform.ts`)
- Blink API client → OAuth authentication: uses authentication (evidence: `src/blink-api/client.ts`)
- Blink API client → HTTP transport: sends requests (evidence: `src/blink-api/client.ts`)
- Blink API client → Domain validation: validates responses (evidence: `src/blink-api/client.ts`)
- HTTP transport → Blink cloud: requests API (evidence: `README.md`)
- Platform runtime → Network controls: exposes controls (evidence: `README.md`)
- Platform runtime → Camera accessories: exposes devices (evidence: `README.md`)
- Platform runtime → Doorbell accessories: exposes devices (evidence: `README.md`)
- Platform runtime → Owl accessories: exposes devices (evidence: `README.md`)
- Camera source → Blink API client: reads camera data (evidence: `src/accessories/camera-source.ts`)
- Camera source → Media session: creates sessions (evidence: `src/accessories/camera-source.ts`)
- Media session → Codec worker: uses worker (evidence: `src/accessories/media-session.ts`)
- Media session → Media output: writes output (evidence: `src/accessories/media-session.ts`)
- Codec worker → Media output: produces media (evidence: `src/accessories/media-worker.ts`)
- Recording runtime → Push event source: receives push events (evidence: `src/native-recording-runtime.ts`)
- Recording runtime → Motion decoding: decodes motion (evidence: `src/native-recording-runtime.ts`)
- Push event source → Motion decoding: provides notifications (evidence: `src/blink-api/fcm/source.ts`)
- Motion decoding → Clip coordinator: notifies (evidence: `src/blink-api/motion-events.ts`)
- Recording runtime → Clip coordinator: coordinates clips (evidence: `src/native-recording-runtime.ts`)
- Recording runtime → Recording delegate: uses delegate (evidence: `src/native-recording-runtime.ts`)
- Recording runtime → Native clip storage: retrieves clips (evidence: `src/native-recording-runtime.ts`)
