@@ -41,7 +41,7 @@ export const REDACT_ALLOW_ALL_KEYS: unique symbol = Symbol.for('all');
4141
4242// convinient wrapper to manage schema differences when working with same algorithms across different versions
4343export abstract class PersistentEventBase <
44- T extends RoomVersion = '11' ,
44+ Version extends RoomVersion = RoomVersion ,
4545 Type extends PduType = PduType ,
4646> {
4747 private _rejectedReason ?: string ;
@@ -50,7 +50,10 @@ export abstract class PersistentEventBase<
5050
5151 protected rawEvent : PduWithHashesAndSignaturesOptional ;
5252
53- constructor ( event : PduWithHashesAndSignaturesOptional ) {
53+ constructor (
54+ event : PduWithHashesAndSignaturesOptional ,
55+ public readonly version : Version ,
56+ ) {
5457 this . rawEvent = JSON . parse ( JSON . stringify ( event ) ) ;
5558 if ( this . rawEvent . signatures ) {
5659 this . signatures = this . rawEvent . signatures ;
@@ -141,14 +144,13 @@ export abstract class PersistentEventBase<
141144 throw new Error ( 'Event is not a power level event' ) ;
142145 }
143146
144- // room version dependent
145- abstract getAuthorizationEvents (
146- store : EventStore ,
147- ) : Promise < PersistentEventBase < T > [ ] > ;
147+ getAuthEventIds ( ) {
148+ return this . rawEvent . auth_events ;
149+ }
148150
149- abstract getPreviousEvents (
150- store : EventStore ,
151- ) : Promise < PersistentEventBase < T > [ ] > ;
151+ getPreviousEventIds ( ) {
152+ return this . rawEvent . prev_events ;
153+ }
152154
153155 isState ( ) {
154156 // spec wise this is the right way to check if an event is a state event
@@ -162,49 +164,55 @@ export abstract class PersistentEventBase<
162164 return ! this . isState ( ) ;
163165 }
164166
165- isTopicEvent ( ) : this is PersistentEventBase < T , 'm.room.topic' > {
167+ isTopicEvent ( ) : this is PersistentEventBase < Version , 'm.room.topic' > {
166168 return this . isState ( ) && this . type === 'm.room.topic' ;
167169 }
168170
169- isPowerLevelEvent ( ) : this is PersistentEventBase < T , 'm.room.power_levels' > {
171+ isPowerLevelEvent ( ) : this is PersistentEventBase <
172+ Version ,
173+ 'm.room.power_levels'
174+ > {
170175 return this . isState ( ) && this . type === 'm.room.power_levels' ;
171176 }
172177
173- isNameEvent ( ) : this is PersistentEventBase < T , 'm.room.name' > {
178+ isNameEvent ( ) : this is PersistentEventBase < Version , 'm.room.name' > {
174179 return this . isState ( ) && this . type === 'm.room.name' ;
175180 }
176181
177- isJoinRuleEvent ( ) : this is PersistentEventBase < T , 'm.room.join_rules' > {
182+ isJoinRuleEvent ( ) : this is PersistentEventBase < Version , 'm.room.join_rules' > {
178183 return this . isState ( ) && this . type === 'm.room.join_rules' ;
179184 }
180185
181- isMembershipEvent ( ) : this is PersistentEventBase < T , 'm.room.member' > {
186+ isMembershipEvent ( ) : this is PersistentEventBase < Version , 'm.room.member' > {
182187 return this . isState ( ) && this . type === 'm.room.member' ;
183188 }
184189
185- isCreateEvent ( ) : this is PersistentEventBase < T , 'm.room.create' > {
190+ isCreateEvent ( ) : this is PersistentEventBase < Version , 'm.room.create' > {
186191 return this . isState ( ) && this . type === 'm.room.create' ;
187192 }
188193
189- isServerAclEvent ( ) : this is PersistentEventBase < T , 'm.room.server_acl' > {
194+ isServerAclEvent ( ) : this is PersistentEventBase <
195+ Version ,
196+ 'm.room.server_acl'
197+ > {
190198 return this . isState ( ) && this . type === 'm.room.server_acl' ;
191199 }
192200
193201 isHistoryVisibilityEvent ( ) : this is PersistentEventBase <
194- T ,
202+ Version ,
195203 'm.room.history_visibility'
196204 > {
197205 return this . isState ( ) && this . type === 'm.room.history_visibility' ;
198206 }
199207
200208 isCanonicalAliasEvent ( ) : this is PersistentEventBase <
201- T ,
209+ Version ,
202210 'm.room.canonical_alias'
203211 > {
204212 return this . isState ( ) && this . type === 'm.room.canonical_alias' ;
205213 }
206214
207- isAliasEvent ( ) : this is PersistentEventBase < T , 'm.room.aliases' > {
215+ isAliasEvent ( ) : this is PersistentEventBase < Version , 'm.room.aliases' > {
208216 return this . isState ( ) && this . type === 'm.room.aliases' ;
209217 }
210218
@@ -412,15 +420,15 @@ export abstract class PersistentEventBase<
412420 return this . _rejectedReason ;
413421 }
414422
415- addPrevEvents ( events : PersistentEventBase < T > [ ] ) {
423+ addPrevEvents ( events : PersistentEventBase < Version > [ ] ) {
416424 this . rawEvent . prev_events . push ( ...events . map ( ( e ) => e . eventId ) ) ;
417425 if ( this . rawEvent . depth <= events [ events . length - 1 ] . depth ) {
418426 this . rawEvent . depth = events [ events . length - 1 ] . depth + 1 ;
419427 }
420428 return this ;
421429 }
422430
423- authedBy ( event : PersistentEventBase < T > ) {
431+ authedBy ( event : PersistentEventBase < Version > ) {
424432 this . rawEvent . auth_events . push ( event . eventId ) ;
425433 return this ;
426434 }
0 commit comments