2760 Commits
Author SHA1 Message Date
euzu 918050a8d9 ci: bump version v3.3.174 v3.3.174 2026-10-30 23:09:38 +00:00
knylbyteandGitHub 4665f1eac3 feat: harden CI with privacy scanning and Dependabot (#953)
* feat (ci): add Gitleaks pre-push privacy scanning

* feat (ci): use dev-slim for workspace tests

* feat (ci): enable Dependabot for Docker and GitHub Actions

* feat (ci): harden build process

* fix (ci): preserve release versions and harden privacy checks

* fix (ci): scan full PR history with the official Gitleaks image

* build GitHub release bundles in CI

- master raises minor (patch 0), develop raises patch; merge release back into develop
- release bundles for linux musl x86_64/aarch64/armv7 and windows-gnu
- pin cross images via docker/cross, check armv7/windows in PR CI
- remove bin/release.sh, inc_version.sh, darwin cross script
- pre-push hook keeps FETCH_HEAD, fix docker context reuse

* build: add pre-merge-check and i18n-check targets

* - accept workspace dep versions in release back-merge
- harden release back-merge, i18n check and home-path rule
2026-10-31 00:07:34 +01:00
euzu 5cd1ea5395 ci: bump version v3.3.173 v3.3.173 2026-10-30 21:24:07 +00:00
euzuandGitHub 89a0f2f477 Feature/script egine (#954)
* Embedded rhai scripting for mapper
2026-10-30 22:23:08 +01:00
euzu eb32bef883 ci: bump version v3.3.172 v3.3.172 2026-10-30 18:41:10 +00:00
knylbyteandGitHub 3c1b6830a9 fix (hls): stabilize startup, provider reservations and recovery 2026-10-30 19:39:55 +01:00
knylbyte 815c8c9c44 fix (hls): refresh idle starts before terminal fallback
Refresh idle leases before deciding terminal playback, and keep evicted
windows retryable while the manifest refresh is debounced.

Avoid the global access-lease write lock on healthy completions.
Revalidate failed attempts after acquiring lease-store and session locks.

Cover idle recovery in all startup modes and cleanup lock contention.
2026-10-30 17:43:00 +01:00
knylbyte 7793426679 fix (ci): declare testkit MPEG-TS dev dependency 2026-10-30 17:14:54 +01:00
knylbyte f4442125ce fix (hls): preserve provider bindings during bounded recovery 2026-10-30 16:35:08 +01:00
knylbyte 9cd753fe9d fix (hls): avoid session read lock deadlocks during origin setup 2026-10-30 16:35:08 +01:00
knylbyte d7efa5ee49 test (hls): cover shared session priority preemption 2026-10-30 16:35:08 +01:00
knylbyte ac58589d4f fix (hls): prevent terminal leases from starting origin work 2026-10-30 16:35:08 +01:00
knylbyte 6a553dbb27 fix (hls): release failed starts and honor fallback configuration 2026-10-30 16:35:08 +01:00
knylbyte 65b198821d fix (hls): protect provider reservations during startup and retries 2026-10-30 16:35:08 +01:00
knylbyte 132731de06 fix (hls): recover failed pending and idle entry windows 2026-10-30 16:35:08 +01:00
knylbyte 119213da82 fix (hls): preserve resource identity and stabilize account reuse 2026-10-30 16:35:08 +01:00
knylbyte fb5cd007fe wip (hls): final cutover 2026-10-30 16:35:08 +01:00
euzu fd321cebe4 ci: bump version v3.3.171 v3.3.171 2026-10-30 14:02:38 +00:00
euzuandGitHub 3c4e18f996 fast get_series, memory-cache lists, consistent sort order (#952)
* fast get_series, memory-cache lists, consistent sort order

- skip series episode details on list decode and in memory cache
- serve Xtream lists from memory cache in canonical order
- keep sorted index valid after resolve writes
- cache verify_full per database identity
- resource proxy: single attempt, 15s timeout, 6 fetches per host
2026-10-30 15:00:49 +01:00
euzu a8653d099a ci: bump version v3.3.170 v3.3.170 2026-10-30 05:59:08 +00:00
euzuandGitHub e8a7f2629e Ship log records to an external syslog collector over UDP (#951)
* Ship log records to an external syslog collector over UDP

Add opt-in log.syslog (off by default): RFC 5424, RFC 3164 or NDJSON
datagrams, optional remote log level independent of stdout and the
Web-UI, bounded queue with drop counters, dedicated worker thread, live
reload without restart.

* fix filter parse long filter chains without a stack limit error

pest 2.9.4 probes the native stack before parsing and reports only the
mapped stack region on static musl (~128 KiB), so a filter chain of a few
dozen terms failed with "stack limit reached" and restarted the container.
pest 2.9.5 limits the probe to targets whose stack bounds it can determine.

The expr rule now reads a chain as a flat operand list and folds it from the
right, so a long AND/OR chain no longer nests the parser stack while
grouping, NOT binding and results stay identical to the previous grammar.
2026-10-30 06:57:14 +01:00
euzu eb3c3c6f6f ci: bump version v3.3.169 v3.3.169 2026-10-29 18:21:54 +00:00
euzuandGitHub 44d056b76d Fix/filter parse stack guard (#946)
* fix filter parse long filter chains without a stack limit error

pest 2.9.4 probes the native stack before parsing and reports only the
mapped stack region on static musl (~128 KiB), so a filter chain of a few
dozen terms failed with "stack limit reached" and restarted the container.
pest 2.9.5 limits the probe to targets whose stack bounds it can determine.

The expr rule now reads a chain as a flat operand list and folds it from the
right, so a long AND/OR chain no longer nests the parser stack while
grouping, NOT binding and results stay identical to the previous grammar.

* store the filter tree in an arena instead of nested boxes

Parsing, rendering, evaluating and dropping a filter no longer recurse per term,
so a long AND/OR chain no longer depends on the thread's stack.
2026-10-29 19:20:34 +01:00
euzu 648dc2c147 ci: bump version v3.3.168 v3.3.168 2026-10-28 21:29:48 +00:00
euzuandGitHub 6c238cf5a8 Feature/mapper built in functions (#945)
* title_case, slug, normalize_spaces, coalesce, and deunicode mapper functions added
2026-10-28 22:27:34 +01:00
euzu 44d40da526 ci: bump version v3.3.167 v3.3.167 2026-10-27 20:57:23 +00:00
euzuandGitHub 978b3bb4f0 api-proxy: configurable credential generation for new users (#942)
* api-proxy: configurable credential generation for new users
* fix: HLS test fail
2026-10-27 21:55:55 +01:00
euzu 63487beef9 ci: bump version v3.3.166 v3.3.166 2026-10-27 13:41:30 +00:00
euzuandGitHub ab4f41e517 fix: accept ranged VOD responses mislabeled text/html (#940)
* fix: accept ranged VOD responses mislabeled text/html

Skip the HTML content-type rejection for 206 and Content-Range
responses so valid media from providers with a wrong Content-Type
plays in reverse proxy mode.

* add playback_provider to bind provider profile

Lets mapped provider:// playback URLs resolve on inputs whose url and
aliases are plain http(s), fixing 503 "Provider config not found".
2026-10-27 14:39:12 +01:00
euzu c97a9cfbaf ci: bump version v3.3.165 v3.3.165 2026-10-27 12:45:58 +00:00
0892c9d9e6 Feature/hls origin telemetry (#939)
* hls: add origin transfer telemetry

Measure existing shared-HLS origin fetches (segment, map, key,
manifest) and expose per-input availability and transfer quality at
GET /api/v1/hls/origin-telemetry and via the MCP tool
get_hls_origin_telemetry. Off by default via
reverse_proxy.hls_origin_telemetry, configurable in the Web UI.

Also split the reverse proxy config page into tabs.

* hls: add origin transfer telemetry

Measure existing shared-HLS origin fetches (segment, map, key,
manifest) and expose per-input availability and transfer quality at
GET /api/v1/hls/origin-telemetry and via the MCP tool
get_hls_origin_telemetry. Off by default via
reverse_proxy.hls_origin_telemetry, configurable in the Web UI.

Also split the reverse proxy config page into tabs.

* hls: add origin transfer telemetry

Measure existing shared-HLS origin fetches (segment, map, key,
manifest) and expose per-input availability and transfer quality at
GET /api/v1/hls/origin-telemetry and via the MCP tool
get_hls_origin_telemetry. Off by default via
reverse_proxy.hls_origin_telemetry, configurable in the Web UI.

Also split the reverse proxy config page into tabs.

---------

Co-authored-by: euzu <euzu@proton.me>
2026-10-27 13:27:21 +01:00
euzu 7f01af1675 ci: bump version v3.3.164 v3.3.164 2026-10-27 09:18:43 +00:00
euzuandGitHub c0673ccec9 hls: do not require account credentials for token-only provider urls (#938)
The provider:// origin rewrite called get_user_info() before checking
whether a credential rewrite is needed. Token-only M3U accounts have no
username/password, so the media manifest failed with 503 before
2026-10-27 10:16:07 +01:00
euzu e4dc430424 ci: bump version v3.3.163 v3.3.163 2026-10-27 08:40:07 +00:00
euzuandGitHub ed264f0f4d keep distinct item identity and expose posters (#937)
Media-server items shared one UUID in duplicate_filter, so Jellyfin
catalogs collapsed to a single entry. Derive the UUID from the stable
media-server id. Set header.logo for movies, series and episodes so
Xtream and M3U clients show posters.
2026-10-27 09:37:31 +01:00
euzu d65409246c ci: bump version v3.3.162 v3.3.162 2026-10-24 14:36:00 +00:00
euzuandGitHub 0cb5e5e7df - Dependency upgrade (#934)
* - Dependency upgrade
- Slotfree HLS manifest fetch (partial)
2026-10-24 16:33:30 +02:00
euzu 7031ed2293 ci: bump version v3.3.161 v3.3.161 2026-10-24 07:52:11 +00:00
euzuandGitHub 7c82bf0b5d Feature/mcp (#933)
* Added
 - MCP server with Web UI config, stdio bridge and docs

Fixes
- GET /api/v1/stream-history rejected the `search_field` parameter the Web UI
  sends (400), because axum's Query cannot read repeated keys into a list.
  Add a FormQuery extractor (serde_html_form) and use it there.
- hls tests were flaky: HlsProxyManager::new() put every test manager's
  segment cache into the shared /tmp/tuliprox/cache/hls, and the orphan
  session cleanup of one manager deleted the files of parallel tests
  (surfacing as MissingTimestampAnchor / TerminalUnavailable). Each manager
  now owns a private cache directory that is removed on drop.

* fixed documentation: db dump paths and flag usage in operations-debugging

* Logs is a standalone Web UI view.

* mcp playlist iterator

* mcp playlist iterator

* media server import uses own categories

* mcp playlist iterator

* Playlit Update view layout changed
2026-10-24 09:49:44 +02:00
euzu 1ff90f0f7c ci: bump version v3.3.160 v3.3.160 2026-10-23 13:04:09 +00:00
euzu 9adb22d8c9 ci: bump version v3.3.159 2026-10-23 11:26:58 +00:00
euzuandGitHub d9597c46ee Fix/media server url (#931)
* media-server scheme or jellyfin_emby_plex

select_provider_stream_url now accepts a media-server:// reference when
the input type is Emby, Jellyfin or Plex. Other input types still reject
it.
2026-10-23 12:57:14 +02:00
knylbyteandGitHub 53da651ca3 del (test): unnecessary tests 2026-10-23 12:43:59 +02:00
knylbyteandGitHub 5bb4324702 Merge pull request #932 from knylbyte/fix/shls
fix (hls): stabilize shared playback and correct live reserve cutover
2026-10-23 12:16:35 +02:00
knylbyte 46cb2480de fix (chore): clippy 2026-10-23 11:53:23 +02:00
knylbyte b551ecc5ec fix (hls): retry reserved provider admission within manifest budget 2026-10-23 09:27:14 +02:00
knylbyte 1ef097cbd0 fix (hls): preserve live playback across origin binding changes 2026-10-23 00:22:09 +02:00
knylbyte 25335baa86 fix (hls): bound manifest retries and revalidate live playback entries 2026-10-22 18:52:53 +02:00
knylbyte ea206629b6 fix (hls): correct live reserve accounting and terminal cutover 2026-10-22 10:38:06 +02:00
knylbyte 3a451fc955 merge (hls): retain published manifests during live window transitions 2026-10-22 10:37:40 +02:00