feat: quene

This commit is contained in:
hashbro
2026-09-01 05:09:00 +08:00
parent 337bf45c79
commit e23550e820
28 changed files with 969 additions and 234 deletions
+27 -6
View File
@@ -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