UNPKG

mongodb-chatbot-server

Version:

A chatbot server for retrieval augmented generation (RAG).

60 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.retryAsyncOperation = exports.sendErrorResponse = exports.logRequest = exports.getRequestId = void 0; const mongodb_rag_core_1 = require("mongodb-rag-core"); const common_tags_1 = require("common-tags"); /** Checks for req-id Request Header. Returns an empty string if the header is not a truthy string. @param req */ function getRequestId(req) { const reqId = req.header("req-id"); if (!reqId) { return ""; } return reqId; } exports.getRequestId = getRequestId; const logRequest = ({ reqId, message, type = "info", }) => { mongodb_rag_core_1.logger[type]({ reqId, message }); }; exports.logRequest = logRequest; const sendErrorResponse = ({ reqId, res, httpStatus, errorMessage, errorDetails, }) => { (0, exports.logRequest)({ reqId, type: "error", message: (0, common_tags_1.stripIndent) `Responding with ${httpStatus} status and error message: ${errorMessage}. ${errorDetails ? `Error details: ${errorDetails}` : ""}`, }); if (!res.writableEnded) { return res.status(httpStatus).json({ error: errorMessage }); } }; exports.sendErrorResponse = sendErrorResponse; function retryAsyncOperation(promise, retries = 4, delayMs = 3000) { return new Promise((resolve, reject) => { const operation = promise; const timeout = new Promise((_, rejectTimeout) => { setTimeout(() => { rejectTimeout(new Error("Timed out")); }, delayMs); }); Promise.race([operation, timeout]) .then((result) => { resolve(result); }) .catch((error) => { if (retries === 0) { reject(error); } else { console.log(`Retrying... ${retries} attempts left`); console.log(promise); resolve(retryAsyncOperation(promise, retries - 1, delayMs)); } }); }); } exports.retryAsyncOperation = retryAsyncOperation; //# sourceMappingURL=utils.js.map