shaykhnazar/hikvision-isapi
A Laravel/PHP client for Hikvision ISAPI devices, offering convenient access to camera and access-control endpoints. Simplifies authentication, HTTP requests, and common ISAPI operations while leaving room for custom device calls.
EventService::between() is a generator that pages through access events in a time window using a stable searchID, advancing by records actually returned. This directly supports backfilling events dropped by webhook delivery — a common failure mode in device-integration products.isRetryable(), statusCode(), responseBody(), DeviceUnreachableException, DeviceBusyException, and AuthenticationException on HTTP 401) lets the application make principled retry decisions instead of treating all device/API failures the same. This affects queue design, alerting, and operator runbooks.For executives: This release is a security-driven modernization plus a reliability upgrade. Laravel 11 support is dropped because unresolved framework advisories make it uninstallable under current Composer; teams on Laravel 11 stay on 1.x. For teams on Laravel 12/13, v2 adds event backfilling to recover dropped webhook data, structured retry/error handling, and a cleaner HTTP integration path. It is a beta, so the recommendation is to pilot and validate against real hardware before committing production roadmaps.
For engineering: v2.0.0-beta.1 introduces a breaking platform change — Laravel 11 is out, Laravel 12/13 and PHP 8.2–8.4 are in. The new EventService::between() generator reuses a searchID across pages and is the primitive for backfilling dropped events. search() now accepts a searchId for correct pagination. The exception taxonomy enables retry decisions via isRetryable(), statusCode(), and responseBody(), with dedicated unreachable/busy exceptions and 401 mapped to authentication failure. A custom Guzzle client can be injected. Quality gates improved substantially: 88 tests, PHPStan level 5 with no baseline, Pint, and cleared audit advisories. Do not treat the beta as production-ready until it has been exercised against a real terminal.
How can I help you explore Laravel packages today?