@@ -18,7 +18,7 @@ import {createEnum} from "./utils/enum.js";
18
18
import { orderedUnique } from "./utils/unique.js" ;
19
19
20
20
const ROOMALIAS_PATTERN = / ^ # ( [ ^ : ] * ) : ( .+ ) $ / ;
21
- const ROOMID_PATTERN = / ^ ! ( [ ^ : ] * ) : ( .+ ) $ / ;
21
+ const ROOMID_PATTERN = / ^ ! ( [ ^ : ] * ) ( : ( .+ ) ) ? $ / ; // As of room version 12, room IDs don't have domains
22
22
const USERID_PATTERN = / ^ @ ( [ ^ : ] + ) : ( .+ ) $ / ;
23
23
const EVENTID_PATTERN = / ^ $ ( [ ^ : ] + ) : ( .+ ) $ / ;
24
24
const GROUPID_PATTERN = / ^ \+ ( [ ^ : ] + ) : ( .+ ) $ / ;
@@ -92,7 +92,7 @@ export class Link {
92
92
static validateIdentifier ( identifier ) {
93
93
return ! ! (
94
94
USERID_PATTERN . exec ( identifier ) ||
95
- ROOMALIAS_PATTERN . exec ( identifier ) ||
95
+ ROOMALIAS_PATTERN . exec ( identifier ) ||
96
96
ROOMID_PATTERN . exec ( identifier ) ||
97
97
GROUPID_PATTERN . exec ( identifier )
98
98
) ;
@@ -166,12 +166,19 @@ export class Link {
166
166
}
167
167
168
168
constructor ( clientId , viaServers , identifierKind , localPart , server , webInstances , eventId ) {
169
- const servers = [ server ] ;
169
+ const servers = [ ] ;
170
+ if ( server !== undefined ) {
171
+ servers . push ( server ) ; // v12 rooms don't have domains, and therefore no server
172
+ }
170
173
servers . push ( ...viaServers ) ;
171
174
this . webInstances = webInstances ;
172
175
this . servers = orderedUnique ( servers ) ;
173
176
this . identifierKind = identifierKind ;
174
- this . identifier = `${ asPrefix ( identifierKind ) } ${ localPart } :${ server } ` ;
177
+ if ( identifierKind === IdentifierKind . RoomId && ! server ) {
178
+ this . identifier = `${ asPrefix ( identifierKind ) } ${ localPart } ` ;
179
+ } else {
180
+ this . identifier = `${ asPrefix ( identifierKind ) } ${ localPart } :${ server } ` ;
181
+ }
175
182
this . eventId = eventId ;
176
183
this . clientId = clientId ;
177
184
}
0 commit comments