fromString static method

Future<Token> fromString(
  1. String string
)

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,
  );
}