@@ -141,38 +141,91 @@ function runAction(action: string, data: JSONValue): string | undefined {
141
141
return logout ( ) ;
142
142
143
143
// E2EE
144
- case 'start_crosssign' :
145
- return startCrossSigning ( data ) ;
144
+ case 'start_crosssign' : {
145
+ const userId = data ?. [ "userId" ] ;
146
+ return startCrossSigning ( userId ) ;
147
+ }
146
148
case 'accept_crosssign' :
147
149
return acceptCrossSigningRequest ( ) ;
148
150
case 'verify_crosssign_emoji' :
149
151
return verifyCrossSigningEmoji ( ) ;
150
152
case "verify_trusted_device" :
151
153
return verifyDeviceIsTrusted ( ) ;
152
- case "enable_dehydrated_device" :
153
- return enableDehydratedDevice ( data ) ;
154
- case "enable_key_backup" :
155
- return enableKeyBackup ( data ) ;
154
+ case "enable_dehydrated_device" : {
155
+ const passphrase = data ?. [ "key_backup_passphrase" ] ;
156
+ if ( ! passphrase ) {
157
+ throw new Error ( "'key_backup_passphrase' not in data for action 'enable_dehydrated_device'" ) ;
158
+ }
159
+ return enableDehydratedDevice ( passphrase ) ;
160
+ }
161
+ case "enable_key_backup" : {
162
+ const passphrase = data ?. [ "key_backup_passphrase" ] ;
163
+ if ( ! passphrase ) {
164
+ throw new Error ( "'key_backup_passphrase' not in data for action 'enable_key_backup'" ) ;
165
+ }
166
+ return enableKeyBackup ( passphrase ) ;
167
+ }
156
168
157
169
// Room
158
- case 'create_room' :
159
- return createRoom ( data ) ;
160
- case 'create_dm' :
161
- return createDm ( data ) ;
162
- case "change_room_history_visibility" :
163
- return changeRoomHistoryVisibility ( data ) ;
164
- case "open_room" :
165
- return openRoom ( data ) ;
170
+ case 'create_room' : {
171
+ const name = data ?. [ "name" ] ;
172
+ if ( ! name ) {
173
+ throw new Error ( "'name' not in data for action 'create_room'" ) ;
174
+ }
175
+ const topic = data ?. [ "topic" ] ;
176
+ return createRoom ( name , topic ) ;
177
+ }
178
+ case 'create_dm' : {
179
+ const userId = data ?. [ "userId" ] ;
180
+ if ( ! userId ) {
181
+ throw new Error ( "'id' not in data for action 'create_dm'" ) ;
182
+ }
183
+ return createDm ( userId ) ;
184
+ }
185
+ case "change_room_history_visibility" : {
186
+ const historyVisiblity = data [ "historyVisibility" ] ;
187
+ if ( ! historyVisiblity ) {
188
+ throw new Error ( "'historyVisibility' not in data for action 'change_room_history_visibility'" ) ;
189
+ }
190
+ const acceptedValues = [ "shared" , "invited" , "joined" ] ;
191
+ if ( ! acceptedValues . includes ( historyVisiblity ) ) {
192
+ throw new Error (
193
+ `historyVisibility should be one of ${ acceptedValues . join ( ", " ) } , but found ${ historyVisiblity } !` ) ;
194
+ }
195
+ return changeRoomHistoryVisibility ( historyVisiblity ) ;
196
+ }
197
+ case "open_room" : {
198
+ const name = data [ "name" ] ;
199
+ if ( ! name ) {
200
+ throw new Error ( "'name' not in data for action 'open_room'" ) ;
201
+ }
202
+ return openRoom ( name ) ;
203
+ }
166
204
case "accept_invite" :
167
205
return acceptInvite ( ) ;
168
- case "invite_user" :
169
- return inviteUser ( data ) ;
206
+ case "invite_user" : {
207
+ const userId = data [ "userId" ] ;
208
+ if ( ! userId ) {
209
+ throw new Error ( "'userId' not in data for action 'invite_user'" ) ;
210
+ }
211
+ return inviteUser ( userId ) ;
212
+ }
170
213
171
214
// Timeline
172
- case 'send_message' :
173
- return sendMessage ( data ) ;
174
- case "verify_message_in_timeline" :
175
- return verifyMessageInTimeline ( data ) ;
215
+ case 'send_message' : {
216
+ const message = data [ "message" ] ;
217
+ if ( ! message ) {
218
+ throw new Error ( "'message' not in data for action 'send_message'" ) ;
219
+ }
220
+ return sendMessage ( message ) ;
221
+ }
222
+ case "verify_message_in_timeline" : {
223
+ const message = data [ "message" ] ;
224
+ if ( ! message ) {
225
+ throw new Error ( "'message' not in data for action 'verify_message_in_timeline'" ) ;
226
+ }
227
+ return verifyMessageInTimeline ( message ) ;
228
+ }
176
229
case "verify_last_message_is_utd" :
177
230
return verifyLastMessageIsUTD ( ) ;
178
231
case "verify_last_message_is_trusted" :
@@ -182,10 +235,17 @@ function runAction(action: string, data: JSONValue): string | undefined {
182
235
case 'idle' :
183
236
idle ( ) ;
184
237
break ;
185
- case 'wait' :
186
- return wait ( data ) ;
187
- case "advance_clock" :
188
- return advanceClock ( data ) ;
238
+ case 'wait' : {
239
+ const time = data ?. [ "time" ] ;
240
+ return wait ( time ) ;
241
+ }
242
+ case "advance_clock" : {
243
+ const milliseconds = data [ "milliseconds" ] ;
244
+ if ( ! milliseconds ) {
245
+ throw new Error ( "'milliseconds' not in data for action 'advance_clock'" ) ;
246
+ }
247
+ return advanceClock ( milliseconds ) ;
248
+ }
189
249
case "clear_idb_storage" :
190
250
return clearIDBStorage ( ) ;
191
251
case "reload" :
0 commit comments