1
1
/*
2
- * Copyright 2020 - 2021 The Matrix.org Foundation C.I.C.
2
+ * Copyright 2020 - 2024 The Matrix.org Foundation C.I.C.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@ import { IContentLoadedActionRequest } from "./interfaces/ContentLoadedAction";
24
24
import { WidgetApiFromWidgetAction , WidgetApiToWidgetAction } from "./interfaces/WidgetApiAction" ;
25
25
import { IWidgetApiErrorResponseData } from "./interfaces/IWidgetApiErrorResponse" ;
26
26
import { Capability , MatrixCapabilities } from "./interfaces/Capabilities" ;
27
- import { IOpenIDUpdate , ISendEventDetails , WidgetDriver } from "./driver/WidgetDriver" ;
27
+ import { IOpenIDUpdate , ISendEventDetails , ISendFutureDetails , WidgetDriver } from "./driver/WidgetDriver" ;
28
28
import {
29
29
ICapabilitiesActionResponseData ,
30
30
INotifyCapabilitiesActionRequestData ,
@@ -477,21 +477,31 @@ export class ClientWidgetApi extends EventEmitter {
477
477
} ) ;
478
478
}
479
479
480
- const isState = request . data . state_key !== null && request . data . state_key !== undefined ;
481
- let sendEventPromise : Promise < ISendEventDetails > ;
482
- if ( isState ) {
483
- if ( ! this . canSendStateEvent ( request . data . type , request . data . state_key ! ) ) {
480
+ let sendEventPromise : Promise < ISendEventDetails | ISendFutureDetails > ;
481
+ if ( request . data . state_key !== undefined ) {
482
+ if ( ! this . canSendStateEvent ( request . data . type , request . data . state_key ) ) {
484
483
return this . transport . reply < IWidgetApiErrorResponseData > ( request , {
485
484
error : { message : "Cannot send state events of this type" } ,
486
485
} ) ;
487
486
}
488
487
489
- sendEventPromise = this . driver . sendEvent (
490
- request . data . type ,
491
- request . data . content || { } ,
492
- request . data . state_key ,
493
- request . data . room_id ,
494
- ) ;
488
+ if ( request . data . future_timeout === undefined && request . data . future_group_id === undefined ) {
489
+ sendEventPromise = this . driver . sendEvent (
490
+ request . data . type ,
491
+ request . data . content || { } ,
492
+ request . data . state_key ,
493
+ request . data . room_id ,
494
+ ) ;
495
+ } else {
496
+ sendEventPromise = this . driver . sendFuture (
497
+ request . data . future_timeout ?? null ,
498
+ request . data . future_group_id ?? null ,
499
+ request . data . type ,
500
+ request . data . content || { } ,
501
+ request . data . state_key ,
502
+ request . data . room_id ,
503
+ ) ;
504
+ }
495
505
} else {
496
506
const content = request . data . content as { msgtype ?: string } || { } ;
497
507
const msgtype = content [ 'msgtype' ] ;
@@ -501,18 +511,36 @@ export class ClientWidgetApi extends EventEmitter {
501
511
} ) ;
502
512
}
503
513
504
- sendEventPromise = this . driver . sendEvent (
505
- request . data . type ,
506
- content ,
507
- null , // not sending a state event
508
- request . data . room_id ,
509
- ) ;
514
+ if ( request . data . future_timeout === undefined && request . data . future_group_id === undefined ) {
515
+ sendEventPromise = this . driver . sendEvent (
516
+ request . data . type ,
517
+ content ,
518
+ null , // not sending a state event
519
+ request . data . room_id ,
520
+ ) ;
521
+ } else {
522
+ sendEventPromise = this . driver . sendFuture (
523
+ request . data . future_timeout ?? null ,
524
+ request . data . future_group_id ?? null ,
525
+ request . data . type ,
526
+ content ,
527
+ null , // not sending a state event
528
+ request . data . room_id ,
529
+ ) ;
530
+ }
510
531
}
511
532
512
533
sendEventPromise . then ( sentEvent => {
513
534
return this . transport . reply < ISendEventFromWidgetResponseData > ( request , {
514
535
room_id : sentEvent . roomId ,
515
- event_id : sentEvent . eventId ,
536
+ ...( "eventId" in sentEvent ? {
537
+ event_id : sentEvent . eventId ,
538
+ } : {
539
+ future_group_id : sentEvent . futureGroupId ,
540
+ send_token : sentEvent . sendToken ,
541
+ cancel_token : sentEvent . cancelToken ,
542
+ ...( "refreshToken" in sentEvent && { refresh_token : sentEvent . refreshToken } ) ,
543
+ } ) ,
516
544
} ) ;
517
545
} ) . catch ( e => {
518
546
console . error ( "error sending event: " , e ) ;
0 commit comments