export function app()

in server.ts [29:105]


 export function app(): express.Express {
   const server = express();
   const serverDistFolder = dirname(fileURLToPath(import.meta.url));
   const browserDistFolder = resolve(serverDistFolder, '../browser');
   const indexHtml = join(serverDistFolder, 'index.server.html');
 
   // Update this line to add your API_KEY if you are not using env variables
   const GEMINI_API_KEY = process.env['API_KEY'] || '';
   const commonEngine = new CommonEngine();
 
   const genAI = new GoogleGenerativeAI(GEMINI_API_KEY);
   const model = genAI.getGenerativeModel({ model: 'gemini-1.5-pro-latest' });
   model.generationConfig.responseMimeType = 'application/json';
   const DEFAULT_LANG = 'spanish';
 
   server.set('view engine', 'html');
   server.set('views', browserDistFolder);
 
   // Define Express Rest API endpoints
   server.get('/api/ask-gemini', async (req, res) => {
     if (!GEMINI_API_KEY) {
       return res.status(500).send({
         message: `Please provide an API key for Gemini, using default ${DEFAULT_LANG} translations.`,
       });
     }
 
     let language = req.query['lang'] ? req.query['lang'] as string : DEFAULT_LANG;
 
     try {
       const prompt = `Your task is to generate 25 vocabulary words for learning ${language}.
       Provide the ${language} translation, with 1 correct english translation and 2 incorrect english translations. 
       
       input: generate 25 vocaulary words for learning spanish
       output: [{"phrase": "hola", "options"=["goodbye", "wait", "hello"], "answer": "hello"}, {"phrase": "adios", "options":["good morning", "see you later", "car"], "answer": "see you later"}, {"phrase": "gracias", "options":["shoes", "thank you", "comb"], "answer": "thank you"}]
       `;
       const request: GenerateContentRequest = {
         contents: [{ role: 'user', parts: [{ text: prompt }] }],
         tools: [],
       };
       const results = await model.generateContent(request);
 
       return res
         .status(200)
         .send({ response: results.response.text(), usingDefault: false });
     } catch (e) {
       return res.status(500).send({
         message: `Unable to generate the practice questions for ${language}, using default ${DEFAULT_LANG} translations.`,
       });
     }
   });
 
   // Serve static files from /browser
   server.get(
     '*.*',
     express.static(browserDistFolder, {
       maxAge: '1y',
     })
   );
 
   // All regular routes use the Angular engine
   server.get('*', (req, res, next) => {
     const { protocol, originalUrl, baseUrl, headers } = req;
 
     commonEngine
       .render({
         bootstrap,
         documentFilePath: indexHtml,
         url: `${protocol}://${headers.host}${originalUrl}`,
         publicPath: browserDistFolder,
         providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
       })
       .then((html) => res.send(html))
       .catch((err) => next(err));
   });
 
   return server;
 }