@@ -34,9 +34,7 @@ import { MatrixClientPeg } from "../../MatrixClientPeg";
3434import ActiveRoomObserver from "../../ActiveRoomObserver" ;
3535import Modal from "../../Modal" ;
3636import WidgetOpenIDPermissionsDialog from "../../components/views/dialogs/WidgetOpenIDPermissionsDialog" ;
37- import WidgetCapabilitiesPromptDialog , {
38- getRememberedCapabilitiesForWidget ,
39- } from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog" ;
37+ import WidgetCapabilitiesPromptDialog from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog" ;
4038import { WidgetPermissionCustomisations } from "../../customisations/WidgetPermissions" ;
4139import { OIDCState , WidgetPermissionStore } from "./WidgetPermissionStore" ;
4240import { WidgetType } from "../../widgets/WidgetType" ;
@@ -50,6 +48,14 @@ import { Room } from "matrix-js-sdk";
5048
5149// TODO: Purge this from the universe
5250
51+ function getRememberedCapabilitiesForWidget ( widget : Widget ) : Capability [ ] {
52+ return JSON . parse ( localStorage . getItem ( `widget_${ widget . id } _approved_caps` ) || "[]" ) ;
53+ }
54+
55+ function setRememberedCapabilitiesForWidget ( widget : Widget , caps : Capability [ ] ) {
56+ localStorage . setItem ( `widget_${ widget . id } _approved_caps` , JSON . stringify ( caps ) ) ;
57+ }
58+
5359export class StopGapWidgetDriver extends WidgetDriver {
5460 private allowedCapabilities : Set < Capability > ;
5561
@@ -102,6 +108,7 @@ export class StopGapWidgetDriver extends WidgetDriver {
102108 }
103109 }
104110 // TODO: Do something when the widget requests new capabilities not yet asked for
111+ let rememberApproved = false ;
105112 if ( missing . size > 0 ) {
106113 try {
107114 const [ result ] = await Modal . createTrackedDialog (
@@ -113,12 +120,19 @@ export class StopGapWidgetDriver extends WidgetDriver {
113120 widgetKind : this . forWidgetKind ,
114121 } ) . finished ;
115122 ( result . approved || [ ] ) . forEach ( cap => allowedSoFar . add ( cap ) ) ;
123+ rememberApproved = result . remember ;
116124 } catch ( e ) {
117125 console . error ( "Non-fatal error getting capabilities: " , e ) ;
118126 }
119127 }
120128
121- return new Set ( iterableUnion ( allowedSoFar , requested ) ) ;
129+ const allAllowed = new Set ( iterableUnion ( allowedSoFar , requested ) ) ;
130+
131+ if ( rememberApproved ) {
132+ setRememberedCapabilitiesForWidget ( this . forWidget , Array . from ( allAllowed ) ) ;
133+ }
134+
135+ return allAllowed ;
122136 }
123137
124138 public async sendEvent (
@@ -136,6 +150,9 @@ export class StopGapWidgetDriver extends WidgetDriver {
136150 if ( stateKey !== null ) {
137151 // state event
138152 r = await client . sendStateEvent ( roomId , eventType , content , stateKey ) ;
153+ } else if ( eventType === EventType . RoomRedaction ) {
154+ // special case: extract the `redacts` property and call redact
155+ r = await client . redactEvent ( roomId , content [ 'redacts' ] ) ;
139156 } else {
140157 // message event
141158 r = await client . sendEvent ( roomId , eventType , content ) ;
0 commit comments