@@ -62,7 +62,6 @@ import {
6262} from "./interfaces/SendToDeviceAction" ;
6363import { EventDirection , EventKind , WidgetEventCapability } from "./models/WidgetEventCapability" ;
6464import { IRoomEvent } from "./interfaces/IRoomEvent" ;
65- import { IRoomAccountData } from "./interfaces/IRoomAccountData" ;
6665import {
6766 IGetOpenIDActionRequest ,
6867 IGetOpenIDActionResponseData ,
@@ -141,15 +140,15 @@ export class ClientWidgetApi extends EventEmitter {
141140 private cachedWidgetVersions : ApiVersion [ ] | null = null ;
142141 // contentLoadedActionSent is used to check that only one ContentLoaded request is send.
143142 private contentLoadedActionSent = false ;
144- private allowedCapabilities = new Set < Capability > ( ) ;
145- private allowedEvents : WidgetEventCapability [ ] = [ ] ;
143+ private readonly allowedCapabilities = new Set < Capability > ( ) ;
144+ private readonly allowedEvents : WidgetEventCapability [ ] = [ ] ;
146145 private isStopped = false ;
147146 private turnServers : AsyncGenerator < ITurnServer > | null = null ;
148147 private contentLoadedWaitTimer ?: ReturnType < typeof setTimeout > ;
149148 // Stores pending requests to push a room's state to the widget
150- private pushRoomStateTasks = new Set < Promise < void > > ( ) ;
149+ private readonly pushRoomStateTasks = new Set < Promise < void > > ( ) ;
151150 // Room ID → event type → state key → events to be pushed
152- private pushRoomStateResult = new Map < string , Map < string , Map < string , IRoomEvent > > > ( ) ;
151+ private readonly pushRoomStateResult = new Map < string , Map < string , Map < string , IRoomEvent > > > ( ) ;
153152 private flushRoomStateTask : Promise < void > | null = null ;
154153
155154 /**
@@ -162,8 +161,8 @@ export class ClientWidgetApi extends EventEmitter {
162161 */
163162 public constructor (
164163 public readonly widget : Widget ,
165- private iframe : HTMLIFrameElement ,
166- private driver : WidgetDriver ,
164+ iframe : HTMLIFrameElement ,
165+ private readonly driver : WidgetDriver ,
167166 ) {
168167 super ( ) ;
169168 if ( ! iframe ?. contentWindow ) {
@@ -175,7 +174,12 @@ export class ClientWidgetApi extends EventEmitter {
175174 if ( ! driver ) {
176175 throw new Error ( "Invalid driver" ) ;
177176 }
178- this . transport = new PostmessageTransport ( WidgetApiDirection . ToWidget , widget . id , iframe . contentWindow , window ) ;
177+ this . transport = new PostmessageTransport (
178+ WidgetApiDirection . ToWidget ,
179+ widget . id ,
180+ iframe . contentWindow ,
181+ globalThis ,
182+ ) ;
179183 this . transport . targetOrigin = widget . origin ;
180184 this . transport . on ( "message" , this . handleMessage . bind ( this ) ) ;
181185
@@ -230,7 +234,7 @@ export class ClientWidgetApi extends EventEmitter {
230234
231235 public async getWidgetVersions ( ) : Promise < ApiVersion [ ] > {
232236 if ( Array . isArray ( this . cachedWidgetVersions ) ) {
233- return Promise . resolve ( this . cachedWidgetVersions ) ;
237+ return this . cachedWidgetVersions ;
234238 }
235239
236240 try {
@@ -381,7 +385,7 @@ export class ClientWidgetApi extends EventEmitter {
381385 } ) ;
382386 }
383387
384- if ( ! request . data ?. uri || ! request . data ?. uri . toString ( ) . startsWith ( "https://matrix.to/#" ) ) {
388+ if ( ! request . data ?. uri . startsWith ( "https://matrix.to/#" ) ) {
385389 return this . transport . reply < IWidgetApiErrorResponseData > ( request , {
386390 error : { message : "Invalid matrix.to URI" } ,
387391 } ) ;
@@ -467,9 +471,9 @@ export class ClientWidgetApi extends EventEmitter {
467471
468472 this . driver . askOpenID ( observer ) ;
469473 }
474+
470475 private handleReadRoomAccountData ( request : IReadRoomAccountDataFromWidgetActionRequest ) : void | Promise < void > {
471- let events : Promise < IRoomAccountData [ ] > = Promise . resolve ( [ ] ) ;
472- events = this . driver . readRoomAccountData ( request . data . type ) ;
476+ const events = this . driver . readRoomAccountData ( request . data . type ) ;
473477
474478 if ( ! this . canReceiveRoomAccountData ( request . data . type ) ) {
475479 return this . transport . reply < IWidgetApiErrorResponseData > ( request , {
@@ -609,17 +613,17 @@ export class ClientWidgetApi extends EventEmitter {
609613 } ) ;
610614 }
611615
612- if ( ! isDelayedEvent ) {
613- sendEventPromise = this . driver . sendEvent (
616+ if ( isDelayedEvent ) {
617+ sendEventPromise = this . driver . sendDelayedEvent (
618+ request . data . delay ?? null ,
619+ request . data . parent_delay_id ?? null ,
614620 request . data . type ,
615621 request . data . content || { } ,
616622 request . data . state_key ,
617623 request . data . room_id ,
618624 ) ;
619625 } else {
620- sendEventPromise = this . driver . sendDelayedEvent (
621- request . data . delay ?? null ,
622- request . data . parent_delay_id ?? null ,
626+ sendEventPromise = this . driver . sendEvent (
623627 request . data . type ,
624628 request . data . content || { } ,
625629 request . data . state_key ,
@@ -635,17 +639,17 @@ export class ClientWidgetApi extends EventEmitter {
635639 } ) ;
636640 }
637641
638- if ( ! isDelayedEvent ) {
639- sendEventPromise = this . driver . sendEvent (
642+ if ( isDelayedEvent ) {
643+ sendEventPromise = this . driver . sendDelayedEvent (
644+ request . data . delay ?? null ,
645+ request . data . parent_delay_id ?? null ,
640646 request . data . type ,
641647 content ,
642648 null , // not sending a state event
643649 request . data . room_id ,
644650 ) ;
645651 } else {
646- sendEventPromise = this . driver . sendDelayedEvent (
647- request . data . delay ?? null ,
648- request . data . parent_delay_id ?? null ,
652+ sendEventPromise = this . driver . sendEvent (
649653 request . data . type ,
650654 content ,
651655 null , // not sending a state event
@@ -715,25 +719,25 @@ export class ClientWidgetApi extends EventEmitter {
715719
716720 private async handleSendToDevice ( request : ISendToDeviceFromWidgetActionRequest ) : Promise < void > {
717721 if ( ! request . data . type ) {
718- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
722+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
719723 error : { message : "Invalid request - missing event type" } ,
720724 } ) ;
721725 } else if ( ! request . data . messages ) {
722- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
726+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
723727 error : { message : "Invalid request - missing event contents" } ,
724728 } ) ;
725729 } else if ( typeof request . data . encrypted !== "boolean" ) {
726- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
730+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
727731 error : { message : "Invalid request - missing encryption flag" } ,
728732 } ) ;
729733 } else if ( ! this . canSendToDeviceEvent ( request . data . type ) ) {
730- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
734+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
731735 error : { message : "Cannot send to-device events of this type" } ,
732736 } ) ;
733737 } else {
734738 try {
735739 await this . driver . sendToDevice ( request . data . type , request . data . encrypted , request . data . messages ) ;
736- await this . transport . reply < ISendToDeviceFromWidgetResponseData > ( request , { } ) ;
740+ this . transport . reply < ISendToDeviceFromWidgetResponseData > ( request , { } ) ;
737741 } catch ( e ) {
738742 console . error ( "error sending to-device event" , e ) ;
739743 this . handleDriverError ( e , request , "Error sending event" ) ;
@@ -762,12 +766,12 @@ export class ClientWidgetApi extends EventEmitter {
762766
763767 private async handleWatchTurnServers ( request : IWatchTurnServersRequest ) : Promise < void > {
764768 if ( ! this . hasCapability ( MatrixCapabilities . MSC3846TurnServers ) ) {
765- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
769+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
766770 error : { message : "Missing capability" } ,
767771 } ) ;
768772 } else if ( this . turnServers ) {
769773 // We're already polling, so this is a no-op
770- await this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
774+ this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
771775 } else {
772776 try {
773777 const turnServers = this . driver . getTurnServers ( ) ;
@@ -776,14 +780,14 @@ export class ClientWidgetApi extends EventEmitter {
776780 // client isn't banned from getting TURN servers entirely
777781 const { done, value } = await turnServers . next ( ) ;
778782 if ( done ) throw new Error ( "Client refuses to provide any TURN servers" ) ;
779- await this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
783+ this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
780784
781785 // Start the poll loop, sending the widget the initial result
782786 this . pollTurnServers ( turnServers , value ) ;
783787 this . turnServers = turnServers ;
784788 } catch ( e ) {
785789 console . error ( "error getting first TURN server results" , e ) ;
786- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
790+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
787791 error : { message : "TURN servers not available" } ,
788792 } ) ;
789793 }
@@ -792,17 +796,17 @@ export class ClientWidgetApi extends EventEmitter {
792796
793797 private async handleUnwatchTurnServers ( request : IUnwatchTurnServersRequest ) : Promise < void > {
794798 if ( ! this . hasCapability ( MatrixCapabilities . MSC3846TurnServers ) ) {
795- await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
799+ this . transport . reply < IWidgetApiErrorResponseData > ( request , {
796800 error : { message : "Missing capability" } ,
797801 } ) ;
798802 } else if ( ! this . turnServers ) {
799803 // We weren't polling anyways, so this is a no-op
800- await this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
804+ this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
801805 } else {
802806 // Stop the generator, allowing it to clean up
803807 await this . turnServers . return ( undefined ) ;
804808 this . turnServers = null ;
805- await this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
809+ this . transport . reply < IWidgetApiAcknowledgeResponseData > ( request , { } ) ;
806810 }
807811 }
808812
@@ -1147,7 +1151,7 @@ export class ClientWidgetApi extends EventEmitter {
11471151 private async flushRoomState ( ) : Promise < void > {
11481152 try {
11491153 // Only send a single action once all concurrent tasks have completed
1150- do await Promise . all ( [ ... this . pushRoomStateTasks ] ) ;
1154+ do await Promise . all ( this . pushRoomStateTasks ) ;
11511155 while ( this . pushRoomStateTasks . size > 0 ) ;
11521156
11531157 const events : IRoomEvent [ ] = [ ] ;
@@ -1257,7 +1261,7 @@ export class ClientWidgetApi extends EventEmitter {
12571261 eventTypeMap . set ( rawEvent . type , stateKeyMap ) ;
12581262 }
12591263 if ( ! stateKeyMap . has ( rawEvent . type ) ) stateKeyMap . set ( rawEvent . state_key , rawEvent ) ;
1260- do await Promise . all ( [ ... this . pushRoomStateTasks ] ) ;
1264+ do await Promise . all ( this . pushRoomStateTasks ) ;
12611265 while ( this . pushRoomStateTasks . size > 0 ) ;
12621266 await this . flushRoomStateTask ;
12631267 }
0 commit comments