diff --git a/lib/src/utils/matrix_id_string_extension.dart b/lib/src/utils/matrix_id_string_extension.dart index 296a780..685e12e 100644 --- a/lib/src/utils/matrix_id_string_extension.dart +++ b/lib/src/utils/matrix_id_string_extension.dart @@ -9,8 +9,14 @@ extension MatrixIdExtension on String { if (!VALID_SIGILS.contains(substring(0, 1))) { return false; } + // event IDs do not have to have a domain + if (substring(0, 1) == '\$') { + return true; + } + // all other matrix IDs have to have a domain final parts = substring(1).split(':'); - if (parts.length != 2 || parts[0].isEmpty || parts[1].isEmpty) { + // the localpart can be an empty string, e.g. for aliases + if (parts.length != 2 || parts[1].isEmpty) { return false; } return true; diff --git a/test/matrix_id_string_extension_test.dart b/test/matrix_id_string_extension_test.dart index 5cacdd8..0ee37c3 100644 --- a/test/matrix_id_string_extension_test.dart +++ b/test/matrix_id_string_extension_test.dart @@ -29,9 +29,10 @@ void main() { expect('!test:example.com'.isValidMatrixId, true); expect('+test:example.com'.isValidMatrixId, true); expect('\$test:example.com'.isValidMatrixId, true); + expect('\$testevent'.isValidMatrixId, true); expect('test:example.com'.isValidMatrixId, false); expect('@testexample.com'.isValidMatrixId, false); - expect('@:example.com'.isValidMatrixId, false); + expect('@:example.com'.isValidMatrixId, true); expect('@test:'.isValidMatrixId, false); expect(mxId.sigil, '@'); expect('#test:example.com'.sigil, '#');