fromString static method
Implementation
static Future<Token> fromString(String string) async {
final components = string.split('.');
if (components.length < 3) {
throw ArgumentError('Invalid token string', 'string');
}
// Первый компонент должен быть вида "v4" (версия)
final versionStr = components.first;
if (!versionStr.startsWith('v')) {
throw FormatException(
'Token version must start with "v", got: $versionStr');
}
// Второй компонент должен быть purpose (local/public)
final purposeStr = components[1];
// Проверяем, что версия и purpose корректны
Version version;
try {
// Убираем префикс "v" из строки версии
final versionNum = versionStr.substring(1);
// Поддерживаем все версии: v2, v3, v4
version = Version.values.byName('v$versionNum');
} catch (e) {
throw FormatException('Unsupported token version: $versionStr');
}
Purpose purpose;
try {
purpose = Purpose.values.byName(purposeStr);
} catch (e) {
throw FormatException('Unsupported token purpose: $purposeStr');
}
final header = Header(
version: version,
purpose: purpose,
);
return Token(
header: header,
payload: decodePayload(components[2], header: header),
footer: components.length > 3 ? SafeBase64.decode(components[3]) : null,
);
}