11import { createLogger } from '@sim/logger'
2- import {
3- COPILOT_APPLICATION_DELEGATION_TTL_MS ,
4- createTrustedCopilotPrincipal ,
5- } from '@/lib/copilot/auth/application-delegation'
2+ import { createCopilotChatPrincipal } from '@/lib/copilot/auth/application-delegation'
63import { createCopilotChatFilePrincipal } from '@/lib/copilot/auth/file-delegation'
74import { buildVfsFolderPathMap , encodeVfsPathSegments } from '@/lib/copilot/vfs/path-utils'
85import { knowledgeDelegationPolicy } from '@/lib/knowledge/application/authorization'
@@ -17,9 +14,17 @@ import { parseWorkspaceFileFolderDisplayPath } from '@/lib/workspace-files/folde
1714const logger = createLogger ( 'ChatFolderContext' )
1815
1916const FOLDER_DOMAINS = {
20- workflow : { root : 'workflows' , policy : workflowDelegationPolicy } ,
21- table : { root : 'tables' , policy : tableDelegationPolicy } ,
22- knowledge_base : { root : 'knowledgebases' , policy : knowledgeDelegationPolicy } ,
17+ workflow : {
18+ root : 'workflows' ,
19+ policy : workflowDelegationPolicy ,
20+ list : listWorkflowFolders ,
21+ } ,
22+ table : { root : 'tables' , policy : tableDelegationPolicy , list : listTableFoldersUseCase } ,
23+ knowledge_base : {
24+ root : 'knowledgebases' ,
25+ policy : knowledgeDelegationPolicy ,
26+ list : listKnowledgeFolders ,
27+ } ,
2328} as const
2429
2530type FolderDomain = keyof typeof FOLDER_DOMAINS
@@ -35,24 +40,12 @@ export function createChatFolderResolver(userId: string, workspaceId: string, ch
3540 const filePaths = new Map < string , Promise < string | null > > ( )
3641
3742 async function loadPaths ( domain : FolderDomain ) : Promise < Map < string , string > > {
38- const principal = createTrustedCopilotPrincipal (
39- { userId, workspaceId, chatId, delegationId : `copilot-chat:${ chatId ?? workspaceId } ` } ,
40- {
41- audience : FOLDER_DOMAINS [ domain ] . policy . audience ,
42- ttlMs : COPILOT_APPLICATION_DELEGATION_TTL_MS ,
43- }
43+ const principal = createCopilotChatPrincipal (
44+ { userId, workspaceId, chatId } ,
45+ FOLDER_DOMAINS [ domain ] . policy . audience
4446 )
4547 const input = { workspaceId, sortBy : 'name' , sortOrder : 'asc' } as const
46- const { folders } = await ( ( ) => {
47- switch ( domain ) {
48- case 'workflow' :
49- return listWorkflowFolders . execute ( { principal, input } )
50- case 'table' :
51- return listTableFoldersUseCase . execute ( { principal, input } )
52- case 'knowledge_base' :
53- return listKnowledgeFolders . execute ( { principal, input } )
54- }
55- } ) ( )
48+ const { folders } = await FOLDER_DOMAINS [ domain ] . list . execute ( { principal, input } )
5649 return buildVfsFolderPathMap (
5750 folders . map ( ( folder ) => ( {
5851 folderId : folder . id ,
@@ -93,7 +86,7 @@ export function createChatFolderResolver(userId: string, workspaceId: string, ch
9386 }
9487 return pending
9588 }
96- const domains : FolderDomain [ ] = [ 'workflow' , 'table' , 'knowledge_base' ]
89+ const domains = Object . keys ( FOLDER_DOMAINS ) as FolderDomain [ ]
9790 const results = await Promise . allSettled (
9891 domains . map ( async ( domain ) => {
9992 const path = await folderPath ( folderId , domain )
0 commit comments