diff --git a/Composer/packages/server/src/controllers/__tests__/project.test.ts b/Composer/packages/server/src/controllers/__tests__/project.test.ts index 89f10c661e..52aec78781 100644 --- a/Composer/packages/server/src/controllers/__tests__/project.test.ts +++ b/Composer/packages/server/src/controllers/__tests__/project.test.ts @@ -373,6 +373,7 @@ describe('publish luis files', () => { crossTrainConfig: {}, luFiles: [], }, + setTimeout: (msecs: number, callback: () => any): void => {}, } as Request; await ProjectController.build(mockReq, mockRes); expect(mockRes.status).toHaveBeenCalled(); diff --git a/Composer/packages/server/src/controllers/project.ts b/Composer/packages/server/src/controllers/project.ts index 5234672c4d..cbe7788f11 100644 --- a/Composer/packages/server/src/controllers/project.ts +++ b/Composer/packages/server/src/controllers/project.ts @@ -355,6 +355,11 @@ async function build(req: Request, res: Response) { const projectId = req.params.projectId; const user = await ExtensionContext.getUserFromRequest(req); + // Disable Express' built in 2 minute timeout for requests. Otherwise, large models may fail to build. + req.setTimeout(0, () => { + throw new Error('LUIS publish process timed out.'); + }); + const currentProject = await BotProjectService.getProjectById(projectId, user); if (currentProject !== undefined) { try {