Files
tuliprox/shared/Cargo.toml
T
euzuandGitHub 91f6c57159 Fix/merge live and vod recording (#876)
feat(dvr)!: unify live and VOD/series recording into one recoverable DVR

Merge fix/merge_live_and_vod_recording into develop.

- One recording queue for scheduled live captures and VOD/series transfers,
  with a shared transition graph, provider-slot scheduling, resumable HTTP
  transfers (strong ETag / Last-Modified validation) and ffmpeg live capture.
- Crash-recoverable persistence: B+Tree repository with a journal-first
  recovery history; one file can be shared by several library entries.
- Admission checks quota and disk on request, at transfer start (real size)
  and before an entry attaches to a finished file; idempotent requests.
- REST is command-only; state reaches clients via owner-filtered WebSocket
  snapshots.
- Deleting a recording removes the file once no entry holds it; removing an
  entry keeps a finished file and cleans up orphaned partials.
- User ids derive from the configured username (web:/api:); the identity
  registry is gone.
- Spanish locale added; ru/ar completed; locale parity test.

BREAKING CHANGE: `video.download` is now `video.recording` (nested
`recording` keys move up, `download_priority`/`recording_priority` become
`priority`); old configs fail to load with a migration hint.
BREAKING CHANGE: `/api/v1/file/download*` and `/file/record` are removed in
favour of `/api/v1/recording/*`.
BREAKING CHANGE: `download.*` and `recording.write` permissions are replaced
by `recording.read|create|manage|delete`; tokens from before the change must
re-authenticate.
BREAKING CHANGE: the old recording queue does not migrate; existing
`identity_registry.json` is ignored.
2026-10-04 16:02:55 +02:00

49 lines
1.1 KiB
TOML

[package]
name = "shared"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
[lints]
workspace = true
[dependencies]
aes = "0.8.4"
bitflags = "2.13.1"
ciborium = "0.2.2"
hex = "0.4.3"
serde_tuple = "1.1.3"
serde.workspace = true
rmp-serde = "1.3.1"
regex.workspace = true
log.workspace = true
url.workspace = true
indexmap = { workspace = true, features = ["serde"] }
pest.workspace = true
pest_derive.workspace = true
serde_json.workspace = true
base64.workspace = true
blake3.workspace = true
fastrand = { workspace = true, features = ["js"] }
zeroize.workspace = true
chrono.workspace = true
chrono-tz = "0.10.4"
ctr = "0.9.2"
bytes.workspace = true
lz4_flex.workspace = true
brotli.workspace = true
deunicode.workspace = true
unicode-normalization.workspace = true
serde-saphyr.workspace = true
dashmap.workspace = true
paste.workspace = true
thiserror.workspace = true
strum_macros.workspace = true
strum.workspace = true
[target.'cfg(target_arch = "wasm32")'.dependencies]
js-sys = "0.3.104"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
getrandom = "0.4.3"