99} from '../db/interfaces/MiningSources' ;
1010import RedisQueuedEmailsCache from '../services/cache/redis/RedisQueuedEmailsCache' ;
1111import { ContactFormat } from '../services/extractors/engines/FileImport' ;
12- import TaskManagerFile from '../services/tasks-manager/TaskManagerFile' ;
1312import TasksManager from '../services/tasks-manager/TasksManager' ;
13+ import TasksManagerFile from '../services/tasks-manager/TasksManagerFile' ;
1414import TasksManagerPST from '../services/tasks-manager/TasksManagerPST' ;
1515import { Task } from '../services/tasks-manager/types' ;
1616import { ImapAuthError } from '../utils/errors' ;
@@ -160,7 +160,7 @@ async function publishPreviouslyUnverifiedEmailsToCleaning(
160160
161161export default function initializeMiningController (
162162 tasksManager : TasksManager ,
163- tasksManagerFile : TaskManagerFile ,
163+ tasksManagerFile : TasksManagerFile ,
164164 tasksManagerPST : TasksManagerPST ,
165165 miningSources : MiningSources ,
166166 contactsDB : Contacts
@@ -293,31 +293,8 @@ export default function initializeMiningController(
293293 }
294294 } ,
295295
296- async getMiningSources ( _req : Request , res : Response , next : NextFunction ) {
297- const user = res . locals . user as User ;
298-
299- try {
300- const sourcesData = await miningSources . getByUser ( user . id ) ;
301-
302- const sources = sourcesData . map ( ( s ) => ( {
303- email : s . email ,
304- type : s . type ,
305- passive_mining : s . passive_mining
306- } ) ) ;
307-
308- return res . status ( 200 ) . send ( {
309- message : 'Mining sources retrieved successfully' ,
310- sources
311- } ) ;
312- } catch ( error ) {
313- res . status ( 500 ) ;
314- return next ( error ) ;
315- }
316- } ,
317-
318296 async startMining ( req : Request , res : Response , next : NextFunction ) {
319297 const user = res . locals . user as User ;
320-
321298 const {
322299 extractSignatures,
323300 miningSource : { email } ,
@@ -330,6 +307,8 @@ export default function initializeMiningController(
330307 extractSignatures : boolean ;
331308 } = req . body ;
332309
310+ user . email = email ; // used when user is not provided (edge function req)
311+
333312 const errors = [
334313 validateType ( 'email' , email , 'string' ) ,
335314 validateType ( 'boxes' , folders , 'string[]' ) ,
@@ -384,16 +363,30 @@ export default function initializeMiningController(
384363 } catch ( err ) {
385364 if (
386365 err instanceof Error &&
387- err . message . toLowerCase ( ) . startsWith ( 'invalid credentials' )
366+ 'textCode' in err &&
367+ err . textCode === 'CANNOT'
388368 ) {
389- return res . status ( 401 ) . json ( { message : err . message } ) ;
369+ return res . sendStatus ( 409 ) ;
390370 }
371+
391372 if (
392373 err instanceof Error &&
393- 'textCode' in err &&
394- err . textCode === 'CANNOT'
374+ err . message . includes ( 'Request failed with status code 401' )
395375 ) {
396- return res . sendStatus ( 409 ) ;
376+ res
377+ . status ( 401 )
378+ . send ( 'Failed to start fetching: Invalid credentials 401' ) ;
379+ }
380+
381+ if (
382+ err instanceof Error &&
383+ err . message . includes ( 'Request failed with status code 503' )
384+ ) {
385+ res
386+ . status ( 503 )
387+ . send (
388+ 'Failed to start fetching: Connection not available, please try again later 503'
389+ ) ;
397390 }
398391
399392 const newError = generateErrorObjectFromImapError ( err ) ;
0 commit comments