@@ -33,9 +33,7 @@ import { MatrixClientPeg } from "../../MatrixClientPeg";
3333import ActiveRoomObserver from "../../ActiveRoomObserver" ;
3434import Modal from "../../Modal" ;
3535import WidgetOpenIDPermissionsDialog from "../../components/views/dialogs/WidgetOpenIDPermissionsDialog" ;
36- import WidgetCapabilitiesPromptDialog , {
37- getRememberedCapabilitiesForWidget ,
38- } from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog" ;
36+ import WidgetCapabilitiesPromptDialog from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog" ;
3937import { WidgetPermissionCustomisations } from "../../customisations/WidgetPermissions" ;
4038import { OIDCState , WidgetPermissionStore } from "./WidgetPermissionStore" ;
4139import { WidgetType } from "../../widgets/WidgetType" ;
@@ -48,6 +46,14 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event";
4846
4947// TODO: Purge this from the universe
5048
49+ function getRememberedCapabilitiesForWidget ( widget : Widget ) : Capability [ ] {
50+ return JSON . parse ( localStorage . getItem ( `widget_${ widget . id } _approved_caps` ) || "[]" ) ;
51+ }
52+
53+ function setRememberedCapabilitiesForWidget ( widget : Widget , caps : Capability [ ] ) {
54+ localStorage . setItem ( `widget_${ widget . id } _approved_caps` , JSON . stringify ( caps ) ) ;
55+ }
56+
5157export class StopGapWidgetDriver extends WidgetDriver {
5258 private allowedCapabilities : Set < Capability > ;
5359
@@ -100,6 +106,7 @@ export class StopGapWidgetDriver extends WidgetDriver {
100106 }
101107 }
102108 // TODO: Do something when the widget requests new capabilities not yet asked for
109+ let rememberApproved = false ;
103110 if ( missing . size > 0 ) {
104111 try {
105112 const [ result ] = await Modal . createTrackedDialog (
@@ -111,12 +118,19 @@ export class StopGapWidgetDriver extends WidgetDriver {
111118 widgetKind : this . forWidgetKind ,
112119 } ) . finished ;
113120 ( result . approved || [ ] ) . forEach ( cap => allowedSoFar . add ( cap ) ) ;
121+ rememberApproved = result . remember ;
114122 } catch ( e ) {
115123 console . error ( "Non-fatal error getting capabilities: " , e ) ;
116124 }
117125 }
118126
119- return new Set ( iterableUnion ( allowedSoFar , requested ) ) ;
127+ const allAllowed = new Set ( iterableUnion ( allowedSoFar , requested ) ) ;
128+
129+ if ( rememberApproved ) {
130+ setRememberedCapabilitiesForWidget ( this . forWidget , Array . from ( allAllowed ) ) ;
131+ }
132+
133+ return allAllowed ;
120134 }
121135
122136 public async sendEvent ( eventType : string , content : any , stateKey : string = null ) : Promise < ISendEventDetails > {
0 commit comments