feat: add video streaming proxy and webhook cache invalidation

- Add /api/video/[id] route with Range header support for seeking
- Add /api/webhook route for Immich event-driven cache invalidation
- Add streamVideo() to ImmichClient with 206 Partial Content support
- Support album description overrides in gallery.yaml
- Add videoUrl() helper to lib/urls.ts
- Export cache.delete() and cache.clear() methods
This commit is contained in:
ralksta
2026-05-29 17:04:57 +02:00
parent ce7c1742be
commit e9063d3a71
7 changed files with 267 additions and 5 deletions

View File

@@ -21,11 +21,15 @@ export interface SubpageObjectValue {
subtitle?: string;
password?: string;
grid?: Partial<GridConfig>;
albums?: Array<string | Record<string, string | { title: string; password?: string }>>;
albums?: Array<
string | Record<string, string | { title: string; description?: string; password?: string }>
>;
sections?: Array<{
title: string;
description?: string;
albums: Array<string | Record<string, string | { title: string; password?: string }>>;
albums: Array<
string | Record<string, string | { title: string; description?: string; password?: string }>
>;
}>;
}
@@ -91,6 +95,7 @@ export interface AppConfig {
map: boolean;
transitions: boolean;
albumOverrides: Record<string, string>;
albumDescriptions: Record<string, string>;
albumPasswords: Record<string, string>;
cacheTtl: number;
rateLimitRpm: number;
@@ -100,18 +105,26 @@ export interface AppConfig {
export interface GalleryYaml {
hero?: string | string[];
albums?: string[];
albums?: Array<
string | Record<string, string | { title: string; description?: string; password?: string }>
>;
subpages?:
| Record<string, string[] | Array<string | Record<string, string>>>
| Array<{
name: string;
title?: string;
subtitle?: string;
albums?: Array<string | Record<string, string | { title: string; password?: string }>>;
albums?: Array<
| string
| Record<string, string | { title: string; description?: string; password?: string }>
>;
sections?: Array<{
title: string;
description?: string;
albums: Array<string | Record<string, string | { title: string; password?: string }>>;
albums: Array<
| string
| Record<string, string | { title: string; description?: string; password?: string }>
>;
}>;
password?: string;
grid?: {