— The list of GeoIP services is now built via the `onBuildServiceList` event of the `rover.geoip` module instead of hard-scanning the `lib/service/` directory.
— The built-in service (Sypex) is registered via the same event; custom services from other modules can be connected without modifying the module core (see README, section "Extending the service list").
— `Service::build()` has been simplified: it now accepts only the full class name (FQCN); support for short names has been removed.
— Services IpGeoBase (ipgeobase.ru) and FreeGeoIp (freegeoip.net) have been removed as both services have ceased operations and their public APIs are unavailable. Along with the classes, the unused options `ipgeobase-active` and `freegoip-active` have been removed. If needed, they can be connected as third-party services via `onBuildServiceList`.
— Fixed cache desynchronization in `Location::getInstance()`: `reload($ip)` with an explicitly specified IP now updates `$this->ip` and re-indexes the internal cache of instances, ensuring that a subsequent `getInstance()` call with the old IP does not return an object containing data for a different address.
— `Location::getData()` now writes the exception text to the `error` field on error instead of the static string `'error'`, simplifying diagnostics.
— All localization string references have been migrated from the deprecated `GetMessage()` to `\Bitrix\Main\Localization\Loc::getMessage()`.
— The minimum required PHP version has been raised to 8.1; the installation check (`install/index.php`) is now synchronized with the module's actual runtime gate (`include.php`). Previously, the installation check allowed PHP 7.2, although the module would not load on versions below 8.1.
— The `rover:geoip.user.location` component now retrieves the user's registration IP via the D7 API (`\Bitrix\Statistic\SessionTable`) instead of a direct SQL query to the `b_stat_session` table; if the "Web Analytics" module is not installed, the method correctly returns `null` instead of querying a non-existent table.
— Component `rover:geoip.user.location`: added permission check — only an administrator (`$USER->IsAdmin()`) can view and modify user data; otherwise, an exception with a message about insufficient permissions is thrown.
— Fixed an error during module update.