@@ -77,6 +77,10 @@ import {
77
77
IReadRelationsFromWidgetActionRequest ,
78
78
IReadRelationsFromWidgetResponseData ,
79
79
} from "./interfaces/ReadRelationsAction" ;
80
+ import {
81
+ IUserDirectorySearchFromWidgetActionRequest ,
82
+ IUserDirectorySearchFromWidgetResponseData ,
83
+ } from "./interfaces/UserDirectorySearchAction" ;
80
84
81
85
/**
82
86
* API handler for the client side of widgets. This raises events
@@ -619,6 +623,49 @@ export class ClientWidgetApi extends EventEmitter {
619
623
}
620
624
}
621
625
626
+ private async handleUserDirectorySearch ( request : IUserDirectorySearchFromWidgetActionRequest ) {
627
+ if ( ! this . hasCapability ( MatrixCapabilities . MSC3973UserDirectorySearch ) ) {
628
+ return this . transport . reply < IWidgetApiErrorResponseData > ( request , {
629
+ error : { message : "Missing capability" } ,
630
+ } ) ;
631
+ }
632
+
633
+ if ( typeof request . data . search_term !== 'string' ) {
634
+ return this . transport . reply < IWidgetApiErrorResponseData > ( request , {
635
+ error : { message : "Invalid request - missing search term" } ,
636
+ } ) ;
637
+ }
638
+
639
+ if ( request . data . limit !== undefined && request . data . limit < 0 ) {
640
+ return this . transport . reply < IWidgetApiErrorResponseData > ( request , {
641
+ error : { message : "Invalid request - limit out of range" } ,
642
+ } ) ;
643
+ }
644
+
645
+ try {
646
+ const result = await this . driver . searchUserDirectory (
647
+ request . data . search_term , request . data . limit ,
648
+ ) ;
649
+
650
+ return this . transport . reply < IUserDirectorySearchFromWidgetResponseData > (
651
+ request ,
652
+ {
653
+ limited : result . limited ,
654
+ results : result . results . map ( r => ( {
655
+ user_id : r . userId ,
656
+ display_name : r . displayName ,
657
+ avatar_url : r . avatarUrl ,
658
+ } ) ) ,
659
+ } ,
660
+ ) ;
661
+ } catch ( e ) {
662
+ console . error ( "error searching in the user directory" , e ) ;
663
+ await this . transport . reply < IWidgetApiErrorResponseData > ( request , {
664
+ error : { message : "Unexpected error while searching in the user directory" } ,
665
+ } ) ;
666
+ }
667
+ }
668
+
622
669
private handleMessage ( ev : CustomEvent < IWidgetApiRequest > ) {
623
670
if ( this . isStopped ) return ;
624
671
const actionEv = new CustomEvent ( `action:${ ev . detail . action } ` , {
@@ -650,6 +697,8 @@ export class ClientWidgetApi extends EventEmitter {
650
697
return this . handleUnwatchTurnServers ( < IUnwatchTurnServersRequest > ev . detail ) ;
651
698
case WidgetApiFromWidgetAction . MSC3869ReadRelations :
652
699
return this . handleReadRelations ( < IReadRelationsFromWidgetActionRequest > ev . detail ) ;
700
+ case WidgetApiFromWidgetAction . MSC3973UserDirectorySearch :
701
+ return this . handleUserDirectorySearch ( < IUserDirectorySearchFromWidgetActionRequest > ev . detail )
653
702
default :
654
703
return this . transport . reply ( ev . detail , < IWidgetApiErrorResponseData > {
655
704
error : {
0 commit comments