BetterFrame/server/src/plugins
Mitchell R a9484d1dd7
feat(cloud-cameras): type=cloud + bidirectional sync + PG default
Cloud cameras are now a distinct type ('cloud') managed entirely by
sync. Bidirectional: cameras added in vendor cloud appear automatically,
removed cameras get deleted. Cloud cameras and their entities are
read-only in admin UI — no manual editing.

- Camera type CHECK widened to include 'cloud'
- New columns: cloud_account_id, cloud_vendor_camera_id,
  cloud_stream_url, cloud_stream_type
- Repo: upsertCloudCamera, deleteCloudCamerasNotIn,
  listCloudCamerasByAccount
- Sync replaces import: full reconciliation per account
- Hik-Connect: fetch HLS preview URLs via previewURLs endpoint
- Tuya: fetch stream URLs during sync (not just on demand)
- Kiosk API: GET /api/kiosk/cameras/:id/stream returns fresh
  relay URL from vendor (session-based URLs expire)
- Cloud cameras show read-only detail page with cloud badge
- Coolify compose: postgres 18 as default, BF_DB=postgres,
  server depends_on postgres healthy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 11:36:49 +02:00
..
service-admin-http feat(cloud-cameras): type=cloud + bidirectional sync + PG default 2026-05-23 11:36:49 +02:00
service-api-http feat(cloud-cameras): type=cloud + bidirectional sync + PG default 2026-05-23 11:36:49 +02:00
service-coordinator-ws feat(db): full async Repository conversion for PostgreSQL support 2026-05-23 02:07:44 +02:00
service-store feat(cloud-cameras): type=cloud + bidirectional sync + PG default 2026-05-23 11:36:49 +02:00