Skip to content

Version v1.0.0 - #10

Merged
alexhackney merged 1 commit into
mainfrom
feat/v1-native-api-rework
Aug 3, 2026
Merged

Version v1.0.0#10
alexhackney merged 1 commit into
mainfrom
feat/v1-native-api-rework

Conversation

@alexhackney

@alexhackney alexhackney commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Rebuild on Nimble's real native API for v1.0.0, add reconciler and test tooling

Every service now maps 1:1 to endpoints documented at https://softvelum.com/nimble/api/. The 0.x services for streams, sessions, DVR, pull, server, and cache were built against endpoints that do not exist in Nimble and could never work against a real server.

Breaking changes:

  • Require PHP 8.3+ and Laravel 12/13 (drop PHP 8.1/8.2, Laravel 10/11)
  • ServerService: server_status / reload_config / reload_ssl_certificates / sync_panel_settings / server_playlist_status; ServerStatusDto now carries real wire fields (Connections, OutRate, caches, SysInfo)
  • StreamService: rebuilt on live_streams_status with list/byApp/find/exists; publish/unpublish/statistics removed (no such endpoints)
  • SessionService: sessions + sessions/delete (multi-id terminate); find() replaces get()/statistics()
  • DvrService: dvr_status, MP4/SRT export, dvr/reload, cleanup_archive
  • CacheService: data_cache get_key/delete replaces fictional cache endpoints
  • Remove PullService/PullDto (pulling is WMSPanel territory), ArchiveDto, StreamStatsDto, StreamStatus/PublishAction enums, StreamPublished/ StreamUnpublished events; StreamExistsRule now validates live app/stream
  • StreamDto/SessionDto reworked to real wire fields; SessionTerminated carries int id; CacheCleared carries the cache key

New:

  • PublishControlService, ProtocolService (RTMP/MPEG-TS/SRT/RIST/NDI), IcecastService, Scte35Service; DvrStreamDto, PublishControlEntryDto
  • RestreamService::sync() reconciler: fingerprint-based converge (create missing, delete unwanted/duplicate, keep matches) with RestreamSyncResult and RestreamRuleCreated/RestreamRuleDeleted events; built for Nimble's non-persistent API rules, never touches WMSPanel rules
  • Nimble::fake(): endpoint-pattern stubs (method-specific, wildcards, closures), request recording, assertSent/assertRestreamCreated/etc.
  • Streaming DVR exports: NimbleClient::download() with Guzzle sink and per-call timeout (unlimited by default); exportMp4ToFile, exportSrt(Url)
  • AuthSchema enum; optional short-TTL response cache for stream/server status (nimble.cache, off by default)
  • Env-gated integration suite (composer test-integration, NIMBLE_TEST_HOST): read-only server checks plus a republish-rule lifecycle with cleanup

Fixes:

  • NimbleClient no longer retries twice over (middleware x manual loop could reach retry_times^2 attempts)
  • POST query params are no longer clobbered by auth params
  • nimble:status no longer crashes on values above the TB range

Chore:

  • CI matrix slimmed to L12/L13 x PHP 8.3-8.5, node24 action runtimes
  • .gitattributes export-ignore (dist installs no longer ship tests/.claude)
  • README rewritten and verified against the code by reflection; UPGRADE.md 0.x -> 1.0 guide; api-reference.md now documents only real endpoints; dead cache_* config keys removed

@alexhackney alexhackney closed this Aug 3, 2026
@alexhackney alexhackney reopened this Aug 3, 2026
@alexhackney
alexhackney merged commit f974485 into main Aug 3, 2026
18 checks passed
@alexhackney
alexhackney deleted the feat/v1-native-api-rework branch August 3, 2026 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant