@@ -18,6 +18,16 @@ import { ModuleApi } from "@matrix-org/react-sdk-module-api/lib/ModuleApi";
1818import { TranslationStringsObject } from "@matrix-org/react-sdk-module-api/lib/types/translations" ;
1919import { Optional } from "matrix-events-sdk" ;
2020import { _t } from "../languageHandler" ;
21+ import { DialogProps } from "@matrix-org/react-sdk-module-api/lib/components/DialogContent" ;
22+ import Modal from "../Modal" ;
23+ import { ModuleUiDialog } from "../components/views/dialogs/ModuleUiDialog" ;
24+ import React from "react" ;
25+ import { AccountCredentials } from "@matrix-org/react-sdk-module-api/lib/types/credentials" ;
26+ import * as Matrix from "matrix-js-sdk/src/matrix" ;
27+ import SdkConfig from "../SdkConfig" ;
28+ import PlatformPeg from "../PlatformPeg" ;
29+ import { doSetLoggedIn } from "../Lifecycle" ;
30+ import dispatcher from "../dispatcher/dispatcher" ;
2131
2232export class ProxiedModuleApi implements ModuleApi {
2333 private cachedTranslations : Optional < TranslationStringsObject > ;
@@ -33,4 +43,74 @@ export class ProxiedModuleApi implements ModuleApi {
3343 public translateString ( s : string , variables ?: Record < string , unknown > ) : string {
3444 return _t ( s , variables ) ;
3545 }
46+
47+ public openDialog < M extends object , P extends DialogProps = DialogProps , C extends React . Component = React . Component > ( title : string , body : ( props : P , ref : React . RefObject < C > ) => React . ReactNode ) : Promise < { didSubmit : boolean , model : M } > {
48+ return new Promise < { didSubmit : boolean , model : M } > ( ( resolve ) => {
49+ Modal . createTrackedDialog ( "ModuleDialog" , "" , ModuleUiDialog , {
50+ title : title ,
51+ contentFactory : body ,
52+ contentProps : < DialogProps > {
53+ moduleApi : this ,
54+ } ,
55+ } , "mx_CompoundDialog" ) . finished . then ( ( [ didSubmit , model ] ) => {
56+ resolve ( { didSubmit, model } ) ;
57+ } ) ;
58+ } ) ;
59+ }
60+
61+ public async registerAccount ( username : string , password : string , displayName ?: string ) : Promise < AccountCredentials > {
62+ const hsUrl = SdkConfig . get ( "validated_server_config" ) . hsUrl ;
63+ const client = Matrix . createClient ( { baseUrl : hsUrl } ) ;
64+ const req = {
65+ username,
66+ password,
67+ initial_device_display_name : SdkConfig . get ( "default_device_display_name" ) || PlatformPeg . get ( ) . getDefaultDeviceDisplayName ( ) ,
68+ auth : undefined ,
69+ inhibit_login : false ,
70+ } ;
71+ const creds = await ( client . registerRequest ( req ) . catch ( resp => client . registerRequest ( {
72+ ...req ,
73+ auth : {
74+ session : resp . data . session ,
75+ type : "m.login.dummy" ,
76+ } ,
77+ } ) ) ) ;
78+
79+ if ( displayName ) {
80+ const profileClient = Matrix . createClient ( {
81+ baseUrl : hsUrl ,
82+ userId : creds . user_id ,
83+ deviceId : creds . device_id ,
84+ accessToken : creds . access_token ,
85+ } ) ;
86+ await profileClient . setDisplayName ( displayName ) ;
87+ }
88+
89+ return {
90+ homeserverUrl : hsUrl ,
91+ userId : creds . user_id ,
92+ deviceId : creds . device_id ,
93+ accessToken : creds . access_token ,
94+ } ;
95+ }
96+
97+ public async useAccount ( credentials : AccountCredentials ) : Promise < void > {
98+ await doSetLoggedIn ( {
99+ ...credentials ,
100+ guest : false ,
101+ } , true ) ;
102+ }
103+
104+ public async switchToRoom ( roomId : string , andJoin ?: boolean ) : Promise < void > {
105+ dispatcher . dispatch ( {
106+ action : "view_room" ,
107+ room_id : roomId ,
108+ } ) ;
109+
110+ if ( andJoin ) {
111+ dispatcher . dispatch ( {
112+ action : "join_room" ,
113+ } ) ;
114+ }
115+ }
36116}
0 commit comments