@@ -17,7 +17,9 @@ import {
1717 acceptKey ,
1818 directoryAcceptKey ,
1919 isDirectoryAutoAccepting ,
20+ isServerAutoAccepting ,
2021 autoRespondsPermission ,
22+ SERVER_ACCEPT_KEY ,
2123 sessionAutoAccept ,
2224} from "./permission-auto-respond"
2325
@@ -163,12 +165,18 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
163165 isAutoAcceptingDirectory ( directory : string ) {
164166 return selected ( ) . isAutoAcceptingDirectory ( directory )
165167 } ,
168+ isAutoAcceptingServer ( ) {
169+ return selected ( ) . isAutoAcceptingServer ( )
170+ } ,
166171 toggleAutoAccept ( sessionID : string , directory : string ) {
167172 selected ( ) . toggleAutoAccept ( sessionID , directory )
168173 } ,
169174 toggleAutoAcceptDirectory ( directory : string ) {
170175 selected ( ) . toggleAutoAcceptDirectory ( directory )
171176 } ,
177+ toggleAutoAcceptServer ( ) {
178+ selected ( ) . toggleAutoAcceptServer ( )
179+ } ,
172180 enableAutoAccept ( sessionID : string , directory : string ) {
173181 selected ( ) . enableAutoAccept ( sessionID , directory )
174182 } ,
@@ -277,6 +285,10 @@ function createServerPermissionState(input: { sdk: ServerSDK; sync: ServerSync }
277285 return isDirectoryAutoAccepting ( store . autoAccept , directory )
278286 }
279287
288+ function isAutoAcceptingServer ( ) {
289+ return isServerAutoAccepting ( store . autoAccept )
290+ }
291+
280292 function shouldAutoRespond ( permission : PermissionRequest , directory ?: string ) {
281293 return autoRespondsPermission ( store . autoAccept , sessions ( directory ) , permission , directory )
282294 }
@@ -334,6 +346,36 @@ function createServerPermissionState(input: { sdk: ServerSDK; sync: ServerSync }
334346 unsubscribe ( )
335347 } )
336348
349+ function enableServer ( ) {
350+ if ( meta . disposed ) return
351+ setStore (
352+ produce ( ( draft ) => {
353+ draft . autoAccept [ SERVER_ACCEPT_KEY ] = true
354+ } ) ,
355+ )
356+
357+ input . sdk . client . permission
358+ . list ( )
359+ . then ( ( x ) => {
360+ if ( meta . disposed || ! isAutoAcceptingServer ( ) ) return
361+ for ( const perm of x . data ?? [ ] ) {
362+ if ( ! perm ?. id ) continue
363+ const directory = sessions ( ) . find ( ( session ) => session . id === perm . sessionID ) ?. directory
364+ void respondPending ( perm , directory , isAutoAcceptingServer )
365+ }
366+ } )
367+ . catch ( ( ) => undefined )
368+ }
369+
370+ function disableServer ( ) {
371+ if ( meta . disposed ) return
372+ setStore (
373+ produce ( ( draft ) => {
374+ draft . autoAccept [ SERVER_ACCEPT_KEY ] = false
375+ } ) ,
376+ )
377+ }
378+
337379 function enableDirectory ( directory : string ) {
338380 if ( meta . disposed ) return
339381 const key = directoryAcceptKey ( directory )
@@ -423,6 +465,10 @@ function createServerPermissionState(input: { sdk: ServerSDK; sync: ServerSync }
423465 if ( meta . disposed ) return false
424466 return isAutoAcceptingDirectory ( directory )
425467 } ,
468+ isAutoAcceptingServer ( ) {
469+ if ( meta . disposed ) return false
470+ return isAutoAcceptingServer ( )
471+ } ,
426472 toggleAutoAccept ( sessionID : string , directory : string ) {
427473 if ( meta . disposed ) return
428474 if ( isAutoAccepting ( sessionID , directory ) ) {
@@ -440,6 +486,14 @@ function createServerPermissionState(input: { sdk: ServerSDK; sync: ServerSync }
440486 }
441487 enableDirectory ( directory )
442488 } ,
489+ toggleAutoAcceptServer ( ) {
490+ if ( meta . disposed ) return
491+ if ( isAutoAcceptingServer ( ) ) {
492+ disableServer ( )
493+ return
494+ }
495+ enableServer ( )
496+ } ,
443497 enableAutoAccept ( sessionID : string , directory : string ) {
444498 if ( meta . disposed ) return
445499 if ( isAutoAccepting ( sessionID , directory ) ) return
0 commit comments